warscript 0.0.1-dev.20f0f7e → 0.0.1-dev.221cca4

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 (322) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/effect.d.ts +11 -1
  4. package/core/types/effect.lua +43 -77
  5. package/core/types/frame.d.ts +1 -0
  6. package/core/types/frame.lua +112 -37
  7. package/core/types/handle.lua +9 -9
  8. package/core/types/item.d.ts +1 -0
  9. package/core/types/item.lua +1 -0
  10. package/core/types/player.d.ts +18 -1
  11. package/core/types/player.lua +73 -25
  12. package/core/types/playerColor.lua +4 -3
  13. package/core/types/sound.d.ts +1 -1
  14. package/core/types/sound.lua +14 -9
  15. package/core/types/tileCell.d.ts +2 -1
  16. package/core/types/tileCell.lua +5 -0
  17. package/core/types/timer.d.ts +3 -2
  18. package/core/types/timer.lua +8 -2
  19. package/core/types/unit.d.ts +5 -0
  20. package/core/types/unit.lua +5 -0
  21. package/core/util.d.ts +3 -1
  22. package/core/util.lua +109 -3
  23. package/decl/native.d.ts +705 -7
  24. package/destroyable.d.ts +1 -0
  25. package/destroyable.lua +9 -0
  26. package/engine/behavior.d.ts +10 -2
  27. package/engine/behavior.lua +157 -76
  28. package/engine/behaviour/ability/apply-buff.lua +4 -4
  29. package/engine/behaviour/ability/damage.d.ts +4 -0
  30. package/engine/behaviour/ability/damage.lua +19 -15
  31. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  32. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  33. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  34. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  35. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  36. package/engine/behaviour/ability.d.ts +12 -6
  37. package/engine/behaviour/ability.lua +42 -1
  38. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  39. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  40. package/engine/behaviour/unit.d.ts +10 -3
  41. package/engine/behaviour/unit.lua +107 -24
  42. package/engine/buff.d.ts +73 -24
  43. package/engine/buff.lua +418 -166
  44. package/engine/index.d.ts +2 -1
  45. package/engine/internal/ability.d.ts +4 -0
  46. package/engine/internal/ability.lua +52 -33
  47. package/engine/internal/item/fields.d.ts +12 -0
  48. package/engine/internal/item/fields.lua +33 -0
  49. package/engine/internal/item/owner-cache.d.ts +5 -0
  50. package/engine/internal/item/owner-cache.lua +4 -0
  51. package/engine/internal/item+owner.d.ts +2 -0
  52. package/engine/internal/item+owner.lua +27 -4
  53. package/engine/internal/item.d.ts +28 -13
  54. package/engine/internal/item.lua +163 -59
  55. package/engine/internal/mechanics/cast-ability.lua +6 -3
  56. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  57. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  58. package/engine/internal/object-data/health-bonus.lua +16 -0
  59. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  60. package/engine/internal/object-data/health-regeneration-rate-increase.lua +21 -0
  61. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  62. package/engine/internal/object-data/mana-bonus.lua +16 -0
  63. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  64. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  65. package/engine/internal/unit/ability.d.ts +14 -14
  66. package/engine/internal/unit/ability.lua +86 -47
  67. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  68. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  69. package/engine/internal/unit/appearance.d.ts +15 -0
  70. package/engine/internal/unit/appearance.lua +85 -0
  71. package/engine/internal/unit/attributes.d.ts +17 -0
  72. package/engine/internal/unit/attributes.lua +46 -0
  73. package/engine/internal/unit/bonus.d.ts +8 -0
  74. package/engine/internal/unit/bonus.lua +43 -3
  75. package/engine/internal/unit/buff.d.ts +2 -2
  76. package/engine/internal/unit/buff.lua +34 -19
  77. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  78. package/engine/internal/unit/equipment-inventory.lua +233 -0
  79. package/engine/internal/unit/expiration-timer.lua +1 -1
  80. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  81. package/engine/internal/unit/extended-inventory.lua +99 -0
  82. package/engine/internal/unit/fly-height.d.ts +7 -0
  83. package/engine/internal/unit/fly-height.lua +20 -0
  84. package/engine/internal/unit/ignore-events-items.lua +10 -1
  85. package/engine/internal/unit/interrupts.d.ts +12 -0
  86. package/engine/internal/unit/interrupts.lua +28 -0
  87. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  88. package/engine/internal/unit/inventory.lua +87 -0
  89. package/engine/internal/unit/item-container.d.ts +25 -0
  90. package/engine/internal/unit/item-container.lua +11 -0
  91. package/engine/internal/unit/item-order-events.d.ts +17 -0
  92. package/engine/internal/unit/item-order-events.lua +67 -0
  93. package/engine/internal/unit/item-slot.d.ts +27 -0
  94. package/engine/internal/unit/item-slot.lua +92 -0
  95. package/engine/internal/unit/main-selected.lua +12 -27
  96. package/engine/internal/unit/order.d.ts +3 -3
  97. package/engine/internal/unit/order.lua +10 -10
  98. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  99. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  100. package/engine/internal/unit/range-event.d.ts +12 -0
  101. package/engine/internal/unit/range-event.lua +90 -0
  102. package/engine/internal/unit/scale.d.ts +7 -0
  103. package/engine/internal/unit/scale.lua +20 -0
  104. package/engine/internal/unit+ability.lua +2 -2
  105. package/engine/internal/unit+bonus.lua +3 -3
  106. package/engine/internal/unit+damage.d.ts +9 -0
  107. package/engine/internal/unit+damage.lua +33 -0
  108. package/engine/internal/unit+rally.lua +9 -31
  109. package/engine/internal/unit-missile-data.lua +58 -32
  110. package/engine/internal/unit-missile-launch.lua +64 -33
  111. package/engine/internal/unit.d.ts +16 -28
  112. package/engine/internal/unit.lua +178 -257
  113. package/engine/local-client.d.ts +28 -0
  114. package/engine/local-client.lua +324 -54
  115. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  116. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  117. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  118. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  119. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  120. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  121. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  122. package/engine/object-data/auxiliary/item-class.lua +2 -0
  123. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  124. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  125. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  126. package/engine/object-data/auxiliary/order-type.lua +2 -0
  127. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  128. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  129. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  130. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  131. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  132. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  133. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  134. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  135. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  136. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  137. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  138. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  139. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  140. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  141. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  142. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  143. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  144. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  145. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  146. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  147. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  148. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  149. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  150. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  151. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  152. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  153. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  154. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  155. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  156. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  157. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  158. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  159. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  160. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  161. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  162. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  163. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  164. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  165. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  166. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  167. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  168. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  169. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  170. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  171. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  172. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  173. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  174. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  175. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  176. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  177. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  178. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  179. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  180. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  181. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  182. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  183. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  184. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  185. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  186. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  187. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  188. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  189. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  190. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  191. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  192. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  193. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  194. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  195. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  196. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  197. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  198. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  199. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  200. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  201. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  202. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  203. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  204. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  205. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  206. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  207. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  208. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  209. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  210. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  211. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  212. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  213. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  214. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  215. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  216. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  217. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  218. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  219. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  220. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  221. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  222. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  223. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  224. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  225. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  226. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  227. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  228. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  229. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  230. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  231. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  232. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  233. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  234. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  235. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  236. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  237. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  238. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  239. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  240. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  241. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  242. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  243. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  244. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  245. package/engine/object-data/entry/ability-type.d.ts +12 -3
  246. package/engine/object-data/entry/ability-type.lua +141 -5
  247. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  248. package/engine/object-data/entry/buff-type.d.ts +6 -2
  249. package/engine/object-data/entry/buff-type.lua +26 -0
  250. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  251. package/engine/object-data/entry/destructible-type.lua +181 -0
  252. package/engine/object-data/entry/item-type.d.ts +18 -3
  253. package/engine/object-data/entry/item-type.lua +84 -0
  254. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  255. package/engine/object-data/entry/lightning-type.lua +1 -1
  256. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  257. package/engine/object-data/entry/unit-type.d.ts +51 -2
  258. package/engine/object-data/entry/unit-type.lua +415 -37
  259. package/engine/object-data/entry/upgrade.d.ts +2 -2
  260. package/engine/object-data/entry.d.ts +6 -1
  261. package/engine/object-data/entry.lua +8 -0
  262. package/engine/object-field/ability.lua +2 -2
  263. package/engine/object-field/item.d.ts +22 -0
  264. package/engine/object-field/item.lua +118 -0
  265. package/engine/object-field/unit.d.ts +20 -5
  266. package/engine/object-field/unit.lua +61 -0
  267. package/engine/object-field.d.ts +10 -2
  268. package/engine/object-field.lua +268 -123
  269. package/engine/random.d.ts +5 -0
  270. package/engine/random.lua +18 -0
  271. package/engine/standard/entries/ability-type.d.ts +3102 -7
  272. package/engine/standard/entries/ability-type.lua +0 -6
  273. package/engine/standard/entries/item-type.d.ts +1299 -0
  274. package/engine/standard/entries/item-type.lua +2 -0
  275. package/engine/standard/entries/lightning-type.d.ts +42 -15
  276. package/engine/standard/entries/lightning-type.lua +0 -14
  277. package/engine/standard/entries/unit-type.d.ts +5 -0
  278. package/engine/standard/entries/unit-type.lua +5 -0
  279. package/engine/standard/fields/ability.d.ts +2 -2
  280. package/engine/standard/fields/ability.lua +2 -2
  281. package/engine/standard/fields/item.d.ts +4 -0
  282. package/engine/standard/fields/item.lua +6 -0
  283. package/engine/standard/fields/unit.d.ts +11 -3
  284. package/engine/standard/fields/unit.lua +15 -2
  285. package/engine/synchronization.d.ts +11 -0
  286. package/engine/synchronization.lua +77 -0
  287. package/engine/text-tag.lua +3 -2
  288. package/engine/unit.d.ts +10 -1
  289. package/engine/unit.lua +10 -1
  290. package/event.d.ts +1 -1
  291. package/lualib_bundle.lua +1 -1
  292. package/math.d.ts +2 -0
  293. package/math.lua +14 -0
  294. package/net/socket.lua +1 -1
  295. package/network.lua +25 -1
  296. package/objutil/buff.lua +11 -9
  297. package/objutil/object.lua +1 -1
  298. package/operation.d.ts +8 -1
  299. package/operation.lua +38 -18
  300. package/package.json +3 -23
  301. package/patch-lua.lua +15 -0
  302. package/utility/arrays.d.ts +1 -0
  303. package/utility/arrays.lua +8 -0
  304. package/utility/callback-array.d.ts +5 -1
  305. package/utility/callback-array.lua +16 -1
  306. package/utility/linked-map.d.ts +35 -0
  307. package/utility/linked-map.lua +107 -0
  308. package/utility/linked-set.d.ts +4 -1
  309. package/utility/linked-set.lua +46 -1
  310. package/utility/lua-maps.d.ts +11 -2
  311. package/utility/lua-maps.lua +33 -2
  312. package/utility/random.d.ts +102 -0
  313. package/utility/random.lua +273 -0
  314. package/utility/records.lua +20 -1
  315. package/utility/types.d.ts +3 -0
  316. package/utility/unordered-map.d.ts +27 -0
  317. package/utility/unordered-map.lua +99 -0
  318. package/engine/internal/unit/item.lua +0 -78
  319. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  320. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  321. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  322. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -7,8 +7,10 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
