warscript 0.0.1-dev.d1328b7 → 0.0.1-dev.d1983c6

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