warscript 0.0.1-dev.8bfb72f → 0.0.1-dev.8dbb0ee

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.d.ts +15 -0
  9. package/core/types/player.lua +56 -14
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +123 -5
  12. package/core/types/sound.d.ts +17 -24
  13. package/core/types/sound.lua +99 -24
  14. package/core/types/tileCell.d.ts +9 -0
  15. package/core/types/tileCell.lua +92 -0
  16. package/core/types/timer.d.ts +9 -8
  17. package/core/types/timer.lua +45 -23
  18. package/core/util.lua +6 -1
  19. package/decl/native.d.ts +846 -790
  20. package/engine/behavior.d.ts +5 -0
  21. package/engine/behavior.lua +106 -27
  22. package/engine/behaviour/ability/apply-buff.lua +1 -1
  23. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  24. package/engine/behaviour/ability/damage.d.ts +9 -3
  25. package/engine/behaviour/ability/damage.lua +26 -38
  26. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  27. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  28. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  29. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  30. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  31. package/engine/behaviour/ability/restore-mana.lua +6 -6
  32. package/engine/behaviour/ability.d.ts +5 -1
  33. package/engine/behaviour/ability.lua +26 -21
  34. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  35. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  36. package/engine/behaviour/unit.d.ts +34 -0
  37. package/engine/behaviour/unit.lua +190 -4
  38. package/engine/buff.d.ts +53 -45
  39. package/engine/buff.lua +260 -228
  40. package/engine/internal/ability.d.ts +7 -1
  41. package/engine/internal/ability.lua +49 -9
  42. package/engine/internal/item/ability.lua +63 -11
  43. package/engine/internal/item+owner.lua +12 -6
  44. package/engine/internal/item.d.ts +18 -17
  45. package/engine/internal/item.lua +160 -51
  46. package/engine/internal/mechanics/ability-duration.lua +1 -1
  47. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  48. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  49. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  50. package/engine/internal/misc/frame-coordinates.lua +21 -0
  51. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  52. package/engine/internal/misc/get-terrain-z.lua +11 -0
  53. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  54. package/engine/internal/misc/player-local-handle.lua +5 -0
  55. package/engine/internal/unit/ability.d.ts +35 -0
  56. package/engine/internal/unit/ability.lua +98 -9
  57. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  58. package/engine/internal/unit/allowed-targets.lua +9 -1
  59. package/engine/internal/unit/main-selected.lua +12 -27
  60. package/engine/internal/unit/order.d.ts +20 -0
  61. package/engine/internal/unit/order.lua +136 -0
  62. package/engine/internal/unit+ability.lua +10 -1
  63. package/engine/internal/unit+damage.d.ts +2 -11
  64. package/engine/internal/unit+damage.lua +10 -14
  65. package/engine/internal/unit+spellSteal.lua +1 -2
  66. package/engine/internal/unit-missile-launch.lua +42 -14
  67. package/engine/internal/unit.d.ts +42 -13
  68. package/engine/internal/unit.lua +331 -138
  69. package/engine/lightning.d.ts +4 -3
  70. package/engine/lightning.lua +21 -12
  71. package/engine/local-client.d.ts +2 -0
  72. package/engine/local-client.lua +30 -0
  73. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  74. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  75. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  76. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  77. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  78. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  79. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  80. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  81. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  82. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  83. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  84. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  85. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  86. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  87. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  88. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  89. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  90. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  91. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  92. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  93. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  94. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  95. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  96. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  97. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  98. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  99. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  100. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  101. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  102. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  103. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  104. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  105. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  106. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  107. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  108. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  109. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  110. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  111. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  112. package/engine/object-data/entry/ability-type/web.lua +52 -0
  113. package/engine/object-data/entry/ability-type.d.ts +19 -17
  114. package/engine/object-data/entry/ability-type.lua +85 -24
  115. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  116. package/engine/object-data/entry/buff-type.d.ts +6 -12
  117. package/engine/object-data/entry/buff-type.lua +13 -29
  118. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  119. package/engine/object-data/entry/item-type.d.ts +1 -1
  120. package/engine/object-data/entry/item-type.lua +4 -4
  121. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  122. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  123. package/engine/object-data/entry/sound-preset.lua +140 -0
  124. package/engine/object-data/entry/unit-type.d.ts +21 -5
  125. package/engine/object-data/entry/unit-type.lua +214 -93
  126. package/engine/object-data/entry/upgrade.d.ts +1 -1
  127. package/engine/object-data/entry/upgrade.lua +4 -4
  128. package/engine/object-data/entry.d.ts +16 -14
  129. package/engine/object-data/entry.lua +60 -32
  130. package/engine/object-field/ability.d.ts +4 -4
  131. package/engine/object-field/ability.lua +7 -6
  132. package/engine/object-field/unit.d.ts +57 -3
  133. package/engine/object-field/unit.lua +207 -7
  134. package/engine/object-field.d.ts +17 -6
  135. package/engine/object-field.lua +188 -92
  136. package/engine/random.d.ts +9 -0
  137. package/engine/random.lua +13 -0
  138. package/engine/standard/entries/buff-type.d.ts +3 -0
  139. package/engine/standard/entries/buff-type.lua +3 -0
  140. package/engine/standard/entries/sound-preset.d.ts +10 -0
  141. package/engine/standard/entries/sound-preset.lua +10 -0
  142. package/engine/standard/fields/unit.d.ts +4 -0
  143. package/engine/standard/fields/unit.lua +7 -0
  144. package/engine/synchronization.d.ts +11 -0
  145. package/engine/synchronization.lua +77 -0
  146. package/engine/text-tag.d.ts +36 -2
  147. package/engine/text-tag.lua +249 -10
  148. package/engine/unit.d.ts +1 -0
  149. package/engine/unit.lua +1 -0
  150. package/net/socket.lua +1 -1
  151. package/objutil/buff.lua +2 -3
  152. package/objutil/unit.lua +8 -0
  153. package/package.json +2 -2
  154. package/patch-lualib.lua +1 -1
  155. package/utility/arrays.d.ts +2 -0
  156. package/utility/arrays.lua +11 -0
  157. package/utility/callback-array.d.ts +17 -0
  158. package/utility/callback-array.lua +61 -0
  159. package/utility/functions.d.ts +8 -0
  160. package/utility/functions.lua +13 -0
  161. package/utility/linked-set.d.ts +2 -0
  162. package/utility/linked-set.lua +22 -1
  163. package/utility/lua-maps.d.ts +15 -2
  164. package/utility/lua-maps.lua +53 -2
  165. package/utility/lua-sets.d.ts +2 -0
  166. package/utility/lua-sets.lua +7 -0
  167. package/utility/reflection.lua +11 -7
  168. package/utility/types.d.ts +3 -0
  169. package/core/types/order.d.ts +0 -25
  170. package/core/types/order.lua +0 -55
