warscript 0.0.1-dev.e4a5fce → 0.0.1-dev.e6c3dde

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