warscript 0.0.1-dev.d750e38 → 0.0.1-dev.d77b529

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 (413) 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 +1 -0
  9. package/core/types/frame.lua +136 -58
  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 +11 -1
  21. package/core/types/tileCell.lua +97 -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 +1718 -964
  29. package/destroyable.d.ts +1 -0
  30. package/destroyable.lua +9 -0
  31. package/engine/behavior.d.ts +14 -1
  32. package/engine/behavior.lua +230 -70
  33. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  34. package/engine/behaviour/ability/apply-buff.lua +36 -4
  35. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  36. package/engine/behaviour/ability/damage.d.ts +13 -3
  37. package/engine/behaviour/ability/damage.lua +41 -49
  38. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  39. package/engine/behaviour/ability/emulate-impact.lua +23 -7
  40. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  41. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  42. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  43. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  44. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  45. package/engine/behaviour/ability/restore-mana.lua +6 -6
  46. package/engine/behaviour/ability.d.ts +17 -5
  47. package/engine/behaviour/ability.lua +97 -24
  48. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  49. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  50. package/engine/behaviour/unit.d.ts +41 -2
  51. package/engine/behaviour/unit.lua +270 -6
  52. package/engine/buff.d.ts +121 -59
  53. package/engine/buff.lua +605 -301
  54. package/engine/index.d.ts +2 -1
  55. package/engine/internal/ability.d.ts +11 -1
  56. package/engine/internal/ability.lua +104 -44
  57. package/engine/internal/item/ability.lua +63 -11
  58. package/engine/internal/item/fields.d.ts +12 -0
  59. package/engine/internal/item/fields.lua +33 -0
  60. package/engine/internal/item/owner-cache.d.ts +5 -0
  61. package/engine/internal/item/owner-cache.lua +4 -0
  62. package/engine/internal/item+owner.d.ts +2 -0
  63. package/engine/internal/item+owner.lua +37 -8
  64. package/engine/internal/item.d.ts +34 -18
  65. package/engine/internal/item.lua +308 -102
  66. package/engine/internal/mechanics/ability-duration.lua +1 -1
  67. package/engine/internal/mechanics/cast-ability.lua +6 -3
  68. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  69. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  70. package/engine/internal/misc/frame-coordinates.lua +21 -0
  71. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  72. package/engine/internal/misc/get-terrain-z.lua +11 -0
  73. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  74. package/engine/internal/misc/player-local-handle.lua +5 -0
  75. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  76. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  77. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  78. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  79. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  80. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  81. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  82. package/engine/internal/object-data/evasion-probability.lua +16 -0
  83. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  84. package/engine/internal/object-data/health-bonus.lua +16 -0
  85. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  86. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  87. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  88. package/engine/internal/object-data/mana-bonus.lua +16 -0
  89. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  90. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  91. package/engine/internal/unit/ability.d.ts +35 -0
  92. package/engine/internal/unit/ability.lua +113 -12
  93. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  94. package/engine/internal/unit/add-item-to-slot.lua +57 -14
  95. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  96. package/engine/internal/unit/allowed-targets.lua +9 -1
  97. package/engine/internal/unit/appearance.d.ts +15 -0
  98. package/engine/internal/unit/appearance.lua +85 -0
  99. package/engine/internal/unit/attributes.d.ts +17 -0
  100. package/engine/internal/unit/attributes.lua +46 -0
  101. package/engine/internal/unit/bonus.d.ts +16 -0
  102. package/engine/internal/unit/bonus.lua +119 -8
  103. package/engine/internal/unit/buff.d.ts +2 -2
  104. package/engine/internal/unit/buff.lua +34 -19
  105. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  106. package/engine/internal/unit/equipment-inventory.lua +233 -0
  107. package/engine/internal/unit/expiration-timer.lua +1 -1
  108. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  109. package/engine/internal/unit/extended-inventory.lua +99 -0
  110. package/engine/internal/unit/fly-height.d.ts +7 -0
  111. package/engine/internal/unit/fly-height.lua +20 -0
  112. package/engine/internal/unit/ignore-events-items.lua +10 -1
  113. package/engine/internal/unit/interrupts.d.ts +12 -0
  114. package/engine/internal/unit/interrupts.lua +28 -0
  115. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  116. package/engine/internal/unit/inventory.lua +87 -0
  117. package/engine/internal/unit/item-container.d.ts +25 -0
  118. package/engine/internal/unit/item-container.lua +11 -0
  119. package/engine/internal/unit/item-order-events.d.ts +17 -0
  120. package/engine/internal/unit/item-order-events.lua +67 -0
  121. package/engine/internal/unit/item-slot.d.ts +27 -0
  122. package/engine/internal/unit/item-slot.lua +92 -0
  123. package/engine/internal/unit/main-selected.lua +12 -27
  124. package/engine/internal/unit/order.d.ts +20 -0
  125. package/engine/internal/unit/order.lua +136 -0
  126. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  127. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  128. package/engine/internal/unit/range-event.d.ts +12 -0
  129. package/engine/internal/unit/range-event.lua +90 -0
  130. package/engine/internal/unit/scale.d.ts +7 -0
  131. package/engine/internal/unit/scale.lua +20 -0
  132. package/engine/internal/unit+ability.d.ts +2 -1
  133. package/engine/internal/unit+ability.lua +73 -3
  134. package/engine/internal/unit+bonus.lua +3 -3
  135. package/engine/internal/unit+damage.d.ts +11 -11
  136. package/engine/internal/unit+damage.lua +43 -14
  137. package/engine/internal/unit+rally.lua +9 -31
  138. package/engine/internal/unit+spellSteal.lua +1 -2
  139. package/engine/internal/unit-missile-data.lua +58 -32
  140. package/engine/internal/unit-missile-launch.lua +65 -27
  141. package/engine/internal/unit.d.ts +43 -33
  142. package/engine/internal/unit.lua +391 -323
  143. package/engine/lightning.d.ts +4 -3
  144. package/engine/lightning.lua +22 -15
  145. package/engine/local-client.d.ts +28 -0
  146. package/engine/local-client.lua +324 -54
  147. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  148. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  149. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  150. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  151. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  152. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  153. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  154. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  155. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  156. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  157. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  158. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  159. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  160. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  161. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  162. package/engine/object-data/auxiliary/item-class.lua +2 -0
  163. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  164. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  165. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  166. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  167. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  168. package/engine/object-data/auxiliary/order-type.lua +2 -0
  169. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  170. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  171. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  172. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  173. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  174. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  175. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  176. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  177. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  178. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  179. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  180. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  181. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  182. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  183. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  184. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  185. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  186. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  187. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  188. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  189. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  190. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  191. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  192. package/engine/object-data/entry/ability-type/blank-configurable.lua +42 -1
  193. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  194. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  195. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  196. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  197. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  198. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  199. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  200. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  201. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  202. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  203. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  204. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  205. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  206. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  207. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  208. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  209. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  210. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  211. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  212. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  213. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  214. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  215. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  216. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  217. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  218. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  219. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  220. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  221. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  222. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  223. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  224. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  225. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  226. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  227. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  228. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  229. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  230. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  231. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  232. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  233. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  234. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  235. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  236. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  237. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  238. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  239. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  240. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  241. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  242. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  243. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  244. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  245. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  246. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  247. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  248. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  250. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  251. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  252. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  253. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  254. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  255. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  256. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  257. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  258. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  259. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  260. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  261. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  262. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  263. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  264. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  265. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  266. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  267. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  268. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  269. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  270. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  271. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  272. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  273. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  274. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  275. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  276. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  277. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  278. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  279. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  280. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  281. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  282. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  283. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  284. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  285. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  286. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  287. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  288. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  289. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  290. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  291. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  292. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  293. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  294. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  295. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  296. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  297. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  298. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  299. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  300. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  301. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  302. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  303. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  304. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  305. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  306. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  307. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  308. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  309. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  310. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  311. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  312. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  313. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  314. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  315. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  316. package/engine/object-data/entry/ability-type/web.lua +52 -0
  317. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  318. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  319. package/engine/object-data/entry/ability-type.d.ts +36 -19
  320. package/engine/object-data/entry/ability-type.lua +307 -29
  321. package/engine/object-data/entry/buff-type/applicable.lua +122 -137
  322. package/engine/object-data/entry/buff-type.d.ts +10 -12
  323. package/engine/object-data/entry/buff-type.lua +39 -29
  324. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  325. package/engine/object-data/entry/destructible-type.lua +181 -0
  326. package/engine/object-data/entry/item-type.d.ts +18 -3
  327. package/engine/object-data/entry/item-type.lua +88 -4
  328. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  329. package/engine/object-data/entry/lightning-type.lua +1 -1
  330. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  331. package/engine/object-data/entry/sound-preset.lua +140 -0
  332. package/engine/object-data/entry/unit-type.d.ts +71 -6
  333. package/engine/object-data/entry/unit-type.lua +592 -93
  334. package/engine/object-data/entry/upgrade.d.ts +2 -2
  335. package/engine/object-data/entry/upgrade.lua +4 -4
  336. package/engine/object-data/entry.d.ts +21 -14
  337. package/engine/object-data/entry.lua +68 -32
  338. package/engine/object-field/ability.d.ts +4 -4
  339. package/engine/object-field/ability.lua +9 -8
  340. package/engine/object-field/item.d.ts +22 -0
  341. package/engine/object-field/item.lua +118 -0
  342. package/engine/object-field/unit.d.ts +72 -3
  343. package/engine/object-field/unit.lua +268 -7
  344. package/engine/object-field.d.ts +26 -7
  345. package/engine/object-field.lua +360 -119
  346. package/engine/random.d.ts +10 -0
  347. package/engine/random.lua +21 -0
  348. package/engine/standard/entries/ability-type.d.ts +3102 -7
  349. package/engine/standard/entries/ability-type.lua +0 -6
  350. package/engine/standard/entries/buff-type.d.ts +3 -0
  351. package/engine/standard/entries/buff-type.lua +3 -0
  352. package/engine/standard/entries/item-type.d.ts +1299 -0
  353. package/engine/standard/entries/item-type.lua +2 -0
  354. package/engine/standard/entries/lightning-type.d.ts +42 -15
  355. package/engine/standard/entries/lightning-type.lua +0 -14
  356. package/engine/standard/entries/sound-preset.d.ts +10 -0
  357. package/engine/standard/entries/sound-preset.lua +10 -0
  358. package/engine/standard/entries/unit-type.d.ts +5 -0
  359. package/engine/standard/entries/unit-type.lua +5 -0
  360. package/engine/standard/fields/ability.d.ts +2 -2
  361. package/engine/standard/fields/ability.lua +2 -2
  362. package/engine/standard/fields/item.d.ts +4 -0
  363. package/engine/standard/fields/item.lua +6 -0
  364. package/engine/standard/fields/unit.d.ts +12 -0
  365. package/engine/standard/fields/unit.lua +20 -0
  366. package/engine/synchronization.d.ts +11 -0
  367. package/engine/synchronization.lua +77 -0
  368. package/engine/text-tag.d.ts +36 -2
  369. package/engine/text-tag.lua +250 -10
  370. package/engine/unit.d.ts +11 -1
  371. package/engine/unit.lua +11 -1
  372. package/event.d.ts +1 -1
  373. package/lualib_bundle.lua +1 -1
  374. package/math.d.ts +2 -0
  375. package/math.lua +14 -0
  376. package/net/socket.lua +1 -1
  377. package/network.lua +25 -1
  378. package/objutil/buff.lua +12 -11
  379. package/objutil/object.lua +1 -1
  380. package/objutil/unit.lua +8 -0
  381. package/operation.d.ts +8 -1
  382. package/operation.lua +38 -18
  383. package/package.json +3 -23
  384. package/patch-lua.lua +15 -0
  385. package/patch-lualib.lua +1 -1
  386. package/utility/arrays.d.ts +2 -0
  387. package/utility/arrays.lua +11 -0
  388. package/utility/callback-array.d.ts +17 -0
  389. package/utility/callback-array.lua +61 -0
  390. package/utility/functions.d.ts +8 -0
  391. package/utility/functions.lua +13 -0
  392. package/utility/linked-map.d.ts +35 -0
  393. package/utility/linked-map.lua +107 -0
  394. package/utility/linked-set.d.ts +5 -1
  395. package/utility/linked-set.lua +49 -1
  396. package/utility/lua-maps.d.ts +15 -2
  397. package/utility/lua-maps.lua +53 -2
  398. package/utility/lua-sets.d.ts +2 -0
  399. package/utility/lua-sets.lua +7 -0
  400. package/utility/random.d.ts +102 -0
  401. package/utility/random.lua +273 -0
  402. package/utility/records.lua +20 -1
  403. package/utility/reflection.lua +11 -7
  404. package/utility/types.d.ts +3 -0
  405. package/utility/unordered-map.d.ts +27 -0
  406. package/utility/unordered-map.lua +99 -0
  407. package/core/types/order.d.ts +0 -25
  408. package/core/types/order.lua +0 -55
  409. package/engine/internal/unit/item.lua +0 -78
  410. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  411. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  412. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  413. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/attributes.d.ts CHANGED