package/engine/buff.lua CHANGED
@@ -28,13 +28,11 @@ local ____math = require("math")
28
28
  local max = ____math.max
29
29
  local min = ____math.min
30
30
  local ____bonus = require("engine.internal.unit.bonus")
31
- local addOrUpdateOrRemoveUnitBonus = ____bonus.addOrUpdateOrRemoveUnitBonus
32
- local getUnitBonus = ____bonus.getUnitBonus
33
- local removeUnitBonus = ____bonus.removeUnitBonus
34
31
  local UnitBonusType = ____bonus.UnitBonusType
35
32
  local ____area_2Ddamage = require("engine.internal.mechanics.area-damage")
36
33
  local damageArea = ____area_2Ddamage.damageArea
37
34
  local ____preconditions = require("utility.preconditions")
35
+ local check = ____preconditions.check
38
36
  local checkNotNull = ____preconditions.checkNotNull
39
37
  local ____effect = require("core.types.effect")
40
38
  local Effect = ____effect.Effect
@@ -101,12 +99,14 @@ local buffParametersKeys = {
101
99
  attackSpeedIncreaseFactor = true,
102
100
  movementSpeedIncreaseFactor = true,
103
101
  evasionProbability = true,
102
+ missProbability = true,
104
103
  damageFactor = true,
105
104
  receivedDamageFactor = true,
106
105
  receivedMagicDamageFactor = true,
107
106
  durationIncreaseOnAutoAttack = true,
108
107
  maximumDuration = true,
109
108
  maximumRemainingDuration = true,
109
+ turnsIntoGhost = true,
110
110
  stuns = true,
111
111
  ignoresStunImmunity = true,
112
112
  providesStunImmunity = true,
@@ -172,6 +172,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
172
172
  end
173
173
  end
174
174
  local buffBooleanParameters = {
175
+ "turnsIntoGhost",
175
176
  "stuns",
176
177
  "ignoresStunImmunity",
177
178
  "disablesAutoAttack",
@@ -224,7 +225,7 @@ local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
224
225
  return checkNotNull(firstNativeBuffTypeId)
225
226
  end
226
227
  local function destroyBuffIfItHasSameUniqueGroup(buff, uniqueGroup)
227
- if buff[103] == uniqueGroup then
228
+ if buff[104] == uniqueGroup then
228
229
  buff:destroy()
229
230
  end
230
231
  end
@@ -232,17 +233,17 @@ local function destroyBuff(buff)
232
233
  buff:destroy()
233
234
  end
234
235
  local function expireBuff(buff)
235
- local remainingDamageOverDuration = buff[112] or 0
236
- local remainingHealingOverDuration = buff[112] or 0
236
+ local remainingDamageOverDuration = buff[113] or 0
237
+ local remainingHealingOverDuration = buff[113] or 0
237
238
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
238
239
  buff:flashSpecialEffect()
239
240
  if remainingDamageOverDuration ~= 0 then
240
- (buff[101] or buff[100]):damageTarget(buff[100], remainingDamageOverDuration)
241
- buff[112] = nil
241
+ (buff[102] or buff[101]):damageTarget(buff[101], remainingDamageOverDuration)
242
+ buff[113] = nil
242
243
  end
243
244
  if remainingHealingOverDuration ~= 0 then
244
- (buff[101] or buff[100]):healTarget(buff[100], remainingHealingOverDuration)
245
- buff[117] = nil
245
+ (buff[102] or buff[101]):healTarget(buff[101], remainingHealingOverDuration)
246
+ buff[118] = nil
246
247
  end
247
248
  end
248
249
  Timer:run(destroyBuff, buff)
@@ -250,57 +251,58 @@ local function expireBuff(buff)
250
251
  end
251
252
  local function buffDamageIntervalInitialTimerCallback(buff)
252
253
  buffDamageIntervalTimerCallback(buff)
253
- local timer = buff[113]
254
- local damageInterval = buff[111]
254
+ local timer = buff[114]
255
+ local damageInterval = buff[112]
255
256
  if timer ~= nil and damageInterval ~= nil and damageInterval > 0 then
256
257
  timer:start(damageInterval, true, buffDamageIntervalTimerCallback, buff)
257
258
  end
258
259
  end
259
260
  buffDamageIntervalTimerCallback = function(buff)
260
261
  buff:flashSpecialEffect()
261
- local source = buff[101] or buff[100]
262
- local remainingDamageOverDuration = buff[112] or 0
262
+ local source = buff[102] or buff[101]
263
+ local remainingDamageOverDuration = buff[113] or 0
263
264
  if remainingDamageOverDuration ~= 0 then
264
- local damageInterval = buff[111] or 0
265
+ local damageInterval = buff[112] or 0
265
266
  if damageInterval ~= 0 then
266
267
  local damage = remainingDamageOverDuration / (1 + buff.remainingDuration / damageInterval)
267
- source:damageTarget(buff[100], damage)
268
- buff[112] = remainingDamageOverDuration - damage
268
+ source:damageTarget(buff[101], damage)
269
+ buff[113] = remainingDamageOverDuration - damage
269
270
  end
270
271
  end
271
- local damagePerInterval = buff[110] or 0
272
+ local damagePerInterval = buff[111] or 0
272
273
  if remainingDamageOverDuration == 0 or damagePerInterval ~= 0 then
273
- source:damageTarget(buff[100], damagePerInterval)
274
+ source:damageTarget(buff[101], damagePerInterval)
274
275
  end
275
276
  end
276
277
  local function buffHealingIntervalInitialTimerCallback(buff)
277
278
  buffHealingIntervalTimerCallback(buff)
278
- local timer = buff[118]
279
- local healingInterval = buff[116]
279
+ local timer = buff[119]
280
+ local healingInterval = buff[117]
280
281
  if timer ~= nil and healingInterval ~= nil and healingInterval > 0 then
281
282
  timer:start(healingInterval, true, buffHealingIntervalTimerCallback, buff)
282
283
  end
283
284
  end
284
285
  buffHealingIntervalTimerCallback = function(buff)
285
- if buff[116] ~= buff[111] then
286
+ if buff[117] ~= buff[112] then
286
287
  buff:flashSpecialEffect()
287
288
  end
288
- local source = buff[101] or buff[100]
289
- local remainingHealingOverDuration = buff[117] or 0
289
+ local source = buff[102] or buff[101]
290
+ local remainingHealingOverDuration = buff[118] or 0
290
291
  if remainingHealingOverDuration ~= 0 then
291
- local healingInterval = buff[116] or 0
292
+ local healingInterval = buff[117] or 0
292
293
  if healingInterval ~= 0 then
293
294
  local healing = remainingHealingOverDuration / (1 + buff.remainingDuration / healingInterval)
294
- source:healTarget(buff[100], healing)
295
- buff[117] = remainingHealingOverDuration - healing
295
+ source:healTarget(buff[101], healing)
296
+ buff[118] = remainingHealingOverDuration - healing
296
297
  end
297
298
  end
298
- local healingPerInterval = buff[115] or 0
299
+ local healingPerInterval = buff[116] or 0
299
300
  if remainingHealingOverDuration == 0 or healingPerInterval ~= 0 then
300
- source:healTarget(buff[100], healingPerInterval)
301
+ source:healTarget(buff[101], healingPerInterval)
301
302
  end
302
303
  end
303
- local buffDestroyEvent = __TS__New(Event)
304
+ local buffCreatedEvent = __TS__New(Event)
305
+ local buffBeingDestroyedEvent = __TS__New(Event)
304
306
  ____exports.Buff = __TS__Class()
305
307
  local Buff = ____exports.Buff
306
308
  Buff.name = "Buff"
@@ -309,7 +311,8 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
309
311
  UnitBehavior.prototype.____constructor(self, _unit)
310
312
  self._unit = _unit
311
313
  self.parameters = nil
312
- self[100] = _unit
314
+ self[100] = 0
315
+ self[101] = _unit
313
316
  local typeId
314
317
  local polarity
315
318
  local resistanceType
@@ -318,7 +321,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
318
321
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
319
322
  polarity = resistanceTypeOrPolarity
320
323
  resistanceType = abilityOrParametersOrResistanceType
321
- if __TS__InstanceOf(parametersOrAbility, Ability) then
324
+ if __TS__InstanceOf(parametersOrAbility, Ability) or parametersOrAbility == nil then
322
325
  ability = parametersOrAbility
323
326
  else
324
327
  ability = nil
@@ -328,7 +331,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
328
331
  typeId = typeIdOrTypeIds
329
332
  polarity = polarityOrTypeIdSelectionPolicy
330
333
  resistanceType = resistanceTypeOrPolarity
331
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
334
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) or abilityOrParametersOrResistanceType == nil then
332
335
  ability = abilityOrParametersOrResistanceType
333
336
  parameters = parametersOrAbility
334
337
  else
@@ -337,7 +340,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
337
340
  end
338
341
  end
339
342
  self.typeId = typeId
340
- if not __TS__InstanceOf(ability, Ability) then
343
+ if not (__TS__InstanceOf(ability, Ability) or ability == nil) then
341
344
  parameters = ability
342
345
  ability = nil
343
346
  end
@@ -365,14 +368,19 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
365
368
  end
366
369
  self.polarity = resolveEnumValue(ability, level, polarity)
367
370
  self.resistanceType = resolveEnumValue(ability, level, resistanceType)
371
+ local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
372
+ if missProbability ~= nil then
373
+ missProbability = resolveNumberValue(ability, level, missProbability)
374
+ self[142] = missProbability
375
+ end
368
376
  local buffByTypeId = buffByTypeIdByUnit[_unit]
369
377
  if buffByTypeId == nil then
370
378
  buffByTypeId = {}
371
379
  buffByTypeIdByUnit[_unit] = buffByTypeId
372
380
  end
373
- local ____opt_13 = buffByTypeId[typeId]
374
- if ____opt_13 ~= nil then
375
- ____opt_13:destroy()
381
+ local ____opt_15 = buffByTypeId[typeId]
382
+ if ____opt_15 ~= nil then
383
+ ____opt_15:destroy()
376
384
  end
377
385
  local uniqueGroup = parameters and parameters.uniqueGroup or defaultParameters and defaultParameters.uniqueGroup
378
386
  if uniqueGroup ~= nil then
@@ -386,13 +394,16 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
386
394
  level,
387
395
  duration,
388
396
  spellStealPriority,
389
- learnLevelMinimum
397
+ learnLevelMinimum,
398
+ missProbability
390
399
  ) then
