warscript 0.0.1-dev.363d29d → 0.0.1-dev.37ce2c3

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 (436) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/dummy.lua +4 -2
  6. package/core/types/effect.d.ts +12 -4
  7. package/core/types/effect.lua +67 -104
  8. package/core/types/frame.d.ts +16 -2
  9. package/core/types/frame.lua +141 -77
  10. package/core/types/handle.lua +9 -9
  11. package/core/types/item.d.ts +1 -0
  12. package/core/types/item.lua +1 -0
  13. package/core/types/player.d.ts +18 -1
  14. package/core/types/player.lua +76 -26
  15. package/core/types/playerCamera.d.ts +2 -0
  16. package/core/types/playerCamera.lua +123 -5
  17. package/core/types/playerColor.lua +4 -3
  18. package/core/types/sound.d.ts +18 -25
  19. package/core/types/sound.lua +113 -33
  20. package/core/types/tileCell.d.ts +18 -3
  21. package/core/types/tileCell.lua +108 -0
  22. package/core/types/timer.d.ts +9 -8
  23. package/core/types/timer.lua +45 -23
  24. package/core/types/unit.d.ts +5 -0
  25. package/core/types/unit.lua +5 -0
  26. package/core/util.d.ts +3 -1
  27. package/core/util.lua +115 -4
  28. package/decl/native.d.ts +1719 -964
  29. package/destroyable.d.ts +1 -0
  30. package/destroyable.lua +9 -0
  31. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  32. package/engine/ability-type-extended-tooltip.lua +44 -0
  33. package/engine/behavior.d.ts +14 -1
  34. package/engine/behavior.lua +230 -70
  35. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  36. package/engine/behaviour/ability/apply-buff.lua +36 -4
  37. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  38. package/engine/behaviour/ability/damage.d.ts +13 -3
  39. package/engine/behaviour/ability/damage.lua +41 -49
  40. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  41. package/engine/behaviour/ability/emulate-impact.lua +96 -7
  42. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  43. package/engine/behaviour/ability/instant-impact.lua +17 -2
  44. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  45. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  46. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  47. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  48. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  49. package/engine/behaviour/ability/restore-mana.lua +6 -6
  50. package/engine/behaviour/ability.d.ts +23 -5
  51. package/engine/behaviour/ability.lua +156 -27
  52. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  53. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  54. package/engine/behaviour/unit.d.ts +41 -2
  55. package/engine/behaviour/unit.lua +270 -6
  56. package/engine/buff.d.ts +130 -59
  57. package/engine/buff.lua +638 -307
  58. package/engine/index.d.ts +2 -1
  59. package/engine/internal/ability.d.ts +14 -1
  60. package/engine/internal/ability.lua +113 -44
  61. package/engine/internal/item/ability.lua +63 -11
  62. package/engine/internal/item/fields.d.ts +12 -0
  63. package/engine/internal/item/fields.lua +33 -0
  64. package/engine/internal/item/owner-cache.d.ts +5 -0
  65. package/engine/internal/item/owner-cache.lua +4 -0
  66. package/engine/internal/item+owner.d.ts +2 -0
  67. package/engine/internal/item+owner.lua +37 -8
  68. package/engine/internal/item.d.ts +34 -18
  69. package/engine/internal/item.lua +308 -102
  70. package/engine/internal/mechanics/ability-duration.lua +1 -1
  71. package/engine/internal/mechanics/cast-ability.lua +6 -3
  72. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  73. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  74. package/engine/internal/misc/frame-coordinates.lua +21 -0
  75. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  76. package/engine/internal/misc/get-terrain-z.lua +11 -0
  77. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  78. package/engine/internal/misc/player-local-handle.lua +5 -0
  79. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  80. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  81. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  82. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  83. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  84. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  85. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  86. package/engine/internal/object-data/evasion-probability.lua +16 -0
  87. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  88. package/engine/internal/object-data/health-bonus.lua +16 -0
  89. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  90. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  91. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  92. package/engine/internal/object-data/mana-bonus.lua +16 -0
  93. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  94. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  95. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  96. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  97. package/engine/internal/unit/ability.d.ts +35 -0
  98. package/engine/internal/unit/ability.lua +114 -9
  99. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  100. package/engine/internal/unit/add-item-to-slot.lua +57 -14
  101. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  102. package/engine/internal/unit/allowed-targets.lua +9 -1
  103. package/engine/internal/unit/appearance.d.ts +15 -0
  104. package/engine/internal/unit/appearance.lua +85 -0
  105. package/engine/internal/unit/attributes.d.ts +17 -0
  106. package/engine/internal/unit/attributes.lua +46 -0
  107. package/engine/internal/unit/bonus.d.ts +19 -0
  108. package/engine/internal/unit/bonus.lua +130 -8
  109. package/engine/internal/unit/buff.d.ts +2 -2
  110. package/engine/internal/unit/buff.lua +34 -19
  111. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  112. package/engine/internal/unit/equipment-inventory.lua +233 -0
  113. package/engine/internal/unit/expiration-timer.lua +1 -1
  114. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  115. package/engine/internal/unit/extended-inventory.lua +99 -0
  116. package/engine/internal/unit/fly-height.d.ts +7 -0
  117. package/engine/internal/unit/fly-height.lua +20 -0
  118. package/engine/internal/unit/ignore-events-items.lua +10 -1
  119. package/engine/internal/unit/interrupts.d.ts +12 -0
  120. package/engine/internal/unit/interrupts.lua +28 -0
  121. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  122. package/engine/internal/unit/inventory.lua +87 -0
  123. package/engine/internal/unit/item-container.d.ts +25 -0
  124. package/engine/internal/unit/item-container.lua +11 -0
  125. package/engine/internal/unit/item-order-events.d.ts +17 -0
  126. package/engine/internal/unit/item-order-events.lua +67 -0
  127. package/engine/internal/unit/item-slot.d.ts +27 -0
  128. package/engine/internal/unit/item-slot.lua +92 -0
  129. package/engine/internal/unit/main-selected.lua +12 -27
  130. package/engine/internal/unit/order.d.ts +20 -0
  131. package/engine/internal/unit/order.lua +136 -0
  132. package/engine/internal/unit/range-event.d.ts +12 -0
  133. package/engine/internal/unit/range-event.lua +90 -0
  134. package/engine/internal/unit/scale.d.ts +7 -0
  135. package/engine/internal/unit/scale.lua +20 -0
  136. package/engine/internal/unit+ability.d.ts +2 -1
  137. package/engine/internal/unit+ability.lua +83 -3
  138. package/engine/internal/unit+bonus.lua +3 -3
  139. package/engine/internal/unit+damage.d.ts +11 -11
  140. package/engine/internal/unit+damage.lua +43 -14
  141. package/engine/internal/unit+rally.lua +9 -31
  142. package/engine/internal/unit+spellSteal.lua +1 -2
  143. package/engine/internal/unit-missile-data.lua +58 -32
  144. package/engine/internal/unit-missile-launch.lua +65 -27
  145. package/engine/internal/unit.d.ts +45 -34
  146. package/engine/internal/unit.lua +408 -322
  147. package/engine/lightning.d.ts +12 -5
  148. package/engine/lightning.lua +48 -14
  149. package/engine/local-client.d.ts +28 -0
  150. package/engine/local-client.lua +324 -54
  151. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  152. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  153. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  154. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  155. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  156. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  157. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  158. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  159. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  160. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  161. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  162. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  163. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  164. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  165. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  166. package/engine/object-data/auxiliary/item-class.lua +2 -0
  167. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  168. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  169. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  170. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  171. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  172. package/engine/object-data/auxiliary/order-type.lua +2 -0
  173. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  174. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  175. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  176. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  177. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  178. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  179. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  180. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  181. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  182. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  183. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  184. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  185. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  186. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  187. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  188. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  189. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  190. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  191. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  192. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  193. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  194. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  195. package/engine/object-data/entry/ability-type/blank-configurable.lua +14 -3
  196. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  197. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  198. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  199. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  200. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  201. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  202. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  203. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  204. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  205. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  206. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  207. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  208. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  209. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  210. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  211. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  212. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  213. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  214. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  215. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  216. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  217. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  218. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  219. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  220. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  221. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  222. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  223. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  224. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  225. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  226. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  227. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  228. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  229. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  230. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  231. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  232. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  233. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  234. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  235. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  236. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  237. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  238. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  239. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  240. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  241. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  242. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  243. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  244. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  245. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  246. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  247. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  248. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  249. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  250. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  251. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  252. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  253. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  254. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  255. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  256. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  257. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  258. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  259. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  260. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  261. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  262. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  263. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  264. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  265. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  266. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  267. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  268. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  269. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  270. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  271. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  272. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  273. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  274. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  275. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  276. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  277. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  278. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  279. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  280. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  281. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  282. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  283. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  284. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  285. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  286. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  287. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  288. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  289. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  290. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  291. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  292. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  293. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  294. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  295. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  296. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  297. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  298. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  299. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  300. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  301. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  302. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  303. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  304. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  305. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  306. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  307. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  308. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  309. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  310. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  311. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  312. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  313. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  314. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  315. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  316. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  317. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  318. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  319. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  320. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  321. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  322. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  323. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  324. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  325. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  326. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  327. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  328. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  329. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  330. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  331. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  332. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  333. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  334. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  335. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  336. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  337. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  338. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  339. package/engine/object-data/entry/ability-type/web.lua +52 -0
  340. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  341. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  342. package/engine/object-data/entry/ability-type.d.ts +48 -21
  343. package/engine/object-data/entry/ability-type.lua +371 -35
  344. package/engine/object-data/entry/buff-type/applicable.lua +131 -139
  345. package/engine/object-data/entry/buff-type.d.ts +10 -12
  346. package/engine/object-data/entry/buff-type.lua +39 -29
  347. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  348. package/engine/object-data/entry/destructible-type.lua +181 -0
  349. package/engine/object-data/entry/item-type.d.ts +18 -3
  350. package/engine/object-data/entry/item-type.lua +88 -4
  351. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  352. package/engine/object-data/entry/lightning-type.lua +1 -1
  353. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  354. package/engine/object-data/entry/sound-preset.lua +140 -0
  355. package/engine/object-data/entry/unit-type.d.ts +81 -6
  356. package/engine/object-data/entry/unit-type.lua +606 -93
  357. package/engine/object-data/entry/upgrade.d.ts +2 -2
  358. package/engine/object-data/entry/upgrade.lua +4 -4
  359. package/engine/object-data/entry.d.ts +21 -14
  360. package/engine/object-data/entry.lua +68 -32
  361. package/engine/object-field/ability.d.ts +4 -4
  362. package/engine/object-field/ability.lua +9 -8
  363. package/engine/object-field/item.d.ts +22 -0
  364. package/engine/object-field/item.lua +118 -0
  365. package/engine/object-field/unit.d.ts +72 -3
  366. package/engine/object-field/unit.lua +268 -7
  367. package/engine/object-field.d.ts +26 -7
  368. package/engine/object-field.lua +360 -119
  369. package/engine/random.d.ts +10 -0
  370. package/engine/random.lua +21 -0
  371. package/engine/standard/entries/ability-type.d.ts +3102 -7
  372. package/engine/standard/entries/ability-type.lua +0 -6
  373. package/engine/standard/entries/buff-type.d.ts +48 -0
  374. package/engine/standard/entries/buff-type.lua +46 -0
  375. package/engine/standard/entries/item-type.d.ts +1299 -0
  376. package/engine/standard/entries/item-type.lua +2 -0
  377. package/engine/standard/entries/lightning-type.d.ts +42 -15
  378. package/engine/standard/entries/lightning-type.lua +0 -14
  379. package/engine/standard/entries/sound-preset.d.ts +10 -0
  380. package/engine/standard/entries/sound-preset.lua +10 -0
  381. package/engine/standard/entries/unit-type.d.ts +5 -0
  382. package/engine/standard/entries/unit-type.lua +5 -0
  383. package/engine/standard/fields/ability.d.ts +4 -4
  384. package/engine/standard/fields/ability.lua +4 -4
  385. package/engine/standard/fields/item.d.ts +4 -0
  386. package/engine/standard/fields/item.lua +6 -0
  387. package/engine/standard/fields/unit.d.ts +12 -0
  388. package/engine/standard/fields/unit.lua +20 -0
  389. package/engine/synchronization.d.ts +11 -0
  390. package/engine/synchronization.lua +77 -0
  391. package/engine/text-tag.d.ts +36 -2
  392. package/engine/text-tag.lua +250 -10
  393. package/engine/unit.d.ts +11 -1
  394. package/engine/unit.lua +11 -1
  395. package/event.d.ts +1 -1
  396. package/lualib_bundle.lua +1 -1
  397. package/math.d.ts +2 -0
  398. package/math.lua +14 -0
  399. package/net/socket.lua +1 -1
  400. package/network.lua +25 -1
  401. package/objutil/buff.lua +12 -11
  402. package/objutil/object.lua +1 -1
  403. package/objutil/unit.lua +8 -0
  404. package/operation.d.ts +8 -1
  405. package/operation.lua +38 -18
  406. package/package.json +3 -23
  407. package/patch-lua.lua +15 -0
  408. package/patch-lualib.lua +1 -1
  409. package/utility/arrays.d.ts +9 -1
  410. package/utility/arrays.lua +28 -0
  411. package/utility/callback-array.d.ts +17 -0
  412. package/utility/callback-array.lua +61 -0
  413. package/utility/functions.d.ts +8 -0
  414. package/utility/functions.lua +13 -0
  415. package/utility/linked-map.d.ts +35 -0
  416. package/utility/linked-map.lua +107 -0
  417. package/utility/linked-set.d.ts +5 -1
  418. package/utility/linked-set.lua +49 -1
  419. package/utility/lua-maps.d.ts +15 -2
  420. package/utility/lua-maps.lua +53 -2
  421. package/utility/lua-sets.d.ts +2 -0
  422. package/utility/lua-sets.lua +7 -0
  423. package/utility/random.d.ts +102 -0
  424. package/utility/random.lua +273 -0
  425. package/utility/records.lua +20 -1
  426. package/utility/reflection.lua +11 -7
  427. package/utility/types.d.ts +3 -0
  428. package/utility/unordered-map.d.ts +27 -0
  429. package/utility/unordered-map.lua +99 -0
  430. package/core/types/order.d.ts +0 -25
  431. package/core/types/order.lua +0 -55
  432. package/engine/internal/unit/item.lua +0 -78
  433. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  434. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  435. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  436. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -0,0 +1,46 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____unit = require("engine.internal.unit")
