warscript 0.0.1-dev.8895ff6 → 0.0.1-dev.89bc33b

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 (304) hide show
  1. package/core/dummy.lua +4 -2
  2. package/core/types/effect.d.ts +11 -1
  3. package/core/types/effect.lua +43 -77
  4. package/core/types/frame.d.ts +16 -2
  5. package/core/types/frame.lua +128 -67
  6. package/core/types/handle.lua +9 -9
  7. package/core/types/item.d.ts +1 -0
  8. package/core/types/item.lua +1 -0
  9. package/core/types/player.d.ts +2 -1
  10. package/core/types/player.lua +18 -13
  11. package/core/types/playerColor.lua +4 -3
  12. package/core/types/sound.d.ts +1 -1
  13. package/core/types/sound.lua +14 -9
  14. package/core/types/tileCell.d.ts +7 -2
  15. package/core/types/tileCell.lua +11 -0
  16. package/core/types/unit.d.ts +5 -0
  17. package/core/types/unit.lua +5 -0
  18. package/core/util.d.ts +3 -1
  19. package/core/util.lua +109 -3
  20. package/decl/native.d.ts +705 -7
  21. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  22. package/engine/ability-type-extended-tooltip.lua +44 -0
  23. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  24. package/engine/behaviour/ability/damage.d.ts +4 -0
  25. package/engine/behaviour/ability/damage.lua +19 -15
  26. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  27. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  28. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  29. package/engine/behaviour/ability.d.ts +11 -5
  30. package/engine/behaviour/ability.lua +54 -0
  31. package/engine/behaviour/unit.d.ts +1 -0
  32. package/engine/behaviour/unit.lua +1 -0
  33. package/engine/buff.d.ts +61 -27
  34. package/engine/buff.lua +304 -133
  35. package/engine/index.d.ts +2 -1
  36. package/engine/internal/ability.d.ts +7 -0
  37. package/engine/internal/ability.lua +65 -36
  38. package/engine/internal/item/fields.d.ts +12 -0
  39. package/engine/internal/item/fields.lua +33 -0
  40. package/engine/internal/item/owner-cache.d.ts +5 -0
  41. package/engine/internal/item/owner-cache.lua +4 -0
  42. package/engine/internal/item+owner.d.ts +2 -0
  43. package/engine/internal/item+owner.lua +27 -4
  44. package/engine/internal/item.d.ts +20 -5
  45. package/engine/internal/item.lua +146 -57
  46. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  47. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  48. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  49. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  50. package/engine/internal/object-data/health-bonus.lua +16 -0
  51. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  52. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  53. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  54. package/engine/internal/object-data/mana-bonus.lua +16 -0
  55. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  56. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  57. package/engine/internal/unit/appearance.d.ts +15 -0
  58. package/engine/internal/unit/appearance.lua +85 -0
  59. package/engine/internal/unit/bonus.d.ts +12 -0
  60. package/engine/internal/unit/bonus.lua +92 -8
  61. package/engine/internal/unit/buff.d.ts +2 -2
  62. package/engine/internal/unit/buff.lua +34 -19
  63. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  64. package/engine/internal/unit/equipment-inventory.lua +233 -0
  65. package/engine/internal/unit/expiration-timer.lua +1 -1
  66. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  67. package/engine/internal/unit/extended-inventory.lua +99 -0
  68. package/engine/internal/unit/ignore-events-items.lua +10 -1
  69. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  70. package/engine/internal/unit/inventory.lua +87 -0
  71. package/engine/internal/unit/item-container.d.ts +25 -0
  72. package/engine/internal/unit/item-container.lua +11 -0
  73. package/engine/internal/unit/item-order-events.d.ts +17 -0
  74. package/engine/internal/unit/item-order-events.lua +67 -0
  75. package/engine/internal/unit/item-slot.d.ts +27 -0
  76. package/engine/internal/unit/item-slot.lua +92 -0
  77. package/engine/internal/unit/order.d.ts +3 -3
  78. package/engine/internal/unit/order.lua +10 -10
  79. package/engine/internal/unit/range-event.d.ts +12 -0
  80. package/engine/internal/unit/range-event.lua +90 -0
  81. package/engine/internal/unit+ability.d.ts +2 -1
  82. package/engine/internal/unit+ability.lua +63 -2
  83. package/engine/internal/unit+bonus.lua +3 -3
  84. package/engine/internal/unit+damage.d.ts +9 -0
  85. package/engine/internal/unit+damage.lua +33 -0
  86. package/engine/internal/unit+rally.lua +9 -31
  87. package/engine/internal/unit-missile-data.lua +58 -32
  88. package/engine/internal/unit-missile-launch.lua +13 -13
  89. package/engine/internal/unit.d.ts +3 -11
  90. package/engine/internal/unit.lua +113 -152
  91. package/engine/local-client.d.ts +26 -0
  92. package/engine/local-client.lua +294 -54
  93. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  94. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  95. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  96. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  97. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  98. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  99. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  100. package/engine/object-data/auxiliary/item-class.lua +2 -0
  101. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  102. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  103. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  104. package/engine/object-data/auxiliary/order-type.lua +2 -0
  105. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  106. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  107. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  108. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  109. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  110. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  111. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  112. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  113. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  114. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  115. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  116. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  117. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  118. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  119. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  120. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  121. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  122. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  123. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  124. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  125. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  126. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  127. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  128. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  129. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  130. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  131. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  132. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  133. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  134. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  135. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  136. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  137. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  138. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  139. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  140. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  141. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  142. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  143. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  144. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  145. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  146. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  147. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  148. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  149. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  150. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  151. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  152. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  153. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  154. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  155. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  156. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  157. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  158. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  159. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  160. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  161. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  162. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  163. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  164. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  165. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  166. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  167. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  168. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  169. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  170. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  171. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  172. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  173. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  174. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  175. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  176. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  177. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  178. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  179. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  180. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  181. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  182. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  183. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  184. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  185. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  186. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  187. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  188. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  189. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  190. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  191. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  192. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  193. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  194. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  195. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  196. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  197. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  198. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  199. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  200. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  201. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  202. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  203. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  204. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  205. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  206. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  207. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  208. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  209. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  210. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  211. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  212. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  213. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  214. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  215. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  216. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  217. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  218. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  219. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  220. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  221. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  222. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  223. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  224. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  225. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  226. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  227. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  228. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  229. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  230. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  231. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  232. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  233. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  234. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  235. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  236. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  237. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  238. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  239. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  240. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  241. package/engine/object-data/entry/ability-type.d.ts +25 -6
  242. package/engine/object-data/entry/ability-type.lua +244 -8
  243. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  244. package/engine/object-data/entry/buff-type.d.ts +6 -2
  245. package/engine/object-data/entry/buff-type.lua +26 -0
  246. package/engine/object-data/entry/destructible-type.d.ts +6 -2
  247. package/engine/object-data/entry/destructible-type.lua +26 -0
  248. package/engine/object-data/entry/item-type.d.ts +18 -3
  249. package/engine/object-data/entry/item-type.lua +84 -0
  250. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  251. package/engine/object-data/entry/lightning-type.lua +1 -1
  252. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  253. package/engine/object-data/entry/unit-type.d.ts +47 -2
  254. package/engine/object-data/entry/unit-type.lua +383 -49
  255. package/engine/object-data/entry/upgrade.d.ts +2 -2
  256. package/engine/object-data/entry.d.ts +6 -1
  257. package/engine/object-data/entry.lua +8 -0
  258. package/engine/object-field/ability.lua +2 -2
  259. package/engine/object-field/item.d.ts +22 -0
  260. package/engine/object-field/item.lua +118 -0
  261. package/engine/object-field.d.ts +1 -1
  262. package/engine/object-field.lua +9 -7
  263. package/engine/random.d.ts +1 -0
  264. package/engine/random.lua +8 -0
  265. package/engine/standard/entries/ability-type.d.ts +3102 -7
  266. package/engine/standard/entries/ability-type.lua +0 -6
  267. package/engine/standard/entries/buff-type.d.ts +45 -0
  268. package/engine/standard/entries/buff-type.lua +43 -0
  269. package/engine/standard/entries/item-type.d.ts +1299 -0
  270. package/engine/standard/entries/item-type.lua +2 -0
  271. package/engine/standard/entries/lightning-type.d.ts +42 -15
  272. package/engine/standard/entries/lightning-type.lua +0 -14
  273. package/engine/standard/entries/unit-type.d.ts +5 -0
  274. package/engine/standard/entries/unit-type.lua +5 -0
  275. package/engine/standard/fields/item.d.ts +4 -0
  276. package/engine/standard/fields/item.lua +6 -0
  277. package/engine/unit.d.ts +6 -1
  278. package/engine/unit.lua +6 -1
  279. package/event.d.ts +1 -1
  280. package/lualib_bundle.lua +1 -1
  281. package/math.d.ts +2 -0
  282. package/math.lua +14 -0
  283. package/network.lua +25 -1
  284. package/objutil/buff.lua +1 -1
  285. package/objutil/object.lua +1 -1
  286. package/operation.d.ts +8 -1
  287. package/operation.lua +38 -18
  288. package/package.json +3 -23
  289. package/patch-lua.lua +15 -0
  290. package/utility/arrays.d.ts +7 -1
  291. package/utility/arrays.lua +17 -0
  292. package/utility/linked-map.d.ts +11 -2
  293. package/utility/linked-map.lua +41 -0
  294. package/utility/linked-set.d.ts +3 -1
  295. package/utility/linked-set.lua +23 -0
  296. package/utility/random.d.ts +102 -0
  297. package/utility/random.lua +273 -0
  298. package/utility/unordered-map.d.ts +27 -0
  299. package/utility/unordered-map.lua +99 -0
  300. package/engine/internal/unit/item.lua +0 -78
  301. /package/engine/internal/{object-data/armor-increase.d.ts → misc/unit-ability-level-natives.d.ts} +0 -0
  302. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  303. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  304. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -0,0 +1,8 @@
