warscript 0.0.1-dev.989e1a3 → 0.0.1-dev.9a5718b

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 (276) hide show
  1. package/core/types/effect.d.ts +11 -1
  2. package/core/types/effect.lua +43 -77
  3. package/core/types/frame.d.ts +1 -0
  4. package/core/types/frame.lua +112 -37
  5. package/core/types/handle.lua +9 -9
  6. package/core/types/item.d.ts +1 -0
  7. package/core/types/item.lua +1 -0
  8. package/core/types/player.d.ts +2 -1
  9. package/core/types/player.lua +18 -13
  10. package/core/types/playerColor.lua +4 -3
  11. package/core/types/sound.d.ts +1 -1
  12. package/core/types/sound.lua +14 -9
  13. package/core/types/unit.d.ts +5 -0
  14. package/core/types/unit.lua +5 -0
  15. package/core/util.d.ts +3 -1
  16. package/core/util.lua +109 -3
  17. package/decl/native.d.ts +705 -7
  18. package/engine/behaviour/ability/damage.d.ts +4 -0
  19. package/engine/behaviour/ability/damage.lua +19 -15
  20. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  21. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  22. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  23. package/engine/behaviour/ability.d.ts +10 -5
  24. package/engine/behaviour/ability.lua +40 -0
  25. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  26. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  27. package/engine/behaviour/unit.d.ts +1 -0
  28. package/engine/behaviour/unit.lua +14 -3
  29. package/engine/buff.d.ts +61 -25
  30. package/engine/buff.lua +330 -156
  31. package/engine/index.d.ts +2 -1
  32. package/engine/internal/ability.d.ts +4 -0
  33. package/engine/internal/ability.lua +52 -33
  34. package/engine/internal/item/fields.d.ts +12 -0
  35. package/engine/internal/item/fields.lua +33 -0
  36. package/engine/internal/item/owner-cache.d.ts +5 -0
  37. package/engine/internal/item/owner-cache.lua +4 -0
  38. package/engine/internal/item+owner.d.ts +2 -0
  39. package/engine/internal/item+owner.lua +27 -4
  40. package/engine/internal/item.d.ts +20 -5
  41. package/engine/internal/item.lua +146 -57
  42. package/engine/internal/mechanics/cast-ability.lua +6 -3
  43. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  44. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  45. package/engine/internal/object-data/health-bonus.lua +16 -0
  46. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  47. package/engine/internal/object-data/mana-bonus.lua +16 -0
  48. package/engine/internal/unit/ability.lua +15 -3
  49. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  50. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  51. package/engine/internal/unit/appearance.d.ts +15 -0
  52. package/engine/internal/unit/appearance.lua +85 -0
  53. package/engine/internal/unit/attributes.d.ts +17 -0
  54. package/engine/internal/unit/attributes.lua +46 -0
  55. package/engine/internal/unit/bonus.d.ts +4 -0
  56. package/engine/internal/unit/bonus.lua +23 -3
  57. package/engine/internal/unit/buff.d.ts +2 -2
  58. package/engine/internal/unit/buff.lua +34 -19
  59. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  60. package/engine/internal/unit/equipment-inventory.lua +233 -0
  61. package/engine/internal/unit/expiration-timer.lua +1 -1
  62. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  63. package/engine/internal/unit/extended-inventory.lua +99 -0
  64. package/engine/internal/unit/fly-height.lua +3 -3
  65. package/engine/internal/unit/ignore-events-items.lua +10 -1
  66. package/engine/internal/unit/interrupts.d.ts +12 -0
  67. package/engine/internal/unit/interrupts.lua +28 -0
  68. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  69. package/engine/internal/unit/inventory.lua +87 -0
  70. package/engine/internal/unit/item-container.d.ts +25 -0
  71. package/engine/internal/unit/item-container.lua +11 -0
  72. package/engine/internal/unit/item-order-events.d.ts +17 -0
  73. package/engine/internal/unit/item-order-events.lua +67 -0
  74. package/engine/internal/unit/item-slot.d.ts +27 -0
  75. package/engine/internal/unit/item-slot.lua +92 -0
  76. package/engine/internal/unit/order.d.ts +3 -3
  77. package/engine/internal/unit/order.lua +10 -10
  78. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  79. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  80. package/engine/internal/unit/range-event.d.ts +12 -0
  81. package/engine/internal/unit/range-event.lua +90 -0
  82. package/engine/internal/unit/scale.lua +3 -3
  83. package/engine/internal/unit+ability.lua +2 -2
  84. package/engine/internal/unit+bonus.lua +3 -3
  85. package/engine/internal/unit+damage.d.ts +9 -0
  86. package/engine/internal/unit+damage.lua +33 -0
  87. package/engine/internal/unit+rally.lua +9 -31
  88. package/engine/internal/unit-missile-data.lua +58 -32
  89. package/engine/internal/unit-missile-launch.lua +25 -18
  90. package/engine/internal/unit.d.ts +3 -18
  91. package/engine/internal/unit.lua +97 -195
  92. package/engine/local-client.d.ts +26 -0
  93. package/engine/local-client.lua +294 -54
  94. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  95. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  96. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  97. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  98. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  99. package/engine/object-data/auxiliary/item-class.lua +2 -0
  100. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  101. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  102. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  103. package/engine/object-data/auxiliary/order-type.lua +2 -0
  104. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  105. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  106. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  107. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  108. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  109. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  110. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  111. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  112. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  113. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  114. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  115. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  116. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  117. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  118. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  119. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  120. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  121. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  122. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  123. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  124. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  125. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  126. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  127. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  128. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  129. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  130. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  131. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  132. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  133. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  134. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  135. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  136. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  137. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  138. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  139. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  140. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  141. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  142. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  143. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  144. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  145. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  146. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  147. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  148. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  149. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  150. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  151. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  152. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  153. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  154. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  155. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  156. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  157. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  158. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  159. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  160. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  161. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  162. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  163. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  164. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  165. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  166. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  167. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  168. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  169. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  170. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  171. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  172. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  173. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  174. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  175. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  176. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  177. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  178. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  179. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  180. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  181. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  182. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  183. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  184. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  185. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  186. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  187. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  188. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  189. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  190. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  191. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  192. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  193. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  194. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  195. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  196. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  197. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  198. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  199. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  200. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  201. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  202. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  203. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  204. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  205. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  206. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  207. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  208. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  209. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  210. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  211. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  212. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  213. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  214. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  215. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  216. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  217. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  218. package/engine/object-data/entry/ability-type.d.ts +12 -3
  219. package/engine/object-data/entry/ability-type.lua +137 -4
  220. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  221. package/engine/object-data/entry/buff-type.d.ts +6 -2
  222. package/engine/object-data/entry/buff-type.lua +26 -0
  223. package/engine/object-data/entry/destructible-type.d.ts +6 -2
  224. package/engine/object-data/entry/destructible-type.lua +26 -0
  225. package/engine/object-data/entry/item-type.d.ts +18 -3
  226. package/engine/object-data/entry/item-type.lua +84 -0
  227. package/engine/object-data/entry/lightning-type.d.ts +2 -2
  228. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  229. package/engine/object-data/entry/unit-type.d.ts +47 -2
  230. package/engine/object-data/entry/unit-type.lua +383 -49
  231. package/engine/object-data/entry/upgrade.d.ts +2 -2
  232. package/engine/object-data/entry.d.ts +4 -1
  233. package/engine/object-field/ability.lua +2 -2
  234. package/engine/object-field/item.d.ts +22 -0
  235. package/engine/object-field/item.lua +118 -0
  236. package/engine/object-field.d.ts +3 -1
  237. package/engine/object-field.lua +42 -18
  238. package/engine/random.d.ts +1 -0
  239. package/engine/random.lua +8 -0
  240. package/engine/standard/entries/ability-type.d.ts +3102 -7
  241. package/engine/standard/entries/ability-type.lua +0 -6
  242. package/engine/standard/entries/item-type.d.ts +1299 -0
  243. package/engine/standard/entries/item-type.lua +2 -0
  244. package/engine/standard/entries/unit-type.d.ts +5 -0
  245. package/engine/standard/entries/unit-type.lua +5 -0
  246. package/engine/standard/fields/item.d.ts +4 -0
  247. package/engine/standard/fields/item.lua +6 -0
  248. package/engine/standard/fields/unit.d.ts +11 -6
  249. package/engine/standard/fields/unit.lua +12 -5
  250. package/engine/unit.d.ts +8 -1
  251. package/engine/unit.lua +8 -1
  252. package/event.d.ts +1 -1
  253. package/lualib_bundle.lua +1 -1
  254. package/math.d.ts +2 -0
  255. package/math.lua +14 -0
  256. package/network.lua +25 -1
  257. package/objutil/buff.lua +10 -8
  258. package/objutil/object.lua +1 -1
  259. package/operation.d.ts +8 -1
  260. package/operation.lua +38 -18
  261. package/package.json +3 -23
  262. package/patch-lua.lua +15 -0
  263. package/utility/linked-map.d.ts +35 -0
  264. package/utility/linked-map.lua +107 -0
  265. package/utility/linked-set.d.ts +3 -1
  266. package/utility/linked-set.lua +27 -0
  267. package/utility/random.d.ts +102 -0
  268. package/utility/random.lua +273 -0
  269. package/utility/records.lua +20 -1
  270. package/utility/unordered-map.d.ts +27 -0
  271. package/utility/unordered-map.lua +99 -0
  272. package/engine/internal/unit/item.lua +0 -78
  273. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  274. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  275. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  276. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -5,6 +5,7 @@ import { Unit } from "../../internal/unit";
