warscript 0.0.1-dev.8fe1307 → 0.0.1-dev.90da649

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