5
+ local Unit = ____unit.Unit
6
+ local ____unit = require("engine.standard.fields.unit")
7
+ local AGILITY_UNIT_FIELD = ____unit.AGILITY_UNIT_FIELD
8
+ local INTELLIGENCE_UNIT_FIELD = ____unit.INTELLIGENCE_UNIT_FIELD
9
+ local STRENGTH_UNIT_FIELD = ____unit.STRENGTH_UNIT_FIELD
10
+ __TS__ObjectDefineProperty(
11
+ Unit.prototype,
12
+ "strengthBase",
13
+ {
14
+ get = function(self)
15
+ return STRENGTH_UNIT_FIELD:getValue(self)
16
+ end,
17
+ set = function(self, value)
18
+ STRENGTH_UNIT_FIELD:setValue(self, value)
19
+ end
20
+ }
21
+ )
22
+ __TS__ObjectDefineProperty(
23
+ Unit.prototype,
24
+ "agilityBase",
25
+ {
26
+ get = function(self)
27
+ return AGILITY_UNIT_FIELD:getValue(self)
28
+ end,
29
+ set = function(self, value)
30
+ AGILITY_UNIT_FIELD:setValue(self, value)
31
+ end
32
+ }
33
+ )
34
+ __TS__ObjectDefineProperty(
35
+ Unit.prototype,
36
+ "intelligenceBase",
37
+ {
38
+ get = function(self)
39
+ return INTELLIGENCE_UNIT_FIELD:getValue(self)
40
+ end,
41
+ set = function(self, value)
42
+ INTELLIGENCE_UNIT_FIELD:setValue(self, value)
43
+ end
44
+ }
45
+ )
46
+ return ____exports
@@ -5,12 +5,18 @@ export type UnitBonusId<Brand extends string = any> = number & {
5
5
  readonly __unitBonusId: unique symbol;
6
6
  readonly __unitBonusIdBrand: Brand;
7
7
  };
