warscript 0.0.1-dev.24ac045 → 0.0.1-dev.24da7f2

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 (384) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +11 -1
  5. package/core/types/effect.lua +43 -77
  6. package/core/types/frame.d.ts +21 -2
  7. package/core/types/frame.lua +165 -87
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/missile.lua +8 -7
  12. package/core/types/player.d.ts +18 -1
  13. package/core/types/player.lua +76 -26
  14. package/core/types/playerCamera.d.ts +2 -0
  15. package/core/types/playerCamera.lua +123 -5
  16. package/core/types/playerColor.lua +4 -3
  17. package/core/types/sound.d.ts +1 -1
  18. package/core/types/sound.lua +14 -9
  19. package/core/types/tileCell.d.ts +18 -3
  20. package/core/types/tileCell.lua +108 -0
  21. package/core/types/timer.d.ts +3 -1
  22. package/core/types/timer.lua +27 -2
  23. package/core/types/unit.d.ts +5 -0
  24. package/core/types/unit.lua +5 -0
  25. package/core/util.d.ts +3 -1
  26. package/core/util.lua +109 -3
  27. package/decl/native.d.ts +712 -11
  28. package/destroyable.d.ts +1 -0
  29. package/destroyable.lua +9 -0
  30. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  31. package/engine/ability-type-extended-tooltip.lua +44 -0
  32. package/engine/behavior.d.ts +14 -1
  33. package/engine/behavior.lua +230 -70
  34. package/engine/behaviour/ability/apply-buff.lua +4 -4
  35. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  36. package/engine/behaviour/ability/damage.d.ts +4 -0
  37. package/engine/behaviour/ability/damage.lua +19 -15
  38. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  39. package/engine/behaviour/ability/emulate-impact.lua +81 -6
  40. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  41. package/engine/behaviour/ability/instant-impact.lua +17 -2
  42. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  43. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  44. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  45. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  46. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  47. package/engine/behaviour/ability/restore-mana.lua +6 -6
  48. package/engine/behaviour/ability.d.ts +19 -6
  49. package/engine/behaviour/ability.lua +120 -9
  50. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  51. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  52. package/engine/behaviour/unit.d.ts +16 -5
  53. package/engine/behaviour/unit.lua +127 -22
  54. package/engine/buff.d.ts +124 -57
  55. package/engine/buff.lua +608 -296
  56. package/engine/index.d.ts +2 -1
  57. package/engine/internal/ability.d.ts +10 -1
  58. package/engine/internal/ability.lua +99 -47
  59. package/engine/internal/item/fields.d.ts +12 -0
  60. package/engine/internal/item/fields.lua +33 -0
  61. package/engine/internal/item/owner-cache.d.ts +5 -0
  62. package/engine/internal/item/owner-cache.lua +4 -0
  63. package/engine/internal/item+owner.d.ts +2 -0
  64. package/engine/internal/item+owner.lua +37 -8
  65. package/engine/internal/item.d.ts +27 -14
  66. package/engine/internal/item.lua +185 -82
  67. package/engine/internal/mechanics/cast-ability.lua +6 -3
  68. package/engine/internal/misc/frame-coordinates.lua +21 -0
  69. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  70. package/engine/internal/misc/get-terrain-z.lua +11 -0
  71. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  72. package/engine/internal/misc/player-local-handle.lua +5 -0
  73. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  74. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  75. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  76. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  77. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  78. package/engine/internal/object-data/health-bonus.lua +16 -0
  79. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  80. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  81. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  82. package/engine/internal/object-data/mana-bonus.lua +16 -0
  83. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  84. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  85. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  86. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  87. package/engine/internal/unit/ability.d.ts +14 -14
  88. package/engine/internal/unit/ability.lua +88 -45
  89. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  90. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  91. package/engine/internal/unit/appearance.d.ts +15 -0
  92. package/engine/internal/unit/appearance.lua +85 -0
  93. package/engine/internal/unit/attributes.d.ts +17 -0
  94. package/engine/internal/unit/attributes.lua +46 -0
  95. package/engine/internal/unit/bonus.d.ts +17 -0
  96. package/engine/internal/unit/bonus.lua +113 -8
  97. package/engine/internal/unit/buff.d.ts +2 -2
  98. package/engine/internal/unit/buff.lua +34 -19
  99. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  100. package/engine/internal/unit/equipment-inventory.lua +233 -0
  101. package/engine/internal/unit/expiration-timer.lua +1 -1
  102. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  103. package/engine/internal/unit/extended-inventory.lua +99 -0
  104. package/engine/internal/unit/fly-height.d.ts +7 -0
  105. package/engine/internal/unit/fly-height.lua +20 -0
  106. package/engine/internal/unit/ignore-events-items.lua +10 -1
  107. package/engine/internal/unit/interrupts.d.ts +12 -0
  108. package/engine/internal/unit/interrupts.lua +28 -0
  109. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  110. package/engine/internal/unit/inventory.lua +87 -0
  111. package/engine/internal/unit/item-container.d.ts +25 -0
  112. package/engine/internal/unit/item-container.lua +11 -0
  113. package/engine/internal/unit/item-order-events.d.ts +17 -0
  114. package/engine/internal/unit/item-order-events.lua +67 -0
  115. package/engine/internal/unit/item-slot.d.ts +27 -0
  116. package/engine/internal/unit/item-slot.lua +92 -0
  117. package/engine/internal/unit/main-selected.lua +12 -27
  118. package/engine/internal/unit/order.d.ts +3 -3
  119. package/engine/internal/unit/order.lua +10 -10
  120. package/engine/internal/unit/range-event.d.ts +12 -0
  121. package/engine/internal/unit/range-event.lua +90 -0
  122. package/engine/internal/unit/scale.d.ts +7 -0
  123. package/engine/internal/unit/scale.lua +20 -0
  124. package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
  125. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  126. package/engine/internal/unit+ability.d.ts +2 -1
  127. package/engine/internal/unit+ability.lua +83 -3
  128. package/engine/internal/unit+bonus.lua +3 -3
  129. package/engine/internal/unit+damage.d.ts +9 -0
  130. package/engine/internal/unit+damage.lua +33 -0
  131. package/engine/internal/unit+rally.lua +9 -31
  132. package/engine/internal/unit-missile-data.lua +96 -68
  133. package/engine/internal/unit-missile-launch.lua +65 -27
  134. package/engine/internal/unit.d.ts +20 -33
  135. package/engine/internal/unit.lua +227 -295
  136. package/engine/lightning.lua +4 -4
  137. package/engine/local-client.d.ts +28 -0
  138. package/engine/local-client.lua +324 -54
  139. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  140. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  141. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  142. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  143. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  144. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  145. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  146. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  147. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  148. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  149. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  150. package/engine/object-data/auxiliary/item-class.lua +2 -0
  151. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  152. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  153. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  154. package/engine/object-data/auxiliary/order-type.lua +2 -0
  155. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  156. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  157. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  158. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  159. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  160. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  161. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  162. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  163. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  164. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  165. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  166. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  167. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  168. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  169. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  170. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  171. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  172. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  173. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
  174. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  175. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  176. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  177. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  178. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  179. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  180. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  181. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  182. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  183. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  184. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  185. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  186. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  187. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  188. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  189. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  190. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  191. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  192. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  193. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  194. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  195. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  196. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  197. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  198. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  199. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  200. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  201. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  202. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  203. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  204. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  205. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  206. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  207. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  208. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  209. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  210. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  211. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  212. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  213. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  214. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  215. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  216. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  217. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  218. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  219. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  220. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  221. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  222. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  223. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  224. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  225. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  226. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  227. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  228. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  229. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  230. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  231. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  232. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  233. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  234. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  235. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  236. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  237. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  238. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  239. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  240. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  241. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  242. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  243. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  244. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  245. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  246. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  247. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  248. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  250. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  251. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  252. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  253. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  254. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  255. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  256. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  257. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  258. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  259. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  260. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  261. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  262. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  263. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  264. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  265. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  266. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  267. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  268. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  269. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  270. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  271. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  272. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  273. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  274. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  275. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  276. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  277. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  278. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  279. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  280. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  281. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  282. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  283. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  284. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  285. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  286. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  287. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  288. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  289. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  290. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  291. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  292. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  293. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  294. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  295. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  296. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  297. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  298. package/engine/object-data/entry/ability-type.d.ts +35 -8
  299. package/engine/object-data/entry/ability-type.lua +304 -15
  300. package/engine/object-data/entry/buff-type/applicable.lua +122 -111
  301. package/engine/object-data/entry/buff-type.d.ts +6 -2
  302. package/engine/object-data/entry/buff-type.lua +26 -0
  303. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  304. package/engine/object-data/entry/destructible-type.lua +181 -0
  305. package/engine/object-data/entry/item-type.d.ts +18 -3
  306. package/engine/object-data/entry/item-type.lua +84 -0
  307. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  308. package/engine/object-data/entry/lightning-type.lua +1 -1
  309. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  310. package/engine/object-data/entry/unit-type.d.ts +72 -4
  311. package/engine/object-data/entry/unit-type.lua +503 -53
  312. package/engine/object-data/entry/upgrade.d.ts +2 -2
  313. package/engine/object-data/entry.d.ts +6 -1
  314. package/engine/object-data/entry.lua +8 -0
  315. package/engine/object-field/ability.d.ts +3 -3
  316. package/engine/object-field/ability.lua +9 -8
  317. package/engine/object-field/item.d.ts +22 -0
  318. package/engine/object-field/item.lua +118 -0
  319. package/engine/object-field/unit.d.ts +20 -5
  320. package/engine/object-field/unit.lua +61 -0
  321. package/engine/object-field.d.ts +12 -4
  322. package/engine/object-field.lua +273 -126
  323. package/engine/random.d.ts +10 -0
  324. package/engine/random.lua +21 -0
  325. package/engine/standard/entries/ability-type.d.ts +3102 -7
  326. package/engine/standard/entries/ability-type.lua +0 -6
  327. package/engine/standard/entries/buff-type.d.ts +45 -0
  328. package/engine/standard/entries/buff-type.lua +43 -0
  329. package/engine/standard/entries/item-type.d.ts +1299 -0
  330. package/engine/standard/entries/item-type.lua +2 -0
  331. package/engine/standard/entries/lightning-type.d.ts +42 -15
  332. package/engine/standard/entries/lightning-type.lua +0 -14
  333. package/engine/standard/entries/unit-type.d.ts +5 -0
  334. package/engine/standard/entries/unit-type.lua +5 -0
  335. package/engine/standard/fields/ability.d.ts +4 -4
  336. package/engine/standard/fields/ability.lua +4 -4
  337. package/engine/standard/fields/item.d.ts +4 -0
  338. package/engine/standard/fields/item.lua +6 -0
  339. package/engine/standard/fields/unit.d.ts +11 -3
  340. package/engine/standard/fields/unit.lua +15 -2
  341. package/engine/synchronization.d.ts +11 -0
  342. package/engine/synchronization.lua +77 -0
  343. package/engine/text-tag.d.ts +14 -2
  344. package/engine/text-tag.lua +135 -23
  345. package/engine/unit.d.ts +11 -1
  346. package/engine/unit.lua +11 -1
  347. package/event.d.ts +1 -1
  348. package/lualib_bundle.lua +1 -1
  349. package/math.d.ts +2 -0
  350. package/math.lua +14 -0
  351. package/net/socket.lua +1 -1
  352. package/network.lua +25 -1
  353. package/objutil/buff.lua +11 -9
  354. package/objutil/object.lua +1 -1
  355. package/operation.d.ts +8 -1
  356. package/operation.lua +38 -18
  357. package/package.json +3 -23
  358. package/patch-lua.lua +15 -0
  359. package/patch-lualib.lua +1 -1
  360. package/utility/arrays.d.ts +8 -1
  361. package/utility/arrays.lua +25 -0
  362. package/utility/callback-array.d.ts +17 -0
  363. package/utility/callback-array.lua +61 -0
  364. package/utility/functions.d.ts +4 -0
  365. package/utility/functions.lua +9 -0
  366. package/utility/linked-map.d.ts +35 -0
  367. package/utility/linked-map.lua +107 -0
  368. package/utility/linked-set.d.ts +4 -1
  369. package/utility/linked-set.lua +46 -1
  370. package/utility/lua-maps.d.ts +11 -2
  371. package/utility/lua-maps.lua +33 -2
  372. package/utility/lua-sets.d.ts +1 -0
  373. package/utility/lua-sets.lua +4 -0
  374. package/utility/random.d.ts +102 -0
  375. package/utility/random.lua +273 -0
  376. package/utility/records.lua +20 -1
  377. package/utility/types.d.ts +3 -0
  378. package/utility/unordered-map.d.ts +27 -0
  379. package/utility/unordered-map.lua +99 -0
  380. package/engine/internal/unit/item.lua +0 -78
  381. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  382. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  383. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  384. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -1,6 +1,20 @@
