warscript 0.0.1-dev.3af578d → 0.0.1-dev.3b93f8c

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 (215) 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 +71 -22
  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 +92 -47
  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 +12 -3
  25. package/engine/behaviour/ability/damage.lua +33 -39
  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 +71 -21
  39. package/engine/buff.lua +392 -172
  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/item.lua +1 -1
  76. package/engine/internal/unit/main-selected.lua +12 -27
  77. package/engine/internal/unit/order.d.ts +20 -0
  78. package/engine/internal/unit/order.lua +136 -0
  79. package/engine/internal/unit/range-event.d.ts +12 -0
  80. package/engine/internal/unit/range-event.lua +90 -0
  81. package/engine/internal/unit/scale.d.ts +7 -0
  82. package/engine/internal/unit/scale.lua +20 -0
  83. package/engine/internal/unit+ability.lua +10 -1
  84. package/engine/internal/unit+bonus.lua +3 -3
  85. package/engine/internal/unit+damage.d.ts +2 -11
  86. package/engine/internal/unit+damage.lua +10 -14
  87. package/engine/internal/unit+spellSteal.lua +1 -2
  88. package/engine/internal/unit-missile-launch.lua +52 -14
  89. package/engine/internal/unit.d.ts +43 -25
  90. package/engine/internal/unit.lua +384 -260
  91. package/engine/local-client.d.ts +2 -0
  92. package/engine/local-client.lua +30 -0
  93. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  94. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  95. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  96. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  97. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  98. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  99. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  100. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  101. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  102. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  103. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  104. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  105. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  106. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  107. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  108. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  109. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  110. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  111. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  112. package/engine/object-data/entry/ability-type/blank-configurable.lua +0 -9
  113. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  114. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  115. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  116. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  117. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  118. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  119. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  120. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  121. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  122. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  123. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  124. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  125. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  126. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  127. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  128. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  129. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  130. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  131. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  132. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  133. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  134. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  135. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  136. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  137. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  138. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  139. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  140. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  141. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  142. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  143. package/engine/object-data/entry/ability-type/web.lua +52 -0
  144. package/engine/object-data/entry/ability-type.d.ts +21 -17
  145. package/engine/object-data/entry/ability-type.lua +169 -28
  146. package/engine/object-data/entry/buff-type/applicable.lua +115 -106
  147. package/engine/object-data/entry/buff-type.d.ts +6 -12
  148. package/engine/object-data/entry/buff-type.lua +13 -29
  149. package/engine/object-data/entry/destructible-type.d.ts +28 -2
  150. package/engine/object-data/entry/destructible-type.lua +155 -0
  151. package/engine/object-data/entry/item-type.d.ts +1 -1
  152. package/engine/object-data/entry/item-type.lua +4 -4
  153. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  154. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  155. package/engine/object-data/entry/sound-preset.lua +140 -0
  156. package/engine/object-data/entry/unit-type.d.ts +18 -5
  157. package/engine/object-data/entry/unit-type.lua +208 -96
  158. package/engine/object-data/entry/upgrade.d.ts +1 -1
  159. package/engine/object-data/entry/upgrade.lua +4 -4
  160. package/engine/object-data/entry.d.ts +16 -14
  161. package/engine/object-data/entry.lua +60 -32
  162. package/engine/object-field/ability.d.ts +4 -4
  163. package/engine/object-field/ability.lua +9 -8
  164. package/engine/object-field/unit.d.ts +72 -3
  165. package/engine/object-field/unit.lua +268 -7
  166. package/engine/object-field.d.ts +26 -7
  167. package/engine/object-field.lua +360 -119
  168. package/engine/random.d.ts +10 -0
  169. package/engine/random.lua +21 -0
  170. package/engine/standard/entries/buff-type.d.ts +3 -0
  171. package/engine/standard/entries/buff-type.lua +3 -0
  172. package/engine/standard/entries/sound-preset.d.ts +10 -0
  173. package/engine/standard/entries/sound-preset.lua +10 -0
  174. package/engine/standard/fields/ability.d.ts +2 -2
  175. package/engine/standard/fields/ability.lua +2 -2
  176. package/engine/standard/fields/unit.d.ts +12 -0
  177. package/engine/standard/fields/unit.lua +20 -0
  178. package/engine/synchronization.d.ts +11 -0
  179. package/engine/synchronization.lua +77 -0
  180. package/engine/text-tag.d.ts +36 -2
  181. package/engine/text-tag.lua +250 -10
  182. package/engine/unit.d.ts +6 -0
  183. package/engine/unit.lua +6 -0
  184. package/lualib_bundle.lua +118 -47
  185. package/net/socket.lua +1 -1
  186. package/objutil/buff.lua +11 -10
  187. package/objutil/object.lua +1 -1
  188. package/objutil/unit.lua +8 -0
  189. package/operation.lua +23 -17
  190. package/package.json +5 -5
  191. package/patch-lua.lua +15 -0
  192. package/patch-lualib.lua +1 -1
  193. package/utility/arrays.d.ts +2 -0
  194. package/utility/arrays.lua +11 -0
  195. package/utility/callback-array.d.ts +17 -0
  196. package/utility/callback-array.lua +61 -0
  197. package/utility/functions.d.ts +8 -0
  198. package/utility/functions.lua +13 -0
  199. package/utility/linked-map.d.ts +34 -0
  200. package/utility/linked-map.lua +101 -0
  201. package/utility/linked-set.d.ts +4 -1
  202. package/utility/linked-set.lua +43 -1
  203. package/utility/lua-maps.d.ts +15 -2
  204. package/utility/lua-maps.lua +53 -2
  205. package/utility/lua-sets.d.ts +2 -0
  206. package/utility/lua-sets.lua +7 -0
  207. package/utility/records.lua +20 -1
  208. package/utility/reflection.lua +11 -7
  209. package/utility/types.d.ts +3 -0
  210. package/core/types/order.d.ts +0 -25
  211. package/core/types/order.lua +0 -55
  212. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  213. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  214. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  215. /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,14 +397,15 @@ 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
