warscript 0.0.1-dev.91a4dce → 0.0.1-dev.9381e62

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 (329) 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 +1 -0
  5. package/core/types/frame.lua +112 -37
  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 +4 -2
  10. package/core/types/player.lua +42 -25
  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 +2 -1
  15. package/core/types/tileCell.lua +5 -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/destroyable.d.ts +1 -0
  22. package/destroyable.lua +9 -0
  23. package/engine/behavior.d.ts +10 -2
  24. package/engine/behavior.lua +157 -76
  25. package/engine/behaviour/ability/apply-buff.lua +4 -4
  26. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  27. package/engine/behaviour/ability/damage.d.ts +4 -0
  28. package/engine/behaviour/ability/damage.lua +19 -15
  29. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  30. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  31. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  32. package/engine/behaviour/ability.d.ts +13 -6
  33. package/engine/behaviour/ability.lua +56 -1
  34. package/engine/behaviour/unit/stun-immunity.d.ts +7 -5
  35. package/engine/behaviour/unit/stun-immunity.lua +6 -5
  36. package/engine/behaviour/unit.d.ts +8 -3
  37. package/engine/behaviour/unit.lua +102 -24
  38. package/engine/buff.d.ts +73 -24
  39. package/engine/buff.lua +418 -166
  40. package/engine/index.d.ts +2 -1
  41. package/engine/internal/ability.d.ts +4 -0
  42. package/engine/internal/ability.lua +56 -36
  43. package/engine/internal/item/fields.d.ts +12 -0
  44. package/engine/internal/item/fields.lua +33 -0
  45. package/engine/internal/item/owner-cache.d.ts +5 -0
  46. package/engine/internal/item/owner-cache.lua +4 -0
  47. package/engine/internal/item+owner.d.ts +2 -0
  48. package/engine/internal/item+owner.lua +27 -4
  49. package/engine/internal/item.d.ts +20 -5
  50. package/engine/internal/item.lua +146 -57
  51. package/engine/internal/mechanics/cast-ability.lua +6 -3
  52. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  53. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  54. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  55. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  56. package/engine/internal/object-data/health-bonus.lua +16 -0
  57. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  58. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  59. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  60. package/engine/internal/object-data/mana-bonus.lua +16 -0
  61. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  62. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  63. package/engine/internal/unit/ability.lua +15 -3
  64. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  65. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  66. package/engine/internal/unit/appearance.d.ts +15 -0
  67. package/engine/internal/unit/appearance.lua +85 -0
  68. package/engine/internal/unit/attributes.d.ts +17 -0
  69. package/engine/internal/unit/attributes.lua +46 -0
  70. package/engine/internal/unit/bonus.d.ts +14 -0
  71. package/engine/internal/unit/bonus.lua +102 -8
  72. package/engine/internal/unit/buff.d.ts +2 -2
  73. package/engine/internal/unit/buff.lua +34 -19
  74. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  75. package/engine/internal/unit/equipment-inventory.lua +233 -0
  76. package/engine/internal/unit/expiration-timer.lua +1 -1
  77. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  78. package/engine/internal/unit/extended-inventory.lua +99 -0
  79. package/engine/internal/unit/fly-height.d.ts +7 -0
  80. package/engine/internal/unit/fly-height.lua +20 -0
  81. package/engine/internal/unit/ignore-events-items.lua +10 -1
  82. package/engine/internal/unit/interrupts.d.ts +12 -0
  83. package/engine/internal/unit/interrupts.lua +28 -0
  84. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  85. package/engine/internal/unit/inventory.lua +87 -0
  86. package/engine/internal/unit/item-container.d.ts +25 -0
  87. package/engine/internal/unit/item-container.lua +11 -0
  88. package/engine/internal/unit/item-order-events.d.ts +17 -0
  89. package/engine/internal/unit/item-order-events.lua +67 -0
  90. package/engine/internal/unit/item-slot.d.ts +27 -0
  91. package/engine/internal/unit/item-slot.lua +92 -0
  92. package/engine/internal/unit/order.d.ts +3 -3
  93. package/engine/internal/unit/order.lua +10 -10
  94. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  95. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  96. package/engine/internal/unit/range-event.d.ts +12 -0
  97. package/engine/internal/unit/range-event.lua +90 -0
  98. package/engine/internal/unit/scale.d.ts +7 -0
  99. package/engine/internal/unit/scale.lua +20 -0
  100. package/engine/internal/unit+ability.d.ts +2 -1
  101. package/engine/internal/unit+ability.lua +63 -2
  102. package/engine/internal/unit+bonus.lua +3 -3
  103. package/engine/internal/unit+damage.d.ts +9 -0
  104. package/engine/internal/unit+damage.lua +33 -0
  105. package/engine/internal/unit+rally.lua +9 -31
  106. package/engine/internal/unit-missile-data.lua +58 -32
  107. package/engine/internal/unit-missile-launch.lua +29 -19
  108. package/engine/internal/unit.d.ts +14 -28
  109. package/engine/internal/unit.lua +158 -247
  110. package/engine/local-client.d.ts +28 -0
  111. package/engine/local-client.lua +324 -54
  112. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  113. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  114. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  115. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  116. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  117. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  118. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  119. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  120. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  121. package/engine/object-data/auxiliary/item-class.lua +2 -0
  122. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  123. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  124. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  125. package/engine/object-data/auxiliary/order-type.lua +2 -0
  126. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  127. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  128. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  129. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  130. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  131. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  132. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  133. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  134. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  135. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  136. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  137. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  138. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  139. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  140. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  141. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  142. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  143. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  144. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  145. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  146. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  147. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  148. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  149. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  150. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  151. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  152. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  153. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  154. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  155. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  156. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  157. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  158. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  159. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  160. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  161. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  162. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  163. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  164. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  165. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  166. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  167. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  168. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  169. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  170. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  171. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  172. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  173. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  174. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  175. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  176. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  177. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  178. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  179. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  180. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  181. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  182. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  183. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  184. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  185. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  186. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  187. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  188. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  189. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  190. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  191. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  192. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  193. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  194. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  195. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  196. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  197. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  198. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  199. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  200. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  201. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  202. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  203. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  204. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  205. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  206. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  207. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  208. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  209. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  210. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  211. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  212. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  213. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  214. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  215. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  216. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  217. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  218. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  219. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  220. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  221. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  222. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  223. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  224. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  225. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  226. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  227. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  228. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  229. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  230. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  231. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  232. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  233. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  234. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  235. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  236. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  237. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  238. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  239. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  240. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  241. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  242. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  243. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  244. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  245. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  246. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  247. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  248. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  249. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  250. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  251. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  252. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  253. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  254. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  255. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  256. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  257. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  258. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  259. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  260. package/engine/object-data/entry/ability-type.d.ts +25 -6
  261. package/engine/object-data/entry/ability-type.lua +244 -8
  262. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  263. package/engine/object-data/entry/buff-type.d.ts +6 -2
  264. package/engine/object-data/entry/buff-type.lua +26 -0
  265. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  266. package/engine/object-data/entry/destructible-type.lua +181 -0
  267. package/engine/object-data/entry/item-type.d.ts +18 -3
  268. package/engine/object-data/entry/item-type.lua +84 -0
  269. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  270. package/engine/object-data/entry/lightning-type.lua +1 -1
  271. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  272. package/engine/object-data/entry/unit-type.d.ts +51 -2
  273. package/engine/object-data/entry/unit-type.lua +415 -37
  274. package/engine/object-data/entry/upgrade.d.ts +2 -2
  275. package/engine/object-data/entry.d.ts +6 -1
  276. package/engine/object-data/entry.lua +8 -0
  277. package/engine/object-field/ability.lua +2 -2
  278. package/engine/object-field/item.d.ts +22 -0
  279. package/engine/object-field/item.lua +118 -0
  280. package/engine/object-field/unit.d.ts +20 -5
  281. package/engine/object-field/unit.lua +61 -0
  282. package/engine/object-field.d.ts +10 -2
  283. package/engine/object-field.lua +268 -123
  284. package/engine/random.d.ts +1 -0
  285. package/engine/random.lua +8 -0
  286. package/engine/standard/entries/ability-type.d.ts +3102 -7
  287. package/engine/standard/entries/ability-type.lua +0 -6
  288. package/engine/standard/entries/buff-type.d.ts +45 -0
  289. package/engine/standard/entries/buff-type.lua +43 -0
  290. package/engine/standard/entries/item-type.d.ts +1299 -0
  291. package/engine/standard/entries/item-type.lua +2 -0
  292. package/engine/standard/entries/lightning-type.d.ts +42 -15
  293. package/engine/standard/entries/lightning-type.lua +0 -14
  294. package/engine/standard/entries/unit-type.d.ts +5 -0
  295. package/engine/standard/entries/unit-type.lua +5 -0
  296. package/engine/standard/fields/ability.d.ts +2 -2
  297. package/engine/standard/fields/ability.lua +2 -2
  298. package/engine/standard/fields/item.d.ts +4 -0
  299. package/engine/standard/fields/item.lua +6 -0
  300. package/engine/standard/fields/unit.d.ts +11 -3
  301. package/engine/standard/fields/unit.lua +15 -2
  302. package/engine/text-tag.lua +2 -1
  303. package/engine/unit.d.ts +10 -1
  304. package/engine/unit.lua +10 -1
  305. package/event.d.ts +1 -1
  306. package/lualib_bundle.lua +1 -1
  307. package/math.d.ts +2 -0
  308. package/math.lua +14 -0
  309. package/network.lua +25 -1
  310. package/objutil/buff.lua +10 -8
  311. package/objutil/object.lua +1 -1
  312. package/operation.d.ts +8 -1
  313. package/operation.lua +38 -18
  314. package/package.json +3 -23
  315. package/patch-lua.lua +15 -0
  316. package/utility/linked-map.d.ts +35 -0
  317. package/utility/linked-map.lua +107 -0
  318. package/utility/linked-set.d.ts +3 -1
  319. package/utility/linked-set.lua +27 -0
  320. package/utility/random.d.ts +102 -0
  321. package/utility/random.lua +273 -0
  322. package/utility/records.lua +20 -1
  323. package/utility/unordered-map.d.ts +27 -0
  324. package/utility/unordered-map.lua +99 -0
  325. package/engine/internal/unit/item.lua +0 -78
  326. /package/engine/internal/{object-data/armor-increase.d.ts → misc/unit-ability-level-natives.d.ts} +0 -0
  327. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  328. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  329. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -7,8 +7,11 @@ 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")