7
7
  local ____exports = {}
8
8
  local ____behavior = require("engine.behavior")
9
9
  local Behavior = ____behavior.Behavior
10
- local ____unit = require("engine.unit")
10
+ local ____unit = require("engine.internal.unit")
11
11
  local Unit = ____unit.Unit
12
+ local UnitClassification = ____unit.UnitClassification
13
+ require("engine.internal.unit.ability")
12
14
  local ____ability = require("engine.internal.ability")
13
15
  local Ability = ____ability.Ability
14
16
  local ____effect = require("core.types.effect")
@@ -17,6 +19,8 @@ local ____ability = require("engine.standard.fields.ability")
17
19
  local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
18
20
  local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
19
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
20
24
  local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
21
25
  local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
22
26
  local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
@@ -29,7 +33,14 @@ local ____ability = require("engine.object-field.ability")
29
33
  local AbilityField = ____ability.AbilityField
30
34
  local AbilityLevelField = ____ability.AbilityLevelField
31
35
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
36
+ local ____missile = require("core.types.missile")
37
+ local Missile = ____missile.Missile
32
38
  local createBehaviorFunctionsByAbilityTypeId = {}
39
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
40
+ if success then
41
+ abilityBehavior:onMissileArrival(...)
42
+ end
43
+ end
33
44
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
34
45
  local function createUnitEventListener(key)
