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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +11 -1
  5. package/core/types/effect.lua +43 -77
  6. package/core/types/frame.d.ts +21 -2
  7. package/core/types/frame.lua +165 -87
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/missile.lua +8 -7
  12. package/core/types/player.d.ts +18 -1
  13. package/core/types/player.lua +76 -26
  14. package/core/types/playerCamera.d.ts +2 -0
  15. package/core/types/playerCamera.lua +123 -5
  16. package/core/types/playerColor.lua +4 -3
  17. package/core/types/sound.d.ts +1 -1
  18. package/core/types/sound.lua +14 -9
  19. package/core/types/tileCell.d.ts +18 -3
  20. package/core/types/tileCell.lua +108 -0
  21. package/core/types/timer.d.ts +3 -1
  22. package/core/types/timer.lua +27 -2
  23. package/core/types/unit.d.ts +5 -0
  24. package/core/types/unit.lua +5 -0
  25. package/core/util.d.ts +3 -1
  26. package/core/util.lua +109 -3
  27. package/decl/native.d.ts +712 -11
  28. package/destroyable.d.ts +1 -0
  29. package/destroyable.lua +9 -0
  30. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  31. package/engine/ability-type-extended-tooltip.lua +44 -0
  32. package/engine/behavior.d.ts +14 -1
  33. package/engine/behavior.lua +230 -70
  34. package/engine/behaviour/ability/apply-buff.lua +4 -4
  35. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  36. package/engine/behaviour/ability/damage.d.ts +4 -0
  37. package/engine/behaviour/ability/damage.lua +19 -15
  38. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  39. package/engine/behaviour/ability/emulate-impact.lua +81 -6
  40. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  41. package/engine/behaviour/ability/instant-impact.lua +17 -2
  42. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  43. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  44. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  45. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  46. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  47. package/engine/behaviour/ability/restore-mana.lua +6 -6
  48. package/engine/behaviour/ability.d.ts +19 -6
  49. package/engine/behaviour/ability.lua +120 -9
  50. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  51. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  52. package/engine/behaviour/unit.d.ts +16 -5
  53. package/engine/behaviour/unit.lua +127 -22
  54. package/engine/buff.d.ts +124 -57
  55. package/engine/buff.lua +608 -296
  56. package/engine/index.d.ts +2 -1
  57. package/engine/internal/ability.d.ts +10 -1
  58. package/engine/internal/ability.lua +99 -47
  59. package/engine/internal/item/fields.d.ts +12 -0
  60. package/engine/internal/item/fields.lua +33 -0
  61. package/engine/internal/item/owner-cache.d.ts +5 -0
  62. package/engine/internal/item/owner-cache.lua +4 -0
  63. package/engine/internal/item+owner.d.ts +2 -0
  64. package/engine/internal/item+owner.lua +37 -8
  65. package/engine/internal/item.d.ts +27 -14
  66. package/engine/internal/item.lua +185 -82
  67. package/engine/internal/mechanics/cast-ability.lua +6 -3
  68. package/engine/internal/misc/frame-coordinates.lua +21 -0
  69. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  70. package/engine/internal/misc/get-terrain-z.lua +11 -0
  71. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  72. package/engine/internal/misc/player-local-handle.lua +5 -0
  73. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  74. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  75. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  76. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  77. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  78. package/engine/internal/object-data/health-bonus.lua +16 -0
  79. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  80. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  81. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  82. package/engine/internal/object-data/mana-bonus.lua +16 -0
  83. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  84. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  85. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  86. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  87. package/engine/internal/unit/ability.d.ts +14 -14
  88. package/engine/internal/unit/ability.lua +88 -45
  89. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  90. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  91. package/engine/internal/unit/appearance.d.ts +15 -0
  92. package/engine/internal/unit/appearance.lua +85 -0
  93. package/engine/internal/unit/attributes.d.ts +17 -0
  94. package/engine/internal/unit/attributes.lua +46 -0
  95. package/engine/internal/unit/bonus.d.ts +17 -0
  96. package/engine/internal/unit/bonus.lua +113 -8
  97. package/engine/internal/unit/buff.d.ts +2 -2
  98. package/engine/internal/unit/buff.lua +34 -19
  99. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  100. package/engine/internal/unit/equipment-inventory.lua +233 -0
  101. package/engine/internal/unit/expiration-timer.lua +1 -1
  102. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  103. package/engine/internal/unit/extended-inventory.lua +99 -0
  104. package/engine/internal/unit/fly-height.d.ts +7 -0
  105. package/engine/internal/unit/fly-height.lua +20 -0
  106. package/engine/internal/unit/ignore-events-items.lua +10 -1
  107. package/engine/internal/unit/interrupts.d.ts +12 -0
  108. package/engine/internal/unit/interrupts.lua +28 -0
  109. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  110. package/engine/internal/unit/inventory.lua +87 -0
  111. package/engine/internal/unit/item-container.d.ts +25 -0
  112. package/engine/internal/unit/item-container.lua +11 -0
  113. package/engine/internal/unit/item-order-events.d.ts +17 -0
  114. package/engine/internal/unit/item-order-events.lua +67 -0
  115. package/engine/internal/unit/item-slot.d.ts +27 -0
  116. package/engine/internal/unit/item-slot.lua +92 -0
  117. package/engine/internal/unit/main-selected.lua +12 -27
  118. package/engine/internal/unit/order.d.ts +3 -3
  119. package/engine/internal/unit/order.lua +10 -10
  120. package/engine/internal/unit/range-event.d.ts +12 -0
  121. package/engine/internal/unit/range-event.lua +90 -0
  122. package/engine/internal/unit/scale.d.ts +7 -0
  123. package/engine/internal/unit/scale.lua +20 -0
  124. package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
  125. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  126. package/engine/internal/unit+ability.d.ts +2 -1
  127. package/engine/internal/unit+ability.lua +83 -3
  128. package/engine/internal/unit+bonus.lua +3 -3
  129. package/engine/internal/unit+damage.d.ts +9 -0
  130. package/engine/internal/unit+damage.lua +33 -0
  131. package/engine/internal/unit+rally.lua +9 -31
  132. package/engine/internal/unit-missile-data.lua +96 -68
  133. package/engine/internal/unit-missile-launch.lua +65 -27
  134. package/engine/internal/unit.d.ts +20 -33
  135. package/engine/internal/unit.lua +227 -295
  136. package/engine/lightning.lua +4 -4
  137. package/engine/local-client.d.ts +28 -0
  138. package/engine/local-client.lua +324 -54
  139. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  140. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  141. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  142. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  143. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  144. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  145. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  146. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  147. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  148. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  149. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  150. package/engine/object-data/auxiliary/item-class.lua +2 -0
  151. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  152. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  153. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  154. package/engine/object-data/auxiliary/order-type.lua +2 -0
  155. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  156. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  157. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  158. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  159. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  160. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  161. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  162. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  163. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  164. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  165. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  166. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  167. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  168. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  169. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  170. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  171. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  172. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  173. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
  174. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  175. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  176. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  177. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  178. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  179. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  180. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  181. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  182. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  183. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  184. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  185. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  186. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  187. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  188. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  189. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  190. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  191. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  192. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  193. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  194. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  195. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  196. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  197. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  198. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  199. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  200. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  201. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  202. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  203. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  204. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  205. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  206. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  207. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  208. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  209. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  210. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  211. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  212. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  213. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  214. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  215. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  216. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  217. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  218. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  219. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  220. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  221. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  222. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  223. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  224. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  225. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  226. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  227. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  228. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  229. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  230. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  231. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  232. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  233. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  234. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  235. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  236. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  237. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  238. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  239. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  240. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  241. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  242. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  243. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  244. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  245. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  246. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  247. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  248. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  250. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  251. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  252. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  253. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  254. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  255. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  256. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  257. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  258. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  259. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  260. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  261. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  262. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  263. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  264. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  265. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  266. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  267. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  268. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  269. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  270. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  271. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  272. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  273. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  274. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  275. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  276. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  277. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  278. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  279. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  280. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  281. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  282. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  283. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  284. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  285. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  286. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  287. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  288. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  289. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  290. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  291. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  292. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  293. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  294. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  295. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  296. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  297. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  298. package/engine/object-data/entry/ability-type.d.ts +35 -8
  299. package/engine/object-data/entry/ability-type.lua +304 -15
  300. package/engine/object-data/entry/buff-type/applicable.lua +122 -111
  301. package/engine/object-data/entry/buff-type.d.ts +6 -2
  302. package/engine/object-data/entry/buff-type.lua +26 -0
  303. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  304. package/engine/object-data/entry/destructible-type.lua +181 -0
  305. package/engine/object-data/entry/item-type.d.ts +18 -3
  306. package/engine/object-data/entry/item-type.lua +84 -0
  307. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  308. package/engine/object-data/entry/lightning-type.lua +1 -1
  309. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  310. package/engine/object-data/entry/unit-type.d.ts +72 -4
  311. package/engine/object-data/entry/unit-type.lua +503 -53
  312. package/engine/object-data/entry/upgrade.d.ts +2 -2
  313. package/engine/object-data/entry.d.ts +6 -1
  314. package/engine/object-data/entry.lua +8 -0
  315. package/engine/object-field/ability.d.ts +3 -3
  316. package/engine/object-field/ability.lua +9 -8
  317. package/engine/object-field/item.d.ts +22 -0
  318. package/engine/object-field/item.lua +118 -0
  319. package/engine/object-field/unit.d.ts +20 -5
  320. package/engine/object-field/unit.lua +61 -0
  321. package/engine/object-field.d.ts +12 -4
  322. package/engine/object-field.lua +273 -126
  323. package/engine/random.d.ts +10 -0
  324. package/engine/random.lua +21 -0
  325. package/engine/standard/entries/ability-type.d.ts +3102 -7
  326. package/engine/standard/entries/ability-type.lua +0 -6
  327. package/engine/standard/entries/buff-type.d.ts +45 -0
  328. package/engine/standard/entries/buff-type.lua +43 -0
  329. package/engine/standard/entries/item-type.d.ts +1299 -0
  330. package/engine/standard/entries/item-type.lua +2 -0
  331. package/engine/standard/entries/lightning-type.d.ts +42 -15
  332. package/engine/standard/entries/lightning-type.lua +0 -14
  333. package/engine/standard/entries/unit-type.d.ts +5 -0
  334. package/engine/standard/entries/unit-type.lua +5 -0
  335. package/engine/standard/fields/ability.d.ts +4 -4
  336. package/engine/standard/fields/ability.lua +4 -4
  337. package/engine/standard/fields/item.d.ts +4 -0
  338. package/engine/standard/fields/item.lua +6 -0
  339. package/engine/standard/fields/unit.d.ts +11 -3
  340. package/engine/standard/fields/unit.lua +15 -2
  341. package/engine/synchronization.d.ts +11 -0
  342. package/engine/synchronization.lua +77 -0
  343. package/engine/text-tag.d.ts +14 -2
  344. package/engine/text-tag.lua +135 -23
  345. package/engine/unit.d.ts +11 -1
  346. package/engine/unit.lua +11 -1
  347. package/event.d.ts +1 -1
  348. package/lualib_bundle.lua +1 -1
  349. package/math.d.ts +2 -0
  350. package/math.lua +14 -0
  351. package/net/socket.lua +1 -1
  352. package/network.lua +25 -1
  353. package/objutil/buff.lua +11 -9
  354. package/objutil/object.lua +1 -1
  355. package/operation.d.ts +8 -1
  356. package/operation.lua +38 -18
  357. package/package.json +3 -23
  358. package/patch-lua.lua +15 -0
  359. package/patch-lualib.lua +1 -1
  360. package/utility/arrays.d.ts +8 -1
  361. package/utility/arrays.lua +25 -0
  362. package/utility/callback-array.d.ts +17 -0
  363. package/utility/callback-array.lua +61 -0
  364. package/utility/functions.d.ts +4 -0
  365. package/utility/functions.lua +9 -0
  366. package/utility/linked-map.d.ts +35 -0
  367. package/utility/linked-map.lua +107 -0
  368. package/utility/linked-set.d.ts +4 -1
  369. package/utility/linked-set.lua +46 -1
  370. package/utility/lua-maps.d.ts +11 -2
  371. package/utility/lua-maps.lua +33 -2
  372. package/utility/lua-sets.d.ts +1 -0
  373. package/utility/lua-sets.lua +4 -0
  374. package/utility/random.d.ts +102 -0
  375. package/utility/random.lua +273 -0
  376. package/utility/records.lua +20 -1
  377. package/utility/types.d.ts +3 -0
  378. package/utility/unordered-map.d.ts +27 -0
  379. package/utility/unordered-map.lua +99 -0
  380. package/engine/internal/unit/item.lua +0 -78
  381. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  382. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  383. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  384. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/attributes.d.ts CHANGED