1
1
  /** @noSelfInFile */
2
2
  import { AbilityBehavior } from "../ability";
3
3
  import { Unit } from "../../internal/unit";
4
+ import { Item } from "../../internal/item";
5
+ import { Destructable } from "../../../core/types/destructable";
4
6
  export declare abstract class EmulateImpactAbilityBehavior extends AbilityBehavior {
5
- protected emulateImpact(caster: Unit): void;
7
+ /**
8
+ * Pays the cost of the cast and invokes only the common impact event: for impacts
9
+ * that have no cast target to report, such as ones triggered by a command.
10
+ */
11
+ protected emulateImpact(caster: Unit): boolean;
12
+ protected emulateUnitTargetImpact(caster: Unit, target: Unit): boolean;
13
+ protected emulateItemTargetImpact(caster: Unit, target: Item): boolean;
14
+ protected emulateDestructibleTargetImpact(caster: Unit, target: Destructable): boolean;
15
+ protected emulatePointTargetImpact(caster: Unit, x: number, y: number): boolean;
16
+ protected emulateNoTargetImpact(caster: Unit): boolean;
17
+ /** Invokes the common impact event and the one matching the target, as a real impact. */
18
+ private emulateTargetImpact;
19
+ private payEmulatedImpact;
6
20
  }