400
+ self[100] = 1
391
401
  UnitBehavior.prototype.destroy(self)
392
402
  error(unsuccessfulApplicationMarker, 0)
393
403
  end
394
404
  local handle = BlzGetUnitAbility(_unit.handle, typeId)
395
405
  if handle == nil then
406
+ self[100] = 1
396
407
  UnitBehavior.prototype.destroy(self)
397
408
  error(unsuccessfulApplicationMarker, 0)
398
409
  end
@@ -401,20 +412,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
401
412
  self._level = level
402
413
  self._spellStealPriority = spellStealPriority
403
414
  self._learnLevelMinimum = learnLevelMinimum
404
- self[101] = source
405
- self[102] = duration or 0
406
- self[103] = uniqueGroup
407
- self[104] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
408
- self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
415
+ self[102] = source
416
+ self[103] = duration or 0
417
+ self[104] = uniqueGroup
418
+ self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
419
+ self[106] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
409
420
  if parameters ~= nil or (next(defaultParameters)) ~= nil then
410
421
  for ____, buffBooleanParameter in ipairs(buffBooleanParameters) do
411
- local ____ability_22 = ability
412
- local ____level_23 = level
413
- local ____temp_21 = parameters and parameters[buffBooleanParameter]
414
- if ____temp_21 == nil then
415
- ____temp_21 = defaultParameters[buffBooleanParameter]
422
+ local ____ability_24 = ability
423
+ local ____level_25 = level
424
+ local ____temp_23 = parameters and parameters[buffBooleanParameter]
425
+ if ____temp_23 == nil then
426
+ ____temp_23 = defaultParameters[buffBooleanParameter]
416
427
  end