@@ -1,12 +1,18 @@
1
1
  /** @noSelfInFile */
2
+ declare const marker: {};
2
3
  export type Attribute<T> = {
3
4
  readonly __attribute: unique symbol;
4
5
  readonly __type: T;
6
+ readonly __marker: typeof marker;
5
7
  } & symbol;
8
+ export declare const attribute: <T>() => Attribute<T>;
9
+ export declare const isAttribute: (value: unknown) => value is Attribute<unknown>;
6
10
  export declare namespace Attribute {
7
11
  const create: <T>() => Attribute<T>;
8
12
  }
9
13
  export declare class AttributesHolder {
10
14
  readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
11
15
  readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
16
+ getOrPut<T>(attribute: Attribute<T>, defaultValue: () => T): T;
12
17
  }
18
+ export {};
package/attributes.lua CHANGED
@@ -1,11 +1,18 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local ____exports = {}
4
+ local marker = {}
5
+ ____exports.attribute = function()
6
+ return {__marker = marker}
7
+ end
8
+ ____exports.isAttribute = function(value)
9
+ return type(value) == "table" and rawget(value, "__marker") == marker
10
+ end
4
11
  ____exports.Attribute = {}
5
12
  local Attribute = ____exports.Attribute
6
13
  do
7
14
  Attribute.create = function()
