warscript 0.0.1-dev.c74bdbb → 0.0.1-dev.c762beb

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 (167) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/sound.lua +1 -1
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +3 -1
  12. package/core/types/timer.lua +27 -2
  13. package/decl/native.d.ts +846 -790
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +9 -3
  20. package/engine/behaviour/ability/damage.lua +31 -37
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +11 -6
  28. package/engine/behaviour/ability.lua +38 -17
  29. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  30. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  31. package/engine/behaviour/unit.d.ts +39 -3
  32. package/engine/behaviour/unit.lua +269 -6
  33. package/engine/buff.d.ts +67 -22
  34. package/engine/buff.lua +371 -182
  35. package/engine/internal/ability.d.ts +7 -1
  36. package/engine/internal/ability.lua +49 -9
  37. package/engine/internal/item/ability.lua +63 -11
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +18 -17
  40. package/engine/internal/item.lua +135 -49
  41. package/engine/internal/mechanics/cast-ability.lua +6 -3
  42. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  43. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  44. package/engine/internal/misc/frame-coordinates.lua +21 -0
  45. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  46. package/engine/internal/misc/get-terrain-z.lua +11 -0
  47. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  48. package/engine/internal/misc/player-local-handle.lua +5 -0
  49. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  50. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  51. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  52. package/engine/internal/object-data/health-bonus.lua +16 -0
  53. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  54. package/engine/internal/object-data/mana-bonus.lua +16 -0
  55. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  56. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  57. package/engine/internal/unit/ability.d.ts +35 -0
  58. package/engine/internal/unit/ability.lua +98 -9
  59. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  60. package/engine/internal/unit/allowed-targets.lua +9 -1
  61. package/engine/internal/unit/attributes.d.ts +17 -0
  62. package/engine/internal/unit/attributes.lua +46 -0
  63. package/engine/internal/unit/bonus.d.ts +6 -0
  64. package/engine/internal/unit/bonus.lua +33 -3
  65. package/engine/internal/unit/fly-height.d.ts +7 -0
  66. package/engine/internal/unit/fly-height.lua +20 -0
  67. package/engine/internal/unit/interrupts.d.ts +12 -0
  68. package/engine/internal/unit/interrupts.lua +28 -0
  69. package/engine/internal/unit/item.lua +1 -1
  70. package/engine/internal/unit/main-selected.lua +12 -27
  71. package/engine/internal/unit/order.d.ts +20 -0
  72. package/engine/internal/unit/order.lua +136 -0
  73. package/engine/internal/unit/range-event.d.ts +12 -0
  74. package/engine/internal/unit/range-event.lua +90 -0
  75. package/engine/internal/unit/scale.d.ts +7 -0
  76. package/engine/internal/unit/scale.lua +20 -0
  77. package/engine/internal/unit+ability.lua +10 -1
  78. package/engine/internal/unit+bonus.lua +3 -3
  79. package/engine/internal/unit+damage.d.ts +2 -11
  80. package/engine/internal/unit+damage.lua +10 -14
  81. package/engine/internal/unit+spellSteal.lua +1 -2
  82. package/engine/internal/unit-missile-launch.lua +52 -14
  83. package/engine/internal/unit.d.ts +40 -27
  84. package/engine/internal/unit.lua +382 -264
  85. package/engine/local-client.d.ts +2 -0
  86. package/engine/local-client.lua +30 -0
  87. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  88. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  89. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  90. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  91. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  92. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  93. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  94. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  95. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  96. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  97. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  98. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  99. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  100. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  101. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  102. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  103. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  104. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  105. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  106. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  107. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  108. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  109. package/engine/object-data/entry/ability-type.d.ts +2 -0
  110. package/engine/object-data/entry/ability-type.lua +89 -8
  111. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  112. package/engine/object-data/entry/buff-type.d.ts +5 -11
  113. package/engine/object-data/entry/buff-type.lua +11 -27
  114. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  115. package/engine/object-data/entry/destructible-type.lua +155 -0
  116. package/engine/object-data/entry/unit-type.d.ts +17 -4
  117. package/engine/object-data/entry/unit-type.lua +197 -85
  118. package/engine/object-field/ability.d.ts +4 -4
  119. package/engine/object-field/ability.lua +9 -8
  120. package/engine/object-field/unit.d.ts +72 -3
  121. package/engine/object-field/unit.lua +268 -7
  122. package/engine/object-field.d.ts +26 -7
  123. package/engine/object-field.lua +360 -119
  124. package/engine/random.d.ts +10 -0
  125. package/engine/random.lua +21 -0
  126. package/engine/standard/entries/buff-type.d.ts +3 -0
  127. package/engine/standard/entries/buff-type.lua +3 -0
  128. package/engine/standard/fields/ability.d.ts +2 -2
  129. package/engine/standard/fields/ability.lua +2 -2
  130. package/engine/standard/fields/unit.d.ts +12 -0
  131. package/engine/standard/fields/unit.lua +20 -0
  132. package/engine/synchronization.d.ts +11 -0
  133. package/engine/synchronization.lua +77 -0
  134. package/engine/text-tag.d.ts +36 -2
  135. package/engine/text-tag.lua +250 -10
  136. package/engine/unit.d.ts +6 -0
  137. package/engine/unit.lua +6 -0
  138. package/lualib_bundle.lua +118 -47
  139. package/net/socket.lua +1 -1
  140. package/objutil/buff.lua +11 -10
  141. package/objutil/object.lua +1 -1
  142. package/operation.lua +23 -17
  143. package/package.json +5 -5
  144. package/patch-lua.lua +15 -0
  145. package/patch-lualib.lua +1 -1
  146. package/utility/arrays.d.ts +2 -0
  147. package/utility/arrays.lua +11 -0
  148. package/utility/callback-array.d.ts +17 -0
  149. package/utility/callback-array.lua +61 -0
  150. package/utility/functions.d.ts +8 -0
  151. package/utility/functions.lua +13 -0
  152. package/utility/linked-map.d.ts +34 -0
  153. package/utility/linked-map.lua +101 -0
  154. package/utility/linked-set.d.ts +4 -1
  155. package/utility/linked-set.lua +43 -1
  156. package/utility/lua-maps.d.ts +15 -2
  157. package/utility/lua-maps.lua +53 -2
  158. package/utility/lua-sets.d.ts +2 -0
  159. package/utility/lua-sets.lua +7 -0
  160. package/utility/records.lua +20 -1
  161. package/utility/types.d.ts +3 -0
  162. package/core/types/order.d.ts +0 -25
  163. package/core/types/order.lua +0 -55
  164. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  165. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  166. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  167. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/buff.lua CHANGED