8
+ export type UnitMaxHealthBonusId = UnitBonusId<"maxHealth">;
9
+ export type UnitMaxManaBonusId = UnitBonusId<"maxMana">;
8
10
  export type UnitArmorBonusId = UnitBonusId<"armor">;
9
11
  export type UnitAttackSpeedFactorBonusId = UnitBonusId<"attackSpeedFactor">;
10
12
  export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
11
13
  export type UnitAutoAttackDamageBonusId = UnitBonusId<"autoAttackDamage">;
12
14
  export type UnitDamageFactorBonusId = UnitBonusId<"damageFactor">;
13
15
  export type UnitReceivedDamageFactorBonusId = UnitBonusId<"receivedDamageFactor">;
16
+ export type UnitReturnedMeleeDamageFactorBonusId = UnitBonusId<"returnedMeleeDamageFactor">;
17
+ export type UnitEvasionProbabilityBonusId = UnitBonusId<"evasionProbability">;
18
+ export type UnitManaRegenerationRateFactorBonusId = UnitBonusId<"manaRegenerationRateFactor">;
19
+ export type UnitHealthRegenerationRateBonusId = UnitBonusId<"healthRegenerationRate">;
14
20
  export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
15
21
  abilityTypeId: AbilityTypeId;
16
22
  field: jabilityintegerlevelfield;
@@ -22,18 +28,31 @@ export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
22
28
  } | {
23
29
  abilityTypeId?: undefined;
24
30
  valueByUnit: LuaMap<Unit, number>;
31
+ apply?: undefined;
32
+ } | {
33
+ abilityTypeId?: undefined;
34
+ valueByUnit?: undefined;
35
+ apply: (this: void, unitHandle: junit, value: number) => void;
25
36
  }) & {
26
37
  reduce: (this: void, array: number[]) => number;
27
38
  initialValue: number;
28
39
  readonly __unitBonusTypeId?: Id;
29
40
  };
