scope InsidiousOutrage initializer Initialize
//***************************************************************************
//********************************** SETUP **********************************
//***************************************************************************
globals
private constant rect WEST = gg_rct_spawnTeam2b
private constant rect EAST = gg_rct_spawnTeam2a
private constant integer SPELL_ID = 'A01R'
private constant integer DUMMY_ID = 'o005'
endglobals
private function Duration takes integer level returns real
return 8. + (2. * level)
endfunction
private function DelayBetweenOrders takes integer level returns real
return level * .25
endfunction
//***************************************************************************
//******************************** END SETUP ********************************
//***************************************************************************
globals
private unit array User[7]
private location RandomLoc
private integer Index
endglobals
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL_ID
endfunction
private function RandomOrder takes nothing returns nothing
set Index = GetTimerData( GetExpiredTimer() )
if IsPlayerAlly( GetOwningPlayer( User[Index] ), Player(0) ) then
set RandomLoc = GetRandomLocInRect( WEST )
else
set RandomLoc = GetRandomLocInRect( EAST )
endif
call IssuePointOrderLoc( User[Index], "attack", RandomLoc )
endfunction
//===========================================================================
private function Actions takes nothing returns nothing
local timer t = NewTimer()
local unit caster = GetTriggerUnit()
local player p = GetOwningPlayer( caster )
local integer level = GetUnitAbilityLevel( caster, SPELL_ID )
local integer owner_id = GetPlayerId( p )
set User[owner_id] = GetTriggerUnit()
call SetTimerData( t, owner_id )
call TimerStart( t, DelayBetweenOrders( level ), true, function RandomOrder )
call TriggerSleepAction( Duration( level ) )
call ReleaseTimer( t )
set t = null
set caster = null
set p = null
endfunction
//======================================================================
private function Initialize takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( t, Condition( function Conditions ) )
call TriggerAddAction( t, function Actions )
//Preload
set bj_lastCreatedUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), DUMMY_ID, 0., 0., 0. )
call UnitAddAbility( bj_lastCreatedUnit, SPELL_ID )
call KillUnit( bj_lastCreatedUnit )
endfunction
endscope