14
+ require("engine.internal.unit+ability")
12
15
  local ____ability = require("engine.internal.ability")
13
16
  local Ability = ____ability.Ability
14
17
  local ____effect = require("core.types.effect")
@@ -17,6 +20,8 @@ local ____ability = require("engine.standard.fields.ability")
17
20
  local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
18
21
  local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
19
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
20
25
  local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
21
26
  local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
22
27
  local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
@@ -29,7 +34,14 @@ local ____ability = require("engine.object-field.ability")
29
34
  local AbilityField = ____ability.AbilityField
30
35
  local AbilityLevelField = ____ability.AbilityLevelField
31
36
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
37
+ local ____missile = require("core.types.missile")
38
+ local Missile = ____missile.Missile
32
39
  local createBehaviorFunctionsByAbilityTypeId = {}
40
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
41
+ if success then
42
+ abilityBehavior:onMissileArrival(...)
43
+ end
44
+ end
33
45
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
34
46
  local function createUnitEventListener(key)
35
47
  return function(unit, ability, ...)
@@ -105,6 +117,14 @@ end
105
117
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
106
118
  return resolveCurrentAbilityDependentValue(self.ability, value)
107
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
108
128
  function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
109
129
  local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
110
130
  Effect:flash(
@@ -159,6 +179,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
159
179
  )