30
41
  export declare namespace UnitBonusType {
42
+ const HEALTH: UnitBonusType<UnitMaxHealthBonusId>;
43
+ const MANA: UnitBonusType<UnitMaxManaBonusId>;
31
44
  const ARMOR: UnitBonusType<UnitArmorBonusId>;
32
45
  const ATTACK_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
33
46
  const MOVEMENT_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
34
47
  const AUTO_ATTACK_DAMAGE: UnitBonusType<UnitAutoAttackDamageBonusId>;
35
48
  const DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
36
49
  const RECEIVED_DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
50
+ /** The factor of melee attack damage returned to the attacker, as Spiked Carapace. */
51
+ const RETURNED_MELEE_DAMAGE_FACTOR: UnitBonusType<UnitReturnedMeleeDamageFactorBonusId>;
52
+ const EVASION_PROBABILITY: UnitBonusType<UnitEvasionProbabilityBonusId>;
53
+ const MANA_REGENERATION_RATE_FACTOR: UnitBonusType<UnitManaRegenerationRateFactorBonusId>;
54
+ /** Supported range: -1000 to 1000; the total is clamped to it. */
55
+ const HEALTH_REGENERATION_RATE: UnitBonusType<UnitHealthRegenerationRateBonusId>;
37
56
  }
38
57
  export declare const addUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
39
58
  export declare const removeUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => boolean;
@@ -1,11 +1,14 @@
1
1
  local ____exports = {}
2
+ local applyAbilityBonus, applyHealthRegenerationRateBonus
2
3
  local ____unit = require("engine.internal.unit")
3
4
  local Unit = ____unit.Unit
4
- local ____armor_2Dincrease = require("engine.internal.object-data.armor-increase")
5
- local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dincrease.ARMOR_BONUS_DUMMY_ABILITY_FIELD
6
- local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dincrease.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
5
+ local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
6
+ local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_FIELD
7
+ local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
7
8
  local ____utility = require("engine.internal.utility")
8
9
  local addInternalAbility = ____utility.addInternalAbility
10
+ local ____unit_2Dability_2Dlevel_2Dnatives = require("engine.internal.misc.unit-ability-level-natives")
11
+ local rawSetUnitAbilityLevel = ____unit_2Dability_2Dlevel_2Dnatives.rawSetUnitAbilityLevel
9
12
  local ____arrays = require("utility.arrays")
10
13
  local product = ____arrays.product
11
14
  local sum = ____arrays.sum
@@ -21,11 +24,53 @@ local AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID = ____auto_2Dattack_2Dda
21
24
  local ____movement_2Dspeed_2Dincrease_2Dfactor = require("engine.internal.object-data.movement-speed-increase-factor")
22
25
  local MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD
23
26
  local MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
27
+ local ____evasion_2Dprobability = require("engine.internal.object-data.evasion-probability")
28
+ local EVASION_PROBABILITY_ABILITY_FIELD = ____evasion_2Dprobability.EVASION_PROBABILITY_ABILITY_FIELD
29
+ local EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID = ____evasion_2Dprobability.EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID
30
+ local ____health_2Dbonus = require("engine.internal.object-data.health-bonus")
31
+ local HEALTH_BONUS_DUMMY_ABILITY_FIELD = ____health_2Dbonus.HEALTH_BONUS_DUMMY_ABILITY_FIELD
32
+ local HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID = ____health_2Dbonus.HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID
33
+ local ____mana_2Dbonus = require("engine.internal.object-data.mana-bonus")
34
+ local MANA_BONUS_DUMMY_ABILITY_FIELD = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILITY_FIELD
35
+ local MANA_BONUS_DUMMY_ABILITY_TYPE_ID = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILITY_TYPE_ID
36
+ local ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor = require("engine.internal.object-data.mana-regeneration-rate-increase-factor")
37
+ local MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD
38
+ local MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
39
+ local ____health_2Dregeneration_2Drate_2Dincrease = require("engine.internal.object-data.health-regeneration-rate-increase")
40
+ local FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD = ____health_2Dregeneration_2Drate_2Dincrease.FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD
41
+ local FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID = ____health_2Dregeneration_2Drate_2Dincrease.FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID
42
+ local HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID = ____health_2Dregeneration_2Drate_2Dincrease.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID
43
+ local HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE = ____health_2Dregeneration_2Drate_2Dincrease.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE
44
+ local HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS = ____health_2Dregeneration_2Drate_2Dincrease.HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS
45
+ local ____returned_2Dmelee_2Ddamage_2Dfactor = require("engine.internal.object-data.returned-melee-damage-factor")
46
+ local RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD = ____returned_2Dmelee_2Ddamage_2Dfactor.RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD
47
+ local RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____returned_2Dmelee_2Ddamage_2Dfactor.RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID
24
48
  local damageFactorByUnit = {}
25
49
  local receivedDamageFactorByUnit = {}
50
+ local function atLeastOnceProbability(array)
51
+ local oppositeEventProbability = 1
52
+ for i = 1, #array do
53
+ oppositeEventProbability = oppositeEventProbability * (1 - array[i])
54
+ end
55
+ return 1 - oppositeEventProbability
56
+ end
26
57
  ____exports.UnitBonusType = {}
27
58
  local UnitBonusType = ____exports.UnitBonusType
28
59
  do
60
+ UnitBonusType.HEALTH = {
61
+ abilityTypeId = HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID,
62
+ field = HEALTH_BONUS_DUMMY_ABILITY_FIELD,
63
+ integer = true,
64
+ reduce = sum,
65
+ initialValue = 0
66
+ }
67
+ UnitBonusType.MANA = {
68
+ abilityTypeId = MANA_BONUS_DUMMY_ABILITY_TYPE_ID,
69
+ field = MANA_BONUS_DUMMY_ABILITY_FIELD,
70
+ integer = true,
71
+ reduce = sum,
72
+ initialValue = 0
73
+ }
29
74
  UnitBonusType.ARMOR = {
30
75
  abilityTypeId = ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID,
31
76
  field = ARMOR_BONUS_DUMMY_ABILITY_FIELD,
@@ -56,33 +101,110 @@ do
56
101
  }
57
102
  UnitBonusType.DAMAGE_FACTOR = {reduce = product, valueByUnit = damageFactorByUnit, initialValue = 1}
