warscript 0.0.1-dev.6fe4470 → 0.0.1-dev.70e8500

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