8
- return {}
15
+ return {__marker = marker}
9
16
  end
10
17
  end
11
18
  ____exports.AttributesHolder = __TS__Class()
@@ -13,4 +20,13 @@ local AttributesHolder = ____exports.AttributesHolder
13
20
  AttributesHolder.name = "AttributesHolder"
14
21
  function AttributesHolder.prototype.____constructor(self)
15
22
  end
23
+ function AttributesHolder.prototype.getOrPut(self, attribute, defaultValue)
24
+ local value = self[attribute]
25
+ if value ~= nil then
26
+ return value
27
+ end
28
+ value = defaultValue()
29
+ self[attribute] = value
30
+ return value
31
+ end
16
32
  return ____exports
package/config.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /** @noSelfInFile */
2
+ export declare class WarscriptConfig {
3
+ private constructor();
4
+ static AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH: boolean;
5
+ }
package/config.lua ADDED
@@ -0,0 +1,10 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local ____exports = {}
4
+ ____exports.WarscriptConfig = __TS__Class()
5
+ local WarscriptConfig = ____exports.WarscriptConfig
6
+ WarscriptConfig.name = "WarscriptConfig"
7
+ function WarscriptConfig.prototype.____constructor(self)
8
+ end
9
+ WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH = true
10
+ return ____exports
package/core/dummy.lua CHANGED
@@ -15,6 +15,8 @@ local ____preconditions = require("utility.preconditions")
15
15
  local checkNotNull = ____preconditions.checkNotNull
16
16
  local ____ability = require("engine.internal.ability")
17
17
  local getOrderIdByAbilityTypeId = ____ability.getOrderIdByAbilityTypeId
18
+ local ____unit_2Dability_2Dlevel_2Dnatives = require("engine.internal.misc.unit-ability-level-natives")
19
+ local rawSetUnitAbilityLevel = ____unit_2Dability_2Dlevel_2Dnatives.rawSetUnitAbilityLevel
18
20
  local neutralVictim = Player.neutralVictim.handle
19
21
  ____exports.InstantDummyCaster = __TS__Class()
20
22
  local InstantDummyCaster = ____exports.InstantDummyCaster
@@ -42,7 +44,7 @@ function InstantDummyCaster.prototype.prepare(self, owner, abilityId, level)
42
44
  if type(abilityId) == "number" then
43
45
  UnitAddAbility(dummy, abilityId)
44
46
  if type(level) == "number" then
45
- SetUnitAbilityLevel(dummy, abilityId, level + 1)
47
+ rawSetUnitAbilityLevel(dummy, abilityId, level + 1)
46
48
  else
