SuperZombieMut урон между зомби

Тема в разделе "Кодинг", создана пользователем idpro2, 28 ноя 2017.

Метки:
  1. idpro2

    idpro2 Соучастник

    установил на сервер SuperZombieMut который модифицирует стандартных зомби и в результате на сервере появились частые случаи атаки между зомби, т.е. зомби начали бить друг друга
    вот исходный код: https://github.com/scaryghost/SuperZombieMut
    заранее спасибо
     
    Последнее редактирование: 3 мар 2018
  2. shark_1900

    shark_1900 Бандит

    это почти никак не исправить по крайне мере надо полностью переберать сам движок....кф не идеально устроен и такие косячки они были и будут.(может и есть решение но думаю врятли)
     
    idpro2 нравится это.
  3. Essence

    Essence Солдат

    В классе моба:
    Код:
    function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
    {
        if(KFMonster(InstigatedBy)!=None)
            Return;
        Super.TakeDamage(Damage,instigatedBy,hitlocation,Momentum,damageType);
    }
    Как-то так наверное.
     
    idpro2 нравится это.
  4. shark_1900

    shark_1900 Бандит

    в классе SRHumanPawn.uc я вписал так
    Код:
    simulated function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
    {
        if (DamageType == none)
            DamageType = class'KFMod.ZombieMeleeDamage';
        Super.TakeDamage(Damage, InstigatedBy, Hitlocation, Momentum, DamageType);
    }
    ну все это херня все равно друг друга бьют...видимо построено так моба ударили и он идет на того кто нанес ему урон)))
     
    idpro2 нравится это.
  5. Flame

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

    По-хорошему надо править контроллер (функция SetEnemy)
    Можно ещё каждому зомбику в инвентарь давать какой-нибудь Item в котором будет проверка текущего врага в Tick'е или таймере. Если враг зомбик - перезапускать поиск врага, либо насильно ставить врага-человека
    Ну в общем ладно - поумничал называется. Если не забуду - кину примеры
     
    idpro2 нравится это.
  6. idpro2

    idpro2 Соучастник

    Подскажите пожалуйста а как можно модифицировать этот код чтобы например игнорировать не полностью моба целиком, а например отдельно крик сирены/огонь хаска/слюну блота?
     
  7. Essence

    Essence Солдат

    В TakeDamage моба
    Код:
    function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
    {
        if(damageType.Name=='SirenScreamDamage') // крик сирены
            return;
        if(damageType.Name=='DamTypeVomit') // слюнька толстяка
            return;
        if(damageType.Name=='DamTypeHusk') // новый даймтайп для огня хаска
            return;
        Super.TakeDamage(Damage,instigatedBy,hitlocation,Momentum,damageType);
    }
    Для хаска создаём кастомный даймтайп. Если у нас уже есть свой переписанный хаск, который наследует стандартного, достаточно в defaultproperties прописать
    Код:
    defaultproperties
    {
         MyDamageType=Class'DamTypeHusk'
    }
    иначе используем мутатор
    Код:
    class MobConfigMut extends Mutator;
    
    simulated function PostBeginPlay()
    {
        Class'KFChar.HuskFireProjectile'.default.MyDamageType = Class'DamTypeHusk';
    }
    
    defaultproperties
    {
        GroupName="KF-MobConfig"
        FriendlyName="MobConfigMut"
        Description="Mob Config Mut"
        bAddToServerPackages=True
        bAlwaysRelevant=True
        RemoteRole=ROLE_SimulatedProxy
    }
    Сам кастомный даймтайп
    Код:
    class DamTypeHusk extends DamTypeBurned;
    
    defaultproperties
    {
    }
     
    idpro2 нравится это.
  8. shark_1900

    shark_1900 Бандит

    он щас намутит,что потом такие траблы начнутся) лучше вообще мобов не трогать чтоб потом не пожалеть))
     
  9. Flame

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

    В NetDamage в GameRules лучше править
    Если речь об игнорировании урона
     
    Essence нравится это.
  10. Essence

    Essence Солдат

    Ах, ну да, лучше в одно место эт дело складировать.
    Иначе если наберётся куча проверок на даймтайпы в мобах, то лагать будет при выстреле в них.
     
  11. idpro2

    idpro2 Соучастник

    я сделал следующую проверку в GameRules:

    Код:
    if (Injured.IsA('KFMonster') && instigatedBy.IsA('KFMonster'))
        {
            Damage = 0;
          
            return Damage;
        }
    
    но это не привело к результату что от блотов перестали умирать(
    подскажите, что я делаю не так?
     
    Последнее редактирование: 3 мар 2018
  12. Flame

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

    В KFGameType.ReduceDamage есть такой код
    Код:
        if ( DamageType == class'DamTypeVomit' || DamageType == class'DamTypeWelder' || DamageType == class'SirenScreamDamage' )
        {
            return damage;
        }
    
    А вызов NetDamage идёт значительно ниже. Что намекает нам, что эти 3 типа урона нельзя обработать в NetDamage не исправляя ReduceDamage)
    Поэтому либо правь геймтайп, либо правь защиту от урона в других местах

    Всегда надо выводить логи. Тогда бы у тебя был вопрос почему мой NetDamage вообще не вызывается и это привело бы тебя к ответу, когда ты попытался бы найти где вызывается этот самый NetDamage
     
    Последнее редактирование: 15 дек 2017
    Essence и idpro2 нравится это.