warscript 0.0.1-dev.effa673 → 0.0.1-dev.f074376

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 (139) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/sound.lua +5 -0
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +9 -8
  12. package/core/types/timer.lua +45 -23
  13. package/decl/native.d.ts +846 -790
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +6 -3
  20. package/engine/behaviour/ability/damage.lua +24 -36
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +2 -1
  28. package/engine/behaviour/ability.lua +10 -18
  29. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  31. package/engine/behaviour/unit.d.ts +39 -3
  32. package/engine/behaviour/unit.lua +259 -6
  33. package/engine/buff.d.ts +17 -6
  34. package/engine/buff.lua +160 -97
  35. package/engine/internal/ability.d.ts +7 -1
  36. package/engine/internal/ability.lua +49 -9
  37. package/engine/internal/item/ability.lua +63 -11
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +18 -17
  40. package/engine/internal/item.lua +135 -49
  41. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  42. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  43. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  44. package/engine/internal/misc/frame-coordinates.lua +21 -0
  45. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  46. package/engine/internal/misc/get-terrain-z.lua +11 -0
  47. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  48. package/engine/internal/misc/player-local-handle.lua +5 -0
  49. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  50. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  51. package/engine/internal/unit/ability.d.ts +35 -0
  52. package/engine/internal/unit/ability.lua +98 -9
  53. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  54. package/engine/internal/unit/allowed-targets.lua +9 -1
  55. package/engine/internal/unit/bonus.d.ts +2 -0
  56. package/engine/internal/unit/bonus.lua +10 -0
  57. package/engine/internal/unit/fly-height.d.ts +7 -0
  58. package/engine/internal/unit/fly-height.lua +20 -0
  59. package/engine/internal/unit/main-selected.lua +12 -27
  60. package/engine/internal/unit/order.d.ts +20 -0
  61. package/engine/internal/unit/order.lua +136 -0
  62. package/engine/internal/unit/scale.d.ts +7 -0
  63. package/engine/internal/unit/scale.lua +20 -0
  64. package/engine/internal/unit+ability.lua +10 -1
  65. package/engine/internal/unit+damage.d.ts +2 -11
  66. package/engine/internal/unit+damage.lua +10 -14
  67. package/engine/internal/unit+spellSteal.lua +1 -2
  68. package/engine/internal/unit-missile-launch.lua +45 -14
  69. package/engine/internal/unit.d.ts +39 -19
  70. package/engine/internal/unit.lua +329 -169
  71. package/engine/local-client.d.ts +2 -0
  72. package/engine/local-client.lua +30 -0
  73. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  74. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  75. package/engine/object-data/auxiliary/attachment-preset.d.ts +1 -1
  76. package/engine/object-data/auxiliary/attachment-preset.lua +3 -2
  77. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  78. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  79. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  81. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  82. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  83. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  84. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  85. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  86. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  87. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  89. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  91. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  92. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  93. package/engine/object-data/entry/ability-type.lua +11 -3
  94. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  95. package/engine/object-data/entry/buff-type.d.ts +5 -11
  96. package/engine/object-data/entry/buff-type.lua +11 -27
  97. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  98. package/engine/object-data/entry/destructible-type.lua +155 -0
  99. package/engine/object-data/entry/unit-type.d.ts +17 -4
  100. package/engine/object-data/entry/unit-type.lua +197 -85
  101. package/engine/object-field/ability.d.ts +4 -4
  102. package/engine/object-field/ability.lua +7 -6
  103. package/engine/object-field/unit.d.ts +72 -3
  104. package/engine/object-field/unit.lua +268 -7
  105. package/engine/object-field.d.ts +23 -6
  106. package/engine/object-field.lua +335 -118
  107. package/engine/random.d.ts +9 -0
  108. package/engine/random.lua +13 -0
  109. package/engine/standard/entries/buff-type.d.ts +3 -0
  110. package/engine/standard/entries/buff-type.lua +3 -0
  111. package/engine/standard/fields/ability.d.ts +2 -2
  112. package/engine/standard/fields/ability.lua +2 -2
  113. package/engine/standard/fields/unit.d.ts +7 -0
  114. package/engine/standard/fields/unit.lua +13 -0
  115. package/engine/synchronization.d.ts +11 -0
  116. package/engine/synchronization.lua +77 -0
  117. package/engine/text-tag.d.ts +36 -2
  118. package/engine/text-tag.lua +250 -10
  119. package/engine/unit.d.ts +3 -0
  120. package/engine/unit.lua +3 -0
  121. package/net/socket.lua +1 -1
  122. package/objutil/buff.lua +2 -3
  123. package/package.json +2 -2
  124. package/patch-lualib.lua +1 -1
  125. package/utility/arrays.d.ts +2 -0
  126. package/utility/arrays.lua +11 -0
  127. package/utility/callback-array.d.ts +17 -0
  128. package/utility/callback-array.lua +61 -0
  129. package/utility/functions.d.ts +8 -0
  130. package/utility/functions.lua +13 -0
  131. package/utility/linked-set.d.ts +2 -0
  132. package/utility/linked-set.lua +22 -1
  133. package/utility/lua-maps.d.ts +15 -2
  134. package/utility/lua-maps.lua +53 -2
  135. package/utility/lua-sets.d.ts +2 -0
  136. package/utility/lua-sets.lua +7 -0
  137. package/utility/types.d.ts +3 -0
  138. package/core/types/order.d.ts +0 -25
  139. 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,