1
+ /** @noSelfInFile */
2
+ import { AbilityTypeId } from "./object-data/entry/ability-type";
3
+ /**
4
+ * The ability type's own extended tooltip for the level, unaffected by local display
5
+ * overrides (see {@link overrideAbilityTypeExtendedTooltipLocally}). Use it instead of
6
+ * `BlzGetAbilityExtendedTooltip` wherever the type's tooltip serves as a template.
7
+ */
8
+ export declare const getAbilityTypeExtendedTooltip: (abilityTypeId: AbilityTypeId, level: number) => string;
@@ -0,0 +1,44 @@
1
+ local ____exports = {}
2
+ local getAbilityExtendedTooltip = BlzGetAbilityExtendedTooltip
3
+ local setAbilityExtendedTooltip = BlzSetAbilityExtendedTooltip
4
+ local originalTooltipByLevelByAbilityTypeId = {}
5
+ local overriddenTooltipByLevelByAbilityTypeId = {}
6
+ --- The ability type's own extended tooltip for the level, unaffected by local display
7
+ -- overrides (see {@link overrideAbilityTypeExtendedTooltipLocally}). Use it instead of
8
+ -- `BlzGetAbilityExtendedTooltip` wherever the type's tooltip serves as a template.
9
+ ____exports.getAbilityTypeExtendedTooltip = function(abilityTypeId, level)
10
+ local ____opt_0 = originalTooltipByLevelByAbilityTypeId[abilityTypeId]
11
+ return ____opt_0 and ____opt_0[level] or getAbilityExtendedTooltip(abilityTypeId, level)
12
+ end
13
+ --- Replaces the displayed extended tooltip of every ability of the type for the local
14
+ -- player only; `undefined` restores the type's own tooltip. The value is async: never
15
+ -- feed it back into synchronous logic.
16
+ --
17
+ -- @internal For use by internal systems only.
18
+ ____exports.overrideAbilityTypeExtendedTooltipLocally = function(abilityTypeId, level, tooltip)
19
+ local overriddenTooltipByLevel = overriddenTooltipByLevelByAbilityTypeId[abilityTypeId]
20
+ if (overriddenTooltipByLevel and overriddenTooltipByLevel[level]) == tooltip then
21
+ return
22
+ end
23
+ local originalTooltipByLevel = originalTooltipByLevelByAbilityTypeId[abilityTypeId]
24
+ if originalTooltipByLevel == nil then
25
+ originalTooltipByLevel = {}
26
+ originalTooltipByLevelByAbilityTypeId[abilityTypeId] = originalTooltipByLevel
27
+ end
28
+ local originalTooltip = originalTooltipByLevel[level]
29
+ if originalTooltip == nil then
30
+ originalTooltip = getAbilityExtendedTooltip(abilityTypeId, level)
31
+ originalTooltipByLevel[level] = originalTooltip
32
+ end
33
+ if overriddenTooltipByLevel == nil then
34
+ overriddenTooltipByLevel = {}
35
+ overriddenTooltipByLevelByAbilityTypeId[abilityTypeId] = overriddenTooltipByLevel
36
+ end
37
+ if tooltip == nil then
38
+ overriddenTooltipByLevel[level] = nil
39
+ else
40
+ overriddenTooltipByLevel[level] = tooltip
41
+ end
42
+ setAbilityExtendedTooltip(abilityTypeId, tooltip or originalTooltip, level)
43
+ end
44
+ return ____exports
@@ -7,6 +7,8 @@ local __TS__New = ____lualib.__TS__New
7
7
  local ____exports = {}
