warscript 0.0.1-dev.ed60fea → 0.0.1-dev.eda504c

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