@@ -124,7 +127,8 @@ local buffParametersKeys = {
124
127
  damageOnExpiration = true,
125
128
  healingOnExpiration = true,
126
129
  killsOnExpiration = true,
127
- explodesOnExpiration = true
130
+ explodesOnExpiration = true,
131
+ abilityCooldownFactor = true
128
132
  }
129
133
  local function resolveEnumValue(ability, level, value)
130
134
  if value == nil or type(value) == "number" then
@@ -187,6 +191,7 @@ local buffNumberParameters = {
187
191
  "durationIncreaseOnAutoAttack",
188
192
  "attackSpeedIncreaseFactor",
189
193
  "movementSpeedIncreaseFactor",
194
+ "manaRegenerationRateIncreaseFactor",
190
195
  "evasionProbability",
191
196
  "armorIncrease",
192
197
  "damageFactor",
@@ -201,7 +206,8 @@ local buffNumberParameters = {
201
206
  "healingPerInterval",
202
207
  "healingOverDuration",
203
208
  "damageOnExpiration",
204
- "healingOnExpiration"
209
+ "healingOnExpiration",
210
+ "abilityCooldownFactor"
205
211
  }
206
212
  local unsuccessfulApplicationMarker = {}
207
213
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -304,7 +310,8 @@ buffHealingIntervalTimerCallback = function(buff)
304
310
  source:healTarget(buff[101], healingPerInterval)
305
311
  end
306
312
  end
307
- local buffDestroyEvent = __TS__New(Event)
313
+ local buffCreatedEvent = __TS__New(Event)
314
+ local buffBeingDestroyedEvent = __TS__New(Event)
308
315
  ____exports.Buff = __TS__Class()
309
316
  local Buff = ____exports.Buff
310
317
  Buff.name = "Buff"
@@ -319,33 +326,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
319
326
  local polarity
320
327
  local resistanceType
321
328
  local ability
329
+ local abilityBehavior
322
330
  if type(typeIdOrTypeIds) ~= "number" then
323
331
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
324
332
  polarity = resistanceTypeOrPolarity
325
333
  resistanceType = abilityOrParametersOrResistanceType
326
- if __TS__InstanceOf(parametersOrAbility, Ability) or parametersOrAbility == nil then
334
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
335
+ abilityBehavior = parametersOrAbility
336
+ ability = abilityBehavior.ability
337
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
327
338
  ability = parametersOrAbility
328
- else
329
- ability = nil
339
+ elseif parametersOrAbility ~= nil then
330
340
  parameters = parametersOrAbility
331
341
  end
332
342
  else
333
343
  typeId = typeIdOrTypeIds
334
344
  polarity = polarityOrTypeIdSelectionPolicy
335
345
  resistanceType = resistanceTypeOrPolarity
336
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) or abilityOrParametersOrResistanceType == nil 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
337
351
  ability = abilityOrParametersOrResistanceType
338
352
  parameters = parametersOrAbility
339
- else
340
- ability = nil
353
+ elseif abilityOrParametersOrResistanceType ~= nil then
341
354
  parameters = abilityOrParametersOrResistanceType
355
+ else
356
+ parameters = parametersOrAbility
342
357
  end
343
358
  end
359
+ self.sourceAbilityBehavior = abilityBehavior
344
360
  self.typeId = typeId