378
404
  buffByTypeId = {}
379
405
  buffByTypeIdByUnit[_unit] = buffByTypeId
380
406
  end
381
- local ____opt_15 = buffByTypeId[typeId]
407
+ self.previousBuff = buffByTypeId[typeId]
408
+ local ____opt_15 = self.previousBuff
382
409
  if ____opt_15 ~= nil then
383
410
  ____opt_15:destroy()
384
411
  end
@@ -454,24 +481,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
454
481
  abilityTypeIds = {}
455
482
  self._abilityTypeIds = abilityTypeIds
456
483
  end
457
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
484
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
485
+ local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
458
486
  local addedAbility = _unit:addAbility(abilityTypeId)
459
487
  if addedAbility ~= nil then
460
488
  _unit:makeAbilityPermanent(abilityTypeId, true)
461
489
  _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
490
+ if abilityParameters.isButtonVisible == false then
491
+ _unit:hideAbility(abilityTypeId, true)
473
492
  end
474
- abilityTypeIds[abilityTypeId] = true
493
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
494
+ field[1]:setValue(
495
+ addedAbility,
496
+ resolveNumberValue(ability, level, field[2])
497
+ )
498
+ end
499
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
475
500
  end
476
501
  end
477
502
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -483,18 +508,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
483
508
  self._behaviors = behaviors
484
509
  end
485
510
  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
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
493
520
  end
494
521
  end
495
- end
496
- if (next(additionalParameters)) ~= nil then
497
- self.parameters = additionalParameters
522
+ if (next(additionalParameters)) ~= nil then
523
+ self.parameters = additionalParameters
524
+ end
498
525
  end
499
526
  end
500
527
  if duration ~= nil and duration > 0 then
@@ -504,65 +531,65 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
504
531
  end
505
532
  self:onCreate()
506
533
  self[100] = 1
534
+ Event.invoke(buffCreatedEvent, self)
507
535
  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)
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
512
543
  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
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
518
550
  end
519
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
520
551
  end
521
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)
522
571
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
523
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
572
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
573
  else
525
574
  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
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
534
579
  if isWidgetProvided then
535
- ____isWidgetProvided_40 = yOrParametersOrDuration
580
+ ____isWidgetProvided_38 = yOrParametersOrDuration
536
581
  else
537
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
582
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
538
583
  end
539
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
540
- ____Effect_flash_43(
541
- ____Effect_42,
542
- __TS__SparseArraySpread(____array_41)
584
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
585
+ ____Effect_flash_41(
586
+ ____Effect_40,
587
+ __TS__SparseArraySpread(____array_39)
543
588
  )
544
589
  end
545
590
  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
- )
591
+ function Buff.prototype.expire(self)
592
+ expireBuff(self)
566
593
  end
