warscript 0.0.1-dev.47f470c → 0.0.1-dev.48e5280

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