Делаю способность, которая по действию похожа на эмпатию, т.е. если один из юнитов в группе получает урон, то часть от этого урона распространяется по остальным юнитам из данной группы. Проблема возникла на стадии распространения урона. Триггер реагирует на любое нанесение урона каждому юниту в группе, а распространение урона порождает новую реакцию триггера и т.д.
В общем, как избавиться от зацикливания?
Код
function Trig_b_Actions takes nothing returns nothing
local unit u
local group gr = LoadGroupHandle(udg_hash, GetHandleId(GetTriggerUnit()), 1)
local group gr2 = CreateGroup()
loop
set u = FirstOfGroup(gr)
exitwhen(u == null)
call UnitDamageTarget(GetEventDamageSource(), u, GetEventDamage() ,
false, false, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL,
WEAPON_TYPE_WHOKNOWS)
call GroupAddUnit(gr2, u)
call GroupRemoveUnit(gr, u)
call SaveGroupHandle( udg_hash, GetHandleId(GetTriggerUnit()), 1, gr2)
endloop
endfunction
function Trig_a_Actions takes nothing returns nothing
...
loop
set u = FirstOfGroup(gr)
exitwhen (u == null)
call TriggerRegisterUnitEvent( trig, u, EVENT_UNIT_DAMAGED )
call TriggerAddAction( trig, function Trig_b_Actions )
call SaveTriggerHandle( udg_hash, GetHandleId(u), 0, trig)
call SaveGroupHandle( udg_hash, GetHandleId(u), 1, gr2)
call GroupRemoveUnit(gr, u)
endloop
...