waaaks!
Zinctified
- Reaction score
- 255
I have this trigger that creates a dummy unit that uses a locust swarm based spell, and moving it to the origin of the caster, the spell was based on immolation, so that if the caster activates it, it creates the dummy unit that casts the locust swarm, and if the caster deactivates it, it removes the ability from the dummy unit, it kills the dummy, and removes it from game (also tried without removing the ability from the dummy), the worst part is, even though I already have two methods of killing the dummy (1 in the ondestroy method, the other at the elseif block when the caster deactivates it), the dummy unit is still alive, and still following my hero, I want to kill the dummy to stop the locust swarm.
the code
the code
JASS:
scope LocustSwarm initializer init
globals
private constant integer spell = 039;A01R039;
private constant integer dspell = 039;A01U039;
endglobals
private struct data
unit c
unit u
private method onDestroy takes nothing returns nothing
call UnitRemoveAbility(.u,dspell)
call KillUnit(.u)
call RemoveUnit(.u)
endmethod
endstruct
private function con takes nothing returns boolean
return GetUnitAbilityLevel(GetLearningUnit(),spell) == 1
endfunction
private function callback takes nothing returns boolean
local timer t = GetExpiredTimer()
local data d = GetTimerData(t)
call SetUnitX(d.u,GetUnitX(d.c))
call SetUnitY(d.u,GetUnitY(d.c))
set t = null
return true
endfunction
private function act2 takes nothing returns boolean
local unit c = GetTriggerUnit()
local timer t = NewTimer()
local integer l = GetUnitAbilityLevel(c,spell)
local data d = data.create()
set d.c = c
if GetIssuedOrderId() == OrderId("immolation") then
set d.u = CreateUnit(GetOwningPlayer(c),039;e000039;,GetUnitX(c),GetUnitY(c),0.0)
call UnitAddAbility(d.u,039;Aloc039;)
call UnitAddAbility(d.u,dspell)
call SetUnitAbilityLevel(d.u,dspell,l)
call IssueImmediateOrder(d.u,"locustswarm")
call TimerStart(t,0.035,true,function callback)
call SetTimerData(t,d)
call BJDebugMsg("start")
elseif GetIssuedOrderId() == OrderId("unimmolation") then
call BJDebugMsg("done")
call ReleaseTimer(t)
call KillUnit(d.u)
call UnitRemoveAbility(d.u,dspell)
call RemoveUnit(d.u)
call d.destroy()
endif
set c = null
set t = null
return true
endfunction
private function act takes nothing returns nothing
local trigger t = CreateTrigger()
local unit c = GetLearningUnit()
call TriggerRegisterUnitEvent( t, c, EVENT_UNIT_ISSUED_ORDER )
call TriggerAddAction(t,function act2)
set c = null
set t = null
endfunction
private function init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_HERO_SKILL)
call TriggerAddCondition(t,Condition(function con))
call TriggerAddAction(t,function act)
endfunction
endscope