warscript 0.0.1-dev.47f470c → 0.0.1-dev.4f51f48

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 (154) 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 +15 -0
  7. package/core/types/player.lua +56 -14
  8. package/core/types/playerCamera.d.ts +2 -0
  9. package/core/types/playerCamera.lua +123 -5
  10. package/core/types/sound.d.ts +17 -25
  11. package/core/types/sound.lua +91 -46
  12. package/core/types/tileCell.d.ts +11 -1
  13. package/core/types/tileCell.lua +97 -0
  14. package/core/types/timer.d.ts +9 -8
  15. package/core/types/timer.lua +45 -23
  16. package/core/util.lua +6 -1
  17. package/decl/native.d.ts +846 -790
  18. package/engine/behavior.d.ts +5 -0
  19. package/engine/behavior.lua +106 -27
  20. package/engine/behaviour/ability/apply-buff.lua +1 -1
  21. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  22. package/engine/behaviour/ability/damage.d.ts +9 -3
  23. package/engine/behaviour/ability/damage.lua +26 -38
  24. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  25. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  26. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  27. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  28. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  29. package/engine/behaviour/ability/restore-mana.lua +6 -6
  30. package/engine/behaviour/ability.d.ts +5 -1
  31. package/engine/behaviour/ability.lua +26 -21
  32. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  33. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  34. package/engine/behaviour/unit.d.ts +34 -0
  35. package/engine/behaviour/unit.lua +190 -4
  36. package/engine/buff.d.ts +24 -12
  37. package/engine/buff.lua +190 -121
  38. package/engine/internal/ability.d.ts +7 -1
  39. package/engine/internal/ability.lua +49 -9
  40. package/engine/internal/item/ability.lua +63 -11
  41. package/engine/internal/item+owner.lua +12 -6
  42. package/engine/internal/item.d.ts +18 -17
  43. package/engine/internal/item.lua +135 -49
  44. package/engine/internal/mechanics/ability-duration.lua +1 -1
  45. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  46. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  47. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  48. package/engine/internal/misc/frame-coordinates.lua +21 -0
  49. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  50. package/engine/internal/misc/get-terrain-z.lua +11 -0
  51. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  52. package/engine/internal/misc/player-local-handle.lua +5 -0
  53. package/engine/internal/unit/ability.d.ts +35 -0
  54. package/engine/internal/unit/ability.lua +98 -9
  55. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  56. package/engine/internal/unit/allowed-targets.lua +9 -1
  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 +42 -17
  70. package/engine/internal/unit.lua +331 -165
  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 +7 -2
  76. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  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/movement-type.d.ts +7 -7
  80. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  81. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  82. package/engine/object-data/auxiliary/sound-eax.lua +2 -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/blank-configurable.lua +0 -9
  88. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  89. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  90. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  91. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  92. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  93. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  94. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  95. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  96. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  97. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  98. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  99. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  100. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  101. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  102. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  103. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  104. package/engine/object-data/entry/ability-type/web.lua +52 -0
  105. package/engine/object-data/entry/ability-type.d.ts +18 -16
  106. package/engine/object-data/entry/ability-type.lua +77 -16
  107. package/engine/object-data/entry/buff-type/applicable.lua +9 -4
  108. package/engine/object-data/entry/buff-type.d.ts +5 -11
  109. package/engine/object-data/entry/buff-type.lua +11 -27
  110. package/engine/object-data/entry/sound-preset.d.ts +18 -2
  111. package/engine/object-data/entry/sound-preset.lua +105 -15
  112. package/engine/object-data/entry/unit-type.d.ts +13 -4
  113. package/engine/object-data/entry/unit-type.lua +156 -88
  114. package/engine/object-data/entry.d.ts +2 -2
  115. package/engine/object-data/entry.lua +14 -7
  116. package/engine/object-field/ability.d.ts +4 -4
  117. package/engine/object-field/ability.lua +7 -6
  118. package/engine/object-field/unit.d.ts +69 -3
  119. package/engine/object-field/unit.lua +264 -7
  120. package/engine/object-field.d.ts +23 -6
  121. package/engine/object-field.lua +304 -127
  122. package/engine/random.d.ts +9 -0
  123. package/engine/random.lua +13 -0
  124. package/engine/standard/entries/buff-type.d.ts +3 -0
  125. package/engine/standard/entries/buff-type.lua +3 -0
  126. package/engine/standard/fields/unit.d.ts +6 -0
  127. package/engine/standard/fields/unit.lua +11 -0
  128. package/engine/synchronization.d.ts +11 -0
  129. package/engine/synchronization.lua +77 -0
  130. package/engine/text-tag.d.ts +36 -2
  131. package/engine/text-tag.lua +250 -10
  132. package/engine/unit.d.ts +3 -0
  133. package/engine/unit.lua +3 -0
  134. package/net/socket.lua +1 -1
  135. package/objutil/buff.lua +2 -3
  136. package/objutil/unit.lua +2 -2
  137. package/package.json +2 -2
  138. package/patch-lualib.lua +1 -1
  139. package/utility/arrays.d.ts +2 -0
  140. package/utility/arrays.lua +11 -0
  141. package/utility/callback-array.d.ts +17 -0
  142. package/utility/callback-array.lua +61 -0
  143. package/utility/functions.d.ts +8 -0
  144. package/utility/functions.lua +13 -0
  145. package/utility/linked-set.d.ts +2 -0
  146. package/utility/linked-set.lua +22 -1
  147. package/utility/lua-maps.d.ts +15 -2
  148. package/utility/lua-maps.lua +53 -2
  149. package/utility/lua-sets.d.ts +2 -0
  150. package/utility/lua-sets.lua +7 -0
  151. package/utility/reflection.lua +11 -7
  152. package/utility/types.d.ts +3 -0
  153. package/core/types/order.d.ts +0 -25
  154. 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,8 @@ 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
