warscript 0.0.1-dev.d30161d → 0.0.1-dev.d408eb6

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