5
5
  import { AbilityDependentValue } from "../../object-field/ability";
6
6
  import { Widget } from "../../../core/types/widget";
7
7
  import { DamageType, WeaponType } from "../../internal/unit+damage";
8
+ import "../../internal/unit+damage";
8
9
  import { CombatClassifications } from "../../object-data/auxiliary/combat-classification";
9
10
  import { AttackType } from "../../object-data/auxiliary/attack-type";
10
11
  export type DamageAbilityBehaviorParameters = {
@@ -25,8 +26,11 @@ export declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehav
25
26
  protected readonly damage: AbilityDependentValue<number>;
26
27
  protected readonly parameters?: T | undefined;
27
28
  protected constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: T | undefined);
29
+ protected precalculatedDamage?: number;
28
30
  protected calculateDamage(caster: Unit): number;
29
31
  protected damageTarget(caster: Unit, target: Widget, damage?: number): void;
32
+ onChannelingStart(caster: Unit): void;
33
+ onStop(): void;
30
34
  }
31
35
  export declare class DamageSelfAbilityBehavior extends DamageAbilityBehavior {
32
36
  constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAbilityBehaviorParameters);
@@ -4,11 +4,10 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local ____exports = {}
5
5
  local ____ability = require("engine.behaviour.ability")