56
  local getUnitAbility = BlzGetUnitAbility
57
57
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
58
58
  local stringValueByBuffTypeIdByFieldId = {}
@@ -109,6 +109,7 @@ local buffParametersKeys = {
109
109
  durationIncreaseOnAutoAttack = true,
110
110
  maximumDuration = true,
111
111
  maximumRemainingDuration = true,
112
+ turnsIntoGhost = true,
112
113
  stuns = true,
113
114
  ignoresStunImmunity = true,
114
115
  providesStunImmunity = true,
@@ -123,7 +124,8 @@ local buffParametersKeys = {
123
124
  damageOnExpiration = true,
124
125
  healingOnExpiration = true,
125
126
  killsOnExpiration = true,
126
- explodesOnExpiration = true
127
+ explodesOnExpiration = true,
128
+ abilityCooldownFactor = true
127
129
  }
128
130
  local function resolveEnumValue(ability, level, value)
129
131
  if value == nil or type(value) == "number" then
@@ -174,6 +176,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
174
176
  end
175
177
  end
176
178
  local buffBooleanParameters = {
179
+ "turnsIntoGhost",
177
180
  "stuns",
178
181
  "ignoresStunImmunity",
179
182
  "disablesAutoAttack",
@@ -199,7 +202,8 @@ local buffNumberParameters = {
199
202
  "healingPerInterval",
200
203
  "healingOverDuration",
201
204
  "damageOnExpiration",
202
- "healingOnExpiration"
205
+ "healingOnExpiration",
206
+ "abilityCooldownFactor"
203
207
  }
204
208
  local unsuccessfulApplicationMarker = {}
205
209
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -302,7 +306,8 @@ buffHealingIntervalTimerCallback = function(buff)
302
306
  source:healTarget(buff[101], healingPerInterval)
303
307
  end
304
308
  end
305
- local buffDestroyEvent = __TS__New(Event)
309
+ local buffCreatedEvent = __TS__New(Event)
310
+ local buffBeingDestroyedEvent = __TS__New(Event)
306
311
  ____exports.Buff = __TS__Class()
307
312
  local Buff = ____exports.Buff
308
313
  Buff.name = "Buff"
@@ -321,7 +326,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
321
326
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
322
327
  polarity = resistanceTypeOrPolarity
323
328
  resistanceType = abilityOrParametersOrResistanceType
324
- if __TS__InstanceOf(parametersOrAbility, Ability) then
329
+ if __TS__InstanceOf(parametersOrAbility, Ability) or parametersOrAbility == nil then
325
330
  ability = parametersOrAbility
326
331
  else
327
332
  ability = nil
@@ -331,7 +336,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
331
336
  typeId = typeIdOrTypeIds
332
337
  polarity = polarityOrTypeIdSelectionPolicy
333
338
  resistanceType = resistanceTypeOrPolarity
334
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
339
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) or abilityOrParametersOrResistanceType == nil then
335
340
  ability = abilityOrParametersOrResistanceType
336
341
  parameters = parametersOrAbility
337
342
  else
@@ -340,7 +345,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
340
345
  end
341
346
  end
342
347
  self.typeId = typeId
343
- if not __TS__InstanceOf(ability, Ability) then
348
+ if not (__TS__InstanceOf(ability, Ability) or ability == nil) then
344
349
  parameters = ability
345
350
  ability = nil
346
351
  end
@@ -371,7 +376,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
371
376
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
372
377
  if missProbability ~= nil then
373
378
  missProbability = resolveNumberValue(ability, level, missProbability)
374
- self[141] = missProbability
379
+ self[142] = missProbability
375
380
  end
376
381
  local buffByTypeId = buffByTypeIdByUnit[_unit]
377
382
  if buffByTypeId == nil then
@@ -504,64 +509,68 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
504
509
  end
505
510
  self:onCreate()
506
511
  self[100] = 1
512
+ Event.invoke(buffCreatedEvent, self)
507
513
  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)
