scope TBomb initializer Init
globals
private constant integer AID = 'A000'
private constant integer BOMB = 'e001'
private hashtable ht = InitHashtable()
endglobals
struct Bomb
static real baseDamage = 300
static real tickInterval = 1.
unit u
unit dummy
integer level
player p
real x
real y
real damage
timer tickTimer
static method onTickTimer takes nothing returns nothing
local thistype this = LoadInteger(ht, GetHandleId(GetExpiredTimer()), 0)
//...
endmethod
static method create takes integer level, unit caster, real targetX, real targetY returns thistype
local thistype this = allocate()
set .damage = level * baseDamage
set .level = level
set .u = caster
set .p = GetOwningPlayer(caster)
set .tickTimer = CreateTimer()
call SaveInteger(ht, GetHandleId(.tickTimer), 0, this)
set .dummy = CreateUnit(.p, BOMB, targetX, targetY, 270)
call TimerStart(.tickTimer, .tickInterval, true, function thistype.onTickTimer)
return this
endmethod
endstruct
private function Conditions takes nothing returns nothing
if GetSpellAbilityId() == AID then
return
endif
call Bomb.create(GetUnitAbilityLevel(GetTriggerUnit(), AID), GetTriggerUnit(), GetSpellTargetX(), GetSpellTargetY())
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( t, Condition( function Conditions ) )
set t = null
endfunction
endscope