160
180
  end
161
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
162
204
  function AbilityBehavior.prototype.onCreate(self)
163
205
  end
164
206
  function AbilityBehavior.prototype.onValueChange(self, _value)
@@ -287,6 +329,19 @@ end)
287
329
  AbilityLevelField.valueChangeEvent:addListener(function(ability, field)
288
330
  ____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
289
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)
290
345
  Ability.onCreate:addListener(function(ability)
291
346
  local createBehaviorFunctions = createBehaviorFunctionsByAbilityTypeId[ability.typeId]
292
347
  if createBehaviorFunctions ~= nil then
@@ -4,16 +4,18 @@ 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;
11
13
  additionalAction?: (this: void, unit: Unit) => void;
12
14
  };
13
15
  export declare class StunImmunityUnitBehavior extends UnitBehavior {
14
- readonly parameters: Readonly<StunImmunityUnitBehaviourParameters>;
15
- static defaultParameters: StunImmunityUnitBehaviourParameters;
16
- constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviourParameters>);
16
+ readonly parameters: Readonly<StunImmunityUnitBehaviorParameters>;
17
+ static defaultParameters: StunImmunityUnitBehaviorParameters;
18
+ constructor(unit: Unit, parameters?: Readonly<StunImmunityUnitBehaviorParameters>);
17
19
  protected onDestroy(): Destructor;
18
20
  onDamageReceived(): void;
19
21
  onTargetingAbilityChannelingStart(): void;
@@ -8,14 +8,15 @@ local UnitBehavior = ____unit.UnitBehavior
8
8
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
9
9
  local AbilityType = ____ability_2Dtype.AbilityType
10
10
  local ____arrays = require("utility.arrays")