58
103
  UnitBonusType.RECEIVED_DAMAGE_FACTOR = {reduce = product, valueByUnit = receivedDamageFactorByUnit, initialValue = 1}
104
+ --- The factor of melee attack damage returned to the attacker, as Spiked Carapace.
105
+ UnitBonusType.RETURNED_MELEE_DAMAGE_FACTOR = {
106
+ abilityTypeId = RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID,
107
+ field = RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD,
108
+ integer = false,
109
+ reduce = sum,
110
+ initialValue = 0
111
+ }
112
+ UnitBonusType.EVASION_PROBABILITY = {
113
+ abilityTypeId = EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID,
114
+ field = EVASION_PROBABILITY_ABILITY_FIELD,
115
+ integer = false,
116
+ reduce = atLeastOnceProbability,
117
+ initialValue = 0
118
+ }
119
+ UnitBonusType.MANA_REGENERATION_RATE_FACTOR = {
120
+ abilityTypeId = MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID,
121
+ field = MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD,
122
+ integer = false,
123
+ reduce = sum,
124
+ initialValue = 0
125
+ }
126
+ --- Supported range: -1000 to 1000; the total is clamped to it.
127
+ UnitBonusType.HEALTH_REGENERATION_RATE = {
128
+ apply = function(unitHandle, value) return applyHealthRegenerationRateBonus(unitHandle, value) end,
129
+ reduce = sum,
130
+ initialValue = 0
131
+ }
59
132
  end
60
133
  local bonusesByUnitByBonusType = {}
61
134
  local nextId = 1
135
+ local ceil = math.ceil
136
+ local floor = math.floor
137
+ local max = math.max
138
+ local min = math.min
62
139
  local function processUnitBonus(unit, bonusType, bonusesArray)
63
140
  local unitHandle = unit.handle
64
141
  local totalValue = bonusType.reduce(bonusesArray)
65
142
  local abilityTypeId = bonusType.abilityTypeId
66
143
  if abilityTypeId == nil then
67
144
  local valueByUnit = bonusType.valueByUnit
68
- if totalValue == bonusType.initialValue then
145
+ if valueByUnit == nil then
146
+ bonusType.apply(unitHandle, totalValue)
147
+ elseif totalValue == bonusType.initialValue then
69
148
  valueByUnit[unit] = nil
70
149
  else
71
150
  valueByUnit[unit] = totalValue
72
151
  end
73
152
  return
74
153
  end
75
- if totalValue == bonusType.initialValue then
154
+ applyAbilityBonus(
155
+ unitHandle,
156
+ abilityTypeId,
157
+ bonusType.field,
158
+ bonusType.integer,
159
+ totalValue,
160
+ bonusType.initialValue
161
+ )
162
+ end
163
+ applyAbilityBonus = function(unitHandle, abilityTypeId, field, integer, value, initialValue)
164
+ if value == initialValue then
76
165
  UnitRemoveAbility(unitHandle, abilityTypeId)
77
166
  return
78
167
  end
79
168
  local abilityHandle = checkNotNull(addInternalAbility(unitHandle, abilityTypeId))
80
- check((bonusType.integer and BlzSetAbilityIntegerLevelField or BlzSetAbilityRealLevelField)(abilityHandle, bonusType.field, 0, totalValue))
169
+ check((integer and BlzSetAbilityIntegerLevelField or BlzSetAbilityRealLevelField)(abilityHandle, field, 0, value))
81
170
  BlzSetAbilityIntegerField(abilityHandle, ABILITY_IF_LEVELS, 2)
82
- SetUnitAbilityLevel(unitHandle, abilityTypeId, 2)
83
- SetUnitAbilityLevel(unitHandle, abilityTypeId, 1)
171
+ rawSetUnitAbilityLevel(unitHandle, abilityTypeId, 2)
172
+ rawSetUnitAbilityLevel(unitHandle, abilityTypeId, 1)
84
173
  BlzSetAbilityIntegerField(abilityHandle, ABILITY_IF_LEVELS, 1)
85
174
  end
175
+ local function setInternalAbilityPresence(unitHandle, abilityTypeId, present)
176
+ if present then
177
+ addInternalAbility(unitHandle, abilityTypeId)
178
+ else
179
+ UnitRemoveAbility(unitHandle, abilityTypeId)
180
+ end
181
+ end
182
+ local MINIMUM_HEALTH_REGENERATION_RATE_BONUS = -1000
183
+ local MAXIMUM_HEALTH_REGENERATION_RATE_BONUS = 1000
184
+ applyHealthRegenerationRateBonus = function(unitHandle, value)
185
+ value = max(
186
+ MINIMUM_HEALTH_REGENERATION_RATE_BONUS,
187
+ min(value, MAXIMUM_HEALTH_REGENERATION_RATE_BONUS)
188
+ )
189
+ local integerValue = value < 0 and ceil(value) or floor(value)
190
+ local remainder = integerValue
191
+ setInternalAbilityPresence(unitHandle, HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID, remainder < 0)
192
+ if remainder < 0 then
193
+ remainder = remainder - HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE
194
+ end
195
+ for ____, abilityTypeId in ipairs(HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS) do
196
+ setInternalAbilityPresence(unitHandle, abilityTypeId, remainder % 2 == 1)
197
+ remainder = floor(remainder / 2)
198
+ end
199
+ applyAbilityBonus(
200
+ unitHandle,
201
+ FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID,
202
+ FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD,
203
+ false,
204
+ value - integerValue,
205
+ 0
206
+ )
207
+ end
86
208
  ____exports.addUnitBonus = function(unit, bonusType, value)
87
209
  local bonusesByUnit = bonusesByUnitByBonusType[bonusType]
88
210
  if bonusesByUnit == nil then
@@ -32,7 +32,7 @@ declare module "../unit" {
32
32
  * @param includeAuras Whether to remove aura buffs. Default `true`.
33
33
  * @param autoDispel Unknown. Default `false`.
34
34
  */
35
- removeBuffs(polarity?: BuffPolarity, resistanceType?: BuffResistanceType, includeExpirationTimers?: boolean, includeAuras?: boolean, autoDispel?: boolean): void;
36
- removeBuffs(buffTypeIds: number[]): void;
35
+ removeBuffs(polarity?: BuffPolarity, resistanceType?: BuffResistanceType, includeExpirationTimers?: boolean, includeAuras?: boolean, autoDispel?: boolean): number;
36
+ removeBuffs(buffTypeIds: number[]): number;
37
37
  }