417
- if resolveBooleanValue(____ability_22, ____level_23, ____temp_21) then
428
+ if resolveBooleanValue(____ability_24, ____level_25, ____temp_23) then
418
429
  self[buffBooleanParameter] = true
419
430
  end
420
431
  end
@@ -430,11 +441,11 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
430
441
  end
431
442
  local maximumDuration = parameters and parameters.maximumDuration or defaultParameters.maximumDuration
432
443
  if maximumDuration ~= nil then
433
- self[107] = resolveNumberValue(ability, level, maximumDuration)
444
+ self[108] = resolveNumberValue(ability, level, maximumDuration)
434
445
  end
435
446
  local maximumRemainingDuration = parameters and parameters.maximumRemainingDuration or defaultParameters.maximumRemainingDuration
436
447
  if maximumRemainingDuration ~= nil then
437
- self[108] = resolveNumberValue(ability, level, maximumRemainingDuration)
448
+ self[109] = resolveNumberValue(ability, level, maximumRemainingDuration)
438
449
  end
439
450
  local parametersAbilityTypeIds = parameters and parameters.abilityTypeIds or defaultParameters.abilityTypeIds
440
451
  if parametersAbilityTypeIds ~= nil then
@@ -492,29 +503,18 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
492
503
  self._timer = timer
493
504
  end
494
505
  self:onCreate()
495
- end
496
- function Buff.prototype.getUnitBonus(self, bonusType)
497
- local ____opt_36 = self._bonusIdByBonusType
498
- local bonusId = ____opt_36 and ____opt_36[bonusType]
499
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
500
- end
501
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
502
- local bonusIdByBonusType = self._bonusIdByBonusType
503
- if bonusIdByBonusType == nil then
504
- bonusIdByBonusType = {}
505
- self._bonusIdByBonusType = bonusIdByBonusType
506
- end
507
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
506
+ self[100] = 1
507
+ Event.invoke(buffCreatedEvent, self)
508
508
  end