@@ -13,5 +13,6 @@ export declare namespace Attribute {
13
13
  export declare class AttributesHolder {
14
14
  readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
15
15
  readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
16
+ getOrPut<T>(attribute: Attribute<T>, defaultValue: () => T): T;
16
17
  }
17
18
  export {};
package/attributes.lua CHANGED
@@ -20,4 +20,13 @@ local AttributesHolder = ____exports.AttributesHolder
20
20
  AttributesHolder.name = "AttributesHolder"
21
21
  function AttributesHolder.prototype.____constructor(self)
22
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
23
32
  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;
@@ -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
@@ -178,6 +110,12 @@ function Effect.prototype.onDestroy(self)
178
110
  destroyEffect(self.handle)
179
111
  return Handle.prototype.onDestroy(self)
180
112
  end
113
+ function Effect.prototype.setAnimation(self, animation)
114
+ setSpecialEffectAnimation(self.handle, animation)
115
+ end
116
+ function Effect.prototype.queueAnimation(self, animation)
117
+ queueSpecialEffectAnimation(self.handle, animation)
118
+ end
181
119
  function Effect.create(self, modelPath, xOrWidget, yOrAttachmentPoint, parameters)
182
120
  local effect = self:of(addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters))
183
121
  if parameters ~= nil then