345
- if not (__TS__InstanceOf(ability, Ability) or ability == nil) then
346
- parameters = ability
347
- ability = nil
348
- end
349
361
  local defaultParameters = self.constructor.defaultParameters
350
362
  local level = parameters and parameters.level or defaultParameters.level
351
363
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -506,64 +518,68 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
506
518
  end
507
519
  self:onCreate()
508
520
  self[100] = 1
521
+ Event.invoke(buffCreatedEvent, self)
509
522
  end
510
- function Buff.prototype.getUnitBonus(self, bonusType)
511
- local ____opt_38 = self._bonusIdByBonusType
512
- local bonusId = ____opt_38 and ____opt_38[bonusType]
513
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
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
514
530
  end
515
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
516
- local bonusIdByBonusType = self._bonusIdByBonusType
517
- if bonusIdByBonusType == nil then
518
- bonusIdByBonusType = {}
519
- self._bonusIdByBonusType = bonusIdByBonusType
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
520
537
  end
521
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
522
538
  end
523
539
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
540
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
525
541
  Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
526
542
  else
527
543
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
528
- local ____Effect_42 = Effect
529
- local ____Effect_flash_43 = Effect.flash
530
- local ____array_41 = __TS__SparseArrayNew(
544
+ local ____Effect_40 = Effect
545
+ local ____Effect_flash_41 = Effect.flash
546
+ local ____array_39 = __TS__SparseArrayNew(
531
547
  self[105],
532
548
  isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
533
549
  stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
534
550
  )
535
- local ____isWidgetProvided_40
551
+ local ____isWidgetProvided_38
536
552
  if isWidgetProvided then
537
- ____isWidgetProvided_40 = yOrParametersOrDuration
553
+ ____isWidgetProvided_38 = yOrParametersOrDuration
538
554
  else
539
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
555
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
540
556
  end
541
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
542
- ____Effect_flash_43(
543
- ____Effect_42,
544
- __TS__SparseArraySpread(____array_41)
557
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
558
+ ____Effect_flash_41(
559
+ ____Effect_40,
560
+ __TS__SparseArraySpread(____array_39)
545
561
  )
546
562
  end
547
563
  end
548
564
  function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
549
565
  local isWidgetProvided = type(widgetOrDuration) == "table"
550
- local ____Effect_46 = Effect
551
- local ____Effect_flash_47 = Effect.flash
552
- local ____array_45 = __TS__SparseArrayNew(
566
+ local ____Effect_44 = Effect
567
+ local ____Effect_flash_45 = Effect.flash
568
+ local ____array_43 = __TS__SparseArrayNew(
553
569
  self[106],
554
570
  isWidgetProvided and widgetOrDuration or self._unit,
555
571
  stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
556
572
  )
557
- local ____isWidgetProvided_44
573
+ local ____isWidgetProvided_42
558
574
  if isWidgetProvided then
559
- ____isWidgetProvided_44 = duration
575
+ ____isWidgetProvided_42 = duration
560
576
  else
561
- ____isWidgetProvided_44 = widgetOrDuration
577
+ ____isWidgetProvided_42 = widgetOrDuration
562
578
  end
563
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
564
- ____Effect_flash_47(
565
- ____Effect_46,
566
- __TS__SparseArraySpread(____array_45)
579
+ __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
580
+ ____Effect_flash_45(
581
+ ____Effect_44,
582
+ __TS__SparseArraySpread(____array_43)
567
583
  )
568
584
  end
569
585
  function Buff.prototype.onCreate(self)
@@ -594,6 +610,12 @@ function Buff.prototype.onDestroy(self)
594
610
  behavior:destroy()
595
611
  end
596
612
  end
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
597
619
  if self[139] then
598
620
  unit:decrementInvulnerabilityCounter()
599
621
  end
@@ -602,7 +624,7 @@ function Buff.prototype.onDestroy(self)
602
624
  end
603
625
  if self[136] then
604
626
  if self[137] then
605
- unit:decrementStunCounter()
627
+ unit:decrementForceStunCounter()
606
628
  end
607
629
  unit:decrementStunCounter()
608
630
  end
@@ -614,12 +636,7 @@ function Buff.prototype.onDestroy(self)
614
636
  unit:removeAbility(abilityTypeId)
615
637
  end
616
638
  end
617
- if self._bonusIdByBonusType ~= nil then
618
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
619
- removeUnitBonus(unit, bonusType, bonusId)
620
- end
621
- end
622
- Event.invoke(buffDestroyEvent, self)
639
+ Event.invoke(buffBeingDestroyedEvent, self)
623
640
  self[100] = 3
624
641
  return UnitBehavior.prototype.onDestroy(self)
625
642
  end
@@ -648,8 +665,8 @@ function Buff.apply(self, ...)
648
665
  end
649
666
  end
650
667
  function Buff.getByTypeId(self, unit, typeId)
651
- local ____opt_48 = buffByTypeIdByUnit[unit]
652
- local buff = ____opt_48 and ____opt_48[typeId]
668
+ local ____opt_46 = buffByTypeIdByUnit[unit]
669
+ local buff = ____opt_46 and ____opt_46[typeId]
653
670
  if __TS__InstanceOf(buff, self) then
654
671
  return buff
655
672
  end
@@ -807,8 +824,8 @@ __TS__SetDescriptor(
807
824
  return
808
825
  end
809
826
  self[112] = damageInterval
810
- local ____opt_50 = self._timer
811
- 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
812
829
  local timer = self[114]
813
830
  if timer == nil then
814
831
  timer = Timer:create()
@@ -887,8 +904,8 @@ __TS__SetDescriptor(
887
904
  return
888
905
  end
889
906
  self[117] = healingInterval
890
- local ____opt_52 = self._timer
891
- 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
892
909
  local timer = self[119]
893
910
  if timer == nil then
894
911
  timer = Timer:create()
@@ -974,11 +991,11 @@ __TS__SetDescriptor(
974
991
  "turnsIntoGhost",
975
992
  {
976
993
  get = function(self)
977
- local ____self__135_54 = self[135]
978
- if ____self__135_54 == nil then
979
- ____self__135_54 = false
994
+ local ____self__135_52 = self[135]
995
+ if ____self__135_52 == nil then
996
+ ____self__135_52 = false
980
997
  end
981
- return ____self__135_54
998
+ return ____self__135_52
982
999
  end,
983
1000
  set = function(self, turnsIntoGhost)
984
1001
  if not turnsIntoGhost and self[135] then
@@ -997,22 +1014,22 @@ __TS__SetDescriptor(
997
1014
  "stuns",
998
1015
  {
999
1016
  get = function(self)
1000
- local ____self__136_55 = self[136]
1001
- if ____self__136_55 == nil then
1002
- ____self__136_55 = false
1017
+ local ____self__136_53 = self[136]
1018
+ if ____self__136_53 == nil then
1019
+ ____self__136_53 = false
1003
1020
  end
1004
- return ____self__136_55
1021
+ return ____self__136_53
1005
1022
  end,
1006
1023
  set = function(self, stuns)
1007
1024
  if not stuns and self[136] then
1008
1025
  if self[137] then
1009
- self.object:decrementStunCounter()
1026
+ self.object:decrementForceStunCounter()
1010
1027
  end
1011
1028
  self.object:decrementStunCounter()
1012
1029
  self[136] = nil
1013
1030
  elseif stuns and not self[136] then
1014
1031
  if self[137] then
1015
- self.object:incrementStunCounter()
1032
+ self.object:incrementForceStunCounter()
1016
1033
  end
1017
1034
  self.object:incrementStunCounter()
1018
1035
  self[136] = true
@@ -1026,21 +1043,21 @@ __TS__SetDescriptor(
1026
1043
  "ignoresStunImmunity",
1027
1044
  {
1028
1045
  get = function(self)
1029
- local ____self__137_56 = self[137]
1030
- if ____self__137_56 == nil then
1031
- ____self__137_56 = false
1046
+ local ____self__137_54 = self[137]
1047
+ if ____self__137_54 == nil then
1048
+ ____self__137_54 = false
1032
1049
  end
1033
- return ____self__137_56
1050
+ return ____self__137_54
1034
1051
  end,
1035
1052
  set = function(self, ignoresStunImmunity)
1036
1053
  if not ignoresStunImmunity and self[137] then
1037
1054
  if self[136] then
1038
- self.object:decrementStunCounter()
1055
+ self.object:decrementForceStunCounter()
1039
1056
  end
1040
1057
  self[137] = nil
1041
1058
  elseif ignoresStunImmunity and not self[137] then
1042
1059
  if self[136] then
1043
- self.object:incrementStunCounter()
1060
+ self.object:incrementForceStunCounter()
1044
1061
  end
1045
1062
  self[137] = true
1046
1063
  end
@@ -1053,11 +1070,11 @@ __TS__SetDescriptor(
1053
1070
  "disablesAutoAttack",
1054
1071
  {
1055
1072
  get = function(self)
1056
- local ____self__138_57 = self[138]
1057
- if ____self__138_57 == nil then
1058
- ____self__138_57 = false
1073
+ local ____self__138_55 = self[138]
1074
+ if ____self__138_55 == nil then
1075
+ ____self__138_55 = false
1059
1076
  end
1060
- return ____self__138_57
1077
+ return ____self__138_55
1061
1078
  end,
1062
1079
  set = function(self, disablesAutoAttack)
1063
1080
  if not disablesAutoAttack and self[138] then
@@ -1076,11 +1093,11 @@ __TS__SetDescriptor(
1076
1093
  "providesInvulnerability",
1077
1094
  {
1078
1095
  get = function(self)
1079
- local ____self__139_58 = self[139]
1080
- if ____self__139_58 == nil then
1081
- ____self__139_58 = false
1096
+ local ____self__139_56 = self[139]
1097
+ if ____self__139_56 == nil then
1098
+ ____self__139_56 = false
1082
1099
  end
1083
- return ____self__139_58
1100
+ return ____self__139_56
1084
1101
  end,
1085
1102
  set = function(self, providesInvulnerability)
1086
1103
  if not providesInvulnerability and self[139] then
@@ -1099,11 +1116,11 @@ __TS__SetDescriptor(
1099
1116
  "killsOnExpiration",
1100
1117
  {
1101
1118
  get = function(self)
1102
- local ____self__140_59 = self[140]
1103
- if ____self__140_59 == nil then
1104
- ____self__140_59 = false
1119
+ local ____self__140_57 = self[140]
1120
+ if ____self__140_57 == nil then
1121
+ ____self__140_57 = false
1105
1122
  end
1106
- return ____self__140_59
1123
+ return ____self__140_57
1107
1124
  end,
1108
1125
  set = function(self, killsOnExpiration)
1109
1126
  if not killsOnExpiration and self[140] then
@@ -1120,11 +1137,11 @@ __TS__SetDescriptor(
1120
1137
  "explodesOnExpiration",
1121
1138
  {
1122
1139
  get = function(self)
1123
- local ____self__141_60 = self[141]
1124
- if ____self__141_60 == nil then
1125
- ____self__141_60 = false
1140
+ local ____self__141_58 = self[141]
1141
+ if ____self__141_58 == nil then
1142
+ ____self__141_58 = false
1126
1143
  end
1127
- return ____self__141_60
1144
+ return ____self__141_58
1128
1145
  end,
1129
1146
  set = function(self, killsOnExpiration)
1130
1147
  if not killsOnExpiration and self[141] then
@@ -1239,6 +1256,19 @@ __TS__SetDescriptor(
1239
1256
  },
1240
1257
  true
1241
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
+ )
1242
1272
  __TS__SetDescriptor(
1243
1273
  Buff.prototype,
1244
1274
  "duration",
@@ -1252,13 +1282,13 @@ __TS__SetDescriptor(
1252
1282
  "remainingDuration",
1253
1283
  {
1254
1284
  get = function(self)
1255
- local ____opt_61 = self._timer
1256
- return ____opt_61 and ____opt_61.remaining or 0
1285
+ local ____opt_59 = self._timer
1286
+ return ____opt_59 and ____opt_59.remaining or 0
1257
1287
  end,
1258
1288
  set = function(self, remainingDuration)
1259
- local ____remainingDuration_65 = remainingDuration
1260
- local ____opt_63 = self._timer
1261
- local remainingDurationDelta = ____remainingDuration_65 - (____opt_63 and ____opt_63.remaining or 0)
1289
+ local ____remainingDuration_63 = remainingDuration
1290
+ local ____opt_61 = self._timer
1291
+ local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1262
1292
  if remainingDurationDelta ~= 0 then
1263
1293
  self[103] = self[103] + remainingDurationDelta
1264
1294
  if remainingDuration <= 0 then
@@ -1288,7 +1318,34 @@ __TS__SetDescriptor(
1288
1318
  },
1289
1319
  true
1290
1320
  )
1291
- 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;
1292
1349
  (function(self)
1293
1350
  local function destroyBuffIfNeeded(buff)
1294
1351
  if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
@@ -1342,5 +1399,11 @@ Buff.destroyEvent = buffDestroyEvent;
1342
1399
  ____exports.checkBuffs(target)
1343
1400
  end
1344
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)
1345
1408
  end)(Buff)
1346
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
  }
@@ -38,6 +38,7 @@ local getHandleId = GetHandleId
38
38
  local getItemBooleanField = BlzGetItemBooleanField
39
39
  local setItemBooleanField = BlzSetItemBooleanField
40
40
  local unitHideAbility = BlzUnitHideAbility
41
+ local unitDisableAbility = BlzUnitDisableAbility
41
42
  local match = string.match
42
43
  local ____type = _G.type
43
44
  local ____tostring = _G.tostring
@@ -231,6 +232,19 @@ ____exports.getOrderIdByAbilityTypeId = function(abilityTypeId)
231
232
  local parentTypeId = availableFields[abilityTypeId]
232
233
  return order2orderId(orders[____type(parentTypeId) == "number" and parentTypeId or abilityTypeId] or "")
233
234
  end
235
+ ---
236
+ -- @internal For use by internal systems only.
237
+ ____exports.abilityTypeHasField = function(abilityTypeId, field)
238
+ field = ____type(field) == "number" and field or getHandleId(field)
239
+ if commonFields[field] then
240
+ return true
241
+ end
242
+ local id = availableFields[abilityTypeId]
243
+ if ____type(id) == "number" then
244
+ id = availableFields[id]
245
+ end
246
+ return not not (id and id[field])
247
+ end
234
248
  ____exports.Ability = __TS__Class()
235
249
  local Ability = ____exports.Ability
236
250
  Ability.name = "Ability"
@@ -246,15 +260,7 @@ function Ability.prototype.getSnapshot(self)
246
260
  return nil
247
261
  end
248
262
  function Ability.prototype.hasField(self, field)
249
- field = ____type(field) == "number" and field or getHandleId(field)
250
- if commonFields[field] then
251
- return true
252
- end
253
- local id = availableFields[self.typeId]
254
- if ____type(id) == "number" then
255
- id = availableFields[id]
256
- end
257
- return not not (id and id[field])
263
+ return ____exports.abilityTypeHasField(self.typeId, field)
258
264
  end
259
265
  function Ability.prototype.getField(self, field, level)
260
266
  local fieldType = match(
@@ -402,9 +408,37 @@ end
402
408
  function UnitAbility.prototype.decrementHideCounter(self)
403
409
  unitHideAbility(self.u, self.typeId, false)
404
410
  end
411
+ function UnitAbility.prototype.incrementDisableCounter(self)
412
+ local unit = self.u
413
+ local typeId = self.typeId
414
+ unitHideAbility(unit, typeId, true)
415
+ unitDisableAbility(unit, typeId, true, false)
416
+ self.d = (self.d or 0) + 1
417
+ end
418
+ function UnitAbility.prototype.decrementDisableCounter(self)
419
+ local unit = self.u
420
+ local typeId = self.typeId
421
+ unitDisableAbility(unit, typeId, false, false)
422
+ unitHideAbility(unit, typeId, true)
423
+ self.d = (self.d or 0) - 1
424
+ end
405
425
  function UnitAbility.prototype.interruptCast(self)
406
426
  self.owner:interruptCast(self.typeId)
407
427
  end
428
+ function UnitAbility.prototype.onDestroy(self)
429
+ if self.owner.state ~= 2 then
430
+ self.owner:removeAbility(self.typeId)
431
+ end
432
+ return UnitAbility.____super.prototype.onDestroy(self)
433
+ end
434
+ __TS__SetDescriptor(
435
+ UnitAbility.prototype,
436
+ "isDisabled",
437
+ {get = function(self)
438
+ return self.d ~= nil and self.d > 0
439
+ end},
440
+ true
441
+ )
408
442
  __TS__SetDescriptor(
409
443
  UnitAbility.prototype,
410
444
  "level",
@@ -489,6 +523,12 @@ function ItemAbility.prototype.interruptCast(self)
489
523
  setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, true)
490
524
  end
491
525
  end
526
+ function ItemAbility.prototype.onDestroy(self)
527
+ if self.owner.state ~= 2 then
528
+ self.owner:removeAbility(self.typeId)
529
+ end
530
+ return ItemAbility.____super.prototype.onDestroy(self)
531
+ end
492
532
  __TS__SetDescriptor(
493
533
  ItemAbility.prototype,
494
534
  "level",