509
509
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
510
510
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
511
- Effect:flash(self[104], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
511
+ Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
512
512
  else
513
513
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
514
514
  local ____Effect_40 = Effect
515
515
  local ____Effect_flash_41 = Effect.flash
516
516
  local ____array_39 = __TS__SparseArrayNew(
517
- self[104],
517
+ self[105],
518
518
  isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
519
519
  stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
520
520
  )
@@ -536,7 +536,7 @@ function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
536
536
  local ____Effect_44 = Effect
537
537
  local ____Effect_flash_45 = Effect.flash
538
538
  local ____array_43 = __TS__SparseArrayNew(
539
- self[105],
539
+ self[106],
540
540
  isWidgetProvided and widgetOrDuration or self._unit,
541
541
  stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
542
542
  )
@@ -555,20 +555,22 @@ end
555
555
  function Buff.prototype.onCreate(self)
556
556
  end
557
557
  function Buff.prototype.onDestroy(self)
558
+ check(self[100] ~= 0, "Cannot destroy a buff that has not finished creating yet.")
559
+ self[100] = 2
558
560
  local unit = self._unit
559
561
  if getUnitAbility(unit.handle, self.typeId) == self.handle then
560
562
  removeBuff(unit.handle, self.typeId)
561
563
  end
562
564
  buffByTypeIdByUnit[unit][self.typeId] = nil
563
- local healingIntervalTimer = self[118]
565
+ local healingIntervalTimer = self[119]
564
566
  if healingIntervalTimer ~= nil then
565
567
  healingIntervalTimer:destroy()
566
- self[118] = nil
568
+ self[119] = nil
567
569
  end
568
- local damageIntervalTimer = self[113]
570
+ local damageIntervalTimer = self[114]
569
571
  if damageIntervalTimer ~= nil then
570
572
  damageIntervalTimer:destroy()
571
- self[113] = nil
573
+ self[114] = nil
572
574
  end
573
575
  if self._timer ~= nil then
574
576
  self._timer:destroy()
@@ -578,26 +580,28 @@ function Buff.prototype.onDestroy(self)
578
580
  behavior:destroy()
579
581
  end
580
582
  end
581
- if self[136] then
583
+ if self[139] then
584
+ unit:decrementInvulnerabilityCounter()
585
+ end
586
+ if self[138] then
582
587
  unit:decrementDisableAutoAttackCounter()
583
588
  end
584
- if self[134] then
585
- if self[135] then
586
- unit:decrementStunCounter()
589
+ if self[136] then
590
+ if self[137] then
591
+ unit:decrementForceStunCounter()
587
592
  end
588
593
  unit:decrementStunCounter()
589
594
  end
595
+ if self[135] then
596
+ unit:decrementGhostCounter()
597
+ end
590
598
  if self._abilityTypeIds ~= nil then
591
599
  for abilityTypeId in pairs(self._abilityTypeIds) do
592
600
  unit:removeAbility(abilityTypeId)
593
601
  end
594
602
  end
595
- if self._bonusIdByBonusType ~= nil then
596
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
597
- removeUnitBonus(unit, bonusType, bonusId)
598
- end
599
- end
600
- Event.invoke(buffDestroyEvent, self)
603
+ Event.invoke(buffBeingDestroyedEvent, self)
604
+ self[100] = 3
601
605
  return UnitBehavior.prototype.onDestroy(self)
602
606
  end
603
607
  function Buff.apply(self, ...)
@@ -634,72 +638,72 @@ function Buff.getByTypeId(self, unit, typeId)
634
638
  end
635
639
  function Buff.prototype.onExpiration(self)
636
640
  local unit = self.unit
637
- if self[119] ~= nil then
638
- (self[101] or unit):damageTarget(unit, self[119] or 0)
639
- end
640
641
  if self[120] ~= nil then
641
- (self[101] or unit):healTarget(unit, self[119] or 0)
642
+ (self[102] or unit):damageTarget(unit, self[120] or 0)
642
643
  end
643
- if self[139] then
644
+ if self[121] ~= nil then
645
+ (self[102] or unit):healTarget(unit, self[120] or 0)
646
+ end
647
+ if self[141] then
644
648
  unit:explode()
645
- elseif self[138] then
649
+ elseif self[140] then
646
650
  unit:kill()
647
651
  end
648
652
  end
649
653
  function Buff.prototype.onDeath(self, source)
650
654
  local unit = self.unit
651
- if self[121] ~= nil then
655
+ if self[122] ~= nil then
652
656
  damageArea(
653
- self[101] or unit,
654
- self[121],
657
+ self[102] or unit,
658
+ self[122],
655
659
  unit.x,
656
660
  unit.y,
661
+ self[124] or 0,
657
662
  self[123] or 0,
658
- self[122] or 0,
663
+ self[126] or 0,
659
664
  self[125] or 0,
660
- self[124] or 0,
661
- self[127] or 0,
662
- self[126] or 0
665
+ self[128] or 0,
666
+ self[127] or 0
663
667
  )
664
668
  end
665
669
  end
666
670
  function Buff.prototype.onDamageDealt(self, target, event)
667
671
  if event.isAttack then
668
- if self[106] ~= nil then
669
- local durationIncrease = self[106]
670
- local maximumDuration = self[107] or 0
672
+ if self[107] ~= nil then
673
+ local durationIncrease = self[107]
674
+ local maximumDuration = self[108] or 0
671
675
  if maximumDuration > 0 then
672
676
  durationIncrease = min(
673
677
  durationIncrease,
674
- max(0, maximumDuration - self[102])
678
+ max(0, maximumDuration - self[103])
675
679
  )
676
680
  end
677
681
  local remainingDuration = self.remainingDuration + durationIncrease
678
- local maximumRemainingDuration = self[108] or 0
682
+ local maximumRemainingDuration = self[109] or 0
679
683
  if maximumRemainingDuration > 0 then
680
684
  remainingDuration = min(remainingDuration, maximumRemainingDuration)
681
685
  end
682
686
  self.remainingDuration = remainingDuration
683
687
  end
684
- local autoAttackCount = (self[128] or 0) + 1
685
- self[128] = autoAttackCount
686
- if autoAttackCount == self[129] then
688
+ local autoAttackCount = (self[129] or 0) + 1
689
+ self[129] = autoAttackCount
690
+ if autoAttackCount == self[130] then
687
691
  self:destroy()
688
692
  end
689
693
  end
690
694
  if event.originalAmount ~= 0 then
691
- local damageDealtEventCount = (self[130] or 0) + 1
692
- self[130] = damageDealtEventCount
693
- if damageDealtEventCount == self[131] then
695
+ local damageDealtEventCount = (self[131] or 0) + 1
696
+ self[131] = damageDealtEventCount
697
+ if damageDealtEventCount == self[132] then
694
698
  self:destroy()
695
699
  end
696
700
  end
697
701
  end
698
702
  function Buff.prototype.onDamageReceived(self, source, event)
699
703
  if event.originalAmount ~= 0 then
700
- local damageReceivedEventCount = (self[132] or 0) + 1
701
- self[132] = damageReceivedEventCount
702
- if damageReceivedEventCount == self[133] then
704
+ local damageReceivedEventCount = (self[133] or 0) + 1
705
+ self[133] = damageReceivedEventCount
706
+ if damageReceivedEventCount == self[134] then
703
707
  self:destroy()
704
708
  end
705
709
  end
@@ -709,7 +713,7 @@ __TS__SetDescriptor(
709
713
  Buff.prototype,
710
714
  "source",
711
715
  {get = function(self)
712
- return self[101] or self._unit
716
+ return self[102] or self._unit
713
717
  end},
714
718
  true
715
719
  )
@@ -726,13 +730,13 @@ __TS__SetDescriptor(
726
730
  "remainingDamageOverDuration",
727
731
  {
728
732
  get = function(self)
729
- return self[112] or 0
733
+ return self[113] or 0
730
734
  end,
731
735
  set = function(self, remainingDamageOverDuration)
732
- local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[112] or 0)
733
- self[112] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
734
- local damageOverDuration = (self[109] or 0) + remainingDamageOverDurationDelta
735
- self[109] = damageOverDuration ~= 0 and damageOverDuration or nil
736
+ local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[113] or 0)
737
+ self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
738
+ local damageOverDuration = (self[110] or 0) + remainingDamageOverDurationDelta
739
+ self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
736
740
  end
737
741
  },
738
742
  true