47
49
  level(UnitAbility:of(
48
50
  checkNotNull(BlzGetUnitAbility(dummy, abilityId)),
@@ -56,7 +58,7 @@ function InstantDummyCaster.prototype.prepare(self, owner, abilityId, level)
56
58
  end
57
59
  if __TS__ArrayIsArray(level) then
58
60
  for i = 1, #abilityId do
59
- SetUnitAbilityLevel(dummy, abilityId[i], level[i] + 1)
61
+ rawSetUnitAbilityLevel(dummy, abilityId[i], level[i] + 1)
60
62
  end
61
63
  else
62
64
  local abilities = {}
@@ -5,7 +5,9 @@ import { PlayerColor } from "./playerColor";
5
5
  declare const enum EffectPropertyKey {
6
6
  COLOR = 100,
7
7
  PITCH = 101,
8
- ROLL = 102
8
+ ROLL = 102,
9
+ BLEND_TIME = 103,
10
+ TIME_SCALE = 104
9
11
  }
10
12
  export type EffectParameters = {
11
13
  readonly delay?: number;
@@ -21,7 +23,15 @@ export declare class Effect extends Handle<jeffect> {
21
23
  private [EffectPropertyKey.COLOR]?;
22
24
  private [EffectPropertyKey.PITCH]?;
23
25
  private [EffectPropertyKey.ROLL]?;
26
+ private [EffectPropertyKey.BLEND_TIME]?;
27
+ private [EffectPropertyKey.TIME_SCALE]?;
24
28
  protected onDestroy(): HandleDestructor;
29
+ setAnimation(animation: string): void;
30
+ queueAnimation(animation: string): void;
31
+ get blendTime(): number;
32
+ set blendTime(blendTime: number);
33
+ get timeScale(): number;
34
+ set timeScale(timeScale: number);
25
35
  get color(): PlayerColor;
26
36
  set color(color: PlayerColor);
27
37
  get scale(): number;
@@ -30,12 +40,10 @@ export declare class Effect extends Handle<jeffect> {
30
40
  set pitch(pitch: number);
31
41
  get roll(): number;
32
42
  set roll(roll: number);
33
- static create<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T), model: string, pos: Vec2): T;
34
- static createTarget<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T), model: string, target: Widget, attachPoint: string): T;
43
+ static create<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T), modelPath: string, xOrWidget: number | Widget, yOrAttachmentPoint?: number | string, parameters?: EffectParameters): T;
35
44
  static flash(modelPath: string, ...args: [
36
45
  ...pointOrWidget: [x: number, y: number] | [widget: Widget, attachmentPoint?: string],
37
46
  ...parametersOrDuration: [parametersOrDuration?: EffectParameters | number] | [duration?: number, parameters?: EffectParameters]
38
47
  ]): void;
39
- static flashTarget(model: string, target: Widget, attachPoint: string, duration?: number): void;
40
48
  }
41
49
  export {};
@@ -4,7 +4,7 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
5
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
6
6
  local ____exports = {}
7
- local dummyPlayer, flash
7
+ local dummyPlayer, addSpecialEffectInternal, flash
8
8
  local ____handle = require("core.types.handle")
9
9
  local Handle = ____handle.Handle
10
10
  local ____playerColor = require("core.types.playerColor")
@@ -15,25 +15,22 @@ local ____timer = require("core.types.timer")
15
15
  local Timer = ____timer.Timer
16
16
  local ____unit = require("engine.internal.unit")
17
17
  local Unit = ____unit.Unit
18
- local ____pairs = _G.pairs
19
- local select = _G.select
20
- local mathRad = math.rad
21
18
  local addSpecialEffect = AddSpecialEffect
22
19
  local addSpecialEffectTarget = AddSpecialEffectTarget
23
20
  local destroyEffect = DestroyEffect
21
+ local getLocationZ = GetLocationZ
24
22
  local getSpecialEffectScale = BlzGetSpecialEffectScale
25
- local playSpecialEffect = BlzPlaySpecialEffect
26
- local setSpecialEffectScale = BlzSetSpecialEffectScale
23
+ local moveLocation = MoveLocation
24
+ local queueSpecialEffectAnimation = BlzQueueSpecialEffectAnimation
25
+ local setSpecialEffectAnimation = BlzSetSpecialEffectAnimation
26
+ local setSpecialEffectAnimationBlendTime = BlzSetSpecialEffectAnimationBlendTime
27
+ local setSpecialEffectTimeScale = BlzSetSpecialEffectTimeScale
28
+ local setSpecialEffectColorByPlayer = BlzSetSpecialEffectColorByPlayer
27
29
  local setSpecialEffectPitch = BlzSetSpecialEffectPitch
28
30
  local setSpecialEffectRoll = BlzSetSpecialEffectRoll
29
- local setSpecialEffectColorByPlayer = BlzSetSpecialEffectColorByPlayer
30
- local specialEffectAddSubAnimation = BlzSpecialEffectAddSubAnimation
31
- local specialEffectClearSubAnimations = BlzSpecialEffectClearSubAnimations
32
- local specialEffectRemoveSubAnimation = BlzSpecialEffectRemoveSubAnimation
31
+ local setSpecialEffectScale = BlzSetSpecialEffectScale
33
32
  local setSpecialEffectZ = BlzSetSpecialEffectZ
34
- local getLocationZ = GetLocationZ
35
- local getUnitZ = BlzGetUnitZ
36
- local moveLocation = MoveLocation
33
+ local mathRad = math.rad
37
34
  local location = Location(0, 0)
38
35
  local function setSpecialEffectPitchDegrees(effect, pitch)
39
36
  setSpecialEffectPitch(
@@ -47,71 +44,6 @@ local function setSpecialEffectRollDegrees(effect, roll)
47
44
  -mathRad(roll)
48
45
  )
49
46
  end