@@ -10,9 +10,6 @@ local Unit = ____unit.Unit
10
10
  local ____ability = require("engine.standard.fields.ability")
11
11
  local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
12
12
  local MANA_COST_ABILITY_INTEGER_LEVEL_FIELD = ____ability.MANA_COST_ABILITY_INTEGER_LEVEL_FIELD
13
- local ____math = require("math")
14
- local max = ____math.max
15
- local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
16
13
  local ____sound = require("core.types.sound")
17
14
  local Sound3D = ____sound.Sound3D
18
15
  local SoundSettings = ____sound.SoundSettings
@@ -20,23 +17,101 @@ local ____ability = require("engine.internal.ability")
20
17
  local UnitAbility = ____ability.UnitAbility
21
18
  local ____event = require("event")
22
19
  local Event = ____event.Event
20
+ local ____ability = require("engine.internal.unit.ability")
21
+ local emulateAbilityImpactEvent = ____ability.emulateAbilityImpactEvent
23
22
  ____exports.EmulateImpactAbilityBehavior = __TS__Class()
24
23
  local EmulateImpactAbilityBehavior = ____exports.EmulateImpactAbilityBehavior
25
24
  EmulateImpactAbilityBehavior.name = "EmulateImpactAbilityBehavior"
26
25
  __TS__ClassExtends(EmulateImpactAbilityBehavior, AbilityBehavior)