@@ -210,6 +148,34 @@ function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, paramete
210
148
  parameters
211
149
  )
212
150
  end
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
161
+ 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
+ )
213
179
  __TS__SetDescriptor(
214
180
  Effect.prototype,
215
181
  "color",
@@ -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<[
@@ -136,8 +137,26 @@ export declare class Frame extends Handle<jframehandle> {
136
137
  static get onMouseUp(): Event<[Player, jmousebuttontype, number, number]>;
137
138
  private static onMouseDownEvent?;
138
139
  static get onMouseDown(): Event<[Player, jmousebuttontype, number, number]>;
139
- static get onMouseMove(): Event<[player: Player, x: number, y: number]>;
140
- static get onMouseMoveLocal(): Event<[x: number, y: number]>;
140
+ /**
141
+ * Synchronized native mouse movement of every player. Each movement of every player's
142
+ * cursor is sent over the network, so with several players moving their mice this floods
143
+ * the network and raises the latency for everyone. Prefer {@link mouseMoveLocalEvent} and
144
+ * synchronize the needed coordinates explicitly, only when they matter (e.g. on a click).
145
+ */
146
+ static get mouseMoveEvent(): Event<[player: Player, x: number, y: number]>;
147
+ /**
148
+ * Fires on the local client when the world point under the cursor changes, whether the
149
+ * cursor or the camera moved. Polls the local cursor position every 1/64 second and sends
150
+ * nothing over the network. The point is the camera ray's intersection with the terrain,
151
+ * so it ignores units and doodads under the cursor. It is also computed while the cursor
152
+ * is over the UI; check {@link isMouseOnWorld} where that matters.
153
+ *
154
+ * The poll runs only while the event has listeners, and the first listener receives the
155
+ * current point on the next poll. Adding and removing listeners is async-safe, so local
156
+ * code may subscribe only while it needs the cursor (e.g. while a tool is open for
157
+ * {@link Player.local}) and leave the poll idle otherwise.
158
+ */
159
+ static get mouseMoveLocalEvent(): Event<[x: number, y: number]>;
141
160
  static createSimple<T extends Frame>(this: FrameSubclass<T>, name: string, parent?: Frame, createContext?: number): T;
142
161
  static create<T extends Frame>(this: FrameSubclass<T>, name: string, parent: Frame, priority?: number, createContext?: number): T;
143
162
  static createByType<T extends Frame>(this: FrameSubclass<T>, typeName: "BACKDROP" | "BUTTON" | "CHATDISPLAY" | "CHECKBOX" | "CONTROL" | "DIALOG" | "EDITBOX" | "FRAME" | "GLUEBUTTON" | "GLUECHECKBOX" | "GLUETEXTBUTTON" | "HIGHLIGHT" | "LISTBOX" | "MENU" | "POPUPMENU" | "SCROLLBAR" | "SLIDER" | "TEXT" | "TEXTAREA" | "TEXTBUTTON", name: string, parent: Frame, inherits?: string, createContext?: number): T;
@@ -12,16 +12,38 @@ local ____player = require("core.types.player")
12
12
  local Player = ____player.Player
13
13
  local ____event = require("event")
14
14
  local Event = ____event.Event
15
+ local InitializingEvent = ____event.InitializingEvent
15
16
  local TriggerEvent = ____event.TriggerEvent
16
17
  local ____timer = require("core.types.timer")
17
18
  local Timer = ____timer.Timer
19
+ local ____frame_2Dcoordinates = require("engine.internal.misc.frame-coordinates")
20
+ local FRAME_MAX_Y = ____frame_2Dcoordinates.FRAME_MAX_Y
21
+ local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
22
+ local getFrameMinXMaxX = ____frame_2Dcoordinates.getFrameMinXMaxX
23
+ local ____playerCamera = require("core.types.playerCamera")
24
+ local frameCoordinatesToWorld = ____playerCamera.frameCoordinatesToWorld
25
+ local ____lua_2Dsets = require("utility.lua-sets")
26
+ local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
27
+ local ____socket = require("net.socket")
28
+ local Socket = ____socket.Socket
29
+ local ____lua_2Dmaps = require("utility.lua-maps")
30
+ local getOrPut = ____lua_2Dmaps.getOrPut
31
+ local luaMapInvert = ____lua_2Dmaps.luaMapInvert
32
+ local luaMapOf = ____lua_2Dmaps.luaMapOf
33
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
18
34
  local frameClick = BlzFrameClick
19
35
  local frameGetEnable = BlzFrameGetEnable
20
36
  local frameIsVisible = BlzFrameIsVisible
21
37
  local frameSetEnable = BlzFrameSetEnable
22
38
  local frameSetScale = BlzFrameSetScale
23
- local getCameraTargetPositionX = GetCameraTargetPositionX
24
- local getCameraTargetPositionY = GetCameraTargetPositionY
39
+ local getHandleId = GetHandleId
40
+ local getLocalClientHeight = BlzGetLocalClientHeight
41
+ local getMouseScreenPosX = BlzGetMouseScreenPosX
42
+ local getMouseScreenPosY = BlzGetMouseScreenPosY
43
+ local getOriginFrame = BlzGetOriginFrame
44
+ local location = Location
45
+ local pixelToFrameX = BlzPixelToFrameX
46
+ local pixelToFrameY = BlzPixelToFrameY
25
47
  local ____rawget = _G.rawget
26
48
  local rawset = _G.rawset
27
49
  local invoke = Event.invoke
@@ -109,6 +131,37 @@ Timer.onPeriod[1 / 64]:addListener(function()
109
131
  frameClick(isMouseOnWorld and dummyButtonOn or dummyButtonOff)
110
132
  end
111
133
  end)
134
+ --- The poll is registered synchronously at module load and runs only while the event has
135
+ -- listeners. Initializing and deinitializing the event only toggle this flag — they create no
136
+ -- handles and add no timer listeners — so subscribing and unsubscribing are async-safe.
137
+ local isMouseMoveLocalPollActive = false
138
+ local lastMouseMoveLocalX = 0
139
+ local lastMouseMoveLocalY = 0
140
+ local mouseMoveLocalEvent = __TS__New(
141
+ InitializingEvent,
142
+ function()
143
+ isMouseMoveLocalPollActive = true
144
+ lastMouseMoveLocalX = 0 / 0
145
+ lastMouseMoveLocalY = 0 / 0
146
+ end,
147
+ function()
148
+ isMouseMoveLocalPollActive = false
149
+ end
150
+ )
151
+ Timer.onPeriod[1 / 64]:addListener(function()
152
+ if not isMouseMoveLocalPollActive or getLocalClientHeight() == 0 then
153
+ return
154
+ end
155
+ local x, y, ____, isDefinite = frameCoordinatesToWorld(
156
+ pixelToFrameX(getMouseScreenPosX()),
157
+ pixelToFrameY(getMouseScreenPosY())
158
+ )
159
+ if isDefinite and (x ~= lastMouseMoveLocalX or y ~= lastMouseMoveLocalY) then
160
+ lastMouseMoveLocalX = x
161
+ lastMouseMoveLocalY = y
162
+ invoke(mouseMoveLocalEvent, x, y)
163
+ end
164
+ end)
112
165
  ____exports.FramePoint = {}
113
166
  local FramePoint = ____exports.FramePoint
114
167
  do
@@ -123,6 +176,79 @@ do
123
176
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
124
177
  end
125
178
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
179
+ local isMouseInsideLocallyByFrame = mutableLuaMap()
180
+ local mouseEnterLocalEventByFrame = mutableLuaMap()
181
+ local mouseLeaveLocalEventByFrame = mutableLuaMap()
182
+ local isLocalMouseTrackingStarted = false
183
+ --- Reused across ticks to avoid per-tick allocations: only the first `leftFrameCount` /
184
+ -- `enteredFrameCount` entries are meaningful, stale entries beyond them are never read and are
185
+ -- kept collectable by the weak values mode.
186
+ local leftFrames = setmetatable({}, {__mode = "v"})
187
+ local enteredFrames = setmetatable({}, {__mode = "v"})
188
+ --- All frames share a single poll which invokes every mouse leave event before any mouse enter
189
+ -- event within the same tick. With a poll per event, the invocation order would depend on the
190
+ -- event creation order instead, breaking listeners relying on the natural "leave the old frame,
191
+ -- then enter the new frame" order.
192
+ local function startLocalMouseTracking()
193
+ if isLocalMouseTrackingStarted then
194
+ return
195
+ end
196
+ isLocalMouseTrackingStarted = true
197
+ Timer.onPeriod[1 / 64]:addListener(function()
198
+ local leftFrameCount = 0
199
+ local enteredFrameCount = 0
200
+ for frame, wasMouseInside in pairs(isMouseInsideLocallyByFrame) do
201
+ local tooltip = tooltipByFrame[frame]
202
+ local isMouseInside = tooltip ~= nil and tooltip.visible
203
+ if isMouseInside ~= wasMouseInside then
204
+ isMouseInsideLocallyByFrame[frame] = isMouseInside
205
+ if isMouseInside then
206
+ enteredFrames[enteredFrameCount + 1] = frame
207
+ enteredFrameCount = enteredFrameCount + 1
208
+ else
209
+ leftFrames[leftFrameCount + 1] = frame
210
+ leftFrameCount = leftFrameCount + 1
211
+ end
212
+ end
213
+ end
214
+ for i = 1, leftFrameCount do
215
+ local event = mouseLeaveLocalEventByFrame[leftFrames[i]]
216
+ if event ~= nil then
217
+ Event.invoke(event)
218
+ end
219
+ end
220
+ for i = 1, enteredFrameCount do
221
+ local event = mouseEnterLocalEventByFrame[enteredFrames[i]]
222
+ if event ~= nil then
223
+ Event.invoke(event)
224
+ end
225
+ end
226
+ end)
227
+ end
228
+ local keyByAsyncInitOriginFrameType = luaMapOf(ORIGIN_FRAME_PORTRAIT_HP_TEXT, "hp", ORIGIN_FRAME_PORTRAIT_MANA_TEXT, "mana")
229
+ local asyncInitOriginFrameTypeByKey = luaMapInvert(keyByAsyncInitOriginFrameType)
230
+ local seenAsyncInitOriginFrameTypes = mutableLuaSet()
231
+ local seenAsyncInitOriginFrameTypesSocket = __TS__New(Socket)
232
+ local seenPlayersByAsyncInitOriginFrameType = mutableLuaMap()
233
+ seenAsyncInitOriginFrameTypesSocket.onMessage:addListener(function(player, key)
234
+ local asyncInitOriginFrameType = asyncInitOriginFrameTypeByKey[key]
235
+ if asyncInitOriginFrameType ~= nil then
236
+ getOrPut(seenPlayersByAsyncInitOriginFrameType, asyncInitOriginFrameType, mutableLuaSet)[player] = true
237
+ end
238
+ end)
239
+ local function haveAllPlayersSeenAsyncInitOriginFrameType(frame)
240
+ local players = seenPlayersByAsyncInitOriginFrameType[frame]
241
+ if players == nil then
242
+ return false
243
+ end
244
+ for ____, player in ipairs(Player.all) do
245
+ if player.isUser and player.isPlaying and not (players[player] ~= nil) then
246
+ return false
247
+ end
248
+ end
249
+ keyByAsyncInitOriginFrameType[frame] = nil
250
+ return true
251
+ end
126
252
  ____exports.Frame = __TS__Class()
127
253
  local Frame = ____exports.Frame
128
254
  Frame.name = "Frame"
@@ -155,6 +281,18 @@ function Frame.prototype.getEvent(self, eventType, c)
155
281
  end
156
282
  return self.events[eventId]
157
283
  end
284
+ function Frame.prototype.trackMouseLocally(self)
285
+ if not (tooltipByFrame[self] ~= nil) then
286
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
287
+ 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)
288
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
289
+ self:setTooltip(tooltip)
290
+ end
291
+ if not (isMouseInsideLocallyByFrame[self] ~= nil) then
292
+ isMouseInsideLocallyByFrame[self] = false
293
+ startLocalMouseTracking()
294
+ end
295
+ end
158
296
  function Frame.prototype.hide(self)
159
297
  self.hideCounter = self.hideCounter + 1
160
298
  if self.hideCounter > 0 then
@@ -301,7 +439,17 @@ function Frame.byOrigin(self, frameType, index)
301
439
  if index == nil then
302
440
  index = 0
303
441
  end
304
- return self:of(BlzGetOriginFrame(frameType, index))
442
+ local frame = getOriginFrame(frameType, index)
443
+ local asyncInitOriginFrameTypeKey = keyByAsyncInitOriginFrameType[frameType]
444
+ if index == 0 and asyncInitOriginFrameTypeKey ~= nil and not haveAllPlayersSeenAsyncInitOriginFrameType(frameType) then
445
+ if getHandleId(frame) == 0 or seenAsyncInitOriginFrameTypes[frameType] ~= nil then
446
+ location(0, 0)
447
+ else
448
+ seenAsyncInitOriginFrameTypes[frameType] = true
449
+ seenAsyncInitOriginFrameTypesSocket:send(asyncInitOriginFrameTypeKey)
450
+ end
451
+ end
452
+ return self:of(frame)
305
453
  end
306
454
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
307
455
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
@@ -344,27 +492,21 @@ __TS__ObjectDefineProperty(
344
492
  Frame,
345
493
  "minX",
346
494
  {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
495
+ local minX = getFrameMinXMaxX()
496
+ return minX
352
497
  end}
353
498
  )
354
499
  __TS__ObjectDefineProperty(
355
500
  Frame,
356
501
  "maxX",
357
502
  {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
503
+ local ____, maxX = getFrameMinXMaxX()
504
+ return maxX
363
505
  end}
364
506
  )
365
507
  Frame.centerX = 0.4
366
- Frame.minY = 0
367
- Frame.maxY = 0.6
508
+ Frame.minY = FRAME_MIN_Y
509
+ Frame.maxY = FRAME_MAX_Y
368
510
  Frame.centerY = 0.3
369
511
  __TS__SetDescriptor(
370
512
  Frame.prototype,
@@ -626,24 +768,8 @@ __TS__SetDescriptor(
626
768
  "mouseEnterLocalEvent",
627
769
  {get = function(self)
628
770
  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)
771
+ self:trackMouseLocally()
772
+ mouseEnterLocalEventByFrame[self] = event
647
773
  rawset(self, "mouseEnterLocalEvent", event)
648
774
  return event
649
775
  end},
@@ -654,24 +780,8 @@ __TS__SetDescriptor(
654
780
  "mouseLeaveLocalEvent",
655
781
  {get = function(self)
656
782
  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)
783
+ self:trackMouseLocally()
784
+ mouseLeaveLocalEventByFrame[self] = event
675
785
  rawset(self, "mouseLeaveLocalEvent", event)
676
786
  return event
677
787
  end},
@@ -912,7 +1022,7 @@ __TS__ObjectDefineProperty(
912
1022
  )
913
1023
  __TS__ObjectDefineProperty(
914
1024
  Frame,
915
- "onMouseMove",
1025
+ "mouseMoveEvent",
916
1026
  {get = function(self)
917
1027
  local event = __TS__New(
918
1028
  TriggerEvent,
@@ -926,47 +1036,15 @@ __TS__ObjectDefineProperty(
926
1036
  ) end,
927
1037
  function() return Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseX(), BlzGetTriggerPlayerMouseY() end
928
1038
  )
929
- rawset(____exports.Frame, "onMouseMove", event)
1039
+ rawset(____exports.Frame, "mouseMoveEvent", event)
930
1040
  return event
931
1041
  end}
932
1042
  )
933
1043
  __TS__ObjectDefineProperty(
934
1044
  Frame,
935
- "onMouseMoveLocal",
1045
+ "mouseMoveLocalEvent",
936
1046
  {get = function(self)
937
- local invoke = Event.invoke
938
- local event = __TS__New(Event)
939
- local syncX = 0
940
- local syncY = 0
941
- local syncCamX = getCameraTargetPositionX()
942
- local syncCamY = getCameraTargetPositionY()
943
- local lastX = syncX
944
- local lastY = syncY
945
- self.onMouseMove:addListener(function(player, x, y)
946
- if player.isLocal then
947
- syncX = x
948
- syncY = y
949
- syncCamX = getCameraTargetPositionX()
950
- syncCamY = getCameraTargetPositionY()
951
- lastX = x
952
- lastY = y
953
- invoke(event, x, y)
954
- end
955
- end)
956
- Timer.onPeriod[1 / 64]:addListener(function()
957
- if syncX == 0 and syncY == 0 then
958
- return
959
- end
960
- local x = syncX + (getCameraTargetPositionX() - syncCamX)
961
- local y = syncY + (getCameraTargetPositionY() - syncCamY)
962
- if x ~= lastX or y ~= lastY then
963
- lastX = x
964
- lastY = y
965
- invoke(event, x, y)
966
- end
967
- end)
968
- rawset(____exports.Frame, "onMouseMoveLocal", event)
969
- return event
1047
+ return mouseMoveLocalEvent
970
1048
  end}
971
1049
  )
972
1050
  leftBorderFrame = ____exports.Frame:of(leftBorder)
@@ -15,6 +15,8 @@ local ____exception = require("exception")
15
15
  local IllegalStateException = ____exception.IllegalStateException
16
16
  local ____attributes = require("attributes")
17
17
  local AttributesHolder = ____attributes.AttributesHolder
18
+ local ____preconditions = require("utility.preconditions")
19
+ local checkNotNull = ____preconditions.checkNotNull
18
20
  local getHandleId = GetHandleId
19
21
  local onCreateEventByHandleConstructor = {}
20
22
  local onDestroyEventByHandleConstructor = {}
@@ -58,6 +60,9 @@ function Handle.invokeOnCreateEvent(self, clazz, handle)
58
60
  Event.invoke(onCreateEvent, handle)
59
61
  end
60
62
  end
63
+ function Handle.isWrapped(self, handle)
64
+ return self.memoized[getHandleId(handle)] ~= nil
65
+ end
61
66
  function Handle.prototype.__tostring(self)
62
67
  return (self.constructor.name .. "@") .. tostring(getHandleId(self.handle))
63
68
  end
@@ -66,17 +71,12 @@ function Handle.prototype.onDestroy(self, ...)
66
71
  return nil
67
72
  end
68
73
  function Handle.prototype.destroy(self, ...)
74
+ if self[0] == 2 or self[0] == 3 then
75
+ return nil
76
+ end
69
77
  local clazz = self.constructor
70
78
  local id = getHandleId(self.handle)
71
- if not clazz.memoized[id] then
72
- error(
73
- __TS__New(
74
- IllegalStateException,
75
- "Double-destroy run for handle " .. tostring(id)
76
- ),
77
- 0
78
- )
79
- end
79
+ checkNotNull(clazz.memoized[id])
80
80
  self[0] = 2
81
81
  if self.onDestroyEvent then
82
82
  Event.invoke(self.onDestroyEvent)
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
2
  import { Item } from "../../engine/internal/item";
3
3
  import "../../engine/internal/item+owner";
4
+ import "../../engine/internal/item/fields";
4
5
  export { Item };
@@ -2,5 +2,6 @@ local ____exports = {}
2
2
  local ____item = require("engine.internal.item")
3
3
  local Item = ____item.Item
4
4
  require("engine.internal.item+owner")
5
+ require("engine.internal.item.fields")
5
6
  ____exports.Item = Item
6
7
  return ____exports