warscript 0.0.1-dev.671d3cf → 0.0.1-dev.6745db1

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