27
26
  function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
27
+ if not self:payEmulatedImpact(caster) then
28
+ return false
29
+ end
30
+ Event.invoke(Unit.abilityImpactEvent, caster, self.ability)
31
+ return true
32
+ end
33
+ function EmulateImpactAbilityBehavior.prototype.emulateUnitTargetImpact(self, caster, target)
34
+ return self:emulateTargetImpact(
35
+ caster,
36
+ target,
37
+ nil,
38
+ nil,
39
+ target.x,
40
+ target.y
41
+ )
42
+ end
43
+ function EmulateImpactAbilityBehavior.prototype.emulateItemTargetImpact(self, caster, target)
44
+ return self:emulateTargetImpact(
45
+ caster,
46
+ nil,
47
+ target,
48
+ nil,
49
+ target.x,
50
+ target.y
51
+ )
52
+ end
53
+ function EmulateImpactAbilityBehavior.prototype.emulateDestructibleTargetImpact(self, caster, target)
54
+ return self:emulateTargetImpact(
55
+ caster,
56
+ nil,
57
+ nil,
58
+ target,
59
+ target.x,
60
+ target.y
61
+ )
62
+ end
63
+ function EmulateImpactAbilityBehavior.prototype.emulatePointTargetImpact(self, caster, x, y)
64
+ return self:emulateTargetImpact(
65
+ caster,
66
+ nil,
67
+ nil,
68
+ nil,
69
+ x,
70
+ y
71
+ )
72
+ end
73
+ function EmulateImpactAbilityBehavior.prototype.emulateNoTargetImpact(self, caster)
74
+ return self:emulateTargetImpact(
75
+ caster,
76
+ nil,
77
+ nil,
78
+ nil,
79
+ 0,
80
+ 0
81
+ )
82
+ end
83
+ function EmulateImpactAbilityBehavior.prototype.emulateTargetImpact(self, caster, targetUnit, targetItem, targetDestructible, x, y)
84
+ if not self:payEmulatedImpact(caster) then
85
+ return false
86
+ end
87
+ emulateAbilityImpactEvent(
88
+ caster,
89
+ self.ability,
90
+ targetUnit,
91
+ targetItem,
92
+ targetDestructible,
93
+ x,
94
+ y
95
+ )
96
+ return true
97
+ end
98
+ function EmulateImpactAbilityBehavior.prototype.payEmulatedImpact(self, caster)
28
99
  local manaCost = self:resolveCurrentAbilityDependentValue(MANA_COST_ABILITY_INTEGER_LEVEL_FIELD)
29
100
  local cooldown = self:resolveCurrentAbilityDependentValue(COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD)
30
101
  if self.ability.cooldownRemaining ~= 0 or caster.mana < manaCost or __TS__InstanceOf(self.ability, UnitAbility) and self.ability.isDisabled then
31
- return
102
+ return false
32
103
  end
33
104
  caster.mana = caster.mana - manaCost
34
- self.ability.cooldownRemaining = max(cooldown, MINIMUM_POSITIVE_NORMALIZED_FLOAT)
105
+ if cooldown == 0 then
106
+ self.ability:interruptCast()
107
+ else
108
+ self.ability:startCooldown(cooldown)
109
+ end
35
110
  self:flashCasterEffect(caster)
36
111
  local soundPresetId = self.ability:getField(ABILITY_SF_EFFECT_SOUND)
37
112
  if soundPresetId ~= "" then
38
113
  Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, caster)
39
114
  end
40
- Event.invoke(Unit.abilityImpactEvent, caster, self.ability)
115
+ return true
41
116
  end
42
117
  return ____exports
@@ -1,6 +1,17 @@
1
1
  /** @noSelfInFile */
2
2
  import { Unit } from "../../internal/unit";
3
+ import { Item } from "../../internal/item";
4
+ import { Destructable } from "../../../core/types/destructable";
3
5
  import { EmulateImpactAbilityBehavior } from "./emulate-impact";
6
+ /**
7
+ * Makes the ability take effect as soon as its cast starts, skipping the cast animation:
8
+ * the impact events fire with the cast's target, so target-specific impact handlers
9
+ * (`onPointTargetImpact`, `onUnitTargetImpact`, ...) work as with a native impact.
10
+ */
4
11
  export declare class InstantImpactAbilityBehavior extends EmulateImpactAbilityBehavior {
5
- onCastingStart(caster: Unit): void;
12
+ onUnitTargetCastingStart(caster: Unit, target: Unit): void;
13
+ onItemTargetCastingStart(caster: Unit, target: Item): void;
14
+ onDestructibleTargetCastingStart(caster: Unit, target: Destructable): void;
15
+ onPointTargetCastingStart(caster: Unit, x: number, y: number): void;
16
+ onNoTargetCastingStart(caster: Unit): void;
6
17
  }
@@ -4,11 +4,26 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local ____exports = {}
5
5
  local ____emulate_2Dimpact = require("engine.behaviour.ability.emulate-impact")
6
6
  local EmulateImpactAbilityBehavior = ____emulate_2Dimpact.EmulateImpactAbilityBehavior
