warscript 0.0.1-dev.ec4cf89 → 0.0.1-dev.eda504c

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