@@ -16,6 +16,7 @@ local internalApplyBuff = ____applicable.internalApplyBuff
16
16
  local removeBuff = ____applicable.removeBuff
17
17
  local ____ability = require("engine.internal.ability")
18
18
  local Ability = ____ability.Ability
19
+ local UnitAbility = ____ability.UnitAbility
19
20
  local ____ability = require("engine.object-field.ability")
20
21
  local AbilityBooleanField = ____ability.AbilityBooleanField
21
22
  local AbilityNumberField = ____ability.AbilityNumberField
@@ -28,9 +29,6 @@ local ____math = require("math")
28
29
  local max = ____math.max
29
30
  local min = ____math.min
30
31
  local ____bonus = require("engine.internal.unit.bonus")
31
- local addOrUpdateOrRemoveUnitBonus = ____bonus.addOrUpdateOrRemoveUnitBonus
32
- local getUnitBonus = ____bonus.getUnitBonus
33
- local removeUnitBonus = ____bonus.removeUnitBonus
34
32
  local UnitBonusType = ____bonus.UnitBonusType
35
33
  local ____area_2Ddamage = require("engine.internal.mechanics.area-damage")
36
34
  local damageArea = ____area_2Ddamage.damageArea
@@ -44,6 +42,7 @@ local BuffType = ____buff_2Dtype.BuffType
44
42
  local ____unit = require("engine.behaviour.unit")
45
43
  local UnitBehavior = ____unit.UnitBehavior
46
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
47
46
  local forEach = ____arrays.forEach
48
47
  local ____event = require("event")
49
48
  local Event = ____event.Event
@@ -53,6 +52,12 @@ local ____item = require("engine.internal.item")
53
52
  local Item = ____item.Item
54
53
  local ____destructable = require("core.types.destructable")
55
54
  local Destructable = ____destructable.Destructable
55
+ local ____ability = require("engine.standard.fields.ability")
56
+ local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
57
+ local ____ability = require("engine.behaviour.ability")
58
+ local AbilityBehavior = ____ability.AbilityBehavior
59
+ local ____records = require("utility.records")
60
+ local sortedKeysUnnested = ____records.sortedKeysUnnested
56
61
  local getUnitAbility = BlzGetUnitAbility