7
+ --- Makes the ability take effect as soon as its cast starts, skipping the cast animation:
8
+ -- the impact events fire with the cast's target, so target-specific impact handlers
9
+ -- (`onPointTargetImpact`, `onUnitTargetImpact`, ...) work as with a native impact.
7
10
  ____exports.InstantImpactAbilityBehavior = __TS__Class()
8
11
  local InstantImpactAbilityBehavior = ____exports.InstantImpactAbilityBehavior
9
12
  InstantImpactAbilityBehavior.name = "InstantImpactAbilityBehavior"
10
13
  __TS__ClassExtends(InstantImpactAbilityBehavior, EmulateImpactAbilityBehavior)
11
- function InstantImpactAbilityBehavior.prototype.onCastingStart(self, caster)
12
- self:emulateImpact(caster)
14
+ function InstantImpactAbilityBehavior.prototype.onUnitTargetCastingStart(self, caster, target)
15
+ self:emulateUnitTargetImpact(caster, target)
16
+ end
17
+ function InstantImpactAbilityBehavior.prototype.onItemTargetCastingStart(self, caster, target)
18
+ self:emulateItemTargetImpact(caster, target)
19
+ end
20
+ function InstantImpactAbilityBehavior.prototype.onDestructibleTargetCastingStart(self, caster, target)
21
+ self:emulateDestructibleTargetImpact(caster, target)
22
+ end
23
+ function InstantImpactAbilityBehavior.prototype.onPointTargetCastingStart(self, caster, x, y)
24
+ self:emulatePointTargetImpact(caster, x, y)
25
+ end
26
+ function InstantImpactAbilityBehavior.prototype.onNoTargetCastingStart(self, caster)
27
+ self:emulateNoTargetImpact(caster)
13
28
  end
14
29
  return ____exports
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import { Unit } from "../../internal/unit";
3
+ import "../../internal/unit/item-order-events";
3
4
  import { EmulateImpactAbilityBehavior } from "./emulate-impact";
4
5
  import { Ability } from "../../internal/ability";
5
6
  export declare class OnCommandImpactAbilityBehavior extends EmulateImpactAbilityBehavior {
@@ -4,6 +4,7 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local ____exports = {}
5
5
  local ____unit = require("engine.internal.unit")
6
6
  local Unit = ____unit.Unit
7
+ require("engine.internal.unit.item-order-events")
7
8
  local ____emulate_2Dimpact = require("engine.behaviour.ability.emulate-impact")
8
9
  local EmulateImpactAbilityBehavior = ____emulate_2Dimpact.EmulateImpactAbilityBehavior
9
10
  ____exports.OnCommandImpactAbilityBehavior = __TS__Class()
@@ -14,3 +14,12 @@ export declare class RemoveBuffsSelfAbilityBehavior extends AbilityBehavior {
14
14
  constructor(ability: Ability, polarity?: AbilityDependentValue<BuffPolarity> | undefined, resistanceType?: AbilityDependentValue<BuffResistanceType> | undefined, includeExpirationTimers?: AbilityDependentValue<boolean> | undefined, includeAuras?: AbilityDependentValue<boolean> | undefined, autoDispel?: AbilityDependentValue<boolean> | undefined);
15
15
  onImpact(caster: Unit): void;
16
16
  }
17
+ export declare class RemoveBuffsTargetAbilityBehavior extends AbilityBehavior {
18
+ private readonly polarity?;
19
+ private readonly resistanceType?;
20
+ private readonly includeExpirationTimers?;
21
+ private readonly includeAuras?;
22
+ private readonly autoDispel?;
23
+ constructor(ability: Ability, polarity?: AbilityDependentValue<BuffPolarity> | undefined, resistanceType?: AbilityDependentValue<BuffResistanceType> | undefined, includeExpirationTimers?: AbilityDependentValue<boolean> | undefined, includeAuras?: AbilityDependentValue<boolean> | undefined, autoDispel?: AbilityDependentValue<boolean> | undefined);
24
+ onUnitTargetImpact(_: Unit, target: Unit): void;
25
+ }
@@ -25,4 +25,25 @@ function RemoveBuffsSelfAbilityBehavior.prototype.onImpact(self, caster)
25
25
  self:resolveCurrentAbilityDependentValue(self.autoDispel)
26
26
  )
27
27
  end
28
+ ____exports.RemoveBuffsTargetAbilityBehavior = __TS__Class()
29
+ local RemoveBuffsTargetAbilityBehavior = ____exports.RemoveBuffsTargetAbilityBehavior
30
+ RemoveBuffsTargetAbilityBehavior.name = "RemoveBuffsTargetAbilityBehavior"
31
+ __TS__ClassExtends(RemoveBuffsTargetAbilityBehavior, AbilityBehavior)
32
+ function RemoveBuffsTargetAbilityBehavior.prototype.____constructor(self, ability, polarity, resistanceType, includeExpirationTimers, includeAuras, autoDispel)
33
+ AbilityBehavior.prototype.____constructor(self, ability)
34
+ self.polarity = polarity
35
+ self.resistanceType = resistanceType
36
+ self.includeExpirationTimers = includeExpirationTimers
37
+ self.includeAuras = includeAuras
38
+ self.autoDispel = autoDispel
39
+ end
40
+ function RemoveBuffsTargetAbilityBehavior.prototype.onUnitTargetImpact(self, _, target)
41
+ target:removeBuffs(
42
+ self:resolveCurrentAbilityDependentValue(self.polarity),
43
+ self:resolveCurrentAbilityDependentValue(self.resistanceType),
44
+ self:resolveCurrentAbilityDependentValue(self.includeExpirationTimers),
45
+ self:resolveCurrentAbilityDependentValue(self.includeAuras),
46
+ self:resolveCurrentAbilityDependentValue(self.autoDispel)
47
+ )
48
+ end
28
49
  return ____exports