35
46
  return function(unit, ability, ...)
@@ -105,6 +116,14 @@ end
105
116
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
106
117
  return resolveCurrentAbilityDependentValue(self.ability, value)
107
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
108
127
  function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
109
128
  local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
110
129
  Effect:flash(
@@ -159,6 +178,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
159
178
  )
160
179
  end
161
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
162
203
  function AbilityBehavior.prototype.onCreate(self)
163
204
  end
164
205
  function AbilityBehavior.prototype.onValueChange(self, _value)
@@ -4,17 +4,21 @@ import { Unit } from "../../unit";
4
4
  import { BuffTypeId } from "../../object-data/entry/buff-type";
5
5
  import { TextTagPreset } from "../../text-tag";
6
6
  import { Destructor } from "../../../destroyable";
7
- export type StunImmunityUnitBehaviourParameters = {
8
- buffTypeIds?: LuaSet<BuffTypeId>;
7
+ import { BehaviorPriority } from "../../behavior";
8
+ export type StunImmunityUnitBehaviorParameters = {
9
+ readonly priority?: BehaviorPriority;
10
+ buffTypeIds?: readonly BuffTypeId[];
9
11
  textTagPreset?: TextTagPreset;
10
12
  textTagText?: string;
13
+ additionalAction?: (this: void, unit: Unit) => void;
11
14
  };
12
15
  export declare class StunImmunityUnitBehavior extends UnitBehavior {
13
- readonly parameters: Readonly<StunImmunityUnitBehaviourParameters>;
14
- static defaultParameters: StunImmunityUnitBehaviourParameters;
15
- constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviourParameters>);
16
+ readonly parameters: Readonly<StunImmunityUnitBehaviorParameters>;
17
+ static defaultParameters: StunImmunityUnitBehaviorParameters;
18
+ constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviorParameters>);
16
19
  protected onDestroy(): Destructor;
17
20
  onDamageReceived(): void;
18
21
  onTargetingAbilityChannelingStart(): void;
19
22
  onTargetingAbilityImpact(): void;
23
+ protected onEffect(): void;
20
24
  }