11
- local flatMapToLuaSet = ____arrays.flatMapToLuaSet
11
+ local distinct = ____arrays.distinct
12
+ local flatMap = ____arrays.flatMap
12
13
  local map = ____arrays.map
13
14
  local ____text_2Dtag = require("engine.text-tag")
14
15
  local TextTag = ____text_2Dtag.TextTag
15
16
  local ____timer = require("core.types.timer")
16
17
  local Timer = ____timer.Timer
17
18
  local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
18
- return flatMapToLuaSet(
19
+ return distinct(flatMap(
19
20
  AbilityType:getAllByBaseIds(map({
20
21
  "AHtb",
21
22
  "AHbh",
@@ -41,11 +42,11 @@ local DEFAULT_BUFF_TYPE_IDS = postcompile(function()
41
42
  "ACcb"
42
43
  }, fourCC)),
43
44
  function(abilityType) return __TS__ArrayFlat(abilityType.buffTypeIds) end
44
- )
45
+ ))
45
46
  end)
46
47
  local function process(behavior)
47
48
  local hasRemovedBuffs = false
48
- for buffTypeId in pairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
+ for ____, buffTypeId in ipairs(behavior.parameters.buffTypeIds or DEFAULT_BUFF_TYPE_IDS) do
49
50
  hasRemovedBuffs = hasRemovedBuffs or behavior.unit:removeBuff(buffTypeId)
50
51
  end
51
52
  if hasRemovedBuffs then
@@ -67,7 +68,7 @@ function StunImmunityUnitBehavior.prototype.____constructor(self, unit, paramete
67
68
  if parameters == nil then
68
69
  parameters = ____exports.StunImmunityUnitBehavior.defaultParameters
69
70
  end
70
- UnitBehavior.prototype.____constructor(self, unit)
71
+ UnitBehavior.prototype.____constructor(self, unit, parameters.priority)
71
72
  self.parameters = parameters
72
73
  unit:decrementStunCounter()
73
74
  process(self)
@@ -1,11 +1,12 @@
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";
@@ -13,15 +14,17 @@ import { Destructable } from "../../core/types/destructable";
13
14
  import type { Buff } from "../buff";
14
15
  import { UnitBonusType } from "../internal/unit/bonus";
15
16
  import { Player } from "../../core/types/player";
17
+ import { UnitTypeId } from "../object-data/entry/unit-type";
16
18
  export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
17
19
  export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
18
20
  readonly sourceAbilityBehavior?: AbilityBehavior;
19
21
  private _bonusIdByBonusType?;
20
- constructor(unit: Unit);
22
+ constructor(unit: Unit, priority?: BehaviorPriority);
21
23
  protected onDestroy(): Destructor;
22
24
  get unit(): Unit;
23
25
  protected getUnitBonus(bonusType: UnitBonusType): number;
24
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;
25
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;
26
29
  onImmediateOrder(orderId: number): void;
27
30
  onTargetOrder(orderId: number, target: Widget): void;
@@ -49,6 +52,7 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
49
52
  onTargetingAbilityChannelingStart(ability: Ability, source: Unit): void;
50
53
  onTargetingAbilityImpact(ability: Ability, source: Unit): void;
51
54
  onBuffGained(buff: Buff): void;
55
+ onBuffLost(buff: Buff): void;
52
56
  onItemDropped(item: Item): void;
53
57
  onItemPickedUp(item: Item): void;
54
58
  onItemUsed(item: Item): void;
@@ -57,4 +61,5 @@ export declare abstract class UnitBehavior<PeriodicActionParameters extends any[
57
61
  onKill(target: Unit): void;
58
62
  onDeath(source: Unit | undefined): void;
59
63
  onOwnerChange(previousOwner: Player): void;
64
+ static bindUnitType<Args extends any[]>(this: UnitBehaviorConstructor<Args>, unitTypeId: UnitTypeId, ...args: Args): void;
60
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)
@@ -167,6 +222,21 @@ function UnitBehavior.prototype.onDeath(self, source)
167
222
  end
168
223
  function UnitBehavior.prototype.onOwnerChange(self, previousOwner)
169
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
170
240
  __TS__SetDescriptor(
171
241
  UnitBehavior.prototype,
172
242
  "unit",
@@ -282,6 +352,14 @@ __TS__SetDescriptor(
282
352
  ____exports.UnitBehavior:forAll(unit, "onOwnerChange", previousOwner)
283
353
  end)
284
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)
285
363
  Unit.destroyEvent:addListener(function(unit)
286
364
  ____exports.UnitBehavior:forAll(unit, "destroy")
287
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;