warscript 0.0.1-dev.987b772 → 0.0.1-dev.989e1a3

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