Вопросы к кодерам и мододелам

Тема в разделе "Игровое редактирование", создана пользователем Фрэгл, 20 ноя 2011.

  1. STaJIKeR

    STaJIKeR Капо

    А разве HealthMax еще используется?

    У меня вообще по другому функция отхила работает, но и то, берет ХП босса из defaultproperties.
    Если мне память не изменяет, тут про это писал Essence (именно про изменение "отхила" босса с коленок).
    А насчет модификации ХП мобов, поковыряй MonsterConfig, возможно в его исходниках ты найдешь способ модификации ХП от кол-ва игроков.

    Код:
    simulated function PostBeginPlay()
    {
    
        Health = HPatHealth;
        Super.PostBeginPlay();
    }
    Код:
    simulated function Timer()
    {
        Super.Timer();
        HealingLevels[0] = HPatHealth * 0.75;
        //log("HealingLevels[0] = "$HealingLevels[0]);     //Отлавливаем первое колено
        HealingLevels[1] = HPatHealth * 0.6;
        //log("HealingLevels[1] = "$HealingLevels[1]);     //Отлавливаем второе колено
        HealingLevels[2] = HPatHealth * 0.45;
        //log("HealingLevels[2] = "$HealingLevels[2]);     //Отлавливаем третье колено
        //HealingLevels[3] = HPatHealth * 0.3;
        //log("HealingLevels[3] = "$HealingLevels[3]);     //Отлавливаем четвертое колено
        HealingAmount = HPatHealth * 0.85;              //Умножаем хп босса на 0.85, при 1 игроке ~ 127 500 (HPatHealth = 150 000)
        //log("PatHealth = "$HPatHealth);                 //Отлавливаем кол-во жизней босса
        //log("HealingAmount = "$HealingAmount);         //Отлавливаем кол-во хила за шприц
    }
    Код:
    defaultproperties
    {
    HPatHealth=150000
    }
     
  2. CFH

    CFH Новенький

    Во-первых, это делалось для BossSquad'а (BS), поэтому, чтоб не выделываться была оставлена переменная HealthMax (есть скейлинг в BS для нее и пусть будет, не мешает по крайней мере). Но в то же время, для BS скейлинг хп патра делался немного по-другому:
    Код:
    simulated function PostBeginPlay()
    {
        KFGT = KFGameType(Level.Game);
       
        Default.Health = PatHealth;
        Default.HealthMax = PatHealth;
    
        Super.PostBeginPlay();
    
        Default.HealingAmount = PatHealingAmount * PatHealth;
    
        HealingLevels[0] = PatHealingLevels[0] * NumPlayersHealthModifer() * DifficultyHealthModifer() * PatHealth;
        HealingLevels[1] = PatHealingLevels[1] * NumPlayersHealthModifer() * DifficultyHealthModifer() * PatHealth;
        HealingLevels[2] = PatHealingLevels[2] * NumPlayersHealthModifer() * DifficultyHealthModifer() * PatHealth;
    }
    Во-вторых, я сомневаюсь, что предложенный вариант вообще будет работать корректно (в плане кол-ва отхилки и хп падения на колено) по одной простой причине: скейлинг Health делается в Super.PostBeginPlay(), как и присвоение HealingAmount и HealingLevels, но последние 2 переменные у дефолтного петровича напрямую зависели от Health. Здесь же после присвоения Health = HPatHealth в таймере делается переприсвоение HealingAmount и HealingLevels, но через HPatHealth, а не Health. Соответственно, HealingAmount и HealingLevels высчитываются не от максимального текущего хп патра с учетом игроков и сложности игры. Но, вполне возможно, это учтено где-нибудь дальше по коду.
     
  3. STaJIKeR

    STaJIKeR Капо

    Интересует вопрос:
    Как показать клиенту в статистике его ID?
     
  4. Flame

    Flame -Заслуженый кодер форума-

    Ну краткий ответ:
    Завести переменную (например, в SRPlayerReplicationInfo), на сервере закинуть в неё значение ID, на клиент реплицировать. И тащить это значение

    Полный ответ: Даст кто-то другой или я, когда появится время)
     
  5. STaJIKeR

    STaJIKeR Капо

    Появилось время?
     
  6. Flame

    Flame -Заслуженый кодер форума-

    Да ты издеваешься
    Меня тут народ месяцев 5 ждёт, а сейчас к тому же весна)
    Думаю тебе не стоит на меня надеяться - тут всё просто, попинай кого-нибудь
     
    Последнее редактирование: 16 апр 2018
  7. Flame

    Flame -Заслуженый кодер форума-

    А с другой стороны - могу же скопипастить
    Код:
    class SRPlayerReplicationInfo extends KFPlayerReplicationInfo;
    
    var string PlayerHash;
    
    replication
    {
    	reliable if (bNetDirty && Role == Role_Authority)
    		PlayerHash;
    }
    
    simulated function PostBeginPlay()
    {
    	local PlayerController PC;
    	SetTimer(1.0,true);
    	Super.PostBeginPlay();
    }
    
    simulated function Timer()
    {
    	if(Role==Role_Authority && PlayerController(Owner)!=none && Len(PlayerHash)!=17 && PlayerID>0)
    		PlayerHash=PlayerController(Owner).GetPlayerIDHash();
    	Super.Timer();
    }
    
    Например, так

    Ну и в SRStatList добавляй элемент с этим хэшем.
    Код:
    StatProgress[номер]=SRPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo).PlayerHash;
    
    Ну теперь точно должен смочь)
     
    STaJIKeR нравится это.
  8. STaJIKeR

    STaJIKeR Капо

    SRStatList давно готов со своей переменной, большое спасибо тебе добрый дядька флейм)
     
  9. Essence

    Essence Солдат

    Можно ж куда проще.
    Код:
    StatProgress[Номер]=L.PlayerIDHash;
    Где L - это ClientPerkRepLink.
     
    Flame и STaJIKeR нравится это.
  10. Flame

    Flame -Заслуженый кодер форума-

    А ведь да) Я и забыл что там хранится хэш))

    Essence крут))
     
  11. Flame

    Flame -Заслуженый кодер форума-

    Хотяяя))
    А точно есть такая переменная в ClientPerkRepLink? В стандартной версии SP?
    Вроде нету)
     
  12. Essence

    Essence Солдат

    Да. Оказывается сам давным давно добавлял.
    Код:
    Class ClientPerkRepLink extends LinkedReplicationInfo
        DependsOn(SRHUDKillingFloor);
    
    ...
    var string PlayerIDHash;
    ...
    
    replication
    {
        ...
        reliable if(Role==ROLE_Authority && bNetOwner)
            PlayerIDHash;
        ...
    }

    Код:
    Class ServerStStats extends SRStatsBase;
    
    function PreBeginPlay()
    {
        local LinkedReplicationInfo L;
        PlayerOwner=KFPlayerController(Owner);
        if(Rep==None)
        {
            Rep=Spawn(Class'ClientPerkRepLink', Owner);
            Rep.StatObject=Self;
            Rep.PlayerIDHash=PlayerOwner.GetPlayerIDHash();
            ...
        }
        Super.PreBeginPlay();
    }
    Я почему-то подумал, что эта переменная изначально там была.
     
    Flame нравится это.
  13. STaJIKeR

    STaJIKeR Капо

    Приветствую, может кто поделиться исходниками UGP? Был бы очень признателен.
     
  14. mantis

    mantis Соучастник

    Здравствуйте

    Подскажите, как запретить нажимать ESC и как следствие закрывать диалог по нажатию этой клавиши для диалога из http://killingfloor.ru/xforum/threads/avtokik-za-0-id-i-za-nekorrektnyj-nik.3260/:

    Код:
    class ZeroIDMessage extends UT2K4GUIPage;
    var int tickNumber;
    var string forumLink;
    
    event Opened(GUIComponent Sender)
    {
        tickNumber=0;
        SetTimer(10,true);
        Super.Opened(Sender);
    }
    
    event HandleParameters(string Param1, string Param2)
    {
        forumLink=Param1;
        Super.HandleParameters(Param1,Param2);
    }
    
    event Timer()
    {
        if(tickNumber>=3)
            MyOnClose();
        tickNumber++;
    }
    
    function bool DisconnectClick(GUIComponent Sender)
    {
        local GUIController C;
        C = Controller;
        C.ViewportOwner.Console.ConsoleCommand("Disconnect");
        return true;
    }
    
    function bool VizitForumClick(GUIComponent Sender)
    {
        local GUIController C;
        C = Controller;
        C.ViewportOwner.Console.ConsoleCommand("start"@forumLink);
        return true;
    }
    
    function MyOnClose(optional bool bCanceled)
    {
        DisconnectClick(self);
    }
    
    defaultproperties
    {
        bRenderWorld=True
        bAllowedAsLast=True
        OnClose=ZeroIDMessage.MyOnClose
        Begin Object Class=FloatingImage Name=FloatingFrameBackground
            Image=Texture'2K4Menus.BkRenders.Bgndtile'
            DropShadow=None
            ImageStyle=ISTY_Stretched
            ImageRenderStyle=MSTY_Normal
            WinTop=0.020000
            WinLeft=0.000000
            WinWidth=1.000000
            WinHeight=0.980000
            RenderWeight=0.000003
        End Object
        Controls(0)=FloatingImage'KickNickMut.ZeroIDMessage.FloatingFrameBackground'
    
        Begin Object Class=GUIHeader Name=TitleBar
            bUseTextHeight=True
            Caption="Your ID=0! / Ваш ID=0!"
            WinHeight=0.043750
            RenderWeight=0.100000
            bBoundToParent=True
            bScaleToParent=True
            bAcceptsInput=True
            bNeverFocus=False
            ScalingType=SCALE_X
        End Object
        Controls(1)=GUIHeader'KickNickMut.ZeroIDMessage.TitleBar'
    
        Begin Object Class=GUILabel Name=RulesLabel1
            Caption="Attention! / Внимание!"
            TextColor=(B=0,R=255)
            WinTop=0.100000
            WinLeft=0.340000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(2)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel1'
    
        Begin Object Class=GUIButton Name=DisconnectButton
            Caption="Disconnect / Отключиться"
            WinTop=0.620000
            WinLeft=0.240000
            WinWidth=0.240000
            OnClick=ZeroIDMessage.DisconnectClick
            OnKeyEvent=DisconnectButton.InternalOnKeyEvent
        End Object
        Controls(3)=GUIButton'KickNickMut.ZeroIDMessage.DisconnectButton'
    
        Begin Object Class=GUIButton Name=VisitForumButton
            Caption="Visit Forum / Форум"
            WinTop=0.620000
            WinLeft=0.520000
            WinWidth=0.240000
            OnClick=ZeroIDMessage.VizitForumClick
            OnKeyEvent=VisitForumButton.InternalOnKeyEvent
        End Object
        Controls(4)=GUIButton'KickNickMut.ZeroIDMessage.VisitForumButton'
    
        Begin Object Class=GUILabel Name=RulesLabel2
            Caption="Your steam ID is 0"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.200000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(5)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel2'
    
        Begin Object Class=GUILabel Name=RulesLabel3
            Caption="Run the game as administrator"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.250000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(6)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel3'
    
        Begin Object Class=GUILabel Name=RulesLabel4
            Caption="Right-click on game shortcut"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.300000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(7)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel4'
    
        Begin Object Class=GUILabel Name=RulesLabel5
            Caption="and choose this option"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.350000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(8)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel5'
    
        Begin Object Class=GUILabel Name=RulesLabel6
            Caption="Ваш steam ID равен 0"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.450000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(9)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel6'
    
        Begin Object Class=GUILabel Name=RulesLabel7
            Caption="Запустите игру под администратором"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.500000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(10)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel7'
    
        Begin Object Class=GUILabel Name=RulesLabel8
            Caption="Кликните правой кнопкой мыши на ярлык игры"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.550000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(11)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel8'
    
        Begin Object Class=GUILabel Name=RulesLabel9
            Caption="и найдите нужный вариант запуска"
            TextColor=(B=255,G=255,R=255)
            WinTop=0.600000
            WinLeft=0.070000
            WinWidth=0.460000
            WinHeight=20.000000
            bBoundToParent=True
        End Object
        Controls(12)=GUILabel'KickNickMut.ZeroIDMessage.RulesLabel9'
    
        WinTop=0.275000
        WinLeft=0.200000
        WinWidth=0.600000
        WinHeight=0.450000
    }
     
  15. Flame

    Flame -Заслуженый кодер форума-

    Лично я буду доступен после 10 мая. Тогда гляну, если не забуду. Если ещё кто поможет - буду только рад)
     
    mantis нравится это.
  16. mantis

    mantis Соучастник

    приветствую!

    есть вопрос по unrealscript...

    как сделать класс и как им потом пользоваться, который работает как модель?

    например у нас есть такой кусок кода:

    Код:
    struct BlaBla {
      var string id;
      var int count;
      var int value;
    };
    и это используется одновременно в двух мутаторах в пределах одного пакета.
    как обобщить эту структуру данных чтобы не обьявлять одинаково в двух и более мутаторах?
    тоесть как сделать модель на уровне пакета?

    заранее спасиб!
     
  17. RaideN-

    RaideN- Игровая Администрация

    Ты хочешь поставить кастомную модельку игроку по ID?
     
  18. STaJIKeR

    STaJIKeR Капо

    Нет. Точно не это.
    Но он знает как это делать.
     
  19. mantis

    mantis Соучастник

    Вопросы выше еще актуальны
    Помогите пожалуйста!
     
  20. Essence

    Essence Солдат

    Код:
    class ModelUtility extends Actor;
    
    struct ModelData
    {
        var string id;
        var int count;
        var int value;
    };
    
    ...
    Объявлять в мутаторах так:
    Код:
    var() array<ModelUtility.ModelData> ModelDataList;