@@ -742,13 +746,13 @@ __TS__SetDescriptor(
742
746
  "damageOverDuration",
743
747
  {
744
748
  get = function(self)
745
- return self[109] or 0
749
+ return self[110] or 0
746
750
  end,
747
751
  set = function(self, damageOverDuration)
748
- local damageOverDurationDelta = damageOverDuration - (self[109] or 0)
749
- self[109] = damageOverDuration ~= 0 and damageOverDuration or nil
750
- local remainingDamageOverDuration = (self[112] or 0) + damageOverDurationDelta
751
- self[112] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
752
+ local damageOverDurationDelta = damageOverDuration - (self[110] or 0)
753
+ self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
754
+ local remainingDamageOverDuration = (self[113] or 0) + damageOverDurationDelta
755
+ self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
752
756
  end
753
757
  },
754
758
  true
@@ -758,10 +762,10 @@ __TS__SetDescriptor(
758
762
  "damagePerInterval",
759
763
  {
760
764
  get = function(self)
761
- return self[110] or 0
765
+ return self[111] or 0
762
766
  end,
763
767
  set = function(self, damagePerInterval)
764
- self[110] = damagePerInterval ~= 0 and damagePerInterval or nil
768
+ self[111] = damagePerInterval ~= 0 and damagePerInterval or nil
765
769
  end
766
770
  },
767
771
  true
@@ -771,25 +775,25 @@ __TS__SetDescriptor(
771
775
  "damageInterval",
772
776
  {
773
777
  get = function(self)
774
- return self[111] or 0
778
+ return self[112] or 0
775
779
  end,
776
780
  set = function(self, damageInterval)
777
781
  if damageInterval <= 0 then
778
- self[111] = damageInterval ~= 0 and damageInterval or nil
779
- local timer = self[113]
782
+ self[112] = damageInterval ~= 0 and damageInterval or nil
783
+ local timer = self[114]
780
784
  if timer ~= nil then
781
785
  timer:destroy()
782
- self[113] = nil
786
+ self[114] = nil
783
787
  end
784
788
  return
785
789
  end
786
- self[111] = damageInterval
790
+ self[112] = damageInterval
787
791
  local ____opt_48 = self._timer
788
792
  local elapsed = ____opt_48 and ____opt_48.elapsed or 0
789
- local timer = self[113]
793
+ local timer = self[114]
790
794
  if timer == nil then
791
795
  timer = Timer:create()
792
- self[113] = timer
796
+ self[114] = timer
793
797
  end
794
798
  local initialDelay = damageInterval - (elapsed >= damageInterval and math.fmod(elapsed, damageInterval) or elapsed)
795
799
  if initialDelay == damageInterval then
@@ -806,13 +810,13 @@ __TS__SetDescriptor(
806
810
  "remainingHealingOverDuration",
807
811
  {
808
812
  get = function(self)
809
- return self[117] or 0
813
+ return self[118] or 0
810
814
  end,
811
815
  set = function(self, remainingHealingOverDuration)
812
- local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[117] or 0)
813
- self[112] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
814
- local healingOverDuration = (self[114] or 0) + remainingHealingOverDurationDelta
815
- self[114] = healingOverDuration ~= 0 and healingOverDuration or nil
816
+ local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[118] or 0)
817
+ self[113] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
818
+ local healingOverDuration = (self[115] or 0) + remainingHealingOverDurationDelta
819
+ self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
816
820
  end
817
821
  },
818
822
  true
@@ -822,13 +826,13 @@ __TS__SetDescriptor(
822
826
  "healingOverDuration",
823
827
  {
824
828
  get = function(self)
825
- return self[114] or 0
829
+ return self[115] or 0
826
830
  end,
827
831
  set = function(self, healingOverDuration)
828
- local healingOverDurationDelta = healingOverDuration - (self[114] or 0)
829
- self[114] = healingOverDuration ~= 0 and healingOverDuration or nil
830
- local remainingHealingOverDuration = (self[117] or 0) + healingOverDurationDelta
831
- self[117] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
832
+ local healingOverDurationDelta = healingOverDuration - (self[115] or 0)
833
+ self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
834
+ local remainingHealingOverDuration = (self[118] or 0) + healingOverDurationDelta
835
+ self[118] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
832
836
  end
833
837
  },
834
838
  true
@@ -838,10 +842,10 @@ __TS__SetDescriptor(
838
842
  "healingPerInterval",
839
843
  {
840
844
  get = function(self)
841
- return self[115] or 0
845
+ return self[116] or 0
842
846
  end,
843
847
  set = function(self, healingPerInterval)
844
- self[115] = healingPerInterval ~= 0 and healingPerInterval or nil
848
+ self[116] = healingPerInterval ~= 0 and healingPerInterval or nil
845
849
  end
846
850
  },
847
851
  true
@@ -851,25 +855,25 @@ __TS__SetDescriptor(
851
855
  "healingInterval",
852
856
  {
853
857
  get = function(self)
854
- return self[116] or 0
858
+ return self[117] or 0
855
859
  end,
856
860
  set = function(self, healingInterval)
857
861
  if healingInterval <= 0 then
858
- self[116] = healingInterval ~= 0 and healingInterval or nil
859
- local timer = self[118]
862
+ self[117] = healingInterval ~= 0 and healingInterval or nil
863
+ local timer = self[119]
860
864
  if timer ~= nil then
861
865
  timer:destroy()
862
- self[118] = nil
866
+ self[119] = nil
863
867
  end
864
868
  return
865
869
  end
866
- self[116] = healingInterval
870
+ self[117] = healingInterval
867
871
  local ____opt_50 = self._timer
868
872
  local elapsed = ____opt_50 and ____opt_50.elapsed or 0
869
- local timer = self[118]
873
+ local timer = self[119]
870
874
  if timer == nil then
871
875
  timer = Timer:create()
872
- self[118] = timer
876
+ self[119] = timer
873
877
  end
874
878
  local initialDelay = healingInterval - (elapsed >= healingInterval and math.fmod(elapsed, healingInterval) or elapsed)
875
879
  if initialDelay == healingInterval then
@@ -886,10 +890,10 @@ __TS__SetDescriptor(
886
890
  "damageOnExpiration",
887
891
  {
888
892
  get = function(self)
889
- return self[119] or 0
893
+ return self[120] or 0
890
894
  end,
891
895
  set = function(self, damageOnExpiration)
892
- self[119] = damageOnExpiration ~= 0 and damageOnExpiration or nil
896
+ self[120] = damageOnExpiration ~= 0 and damageOnExpiration or nil
893
897
  end
894
898
  },
895
899
  true
@@ -899,10 +903,10 @@ __TS__SetDescriptor(
899
903
  "healingOnExpiration",
900
904
  {
901
905
  get = function(self)
902
- return self[120] or 0
906
+ return self[121] or 0
903
907
  end,
904
908
  set = function(self, healingOnExpiration)
905
- self[120] = healingOnExpiration ~= 0 and healingOnExpiration or nil
909
+ self[121] = healingOnExpiration ~= 0 and healingOnExpiration or nil
906
910
  end
907
911
  },
908
912
  true
@@ -946,30 +950,53 @@ __TS__SetDescriptor(
946
950
  },
947
951
  true
948
952
  )
953
+ __TS__SetDescriptor(
954
+ Buff.prototype,
955
+ "turnsIntoGhost",
956
+ {
957
+ get = function(self)
958
+ local ____self__135_52 = self[135]
959
+ if ____self__135_52 == nil then
960
+ ____self__135_52 = false
961
+ end
962
+ return ____self__135_52
963
+ end,
964
+ set = function(self, turnsIntoGhost)
965
+ if not turnsIntoGhost and self[135] then
966
+ self.object:decrementGhostCounter()
967
+ self[135] = nil
968
+ elseif turnsIntoGhost and not self[135] then
969
+ self.object:incrementGhostCounter()
970
+ self[135] = true
971
+ end
972
+ end
973
+ },
974
+ true
975
+ )
949
976
  __TS__SetDescriptor(
950
977
  Buff.prototype,
951
978
  "stuns",
952
979
  {
953
980
  get = function(self)
954
- local ____self__134_52 = self[134]
955
- if ____self__134_52 == nil then
956
- ____self__134_52 = false
981
+ local ____self__136_53 = self[136]
982
+ if ____self__136_53 == nil then
983
+ ____self__136_53 = false
957
984
  end
958
- return ____self__134_52
985
+ return ____self__136_53
959
986
  end,
960
987
  set = function(self, stuns)
961
- if not stuns and self[134] then
962
- if self[135] then
963
- self.object:decrementStunCounter()
988
+ if not stuns and self[136] then
989
+ if self[137] then
990
+ self.object:decrementForceStunCounter()
964
991
  end
965
992
  self.object:decrementStunCounter()
966
- self[134] = nil
967
- elseif stuns and not self[134] then
968
- if self[135] then
969
- self.object:incrementStunCounter()
993
+ self[136] = nil
994
+ elseif stuns and not self[136] then
995
+ if self[137] then
996
+ self.object:incrementForceStunCounter()
970
997
  end
971
998
  self.object:incrementStunCounter()
972
- self[134] = true
999
+ self[136] = true
973
1000
  end
974
1001
  end
975
1002
  },
@@ -980,23 +1007,23 @@ __TS__SetDescriptor(
980
1007
  "ignoresStunImmunity",
981
1008
  {
982
1009
  get = function(self)
983
- local ____self__135_53 = self[135]
984
- if ____self__135_53 == nil then
985
- ____self__135_53 = false
1010
+ local ____self__137_54 = self[137]
1011
+ if ____self__137_54 == nil then
1012
+ ____self__137_54 = false
986
1013
  end
987
- return ____self__135_53
1014
+ return ____self__137_54
988
1015
  end,
989
1016
  set = function(self, ignoresStunImmunity)
990
- if not ignoresStunImmunity and self[135] then
991
- if self[134] then
992
- self.object:decrementStunCounter()
1017
+ if not ignoresStunImmunity and self[137] then
1018
+ if self[136] then
1019
+ self.object:decrementForceStunCounter()
993
1020
  end
994
- self[135] = nil
995
- elseif ignoresStunImmunity and not self[135] then
996
- if self[134] then
997
- self.object:incrementStunCounter()
1021
+ self[137] = nil
1022
+ elseif ignoresStunImmunity and not self[137] then
1023
+ if self[136] then
1024
+ self.object:incrementForceStunCounter()
998
1025
  end
999
- self[135] = true
1026
+ self[137] = true
1000
1027
  end
1001
1028
  end
1002
1029
  },
@@ -1007,19 +1034,19 @@ __TS__SetDescriptor(
1007
1034
  "disablesAutoAttack",
1008
1035
  {
1009
1036
  get = function(self)
1010
- local ____self__136_54 = self[136]
1011
- if ____self__136_54 == nil then
1012
- ____self__136_54 = false
1037
+ local ____self__138_55 = self[138]
1038
+ if ____self__138_55 == nil then
1039
+ ____self__138_55 = false
1013
1040
  end
1014
- return ____self__136_54
1041
+ return ____self__138_55
1015
1042
  end,
1016
1043
  set = function(self, disablesAutoAttack)
1017
- if not disablesAutoAttack and self[136] then
1044
+ if not disablesAutoAttack and self[138] then
1018
1045
  self.object:decrementDisableAutoAttackCounter()
1019
- self[136] = nil
1020
- elseif disablesAutoAttack and not self[136] then
1046
+ self[138] = nil
1047
+ elseif disablesAutoAttack and not self[138] then
1021
1048
  self.object:incrementDisableAutoAttackCounter()
1022
- self[136] = true
1049
+ self[138] = true
1023
1050
  end
1024
1051
  end
1025
1052
  },
@@ -1030,19 +1057,19 @@ __TS__SetDescriptor(
1030
1057
  "providesInvulnerability",
1031
1058
  {
1032
1059
  get = function(self)
1033
- local ____self__137_55 = self[137]
1034
- if ____self__137_55 == nil then
1035
- ____self__137_55 = false
1060
+ local ____self__139_56 = self[139]
1061
+ if ____self__139_56 == nil then
1062
+ ____self__139_56 = false
1036
1063
  end
1037
- return ____self__137_55
1064
+ return ____self__139_56
1038
1065
  end,
1039
1066
  set = function(self, providesInvulnerability)
1040
- if not providesInvulnerability and self[137] then
1067
+ if not providesInvulnerability and self[139] then
1041
1068
  self.object:decrementInvulnerabilityCounter()
1042
- self[137] = nil
1043
- elseif providesInvulnerability and not self[137] then
1069
+ self[139] = nil
1070
+ elseif providesInvulnerability and not self[139] then
1044
1071
  self.object:incrementInvulnerabilityCounter()
1045
- self[137] = true
1072
+ self[139] = true
1046
1073
  end
1047
1074
  end
1048
1075
  },
@@ -1053,17 +1080,17 @@ __TS__SetDescriptor(
1053
1080
  "killsOnExpiration",
1054
1081
  {
1055
1082
  get = function(self)
1056
- local ____self__138_56 = self[138]
1057
- if ____self__138_56 == nil then
1058
- ____self__138_56 = false
1083
+ local ____self__140_57 = self[140]
1084
+ if ____self__140_57 == nil then
1085
+ ____self__140_57 = false
1059
1086
  end
1060
- return ____self__138_56
1087
+ return ____self__140_57
1061
1088
  end,
1062
1089
  set = function(self, killsOnExpiration)
1063
- if not killsOnExpiration and self[138] then
1064
- self[138] = nil
1065
- elseif killsOnExpiration and not self[138] then
1066
- self[138] = true
1090
+ if not killsOnExpiration and self[140] then
1091
+ self[140] = nil
1092
+ elseif killsOnExpiration and not self[140] then
1093
+ self[140] = true
1067
1094
  end
1068
1095
  end
1069
1096
  },
@@ -1074,17 +1101,17 @@ __TS__SetDescriptor(
1074
1101
  "explodesOnExpiration",
1075
1102
  {
1076
1103
  get = function(self)
1077
- local ____self__139_57 = self[139]
1078
- if ____self__139_57 == nil then
1079
- ____self__139_57 = false
1104
+ local ____self__141_58 = self[141]
1105
+ if ____self__141_58 == nil then
1106
+ ____self__141_58 = false
1080
1107
  end
1081
- return ____self__139_57
1108
+ return ____self__141_58
1082
1109
  end,
1083
1110
  set = function(self, killsOnExpiration)
1084
- if not killsOnExpiration and self[139] then
1085
- self[139] = nil
1086
- elseif killsOnExpiration and not self[139] then
1087
- self[139] = true
1111
+ if not killsOnExpiration and self[141] then
1112
+ self[141] = nil
1113
+ elseif killsOnExpiration and not self[141] then
1114
+ self[141] = true
1088
1115
  end
1089
1116
  end
1090
1117
  },
@@ -1095,13 +1122,13 @@ __TS__SetDescriptor(
1095
1122
  "maximumDamageDealtEventCount",
1096
1123
  {
1097
1124
  get = function(self)
1098
- return self[131] or 0
1125
+ return self[132] or 0
1099
1126
  end,
1100
1127
  set = function(self, maximumDamageDealtEventCount)
1101
1128
  if maximumDamageDealtEventCount == 0 then
1102
- self[131] = nil
1129
+ self[132] = nil
1103
1130
  else
1104
- self[131] = maximumDamageDealtEventCount
1131
+ self[132] = maximumDamageDealtEventCount
1105
1132
  end
1106
1133
  end
1107
1134
  },
@@ -1112,13 +1139,13 @@ __TS__SetDescriptor(
1112
1139
  "maximumDamageReceivedEventCount",
1113
1140
  {
1114
1141
  get = function(self)
1115
- return self[133] or 0
1142
+ return self[134] or 0
1116
1143
  end,
1117
1144
  set = function(self, maximumDamageReceivedEventCount)
1118
1145
  if maximumDamageReceivedEventCount == 0 then
1119
- self[133] = nil
1146
+ self[134] = nil
1120
1147
  else
1121
- self[133] = maximumDamageReceivedEventCount
1148
+ self[134] = maximumDamageReceivedEventCount
1122
1149
  end
1123
1150
  end
1124
1151
  },
@@ -1129,13 +1156,13 @@ __TS__SetDescriptor(
1129
1156
  "maximumAutoAttackCount",
1130
1157
  {
1131
1158
  get = function(self)
1132
- return self[129] or 0
1159
+ return self[130] or 0
1133
1160
  end,
1134
1161
  set = function(self, maximumAutoAttackCount)
1135
1162
  if maximumAutoAttackCount == 0 then
1136
- self[129] = nil
1163
+ self[130] = nil
1137
1164
  else
1138
- self[129] = maximumAutoAttackCount
1165
+ self[130] = maximumAutoAttackCount
1139
1166
  end
1140
1167
  end
1141
1168
  },
@@ -1146,10 +1173,10 @@ __TS__SetDescriptor(
1146
1173
  "durationIncreaseOnAutoAttack",
1147
1174
  {
1148
1175
  get = function(self)
1149
- return self[106] or 0
1176
+ return self[107] or 0
1150
1177
  end,
1151
1178
  set = function(self, durationIncreaseOnAutoAttack)
1152
- self[106] = durationIncreaseOnAutoAttack
1179
+ self[107] = durationIncreaseOnAutoAttack
1153
1180
  end
1154
1181
  },
1155
1182
  true
@@ -1197,7 +1224,7 @@ __TS__SetDescriptor(
1197
1224
  Buff.prototype,
1198
1225
  "duration",
1199
1226
  {get = function(self)
1200
- return self[102]
1227
+ return self[103]
1201
1228
  end},
1202
1229
  true
1203
1230
  )
@@ -1206,15 +1233,15 @@ __TS__SetDescriptor(
1206
1233
  "remainingDuration",
1207
1234
  {
1208
1235
  get = function(self)
1209
- local ____opt_58 = self._timer
1210
- return ____opt_58 and ____opt_58.remaining or 0
1236
+ local ____opt_59 = self._timer
1237
+ return ____opt_59 and ____opt_59.remaining or 0
1211
1238
  end,
1212
1239
  set = function(self, remainingDuration)
1213
- local ____remainingDuration_62 = remainingDuration
1214
- local ____opt_60 = self._timer
1215
- local remainingDurationDelta = ____remainingDuration_62 - (____opt_60 and ____opt_60.remaining or 0)
1240
+ local ____remainingDuration_63 = remainingDuration
1241
+ local ____opt_61 = self._timer
1242
+ local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1216
1243
  if remainingDurationDelta ~= 0 then
1217
- self[102] = self[102] + remainingDurationDelta
1244
+ self[103] = self[103] + remainingDurationDelta
1218
1245
  if remainingDuration <= 0 then
1219
1246
  Timer:run(destroyBuff, self)
1220
1247
  else
@@ -1226,7 +1253,8 @@ __TS__SetDescriptor(
1226
1253
  self._level,
1227
1254
  remainingDuration,
1228
1255
  self._spellStealPriority,
1229
- self._learnLevelMinimum
1256
+ self._learnLevelMinimum,
1257
+ self[142]
1230
1258
  ) then
1231
1259
  local timer = self._timer
1232
1260
  if timer == nil then
@@ -1241,10 +1269,11 @@ __TS__SetDescriptor(
1241
1269
  },
1242
1270
  true
1243
1271
  )
1244
- Buff.destroyEvent = buffDestroyEvent;
1272
+ Buff.createdEvent = buffCreatedEvent
1273
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1245
1274
  (function(self)
1246
1275
  local function destroyBuffIfNeeded(buff)
1247
- if getUnitAbility(buff[100].handle, buff.typeId) ~= buff.handle then
1276
+ if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
1248
1277
  buff:destroy()
1249
1278
  end
1250
1279
  end
@@ -1295,5 +1324,8 @@ Buff.destroyEvent = buffDestroyEvent;
1295
1324
  ____exports.checkBuffs(target)
1296
1325
  end
1297
1326
  )
1327
+ buffCreatedEvent:addListener(function(buff)
1328
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1329
+ end)
1298
1330
  end)(Buff)
1299
1331
  return ____exports