567
594
  function Buff.prototype.onCreate(self)
568
595
  end
@@ -592,26 +619,33 @@ function Buff.prototype.onDestroy(self)
592
619
  behavior:destroy()
593
620
  end
594
621
  end
595
- if self[137] 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
629
+ unit:decrementInvulnerabilityCounter()
630
+ end
631
+ if self[142] then
596
632
  unit:decrementDisableAutoAttackCounter()
597
633
  end
598
- if self[135] then
599
- if self[136] then
600
- unit:decrementStunCounter()
634
+ if self[140] then
635
+ if self[141] then
636
+ unit:decrementForceStunCounter()
601
637
  end
602
638
  unit:decrementStunCounter()
603
639
  end
640
+ if self[139] then
641
+ unit:decrementGhostCounter()
642
+ end
604
643
  if self._abilityTypeIds ~= nil then
605
- for abilityTypeId in pairs(self._abilityTypeIds) do
644
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
606
645
  unit:removeAbility(abilityTypeId)
607
646
  end
608
647
  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)
648
+ Event.invoke(buffBeingDestroyedEvent, self)
615
649
  self[100] = 3
616
650
  return UnitBehavior.prototype.onDestroy(self)
617
651
  end
@@ -640,8 +674,8 @@ function Buff.apply(self, ...)
640
674
  end
641
675
  end
642
676
  function Buff.getByTypeId(self, unit, typeId)
643
- local ____opt_48 = buffByTypeIdByUnit[unit]
644
- local buff = ____opt_48 and ____opt_48[typeId]
677
+ local ____opt_42 = buffByTypeIdByUnit[unit]
678
+ local buff = ____opt_42 and ____opt_42[typeId]
645
679
  if __TS__InstanceOf(buff, self) then
646
680
  return buff
647
681
  end
@@ -655,9 +689,9 @@ function Buff.prototype.onExpiration(self)
655
689
  if self[121] ~= nil then
656
690
  (self[102] or unit):healTarget(unit, self[120] or 0)
657
691
  end
658
- if self[140] then
692
+ if self[145] then
659
693
  unit:explode()
660
- elseif self[139] then
694
+ elseif self[144] then
661
695
  unit:kill()
662
696
  end
663
697
  end
@@ -712,6 +746,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
712
746
  end
713
747
  function Buff.prototype.onDamageReceived(self, source, event)
714
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
715
761
  local damageReceivedEventCount = (self[133] or 0) + 1
716
762
  self[133] = damageReceivedEventCount
717
763
  if damageReceivedEventCount == self[134] then