57
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
58
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -98,9 +103,11 @@ local buffParametersKeys = {
98
103
  damageIncrease = true,
99
104
  damageIncreaseFactor = true,
100
105
  armorIncrease = true,
101
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
102
108
  attackSpeedIncreaseFactor = true,
103
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
104
111
  evasionProbability = true,
105
112
  missProbability = true,
106
113
  damageFactor = true,
@@ -120,11 +127,15 @@ local buffParametersKeys = {
120
127
  maximumAutoAttackCount = true,
121
128
  maximumDamageDealtEventCount = true,
122
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
123
133
  uniqueGroup = true,
124
134
  damageOnExpiration = true,
125
135
  healingOnExpiration = true,
126
136
  killsOnExpiration = true,
127
- explodesOnExpiration = true
137
+ explodesOnExpiration = true,
138
+ abilityCooldownFactor = true
128
139
  }
129
140
  local function resolveEnumValue(ability, level, value)
130
141
  if value == nil or type(value) == "number" then
@@ -175,6 +186,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
175
186
  end
176
187
  end
177
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
178
190
  "turnsIntoGhost",
179
191
  "stuns",
180
192
  "ignoresStunImmunity",
@@ -187,8 +199,11 @@ local buffNumberParameters = {
187
199
  "durationIncreaseOnAutoAttack",
188
200
  "attackSpeedIncreaseFactor",
189
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
190
203
  "evasionProbability",
191
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
192
207
  "damageFactor",
193
208
  "receivedDamageFactor",
194
209
  "maximumAutoAttackCount",
@@ -201,7 +216,10 @@ local buffNumberParameters = {
201
216
  "healingPerInterval",
202
217
  "healingOverDuration",
203
218
  "damageOnExpiration",
204
- "healingOnExpiration"
219
+ "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
222
+ "abilityCooldownFactor"
205
223
  }
206
224
  local unsuccessfulApplicationMarker = {}
207
225
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -304,7 +322,8 @@ buffHealingIntervalTimerCallback = function(buff)
304
322
  source:healTarget(buff[101], healingPerInterval)
305
323
  end
306
324
  end
307
- local buffDestroyEvent = __TS__New(Event)
325
+ local buffCreatedEvent = __TS__New(Event)
326
+ local buffBeingDestroyedEvent = __TS__New(Event)
308
327
  ____exports.Buff = __TS__Class()
309
328
  local Buff = ____exports.Buff
310
329
  Buff.name = "Buff"
@@ -319,33 +338,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
319
338
  local polarity
320
339
  local resistanceType
321
340
  local ability
341
+ local abilityBehavior
322
342
  if type(typeIdOrTypeIds) ~= "number" then
323
343
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
324
344
  polarity = resistanceTypeOrPolarity
325
345
  resistanceType = abilityOrParametersOrResistanceType
326
- if __TS__InstanceOf(parametersOrAbility, Ability) or parametersOrAbility == nil then
346
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
347
+ abilityBehavior = parametersOrAbility
348
+ ability = abilityBehavior.ability
349
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
327
350
  ability = parametersOrAbility
328
- else
329
- ability = nil
351
+ elseif parametersOrAbility ~= nil then
330
352
  parameters = parametersOrAbility
331
353
  end
332
354
  else
333
355
  typeId = typeIdOrTypeIds
334
356
  polarity = polarityOrTypeIdSelectionPolicy
335
357
  resistanceType = resistanceTypeOrPolarity
336
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) or abilityOrParametersOrResistanceType == nil then
358
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, AbilityBehavior) then
359
+ abilityBehavior = abilityOrParametersOrResistanceType
360
+ ability = abilityBehavior.ability
361
+ parameters = parametersOrAbility
362
+ elseif __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
337
363
  ability = abilityOrParametersOrResistanceType
338
364
  parameters = parametersOrAbility
339
- else
340
- ability = nil
365
+ elseif abilityOrParametersOrResistanceType ~= nil then
341
366
  parameters = abilityOrParametersOrResistanceType
367
+ else
368
+ parameters = parametersOrAbility
342
369
  end
343
370
  end
371
+ self.sourceAbilityBehavior = abilityBehavior
344
372
  self.typeId = typeId
345
- if not (__TS__InstanceOf(ability, Ability) or ability == nil) then
346
- parameters = ability
347
- ability = nil
348
- end
349
373
  local defaultParameters = self.constructor.defaultParameters
350
374
  local level = parameters and parameters.level or defaultParameters.level
351
375
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -373,14 +397,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
373
397
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
374
398
  if missProbability ~= nil then
375
399
  missProbability = resolveNumberValue(ability, level, missProbability)
376
- self[142] = missProbability
400
+ self[146] = missProbability
377
401
  end
378
402
  local buffByTypeId = buffByTypeIdByUnit[_unit]
379
403
  if buffByTypeId == nil then
380
404
  buffByTypeId = {}
381
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
382
406
  end
383
- local ____opt_15 = buffByTypeId[typeId]
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
384
409
  if ____opt_15 ~= nil then
385
410
  ____opt_15:destroy()
386
411
  end
@@ -456,24 +481,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
456
481
  abilityTypeIds = {}
457
482
  self._abilityTypeIds = abilityTypeIds
458
483
  end
459
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
484
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
485
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
460
486
  local addedAbility = _unit:addAbility(abilityTypeId)
461
487
  if addedAbility ~= nil then
462
488
  _unit:makeAbilityPermanent(abilityTypeId, true)
463
489
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
464
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
465
- if abilityParameterKey == "isButtonVisible" then
466
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
467
- _unit:hideAbility(abilityTypeId, true)
468
- end
469
- elseif abilityParameterKey ~= "level" then
470
- abilityParameterKey:setValue(
471
- addedAbility,
472
- resolveNumberValue(ability, level, abilityParameterValue)
473
- )
474
- end
490
+ if abilityParameters.isButtonVisible == false then
491
+ _unit:hideAbility(abilityTypeId, true)
492
+ end
493
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
494
+ field[1]:setValue(
495
+ addedAbility,
496
+ resolveNumberValue(ability, level, field[2])
497
+ )
475
498
  end
476
- abilityTypeIds[abilityTypeId] = true
499
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
477
500
  end
478
501
  end
