JASS:
scope KingsWrath initializer KingsWrath_Init
globals
private constant integer SpellID = 039;A01Z039;
private constant integer UnitID = 039;h015039;
private constant string ImageEffect = "Abilities\\Spells\\Human\\Invisibility\\InvisibilityTarget.mdl"
private constant integer MaxCount = 15
private constant real DiameterOfCircle = 1150
private constant integer KingAOE = 130
private constant integer KnockoutDuration = 15
private integer KingUnitDist
private timer T = CreateTimer()
private unit array KingDummy
private unit KingDummySend
endglobals
function KingsWrath_Filter takes nothing returns boolean
local unit u = GetFilterUnit()
if IsUnitType(u, UNIT_TYPE_HERO) == true and udg_Status[GetPlayerId(GetOwningPlayer(u))] == "Active" and IsUnitEnemy(u,udg_ForgottenKing) == true then
set u = null
return true
else
set u = null
return false
endif
endfunction
function KingsWrath_MovementCallBack takes nothing returns nothing
local real X = GetUnitX(KingDummySend)
local real Y = GetUnitY(KingDummySend)
local real angle = GetUnitFacing(KingDummySend)
local group g = CreateGroup()
local unit u
call UFSYS_CreateFadeUnitAnimation(UnitID, X, Y, angle, 0.6, "stand", 0.6)
set X = X + 150 * Cos(angle * bj_DEGTORAD)
set Y = Y + 150 * Sin(angle * bj_DEGTORAD)
set KingUnitDist = KingUnitDist + 150
call SetUnitX(KingDummySend,X)
call SetUnitY(KingDummySend,Y)
call GroupEnumUnitsInRange(g,X,Y,KingAOE,Condition(function KingsWrath_Filter))
loop
set u = FirstOfGroup(g)
exitwhen u == null
call GroupRemoveUnit(g, u)
set udg_Knockout=udg_ForgottenKing //Set the player dealing knockout
set udg_KnockoutTarget = u //Set the knockout target to whoever was brought with
set udg_KnockoutDuration = KnockoutDuration //Normal
call TriggerExecute(gg_trg_KnockoutJ)
endloop
if (KingUnitDist >= 2300) then
call RemoveUnit(KingDummySend)
call PauseTimer(T)
endif
set u = null
call DestroyGroup(g)
set g = null
endfunction
function KingsWrath_Actions takes nothing returns nothing
local unit caster = GetTriggerUnit()
local real CenterX = GetRectCenterX(bj_mapInitialPlayableArea)
local real CenterY = GetRectCenterY(bj_mapInitialPlayableArea)
local real UnitX
local real UnitY
local real angle
local real mana = GetUnitState(caster,UNIT_STATE_MANA)
local integer i = 0
local integer rand = 0
set udg_KingsWrathCircle = true
call StartSound(gg_snd_DruidOfTheTalonWarcry1)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl",GetUnitX(caster),GetUnitY(caster)))
//SetUnitVertexColor
call ShowUnit(caster,false)
call TriggerSleepAction(1)
call TriggerExecute(gg_trg_Kings_Wrath_Circle_Production)
loop
exitwhen i == 20
set UnitX = CenterX + DiameterOfCircle * Cos(18 * i * bj_DEGTORAD)
set UnitY = CenterY + DiameterOfCircle * Sin(18 * i * bj_DEGTORAD)
set angle = bj_RADTODEG * Atan2(UnitY-CenterY,UnitX-CenterX)
set KingDummy<i> = CreateUnit(udg_ForgottenKing,UnitID,UnitX,UnitY,angle + 180)
call SetUnitVertexColor(KingDummy<i>,255,255,255,130)
set i = i + 1
endloop
set i = 0
loop
exitwhen i == MaxCount
set rand = GetRandomInt(0,19)
set KingDummySend = CreateUnit(udg_ForgottenKing,UnitID,GetUnitX(KingDummy[rand]),GetUnitY(KingDummy[rand]),GetUnitFacing(KingDummy[rand]))
call DestroyEffect(AddSpecialEffect(ImageEffect,GetUnitX(KingDummy[rand]),GetUnitY(KingDummy[rand])))
call SetUnitAnimation(KingDummy[rand],"attack")
set KingUnitDist = 0
call TimerStart(T,0.03,true,function KingsWrath_MovementCallBack)
call TriggerSleepAction(0.4)
call RemoveUnit(KingDummySend)
set KingDummySend = null
set i = i + 1
endloop
set i = 0
set udg_KingsWrathCircle = false
loop
exitwhen i == 20
call RemoveUnit(KingDummy<i>)
call DestroyEffect(AddSpecialEffect("Objects\\InventoryItems\\runicobject\\runicobject.mdl",GetUnitX(KingDummy<i>),GetUnitY(KingDummy<i>)))
set KingDummy<i> = null
set i = i + 1
endloop
call TriggerSleepAction(1)
call ShowUnit(caster,true)
call SetUnitState(caster,UNIT_STATE_MANA,mana - 70.0)
set KingDummySend = null
set caster = null
endfunction
function KingsWrath_Conditions takes nothing returns boolean
return GetSpellAbilityId() == SpellID
endfunction
//===========================================================================
function KingsWrath_Init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( t, Condition(function KingsWrath_Conditions))
call TriggerAddAction(t, function KingsWrath_Actions)
endfunction
endscope
</i></i></i></i></i></i>
On the code above, you can see couple of RemoveUnit calls being performed. Weird thing is, sometimes it goes in and sometimes it does not. Really, I'm not joking here, it works whenever it "feels" like it.
I might've done something stupid, like unattended leaks or array out of bounds idk, but I can't really seem to spot the issue. What could be causing the above issue??