6
6
  local AbilityBehavior = ____ability.AbilityBehavior
7
- local ____unit = require("engine.internal.unit")
8
- local Unit = ____unit.Unit
9
7
  local ____ability = require("engine.standard.fields.ability")
10
8
  local ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD = ____ability.ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD
11
9
  local AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD = ____ability.AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD
10
+ require("engine.internal.unit+damage")
12
11
  ____exports.DamageAbilityBehavior = __TS__Class()
13
12
  local DamageAbilityBehavior = ____exports.DamageAbilityBehavior
14
13
  DamageAbilityBehavior.name = "DamageAbilityBehavior"
@@ -39,7 +38,7 @@ function DamageAbilityBehavior.prototype.damageTarget(self, caster, target, dama
39
38
  local parameters = self.parameters
40
39
  caster:damageTarget(
41
40
  target,
42
- damage or self:calculateDamage(caster),
41
+ damage or self.precalculatedDamage or self:calculateDamage(caster),
43
42
  nil,
44
43
  nil,
45
44
  self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
@@ -48,6 +47,12 @@ function DamageAbilityBehavior.prototype.damageTarget(self, caster, target, dama
48
47
  self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
49
48
  )
50
49
  end
50
+ function DamageAbilityBehavior.prototype.onChannelingStart(self, caster)
51
+ self.precalculatedDamage = self:calculateDamage(caster)
52
+ end
53
+ function DamageAbilityBehavior.prototype.onStop(self)
54
+ self.precalculatedDamage = nil
55
+ end
51
56
  ____exports.DamageSelfAbilityBehavior = __TS__Class()
52
57
  local DamageSelfAbilityBehavior = ____exports.DamageSelfAbilityBehavior
53
58
  DamageSelfAbilityBehavior.name = "DamageSelfAbilityBehavior"
@@ -76,21 +81,20 @@ function DamageAreaAbilityBehavior.prototype.____constructor(self, ability, dama
76
81
  end
77
82
  function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
78
83
  local parameters = self.parameters
79
- local targets = Unit.getAllowedTargetsInCollisionRange(
80
- caster,
81
- self:resolveCurrentAbilityDependentValue(parameters and parameters.allowedTargetCombatClassifications or ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD),
84
+ caster:damageArea(
82
85
  x,
83
86
  y,
84
- self:resolveCurrentAbilityDependentValue(parameters and parameters.areaOfEffect or AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD)
87
+ self:resolveCurrentAbilityDependentValue(parameters and parameters.areaOfEffect or AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD),
88
+ self:resolveCurrentAbilityDependentValue(parameters and parameters.allowedTargetCombatClassifications or ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD),
89
+ self.precalculatedDamage or self:calculateDamage(caster),
90
+ self:resolveCurrentAbilityDependentValue(parameters and parameters.maximumDamage or 0),
91
+ nil,
92
+ nil,
93
+ self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
94
+ parameters and parameters.damageType,
95
+ parameters and parameters.weaponType,
96
+ self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
85
97
  )
86
- local damage = self:calculateDamage(caster)
87
- local maximumDamage = self:resolveCurrentAbilityDependentValue(parameters and parameters.maximumDamage or 0)
88
- if maximumDamage ~= 0 and damage > maximumDamage then
89
- damage = maximumDamage / #targets
90
- end
91
- for ____, target in ipairs(targets) do
92
- self:damageTarget(caster, target, damage)
93
- end
94
98
  end
95
99
  ____exports.DamageSelfAreaAbilityBehavior = __TS__Class()
96
100
  local DamageSelfAreaAbilityBehavior = ____exports.DamageSelfAreaAbilityBehavior
@@ -10,9 +10,6 @@ local Unit = ____unit.Unit
10
10
  local ____ability = require("engine.standard.fields.ability")
11
11
  local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
12
12
  local MANA_COST_ABILITY_INTEGER_LEVEL_FIELD = ____ability.MANA_COST_ABILITY_INTEGER_LEVEL_FIELD
13
- local ____math = require("math")
14
- local max = ____math.max
15
- local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
16
13
  local ____sound = require("core.types.sound")
17
14
  local Sound3D = ____sound.Sound3D
18
15
  local SoundSettings = ____sound.SoundSettings
@@ -31,7 +28,11 @@ function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
31
28
  return false
32
29
  end
33
30
  caster.mana = caster.mana - manaCost
34
- self.ability.cooldownRemaining = max(cooldown, MINIMUM_POSITIVE_NORMALIZED_FLOAT)
31
+ if cooldown == 0 then
32
+ self.ability:interruptCast()
33
+ else
34
+ self.ability.cooldownRemaining = cooldown
35
+ end
35
36
  self:flashCasterEffect(caster)
36
37
  local soundPresetId = self.ability:getField(ABILITY_SF_EFFECT_SOUND)
37
38
  if soundPresetId ~= "" then
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import { Unit } from "../../internal/unit";
3
+ import "../../internal/unit/item-order-events";
3
4
  import { EmulateImpactAbilityBehavior } from "./emulate-impact";
4
5
  import { Ability } from "../../internal/ability";
5
6
  export declare class OnCommandImpactAbilityBehavior extends EmulateImpactAbilityBehavior {
@@ -4,6 +4,7 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local ____exports = {}
5
5
  local ____unit = require("engine.internal.unit")
6
6
  local Unit = ____unit.Unit
7
+ require("engine.internal.unit.item-order-events")
7
8
  local ____emulate_2Dimpact = require("engine.behaviour.ability.emulate-impact")
8
9
  local EmulateImpactAbilityBehavior = ____emulate_2Dimpact.EmulateImpactAbilityBehavior
9
10
  ____exports.OnCommandImpactAbilityBehavior = __TS__Class()
@@ -26,16 +26,21 @@ export declare abstract class AbilityBehavior<Parameters extends {
26
26
  get unit(): Unit | undefined;
27
27
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
28
28
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
29
- protected flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
30
- protected flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
31
- protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
- protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
33
- protected flashSpecialEffect(...args: [
29
+ protected getDuration(widget: Widget): number;
30
+ flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
31
+ flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
+ flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
33
+ flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
34
+ flashSpecialEffect(...args: [
34
35
  ...pointOrWidget: [x: number, y: number] | [widget: Widget],
35
36
  ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]
36
37
  ]): void;
37
38
  private static MissileLaunchConfig;
38
39
  private get missileLaunchConfig();
40
+ protected launchMissile(source: Unit, ...args: [
41
+ ...pointOrWidget: [x: number, y: number] | [widget: Unit /** TODO: support Widget */],
42
+ ...parameters: NonNullable<Parameters["missileParameters"]>
43
+ ]): void;
39
44
  protected onCreate(): void;
40
45
  onValueChange(_value: ReadonlySubscribableAbilityDependentValue<string | number | boolean>): void;
41
46
  onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
@@ -9,6 +9,7 @@ local ____behavior = require("engine.behavior")
9
9
  local Behavior = ____behavior.Behavior
10
10
  local ____unit = require("engine.internal.unit")
11
11
  local Unit = ____unit.Unit
12
+ local UnitClassification = ____unit.UnitClassification
12
13
  require("engine.internal.unit.ability")
13
14
  local ____ability = require("engine.internal.ability")
14
15
  local Ability = ____ability.Ability
@@ -18,6 +19,8 @@ local ____ability = require("engine.standard.fields.ability")
18
19
  local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
19
20
  local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
20
21
  local CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
22
+ local DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD
23
+ local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD
21
24
  local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
22
25
  local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
23
26
  local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
@@ -30,7 +33,14 @@ local ____ability = require("engine.object-field.ability")
30
33
  local AbilityField = ____ability.AbilityField
31
34
  local AbilityLevelField = ____ability.AbilityLevelField
32
35
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
36
+ local ____missile = require("core.types.missile")
37
+ local Missile = ____missile.Missile
33
38
  local createBehaviorFunctionsByAbilityTypeId = {}
39
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
40
+ if success then
41
+ abilityBehavior:onMissileArrival(...)
42
+ end
43
+ end
34
44
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
35
45
  local function createUnitEventListener(key)
36
46
  return function(unit, ability, ...)
@@ -106,6 +116,14 @@ end
106
116
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
107
117
  return resolveCurrentAbilityDependentValue(self.ability, value)
108
118
  end
119
+ function AbilityBehavior.prototype.getDuration(self, widget)
120
+ if __TS__InstanceOf(widget, Unit) then
121
+ if widget.isHero or widget:getField(UNIT_IF_LEVEL) >= 6 or widget:hasClassification(UnitClassification.RESISTANT) then
122
+ return self:resolveCurrentAbilityDependentValue(DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD)
123
+ end
124
+ end
125
+ return self:resolveCurrentAbilityDependentValue(DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD)
126
+ end
109
127
  function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
110
128
  local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
111
129
  Effect:flash(
@@ -160,6 +178,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
160
178
  )
161
179
  end
162
180
  end
181
+ function AbilityBehavior.prototype.launchMissile(self, source, xOrWidget, yOrParameter, ...)
182
+ if type(xOrWidget) ~= "number" then
183
+ Missile:launch(
184
+ self.missileLaunchConfig,
185
+ source,
186
+ xOrWidget,
187
+ invokeOnMissileArrival,
188
+ self,
189
+ yOrParameter,
190
+ ...
191
+ )
192
+ else
193
+ Missile:launch(
194
+ self.missileLaunchConfig,
195
+ source,
196
+ vec2(xOrWidget, yOrParameter),
197
+ invokeOnMissileArrival,
198
+ self,
199
+ ...
200
+ )
201
+ end
202
+ end
163
203
  function AbilityBehavior.prototype.onCreate(self)
164
204
  end
165
205
  function AbilityBehavior.prototype.onValueChange(self, _value)
@@ -7,7 +7,7 @@ import { Destructor } from "../../../destroyable";
7
7
  import { BehaviorPriority } from "../../behavior";
8
8
  export type StunImmunityUnitBehaviorParameters = {
9
9
  readonly priority?: BehaviorPriority;
10
- buffTypeIds?: LuaSet<BuffTypeId>;
10
+ buffTypeIds?: readonly BuffTypeId[];
11
11
  textTagPreset?: TextTagPreset;
12
12
  textTagText?: string;
13
13
  additionalAction?: (this: void, unit: Unit) => void;
@@ -8,14 +8,15 @@ local UnitBehavior = ____unit.UnitBehavior
8
8
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
9
9
  local AbilityType = ____ability_2Dtype.AbilityType
10
10
  local ____arrays = require("utility.arrays")
11
- local flatMapToLuaSet = ____arrays.flatMapToLuaSet
11
+ local distinct = ____arrays.distinct
12
+ local flatMap = ____arrays.flatMap
12
13
  local map = ____arrays.map
13
14
  local ____text_2Dtag = require("engine.text-tag")
14
15
  local TextTag = ____text_2Dtag.TextTag
15
16
  local ____timer = require("core.types.timer")
16
17
  local Timer = ____timer.Timer
17
18
  local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
18
- return flatMapToLuaSet(
19
+ return distinct(flatMap(
19
20
  AbilityType:getAllByBaseIds(map({
20
21
  "AHtb",
21
22
  "AHbh",
@@ -41,11 +42,11 @@ local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
41
42
  "ACcb"
42
43
  }, fourCC)),
43
44
  function(abilityType) return __TS__ArrayFlat(abilityType.buffTypeIds) end
44
- )
45
+ ))
45
46
  end)
46
47
  local function process(behavior)
47
48
  local hasRemovedBuffs = false
48
- for buffTypeId in pairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
+ for ____, buffTypeId in ipairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
50
  hasRemovedBuffs = hasRemovedBuffs or behavior.unit:removeBuff(buffTypeId)
50
51
  end
51
52
  if hasRemovedBuffs then
@@ -2,6 +2,7 @@
2
2
  import { Behavior, BehaviorPriority } from "../behavior";
3
3
  import { Ability } from "../internal/ability";
4
4
  import { DamageEvent, DamagingEvent, Unit } from "../internal/unit";
5
+ import "../internal/unit/equipment-inventory";
5
6
  import "../internal/unit+ability";
6
7
  import "../internal/unit-missile-launch";
7
8
  import { Item } from "../internal/item";
@@ -8,6 +8,7 @@ local ____behavior = require("engine.behavior")
8
8
  local Behavior = ____behavior.Behavior
9
9
  local ____unit = require("engine.internal.unit")
10
10
  local Unit = ____unit.Unit
11
+ require("engine.internal.unit.equipment-inventory")
11
12
  require("engine.internal.unit+ability")
12
13
  require("engine.internal.unit-missile-launch")
13
14
  local ____linked_2Dset = require("utility.linked-set")
@@ -21,6 +22,8 @@ local ____bonus = require("engine.internal.unit.bonus")
21
22
  local addOrUpdateOrRemoveUnitBonus = ____bonus.addOrUpdateOrRemoveUnitBonus
22
23
  local getUnitBonus = ____bonus.getUnitBonus
23
24
  local removeUnitBonus = ____bonus.removeUnitBonus
25
+ local ____linked_2Dmap = require("utility.linked-map")
26
+ local LinkedMap = ____linked_2Dmap.LinkedMap
24
27
  local safeCall = warpack.safeCall
25
28
  local createBehaviorFunctionsByUnitTypeId = {}
26
29
  local behaviorsByOwningPlayerEvent = {}
@@ -79,16 +82,24 @@ function UnitBehavior.prototype.onDestroy(self)
79
82
  end
80
83
  function UnitBehavior.prototype.getUnitBonus(self, bonusType)
81
84
  local ____opt_10 = self._bonusIdByBonusType
82
- local bonusId = ____opt_10 and ____opt_10[bonusType]
85
+ local bonusId = ____opt_10 and ____opt_10:get(bonusType)
83
86
  return bonusId == nil and 0 or getUnitBonus(self.object, bonusType, bonusId)
84
87
  end
85
88
  function UnitBehavior.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
86
89
  local bonusIdByBonusType = self._bonusIdByBonusType
87
90
  if bonusIdByBonusType == nil then
88
- bonusIdByBonusType = {}
91
+ bonusIdByBonusType = __TS__New(LinkedMap)
89
92
  self._bonusIdByBonusType = bonusIdByBonusType
90
93
  end
91
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self.object, bonusType, bonusIdByBonusType[bonusType], value)
94
+ bonusIdByBonusType:put(
95
+ bonusType,
96
+ addOrUpdateOrRemoveUnitBonus(
97
+ self.object,
98
+ bonusType,
99
+ bonusIdByBonusType:get(bonusType),
100
+ value
101
+ )
102
+ )
92
103
  end
93
104
  function UnitBehavior.prototype.registerOwningPlayerEvent(self, event, extractPlayer, listener)
94
105
  local listenerByBehavior = getOrPut(listenerByBehaviorByOwningPlayerEvent, event, mutableLuaMap)
package/engine/buff.d.ts CHANGED
@@ -23,6 +23,13 @@ export type BuffPolarityParameterType = EnumParameterValueType<BuffPolarity>;
23
23
  export type BuffResistanceTypeParameterType = EnumParameterValueType<BuffResistanceType>;
24
24
  export declare class BuffUniqueGroup {
25
25
  }
26
+ export type BuffAbilityParameters = {
27
+ readonly fields?: [AbilityNumberField | AbilityNumberLevelField, NumberParameterValueType][];
28
+ /** Default `true`. */
29
+ readonly isButtonVisible?: boolean;
30
+ /** Default is the level of the source ability or 0 if it is absent. */
31
+ readonly level?: number;
32
+ };
26
33
  export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
27
34
  spellStealPriority?: number;
28
35
  level?: number;
@@ -30,14 +37,7 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
30
37
  learnLevelMinimum?: number;
31
38
  source?: Unit;
32
39
  behaviorConstructors?: (new (unit: Unit) => UnitBehavior)[];
33
- abilityTypeIds?: Record<AbilityTypeId, {
34
- [numberField: (AbilityNumberField | AbilityNumberLevelField) & symbol]: NumberParameterValueType;
35
- } & {
36
- /** Default `true`. */
37
- readonly isButtonVisible?: boolean;
38
- /** Default is the level of the source ability or 0 if it is absent. */
39
- readonly level?: number;
40
- }>;
40
+ abilityTypeIds?: Partial<Record<AbilityTypeId, BuffAbilityParameters>>;
41
41
  damageUponDeathAllowedTargetCombatClassifications?: CombatClassifications | AbilityCombatClassificationsLevelField;
42
42
  damageUponDeath?: NumberParameterValueType;
43
43
  damageUponDeathRange?: NumberParameterValueType;
@@ -54,7 +54,8 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
54
54
  damageIncrease?: NumberParameterValueType;
55
55
  damageIncreaseFactor?: NumberParameterValueType;
56
56
  armorIncrease?: NumberParameterValueType;
57
- armorIncreaseFactor?: NumberParameterValueType;
57
+ maxHealthIncrease?: NumberParameterValueType;
58
+ maxManaIncrease?: NumberParameterValueType;
58
59
  attackSpeedIncreaseFactor?: NumberParameterValueType;
59
60
  movementSpeedIncreaseFactor?: NumberParameterValueType;
60
61
  manaRegenerationRateIncreaseFactor?: NumberParameterValueType;
@@ -77,6 +78,9 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
77
78
  maximumAutoAttackCount?: IntegerParameterValueType;
78
79
  maximumDamageDealtEventCount?: IntegerParameterValueType;
79
80
  maximumDamageReceivedEventCount?: IntegerParameterValueType;
81
+ absorbedDamageFactor?: NumberParameterValueType;
82
+ maximumDamageAbsorbed?: NumberParameterValueType;
83
+ destroysOnMaximumDamageAbsorbed?: BooleanParameterValueType;
80
84
  damageOnExpiration?: NumberParameterValueType;
81
85
  healingOnExpiration?: NumberParameterValueType;
82
86
  killsOnExpiration?: BooleanParameterValueType;
@@ -120,22 +124,26 @@ declare const enum BuffPropertyKey {
120
124
  MAXIMUM_DAMAGE_DEALT_EVENT_COUNT = 132,
121
125
  DAMAGE_RECEIVED_EVENT_COUNT = 133,
122
126
  MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT = 134,
123
- TURNS_INTO_GHOST = 135,
124
- STUNS = 136,
125
- IGNORES_STUN_IMMUNITY = 137,
126
- DISABLES_AUTO_ATTACK = 138,
127
- PROVIDES_INVULNERABILITY = 139,
128
- KILLS_ON_EXPIRATION = 140,
129
- EXPLODES_ON_EXPIRATION = 141,
130
- MISS_PROBABILITY = 142,
131
- ABILITY_COOLDOWN_FACTOR = 143,
132
- ABILITY_COOLDOWN_MODIFIER = 144
127
+ ABSORBED_DAMAGE_FACTOR = 135,
128
+ MAXIMUM_DAMAGE_ABSORBED = 136,
129
+ DAMAGE_ABSORBED = 137,
130
+ DESTROYS_ON_MAXIMUM_DAMAGE_ABSORBED = 138,
131
+ TURNS_INTO_GHOST = 139,
132
+ STUNS = 140,
133
+ IGNORES_STUN_IMMUNITY = 141,
134
+ DISABLES_AUTO_ATTACK = 142,
135
+ PROVIDES_INVULNERABILITY = 143,
136
+ KILLS_ON_EXPIRATION = 144,
137
+ EXPLODES_ON_EXPIRATION = 145,
138
+ MISS_PROBABILITY = 146,
139
+ ABILITY_COOLDOWN_FACTOR = 147,
140
+ ABILITY_COOLDOWN_MODIFIER = 148
133
141
  }
134
142
  export declare const enum BuffTypeIdSelectionPolicy {
135
143
  LEAST_DURATION = 0
136
144
  }
137
145
  export type BuffAdditionalParameters = Prohibit<Record<string, any>, keyof BuffParameters>;
138
- export type BuffConstructorParameters<AdditionalParameters extends BuffAdditionalParameters> = [
146
+ export type BuffConstructorParameters<T extends Buff<BuffAdditionalParameters>> = T extends Buff<infer AdditionalParameters> ? [
139
147
  ...typeId: [ApplicableBuffTypeId] | [
140
148
  typeIds: ReadonlyNonEmptyArray<ApplicableBuffTypeId>,
141
149
  typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
@@ -145,8 +153,10 @@ export type BuffConstructorParameters<AdditionalParameters extends BuffAdditiona
145
153
  ...abilityOrParameters: [
146
154
  ability?: Ability | AbilityBehavior,
147
155
  parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
148
- ] | [parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>]
149
- ];
156
+ ] | [
157
+ parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
158
+ ]
159
+ ] : never;
150
160
  export declare class Buff<AdditionalParameters extends Prohibit<Record<string, any>, keyof BuffParameters> = object> extends UnitBehavior {
151
161
  private _unit;
152
162
  protected readonly __additionalParametersBrand?: AdditionalParameters;
@@ -185,6 +195,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
185
195
  private [BuffPropertyKey.DAMAGE_DEALT_EVENT_COUNT]?;
186
196
  private [BuffPropertyKey.MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT]?;
187
197
  private [BuffPropertyKey.DAMAGE_RECEIVED_EVENT_COUNT]?;
198
+ private [BuffPropertyKey.ABSORBED_DAMAGE_FACTOR]?;
199
+ private [BuffPropertyKey.MAXIMUM_DAMAGE_ABSORBED]?;
200
+ private [BuffPropertyKey.DAMAGE_ABSORBED]?;
201
+ private [BuffPropertyKey.DESTROYS_ON_MAXIMUM_DAMAGE_ABSORBED]?;
188
202
  private [BuffPropertyKey.TURNS_INTO_GHOST]?;
189
203
  private [BuffPropertyKey.STUNS]?;
190
204
  private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
@@ -199,10 +213,11 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
199
213
  readonly typeId: ApplicableBuffTypeId;
200
214
  readonly polarity: BuffPolarity;
201
215
  readonly resistanceType: BuffResistanceType;
202
- readonly parameters: IsExactlyAny<AdditionalParameters> extends true ? any : keyof AdditionalParameters extends never ? undefined : {
216
+ readonly parameters: IsExactlyAny<AdditionalParameters> extends true ? any : AdditionalParameters extends Record<PropertyKey, never> ? undefined : {
203
217
  [K in keyof Omit<AdditionalParameters, keyof BuffParameters>]: AdditionalParameters[K] extends AbilityDependentValue<infer T> ? T : AdditionalParameters[K];
204
218
  };
205
219
  private readonly handle;
220
+ readonly previousBuff?: Buff;
206
221
  private _timer?;
207
222
  private readonly _level?;
208
223
  private readonly _spellStealPriority?;
@@ -210,7 +225,7 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
210
225
  private readonly [BuffPropertyKey.MISS_PROBABILITY]?;
211
226
  private readonly _abilityTypeIds?;
212
227
  private _behaviors?;
213
- constructor(target: Unit, ...parameters: BuffConstructorParameters<AdditionalParameters>);
228
+ constructor(target: Unit, ...parameters: BuffConstructorParameters<Buff<AdditionalParameters>>);
214
229
  get level(): number;
215
230
  get remainingDamageOverDuration(): number;
216
231
  set remainingDamageOverDuration(remainingDamageOverDuration: number);
@@ -238,6 +253,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
238
253
  set receivedDamageFactor(receivedDamageFactor: number);
239
254
  get armorIncrease(): number;
240
255
  set armorIncrease(armorIncrease: number);
256
+ get maxHealthIncrease(): number;
257
+ set maxHealthIncrease(maxHealthIncrease: number);
258
+ get maxManaIncrease(): number;
259
+ set maxManaIncrease(maxManaIncrease: number);
241
260
  get turnsIntoGhost(): boolean;
242
261
  set turnsIntoGhost(turnsIntoGhost: boolean);
243
262
  get stuns(): boolean;
@@ -269,8 +288,16 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
269
288
  get manaRegenerationRateIncreaseFactor(): number;
270
289
  set manaRegenerationRateIncreaseFactor(manaRegenerationRateIncreaseFactor: number);
271
290
  get duration(): number;
291
+ set duration(duration: number);
272
292
  get remainingDuration(): number;
273
293
  set remainingDuration(remainingDuration: number);
294
+ get absorbedDamageFactor(): number;
295
+ set absorbedDamageFactor(absorbedDamageFactor: number);
296
+ get maximumDamageAbsorbed(): number;
297
+ set maximumDamageAbsorbed(maximumDamageAbsorbed: number);
298
+ get damageAbsorbed(): number;
299
+ get destroysOnMaximumDamageAbsorbed(): boolean;
300
+ set destroysOnMaximumDamageAbsorbed(destroysOnMaximumDamageAbsorbed: boolean);
274
301
  get abilityCooldownFactor(): number;
275
302
  set abilityCooldownFactor(abilityCooldownFactor: number);
276
303
  onAbilityGained(ability: Ability): void;
@@ -279,11 +306,20 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
279
306
  ...widgetOrXY: [] | [Widget] | [x: number, x: number],
280
307
  ...parametersOrDuration: [] | [EffectParameters] | [number]
281
308
  ]): void;
282
- flashSpecialEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
309
+ flashSpecialEffect(...parameters: [
310
+ ...widgetOrXY: [] | [Widget] | [x: number, x: number],
311
+ ...parametersOrDuration: [] | [EffectParameters] | [number]
312
+ ]): void;
313
+ private flash;
314
+ expire(): void;
315
+ /** Dispels this buff, invoking onDispel before removing it. */
316
+ dispel(source?: Unit): void;
283
317
  protected onCreate(): void;
284
318
  protected onDestroy(): Destructor;
285
319
  static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;
286
320
  static getByTypeId<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, unit: Unit, typeId: ApplicableBuffTypeId): T | undefined;
321
+ /** Called for dispelling, never for a direct destroy() or replacement. */
322
+ onDispel(source: Unit | undefined): void;
287
323
  onExpiration(): void;
288
324
  onDeath(source: Unit | undefined): void;
289
325
  onDamageDealt(target: Unit, event: DamageEvent): void;