warscript 0.0.1-dev.620c0fa → 0.0.1-dev.62423e1

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