50
- local animTypeByAnimationName = {
51
- attack = ANIM_TYPE_ATTACK,
52
- birth = ANIM_TYPE_BIRTH,
53
- death = ANIM_TYPE_DEATH,
54
- decay = ANIM_TYPE_DECAY,
55
- dissipate = ANIM_TYPE_DISSIPATE,
56
- morph = ANIM_TYPE_MORPH,
57
- portrait = ANIM_TYPE_PORTRAIT,
58
- sleep = ANIM_TYPE_SLEEP,
59
- spell = ANIM_TYPE_SPELL,
60
- stand = ANIM_TYPE_STAND,
61
- walk = ANIM_TYPE_WALK
62
- }
63
- local subAnimTypeByAnimationQualifier = {
64
- alternate = SUBANIM_TYPE_ROOTED,
65
- alternateex = SUBANIM_TYPE_ALTERNATE_EX,
66
- chain = SUBANIM_TYPE_CHAINLIGHTNING,
67
- channel = SUBANIM_TYPE_CHANNEL,
68
- complete = SUBANIM_TYPE_COMPLETE,
69
- critical = SUBANIM_TYPE_CRITICAL,
70
- defend = SUBANIM_TYPE_DEFEND,
71
- drain = SUBANIM_TYPE_DRAIN,
72
- eattree = SUBANIM_TYPE_EATTREE,
73
- fast = SUBANIM_TYPE_FAST,
74
- fill = SUBANIM_TYPE_FILL,
75
- flail = SUBANIM_TYPE_FLAIL,
76
- flesh = SUBANIM_TYPE_FLESH,
77
- fifth = SUBANIM_TYPE_FIFTH,
78
- fire = SUBANIM_TYPE_FIRE,
79
- first = SUBANIM_TYPE_FIRST,
80
- five = SUBANIM_TYPE_FIVE,
81
- four = SUBANIM_TYPE_FOUR,
82
- fourth = SUBANIM_TYPE_FOURTH,
83
- gold = SUBANIM_TYPE_GOLD,
84
- hit = SUBANIM_TYPE_HIT,
85
- large = SUBANIM_TYPE_LARGE,
86
- left = SUBANIM_TYPE_LEFT,
87
- light = SUBANIM_TYPE_LIGHT,
88
- looping = SUBANIM_TYPE_LOOPING,
89
- lumber = SUBANIM_TYPE_LUMBER,
90
- medium = SUBANIM_TYPE_MEDIUM,
91
- moderate = SUBANIM_TYPE_MODERATE,
92
- off = SUBANIM_TYPE_OFF,
93
- one = SUBANIM_TYPE_ONE,
94
- puke = SUBANIM_TYPE_PUKE,
95
- ready = SUBANIM_TYPE_READY,
96
- right = SUBANIM_TYPE_RIGHT,
97
- second = SUBANIM_TYPE_SECOND,
98
- severe = SUBANIM_TYPE_SEVERE,
99
- slam = SUBANIM_TYPE_SLAM,
100
- small = SUBANIM_TYPE_SMALL,
101
- spiked = SUBANIM_TYPE_SPIKED,
102
- spin = SUBANIM_TYPE_SPIN,
103
- swim = SUBANIM_TYPE_SWIM,
104
- talk = SUBANIM_TYPE_TALK,
105
- third = SUBANIM_TYPE_THIRD,
106
- three = SUBANIM_TYPE_THREE,
107
- throw = SUBANIM_TYPE_THROW,
108
- two = SUBANIM_TYPE_TWO,
109
- turn = SUBANIM_TYPE_TURN,
110
- victory = SUBANIM_TYPE_VICTORY,
111
- work = SUBANIM_TYPE_WORK,
112
- wounded = SUBANIM_TYPE_WOUNDED,
113
- upgrade = SUBANIM_TYPE_UPGRADE
114
- }
115
47
  local function setSpecialEffectColor(effect, color)
116
48
  local dummyColor = dummyPlayer.color
117
49
  dummyPlayer.color = color
@@ -119,6 +51,7 @@ local function setSpecialEffectColor(effect, color)
119
51
  dummyPlayer.color = dummyColor
120
52
  end
121
53
  local setters = {scale = setSpecialEffectScale, color = setSpecialEffectColor, pitch = setSpecialEffectPitchDegrees, roll = setSpecialEffectRollDegrees}
54
+ local setterProperties = {"scale", "color", "pitch", "roll"}
122
55
  dummyPlayer = Player.neutralExtra
123
56
  local temporaryEffects = {}
124
57
  local temporaryEffectsDurations = {}
@@ -177,11 +110,20 @@ function Effect.prototype.onDestroy(self)
177
110
  destroyEffect(self.handle)
178
111
  return Handle.prototype.onDestroy(self)
179
112
  end
180
- function Effect.create(self, model, pos)
181
- return self:of(addSpecialEffect(model, pos.x, pos.y))
113
+ function Effect.prototype.setAnimation(self, animation)
114
+ setSpecialEffectAnimation(self.handle, animation)
182
115
  end
183
- function Effect.createTarget(self, model, target, attachPoint)
184
- return self:of(addSpecialEffectTarget(model, target.handle, attachPoint))
116
+ function Effect.prototype.queueAnimation(self, animation)
117
+ queueSpecialEffectAnimation(self.handle, animation)
118
+ end
119
+ function Effect.create(self, modelPath, xOrWidget, yOrAttachmentPoint, parameters)
120
+ local effect = self:of(addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters))
121
+ if parameters ~= nil then
122
+ effect[100] = parameters.color
123
+ effect[101] = parameters.pitch
124
+ effect[102] = parameters.roll
125
+ end
126
+ return effect
185
127
  end
186
128
  function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, parametersOrDuration, parameters)
187
129
  if type(parametersOrDuration) ~= "number" then
@@ -206,24 +148,40 @@ function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, paramete
206
148
  parameters
207
149
  )
208
150
  end
