warscript 0.0.1-dev.4363c65 → 0.0.1-dev.448dcfb

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