@@ -72,7 +72,7 @@ package DamageEvent
7272import DamageDetection
7373import OnUnitEnterLeave
7474import ClosureForGroups
75- import TimerUtils
75+ import ClosureTimers
7676import LinkedList
7777import ErrorHandling
7878import AbilityObjEditing
@@ -158,7 +158,6 @@ class DamageInstance
158158 protected DamageElement damageElement
159159
160160 protected static thistype current = null
161- protected static thistype array stack
162161 protected static int count = 0
163162
164163 protected real lastDamageHP = 0.00
@@ -178,8 +177,6 @@ class DamageInstance
178177 this.damageElement = damageElement
179178
180179 count++
181- stack[count] = this
182- current = this
183180
184181 protected function setAmount(real amount)
185182 this.amount = amount
@@ -193,7 +190,6 @@ class DamageInstance
193190
194191 ondestroy
195192 count--
196- current = stack[count]
197193
198194
199195/* DAMAGE EVENT */
@@ -250,7 +246,10 @@ public class DamageEvent
250246 for i = 0 to maxUnreducedPriority
251247 var listener = firstUnreducedListeners[i]
252248 while listener != null
249+ let prev = DamageInstance.current
250+ DamageInstance.current = dmg
253251 listener.onEvent()
252+ DamageInstance.current = prev
254253 if abort
255254 dmg.amount = 0
256255 break
@@ -259,6 +258,11 @@ public class DamageEvent
259258 if abort
260259 break
261260
261+ if amount == 0.
262+ destroy dmg
263+ recursion--
264+ return
265+
262266 // All events have run and the damage amount is finalized.
263267 var life = target.getLife()
264268 let maxHP = target.getMaxHP()
@@ -285,11 +289,14 @@ public class DamageEvent
285289 target.addAbility(DAMAGE_ABIL_ID)
286290 target.setLife(max(life, 0.42))
287291
288- getTimer().start(0., function onDamage)
292+ nullTimer() ->
293+ DamageInstance.current = dmg
294+ onDamage()
289295
290296 private static function onTrg()
291297 for damage in damageList
292298 if damage.target == GetTriggerUnit()
299+ DamageInstance.current = damage
293300 onDamage()
294301 damageList.remove(damage)
295302 dmgTrg.clearActions()
@@ -315,7 +322,10 @@ public class DamageEvent
315322 for i = 0 to maxPriority
316323 var listener = firstListeners[i]
317324 while listener != null
325+ let prev = DamageInstance.current
326+ DamageInstance.current = dmg
318327 listener.onEvent()
328+ DamageInstance.current = prev
319329 if abort
320330 dmg.amount = 0
321331 break
0 commit comments