514
+ function Buff.prototype.onAbilityGained(self, ability)
515
+ if __TS__InstanceOf(ability, UnitAbility) then
516
+ local abilityCooldownModifier = self[144]
517
+ if abilityCooldownModifier then
518
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
519
+ end
520
+ end
512
521
  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
522
+ function Buff.prototype.onAbilityLost(self, ability)
523
+ if __TS__InstanceOf(ability, UnitAbility) then
524
+ local abilityCooldownModifier = self[144]
525
+ if abilityCooldownModifier then
526
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
527
+ end
518
528
  end
519
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
520
529
  end
521
530
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
522
531
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
523
532
  Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
533
  else
525
534
  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(
535
+ local ____Effect_40 = Effect
536
+ local ____Effect_flash_41 = Effect.flash
537
+ local ____array_39 = __TS__SparseArrayNew(
529
538
  self[105],
530
539
  isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
531
540
  stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
532
541
  )
533
- local ____isWidgetProvided_40
542
+ local ____isWidgetProvided_38
534
543
  if isWidgetProvided then
535
- ____isWidgetProvided_40 = yOrParametersOrDuration
544
+ ____isWidgetProvided_38 = yOrParametersOrDuration
536
545
  else
537
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
546
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
538
547
  end
539
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
540
- ____Effect_flash_43(
541
- ____Effect_42,
542
- __TS__SparseArraySpread(____array_41)
548
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
549
+ ____Effect_flash_41(
550
+ ____Effect_40,
551
+ __TS__SparseArraySpread(____array_39)
543
552
  )
544
553
  end
545
554
  end
546
555
  function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
547
556
  local isWidgetProvided = type(widgetOrDuration) == "table"
548
- local ____Effect_46 = Effect
549
- local ____Effect_flash_47 = Effect.flash
550
- local ____array_45 = __TS__SparseArrayNew(
557
+ local ____Effect_44 = Effect
558
+ local ____Effect_flash_45 = Effect.flash
559
+ local ____array_43 = __TS__SparseArrayNew(
551
560
  self[106],
552
561
  isWidgetProvided and widgetOrDuration or self._unit,
553
562
  stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
554
563
  )
555
- local ____isWidgetProvided_44
564
+ local ____isWidgetProvided_42
556
565
  if isWidgetProvided then
557
- ____isWidgetProvided_44 = duration
566
+ ____isWidgetProvided_42 = duration
558
567
  else
559
- ____isWidgetProvided_44 = widgetOrDuration
568
+ ____isWidgetProvided_42 = widgetOrDuration
560
569
  end
561
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
562
- ____Effect_flash_47(
563
- ____Effect_46,
564
- __TS__SparseArraySpread(____array_45)
570
+ __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
571
+ ____Effect_flash_45(
572
+ ____Effect_44,
573
+ __TS__SparseArraySpread(____array_43)
565
574
  )
566
575
  end
567
576
  function Buff.prototype.onCreate(self)
@@ -592,26 +601,33 @@ function Buff.prototype.onDestroy(self)
592
601
  behavior:destroy()
593
602
  end
594
603
  end
595
- if self[137] then
604
+ local previousAbilityCooldownModifier = self[144]
605
+ if previousAbilityCooldownModifier then
606
+ for ____, ability in ipairs(self._unit.abilities) do
607
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
608
+ end
609
+ end
610
+ if self[139] then
611
+ unit:decrementInvulnerabilityCounter()
612
+ end
613
+ if self[138] then
596
614
  unit:decrementDisableAutoAttackCounter()
597
615
  end
598
- if self[135] then
599
- if self[136] then
600
- unit:decrementStunCounter()
616
+ if self[136] then
617
+ if self[137] then
618
+ unit:decrementForceStunCounter()
601
619
  end
602
620
  unit:decrementStunCounter()
603
621
  end
622
+ if self[135] then
623
+ unit:decrementGhostCounter()
624
+ end
604
625
  if self._abilityTypeIds ~= nil then
605
626
  for abilityTypeId in pairs(self._abilityTypeIds) do
606
627
  unit:removeAbility(abilityTypeId)
607
628
  end
608
629
  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)
630
+ Event.invoke(buffBeingDestroyedEvent, self)
615
631
  self[100] = 3
616
632
  return UnitBehavior.prototype.onDestroy(self)
617
633
  end
@@ -640,8 +656,8 @@ function Buff.apply(self, ...)
640
656
  end
641
657
  end
642
658
  function Buff.getByTypeId(self, unit, typeId)
643
- local ____opt_48 = buffByTypeIdByUnit[unit]
644
- local buff = ____opt_48 and ____opt_48[typeId]
659
+ local ____opt_46 = buffByTypeIdByUnit[unit]
660
+ local buff = ____opt_46 and ____opt_46[typeId]
645
661
  if __TS__InstanceOf(buff, self) then
646
662
  return buff
647
663
  end
@@ -655,9 +671,9 @@ function Buff.prototype.onExpiration(self)
655
671
  if self[121] ~= nil then
656
672
  (self[102] or unit):healTarget(unit, self[120] or 0)
657
673
  end
658
- if self[140] then
674
+ if self[141] then
659
675
  unit:explode()
660
- elseif self[139] then
676
+ elseif self[140] then
661
677
  unit:kill()
662
678
  end
663
679
  end
@@ -799,8 +815,8 @@ __TS__SetDescriptor(
799
815
  return
800
816
  end
801
817
  self[112] = damageInterval
802
- local ____opt_50 = self._timer
803
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
818
+ local ____opt_48 = self._timer
819
+ local elapsed = ____opt_48 and ____opt_48.elapsed or 0
804
820
  local timer = self[114]
805
821
  if timer == nil then
806
822
  timer = Timer:create()
@@ -879,8 +895,8 @@ __TS__SetDescriptor(
879
895
  return
880
896
  end
881
897
  self[117] = healingInterval
882
- local ____opt_52 = self._timer
883
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
898
+ local ____opt_50 = self._timer
899
+ local elapsed = ____opt_50 and ____opt_50.elapsed or 0
884
900
  local timer = self[119]
885
901
  if timer == nil then
886
902
  timer = Timer:create()
@@ -961,30 +977,53 @@ __TS__SetDescriptor(
961
977
  },
962
978
  true
963
979
  )
980
+ __TS__SetDescriptor(
981
+ Buff.prototype,
982
+ "turnsIntoGhost",
983
+ {
984
+ get = function(self)
985
+ local ____self__135_52 = self[135]
986
+ if ____self__135_52 == nil then
987
+ ____self__135_52 = false
988
+ end
989
+ return ____self__135_52
990
+ end,
991
+ set = function(self, turnsIntoGhost)
992
+ if not turnsIntoGhost and self[135] then
993
+ self.object:decrementGhostCounter()
994
+ self[135] = nil
995
+ elseif turnsIntoGhost and not self[135] then
996
+ self.object:incrementGhostCounter()
997
+ self[135] = true
998
+ end
999
+ end
1000
+ },
1001
+ true
1002
+ )
964
1003
  __TS__SetDescriptor(
965
1004
  Buff.prototype,
966
1005
  "stuns",
967
1006
  {
968
1007
  get = function(self)
969
- local ____self__135_54 = self[135]
970
- if ____self__135_54 == nil then
971
- ____self__135_54 = false
1008
+ local ____self__136_53 = self[136]
1009
+ if ____self__136_53 == nil then
1010
+ ____self__136_53 = false
972
1011
  end
973
- return ____self__135_54
1012
+ return ____self__136_53
974
1013
  end,
975
1014
  set = function(self, stuns)
976
- if not stuns and self[135] then
977
- if self[136] then
978
- self.object:decrementStunCounter()
1015
+ if not stuns and self[136] then
1016
+ if self[137] then
1017
+ self.object:decrementForceStunCounter()
979
1018
  end
980
1019
  self.object:decrementStunCounter()
981
- self[135] = nil
982
- elseif stuns and not self[135] then
983
- if self[136] then
984
- self.object:incrementStunCounter()
1020
+ self[136] = nil
1021
+ elseif stuns and not self[136] then
1022
+ if self[137] then
1023
+ self.object:incrementForceStunCounter()
985
1024
  end
986
1025
  self.object:incrementStunCounter()
987
- self[135] = true
1026
+ self[136] = true
988
1027
  end
989
1028
  end
990
1029
  },
@@ -995,23 +1034,23 @@ __TS__SetDescriptor(
995
1034
  "ignoresStunImmunity",
996
1035
  {
997
1036
  get = function(self)
998
- local ____self__136_55 = self[136]
999
- if ____self__136_55 == nil then
1000
- ____self__136_55 = false
1037
+ local ____self__137_54 = self[137]
1038
+ if ____self__137_54 == nil then
1039
+ ____self__137_54 = false
1001
1040
  end
1002
- return ____self__136_55
1041
+ return ____self__137_54
1003
1042
  end,
1004
1043
  set = function(self, ignoresStunImmunity)
1005
- if not ignoresStunImmunity and self[136] then
1006
- if self[135] then
1007
- self.object:decrementStunCounter()
1044
+ if not ignoresStunImmunity and self[137] then
1045
+ if self[136] then
1046
+ self.object:decrementForceStunCounter()
1008
1047
  end
1009
- self[136] = nil
1010
- elseif ignoresStunImmunity and not self[136] then
1011
- if self[135] then
1012
- self.object:incrementStunCounter()
1048
+ self[137] = nil
1049
+ elseif ignoresStunImmunity and not self[137] then
1050
+ if self[136] then
1051
+ self.object:incrementForceStunCounter()
1013
1052
  end
1014
- self[136] = true
1053
+ self[137] = true
1015
1054
  end
1016
1055
  end
1017
1056
  },
@@ -1022,19 +1061,19 @@ __TS__SetDescriptor(
1022
1061
  "disablesAutoAttack",
1023
1062
  {
1024
1063
  get = function(self)
1025
- local ____self__137_56 = self[137]
1026
- if ____self__137_56 == nil then
1027
- ____self__137_56 = false
1064
+ local ____self__138_55 = self[138]
1065
+ if ____self__138_55 == nil then
1066
+ ____self__138_55 = false
1028
1067
  end
1029
- return ____self__137_56
1068
+ return ____self__138_55
1030
1069
  end,
1031
1070
  set = function(self, disablesAutoAttack)
1032
- if not disablesAutoAttack and self[137] then
1071
+ if not disablesAutoAttack and self[138] then
1033
1072
  self.object:decrementDisableAutoAttackCounter()
1034
- self[137] = nil
1035
- elseif disablesAutoAttack and not self[137] then
1073
+ self[138] = nil
1074
+ elseif disablesAutoAttack and not self[138] then
1036
1075
  self.object:incrementDisableAutoAttackCounter()
1037
- self[137] = true
1076
+ self[138] = true
1038
1077
  end
1039
1078
  end
1040
1079
  },
@@ -1045,19 +1084,19 @@ __TS__SetDescriptor(
1045
1084
  "providesInvulnerability",
1046
1085
  {
1047
1086
  get = function(self)
1048
- local ____self__138_57 = self[138]
1049
- if ____self__138_57 == nil then
1050
- ____self__138_57 = false
1087
+ local ____self__139_56 = self[139]
1088
+ if ____self__139_56 == nil then
1089
+ ____self__139_56 = false
1051
1090
  end
1052
- return ____self__138_57
1091
+ return ____self__139_56
1053
1092
  end,
1054
1093
  set = function(self, providesInvulnerability)
1055
- if not providesInvulnerability and self[138] then
1094
+ if not providesInvulnerability and self[139] then
1056
1095
  self.object:decrementInvulnerabilityCounter()
1057
- self[138] = nil
1058
- elseif providesInvulnerability and not self[138] then
1096
+ self[139] = nil
1097
+ elseif providesInvulnerability and not self[139] then
1059
1098
  self.object:incrementInvulnerabilityCounter()
1060
- self[138] = true
1099
+ self[139] = true
1061
1100
  end
1062
1101
  end
1063
1102
  },
@@ -1068,17 +1107,17 @@ __TS__SetDescriptor(
1068
1107
  "killsOnExpiration",
1069
1108
  {
1070
1109
  get = function(self)
1071
- local ____self__139_58 = self[139]
1072
- if ____self__139_58 == nil then
1073
- ____self__139_58 = false
1110
+ local ____self__140_57 = self[140]
1111
+ if ____self__140_57 == nil then
1112
+ ____self__140_57 = false
1074
1113
  end
1075
- return ____self__139_58
1114
+ return ____self__140_57
1076
1115
  end,
1077
1116
  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
1117
+ if not killsOnExpiration and self[140] then
1118
+ self[140] = nil
1119
+ elseif killsOnExpiration and not self[140] then
1120
+ self[140] = true
1082
1121
  end
1083
1122
  end
1084
1123
  },
@@ -1089,17 +1128,17 @@ __TS__SetDescriptor(
1089
1128
  "explodesOnExpiration",
1090
1129
  {
1091
1130
  get = function(self)
1092
- local ____self__140_59 = self[140]
1093
- if ____self__140_59 == nil then
1094
- ____self__140_59 = false
1131
+ local ____self__141_58 = self[141]
1132
+ if ____self__141_58 == nil then
1133
+ ____self__141_58 = false
1095
1134
  end
1096
- return ____self__140_59
1135
+ return ____self__141_58
1097
1136
  end,
1098
1137
  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
1138
+ if not killsOnExpiration and self[141] then
1139
+ self[141] = nil
1140
+ elseif killsOnExpiration and not self[141] then
1141
+ self[141] = true
1103
1142
  end
1104
1143
  end
1105
1144
  },
@@ -1221,13 +1260,13 @@ __TS__SetDescriptor(
1221
1260
  "remainingDuration",
1222
1261
  {
1223
1262
  get = function(self)
1224
- local ____opt_60 = self._timer
1225
- return ____opt_60 and ____opt_60.remaining or 0
1263
+ local ____opt_59 = self._timer
1264
+ return ____opt_59 and ____opt_59.remaining or 0
1226
1265
  end,
1227
1266
  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)
1267
+ local ____remainingDuration_63 = remainingDuration
1268
+ local ____opt_61 = self._timer
1269
+ local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1231
1270
  if remainingDurationDelta ~= 0 then
1232
1271
  self[103] = self[103] + remainingDurationDelta
1233
1272
  if remainingDuration <= 0 then
@@ -1242,7 +1281,7 @@ __TS__SetDescriptor(
1242
1281
  remainingDuration,
1243
1282
  self._spellStealPriority,
1244
1283
  self._learnLevelMinimum,
1245
- self[141]
1284
+ self[142]
1246
1285
  ) then
1247
1286
  local timer = self._timer
1248
1287
  if timer == nil then
@@ -1257,7 +1296,34 @@ __TS__SetDescriptor(
1257
1296
  },
1258
1297
  true
1259
1298
  )
1260
- Buff.destroyEvent = buffDestroyEvent;
1299
+ __TS__SetDescriptor(
1300
+ Buff.prototype,
1301
+ "abilityCooldownFactor",
1302
+ {
1303
+ get = function(self)
1304
+ return self[143] or 1
1305
+ end,
1306
+ set = function(self, abilityCooldownFactor)
1307
+ local previousAbilityCooldownModifier = self[144]
1308
+ if previousAbilityCooldownModifier then
1309
+ for ____, ability in ipairs(self._unit.abilities) do
1310
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1311
+ end
1312
+ end
1313
+ local function modifier(ability, level, cooldown)
1314
+ return cooldown * abilityCooldownFactor
1315
+ end
1316
+ for ____, ability in ipairs(self._unit.abilities) do
1317
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1318
+ end
1319
+ self[144] = modifier
1320
+ self[143] = abilityCooldownFactor
1321
+ end
1322
+ },
1323
+ true
1324
+ )
1325
+ Buff.createdEvent = buffCreatedEvent
1326
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1261
1327
  (function(self)
1262
1328
  local function destroyBuffIfNeeded(buff)
1263
1329
  if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
@@ -1311,5 +1377,8 @@ Buff.destroyEvent = buffDestroyEvent;
1311
1377
  ____exports.checkBuffs(target)
1312
1378
  end
1313
1379
  )
1380
+ buffCreatedEvent:addListener(function(buff)
1381
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1382
+ end)
1314
1383
  end)(Buff)
1315
1384
  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
  }