479
502
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -485,18 +508,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
485
508
  self._behaviors = behaviors
486
509
  end
487
510
  end
488
- local additionalParameters = {}
489
- for key, value in pairs(parameters) do
490
- if not buffParametersKeys[key] then
491
- if ability then
492
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
493
- else
494
- additionalParameters[key] = value
511
+ if parameters ~= nil then
512
+ local additionalParameters = {}
513
+ for ____, key in ipairs(sortedKeysUnnested(parameters)) do
514
+ if not buffParametersKeys[key] then
515
+ if ability then
516
+ additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, parameters[key])
517
+ else
518
+ additionalParameters[key] = parameters[key]
519
+ end
495
520
  end
496
521
  end
497
- end
498
- if (next(additionalParameters)) ~= nil then
499
- self.parameters = additionalParameters
522
+ if (next(additionalParameters)) ~= nil then
523
+ self.parameters = additionalParameters
524
+ end
500
525
  end
501
526
  end
502
527
  if duration ~= nil and duration > 0 then
@@ -506,65 +531,65 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
506
531
  end
507
532
  self:onCreate()
508
533
  self[100] = 1
534
+ Event.invoke(buffCreatedEvent, self)
509
535
  end
510
- function Buff.prototype.getUnitBonus(self, bonusType)
511
- local ____opt_38 = self._bonusIdByBonusType
512
- local bonusId = ____opt_38 and ____opt_38[bonusType]
513
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
536
+ function Buff.prototype.onAbilityGained(self, ability)
537
+ if __TS__InstanceOf(ability, UnitAbility) then
538
+ local abilityCooldownModifier = self[148]
539
+ if abilityCooldownModifier then
540
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
541
+ end
542
+ end
514
543
  end
515
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
516
- local bonusIdByBonusType = self._bonusIdByBonusType
517
- if bonusIdByBonusType == nil then
518
- bonusIdByBonusType = {}
519
- self._bonusIdByBonusType = bonusIdByBonusType
544
+ function Buff.prototype.onAbilityLost(self, ability)
545
+ if __TS__InstanceOf(ability, UnitAbility) then
546
+ local abilityCooldownModifier = self[148]
547
+ if abilityCooldownModifier then
548
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
549
+ end
520
550
  end
521
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
522
551
  end