@@ -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,15 +42,22 @@ 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
- if hasRemovedBuffs and behavior.parameters.textTagText ~= nil then
52
- TextTag:flash(TextTag.MISS, behavior.parameters.textTagText, behavior.unit.x, behavior.unit.y)
52
+ if hasRemovedBuffs then
53
+ behavior.onEffect(behavior)
54
+ if behavior.parameters.textTagText ~= nil then
55
+ TextTag:flash(TextTag.MISS, behavior.parameters.textTagText, behavior.unit.x, behavior.unit.y)
56
+ end
57
+ local ____opt_0 = behavior.parameters.additionalAction
58
+ if ____opt_0 ~= nil then
59
+ ____opt_0(behavior.unit)
60
+ end
53
61
  end
54
62
  end
55
63
  ____exports.StunImmunityUnitBehavior = __TS__Class()
@@ -60,7 +68,7 @@ function StunImmunityUnitBehavior.prototype.____constructor(self, unit, paramete
60
68
  if parameters == nil then
61
69
  parameters = ____exports.StunImmunityUnitBehavior.defaultParameters
62
70
  end
63
- UnitBehavior.prototype.____constructor(self, unit)
71
+ UnitBehavior.prototype.____constructor(self, unit, parameters.priority)
64
72
  self.parameters = parameters
65
73
  unit:decrementStunCounter()
66
74
  process(self)
@@ -79,5 +87,7 @@ end
79
87
  function StunImmunityUnitBehavior.prototype.onTargetingAbilityImpact(self)
80
88
  process(self)
81
89
  end
90
+ function StunImmunityUnitBehavior.prototype.onEffect(self)
91
+ end
82
92
  StunImmunityUnitBehavior.defaultParameters = {buffTypeIds = DEFAULT_BUFF_TYPE_IDS, textTagPreset = TextTag.MISS, textTagText = nil}
83
93
  return ____exports
@@ -1,26 +1,30 @@
1
1
  /** @noSelfInFile */
2
- import { Behavior } from "../behavior";
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
- import type { AbilityBehavior } from "./ability";
9
+ import { AbilityBehavior } from "./ability";
9
10
  import { Event } from "../../event";
10
11
  import { Destructor } from "../../destroyable";
11
12
  import type { Widget } from "../../core/types/widget";
12
13
  import { Destructable } from "../../core/types/destructable";
13
14
  import type { Buff } from "../buff";
14
15
  import { UnitBonusType } from "../internal/unit/bonus";
16
+ import { Player } from "../../core/types/player";
17
+ import { UnitTypeId } from "../object-data/entry/unit-type";
15
18
  export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
16
19
  export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
17
20
  readonly sourceAbilityBehavior?: AbilityBehavior;
18
21
  private _bonusIdByBonusType?;
19
- constructor(unit: Unit);
22
+ constructor(unit: Unit, priority?: BehaviorPriority);
20
23
  protected onDestroy(): Destructor;
21
24
  get unit(): Unit;
22
25
  protected getUnitBonus(bonusType: UnitBonusType): number;
23
26
  protected addOrUpdateOrRemoveUnitBonus(bonusType: UnitBonusType, value: number): void;
27
+ protected registerOwningPlayerEvent<T extends string, Args extends any[]>(this: UnitBehavior<PeriodicActionParameters> & Record<T, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, extractPlayer: (...args: Args) => Player | undefined, listener: T): void;
24
28
  protected registerInRangeUnitEvent<T extends string, Args extends any[]>(this: UnitBehavior<PeriodicActionParameters> & Record<T, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, extractUnit: (...args: Args) => Unit | undefined, range: number, listener: T): void;
25
29
  onImmediateOrder(orderId: number): void;
26
30
  onTargetOrder(orderId: number, target: Widget): void;
@@ -48,6 +52,7 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
48
52
  onTargetingAbilityChannelingStart(ability: Ability, source: Unit): void;
49
53
  onTargetingAbilityImpact(ability: Ability, source: Unit): void;
50
54
  onBuffGained(buff: Buff): void;
55
+ onBuffLost(buff: Buff): void;
51
56
  onItemDropped(item: Item): void;
52
57
  onItemPickedUp(item: Item): void;
53
58
  onItemUsed(item: Item): void;
@@ -55,4 +60,6 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
55
60
  onItemChargesChanged(item: Item): void;
56
61
  onKill(target: Unit): void;
57
62
  onDeath(source: Unit | undefined): void;
63
+ onOwnerChange(previousOwner: Player): void;
64
+ static bindUnitType<Args extends any[]>(this: UnitBehaviorConstructor<Args>, unitTypeId: UnitTypeId, ...args: Args): void;
58
65
  }
@@ -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,36 +22,56 @@ 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
- local behaviorsByEvent = {}
26
- local rangeByBehaviorByEvent = {}
27
- local listenerByBehaviorByEvent = {}
28
- local eventsByBehavior = {}
28
+ local createBehaviorFunctionsByUnitTypeId = {}
29
+ local behaviorsByOwningPlayerEvent = {}
30
+ local listenerByBehaviorByOwningPlayerEvent = {}
31
+ local owningPlayerEventsByBehavior = {}
32
+ local behaviorsByInRangeUnitEvent = {}
33
+ local rangeByBehaviorByInRangeUnitEvent = {}
34
+ local listenerByBehaviorByInRangeUnitEvent = {}
35
+ local inRangeUnitEventsByBehavior = {}
29
36
  ____exports.UnitBehavior = __TS__Class()