209
- function Effect.flashTarget(self, model, target, attachPoint, duration)
210
- local effect = addSpecialEffectTarget(model, target.handle, attachPoint)
211
- if effect ~= nil then
212
- if duration and duration > 0 then
213
- temporaryEffectsCount = temporaryEffectsCount + 1
214
- temporaryEffects[temporaryEffectsCount] = effect
215
- temporaryEffectsDurations[temporaryEffectsCount] = duration
216
- else
217
- destroyEffect(effect)
151
+ __TS__SetDescriptor(
152
+ Effect.prototype,
153
+ "blendTime",
154
+ {
155
+ get = function(self)
156
+ return self[103] or 0
157
+ end,
158
+ set = function(self, blendTime)
159
+ setSpecialEffectAnimationBlendTime(self.handle, blendTime)
160
+ self[103] = blendTime
218
161
  end
219
- end
220
- end
162
+ },
163
+ true
164
+ )
165
+ __TS__SetDescriptor(
166
+ Effect.prototype,
167
+ "timeScale",
168
+ {
169
+ get = function(self)
170
+ return self[104] or 1
171
+ end,
172
+ set = function(self, timeScale)
173
+ setSpecialEffectTimeScale(self.handle, timeScale)
174
+ self[104] = timeScale
175
+ end
176
+ },
177
+ true
178
+ )
221
179
  __TS__SetDescriptor(
222
180
  Effect.prototype,
223
181
  "color",
224
182
  {
225
183
  get = function(self)
226
- return self[100] or PlayerColor.black
184
+ return self[100] or PlayerColor.red
227
185
  end,
228
186
  set = function(self, color)
229
187
  setSpecialEffectColor(self.handle, color)
@@ -273,30 +231,35 @@ __TS__SetDescriptor(
273
231
  },
274
232
  true
275
233
  )
276
- flash = function(modelPath, xOrWidget, yOrOrAttachmentPoint, duration, parameters)
234
+ addSpecialEffectInternal = function(modelPath, xOrWidget, yOrAttachmentPoint, parameters)
277
235
  local coordinatesProvided = type(xOrWidget) == "number"
278
236
  local isPositional = coordinatesProvided or (parameters and parameters.detached) == true
279
237
  local x = not isPositional and 0 or (coordinatesProvided and xOrWidget or xOrWidget.x)
280
- local y = not isPositional and 0 or (coordinatesProvided and yOrOrAttachmentPoint or xOrWidget.y)
281
- local effect = isPositional and addSpecialEffect(modelPath, x, y) or addSpecialEffectTarget(modelPath, xOrWidget.handle, yOrOrAttachmentPoint or "origin")
282
- if isPositional and not coordinatesProvided and (parameters and parameters.scale) == nil and __TS__InstanceOf(xOrWidget, Unit) then
283
- setSpecialEffectScale(effect, xOrWidget.scale)
284
- end
238
+ local y = not isPositional and 0 or (coordinatesProvided and yOrAttachmentPoint or xOrWidget.y)
239
+ local effect = isPositional and addSpecialEffect(modelPath, x, y) or addSpecialEffectTarget(modelPath, xOrWidget.handle, yOrAttachmentPoint or "origin")
285
240
  if parameters ~= nil then
286
- for key, value in ____pairs(parameters) do
287
- if key ~= "zOffset" and key ~= "detached" and key ~= "scaleZOffset" and key ~= "delay" then
288
- setters[key](effect, value)
241
+ if isPositional and parameters.scale == nil and __TS__InstanceOf(xOrWidget, Unit) then
242
+ setSpecialEffectScale(effect, xOrWidget.scale)
243
+ end
244
+ for ____, property in ipairs(setterProperties) do
245
+ local value = parameters[property]
246
+ if value ~= nil then
247
+ setters[property](effect, value)
289
248
  end
290
249
  end
291
250
  if isPositional and parameters.zOffset ~= nil then
292
251
  moveLocation(location, x, y)
293
252
  local z = __TS__InstanceOf(xOrWidget, Unit) and getLocationZ(location) + xOrWidget.flyHeight or getLocationZ(location)
294
- BlzSetSpecialEffectZ(
253
+ setSpecialEffectZ(
295
254
  effect,
296
255
  z + parameters.zOffset * (parameters.scaleZOffset and getSpecialEffectScale(effect) or 1)
297
256
  )
298
257
  end
299
258
  end
259
+ return effect
260
+ end
261
+ flash = function(modelPath, xOrWidget, yOrAttachmentPoint, duration, parameters)
262
+ local effect = addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters)
300
263
  if duration ~= nil and duration > 0 then
301
264
  temporaryEffectsCount = temporaryEffectsCount + 1
302
265
  temporaryEffects[temporaryEffectsCount] = effect
@@ -80,6 +80,7 @@ export declare class Frame extends Handle<jframehandle> {
80
80
  get onMouseLeave(): FrameEvent;
81
81
  get onMouseUp(): FrameEvent;
82
82
  get onMouseWheel(): FrameEvent<[number]>;
83
+ private trackMouseLocally;
83
84
  get mouseEnterLocalEvent(): Event;
84
85
  get mouseLeaveLocalEvent(): Event;
85
86
  get popupMenuItemChangeEvent(): FrameEvent<[
@@ -15,13 +15,32 @@ local Event = ____event.Event
15
15
  local TriggerEvent = ____event.TriggerEvent
16
16
  local ____timer = require("core.types.timer")
17
17
  local Timer = ____timer.Timer
18
+ local ____frame_2Dcoordinates = require("engine.internal.misc.frame-coordinates")
19
+ local FRAME_MAX_Y = ____frame_2Dcoordinates.FRAME_MAX_Y
20
+ local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
21
+ local getFrameMinXMaxX = ____frame_2Dcoordinates.getFrameMinXMaxX
22
+ local ____playerCamera = require("core.types.playerCamera")
23
+ local frameCoordinatesToWorld = ____playerCamera.frameCoordinatesToWorld
24
+ local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
25
+ local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
26
+ local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
27
+ local ____lua_2Dsets = require("utility.lua-sets")
28
+ local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
29
+ local ____socket = require("net.socket")
30
+ local Socket = ____socket.Socket
31
+ local ____lua_2Dmaps = require("utility.lua-maps")
32
+ local getOrPut = ____lua_2Dmaps.getOrPut
33
+ local luaMapInvert = ____lua_2Dmaps.luaMapInvert
34
+ local luaMapOf = ____lua_2Dmaps.luaMapOf
35
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
18
36
  local frameClick = BlzFrameClick
19
37
  local frameGetEnable = BlzFrameGetEnable
20
38
  local frameIsVisible = BlzFrameIsVisible
21
39
  local frameSetEnable = BlzFrameSetEnable
22
40
  local frameSetScale = BlzFrameSetScale
23
- local getCameraTargetPositionX = GetCameraTargetPositionX
24
- local getCameraTargetPositionY = GetCameraTargetPositionY
41
+ local getHandleId = GetHandleId
42
+ local getOriginFrame = BlzGetOriginFrame
43
+ local location = Location
25
44
  local ____rawget = _G.rawget
26
45
  local rawset = _G.rawset
27
46
  local invoke = Event.invoke
@@ -123,6 +142,79 @@ do
123
142
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
124
143
  end
125
144
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
145
+ local isMouseInsideLocallyByFrame = mutableLuaMap()
146
+ local mouseEnterLocalEventByFrame = mutableLuaMap()
147
+ local mouseLeaveLocalEventByFrame = mutableLuaMap()
148
+ local isLocalMouseTrackingStarted = false
149
+ --- Reused across ticks to avoid per-tick allocations: only the first `leftFrameCount` /
150
+ -- `enteredFrameCount` entries are meaningful, stale entries beyond them are never read and are
151
+ -- kept collectable by the weak values mode.
152
+ local leftFrames = setmetatable({}, {__mode = "v"})
153
+ local enteredFrames = setmetatable({}, {__mode = "v"})
154
+ --- All frames share a single poll which invokes every mouse leave event before any mouse enter
155
+ -- event within the same tick. With a poll per event, the invocation order would depend on the
156
+ -- event creation order instead, breaking listeners relying on the natural "leave the old frame,
157
+ -- then enter the new frame" order.
158
+ local function startLocalMouseTracking()
159
+ if isLocalMouseTrackingStarted then
160
+ return
161
+ end
162
+ isLocalMouseTrackingStarted = true
163
+ Timer.onPeriod[1 / 64]:addListener(function()
164
+ local leftFrameCount = 0
165
+ local enteredFrameCount = 0
166
+ for frame, wasMouseInside in pairs(isMouseInsideLocallyByFrame) do
167
+ local tooltip = tooltipByFrame[frame]
168
+ local isMouseInside = tooltip ~= nil and tooltip.visible
169
+ if isMouseInside ~= wasMouseInside then
170
+ isMouseInsideLocallyByFrame[frame] = isMouseInside
171
+ if isMouseInside then
172
+ enteredFrames[enteredFrameCount + 1] = frame
173
+ enteredFrameCount = enteredFrameCount + 1
174
+ else
175
+ leftFrames[leftFrameCount + 1] = frame
176
+ leftFrameCount = leftFrameCount + 1
177
+ end
178
+ end
179
+ end
180
+ for i = 1, leftFrameCount do
181
+ local event = mouseLeaveLocalEventByFrame[leftFrames[i]]
182
+ if event ~= nil then
183
+ Event.invoke(event)
184
+ end
185
+ end
186
+ for i = 1, enteredFrameCount do
187
+ local event = mouseEnterLocalEventByFrame[enteredFrames[i]]
188
+ if event ~= nil then
189
+ Event.invoke(event)
190
+ end
191
+ end
192
+ end)
193
+ end
194
+ local keyByAsyncInitOriginFrameType = luaMapOf(ORIGIN_FRAME_PORTRAIT_HP_TEXT, "hp", ORIGIN_FRAME_PORTRAIT_MANA_TEXT, "mana")
195
+ local asyncInitOriginFrameTypeByKey = luaMapInvert(keyByAsyncInitOriginFrameType)
196
+ local seenAsyncInitOriginFrameTypes = mutableLuaSet()
197
+ local seenAsyncInitOriginFrameTypesSocket = __TS__New(Socket)
198
+ local seenPlayersByAsyncInitOriginFrameType = mutableLuaMap()
199
+ seenAsyncInitOriginFrameTypesSocket.onMessage:addListener(function(player, key)
200
+ local asyncInitOriginFrameType = asyncInitOriginFrameTypeByKey[key]
201
+ if asyncInitOriginFrameType ~= nil then
202
+ getOrPut(seenPlayersByAsyncInitOriginFrameType, asyncInitOriginFrameType, mutableLuaSet)[player] = true
203
+ end
204
+ end)
205
+ local function haveAllPlayersSeenAsyncInitOriginFrameType(frame)
206
+ local players = seenPlayersByAsyncInitOriginFrameType[frame]
207
+ if players == nil then
208
+ return false
209
+ end
210
+ for ____, player in ipairs(Player.all) do
211
+ if player.isUser and player.isPlaying and not (players[player] ~= nil) then
212
+ return false
213
+ end
214
+ end
215
+ keyByAsyncInitOriginFrameType[frame] = nil
216
+ return true
217
+ end
126
218
  ____exports.Frame = __TS__Class()
127
219
  local Frame = ____exports.Frame
128
220
  Frame.name = "Frame"
@@ -155,6 +247,18 @@ function Frame.prototype.getEvent(self, eventType, c)
155
247
  end
156
248
  return self.events[eventId]
157
249
  end
250
+ function Frame.prototype.trackMouseLocally(self)
251
+ if not (tooltipByFrame[self] ~= nil) then
252
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
253
+ local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
254
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
255
+ self:setTooltip(tooltip)
256
+ end
257
+ if not (isMouseInsideLocallyByFrame[self] ~= nil) then
258
+ isMouseInsideLocallyByFrame[self] = false
259
+ startLocalMouseTracking()
260
+ end
261
+ end
158
262
  function Frame.prototype.hide(self)
159
263
  self.hideCounter = self.hideCounter + 1
160
264
  if self.hideCounter > 0 then
@@ -301,7 +405,17 @@ function Frame.byOrigin(self, frameType, index)
301
405
  if index == nil then
302
406
  index = 0
303
407
  end
304
- return self:of(BlzGetOriginFrame(frameType, index))
408
+ local frame = getOriginFrame(frameType, index)
409
+ local asyncInitOriginFrameTypeKey = keyByAsyncInitOriginFrameType[frameType]
410
+ if index == 0 and asyncInitOriginFrameTypeKey ~= nil and not haveAllPlayersSeenAsyncInitOriginFrameType(frameType) then
411
+ if getHandleId(frame) == 0 or seenAsyncInitOriginFrameTypes[frameType] ~= nil then
412
+ location(0, 0)
413
+ else
414
+ seenAsyncInitOriginFrameTypes[frameType] = true
415
+ seenAsyncInitOriginFrameTypesSocket:send(asyncInitOriginFrameTypeKey)
416
+ end
417
+ end
418
+ return self:of(frame)
305
419
  end
306
420
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
307
421
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
@@ -344,27 +458,21 @@ __TS__ObjectDefineProperty(
344
458
  Frame,
345
459
  "minX",
346
460
  {get = function(self)
347
- local w = BlzGetLocalClientWidth()
348
- local h = BlzGetLocalClientHeight()
349
- local width4by3 = (w - h / 600 * 800) / 2
350
- local pxtodpi = 0.6 / h
351
- return -width4by3 * pxtodpi
461
+ local minX = getFrameMinXMaxX()
462
+ return minX
352
463
  end}
353
464
  )
354
465
  __TS__ObjectDefineProperty(
355
466
  Frame,
356
467
  "maxX",
357
468
  {get = function(self)
358
- local w = BlzGetLocalClientWidth()
359
- local h = BlzGetLocalClientHeight()
360
- local width4by3 = (w - h / 600 * 800) / 2
361
- local pxtodpi = 0.6 / h
362
- return (-width4by3 + w) * pxtodpi
469
+ local ____, maxX = getFrameMinXMaxX()
470
+ return maxX
363
471
  end}
364
472
  )
365
473
  Frame.centerX = 0.4
366
- Frame.minY = 0
367
- Frame.maxY = 0.6
474
+ Frame.minY = FRAME_MIN_Y
475
+ Frame.maxY = FRAME_MAX_Y
368
476
  Frame.centerY = 0.3
369
477
  __TS__SetDescriptor(
370
478
  Frame.prototype,
@@ -626,24 +734,8 @@ __TS__SetDescriptor(
626
734
  "mouseEnterLocalEvent",
627
735
  {get = function(self)
628
736
  local event = __TS__New(Event)
629
- if not (tooltipByFrame[self] ~= nil) then
630
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
631
- local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
632
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
633
- self:setTooltip(tooltip)
634
- end
635
- local isMouseInside = false
636
- Timer.onPeriod[1 / 64]:addListener(function()
637
- local tooltip = tooltipByFrame[self]
638
- if tooltip and tooltip.visible then
639
- if not isMouseInside then
640
- isMouseInside = true
641
- Event.invoke(event)
642
- end
643
- else
644
- isMouseInside = false
645
- end
646
- end)
737
+ self:trackMouseLocally()
738
+ mouseEnterLocalEventByFrame[self] = event
647
739
  rawset(self, "mouseEnterLocalEvent", event)
648
740
  return event
649
741
  end},
@@ -654,24 +746,8 @@ __TS__SetDescriptor(
654
746
  "mouseLeaveLocalEvent",
655
747
  {get = function(self)
656
748
  local event = __TS__New(Event)
657
- if not (tooltipByFrame[self] ~= nil) then
658
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
659
- local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
660
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
661
- self:setTooltip(tooltip)
662
- end
663
- local isMouseInside = false
664
- Timer.onPeriod[1 / 64]:addListener(function()
665
- local tooltip = tooltipByFrame[self]
666
- if tooltip and tooltip.visible then
667
- isMouseInside = true
668
- else
669
- if isMouseInside then
670
- isMouseInside = false
671
- Event.invoke(event)
672
- end
673
- end
674
- end)
749
+ self:trackMouseLocally()
750
+ mouseLeaveLocalEventByFrame[self] = event
675
751
  rawset(self, "mouseLeaveLocalEvent", event)
676
752
  return event
677
753
  end},
@@ -938,16 +1014,19 @@ __TS__ObjectDefineProperty(
938
1014
  local event = __TS__New(Event)
939
1015
  local syncX = 0
940
1016
  local syncY = 0
941
- local syncCamX = getCameraTargetPositionX()
942
- local syncCamY = getCameraTargetPositionY()
1017
+ local syncFrameX = 0
1018
+ local syncFrameY = 0
943
1019
  local lastX = syncX
944
1020
  local lastY = syncY
945
1021
  self.onMouseMove:addListener(function(player, x, y)
946
1022
  if player.isLocal then
947
1023
  syncX = x
948
1024
  syncY = y
949
- syncCamX = getCameraTargetPositionX()
950
- syncCamY = getCameraTargetPositionY()
1025
+ syncFrameX, syncFrameY = worldCoordinatesToFrame(
1026
+ x,
1027
+ y,
1028
+ getTerrainZ(x, y)
1029
+ )
951
1030
  lastX = x
952
1031
  lastY = y
953
1032
  invoke(event, x, y)
@@ -957,9 +1036,8 @@ __TS__ObjectDefineProperty(
957
1036
  if syncX == 0 and syncY == 0 then
958
1037
  return
959
1038
  end
960
- local x = syncX + (getCameraTargetPositionX() - syncCamX)
961
- local y = syncY + (getCameraTargetPositionY() - syncCamY)
962
- if x ~= lastX or y ~= lastY then
1039
+ local x, y, ____, isDefinite = frameCoordinatesToWorld(syncFrameX, syncFrameY)
1040
+ if isDefinite and (x ~= lastX or y ~= lastY) then
963
1041
  lastX = x
964
1042
  lastY = y
965
1043
  invoke(event, x, y)