523
552
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
553
+ self:flash(
554
+ self[105],
555
+ stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin",
556
+ widgetOrXOrParametersOrDuration,
557
+ yOrParametersOrDuration,
558
+ parametersOrDuration
559
+ )
560
+ end
561
+ function Buff.prototype.flashSpecialEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
562
+ self:flash(
563
+ self[106],
564
+ stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin",
565
+ widgetOrXOrParametersOrDuration,
566
+ yOrParametersOrDuration,
567
+ parametersOrDuration
568
+ )
569
+ end
570
+ function Buff.prototype.flash(self, modelPath, attachmentPoint, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
571
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
525
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
572
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
526
573
  else
527
574
  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
575
+ local ____Effect_40 = Effect
576
+ local ____Effect_flash_41 = Effect.flash
577
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
578
+ local ____isWidgetProvided_38
536
579
  if isWidgetProvided then
537
- ____isWidgetProvided_40 = yOrParametersOrDuration
580
+ ____isWidgetProvided_38 = yOrParametersOrDuration
538
581
  else
539
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
582
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
540
583
  end
541
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
542
- ____Effect_flash_43(
543
- ____Effect_42,
544
- __TS__SparseArraySpread(____array_41)
584
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
585
+ ____Effect_flash_41(
586
+ ____Effect_40,
587
+ __TS__SparseArraySpread(____array_39)
545
588
  )
546
589
  end
547
590
  end
548
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
549
- local isWidgetProvided = type(widgetOrDuration) == "table"
550
- local ____Effect_46 = Effect
551
- local ____Effect_flash_47 = Effect.flash
552
- local ____array_45 = __TS__SparseArrayNew(
553
- self[106],
554
- isWidgetProvided and widgetOrDuration or self._unit,
555
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
556
- )
557
- local ____isWidgetProvided_44
558
- if isWidgetProvided then
559
- ____isWidgetProvided_44 = duration
560
- else
561
- ____isWidgetProvided_44 = widgetOrDuration
562
- end
563
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
564
- ____Effect_flash_47(
565
- ____Effect_46,
566
- __TS__SparseArraySpread(____array_45)
567
- )
591
+ function Buff.prototype.expire(self)
592
+ expireBuff(self)
568
593
  end
569
594
  function Buff.prototype.onCreate(self)
570
595
  end
@@ -594,32 +619,33 @@ function Buff.prototype.onDestroy(self)
594
619
  behavior:destroy()
595
620
  end
596
621
  end
597
- if self[139] then
622
+ local previousAbilityCooldownModifier = self[148]
623
+ if previousAbilityCooldownModifier then
624
+ for ____, ability in ipairs(self._unit.abilities) do
625
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
626
+ end
627
+ end
628
+ if self[143] then
598
629
  unit:decrementInvulnerabilityCounter()
599
630
  end
600
- if self[138] then
631
+ if self[142] then
601
632
  unit:decrementDisableAutoAttackCounter()
602
633
  end
603
- if self[136] then
604
- if self[137] then
605
- unit:decrementStunCounter()
634
+ if self[140] then
635
+ if self[141] then
636
+ unit:decrementForceStunCounter()
606
637
  end
607
638
  unit:decrementStunCounter()
608
639
  end
609
- if self[135] then
640
+ if self[139] then
610
641
  unit:decrementGhostCounter()
611
642
  end
612
643
  if self._abilityTypeIds ~= nil then
613
- for abilityTypeId in pairs(self._abilityTypeIds) do
644
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
614
645
  unit:removeAbility(abilityTypeId)
615
646
  end
616
647
  end
617
- if self._bonusIdByBonusType ~= nil then
618
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
619
- removeUnitBonus(unit, bonusType, bonusId)
620
- end
621
- end
622
- Event.invoke(buffDestroyEvent, self)
648
+ Event.invoke(buffBeingDestroyedEvent, self)
623
649
  self[100] = 3
624
650
  return UnitBehavior.prototype.onDestroy(self)
625
651
  end
@@ -648,8 +674,8 @@ function Buff.apply(self, ...)
648
674
  end
649
675
  end
650
676
  function Buff.getByTypeId(self, unit, typeId)
651
- local ____opt_48 = buffByTypeIdByUnit[unit]
652
- local buff = ____opt_48 and ____opt_48[typeId]
677
+ local ____opt_42 = buffByTypeIdByUnit[unit]
678
+ local buff = ____opt_42 and ____opt_42[typeId]
653
679
  if __TS__InstanceOf(buff, self) then
654
680
  return buff
655
681
  end
@@ -663,9 +689,9 @@ function Buff.prototype.onExpiration(self)
663
689
  if self[121] ~= nil then
664
690
  (self[102] or unit):healTarget(unit, self[120] or 0)
665
691
  end
666
- if self[141] then
692
+ if self[145] then
667
693
  unit:explode()
668
- elseif self[140] then
694
+ elseif self[144] then
669
695
  unit:kill()
670
696
  end
671
697
  end
@@ -720,6 +746,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
720
746
  end
721
747
  function Buff.prototype.onDamageReceived(self, source, event)
722
748
  if event.originalAmount ~= 0 then
749
+ local absorbedDamage = min(event.amount * (self[135] or 1), (self[136] or 0) - (self[137] or 0))
750
+ if absorbedDamage > 0 then
751
+ event.amount = event.amount - absorbedDamage
752
+ self[137] = (self[137] or 0) + absorbedDamage
753
+ local ____self__138_44 = self[138]
754
+ if ____self__138_44 == nil then
755
+ ____self__138_44 = true
756
+ end
757
+ if ____self__138_44 and self[137] >= (self[136] or 0) then
758
+ self:destroy()
759
+ end
760
+ end
723
761
  local damageReceivedEventCount = (self[133] or 0) + 1
724
762
  self[133] = damageReceivedEventCount
725
763
  if damageReceivedEventCount == self[134] then
@@ -807,8 +845,8 @@ __TS__SetDescriptor(
807
845
  return
808
846
  end
809
847
  self[112] = damageInterval
810
- local ____opt_50 = self._timer
811
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
848
+ local ____opt_45 = self._timer
849
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
812
850
  local timer = self[114]
813
851
  if timer == nil then
814
852
  timer = Timer:create()
@@ -887,8 +925,8 @@ __TS__SetDescriptor(
887
925
  return
888
926
  end
889
927
  self[117] = healingInterval
890
- local ____opt_52 = self._timer
891
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
928
+ local ____opt_47 = self._timer
929
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
892
930
  local timer = self[119]
893
931
  if timer == nil then
894
932
  timer = Timer:create()
@@ -969,24 +1007,50 @@ __TS__SetDescriptor(
969
1007
  },
970
1008
  true
971
1009
  )
1010
+ __TS__SetDescriptor(
1011
+ Buff.prototype,
1012
+ "maxHealthIncrease",
1013
+ {
1014
+ get = function(self)
1015
+ return self:getUnitBonus(UnitBonusType.HEALTH)
1016
+ end,
1017
+ set = function(self, maxHealthIncrease)
1018
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.HEALTH, maxHealthIncrease)
1019
+ end
1020
+ },
1021
+ true
1022
+ )
1023
+ __TS__SetDescriptor(
1024
+ Buff.prototype,
1025
+ "maxManaIncrease",
1026
+ {
1027
+ get = function(self)
1028
+ return self:getUnitBonus(UnitBonusType.MANA)
1029
+ end,
1030
+ set = function(self, maxManaIncrease)
1031
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA, maxManaIncrease)
1032
+ end
1033
+ },
1034
+ true
1035
+ )
972
1036
  __TS__SetDescriptor(
973
1037
  Buff.prototype,
974
1038
  "turnsIntoGhost",
975
1039
  {
976
1040
  get = function(self)
977
- local ____self__135_54 = self[135]
978
- if ____self__135_54 == nil then
979
- ____self__135_54 = false
1041
+ local ____self__139_49 = self[139]
1042
+ if ____self__139_49 == nil then
1043
+ ____self__139_49 = false
980
1044
  end
981
- return ____self__135_54
1045
+ return ____self__139_49
982
1046
  end,
983
1047
  set = function(self, turnsIntoGhost)
984
- if not turnsIntoGhost and self[135] then
1048
+ if not turnsIntoGhost and self[139] then
985
1049
  self.object:decrementGhostCounter()
986
- self[135] = nil
987
- elseif turnsIntoGhost and not self[135] then
1050
+ self[139] = nil
1051
+ elseif turnsIntoGhost and not self[139] then
988
1052
  self.object:incrementGhostCounter()
989
- self[135] = true
1053
+ self[139] = true
990
1054
  end
991
1055
  end
992
1056
  },
@@ -997,25 +1061,25 @@ __TS__SetDescriptor(
997
1061
  "stuns",
998
1062
  {
999
1063
  get = function(self)
1000
- local ____self__136_55 = self[136]
1001
- if ____self__136_55 == nil then
1002
- ____self__136_55 = false
1064
+ local ____self__140_50 = self[140]
1065
+ if ____self__140_50 == nil then
1066
+ ____self__140_50 = false
1003
1067
  end
1004
- return ____self__136_55
1068
+ return ____self__140_50
1005
1069
  end,
1006
1070
  set = function(self, stuns)
1007
- if not stuns and self[136] then
1008
- if self[137] then
1009
- self.object:decrementStunCounter()
1071
+ if not stuns and self[140] then
1072
+ if self[141] then
1073
+ self.object:decrementForceStunCounter()
1010
1074
  end
1011
1075
  self.object:decrementStunCounter()
1012
- self[136] = nil
1013
- elseif stuns and not self[136] then
1014
- if self[137] then
1015
- self.object:incrementStunCounter()
1076
+ self[140] = nil
1077
+ elseif stuns and not self[140] then
1078
+ if self[141] then
1079
+ self.object:incrementForceStunCounter()
1016
1080
  end
1017
1081
  self.object:incrementStunCounter()
1018
- self[136] = true
1082
+ self[140] = true
1019
1083
  end
1020
1084
  end
1021
1085
  },
@@ -1026,23 +1090,23 @@ __TS__SetDescriptor(
1026
1090
  "ignoresStunImmunity",
1027
1091
  {
1028
1092
  get = function(self)
1029
- local ____self__137_56 = self[137]
1030
- if ____self__137_56 == nil then
1031
- ____self__137_56 = false
1093
+ local ____self__141_51 = self[141]
1094
+ if ____self__141_51 == nil then
1095
+ ____self__141_51 = false
1032
1096
  end
1033
- return ____self__137_56
1097
+ return ____self__141_51
1034
1098
  end,
1035
1099
  set = function(self, ignoresStunImmunity)
1036
- if not ignoresStunImmunity and self[137] then
1037
- if self[136] then
1038
- self.object:decrementStunCounter()
1100
+ if not ignoresStunImmunity and self[141] then
1101
+ if self[140] then
1102
+ self.object:decrementForceStunCounter()
1039
1103
  end
1040
- self[137] = nil
1041
- elseif ignoresStunImmunity and not self[137] then
1042
- if self[136] then
1043
- self.object:incrementStunCounter()
1104
+ self[141] = nil
1105
+ elseif ignoresStunImmunity and not self[141] then
1106
+ if self[140] then
1107
+ self.object:incrementForceStunCounter()
1044
1108
  end
1045
- self[137] = true
1109
+ self[141] = true
1046
1110
  end
1047
1111
  end
1048
1112
  },
@@ -1053,19 +1117,19 @@ __TS__SetDescriptor(
1053
1117
  "disablesAutoAttack",
1054
1118
  {
1055
1119
  get = function(self)
1056
- local ____self__138_57 = self[138]
1057
- if ____self__138_57 == nil then
1058
- ____self__138_57 = false
1120
+ local ____self__142_52 = self[142]
1121
+ if ____self__142_52 == nil then
1122
+ ____self__142_52 = false
1059
1123
  end
1060
- return ____self__138_57
1124
+ return ____self__142_52
1061
1125
  end,
1062
1126
  set = function(self, disablesAutoAttack)
1063
- if not disablesAutoAttack and self[138] then
1127
+ if not disablesAutoAttack and self[142] then
1064
1128
  self.object:decrementDisableAutoAttackCounter()
1065
- self[138] = nil
1066
- elseif disablesAutoAttack and not self[138] then
1129
+ self[142] = nil
1130
+ elseif disablesAutoAttack and not self[142] then
1067
1131
  self.object:incrementDisableAutoAttackCounter()
1068
- self[138] = true
1132
+ self[142] = true
1069
1133
  end
1070
1134
  end
1071
1135
  },
@@ -1076,19 +1140,19 @@ __TS__SetDescriptor(
1076
1140
  "providesInvulnerability",
1077
1141
  {
1078
1142
  get = function(self)
1079
- local ____self__139_58 = self[139]
1080
- if ____self__139_58 == nil then
1081
- ____self__139_58 = false
1143
+ local ____self__143_53 = self[143]
1144
+ if ____self__143_53 == nil then
1145
+ ____self__143_53 = false
1082
1146
  end
1083
- return ____self__139_58
1147
+ return ____self__143_53
1084
1148
  end,
1085
1149
  set = function(self, providesInvulnerability)
1086
- if not providesInvulnerability and self[139] then
1150
+ if not providesInvulnerability and self[143] then
1087
1151
  self.object:decrementInvulnerabilityCounter()
1088
- self[139] = nil
1089
- elseif providesInvulnerability and not self[139] then
1152
+ self[143] = nil
1153
+ elseif providesInvulnerability and not self[143] then
1090
1154
  self.object:incrementInvulnerabilityCounter()
1091
- self[139] = true
1155
+ self[143] = true
1092
1156
  end
1093
1157
  end
1094
1158
  },
@@ -1099,17 +1163,17 @@ __TS__SetDescriptor(
1099
1163
  "killsOnExpiration",
1100
1164
  {
1101
1165
  get = function(self)
1102
- local ____self__140_59 = self[140]
1103
- if ____self__140_59 == nil then
1104
- ____self__140_59 = false
1166
+ local ____self__144_54 = self[144]
1167
+ if ____self__144_54 == nil then
1168
+ ____self__144_54 = false
1105
1169
  end
1106
- return ____self__140_59
1170
+ return ____self__144_54
1107
1171
  end,
1108
1172
  set = function(self, killsOnExpiration)
1109
- if not killsOnExpiration and self[140] then
1110
- self[140] = nil
1111
- elseif killsOnExpiration and not self[140] then
1112
- self[140] = true
1173
+ if not killsOnExpiration and self[144] then
1174
+ self[144] = nil
1175
+ elseif killsOnExpiration and not self[144] then
1176
+ self[144] = true
1113
1177
  end
1114
1178
  end
1115
1179
  },
@@ -1120,17 +1184,17 @@ __TS__SetDescriptor(
1120
1184
  "explodesOnExpiration",
1121
1185
  {
1122
1186
  get = function(self)
1123
- local ____self__141_60 = self[141]
1124
- if ____self__141_60 == nil then
1125
- ____self__141_60 = false
1187
+ local ____self__145_55 = self[145]
1188
+ if ____self__145_55 == nil then
1189
+ ____self__145_55 = false
1126
1190
  end
1127
- return ____self__141_60
1191
+ return ____self__145_55
1128
1192
  end,
1129
1193
  set = function(self, killsOnExpiration)
1130
- if not killsOnExpiration and self[141] then
1131
- self[141] = nil
1132
- elseif killsOnExpiration and not self[141] then
1133
- self[141] = true
1194
+ if not killsOnExpiration and self[145] then
1195
+ self[145] = nil
1196
+ elseif killsOnExpiration and not self[145] then
1197
+ self[145] = true
1134
1198
  end
1135
1199
  end
1136
1200
  },
@@ -1239,12 +1303,39 @@ __TS__SetDescriptor(
1239
1303
  },
1240
1304
  true
1241
1305
  )
1306
+ __TS__SetDescriptor(
1307
+ Buff.prototype,
1308
+ "manaRegenerationRateIncreaseFactor",
1309
+ {
1310
+ get = function(self)
1311
+ return self:getUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR)
1312
+ end,
1313
+ set = function(self, manaRegenerationRateIncreaseFactor)
1314
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR, manaRegenerationRateIncreaseFactor)
1315
+ end
1316
+ },
1317
+ true
1318
+ )
1242
1319
  __TS__SetDescriptor(
1243
1320
  Buff.prototype,
1244
1321
  "duration",
1245
- {get = function(self)
1246
- return self[103]
1247
- end},
1322
+ {
1323
+ get = function(self)
1324
+ return self[103]
1325
+ end,
1326
+ set = function(self, duration)
1327
+ if duration <= 0 then
1328
+ local timer = self._timer
1329
+ if timer ~= nil then
1330
+ timer:destroy()
1331
+ self._timer = nil
1332
+ end
1333
+ self[103] = 0
1334
+ else
1335
+ self.remainingDuration = self.remainingDuration + (duration - self[103])
1336
+ end
1337
+ end
1338
+ },
1248
1339
  true
1249
1340
  )
1250
1341
  __TS__SetDescriptor(
@@ -1252,13 +1343,13 @@ __TS__SetDescriptor(
1252
1343
  "remainingDuration",
1253
1344
  {
1254
1345
  get = function(self)
1255
- local ____opt_61 = self._timer
1256
- return ____opt_61 and ____opt_61.remaining or 0
1346
+ local ____opt_56 = self._timer
1347
+ return ____opt_56 and ____opt_56.remaining or 0
1257
1348
  end,
1258
1349
  set = function(self, remainingDuration)
1259
- local ____remainingDuration_65 = remainingDuration
1260
- local ____opt_63 = self._timer
1261
- local remainingDurationDelta = ____remainingDuration_65 - (____opt_63 and ____opt_63.remaining or 0)
1350
+ local ____remainingDuration_60 = remainingDuration
1351
+ local ____opt_58 = self._timer
1352
+ local remainingDurationDelta = ____remainingDuration_60 - (____opt_58 and ____opt_58.remaining or 0)
1262
1353
  if remainingDurationDelta ~= 0 then
1263
1354
  self[103] = self[103] + remainingDurationDelta
1264
1355
  if remainingDuration <= 0 then
@@ -1273,7 +1364,7 @@ __TS__SetDescriptor(
1273
1364
  remainingDuration,
1274
1365
  self._spellStealPriority,
1275
1366
  self._learnLevelMinimum,
1276
- self[142]
1367
+ self[146]
1277
1368
  ) then
1278
1369
  local timer = self._timer
1279
1370
  if timer == nil then
@@ -1288,7 +1379,99 @@ __TS__SetDescriptor(
1288
1379
  },
1289
1380
  true
1290
1381
  )
1291
- Buff.destroyEvent = buffDestroyEvent;
1382
+ __TS__SetDescriptor(
1383
+ Buff.prototype,
1384
+ "absorbedDamageFactor",
1385
+ {
1386
+ get = function(self)
1387
+ return self[135] or 1
1388
+ end,
1389
+ set = function(self, absorbedDamageFactor)
1390
+ if absorbedDamageFactor == 1 then
1391
+ self[135] = nil
1392
+ else
1393
+ self[135] = absorbedDamageFactor
1394
+ end
1395
+ end
1396
+ },
1397
+ true
1398
+ )
1399
+ __TS__SetDescriptor(
1400
+ Buff.prototype,
1401
+ "maximumDamageAbsorbed",
1402
+ {
1403
+ get = function(self)
1404
+ return self[136] or 0
1405
+ end,
1406
+ set = function(self, maximumDamageAbsorbed)
1407
+ if maximumDamageAbsorbed == 0 then
1408
+ self[136] = nil
1409
+ else
1410
+ self[136] = maximumDamageAbsorbed
1411
+ end
1412
+ end
1413
+ },
1414
+ true
1415
+ )
1416
+ __TS__SetDescriptor(
1417
+ Buff.prototype,
1418
+ "damageAbsorbed",
1419
+ {get = function(self)
1420
+ return self[137] or 0
1421
+ end},
1422
+ true
1423
+ )
1424
+ __TS__SetDescriptor(
1425
+ Buff.prototype,
1426
+ "destroysOnMaximumDamageAbsorbed",
1427
+ {
1428
+ get = function(self)
1429
+ local ____self__138_61 = self[138]
1430
+ if ____self__138_61 == nil then
1431
+ ____self__138_61 = true
1432
+ end
1433
+ return ____self__138_61
1434
+ end,
1435
+ set = function(self, destroysOnMaximumDamageAbsorbed)
1436
+ local ____destroysOnMaximumDamageAbsorbed_62
1437
+ if destroysOnMaximumDamageAbsorbed then
1438
+ ____destroysOnMaximumDamageAbsorbed_62 = nil
1439
+ else
1440
+ ____destroysOnMaximumDamageAbsorbed_62 = false
1441
+ end
1442
+ self[138] = ____destroysOnMaximumDamageAbsorbed_62
1443
+ end
1444
+ },
1445
+ true
1446
+ )
1447
+ __TS__SetDescriptor(
1448
+ Buff.prototype,
1449
+ "abilityCooldownFactor",
1450
+ {
1451
+ get = function(self)
1452
+ return self[147] or 1
1453
+ end,
1454
+ set = function(self, abilityCooldownFactor)
1455
+ local previousAbilityCooldownModifier = self[148]
1456
+ if previousAbilityCooldownModifier then
1457
+ for ____, ability in ipairs(self._unit.abilities) do
1458
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1459
+ end
1460
+ end
1461
+ local function modifier(ability, level, cooldown)
1462
+ return cooldown * abilityCooldownFactor
1463
+ end
1464
+ for ____, ability in ipairs(self._unit.abilities) do
1465
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1466
+ end
1467
+ self[148] = modifier
1468
+ self[147] = abilityCooldownFactor
1469
+ end
1470
+ },
1471
+ true
1472
+ )
1473
+ Buff.createdEvent = buffCreatedEvent
1474
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1292
1475
  (function(self)
1293
1476
  local function destroyBuffIfNeeded(buff)
1294
1477
  if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
@@ -1342,5 +1525,11 @@ Buff.destroyEvent = buffDestroyEvent;
1342
1525
  ____exports.checkBuffs(target)
1343
1526
  end
1344
1527
  )
1528
+ buffCreatedEvent:addListener(function(buff)
1529
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1530
+ end)
1531
+ buffBeingDestroyedEvent:addListener(function(buff)
1532
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1533
+ end)
1345
1534
  end)(Buff)
1346
1535
  return ____exports