function EventReg takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
set udg_Attacked = LoadUnitHandle(udg_Attack_Table, id, 'atkd')
set udg_Attacker = LoadUnitHandle(udg_Attack_Table, id, 'atkr')
call SaveBoolean(udg_Attack_Table, GetHandleId(udg_Attacker), 'bull', false)
call FlushChildHashtable(udg_Attack_Table, id )
call DestroyTimer(t)
set udg_Attack_Launched = 0.00
set udg_Attack_Launched = 1.00
set t = null
endfunction
function Delay takes nothing returns boolean
local integer tid = GetUnitTypeId(GetAttacker())
local integer uid = GetHandleId(GetAttacker())
local real del_time = LoadReal(udg_Attack_Table, tid , 'dely')
local boolean b = LoadBoolean(udg_Attack_Table, uid , 'bull')
local timer t
if b then
set t = LoadTimerHandle(udg_Attack_Table, uid , 'time')
call TimerStart(t, del_time, false, function EventReg)
call SaveUnitHandle(udg_Attack_Table, GetHandleId(t), 'atkd', GetTriggerUnit())
else
set t = CreateTimer()
call TimerStart(t, del_time, false, function EventReg)
call SaveTimerHandle(udg_Attack_Table, uid, 'time', t)
call SaveBoolean(udg_Attack_Table, uid, 'bull', true)
call SaveUnitHandle(udg_Attack_Table, GetHandleId(t), 'atkr', GetAttacker())
call SaveUnitHandle(udg_Attack_Table, GetHandleId(t), 'atkd', GetTriggerUnit())
endif
set t = null
return false
endfunction
function Bullean takes nothing returns boolean
call SaveBoolean(udg_Attack_Table, GetHandleId(GetTriggerUnit()), 'bull', false)
return false
endfunction
function AttCancel takes nothing returns boolean
local boolean b = LoadBoolean(udg_Attack_Table, GetHandleId(GetTriggerUnit()), 'bull')
local timer t
if b then
set t = LoadTimerHandle(udg_Attack_Table, GetHandleId(GetTriggerUnit()), 'time')
call FlushChildHashtable(udg_Attack_Table, GetHandleId(t))
call DestroyTimer(t)
set t = null
call SaveBoolean(udg_Attack_Table, GetHandleId(GetTriggerUnit()), 'bull', false)
endif
return false
endfunction
//===========================================================================
function InitTrig_Test takes nothing returns nothing
local trigger one = CreateTrigger()
local trigger two = CreateTrigger()
set gg_trg_Test = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Test, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_Test, Condition( function Delay ) )
call TriggerRegisterEnterRectSimple( one, GetPlayableMapRect() )
call TriggerAddCondition( one, Condition( function Bullean ))
call TriggerRegisterAnyUnitEventBJ( two, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerRegisterAnyUnitEventBJ( two, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerRegisterAnyUnitEventBJ( two, EVENT_PLAYER_UNIT_ISSUED_ORDER )
call TriggerAddCondition( two, Condition( function AttCancel ))
set one = null
set two = null
endfunction