@@ -799,8 +845,8 @@ __TS__SetDescriptor(
799
845
  return
800
846
  end
801
847
  self[112] = damageInterval
802
- local ____opt_50 = self._timer
803
- 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
804
850
  local timer = self[114]
805
851
  if timer == nil then
806
852
  timer = Timer:create()
@@ -879,8 +925,8 @@ __TS__SetDescriptor(
879
925
  return
880
926
  end
881
927
  self[117] = healingInterval
882
- local ____opt_52 = self._timer
883
- 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
884
930
  local timer = self[119]
885
931
  if timer == nil then
886
932
  timer = Timer:create()
@@ -961,30 +1007,79 @@ __TS__SetDescriptor(
961
1007
  },
962
1008
  true
963
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
+ )
1036
+ __TS__SetDescriptor(
1037
+ Buff.prototype,
1038
+ "turnsIntoGhost",
1039
+ {
1040
+ get = function(self)
1041
+ local ____self__139_49 = self[139]
1042
+ if ____self__139_49 == nil then
1043
+ ____self__139_49 = false
1044
+ end
1045
+ return ____self__139_49
1046
+ end,
1047
+ set = function(self, turnsIntoGhost)
1048
+ if not turnsIntoGhost and self[139] then
1049
+ self.object:decrementGhostCounter()
1050
+ self[139] = nil
1051
+ elseif turnsIntoGhost and not self[139] then
1052
+ self.object:incrementGhostCounter()
1053
+ self[139] = true
1054
+ end
1055
+ end
1056
+ },
1057
+ true
1058
+ )
964
1059
  __TS__SetDescriptor(
965
1060
  Buff.prototype,
966
1061
  "stuns",
967
1062
  {
968
1063
  get = function(self)
969
- local ____self__135_54 = self[135]
970
- if ____self__135_54 == nil then
971
- ____self__135_54 = false
1064
+ local ____self__140_50 = self[140]
1065
+ if ____self__140_50 == nil then
1066
+ ____self__140_50 = false
972
1067
  end
973
- return ____self__135_54
1068
+ return ____self__140_50
974
1069
  end,
975
1070
  set = function(self, stuns)
976
- if not stuns and self[135] then
977
- if self[136] then
978
- self.object:decrementStunCounter()
1071
+ if not stuns and self[140] then
1072
+ if self[141] then
1073
+ self.object:decrementForceStunCounter()
979
1074
  end
980
1075
  self.object:decrementStunCounter()
981
- self[135] = nil
982
- elseif stuns and not self[135] then
983
- if self[136] then
984
- self.object:incrementStunCounter()
1076
+ self[140] = nil
1077
+ elseif stuns and not self[140] then
1078
+ if self[141] then
1079
+ self.object:incrementForceStunCounter()
985
1080
  end
986
1081
  self.object:incrementStunCounter()
987
- self[135] = true
1082
+ self[140] = true
988
1083
  end
989
1084
  end
990
1085
  },
@@ -995,23 +1090,23 @@ __TS__SetDescriptor(
995
1090
  "ignoresStunImmunity",
996
1091
  {
997
1092
  get = function(self)
998
- local ____self__136_55 = self[136]
999
- if ____self__136_55 == nil then
1000
- ____self__136_55 = false
1093
+ local ____self__141_51 = self[141]
1094
+ if ____self__141_51 == nil then
1095
+ ____self__141_51 = false
1001
1096
  end
1002
- return ____self__136_55
1097
+ return ____self__141_51
1003
1098
  end,
1004
1099
  set = function(self, ignoresStunImmunity)
1005
- if not ignoresStunImmunity and self[136] then
1006
- if self[135] then
1007
- self.object:decrementStunCounter()
1100
+ if not ignoresStunImmunity and self[141] then
1101
+ if self[140] then
1102
+ self.object:decrementForceStunCounter()
1008
1103
  end
1009
- self[136] = nil
1010
- elseif ignoresStunImmunity and not self[136] then
1011
- if self[135] then
1012
- self.object:incrementStunCounter()
1104
+ self[141] = nil
1105
+ elseif ignoresStunImmunity and not self[141] then
1106
+ if self[140] then
1107
+ self.object:incrementForceStunCounter()
1013
1108
  end
1014
- self[136] = true
1109
+ self[141] = true
1015
1110
  end
1016
1111
  end
1017
1112
  },
@@ -1022,19 +1117,19 @@ __TS__SetDescriptor(
1022
1117
  "disablesAutoAttack",
1023
1118
  {
1024
1119
  get = function(self)
1025
- local ____self__137_56 = self[137]
1026
- if ____self__137_56 == nil then
1027
- ____self__137_56 = false
1120
+ local ____self__142_52 = self[142]
1121
+ if ____self__142_52 == nil then
1122
+ ____self__142_52 = false
1028
1123
  end
1029
- return ____self__137_56
1124
+ return ____self__142_52
1030
1125
  end,
1031
1126
  set = function(self, disablesAutoAttack)
1032
- if not disablesAutoAttack and self[137] then
1127
+ if not disablesAutoAttack and self[142] then
1033
1128
  self.object:decrementDisableAutoAttackCounter()
1034
- self[137] = nil
1035
- elseif disablesAutoAttack and not self[137] then
1129
+ self[142] = nil
1130
+ elseif disablesAutoAttack and not self[142] then
1036
1131
  self.object:incrementDisableAutoAttackCounter()
1037
- self[137] = true
1132
+ self[142] = true
1038
1133
  end
1039
1134
  end
1040
1135
  },
@@ -1045,19 +1140,19 @@ __TS__SetDescriptor(
1045
1140
  "providesInvulnerability",
1046
1141
  {
1047
1142
  get = function(self)
1048
- local ____self__138_57 = self[138]
1049
- if ____self__138_57 == nil then
1050
- ____self__138_57 = false
1143
+ local ____self__143_53 = self[143]
1144
+ if ____self__143_53 == nil then
1145
+ ____self__143_53 = false
1051
1146
  end
1052
- return ____self__138_57
1147
+ return ____self__143_53
1053
1148
  end,
1054
1149
  set = function(self, providesInvulnerability)
1055
- if not providesInvulnerability and self[138] then
1150
+ if not providesInvulnerability and self[143] then
1056
1151
  self.object:decrementInvulnerabilityCounter()
1057
- self[138] = nil
1058
- elseif providesInvulnerability and not self[138] then
1152
+ self[143] = nil
1153
+ elseif providesInvulnerability and not self[143] then
1059
1154
  self.object:incrementInvulnerabilityCounter()
1060
- self[138] = true
1155
+ self[143] = true
1061
1156
  end
1062
1157
  end
1063
1158
  },
@@ -1068,17 +1163,17 @@ __TS__SetDescriptor(
1068
1163
  "killsOnExpiration",
1069
1164
  {
1070
1165
  get = function(self)
1071
- local ____self__139_58 = self[139]
1072
- if ____self__139_58 == nil then
1073
- ____self__139_58 = false
1166
+ local ____self__144_54 = self[144]
1167
+ if ____self__144_54 == nil then
1168
+ ____self__144_54 = false
1074
1169
  end
1075
- return ____self__139_58
1170
+ return ____self__144_54
1076
1171
  end,
1077
1172
  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
1173
+ if not killsOnExpiration and self[144] then
1174
+ self[144] = nil
1175
+ elseif killsOnExpiration and not self[144] then
1176
+ self[144] = true
1082
1177
  end
1083
1178
  end
1084
1179
  },
@@ -1089,17 +1184,17 @@ __TS__SetDescriptor(
1089
1184
  "explodesOnExpiration",
1090
1185
  {
1091
1186
  get = function(self)
1092
- local ____self__140_59 = self[140]
1093
- if ____self__140_59 == nil then
1094
- ____self__140_59 = false
1187
+ local ____self__145_55 = self[145]
1188
+ if ____self__145_55 == nil then
1189
+ ____self__145_55 = false
1095
1190
  end
1096
- return ____self__140_59
1191
+ return ____self__145_55
1097
1192
  end,
1098
1193
  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
1194
+ if not killsOnExpiration and self[145] then
1195
+ self[145] = nil
1196
+ elseif killsOnExpiration and not self[145] then
1197
+ self[145] = true
1103
1198
  end
1104
1199
  end
1105
1200
  },
@@ -1208,12 +1303,39 @@ __TS__SetDescriptor(
1208
1303
  },
1209
1304
  true
1210
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
+ )
1211
1319
  __TS__SetDescriptor(
1212
1320
  Buff.prototype,
1213
1321
  "duration",
1214
- {get = function(self)
1215
- return self[103]
1216
- 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
+ },
1217
1339
  true
1218
1340
  )
1219
1341
  __TS__SetDescriptor(
@@ -1221,13 +1343,13 @@ __TS__SetDescriptor(
1221
1343
  "remainingDuration",
1222
1344
  {
1223
1345
  get = function(self)
1224
- local ____opt_60 = self._timer
1225
- return ____opt_60 and ____opt_60.remaining or 0
1346
+ local ____opt_56 = self._timer
1347
+ return ____opt_56 and ____opt_56.remaining or 0
1226
1348
  end,
1227
1349
  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)
1350
+ local ____remainingDuration_60 = remainingDuration
1351
+ local ____opt_58 = self._timer
1352
+ local remainingDurationDelta = ____remainingDuration_60 - (____opt_58 and ____opt_58.remaining or 0)
1231
1353
  if remainingDurationDelta ~= 0 then
1232
1354
  self[103] = self[103] + remainingDurationDelta
1233
1355
  if remainingDuration <= 0 then
@@ -1242,7 +1364,7 @@ __TS__SetDescriptor(
1242
1364
  remainingDuration,
1243
1365
  self._spellStealPriority,
1244
1366
  self._learnLevelMinimum,
1245
- self[141]
1367
+ self[146]
1246
1368
  ) then
1247
1369
  local timer = self._timer
1248
1370
  if timer == nil then
@@ -1257,7 +1379,99 @@ __TS__SetDescriptor(
1257
1379
  },
1258
1380
  true
1259
1381
  )
1260
- 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;
1261
1475
  (function(self)
1262
1476
  local function destroyBuffIfNeeded(buff)
1263
1477
  if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
@@ -1311,5 +1525,11 @@ Buff.destroyEvent = buffDestroyEvent;
1311
1525
  ____exports.checkBuffs(target)
1312
1526
  end
1313
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)
1314
1534
  end)(Buff)
1315
1535
  return ____exports