warscript 0.0.1-dev.9048d45 → 0.0.1-dev.90da649

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 (162) 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 +85 -44
  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/decl/native.d.ts +846 -790
  17. package/destroyable.d.ts +1 -0
  18. package/destroyable.lua +9 -0
  19. package/engine/behavior.d.ts +14 -1
  20. package/engine/behavior.lua +230 -70
  21. package/engine/behaviour/ability/apply-buff.lua +5 -5
  22. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  23. package/engine/behaviour/ability/damage.d.ts +9 -3
  24. package/engine/behaviour/ability/damage.lua +26 -38
  25. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  26. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  27. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  28. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  29. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  30. package/engine/behaviour/ability/restore-mana.lua +6 -6
  31. package/engine/behaviour/ability.d.ts +7 -2
  32. package/engine/behaviour/ability.lua +28 -22
  33. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  34. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  35. package/engine/behaviour/unit.d.ts +40 -2
  36. package/engine/behaviour/unit.lua +259 -6
  37. package/engine/buff.d.ts +28 -12
  38. package/engine/buff.lua +222 -128
  39. package/engine/internal/ability.d.ts +7 -1
  40. package/engine/internal/ability.lua +49 -9
  41. package/engine/internal/item/ability.lua +63 -11
  42. package/engine/internal/item+owner.lua +12 -6
  43. package/engine/internal/item.d.ts +18 -17
  44. package/engine/internal/item.lua +135 -49
  45. package/engine/internal/mechanics/ability-duration.lua +1 -1
  46. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  47. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  48. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  49. package/engine/internal/misc/frame-coordinates.lua +21 -0
  50. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  51. package/engine/internal/misc/get-terrain-z.lua +11 -0
  52. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  53. package/engine/internal/misc/player-local-handle.lua +5 -0
  54. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  55. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  56. package/engine/internal/unit/ability.d.ts +35 -0
  57. package/engine/internal/unit/ability.lua +98 -9
  58. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  59. package/engine/internal/unit/allowed-targets.lua +9 -1
  60. package/engine/internal/unit/bonus.d.ts +2 -0
  61. package/engine/internal/unit/bonus.lua +10 -0
  62. package/engine/internal/unit/fly-height.d.ts +7 -0
  63. package/engine/internal/unit/fly-height.lua +20 -0
  64. package/engine/internal/unit/main-selected.lua +12 -27
  65. package/engine/internal/unit/order.d.ts +20 -0
  66. package/engine/internal/unit/order.lua +136 -0
  67. package/engine/internal/unit/scale.d.ts +7 -0
  68. package/engine/internal/unit/scale.lua +20 -0
  69. package/engine/internal/unit+ability.lua +10 -1
  70. package/engine/internal/unit+damage.d.ts +2 -11
  71. package/engine/internal/unit+damage.lua +10 -14
  72. package/engine/internal/unit+spellSteal.lua +1 -2
  73. package/engine/internal/unit-missile-launch.lua +45 -14
  74. package/engine/internal/unit.d.ts +43 -17
  75. package/engine/internal/unit.lua +343 -172
  76. package/engine/local-client.d.ts +2 -0
  77. package/engine/local-client.lua +30 -0
  78. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  79. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  80. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  81. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  82. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  83. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  84. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  85. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  86. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  87. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  88. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  89. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  90. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  91. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  92. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  93. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  94. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  95. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  96. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  97. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  98. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  99. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  100. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  101. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  102. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  103. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  104. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  105. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  106. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  107. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  108. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  109. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  110. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  111. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  112. package/engine/object-data/entry/ability-type/web.lua +52 -0
  113. package/engine/object-data/entry/ability-type.d.ts +11 -11
  114. package/engine/object-data/entry/ability-type.lua +35 -13
  115. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  116. package/engine/object-data/entry/buff-type.d.ts +5 -11
  117. package/engine/object-data/entry/buff-type.lua +11 -27
  118. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  119. package/engine/object-data/entry/destructible-type.lua +155 -0
  120. package/engine/object-data/entry/sound-preset.d.ts +17 -0
  121. package/engine/object-data/entry/sound-preset.lua +104 -0
  122. package/engine/object-data/entry/unit-type.d.ts +17 -4
  123. package/engine/object-data/entry/unit-type.lua +197 -85
  124. package/engine/object-field/ability.d.ts +4 -4
  125. package/engine/object-field/ability.lua +7 -6
  126. package/engine/object-field/unit.d.ts +72 -3
  127. package/engine/object-field/unit.lua +268 -7
  128. package/engine/object-field.d.ts +25 -6
  129. package/engine/object-field.lua +357 -118
  130. package/engine/random.d.ts +9 -0
  131. package/engine/random.lua +13 -0
  132. package/engine/standard/entries/buff-type.d.ts +3 -0
  133. package/engine/standard/entries/buff-type.lua +3 -0
  134. package/engine/standard/fields/ability.d.ts +2 -2
  135. package/engine/standard/fields/ability.lua +2 -2
  136. package/engine/standard/fields/unit.d.ts +12 -0
  137. package/engine/standard/fields/unit.lua +20 -0
  138. package/engine/synchronization.d.ts +11 -0
  139. package/engine/synchronization.lua +77 -0
  140. package/engine/text-tag.d.ts +36 -2
  141. package/engine/text-tag.lua +250 -10
  142. package/engine/unit.d.ts +3 -0
  143. package/engine/unit.lua +3 -0
  144. package/net/socket.lua +1 -1
  145. package/objutil/buff.lua +2 -3
  146. package/package.json +2 -2
  147. package/patch-lualib.lua +1 -1
  148. package/utility/arrays.d.ts +2 -0
  149. package/utility/arrays.lua +11 -0
  150. package/utility/callback-array.d.ts +17 -0
  151. package/utility/callback-array.lua +61 -0
  152. package/utility/functions.d.ts +8 -0
  153. package/utility/functions.lua +13 -0
  154. package/utility/linked-set.d.ts +2 -0
  155. package/utility/linked-set.lua +22 -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/types.d.ts +3 -0
  161. package/core/types/order.d.ts +0 -25
  162. package/core/types/order.lua +0 -55
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
@@ -53,6 +51,10 @@ local ____item = require("engine.internal.item")
53
51
  local Item = ____item.Item