30
37
  local UnitBehavior = ____exports.UnitBehavior
31
38
  UnitBehavior.name = "UnitBehavior"
32
39
  __TS__ClassExtends(UnitBehavior, Behavior)
33
- function UnitBehavior.prototype.____constructor(self, unit)
34
- Behavior.prototype.____constructor(self, unit)
40
+ function UnitBehavior.prototype.____constructor(self, unit, priority)
41
+ Behavior.prototype.____constructor(self, unit, priority)
35
42
  end
36
43
  function UnitBehavior.prototype.onDestroy(self)
37
- local events = eventsByBehavior[self]
38
- if events ~= nil then
39
- for event in pairs(events) do
40
- local ____opt_0 = behaviorsByEvent[event]
44
+ local owningPlayerEvents = owningPlayerEventsByBehavior[self]
45
+ if owningPlayerEvents ~= nil then
46
+ for event in pairs(owningPlayerEvents) do
47
+ local ____opt_0 = behaviorsByOwningPlayerEvent[event]
41
48
  if ____opt_0 ~= nil then
42
49
  ____opt_0:remove(self)
43
50
  end
44
- local ____opt_2 = rangeByBehaviorByEvent[event]
51
+ local ____opt_2 = listenerByBehaviorByOwningPlayerEvent[event]
45
52
  if ____opt_2 ~= nil then
46
53
  ____opt_2[self] = nil
47
54
  end
48
- local ____opt_4 = listenerByBehaviorByEvent[event]
55
+ end
56
+ owningPlayerEventsByBehavior[self] = nil
57
+ end
58
+ local inRangeUnitEvents = inRangeUnitEventsByBehavior[self]
59
+ if inRangeUnitEvents ~= nil then
60
+ for event in pairs(inRangeUnitEvents) do
61
+ local ____opt_4 = behaviorsByInRangeUnitEvent[event]
49
62
  if ____opt_4 ~= nil then
50
- ____opt_4[self] = nil
63
+ ____opt_4:remove(self)
64
+ end
65
+ local ____opt_6 = rangeByBehaviorByInRangeUnitEvent[event]
66
+ if ____opt_6 ~= nil then
67
+ ____opt_6[self] = nil
68
+ end
69
+ local ____opt_8 = listenerByBehaviorByInRangeUnitEvent[event]
70
+ if ____opt_8 ~= nil then
71
+ ____opt_8[self] = nil
51
72
  end
52
73
  end
53
- eventsByBehavior[self] = nil
74
+ inRangeUnitEventsByBehavior[self] = nil
54
75
  end
55
76
  if self._bonusIdByBonusType ~= nil then
56
77
  for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
@@ -60,28 +81,60 @@ function UnitBehavior.prototype.onDestroy(self)
60
81
  return Behavior.prototype.onDestroy(self)
61
82
  end
62
83
  function UnitBehavior.prototype.getUnitBonus(self, bonusType)
63
- local ____opt_6 = self._bonusIdByBonusType
64
- local bonusId = ____opt_6 and ____opt_6[bonusType]
84
+ local ____opt_10 = self._bonusIdByBonusType
85
+ local bonusId = ____opt_10 and ____opt_10:get(bonusType)
65
86
  return bonusId == nil and 0 or getUnitBonus(self.object, bonusType, bonusId)
66
87
  end
67
88
  function UnitBehavior.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
68
89
  local bonusIdByBonusType = self._bonusIdByBonusType
69
90
  if bonusIdByBonusType == nil then
70
- bonusIdByBonusType = {}
91
+ bonusIdByBonusType = __TS__New(LinkedMap)
71
92
  self._bonusIdByBonusType = bonusIdByBonusType
72
93
  end
73
- 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
+ )
103
+ end
104
+ function UnitBehavior.prototype.registerOwningPlayerEvent(self, event, extractPlayer, listener)
105
+ local listenerByBehavior = getOrPut(listenerByBehaviorByOwningPlayerEvent, event, mutableLuaMap)
106
+ listenerByBehavior[self] = listener
107
+ getOrPut(inRangeUnitEventsByBehavior, self, mutableLuaSet)[event] = true
108
+ local behaviors = behaviorsByOwningPlayerEvent[event]
109
+ if behaviors == nil then
110
+ event:addListener(function(...)
111
+ local behaviors = behaviorsByOwningPlayerEvent[event]
112
+ if behaviors ~= nil then
113
+ local player = extractPlayer(...)
114
+ if player ~= nil then
115
+ for behavior in pairs(behaviors) do
116
+ if behavior.unit.owner == player then
117
+ safeCall(behavior[listenerByBehavior[behavior]], behavior, ...)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end)
123
+ behaviors = __TS__New(LinkedSet)
124
+ behaviorsByOwningPlayerEvent[event] = behaviors
125
+ end
126
+ behaviors:add(self)
74
127
  end