@@ -8,7 +8,7 @@ export declare class RestoreManaSelfAbilityBehavior extends AbilityBehavior {
8
8
  constructor(ability: Ability, mana: AbilityDependentValue<number>);
9
9
  onImpact(caster: Unit): void;
10
10
  }
11
- export declare class RestoreManaAbilityBehavior extends AbilityBehavior {
11
+ export declare class RestoreManaTargetAbilityBehavior extends AbilityBehavior {
12
12
  private readonly mana;
13
13
  constructor(ability: Ability, mana: AbilityDependentValue<number>);
14
14
  onUnitTargetImpact(caster: Unit, target: Unit): void;
@@ -15,15 +15,15 @@ end
15
15
  function RestoreManaSelfAbilityBehavior.prototype.onImpact(self, caster)
16
16
  caster.mana = caster.mana + self:resolveCurrentAbilityDependentValue(self.mana)
17
17
  end
18
- ____exports.RestoreManaAbilityBehavior = __TS__Class()
19
- local RestoreManaAbilityBehavior = ____exports.RestoreManaAbilityBehavior
20
- RestoreManaAbilityBehavior.name = "RestoreManaAbilityBehavior"
21
- __TS__ClassExtends(RestoreManaAbilityBehavior, AbilityBehavior)
22
- function RestoreManaAbilityBehavior.prototype.____constructor(self, ability, mana)
18
+ ____exports.RestoreManaTargetAbilityBehavior = __TS__Class()
19
+ local RestoreManaTargetAbilityBehavior = ____exports.RestoreManaTargetAbilityBehavior
20
+ RestoreManaTargetAbilityBehavior.name = "RestoreManaTargetAbilityBehavior"
21
+ __TS__ClassExtends(RestoreManaTargetAbilityBehavior, AbilityBehavior)
22
+ function RestoreManaTargetAbilityBehavior.prototype.____constructor(self, ability, mana)
23
23
  AbilityBehavior.prototype.____constructor(self, ability)
24
24
  self.mana = mana
25
25
  end
26
- function RestoreManaAbilityBehavior.prototype.onUnitTargetImpact(self, caster, target)
26
+ function RestoreManaTargetAbilityBehavior.prototype.onUnitTargetImpact(self, caster, target)
27
27
  target.mana = target.mana + self:resolveCurrentAbilityDependentValue(self.mana)
28
28
  end
29
29
  return ____exports
@@ -1,6 +1,8 @@
1
1
  /** @noSelfInFile */
2
2
  import { Behavior } from "../behavior";
3
- import { Unit } from "../unit";
3
+ import { Unit } from "../internal/unit";
4
+ import "../internal/unit/ability";
5
+ import "../internal/unit+ability";
4
6
  import { Ability } from "../internal/ability";
5
7
  import { AbilityTypeId } from "../object-data/entry/ability-type";
6
8
  import { Widget } from "../../core/types/widget";
@@ -25,16 +27,21 @@ export declare abstract class AbilityBehavior<Parameters extends {
25
27
  get unit(): Unit | undefined;
26
28
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
27
29
  protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
28
- protected flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
29
- protected flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
30
- protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
31
- protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
- protected flashSpecialEffect(...args: [
30
+ protected getDuration(widget: Widget): number;
31
+ flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
32
+ flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
33
+ flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
34
+ flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
35
+ flashSpecialEffect(...args: [
33
36
  ...pointOrWidget: [x: number, y: number] | [widget: Widget],
34
37
  ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]
35
38
  ]): void;
36
39
  private static MissileLaunchConfig;
37
40
  private get missileLaunchConfig();
41
+ protected launchMissile(source: Unit, ...args: [
42
+ ...pointOrWidget: [x: number, y: number] | [widget: Unit /** TODO: support Widget */],
43
+ ...parameters: NonNullable<Parameters["missileParameters"]>
44
+ ]): void;
38
45
  protected onCreate(): void;
39
46
  onValueChange(_value: ReadonlySubscribableAbilityDependentValue<string | number | boolean>): void;
40
47
  onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
@@ -42,6 +49,12 @@ export declare abstract class AbilityBehavior<Parameters extends {
42
49
  onUnitLoseAbility(_unit: Unit): void;
43
50
  onCommand(caster: Unit, orderTypeStringId: string): void;
44
51
  onCastingStart(caster: Unit): void;
52
+ onWidgetTargetCastingStart(caster: Unit, target: Widget): void;
53
+ onUnitTargetCastingStart(caster: Unit, target: Unit): void;
54
+ onItemTargetCastingStart(caster: Unit, target: Item): void;
55
+ onDestructibleTargetCastingStart(caster: Unit, target: Destructable): void;
56
+ onPointTargetCastingStart(caster: Unit, x: number, y: number): void;
57
+ onNoTargetCastingStart(caster: Unit): void;
45
58
  onCastingFinish(caster: Unit): void;
46
59
  onChannelingStart(caster: Unit): void;
47
60
  onWidgetTargetChannelingStart(caster: Unit, target: Widget): void;
@@ -7,29 +7,77 @@ 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")
15
18
  local Effect = ____effect.Effect
16
19
  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
21
+ local CASTER_EFFECT_COUNT_ABILITY_INTEGER_FIELD = ____ability.CASTER_EFFECT_COUNT_ABILITY_INTEGER_FIELD
18
22
  local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
19
23
  local CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
24
+ local CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD
25
+ local DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD
26
+ local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD
20
27
  local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
21
28
  local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
22
29
  local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
23
30
  local MISSILE_SPEED_ABILITY_INTEGER_FIELD = ____ability.MISSILE_SPEED_ABILITY_INTEGER_FIELD
24
31
  local SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD = ____ability.SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD
25
32
  local SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
33
+ local TARGET_EFFECT_COUNT_ABILITY_INTEGER_FIELD = ____ability.TARGET_EFFECT_COUNT_ABILITY_INTEGER_FIELD
34
+ local TARGET_EFFECT_FIFTH_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_FIFTH_ATTACHMENT_POINT_STRING_FIELD
26
35
  local TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
36
+ local TARGET_EFFECT_FOURTH_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_FOURTH_ATTACHMENT_POINT_STRING_FIELD
27
37
  local TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
38
+ local TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD
39
+ local TARGET_EFFECT_SIXTH_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_SIXTH_ATTACHMENT_POINT_STRING_FIELD
40
+ local TARGET_EFFECT_THIRD_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_THIRD_ATTACHMENT_POINT_STRING_FIELD
28
41
  local ____ability = require("engine.object-field.ability")
29
42
  local AbilityField = ____ability.AbilityField
30
43
  local AbilityLevelField = ____ability.AbilityLevelField
31
44
  local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
45
+ local ____missile = require("core.types.missile")
46
+ local Missile = ____missile.Missile
47
+ local CASTER_EFFECT_ATTACHMENT_POINT_STRING_FIELDS = {CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD, CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD}
48
+ local TARGET_EFFECT_ATTACHMENT_POINT_STRING_FIELDS = {
49
+ TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD,
50
+ TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD,
51
+ TARGET_EFFECT_THIRD_ATTACHMENT_POINT_STRING_FIELD,
52
+ TARGET_EFFECT_FOURTH_ATTACHMENT_POINT_STRING_FIELD,
53
+ TARGET_EFFECT_FIFTH_ATTACHMENT_POINT_STRING_FIELD,
54
+ TARGET_EFFECT_SIXTH_ATTACHMENT_POINT_STRING_FIELD
55
+ }
56
+ --- Flashes every preset of an effect preset list (caster/target effects): each model at
57
+ -- its own attachment point. The effect count field limits the list; at least the first
58
+ -- model is always flashed, as abilities without the count set expect.
59
+ local function flashEffectPresets(ability, modelPathsField, attachmentPointFields, effectCountField, widget, ...)
60
+ local count = math.min(
61
+ math.max(
62
+ effectCountField:getValue(ability),
63
+ 1
64
+ ),
65
+ #attachmentPointFields
66
+ )
67
+ for i = 0, count - 1 do
68
+ local modelPath = modelPathsField:getValue(ability, i)
69
+ if modelPath ~= "" then
70
+ local attachmentPoint = attachmentPointFields[i + 1]:getValue(ability)
71
+ Effect:flash(modelPath, widget, attachmentPoint ~= "" and attachmentPoint or "origin", ...)
72
+ end
73
+ end
74
+ end
32
75
  local createBehaviorFunctionsByAbilityTypeId = {}
76
+ local function invokeOnMissileArrival(_missile, success, abilityBehavior, ...)
77
+ if success then
78
+ abilityBehavior:onMissileArrival(...)
79
+ end
80
+ end
33
81
  local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
34
82
  local function createUnitEventListener(key)
35
83
  return function(unit, ability, ...)
@@ -105,21 +153,31 @@ end
105
153
  function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
106
154
  return resolveCurrentAbilityDependentValue(self.ability, value)
107
155
  end
156
+ function AbilityBehavior.prototype.getDuration(self, widget)
157
+ if __TS__InstanceOf(widget, Unit) then
158
+ if widget.isHero or widget:getField(UNIT_IF_LEVEL) >= 6 or widget:hasClassification(UnitClassification.RESISTANT) then
159
+ return self:resolveCurrentAbilityDependentValue(DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD)
160
+ end
161
+ end
162
+ return self:resolveCurrentAbilityDependentValue(DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD)
163
+ end
108
164
  function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
109
- local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
110
- Effect:flash(
111
- CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
165
+ flashEffectPresets(
166
+ self.ability,
167
+ CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD,
168
+ CASTER_EFFECT_ATTACHMENT_POINT_STRING_FIELDS,
169
+ CASTER_EFFECT_COUNT_ABILITY_INTEGER_FIELD,
112
170
  widget,
113
- attachmentPoint ~= "" and attachmentPoint or "origin",
114
171
  ...
115
172
  )
116
173
  end
117
174
  function AbilityBehavior.prototype.flashTargetEffect(self, widget, ...)
118
- local attachmentPoint = TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
119
- Effect:flash(
120
- TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
175
+ flashEffectPresets(
176
+ self.ability,
177
+ TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD,
178
+ TARGET_EFFECT_ATTACHMENT_POINT_STRING_FIELDS,
179
+ TARGET_EFFECT_COUNT_ABILITY_INTEGER_FIELD,
121
180
  widget,
122
- attachmentPoint ~= "" and attachmentPoint or "origin",
123
181
  ...
124
182
  )
125
183
  end
@@ -159,6 +217,28 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParame
159
217
  )
160
218
  end
161
219
  end
220
+ function AbilityBehavior.prototype.launchMissile(self, source, xOrWidget, yOrParameter, ...)
221
+ if type(xOrWidget) ~= "number" then
222
+ Missile:launch(
223
+ self.missileLaunchConfig,
224
+ source,
225
+ xOrWidget,
226
+ invokeOnMissileArrival,
227
+ self,
228
+ yOrParameter,
229
+ ...
230
+ )
231
+ else
232
+ Missile:launch(
233
+ self.missileLaunchConfig,
234
+ source,
235
+ vec2(xOrWidget, yOrParameter),
236
+ invokeOnMissileArrival,
237
+ self,
238
+ ...
239
+ )
240
+ end
241
+ end
162
242
  function AbilityBehavior.prototype.onCreate(self)
163
243
  end
164
244
  function AbilityBehavior.prototype.onValueChange(self, _value)
@@ -173,6 +253,18 @@ function AbilityBehavior.prototype.onCommand(self, caster, orderTypeStringId)
173
253
  end
174
254
  function AbilityBehavior.prototype.onCastingStart(self, caster)
175
255
  end
256
+ function AbilityBehavior.prototype.onWidgetTargetCastingStart(self, caster, target)
257
+ end
258
+ function AbilityBehavior.prototype.onUnitTargetCastingStart(self, caster, target)
259
+ end
260
+ function AbilityBehavior.prototype.onItemTargetCastingStart(self, caster, target)
261
+ end
262
+ function AbilityBehavior.prototype.onDestructibleTargetCastingStart(self, caster, target)
263
+ end
264
+ function AbilityBehavior.prototype.onPointTargetCastingStart(self, caster, x, y)
265
+ end
266
+ function AbilityBehavior.prototype.onNoTargetCastingStart(self, caster)
267
+ end
176
268
  function AbilityBehavior.prototype.onCastingFinish(self, caster)
177
269
  end
178
270
  function AbilityBehavior.prototype.onChannelingStart(self, caster)
@@ -257,6 +349,12 @@ __TS__SetDescriptor(
257
349
  Unit.abilityGainedEvent:addListener(createUnitEventListener("onUnitGainAbility"))
258
350
  Unit.abilityLostEvent:addListener(createUnitEventListener("onUnitLoseAbility"))
259
351
  Unit.abilityCastingStartEvent:addListener(createUnitEventListener("onCastingStart"))
352
+ Unit.abilityWidgetTargetCastingStartEvent:addListener(createUnitEventListener("onWidgetTargetCastingStart"))
353
+ Unit.abilityUnitTargetCastingStartEvent:addListener(createUnitEventListener("onUnitTargetCastingStart"))
354
+ Unit.abilityItemTargetCastingStartEvent:addListener(createUnitEventListener("onItemTargetCastingStart"))
355
+ Unit.abilityDestructibleTargetCastingStartEvent:addListener(createUnitEventListener("onDestructibleTargetCastingStart"))
356
+ Unit.abilityPointTargetCastingStartEvent:addListener(createUnitEventListener("onPointTargetCastingStart"))
357
+ Unit.abilityNoTargetCastingStartEvent:addListener(createUnitEventListener("onNoTargetCastingStart"))
260
358
  Unit.abilityCastingFinishEvent:addListener(createUnitEventListener("onCastingFinish"))
261
359
  Unit.abilityChannelingStartEvent:addListener(createUnitEventListener("onChannelingStart"))
262
360
  Unit.abilityWidgetTargetChannelingStartEvent:addListener(createUnitEventListener("onWidgetTargetChannelingStart"))
@@ -287,6 +385,19 @@ end)
287
385
  AbilityLevelField.valueChangeEvent:addListener(function(ability, field)
288
386
  ____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
289
387
  end)
388
+ local function checkBehaviorOnLevelChange(behavior)
389
+ local subscribedValues = subscribedValuesByAbilityBehavior[behavior]
390
+ if subscribedValues ~= nil then
391
+ for value in pairs(subscribedValues) do
392
+ if __TS__InstanceOf(value, AbilityLevelField) then
393
+ behavior:onValueChange(value)
394
+ end
395
+ end
396
+ end
397
+ end
398
+ Unit.abilityLevelChangedEvent:addListener(function(_, ability)
399
+ ____exports.AbilityBehavior:forAll(ability, checkBehaviorOnLevelChange)
400
+ end)
290
401
  Ability.onCreate:addListener(function(ability)
291
402
  local createBehaviorFunctions = createBehaviorFunctionsByAbilityTypeId[ability.typeId]
292
403
  if createBehaviorFunctions ~= nil then
@@ -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