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

Тема в разделе "Игровое редактирование", создана пользователем Фрэгл, 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? Был бы очень признателен.