75
128
  function UnitBehavior.prototype.registerInRangeUnitEvent(self, event, extractUnit, range, listener)
76
- local rangeByBehavior = getOrPut(rangeByBehaviorByEvent, event, mutableLuaMap)
129
+ local rangeByBehavior = getOrPut(rangeByBehaviorByInRangeUnitEvent, event, mutableLuaMap)
77
130
  rangeByBehavior[self] = range
78
- local listenerByBehavior = getOrPut(listenerByBehaviorByEvent, event, mutableLuaMap)
131
+ local listenerByBehavior = getOrPut(listenerByBehaviorByInRangeUnitEvent, event, mutableLuaMap)
79
132
  listenerByBehavior[self] = listener
80
- getOrPut(eventsByBehavior, self, mutableLuaSet)[event] = true
81
- local behaviors = behaviorsByEvent[event]
133
+ getOrPut(inRangeUnitEventsByBehavior, self, mutableLuaSet)[event] = true
134
+ local behaviors = behaviorsByInRangeUnitEvent[event]
82
135
  if behaviors == nil then
83
136
  event:addListener(function(...)
84
- local behaviors = behaviorsByEvent[event]
137
+ local behaviors = behaviorsByInRangeUnitEvent[event]
85
138
  if behaviors ~= nil then
86
139
  local unit = extractUnit(...)
87
140
  if unit ~= nil then
@@ -95,7 +148,7 @@ function UnitBehavior.prototype.registerInRangeUnitEvent(self, event, extractUni
95
148
  end
96
149
  end)
97
150
  behaviors = __TS__New(LinkedSet)
98
- behaviorsByEvent[event] = behaviors
151
+ behaviorsByInRangeUnitEvent[event] = behaviors
99
152
  end
100
153
  behaviors:add(self)
101
154
  end
@@ -151,6 +204,8 @@ function UnitBehavior.prototype.onTargetingAbilityImpact(self, ability, source)
151
204
  end
152
205
  function UnitBehavior.prototype.onBuffGained(self, buff)
153
206
  end
207
+ function UnitBehavior.prototype.onBuffLost(self, buff)
208
+ end
154
209
  function UnitBehavior.prototype.onItemDropped(self, item)
155
210
  end
156
211
  function UnitBehavior.prototype.onItemPickedUp(self, item)
@@ -165,6 +220,23 @@ function UnitBehavior.prototype.onKill(self, target)
165
220
  end
166
221
  function UnitBehavior.prototype.onDeath(self, source)
167
222
  end
223
+ function UnitBehavior.prototype.onOwnerChange(self, previousOwner)
224
+ end
225
+ function UnitBehavior.bindUnitType(self, unitTypeId, ...)
226
+ local args = {...}
227
+ local createBehaviorFunctions = createBehaviorFunctionsByUnitTypeId[unitTypeId]
228
+ if createBehaviorFunctions == nil then
229
+ createBehaviorFunctions = {}
230
+ createBehaviorFunctionsByUnitTypeId[unitTypeId] = createBehaviorFunctions
231
+ end
232
+ createBehaviorFunctions[#createBehaviorFunctions + 1] = function(unit)
233
+ return __TS__New(
234
+ self,
235
+ unit,
236
+ table.unpack(args)
237
+ )
238
+ end
239
+ end
168
240
  __TS__SetDescriptor(
169
241
  UnitBehavior.prototype,
170
242
  "unit",
@@ -276,7 +348,18 @@ __TS__SetDescriptor(
276
348
  Unit.itemChargesChangedEvent:addListener(function(unit, item)
277
349
  ____exports.UnitBehavior:forAll(unit, "onItemChargesChanged", item)
278
350
  end)
351
+ Unit.onOwnerChange:addListener(function(unit, previousOwner)
352
+ ____exports.UnitBehavior:forAll(unit, "onOwnerChange", previousOwner)
353
+ end)
279
354
  end)(UnitBehavior)
355
+ Unit.onCreate:addListener(function(unit)
356
+ local createBehaviorFunctions = createBehaviorFunctionsByUnitTypeId[unit.typeId]
357
+ if createBehaviorFunctions ~= nil then
358
+ for ____, createBehavior in ipairs(createBehaviorFunctions) do
359
+ createBehavior(unit)
360
+ end
361
+ end
362
+ end)
280
363
  Unit.destroyEvent:addListener(function(unit)
281
364
  ____exports.UnitBehavior:forAll(unit, "destroy")
282
365
  end)
package/engine/buff.d.ts CHANGED
@@ -13,6 +13,7 @@ import { UnitBehavior } from "./behaviour/unit";
13
13
  import type { Widget } from "../core/types/widget";
14
14
  import { Destructor } from "../destroyable";
15
15
  import { Event } from "../event";
16
+ import { AbilityBehavior } from "./behaviour/ability";
16
17
  export type BuffConstructor<T extends Buff<any> = Buff<any>, Args extends any[] = any> = OmitConstructor<typeof Buff<any>> & (new (...args: Args) => T);
17
18
  type EnumParameterValueType<T extends number> = T | AbilityEnumLevelField<T>;
18
19
  type NumberParameterValueType = number | AbilityNumberField | AbilityNumberLevelField;
@@ -22,6 +23,13 @@ export type BuffPolarityParameterType = EnumParameterValueType<BuffPolarity>;
22
23
  export type BuffResistanceTypeParameterType = EnumParameterValueType<BuffResistanceType>;
23
24
  export declare class BuffUniqueGroup {
24
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
+ };
25
33
  export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
26
34
  spellStealPriority?: number;
27
35
  level?: number;
@@ -29,14 +37,7 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
29
37
  learnLevelMinimum?: number;
30
38
  source?: Unit;
31
39
  behaviorConstructors?: (new (unit: Unit) => UnitBehavior)[];
32
- abilityTypeIds?: Record<AbilityTypeId, {
33
- [numberField: (AbilityNumberField | AbilityNumberLevelField) & symbol]: NumberParameterValueType;
34
- } & {
35
- /** Default `true`. */
36
- readonly isButtonVisible?: boolean;
37
- /** Default is the level of the source ability or 0 if it is absent. */
38
- readonly level?: number;
39
- }>;
40
+ abilityTypeIds?: Partial<Record<AbilityTypeId, BuffAbilityParameters>>;
40
41
  damageUponDeathAllowedTargetCombatClassifications?: CombatClassifications | AbilityCombatClassificationsLevelField;
41
42
  damageUponDeath?: NumberParameterValueType;
42
43
  damageUponDeathRange?: NumberParameterValueType;
@@ -53,9 +54,11 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
53
54
  damageIncrease?: NumberParameterValueType;
54
55
  damageIncreaseFactor?: NumberParameterValueType;
55
56
  armorIncrease?: NumberParameterValueType;
56
- armorIncreaseFactor?: NumberParameterValueType;
57
+ maxHealthIncrease?: NumberParameterValueType;
58
+ maxManaIncrease?: NumberParameterValueType;
57
59
  attackSpeedIncreaseFactor?: NumberParameterValueType;
58
60
  movementSpeedIncreaseFactor?: NumberParameterValueType;
61
+ manaRegenerationRateIncreaseFactor?: NumberParameterValueType;
59
62
  evasionProbability?: NumberParameterValueType;
60
63
  missProbability?: NumberParameterValueType;
61
64
  damageFactor?: NumberParameterValueType;
@@ -75,10 +78,14 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
75
78
  maximumAutoAttackCount?: IntegerParameterValueType;
76
79
  maximumDamageDealtEventCount?: IntegerParameterValueType;
77
80
  maximumDamageReceivedEventCount?: IntegerParameterValueType;
81
+ absorbedDamageFactor?: NumberParameterValueType;
82
+ maximumDamageAbsorbed?: NumberParameterValueType;
83
+ destroysOnMaximumDamageAbsorbed?: BooleanParameterValueType;
78
84
  damageOnExpiration?: NumberParameterValueType;
79
85
  healingOnExpiration?: NumberParameterValueType;
80
86
  killsOnExpiration?: BooleanParameterValueType;
81
87
  explodesOnExpiration?: BooleanParameterValueType;
88
+ abilityCooldownFactor?: NumberParameterValueType;
82
89
  uniqueGroup?: BuffUniqueGroup;
83
90
  } : BuffParameters & (T extends Buff<infer AdditionalParameters> ? AdditionalParameters : object);
84
91
  declare const enum BuffPropertyKey {
@@ -117,20 +124,26 @@ declare const enum BuffPropertyKey {
117
124
  MAXIMUM_DAMAGE_DEALT_EVENT_COUNT = 132,
118
125
  DAMAGE_RECEIVED_EVENT_COUNT = 133,
119
126
  MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT = 134,
120
- TURNS_INTO_GHOST = 135,
121
- STUNS = 136,
122
- IGNORES_STUN_IMMUNITY = 137,
123
- DISABLES_AUTO_ATTACK = 138,
124
- PROVIDES_INVULNERABILITY = 139,
125
- KILLS_ON_EXPIRATION = 140,
126
- EXPLODES_ON_EXPIRATION = 141,
127
- MISS_PROBABILITY = 142
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
128
141
  }
129
142
  export declare const enum BuffTypeIdSelectionPolicy {
130
143
  LEAST_DURATION = 0
131
144
  }
132
145
  export type BuffAdditionalParameters = Prohibit<Record<string, any>, keyof BuffParameters>;
133
- export type BuffConstructorParameters<AdditionalParameters extends BuffAdditionalParameters> = [
146
+ export type BuffConstructorParameters<T extends Buff<BuffAdditionalParameters>> = T extends Buff<infer AdditionalParameters> ? [
134
147
  ...typeId: [ApplicableBuffTypeId] | [
135
148
  typeIds: ReadonlyNonEmptyArray<ApplicableBuffTypeId>,
136
149
  typeIdSelectionPolicy: BuffTypeIdSelectionPolicy
@@ -138,10 +151,12 @@ export type BuffConstructorParameters<AdditionalParameters extends BuffAdditiona
138
151
  polarity: BuffPolarityParameterType,
139
152
  resistanceType: BuffResistanceTypeParameterType,
140
153
  ...abilityOrParameters: [
141
- ability?: Ability,
154
+ ability?: Ability | AbilityBehavior,
142
155
  parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
143
- ] | [parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>]
144
- ];
156
+ ] | [
157
+ parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
158
+ ]
159
+ ] : never;
145
160
  export declare class Buff<AdditionalParameters extends Prohibit<Record<string, any>, keyof BuffParameters> = object> extends UnitBehavior {
146
161
  private _unit;
147
162
  protected readonly __additionalParametersBrand?: AdditionalParameters;
@@ -180,6 +195,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
180
195
  private [BuffPropertyKey.DAMAGE_DEALT_EVENT_COUNT]?;
181
196
  private [BuffPropertyKey.MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT]?;
182
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]?;
183
202
  private [BuffPropertyKey.TURNS_INTO_GHOST]?;
184
203
  private [BuffPropertyKey.STUNS]?;
185
204
  private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
@@ -187,15 +206,18 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
187
206
  private [BuffPropertyKey.PROVIDES_INVULNERABILITY]?;
188
207
  private [BuffPropertyKey.KILLS_ON_EXPIRATION]?;
189
208
  private [BuffPropertyKey.EXPLODES_ON_EXPIRATION]?;
209
+ private [BuffPropertyKey.ABILITY_COOLDOWN_FACTOR]?;
210
+ private [BuffPropertyKey.ABILITY_COOLDOWN_MODIFIER]?;
190
211
  protected static readonly defaultParameters: BuffParameters;
191
212
  get source(): Unit;
192
213
  readonly typeId: ApplicableBuffTypeId;
193
214
  readonly polarity: BuffPolarity;
194
215
  readonly resistanceType: BuffResistanceType;
195
- 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 : {
196
217
  [K in keyof Omit<AdditionalParameters, keyof BuffParameters>]: AdditionalParameters[K] extends AbilityDependentValue<infer T> ? T : AdditionalParameters[K];
197
218
  };
198
219
  private readonly handle;
220
+ readonly previousBuff?: Buff;
199
221
  private _timer?;
200
222
  private readonly _level?;
201
223
  private readonly _spellStealPriority?;
@@ -203,7 +225,7 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
203
225
  private readonly [BuffPropertyKey.MISS_PROBABILITY]?;
204
226
  private readonly _abilityTypeIds?;
205
227
  private _behaviors?;
206
- constructor(target: Unit, ...parameters: BuffConstructorParameters<AdditionalParameters>);
228
+ constructor(target: Unit, ...parameters: BuffConstructorParameters<Buff<AdditionalParameters>>);
207
229
  get level(): number;
208
230
  get remainingDamageOverDuration(): number;
209
231
  set remainingDamageOverDuration(remainingDamageOverDuration: number);
@@ -231,6 +253,10 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
231
253
  set receivedDamageFactor(receivedDamageFactor: number);
232
254
  get armorIncrease(): number;
233
255
  set armorIncrease(armorIncrease: number);
256
+ get maxHealthIncrease(): number;
257
+ set maxHealthIncrease(maxHealthIncrease: number);
258
+ get maxManaIncrease(): number;
259
+ set maxManaIncrease(maxManaIncrease: number);
234
260
  get turnsIntoGhost(): boolean;
235
261
  set turnsIntoGhost(turnsIntoGhost: boolean);
236
262
  get stuns(): boolean;
@@ -259,18 +285,41 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
259
285
  set movementSpeedIncreaseFactor(movementSpeedIncreaseFactor: number);
260
286
  get evasionProbability(): number;
261
287
  set evasionProbability(evasionProbability: number);
288
+ get manaRegenerationRateIncreaseFactor(): number;
289
+ set manaRegenerationRateIncreaseFactor(manaRegenerationRateIncreaseFactor: number);
262
290
  get duration(): number;
291
+ set duration(duration: number);
263
292
  get remainingDuration(): number;
264
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);
301
+ get abilityCooldownFactor(): number;
302
+ set abilityCooldownFactor(abilityCooldownFactor: number);
303
+ onAbilityGained(ability: Ability): void;
304
+ onAbilityLost(ability: Ability): void;
265
305
  flashEffect(...parameters: [
266
306
  ...widgetOrXY: [] | [Widget] | [x: number, x: number],
267
307
  ...parametersOrDuration: [] | [EffectParameters] | [number]
268
308
  ]): void;
269
- 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;
270
317
  protected onCreate(): void;
271
318
  protected onDestroy(): Destructor;
272
319
  static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;
273
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;
274
323
  onExpiration(): void;
275
324
  onDeath(source: Unit | undefined): void;
276
325
  onDamageDealt(target: Unit, event: DamageEvent): void;