38
38
  }
@@ -1,7 +1,3 @@
1
- local ____lualib = require("lualib_bundle")
2
- local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
3
- local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
4
- local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
5
1
  local ____exports = {}
6
2
  local ____buff = require("engine.buff")
7
3
  local checkBuff = ____buff.checkBuff
@@ -19,7 +15,7 @@ Unit.prototype.hasBuff = function(self, buffTypeId)
19
15
  end
20
16
  Unit.prototype.removeBuff = function(self, buffTypeId)
21
17
  if removeBuff(self.handle, buffTypeId) then
22
- checkBuff(self, buffTypeId)
18
+ checkBuff(self, buffTypeId, false)
23
19
  return true
24
20
  end
25
21
  return false
@@ -46,36 +42,55 @@ Unit.prototype.countBuffs = function(self, polarity, resistanceType, includeExpi
46
42
  )
47
43
  end
48
44
  Unit.prototype.removeBuffs = function(self, polarityOrBuffTypeIds, resistanceType, includeExpirationTimers, includeAuras, autoDispel)
45
+ local handle = self.handle
46
+ local cnt
49
47
  if type(polarityOrBuffTypeIds) == "table" then
50
- local handle = self.handle
48
+ cnt = 0
51
49
  for i = 1, #polarityOrBuffTypeIds do
52
- unitRemoveAbility(handle, polarityOrBuffTypeIds[i])
50
+ cnt = cnt + (unitRemoveAbility(handle, polarityOrBuffTypeIds[i]) and 1 or 0)
53
51
  end
54
52
  else
55
- local ____array_3 = __TS__SparseArrayNew(
56
- self.handle,
57
- (polarityOrBuffTypeIds or 3) & 1 ~= 0,
58
- (polarityOrBuffTypeIds or 3) & 2 ~= 0,
59
- (resistanceType or 0) & 1 ~= 0,
60
- (resistanceType or 0) & 2 ~= 0
61
- )
53
+ local positive = (polarityOrBuffTypeIds or 3) & 1 ~= 0
54
+ local negative = (polarityOrBuffTypeIds or 3) & 2 ~= 0
55
+ local magic = (resistanceType or 0) & 1 ~= 0
56
+ local physical = (resistanceType or 0) & 2 ~= 0
62
57
  local ____includeExpirationTimers_0 = includeExpirationTimers
63
58
  if ____includeExpirationTimers_0 == nil then
64
59
  ____includeExpirationTimers_0 = true
65
60
  end
66
- __TS__SparseArrayPush(____array_3, ____includeExpirationTimers_0)
61
+ includeExpirationTimers = ____includeExpirationTimers_0
67
62
  local ____includeAuras_1 = includeAuras
68
63
  if ____includeAuras_1 == nil then
69
64
  ____includeAuras_1 = true
70
65
  end
71
- __TS__SparseArrayPush(____array_3, ____includeAuras_1)
66
+ includeAuras = ____includeAuras_1
72
67
  local ____autoDispel_2 = autoDispel
73
68
  if ____autoDispel_2 == nil then
74
69
  ____autoDispel_2 = false
75
70
  end
76
- __TS__SparseArrayPush(____array_3, ____autoDispel_2)
77
- unitRemoveBuffsEx(__TS__SparseArraySpread(____array_3))
71
+ autoDispel = ____autoDispel_2
72
+ cnt = unitCountBuffsEx(
73
+ handle,
74
+ positive,
75
+ negative,
76
+ magic,
77
+ physical,
78
+ includeExpirationTimers,
79
+ includeAuras,
80
+ autoDispel
81
+ )
82
+ unitRemoveBuffsEx(
83
+ handle,
84
+ positive,
85
+ negative,
86
+ magic,
87
+ physical,
88
+ includeExpirationTimers,
89
+ includeAuras,
90
+ autoDispel
91
+ )
78
92
  end
79
- checkBuffs(self)
93
+ checkBuffs(self, false)
94
+ return cnt
80
95
  end
81
96
  return ____exports
