warscript 0.0.1-dev.f48f7bb → 0.0.1-dev.f70428f

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