Вот триггер:
function Trig_Skill_WarMur_Counter_Conditions takes nothing returns boolean
    if GetUnitAbilityLevel(GetTriggerUnit(),'B011')>0 and IsUnitType(GetAttacker(), UNIT_TYPE_GROUND) then
        return true
    endif
    return false
endfunction

function Trig_Skill_WarMur_Counter_Actions takes nothing returns nothing
    set udg_map_u1=GetTriggerUnit()
    set udg_map_u2=GetAttacker()
    set udg_map_r1=GetRandomReal(1.0,100.0)
    set udg_map_r2=m_distbtwcrds(GetUnitX(udg_map_u1),GetUnitY(udg_map_u1),GetUnitX(udg_map_u2),GetUnitY(udg_map_u2))
    if udg_map_r1<=30.0 and udg_map_r2<=200.0 then
        call SetUnitAnimation(udg_map_u1, "attack")
        set bj_lastCreatedEffect = AddSpecialEffectTarget("Abilities\\Weapons\\SeaElementalMissile\\SeaElementalMissile.mdl", udg_map_u1, "hand right")
        call DestroyEffect(bj_lastCreatedEffect)
        set bj_lastCreatedEffect = AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl", udg_map_u2, "chest")
        call DestroyEffect(bj_lastCreatedEffect)
        call UnitDamageTarget(udg_map_u1, udg_map_u2, GetRandomReal(20.0,22.0), true, false, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
        call m_playlocsndonu(udg_map_u1,"Units\\Human\\HeroPaladin\\HeroPaladinAttack1.wav",5,1.0)
    elseif udg_map_r1<=30.0 and udg_map_r2>200.0 and udg_map_r2<=750.0 then
        if m_isunitfastrush(udg_map_u1)==false then
            call abi_fastrush_addu(udg_map_u1,udg_map_r2-80.0,m_angbtwcrds(GetUnitX(udg_map_u1),GetUnitY(udg_map_u1),GetUnitX(udg_map_u2),GetUnitY(udg_map_u2)),false,"Units\\Creeps\\HeroTinkerFactory\\HeroTinkerFactoryMissle.mdl")
            call m_playlocsndonu(udg_map_u1,"Units\\Creep\\Murloc\\MurAggro.mp3",11,1.0)
        endif
    endif
    set udg_map_r2=0.0
    set udg_map_r1=0.0
    set udg_map_u2=null
    set udg_map_u1=null
endfunction
Из условия видно, что проверки на союзника/врага в триггере нет, но он срабатывает только на противниках

Принятый ответ

Kind Ram,
Ну отладку сделай, вызывается ли вообще триггер при атаке союзника, выведи текст в самом начале действия
function Trig_Skill_WarMur_Counter_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),'B011')>0 and IsUnitType(GetAttacker(), UNIT_TYPE_GROUND)
endfunction
условие можно так записать
И что это за бафф? B011 мб он только на противниках висит.
0
6
7 лет назад
0
Можете объяснить почему?)
0
29
7 лет назад
Отредактирован 16GB
0
Kind Ram,
где отладка? и события триггера
и да можно заменить
форматирование не работает, найс
0
6
7 лет назад
0
событие наипростейшее:
call TriggerRegisterAnyUnitEventBJ( gg_trg_Skill_WarMur_Counter, EVENT_PLAYER_UNIT_ATTACKED )
и зачем мне заменять указанный спецэффект и на что?
А-а-а. Я так ещё не экспериментировал)
0
29
7 лет назад
0
Kind Ram,
Ну отладку сделай, вызывается ли вообще триггер при атаке союзника, выведи текст в самом начале действия
function Trig_Skill_WarMur_Counter_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),'B011')>0 and IsUnitType(GetAttacker(), UNIT_TYPE_GROUND)
endfunction
условие можно так записать
И что это за бафф? B011 мб он только на противниках висит.
Принятый ответ
0
6
7 лет назад
0
Это бафф владельца пасивки, которого атакуют. Если атакуют на расстоянии 0-200 то 30% шанс на контр-удар по атакующему, если на расстоянии 201-750, то юнит с баффом делает рывок к атакующему, но уже без контр-атаки.
Даже на этапе условия не срабатывает, только если спецом добавить:
and ( IsUnitAlly(GetTriggerUnit(),GetOwningPlayer(GetAttacker)) or IsUnitAlly(GetTriggerUnit(),GetOwningPlayer(GetAttacker))==false )
к существующему условию, либо же только проверку на бафф оставить.
P.S. атаковал именно наземными юнитами при проверке, срабатывает только на противниках.
P.P.S. Нашёл проблему, IsUnitType(GetAttacker(), UNIT_TYPE_GROUND) не срабатывает с земноводными.
буду юзать в условии проверку на летающего с false.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.