54
52
  local ____destructable = require("core.types.destructable")
55
53
  local Destructable = ____destructable.Destructable
54
+ local ____ability = require("engine.standard.fields.ability")
55
+ local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
56
+ local ____ability = require("engine.behaviour.ability")
57
+ local AbilityBehavior = ____ability.AbilityBehavior
56
58
  local getUnitAbility = BlzGetUnitAbility
57
59
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
58
60
  local stringValueByBuffTypeIdByFieldId = {}
@@ -101,6 +103,7 @@ local buffParametersKeys = {
101
103
  armorIncreaseFactor = true,
102
104
  attackSpeedIncreaseFactor = true,
103
105
  movementSpeedIncreaseFactor = true,
106
+ manaRegenerationRateIncreaseFactor = true,
104
107
  evasionProbability = true,
105
108
  missProbability = true,
106
109
  damageFactor = true,
@@ -109,6 +112,7 @@ local buffParametersKeys = {
109
112
  durationIncreaseOnAutoAttack = true,
110
113
  maximumDuration = true,
111
114
  maximumRemainingDuration = true,
115
+ turnsIntoGhost = true,
112
116
  stuns = true,
113
117
  ignoresStunImmunity = true,
114
118
  providesStunImmunity = true,
@@ -123,7 +127,8 @@ local buffParametersKeys = {
123
127
  damageOnExpiration = true,
124
128
  healingOnExpiration = true,
125
129
  killsOnExpiration = true,
126
- explodesOnExpiration = true
130
+ explodesOnExpiration = true,
131
+ abilityCooldownFactor = true
127
132
  }
128
133
  local function resolveEnumValue(ability, level, value)
129
134
  if value == nil or type(value) == "number" then
@@ -174,6 +179,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
174
179
  end
175
180
  end
176
181
  local buffBooleanParameters = {
182
+ "turnsIntoGhost",
177
183
  "stuns",
178
184
  "ignoresStunImmunity",
179
185
  "disablesAutoAttack",
@@ -185,6 +191,7 @@ local buffNumberParameters = {
185
191
  "durationIncreaseOnAutoAttack",
186
192
  "attackSpeedIncreaseFactor",
187
193
  "movementSpeedIncreaseFactor",
194
+ "manaRegenerationRateIncreaseFactor",
188
195
  "evasionProbability",
189
196
  "armorIncrease",
190
197
  "damageFactor",
@@ -199,7 +206,8 @@ local buffNumberParameters = {
199
206
  "healingPerInterval",
200
207
  "healingOverDuration",
201
208
  "damageOnExpiration",
202
- "healingOnExpiration"
209
+ "healingOnExpiration",
210
+ "abilityCooldownFactor"
203
211
  }
204
212
  local unsuccessfulApplicationMarker = {}
205
213
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -302,7 +310,8 @@ buffHealingIntervalTimerCallback = function(buff)
302
310
  source:healTarget(buff[101], healingPerInterval)
303
311
  end
304
312
  end
305
- local buffDestroyEvent = __TS__New(Event)
313
+ local buffCreatedEvent = __TS__New(Event)
314
+ local buffBeingDestroyedEvent = __TS__New(Event)
306
315
  ____exports.Buff = __TS__Class()
307
316
  local Buff = ____exports.Buff
308
317
  Buff.name = "Buff"
@@ -317,33 +326,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
317
326
  local polarity
318
327
  local resistanceType
319
328
  local ability
329
+ local abilityBehavior
320
330
  if type(typeIdOrTypeIds) ~= "number" then
321
331
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
322
332
  polarity = resistanceTypeOrPolarity
323
333
  resistanceType = abilityOrParametersOrResistanceType
324
- if __TS__InstanceOf(parametersOrAbility, Ability) then
334
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
335
+ abilityBehavior = parametersOrAbility
336
+ ability = abilityBehavior.ability
337
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
325
338
  ability = parametersOrAbility
326
- else
327
- ability = nil
339
+ elseif parametersOrAbility ~= nil then
328
340
  parameters = parametersOrAbility
329
341
  end
330
342
  else
331
343
  typeId = typeIdOrTypeIds
332
344
  polarity = polarityOrTypeIdSelectionPolicy
333
345
  resistanceType = resistanceTypeOrPolarity
334
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
346
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, AbilityBehavior) then
347
+ abilityBehavior = abilityOrParametersOrResistanceType
348
+ ability = abilityBehavior.ability
349
+ parameters = parametersOrAbility
350
+ elseif __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
335
351
  ability = abilityOrParametersOrResistanceType
336
352
  parameters = parametersOrAbility
337
- else
338
- ability = nil
353
+ elseif abilityOrParametersOrResistanceType ~= nil then
339
354
  parameters = abilityOrParametersOrResistanceType
355
+ else
356
+ parameters = parametersOrAbility
340
357
  end
341
358
  end
359
+ self.sourceAbilityBehavior = abilityBehavior
342
360
  self.typeId = typeId
343
- if not __TS__InstanceOf(ability, Ability) then
344
- parameters = ability
345
- ability = nil
346
- end
347
361
  local defaultParameters = self.constructor.defaultParameters
348
362
  local level = parameters and parameters.level or defaultParameters.level
349
363
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -371,7 +385,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
371
385
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
372
386
  if missProbability ~= nil then
373
387
  missProbability = resolveNumberValue(ability, level, missProbability)
374
- self[141] = missProbability
388
+ self[142] = missProbability
375
389
  end
376
390
  local buffByTypeId = buffByTypeIdByUnit[_unit]
377
391
  if buffByTypeId == nil then
@@ -504,64 +518,68 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
504
518
  end
505
519
  self:onCreate()
506
520
  self[100] = 1
521
+ Event.invoke(buffCreatedEvent, self)
507
522
  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)
523
+ function Buff.prototype.onAbilityGained(self, ability)
524
+ if __TS__InstanceOf(ability, UnitAbility) then
525
+ local abilityCooldownModifier = self[144]
526
+ if abilityCooldownModifier then
527
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
528
+ end
529
+ end
512
530
  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
531
+ function Buff.prototype.onAbilityLost(self, ability)
532
+ if __TS__InstanceOf(ability, UnitAbility) then
533
+ local abilityCooldownModifier = self[144]
534
+ if abilityCooldownModifier then
535
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
536
+ end
518
537
  end
519
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
520
538
  end
521
539
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
522
540
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
523
541
  Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
542
  else
525
543
  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(
544
+ local ____Effect_40 = Effect
545
+ local ____Effect_flash_41 = Effect.flash
546
+ local ____array_39 = __TS__SparseArrayNew(
529
547
  self[105],
530
548
  isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
531
549
  stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
532
550
  )
533
- local ____isWidgetProvided_40
551
+ local ____isWidgetProvided_38
534
552
  if isWidgetProvided then
535
- ____isWidgetProvided_40 = yOrParametersOrDuration
553
+ ____isWidgetProvided_38 = yOrParametersOrDuration
536
554
  else
537
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
555
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
538
556
  end
539
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
540
- ____Effect_flash_43(
541
- ____Effect_42,
542
- __TS__SparseArraySpread(____array_41)
557
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
558
+ ____Effect_flash_41(
559
+ ____Effect_40,
560
+ __TS__SparseArraySpread(____array_39)
543
561
  )
544
562
  end
545
563
  end
546
564
  function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
547
565
  local isWidgetProvided = type(widgetOrDuration) == "table"
548
- local ____Effect_46 = Effect
549
- local ____Effect_flash_47 = Effect.flash
550
- local ____array_45 = __TS__SparseArrayNew(
566
+ local ____Effect_44 = Effect
567
+ local ____Effect_flash_45 = Effect.flash
568
+ local ____array_43 = __TS__SparseArrayNew(
551
569
  self[106],
552
570
  isWidgetProvided and widgetOrDuration or self._unit,
553
571
  stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
554
572
  )
555
- local ____isWidgetProvided_44
573
+ local ____isWidgetProvided_42
556
574
  if isWidgetProvided then
557
- ____isWidgetProvided_44 = duration
575
+ ____isWidgetProvided_42 = duration
558
576
  else
559
- ____isWidgetProvided_44 = widgetOrDuration
577
+ ____isWidgetProvided_42 = widgetOrDuration
560
578
  end
561
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
562
- ____Effect_flash_47(
563
- ____Effect_46,
564
- __TS__SparseArraySpread(____array_45)
579
+ __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
580
+ ____Effect_flash_45(
581
+ ____Effect_44,
582
+ __TS__SparseArraySpread(____array_43)
565
583
  )
566
584
  end
567
585
  function Buff.prototype.onCreate(self)
@@ -592,26 +610,33 @@ function Buff.prototype.onDestroy(self)
592
610
  behavior:destroy()
593
611
  end
594
612
  end
595
- if self[137] then
613
+ local previousAbilityCooldownModifier = self[144]
614
+ if previousAbilityCooldownModifier then
615
+ for ____, ability in ipairs(self._unit.abilities) do
616
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
617
+ end
618
+ end
619
+ if self[139] then
620
+ unit:decrementInvulnerabilityCounter()
621
+ end
622
+ if self[138] then
596
623
  unit:decrementDisableAutoAttackCounter()
597
624
  end
598
- if self[135] then
599
- if self[136] then
600
- unit:decrementStunCounter()
625
+ if self[136] then
626
+ if self[137] then
627
+ unit:decrementForceStunCounter()
601
628
  end
602
629
  unit:decrementStunCounter()
603
630
  end
631
+ if self[135] then
632
+ unit:decrementGhostCounter()
633
+ end
604
634
  if self._abilityTypeIds ~= nil then
605
635
  for abilityTypeId in pairs(self._abilityTypeIds) do
606
636
  unit:removeAbility(abilityTypeId)
607
637
  end
608
638
  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)
639
+ Event.invoke(buffBeingDestroyedEvent, self)
615
640
  self[100] = 3
616
641
  return UnitBehavior.prototype.onDestroy(self)
617
642
  end
@@ -640,8 +665,8 @@ function Buff.apply(self, ...)
640
665
  end
641
666
  end
642
667
  function Buff.getByTypeId(self, unit, typeId)
643
- local ____opt_48 = buffByTypeIdByUnit[unit]
644
- local buff = ____opt_48 and ____opt_48[typeId]
668
+ local ____opt_46 = buffByTypeIdByUnit[unit]
669
+ local buff = ____opt_46 and ____opt_46[typeId]
645
670
  if __TS__InstanceOf(buff, self) then
646
671
  return buff
647
672
  end
@@ -655,9 +680,9 @@ function Buff.prototype.onExpiration(self)
655
680
  if self[121] ~= nil then
656
681
  (self[102] or unit):healTarget(unit, self[120] or 0)
657
682
  end
658
- if self[140] then
683
+ if self[141] then
659
684
  unit:explode()
660
- elseif self[139] then
685
+ elseif self[140] then
661
686
  unit:kill()
662
687
  end
663
688
  end
@@ -799,8 +824,8 @@ __TS__SetDescriptor(
799
824
  return
800
825
  end
801
826
  self[112] = damageInterval
802
- local ____opt_50 = self._timer
803
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
827
+ local ____opt_48 = self._timer
828
+ local elapsed = ____opt_48 and ____opt_48.elapsed or 0
804
829
  local timer = self[114]
805
830
  if timer == nil then
806
831
  timer = Timer:create()
@@ -879,8 +904,8 @@ __TS__SetDescriptor(
879
904
  return
880
905
  end
881
906
  self[117] = healingInterval
882
- local ____opt_52 = self._timer
883
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
907
+ local ____opt_50 = self._timer
908
+ local elapsed = ____opt_50 and ____opt_50.elapsed or 0
884
909
  local timer = self[119]
885
910
  if timer == nil then
886
911
  timer = Timer:create()
@@ -961,30 +986,53 @@ __TS__SetDescriptor(
961
986
  },
962
987
  true
963
988
  )
989
+ __TS__SetDescriptor(
990
+ Buff.prototype,
991
+ "turnsIntoGhost",
992
+ {
993
+ get = function(self)
994
+ local ____self__135_52 = self[135]
995
+ if ____self__135_52 == nil then
996
+ ____self__135_52 = false
997
+ end
998
+ return ____self__135_52
999
+ end,
1000
+ set = function(self, turnsIntoGhost)
1001
+ if not turnsIntoGhost and self[135] then
1002
+ self.object:decrementGhostCounter()
1003
+ self[135] = nil
1004
+ elseif turnsIntoGhost and not self[135] then
1005
+ self.object:incrementGhostCounter()
1006
+ self[135] = true
1007
+ end
1008
+ end
1009
+ },
1010
+ true
1011
+ )
964
1012
  __TS__SetDescriptor(
965
1013
  Buff.prototype,
966
1014
  "stuns",
967
1015
  {
968
1016
  get = function(self)
969
- local ____self__135_54 = self[135]
970
- if ____self__135_54 == nil then
971
- ____self__135_54 = false
1017
+ local ____self__136_53 = self[136]
1018
+ if ____self__136_53 == nil then
1019
+ ____self__136_53 = false
972
1020
  end
973
- return ____self__135_54
1021
+ return ____self__136_53
974
1022
  end,
975
1023
  set = function(self, stuns)
976
- if not stuns and self[135] then
977
- if self[136] then
978
- self.object:decrementStunCounter()
1024
+ if not stuns and self[136] then
1025
+ if self[137] then
1026
+ self.object:decrementForceStunCounter()
979
1027
  end
980
1028
  self.object:decrementStunCounter()
981
- self[135] = nil
982
- elseif stuns and not self[135] then
983
- if self[136] then
984
- self.object:incrementStunCounter()
1029
+ self[136] = nil
1030
+ elseif stuns and not self[136] then
1031
+ if self[137] then
1032
+ self.object:incrementForceStunCounter()
985
1033
  end
986
1034
  self.object:incrementStunCounter()
987
- self[135] = true
1035
+ self[136] = true
988
1036
  end
989
1037
  end
990
1038
  },
@@ -995,23 +1043,23 @@ __TS__SetDescriptor(
995
1043
  "ignoresStunImmunity",
996
1044
  {
997
1045
  get = function(self)
998
- local ____self__136_55 = self[136]
999
- if ____self__136_55 == nil then
1000
- ____self__136_55 = false
1046
+ local ____self__137_54 = self[137]
1047
+ if ____self__137_54 == nil then
1048
+ ____self__137_54 = false
1001
1049
  end
1002
- return ____self__136_55
1050
+ return ____self__137_54
1003
1051
  end,
1004
1052
  set = function(self, ignoresStunImmunity)
1005
- if not ignoresStunImmunity and self[136] then
1006
- if self[135] then
1007
- self.object:decrementStunCounter()
1053
+ if not ignoresStunImmunity and self[137] then
1054
+ if self[136] then
1055
+ self.object:decrementForceStunCounter()
1008
1056
  end
1009
- self[136] = nil
1010
- elseif ignoresStunImmunity and not self[136] then
1011
- if self[135] then
1012
- self.object:incrementStunCounter()
1057
+ self[137] = nil
1058
+ elseif ignoresStunImmunity and not self[137] then
1059
+ if self[136] then
1060
+ self.object:incrementForceStunCounter()
1013
1061
  end
1014
- self[136] = true
1062
+ self[137] = true
1015
1063
  end
1016
1064
  end
1017
1065
  },
@@ -1022,19 +1070,19 @@ __TS__SetDescriptor(
1022
1070
  "disablesAutoAttack",
1023
1071
  {
1024
1072
  get = function(self)
1025
- local ____self__137_56 = self[137]
1026
- if ____self__137_56 == nil then
1027
- ____self__137_56 = false
1073
+ local ____self__138_55 = self[138]
1074
+ if ____self__138_55 == nil then
1075
+ ____self__138_55 = false
1028
1076
  end
1029
- return ____self__137_56
1077
+ return ____self__138_55
1030
1078
  end,
1031
1079
  set = function(self, disablesAutoAttack)
1032
- if not disablesAutoAttack and self[137] then
1080
+ if not disablesAutoAttack and self[138] then
1033
1081
  self.object:decrementDisableAutoAttackCounter()
1034
- self[137] = nil
1035
- elseif disablesAutoAttack and not self[137] then
1082
+ self[138] = nil
1083
+ elseif disablesAutoAttack and not self[138] then
1036
1084
  self.object:incrementDisableAutoAttackCounter()
1037
- self[137] = true
1085
+ self[138] = true
1038
1086
  end
1039
1087
  end
1040
1088
  },
@@ -1045,19 +1093,19 @@ __TS__SetDescriptor(
1045
1093
  "providesInvulnerability",
1046
1094
  {
1047
1095
  get = function(self)
1048
- local ____self__138_57 = self[138]
1049
- if ____self__138_57 == nil then
1050
- ____self__138_57 = false
1096
+ local ____self__139_56 = self[139]
1097
+ if ____self__139_56 == nil then
1098
+ ____self__139_56 = false
1051
1099
  end
1052
- return ____self__138_57
1100
+ return ____self__139_56
1053
1101
  end,
1054
1102
  set = function(self, providesInvulnerability)
1055
- if not providesInvulnerability and self[138] then
1103
+ if not providesInvulnerability and self[139] then
1056
1104
  self.object:decrementInvulnerabilityCounter()
1057
- self[138] = nil
1058
- elseif providesInvulnerability and not self[138] then
1105
+ self[139] = nil
1106
+ elseif providesInvulnerability and not self[139] then
1059
1107
  self.object:incrementInvulnerabilityCounter()
1060
- self[138] = true
1108
+ self[139] = true
1061
1109
  end
1062
1110
  end
1063
1111
  },
@@ -1068,17 +1116,17 @@ __TS__SetDescriptor(
1068
1116
  "killsOnExpiration",
1069
1117
  {
1070
1118
  get = function(self)
1071
- local ____self__139_58 = self[139]
1072
- if ____self__139_58 == nil then
1073
- ____self__139_58 = false
1119
+ local ____self__140_57 = self[140]
1120
+ if ____self__140_57 == nil then
1121
+ ____self__140_57 = false
1074
1122
  end
1075
- return ____self__139_58
1123
+ return ____self__140_57
1076
1124
  end,
1077
1125
  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
1126
+ if not killsOnExpiration and self[140] then
1127
+ self[140] = nil
1128
+ elseif killsOnExpiration and not self[140] then
1129
+ self[140] = true
1082
1130
  end
1083
1131
  end
1084
1132
  },
@@ -1089,17 +1137,17 @@ __TS__SetDescriptor(
1089
1137
  "explodesOnExpiration",
1090
1138
  {
1091
1139
  get = function(self)
1092
- local ____self__140_59 = self[140]
1093
- if ____self__140_59 == nil then
1094
- ____self__140_59 = false
1140
+ local ____self__141_58 = self[141]
1141
+ if ____self__141_58 == nil then
1142
+ ____self__141_58 = false
1095
1143
  end
1096
- return ____self__140_59
1144
+ return ____self__141_58
1097
1145
  end,
1098
1146
  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
1147
+ if not killsOnExpiration and self[141] then
1148
+ self[141] = nil
1149
+ elseif killsOnExpiration and not self[141] then
1150
+ self[141] = true
1103
1151
  end
1104
1152
  end
1105
1153
  },
@@ -1208,6 +1256,19 @@ __TS__SetDescriptor(
1208
1256
  },
1209
1257
  true
1210
1258
  )
1259
+ __TS__SetDescriptor(
1260
+ Buff.prototype,
1261
+ "manaRegenerationRateIncreaseFactor",
1262
+ {
1263
+ get = function(self)
1264
+ return self:getUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR)
1265
+ end,
1266
+ set = function(self, manaRegenerationRateIncreaseFactor)
1267
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR, manaRegenerationRateIncreaseFactor)
1268
+ end
1269
+ },
1270
+ true
1271
+ )
1211
1272
  __TS__SetDescriptor(
1212
1273
  Buff.prototype,
1213
1274
  "duration",
@@ -1221,13 +1282,13 @@ __TS__SetDescriptor(
1221
1282
  "remainingDuration",
1222
1283
  {
1223
1284
  get = function(self)
1224
- local ____opt_60 = self._timer
1225
- return ____opt_60 and ____opt_60.remaining or 0
1285
+ local ____opt_59 = self._timer
1286
+ return ____opt_59 and ____opt_59.remaining or 0
1226
1287
  end,
1227
1288
  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)
1289
+ local ____remainingDuration_63 = remainingDuration
1290
+ local ____opt_61 = self._timer
1291
+ local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1231
1292
  if remainingDurationDelta ~= 0 then
1232
1293
  self[103] = self[103] + remainingDurationDelta
1233
1294
  if remainingDuration <= 0 then
@@ -1242,7 +1303,7 @@ __TS__SetDescriptor(
1242
1303
  remainingDuration,
1243
1304
  self._spellStealPriority,
1244
1305
  self._learnLevelMinimum,
1245
- self[141]
1306
+ self[142]
1246
1307
  ) then
1247
1308
  local timer = self._timer
1248
1309
  if timer == nil then
@@ -1257,7 +1318,34 @@ __TS__SetDescriptor(
1257
1318
  },
1258
1319
  true
1259
1320
  )
1260
- Buff.destroyEvent = buffDestroyEvent;
1321
+ __TS__SetDescriptor(
1322
+ Buff.prototype,
1323
+ "abilityCooldownFactor",
1324
+ {
1325
+ get = function(self)
1326
+ return self[143] or 1
1327
+ end,
1328
+ set = function(self, abilityCooldownFactor)
1329
+ local previousAbilityCooldownModifier = self[144]
1330
+ if previousAbilityCooldownModifier then
1331
+ for ____, ability in ipairs(self._unit.abilities) do
1332
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1333
+ end
1334
+ end
1335
+ local function modifier(ability, level, cooldown)
1336
+ return cooldown * abilityCooldownFactor
1337
+ end
1338
+ for ____, ability in ipairs(self._unit.abilities) do
1339
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1340
+ end
1341
+ self[144] = modifier
1342
+ self[143] = abilityCooldownFactor
1343
+ end
1344
+ },
1345
+ true
1346
+ )
1347
+ Buff.createdEvent = buffCreatedEvent
1348
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1261
1349
  (function(self)
1262
1350
  local function destroyBuffIfNeeded(buff)
1263
1351
  if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
@@ -1311,5 +1399,11 @@ Buff.destroyEvent = buffDestroyEvent;
1311
1399
  ____exports.checkBuffs(target)
1312
1400
  end
1313
1401
  )
1402
+ buffCreatedEvent:addListener(function(buff)
1403
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1404
+ end)
1405
+ buffBeingDestroyedEvent:addListener(function(buff)
1406
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1407
+ end)
1314
1408
  end)(Buff)
1315
1409
  return ____exports
@@ -1,5 +1,5 @@
1
1
  /** @noSelfInFile */
2
- import { Handle } from "../../core/types/handle";
2
+ import { Handle, HandleDestructor } from "../../core/types/handle";
3
3
  import { Event } from "../../event";
4
4
  import type { Item } from "../../core/types/item";
5
5
  import type { Unit } from "./unit";
@@ -55,14 +55,19 @@ export declare class UnrecognizedAbility extends Ability {
55
55
  export declare class UnitAbility extends Ability {
56
56
  readonly owner: Unit;
57
57
  private readonly u;
58
+ private d?;
58
59
  constructor(handle: jability, typeId: number, owner: Unit);
59
60
  incrementHideCounter(): void;
60
61
  decrementHideCounter(): void;
62
+ incrementDisableCounter(): void;
63
+ decrementDisableCounter(): void;
64
+ get isDisabled(): boolean;
61
65
  get level(): number;
62
66
  set level(v: number);
63
67
  get cooldownRemaining(): number;
64
68
  set cooldownRemaining(cooldownRemaining: number);
65
69
  interruptCast(): void;
70
+ protected onDestroy(): HandleDestructor;
66
71
  static get onCreate(): Event<[UnitAbility]>;
67
72
  static get onDestroy(): Event<[UnitAbility]>;
68
73
  }
@@ -89,6 +94,7 @@ export declare class ItemAbility extends Ability {
89
94
  get cooldownRemaining(): number;
90
95
  set cooldownRemaining(cooldownRemaining: number);
91
96
  interruptCast(): void;
97
+ protected onDestroy(): HandleDestructor;
92
98
  static get onCreate(): Event<[ItemAbility]>;
93
99
  static get onDestroy(): Event<[ItemAbility]>;
94
100
  }