8
8
  local ____ability = require("engine.behaviour.ability")
9
9
  local AbilityBehavior = ____ability.AbilityBehavior
10
+ local ____unit = require("engine.internal.unit")
11
+ local Unit = ____unit.Unit
10
12
  local ____ability = require("engine.object-field.ability")
11
13
  local AbilityField = ____ability.AbilityField
12
14
  local AbilityLevelField = ____ability.AbilityLevelField
@@ -56,4 +58,7 @@ end)
56
58
  AbilityLevelField.valueChangeEvent:addListener(function(ability)
57
59
  ____exports.ApplyUnitBehaviorAbilityBehavior:forAll(ability, "update")
58
60
  end)
61
+ Unit.abilityLevelChangedEvent:addListener(function(_, ability)
62
+ ____exports.ApplyUnitBehaviorAbilityBehavior:forAll(ability, "update")
63
+ end)
59
64
  return ____exports
@@ -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:startCooldown(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()
@@ -2,6 +2,7 @@
2
2
  import { Behavior } from "../behavior";
3
3
  import { Unit } from "../internal/unit";
4
4
  import "../internal/unit/ability";
5
+ import "../internal/unit+ability";
5
6
  import { Ability } from "../internal/ability";
6
7
  import { AbilityTypeId } from "../object-data/entry/ability-type";
7
8
  import { Widget } from "../../core/types/widget";
@@ -26,16 +27,21 @@ export declare abstract class AbilityBehavior<Parameters extends {
26
27
  get unit(): Unit | undefined;
27
28
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
28
29
  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: [
30
+ protected getDuration(widget: Widget): number;
31
+ flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
+ flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
33
+ flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
34
+ flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
35
+ flashSpecialEffect(...args: [
34
36
  ...pointOrWidget: [x: number, y: number] | [widget: Widget],
35
37
  ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]
36
38
  ]): void;
37
39
  private static MissileLaunchConfig;
38
40
  private get missileLaunchConfig();
41
+ protected launchMissile(source: Unit, ...args: [
42
+ ...pointOrWidget: [x: number, y: number] | [widget: Unit /** TODO: support Widget */],
43
+ ...parameters: NonNullable<Parameters["missileParameters"]>
44
+ ]): void;
39
45
  protected onCreate(): void;
40
46
  onValueChange(_value: ReadonlySubscribableAbilityDependentValue<string | number | boolean>): void;
41
47
  onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
@@ -9,7 +9,9 @@ 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")
14
+ require("engine.internal.unit+ability")
13
15
  local ____ability = require("engine.internal.ability")
14
16
  local Ability = ____ability.Ability
15
17
  local ____effect = require("core.types.effect")
@@ -18,6 +20,8 @@ local ____ability = require("engine.standard.fields.ability")
18
20
  local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
19
21
  local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
20
22
  local CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
23
+ local DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD
24
+ local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD
21
25
  local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
22
26
  local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
23
27
  local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
@@ -30,7 +34,14 @@ local ____ability = require("engine.object-field.ability")
30
34
  local AbilityField = ____ability.AbilityField
31
35
  local AbilityLevelField = ____ability.AbilityLevelField
32
36
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
37
+ local ____missile = require("core.types.missile")
38
+ local Missile = ____missile.Missile
33
39
  local createBehaviorFunctionsByAbilityTypeId = {}
40
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
41
+ if success then
42
+ abilityBehavior:onMissileArrival(...)
43
+ end
44
+ end
34
45
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
35
46
  local function createUnitEventListener(key)
36
47
  return function(unit, ability, ...)
@@ -106,6 +117,14 @@ end
106
117
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
107
118
  return resolveCurrentAbilityDependentValue(self.ability, value)
108
119
  end
120
+ function AbilityBehavior.prototype.getDuration(self, widget)
121
+ if __TS__InstanceOf(widget, Unit) then
122
+ if widget.isHero or widget:getField(UNIT_IF_LEVEL) >= 6 or widget:hasClassification(UnitClassification.RESISTANT) then
123
+ return self:resolveCurrentAbilityDependentValue(DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD)
124
+ end
125
+ end
126
+ return self:resolveCurrentAbilityDependentValue(DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD)
127
+ end
109
128
  function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
110
129
  local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
111
130
  Effect:flash(
@@ -160,6 +179,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
160
179
  )
161
180
  end
162
181
  end
182
+ function AbilityBehavior.prototype.launchMissile(self, source, xOrWidget, yOrParameter, ...)
183
+ if type(xOrWidget) ~= "number" then
184
+ Missile:launch(
185
+ self.missileLaunchConfig,
186
+ source,
187
+ xOrWidget,
188
+ invokeOnMissileArrival,
189
+ self,
190
+ yOrParameter,
191
+ ...
192
+ )
193
+ else
194
+ Missile:launch(
195
+ self.missileLaunchConfig,
196
+ source,
197
+ vec2(xOrWidget, yOrParameter),
198
+ invokeOnMissileArrival,
199
+ self,
200
+ ...
201
+ )
202
+ end
203
+ end
163
204
  function AbilityBehavior.prototype.onCreate(self)
164
205
  end
165
206
  function AbilityBehavior.prototype.onValueChange(self, _value)
@@ -288,6 +329,19 @@ end)
288
329
  AbilityLevelField.valueChangeEvent:addListener(function(ability, field)
289
330
  ____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
290
331
  end)
332
+ local function checkBehaviorOnLevelChange(behavior)
333
+ local subscribedValues = subscribedValuesByAbilityBehavior[behavior]
334
+ if subscribedValues ~= nil then
335
+ for value in pairs(subscribedValues) do
336
+ if __TS__InstanceOf(value, AbilityLevelField) then
337
+ behavior:onValueChange(value)
338
+ end
339
+ end
340
+ end
341
+ end
342
+ Unit.abilityLevelChangedEvent:addListener(function(_, ability)
343
+ ____exports.AbilityBehavior:forAll(ability, checkBehaviorOnLevelChange)
344
+ end)
291
345
  Ability.onCreate:addListener(function(ability)
292
346
  local createBehaviorFunctions = createBehaviorFunctionsByAbilityTypeId[ability.typeId]
293
347
  if createBehaviorFunctions ~= nil 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")
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,16 +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
- readonly fields?: [
35
- AbilityNumberField | AbilityNumberLevelField,
36
- NumberParameterValueType
37
- ][];
38
- /** Default `true`. */
39
- readonly isButtonVisible?: boolean;
40
- /** Default is the level of the source ability or 0 if it is absent. */
41
- readonly level?: number;
42
- }>;
40
+ abilityTypeIds?: Partial<Record<AbilityTypeId, BuffAbilityParameters>>;
43
41
  damageUponDeathAllowedTargetCombatClassifications?: CombatClassifications | AbilityCombatClassificationsLevelField;
44
42
  damageUponDeath?: NumberParameterValueType;
45
43
  damageUponDeathRange?: NumberParameterValueType;
@@ -56,7 +54,8 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
56
54
  damageIncrease?: NumberParameterValueType;
57
55
  damageIncreaseFactor?: NumberParameterValueType;
58
56
  armorIncrease?: NumberParameterValueType;
59
- armorIncreaseFactor?: NumberParameterValueType;
57
+ maxHealthIncrease?: NumberParameterValueType;
58
+ maxManaIncrease?: NumberParameterValueType;
60
59
  attackSpeedIncreaseFactor?: NumberParameterValueType;
61
60
  movementSpeedIncreaseFactor?: NumberParameterValueType;
62
61
  manaRegenerationRateIncreaseFactor?: NumberParameterValueType;
@@ -79,6 +78,9 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
79
78
  maximumAutoAttackCount?: IntegerParameterValueType;
80
79
  maximumDamageDealtEventCount?: IntegerParameterValueType;
81
80
  maximumDamageReceivedEventCount?: IntegerParameterValueType;
81
+ absorbedDamageFactor?: NumberParameterValueType;
82
+ maximumDamageAbsorbed?: NumberParameterValueType;
83
+ destroysOnMaximumDamageAbsorbed?: BooleanParameterValueType;
82
84
  damageOnExpiration?: NumberParameterValueType;
83
85
  healingOnExpiration?: NumberParameterValueType;
84
86
  killsOnExpiration?: BooleanParameterValueType;
@@ -122,22 +124,26 @@ declare const enum BuffPropertyKey {
122
124
  MAXIMUM_DAMAGE_DEALT_EVENT_COUNT = 132,
123
125
  DAMAGE_RECEIVED_EVENT_COUNT = 133,
124
126
  MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT = 134,
125
- TURNS_INTO_GHOST = 135,
126
- STUNS = 136,
127
- IGNORES_STUN_IMMUNITY = 137,
128
- DISABLES_AUTO_ATTACK = 138,
129
- PROVIDES_INVULNERABILITY = 139,
130
- KILLS_ON_EXPIRATION = 140,
131
- EXPLODES_ON_EXPIRATION = 141,
132
- MISS_PROBABILITY = 142,
133
- ABILITY_COOLDOWN_FACTOR = 143,
134
- 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
135
141
  }
136
142
  export declare const enum BuffTypeIdSelectionPolicy {
137
143
  LEAST_DURATION = 0
138
144
  }
139
145
  export type BuffAdditionalParameters = Prohibit<Record<string, any>, keyof BuffParameters>;
140
- export type BuffConstructorParameters<AdditionalParameters extends BuffAdditionalParameters> = [
146
+ export type BuffConstructorParameters<T extends Buff<BuffAdditionalParameters>> = T extends Buff<infer AdditionalParameters> ? [
141
147
  ...typeId: [ApplicableBuffTypeId] | [
142
148
  typeIds: ReadonlyNonEmptyArray<ApplicableBuffTypeId>,
143
149
  typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
@@ -147,8 +153,10 @@ export type BuffConstructorParameters<AdditionalParameters extends BuffAdditiona
147
153
  ...abilityOrParameters: [
148
154
  ability?: Ability | AbilityBehavior,
149
155
  parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
150
- ] | [parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>]
151
- ];
156
+ ] | [
157
+ parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
158
+ ]
159
+ ] : never;
152
160
  export declare class Buff<AdditionalParameters extends Prohibit<Record<string, any>, keyof BuffParameters> = object> extends UnitBehavior {
153
161
  private _unit;
154
162
  protected readonly __additionalParametersBrand?: AdditionalParameters;
@@ -187,6 +195,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
187
195
  private [BuffPropertyKey.DAMAGE_DEALT_EVENT_COUNT]?;
188
196
  private [BuffPropertyKey.MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT]?;
189
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]?;
190
202
  private [BuffPropertyKey.TURNS_INTO_GHOST]?;
191
203
  private [BuffPropertyKey.STUNS]?;
192
204
  private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
@@ -201,10 +213,11 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
201
213
  readonly typeId: ApplicableBuffTypeId;
202
214
  readonly polarity: BuffPolarity;
203
215
  readonly resistanceType: BuffResistanceType;
204
- 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 : {
205
217
  [K in keyof Omit<AdditionalParameters, keyof BuffParameters>]: AdditionalParameters[K] extends AbilityDependentValue<infer T> ? T : AdditionalParameters[K];
206
218
  };
207
219
  private readonly handle;
220
+ readonly previousBuff?: Buff;
208
221
  private _timer?;
209
222
  private readonly _level?;
210
223
  private readonly _spellStealPriority?;
@@ -212,7 +225,7 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
212
225
  private readonly [BuffPropertyKey.MISS_PROBABILITY]?;
213
226
  private readonly _abilityTypeIds?;
214
227
  private _behaviors?;
215
- constructor(target: Unit, ...parameters: BuffConstructorParameters<AdditionalParameters>);
228
+ constructor(target: Unit, ...parameters: BuffConstructorParameters<Buff<AdditionalParameters>>);
216
229
  get level(): number;
217
230
  get remainingDamageOverDuration(): number;
218
231
  set remainingDamageOverDuration(remainingDamageOverDuration: number);
@@ -240,6 +253,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
240
253
  set receivedDamageFactor(receivedDamageFactor: number);
241
254
  get armorIncrease(): number;
242
255
  set armorIncrease(armorIncrease: number);
256
+ get maxHealthIncrease(): number;
257
+ set maxHealthIncrease(maxHealthIncrease: number);
258
+ get maxManaIncrease(): number;
259
+ set maxManaIncrease(maxManaIncrease: number);
243
260
  get turnsIntoGhost(): boolean;
244
261
  set turnsIntoGhost(turnsIntoGhost: boolean);
245
262
  get stuns(): boolean;
@@ -271,8 +288,16 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
271
288
  get manaRegenerationRateIncreaseFactor(): number;
272
289
  set manaRegenerationRateIncreaseFactor(manaRegenerationRateIncreaseFactor: number);
273
290
  get duration(): number;
291
+ set duration(duration: number);
274
292
  get remainingDuration(): number;
275
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);
276
301
  get abilityCooldownFactor(): number;
277
302
  set abilityCooldownFactor(abilityCooldownFactor: number);
278
303
  onAbilityGained(ability: Ability): void;
@@ -281,11 +306,20 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
281
306
  ...widgetOrXY: [] | [Widget] | [x: number, x: number],
282
307
  ...parametersOrDuration: [] | [EffectParameters] | [number]
283
308
  ]): void;
284
- 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;
285
317
  protected onCreate(): void;
286
318
  protected onDestroy(): Destructor;
287
319
  static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;
288
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;
289
323
  onExpiration(): void;
290
324
  onDeath(source: Unit | undefined): void;
291
325
  onDamageDealt(target: Unit, event: DamageEvent): void;