@@ -0,0 +1,44 @@
1
+ /** @noSelfInFile */
2
+ import { Item } from "../item";
3
+ import { EquipmentSlot } from "../../object-data/auxiliary/equipment-slot";
4
+ import { EquipmentType } from "../../object-data/auxiliary/equipment-type";
5
+ import type { UnitItemContainer } from "./item-container";
6
+ export interface UnitEquipmentInventory extends UnitItemContainer {
7
+ }
8
+ /**
9
+ * A live view of a unit's equipment inventory, indexed by {@link EquipmentSlot}.
10
+ *
11
+ * Equipment slots are typed, so the engine picks the slot itself when equipping: slot assignment frees
12
+ * the requested slot and then equips the item. The only type with two slots is the ring; equipping into
13
+ * ALTERNATE_RING temporarily occupies RING with a filler ring, mirroring the regular inventory's approach.
14
+ */
15
+ export declare class UnitEquipmentInventory {
16
+ constructor(handle: junit);
17
+ equip(item: Item): boolean;
18
+ unequip(item: Item): void;
19
+ unequipSlot(slot: EquipmentSlot): Item | undefined;
20
+ has(item: Item): boolean;
21
+ hasAny(): boolean;
22
+ isSlotEmpty(slot: EquipmentSlot): boolean;
23
+ hasType(type: EquipmentType): boolean;
24
+ canEquipType(type: EquipmentType): boolean;
25
+ findSlot(item: Item): EquipmentSlot | undefined;
26
+ protected __newindex(slot: number, item: Item | undefined): void;
27
+ protected __index(key: string | number): unknown;
28
+ protected __len(): number;
29
+ protected __ipairs(): LuaIterator<LuaMultiReturn<[number, Item | undefined]>, junit>;
30
+ }
31
+ declare module "../unit" {
32
+ interface Unit {
33
+ readonly equipmentInventory: UnitEquipmentInventory;
34
+ }
35
+ namespace Unit {
36
+ const itemEquippedEvent: UnitTriggerEvent<[item: Item]>;
37
+ const itemUnequippedEvent: UnitTriggerEvent<[item: Item]>;
38
+ let itemStackedEvent: UnitTriggerEvent<[
39
+ target: Item,
40
+ source: Item,
41
+ previousTargetCharges: number
42
+ ]>;
43
+ }
44
+ }
@@ -0,0 +1,233 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
5
+ local ____exports = {}
6
+ local ____unit = require("engine.internal.unit")
7
+ local Unit = ____unit.Unit
8
+ local UnitTriggerEvent = ____unit.UnitTriggerEvent
9
+ local ____item = require("engine.internal.item")
10
+ local Item = ____item.Item
11
+ local ____event = require("event")
12
+ local IgnoreEvent = ____event.IgnoreEvent
13
+ local ____dummy = require("objutil.dummy")
14
+ local dummyUnitId = ____dummy.dummyUnitId
15
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
16
+ local ignoreEventsItemTypeIds = ____ignore_2Devents_2Ditems.ignoreEventsItemTypeIds
17
+ local isItemIgnoredInEvents = ____ignore_2Devents_2Ditems.isItemIgnoredInEvents
18
+ local ____blank = require("engine.object-data.entry.item-type.blank")
19
+ local BlankItemType = ____blank.BlankItemType
20
+ local convertEquipmentType = ConvertEquipmentType
21
+ local convertLoadoutSlot = ConvertLoadoutSlot
22
+ local getEquippedItem = GetEquippedItem
23
+ local getStackingItemSource = BlzGetStackingItemSource
24
+ local getStackingItemTarget = BlzGetStackingItemTarget
25
+ local getStackingItemTargetPreviousCharges = BlzGetStackingItemTargetPreviousCharges
26
+ local getTriggerUnit = GetTriggerUnit
27
+ local getUnequippedItem = GetUnequippedItem
28
+ local getUnitTypeId = GetUnitTypeId
29
+ local unitCanEquipItemOfEquipmentType = UnitCanEquipItemOfEquipmentType
30
+ local unitEquipItem = UnitEquipItem
31
+ local unitHasAnyItemEquiped = UnitHasAnyItemEquiped
32
+ local unitHasItemEquipmentOfType = UnitHasItemEquipmentOfType
33
+ local unitHasItemEquipped = UnitHasItemEquipped
34
+ local unitHasLoadoutSlotEmpty = UnitHasLoadoutSlotEmpty
35
+ local unitItemInEquipmentSlot = UnitItemInEquipmentSlot
36
+ local setItemVisible = SetItemVisible
37
+ local unitAddItem = UnitAddItem
38
+ local unitRemoveItem = UnitRemoveItem
39
+ local unitUnequipItem = UnitUnequipItem
40
+ local unitUnequipItemFromSlot = UnitUnequipItemFromSlot
41
+ local ____rawget = _G.rawget
42
+ local rawset = _G.rawset
43
+ local ____type = _G.type
44
+ local EQUIPMENT_INVENTORY_SLOT_COUNT = bj_MAX_EQUIPMENT_INVENTORY
45
+ ---
46
+ -- @internal For use by internal systems only.
47
+ ____exports.RING_FILLER_ITEM_TYPE_ID = compiletime(function()
48
+ local itemType = BlankItemType:create()
49
+ itemType.name = "[Warscript/Dummy] Ring Filler"
50
+ itemType.itemClass = "Equipment"
51
+ itemType.equipmentType = 5
52
+ return itemType.id
53
+ end)
54
+ ignoreEventsItemTypeIds[____exports.RING_FILLER_ITEM_TYPE_ID] = true
55
+ --- Occupies the RING slot while a ring is being equipped into ALTERNATE_RING, since the engine fills the
56
+ -- RING slot first.
57
+ local ringFillerItem = (function()
58
+ local item = CreateItem(____exports.RING_FILLER_ITEM_TYPE_ID, 0, 0)
59
+ setItemVisible(item, false)
60
+ return item
61
+ end)()
62
+ --- Equips an item the unit may not be carrying yet; the engine picks the slot.
63
+ local function unitEquip(unit, item)
64
+ return unitEquipItem(unit, item) or unitAddItem(unit, item) and unitEquipItem(unit, item)
65
+ end
66
+ local handleByUnitEquipmentInventory = setmetatable({}, {__mode = "k"})
67
+ local function unitEquipmentInventoryNext(handle, slot)
68
+ if slot >= EQUIPMENT_INVENTORY_SLOT_COUNT then
69
+ return nil, nil
70
+ end
71
+ return slot + 1, Item:of(unitItemInEquipmentSlot(
72
+ handle,
73
+ convertLoadoutSlot(slot)
74
+ ))
75
+ end
76
+ --- A live view of a unit's equipment inventory, indexed by {@link EquipmentSlot}.
77
+ --
78
+ -- Equipment slots are typed, so the engine picks the slot itself when equipping: slot assignment frees
79
+ -- the requested slot and then equips the item. The only type with two slots is the ring; equipping into
80
+ -- ALTERNATE_RING temporarily occupies RING with a filler ring, mirroring the regular inventory's approach.
81
+ ____exports.UnitEquipmentInventory = __TS__Class()
82
+ local UnitEquipmentInventory = ____exports.UnitEquipmentInventory
83
+ UnitEquipmentInventory.name = "UnitEquipmentInventory"
84
+ function UnitEquipmentInventory.prototype.____constructor(self, handle)
85
+ handleByUnitEquipmentInventory[self] = handle
86
+ end
87
+ function UnitEquipmentInventory.prototype.equip(self, item)
88
+ return unitEquipItem(handleByUnitEquipmentInventory[self], item.handle)
89
+ end
90
+ function UnitEquipmentInventory.prototype.unequip(self, item)
91
+ unitUnequipItem(handleByUnitEquipmentInventory[self], item.handle)
92
+ end
93
+ function UnitEquipmentInventory.prototype.unequipSlot(self, slot)
94
+ return Item:of(unitUnequipItemFromSlot(
95
+ handleByUnitEquipmentInventory[self],
96
+ convertLoadoutSlot(slot)
97
+ ))
98
+ end
99
+ function UnitEquipmentInventory.prototype.has(self, item)
100
+ return unitHasItemEquipped(handleByUnitEquipmentInventory[self], item.handle)
101
+ end
102
+ function UnitEquipmentInventory.prototype.hasAny(self)
103
+ return unitHasAnyItemEquiped(handleByUnitEquipmentInventory[self])
104
+ end
105
+ function UnitEquipmentInventory.prototype.isSlotEmpty(self, slot)
106
+ return unitHasLoadoutSlotEmpty(
107
+ handleByUnitEquipmentInventory[self],
108
+ convertLoadoutSlot(slot)
109
+ )
110
+ end
111
+ function UnitEquipmentInventory.prototype.hasType(self, ____type)
112
+ return unitHasItemEquipmentOfType(
113
+ handleByUnitEquipmentInventory[self],
114
+ convertEquipmentType(____type)
115
+ )
116
+ end
117
+ function UnitEquipmentInventory.prototype.canEquipType(self, ____type)
118
+ return unitCanEquipItemOfEquipmentType(
119
+ handleByUnitEquipmentInventory[self],
120
+ convertEquipmentType(____type)
121
+ )
122
+ end
123
+ function UnitEquipmentInventory.prototype.findSlot(self, item)
124
+ local handle = handleByUnitEquipmentInventory[self]
125
+ for slot = 0, EQUIPMENT_INVENTORY_SLOT_COUNT - 1 do
126
+ if unitItemInEquipmentSlot(
127
+ handle,
128
+ convertLoadoutSlot(slot)
129
+ ) == item.handle then
130
+ return slot
131
+ end
132
+ end
133
+ return nil
134
+ end
135
+ function UnitEquipmentInventory.prototype.__newindex(self, slot, item)
136
+ local handle = handleByUnitEquipmentInventory[self]
137
+ if slot < 1 or slot > EQUIPMENT_INVENTORY_SLOT_COUNT then
138
+ return
139
+ end
140
+ local loadoutSlot = convertLoadoutSlot(slot - 1)
141
+ local previousItem = unitItemInEquipmentSlot(handle, loadoutSlot)
142
+ if previousItem ~= nil and previousItem ~= (item and item.handle) then
143
+ unitUnequipItemFromSlot(handle, loadoutSlot)
144
+ unitRemoveItem(handle, previousItem)
145
+ end
146
+ if item ~= nil then
147
+ local itemHandle = item.handle
148
+ local ringLoadoutSlot = convertLoadoutSlot(4)
149
+ if slot - 1 == 5 and unitHasLoadoutSlotEmpty(handle, ringLoadoutSlot) then
150
+ unitEquip(handle, ringFillerItem)
151
+ unitEquip(handle, itemHandle)
152
+ unitUnequipItemFromSlot(handle, ringLoadoutSlot)
153
+ unitRemoveItem(handle, ringFillerItem)
154
+ setItemVisible(ringFillerItem, false)
155
+ else
156
+ unitEquip(handle, itemHandle)
157
+ end
158
+ end
159
+ end
160
+ function UnitEquipmentInventory.prototype.__index(self, key)
161
+ if ____type(key) == "number" then
162
+ return Item:of(unitItemInEquipmentSlot(
163
+ handleByUnitEquipmentInventory[self],
164
+ convertLoadoutSlot(key - 1)
165
+ ))
166
+ end
167
+ return ____rawget(____exports.UnitEquipmentInventory.prototype, key)
168
+ end
169
+ function UnitEquipmentInventory.prototype.__len(self)
170
+ return EQUIPMENT_INVENTORY_SLOT_COUNT
171
+ end
172
+ function UnitEquipmentInventory.prototype.__ipairs(self)
173
+ return unitEquipmentInventoryNext, handleByUnitEquipmentInventory[self], 0
174
+ end
175
+ __TS__ObjectDefineProperty(
176
+ Unit.prototype,
177
+ "equipmentInventory",
178
+ {get = function(self)
179
+ local equipmentInventory = __TS__New(____exports.UnitEquipmentInventory, self.handle)
180
+ rawset(self, "equipmentInventory", equipmentInventory)
181
+ return equipmentInventory
182
+ end}
183
+ )
184
+ rawset(
185
+ Unit,
186
+ "itemEquippedEvent",
187
+ __TS__New(
188
+ UnitTriggerEvent,
189
+ EVENT_PLAYER_UNIT_EQUIP_ITEM,
190
+ function()
191
+ local unit = getTriggerUnit()
192
+ local item = getEquippedItem()
193
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
194
+ return Unit:of(unit), Item:of(item)
195
+ end
196
+ return IgnoreEvent
197
+ end
198
+ )
199
+ )
200
+ rawset(
201
+ Unit,
202
+ "itemUnequippedEvent",
203
+ __TS__New(
204
+ UnitTriggerEvent,
205
+ EVENT_PLAYER_UNIT_UNEQUIP_ITEM,
206
+ function()
207
+ local unit = getTriggerUnit()
208
+ local item = getUnequippedItem()
209
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
210
+ return Unit:of(unit), Item:of(item)
211
+ end
212
+ return IgnoreEvent
213
+ end
214
+ )
215
+ )
216
+ rawset(
217
+ Unit,
218
+ "itemStackedEvent",
219
+ __TS__New(
220
+ UnitTriggerEvent,
221
+ EVENT_PLAYER_UNIT_STACK_ITEM,
222
+ function()
223
+ local unit = getTriggerUnit()
224
+ local target = getStackingItemTarget()
225
+ local source = getStackingItemSource()
226
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(target) and not isItemIgnoredInEvents(source) then
227
+ return Unit:of(unit), Item:of(target), Item:of(source), getStackingItemTargetPreviousCharges()
228
+ end
229
+ return IgnoreEvent
230
+ end
231
+ )
232
+ )
233
+ return ____exports
@@ -29,7 +29,7 @@ Unit.prototype.removeExpirationTimer = function(self)
29
29
  cancelTimedLife(handle)
30
30
  setWidgetLife(handle, life)
31
31
  end
32
- Unit.onImmediateOrder[orderId("phoenixmorph")]:addListener(
32
+ Unit.onImmediateOrder[852482]:addListener(
33
33
  4,
34
34
  function(unit)
35
35
  unitRemoveAbility(unit.handle, dummyPhoenixMorphAbilityTypeId)