warscript 0.0.1-dev.459629d → 0.0.1-dev.45a73a4

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 (254) hide show
  1. package/core/dummy.lua +4 -2
  2. package/core/types/effect.d.ts +11 -1
  3. package/core/types/effect.lua +43 -77
  4. package/core/types/frame.d.ts +15 -2
  5. package/core/types/frame.lua +16 -30
  6. package/core/types/handle.lua +3 -0
  7. package/core/types/player.d.ts +1 -0
  8. package/core/types/player.lua +6 -2
  9. package/core/types/playerColor.lua +4 -3
  10. package/core/types/sound.d.ts +1 -1
  11. package/core/types/sound.lua +13 -8
  12. package/core/types/tileCell.d.ts +7 -2
  13. package/core/types/tileCell.lua +11 -0
  14. package/core/types/unit.d.ts +5 -0
  15. package/core/types/unit.lua +5 -0
  16. package/core/util.d.ts +3 -1
  17. package/core/util.lua +109 -3
  18. package/decl/native.d.ts +705 -7
  19. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  20. package/engine/ability-type-extended-tooltip.lua +44 -0
  21. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  22. package/engine/behaviour/ability/damage.d.ts +1 -0
  23. package/engine/behaviour/ability/damage.lua +12 -14
  24. package/engine/behaviour/ability/emulate-impact.lua +1 -1
  25. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  26. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  27. package/engine/behaviour/ability.d.ts +2 -0
  28. package/engine/behaviour/ability.lua +25 -0
  29. package/engine/behaviour/unit.d.ts +1 -0
  30. package/engine/behaviour/unit.lua +1 -0
  31. package/engine/buff.d.ts +12 -10
  32. package/engine/buff.lua +64 -16
  33. package/engine/index.d.ts +2 -1
  34. package/engine/internal/ability.d.ts +7 -0
  35. package/engine/internal/ability.lua +60 -31
  36. package/engine/internal/item/owner-cache.d.ts +5 -0
  37. package/engine/internal/item/owner-cache.lua +4 -0
  38. package/engine/internal/item+owner.d.ts +2 -0
  39. package/engine/internal/item+owner.lua +27 -4
  40. package/engine/internal/item.d.ts +17 -1
  41. package/engine/internal/item.lua +115 -23
  42. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  43. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  44. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  45. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  46. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  47. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  48. package/engine/internal/unit/appearance.d.ts +15 -0
  49. package/engine/internal/unit/appearance.lua +85 -0
  50. package/engine/internal/unit/bonus.d.ts +8 -0
  51. package/engine/internal/unit/bonus.lua +69 -5
  52. package/engine/internal/unit/buff.d.ts +2 -2
  53. package/engine/internal/unit/buff.lua +34 -19
  54. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  55. package/engine/internal/unit/equipment-inventory.lua +233 -0
  56. package/engine/internal/unit/expiration-timer.lua +1 -1
  57. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  58. package/engine/internal/unit/extended-inventory.lua +99 -0
  59. package/engine/internal/unit/ignore-events-items.lua +10 -1
  60. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  61. package/engine/internal/unit/inventory.lua +87 -0
  62. package/engine/internal/unit/item-container.d.ts +25 -0
  63. package/engine/internal/unit/item-container.lua +11 -0
  64. package/engine/internal/unit/item-order-events.d.ts +17 -0
  65. package/engine/internal/unit/item-order-events.lua +67 -0
  66. package/engine/internal/unit/item-slot.d.ts +27 -0
  67. package/engine/internal/unit/item-slot.lua +92 -0
  68. package/engine/internal/unit/order.d.ts +3 -3
  69. package/engine/internal/unit/order.lua +10 -10
  70. package/engine/internal/unit+ability.d.ts +2 -1
  71. package/engine/internal/unit+ability.lua +63 -2
  72. package/engine/internal/unit+damage.d.ts +9 -0
  73. package/engine/internal/unit+damage.lua +33 -0
  74. package/engine/internal/unit+rally.lua +9 -31
  75. package/engine/internal/unit-missile-data.lua +58 -32
  76. package/engine/internal/unit-missile-launch.lua +13 -13
  77. package/engine/internal/unit.d.ts +2 -10
  78. package/engine/internal/unit.lua +50 -100
  79. package/engine/local-client.d.ts +21 -0
  80. package/engine/local-client.lua +242 -57
  81. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  82. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  83. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  84. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  85. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  86. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  87. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  88. package/engine/object-data/auxiliary/item-class.lua +2 -0
  89. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  90. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  91. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  92. package/engine/object-data/auxiliary/order-type.lua +2 -0
  93. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  94. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  95. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  96. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  97. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  98. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  99. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  100. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  101. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  102. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  103. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  104. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  105. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  106. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  107. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  108. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  109. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  110. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  111. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  112. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  113. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  114. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  115. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  116. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  117. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  118. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  119. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  120. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  121. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  122. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  123. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  124. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  125. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  126. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  127. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  128. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  129. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  130. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  131. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  132. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  133. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  134. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  135. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  136. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  137. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  138. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  139. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  140. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  141. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  142. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  143. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  144. package/engine/object-data/entry/ability-type/healing-modifier.d.ts +9 -0
  145. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  146. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  147. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  148. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  149. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  150. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  151. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  152. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  153. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  154. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  155. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  156. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  157. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  158. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  159. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  160. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  161. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  162. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  163. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  164. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  165. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  166. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  167. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  168. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  169. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  170. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  171. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  172. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  173. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  174. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  175. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  176. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  177. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  178. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  179. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  180. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  181. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  182. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  183. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  184. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  185. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  186. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  187. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  188. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  189. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  190. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  191. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  192. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  193. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  194. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  195. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  196. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  197. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  198. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  199. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  200. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  201. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  202. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  203. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  204. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  205. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  206. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  207. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  208. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  209. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  210. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  211. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  212. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  213. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  214. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  215. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  216. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  217. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  218. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  219. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  220. package/engine/object-data/entry/ability-type.d.ts +29 -6
  221. package/engine/object-data/entry/ability-type.lua +240 -45
  222. package/engine/object-data/entry/buff-type.d.ts +6 -2
  223. package/engine/object-data/entry/buff-type.lua +26 -0
  224. package/engine/object-data/entry/destructible-type.d.ts +6 -2
  225. package/engine/object-data/entry/destructible-type.lua +26 -0
  226. package/engine/object-data/entry/item-type.d.ts +18 -3
  227. package/engine/object-data/entry/item-type.lua +84 -0
  228. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  229. package/engine/object-data/entry/lightning-type.lua +1 -1
  230. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  231. package/engine/object-data/entry/unit-type.d.ts +47 -2
  232. package/engine/object-data/entry/unit-type.lua +383 -49
  233. package/engine/object-data/entry/upgrade.d.ts +2 -2
  234. package/engine/object-data/entry.d.ts +6 -1
  235. package/engine/object-data/entry.lua +8 -0
  236. package/engine/random.lua +1 -1
  237. package/engine/standard/entries/ability-type.d.ts +3102 -7
  238. package/engine/standard/entries/ability-type.lua +0 -6
  239. package/engine/standard/entries/buff-type.d.ts +45 -0
  240. package/engine/standard/entries/buff-type.lua +43 -0
  241. package/engine/standard/entries/item-type.d.ts +1299 -0
  242. package/engine/standard/entries/item-type.lua +2 -0
  243. package/engine/standard/entries/lightning-type.d.ts +42 -15
  244. package/engine/standard/entries/lightning-type.lua +0 -14
  245. package/engine/standard/entries/unit-type.d.ts +5 -0
  246. package/engine/standard/entries/unit-type.lua +5 -0
  247. package/engine/unit.d.ts +5 -1
  248. package/engine/unit.lua +5 -1
  249. package/event.d.ts +1 -1
  250. package/objutil/buff.lua +1 -1
  251. package/package.json +2 -22
  252. package/utility/arrays.d.ts +7 -1
  253. package/utility/arrays.lua +17 -0
  254. package/engine/internal/unit/item.lua +0 -78
@@ -1,5 +1,4 @@
1
1
  local ____lualib = require("lualib_bundle")
2
- local __TS__ArrayMap = ____lualib.__TS__ArrayMap
3
2
  local __TS__New = ____lualib.__TS__New
4
3
  local __TS__Class = ____lualib.__TS__Class
5
4
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
@@ -21,34 +20,95 @@ local ____color = require("core.types.color")
21
20
  local Color = ____color.Color
22
21
  local ____arrays = require("utility.arrays")
23
22
  local array = ____arrays.array
24
- local loadTOCFile = BlzLoadTOCFile
25
- local getLocalClientWidth = BlzGetLocalClientWidth
26
- local getLocalClientHeight = BlzGetLocalClientHeight
27
- local isLocalClientActive = BlzIsLocalClientActive
28
- local isHeroUnitId = IsHeroUnitId
23
+ local frameToPixelX = BlzFrameToPixelX
24
+ local frameToPixelY = BlzFrameToPixelY
29
25
  local getHandleId = GetHandleId
26
+ local getLocalClientHeight = BlzGetLocalClientHeight
27
+ local getLocalClientWidth = BlzGetLocalClientWidth
28
+ local getLocale = BlzGetLocale
30
29
  local getMouseFocusUnit = BlzGetMouseFocusUnit
30
+ local getMouseScreenPosX = BlzGetMouseScreenPosX
31
+ local getMouseScreenPosY = BlzGetMouseScreenPosY
32
+ local frameGetText = BlzFrameGetText
31
33
  local getUnitRealField = BlzGetUnitRealField
34
+ local getUnitState = GetUnitState
32
35
  local getUnitTypeId = GetUnitTypeId
33
- local getLocale = BlzGetLocale
36
+ local isHeroUnitId = IsHeroUnitId
37
+ local isKeyPressed = BlzIsKeyPressed
38
+ local isLocalClientActive = BlzIsLocalClientActive
39
+ local isMetaKeyPressed = BlzIsMetaKeyPressed
40
+ local isMouseButtonPressed = BlzIsMouseButtonPressed
41
+ local loadTOCFile = BlzLoadTOCFile
34
42
  local pingMinimap = PingMinimap
35
43
  local pingMinimapEx = PingMinimapEx
44
+ local pixelToFrameX = BlzPixelToFrameX
45
+ local pixelToFrameY = BlzPixelToFrameY
46
+ local setFrameVisible = BlzFrameSetVisible
36
47
  local tableSort = table.sort
37
- local tocPath = "_warscript\\IsHD.toc"
48
+ local hdTocPath = "_warscript\\IsHD.toc"
49
+ local deTocPath = "_warscript\\IsDE.toc"
38
50
  compiletime(function()
39
51
  if currentMap then
40
- local fdfPath = "_warscript\\IsHD.fdf"
41
- currentMap:addFileString("_HD.w3mod\\" .. fdfPath, "\r\n")
42
- currentMap:addFileString("_HD.w3mod\\" .. tocPath, fdfPath .. "\r\n")
52
+ local hdFdfPath = "_warscript\\IsHD.fdf"
53
+ currentMap:addFileString("_HD.w3mod\\" .. hdFdfPath, "\r\n")
54
+ currentMap:addFileString("_HD.w3mod\\" .. hdTocPath, hdFdfPath .. "\r\n")
55
+ local deFdfPath = "_warscript\\IsDE.fdf"
56
+ currentMap:addFileString("_DE.w3mod\\" .. deFdfPath, "\r\n")
57
+ currentMap:addFileString("_DE.w3mod\\" .. deTocPath, deFdfPath .. "\r\n")
43
58
  end
44
59
  end)
45
- local selectionButtons
46
- Timer:run(function()
47
- selectionButtons = __TS__ArrayMap(
48
- Frame:byName("SimpleInfoPanelUnitDetail").parent:getChild(5):getChild(0).children,
49
- function(____, frame) return frame:getChild(1) end
60
+ --- The portrait's health and mana texts show the focused unit's current and maximum values
61
+ -- as "current / maximum". Once they exist, these origin frames live for the whole game, so
62
+ -- the polling may read them every tick; the group panel's buttons, by contrast, are rebuilt
63
+ -- at any selection change and a retained button handle crashes the game on the first native
64
+ -- called with it. The frames are not there at map load, though, and appear at different
65
+ -- times on different clients: `Frame.byOrigin` returns undefined until then and balances
66
+ -- the handle allocation across clients, so it is asked again once a second.
67
+ local portraitHpText
68
+ local portraitManaText
69
+ local function actualizePortraitFrames()
70
+ portraitHpText = Frame:byOrigin(ORIGIN_FRAME_PORTRAIT_HP_TEXT)
71
+ portraitManaText = Frame:byOrigin(ORIGIN_FRAME_PORTRAIT_MANA_TEXT)
72
+ end
73
+ --- Finds "current / maximum" in the text, which may also carry color codes and other
74
+ -- decoration; returns -1 for both when there is no such pair.
75
+ local function parsePortraitValues(frame)
76
+ if frame == nil then
77
+ return -1, -1
78
+ end
79
+ local text = frameGetText(frame.handle)
80
+ local current, maximum = string.match(text, "(%d+)%s*/%s*(%d+)")
81
+ if current == nil or maximum == nil then
82
+ return -1, -1
83
+ end
84
+ return tonumber(current), tonumber(maximum)
85
+ end
86
+ --- Whether a unit value can be what the portrait shows as `shown`; the rounding rule is unknown.
87
+ local function matchesPortraitValue(value, shown)
88
+ return math.abs(value - shown) < 1
89
+ end
90
+ --- Whether the unit's health matches what the portrait shows; the health text is required.
91
+ local function matchesPortraitHealth(unit, hp, maxHp)
92
+ local handle = unit.handle
93
+ return maxHp >= 0 and matchesPortraitValue(
94
+ getUnitState(handle, UNIT_STATE_LIFE),
95
+ hp
96
+ ) and matchesPortraitValue(
97
+ getUnitState(handle, UNIT_STATE_MAX_LIFE),
98
+ maxHp
50
99
  )
51
- end)
100
+ end
101
+ --- Whether the unit has mana and it matches what the portrait shows. The mana text is not
102
+ -- redrawn for a unit without mana (it keeps the previously focused unit's values), so a
103
+ -- mana match is evidence for a unit, but a mismatch is no evidence against one without mana.
104
+ local function matchesPortraitMana(unit, mana, maxMana)
105
+ local handle = unit.handle
106
+ local unitMaxMana = getUnitState(handle, UNIT_STATE_MAX_MANA)
107
+ return maxMana >= 0 and unitMaxMana > 0 and matchesPortraitValue(
108
+ getUnitState(handle, UNIT_STATE_MANA),
109
+ mana
110
+ ) and matchesPortraitValue(unitMaxMana, maxMana)
111
+ end
52
112
  local localSelectedUnits = {}
53
113
  local indexByLocalSelectedUnit = {}
54
114
  local function compareUnitsSelectionPriority(a, b)
@@ -65,6 +125,7 @@ local function compareUnitsSelectionPriority(a, b)
65
125
  end
66
126
  local mainSelectedUnitChangeEvent
67
127
  local previousMainSelectedUnit
128
+ local currentMainSelectedUnit
68
129
  local lastTargetingModeState = false
69
130
  local targetingModeEnterEvent = __TS__New(Event)
70
131
  local targetingModeLeaveEvent = __TS__New(Event)
@@ -99,6 +160,27 @@ function LocalClient.pingMinimap(self, x, y, duration, redOrColor, greenOrFlashy
99
160
  )
100
161
  end
101
162
  end
163
+ function LocalClient.isKeyPressed(self, key)
164
+ return isKeyPressed(key)
165
+ end
166
+ function LocalClient.isMetaKeyPressed(self, key)
167
+ return isMetaKeyPressed(key)
168
+ end
169
+ function LocalClient.isMouseButtonPressed(self, button)
170
+ return isMouseButtonPressed(button)
171
+ end
172
+ function LocalClient.screenToFrameX(self, x)
173
+ return pixelToFrameX(x)
174
+ end
175
+ function LocalClient.screenToFrameY(self, y)
176
+ return pixelToFrameY(y)
177
+ end
178
+ function LocalClient.frameToScreenX(self, x)
179
+ return frameToPixelX(x)
180
+ end
181
+ function LocalClient.frameToScreenY(self, y)
182
+ return frameToPixelY(y)
183
+ end
102
184
  LocalClient.locale = getLocale()
103
185
  __TS__ObjectDefineProperty(
104
186
  LocalClient,
@@ -114,6 +196,13 @@ __TS__ObjectDefineProperty(
114
196
  return getLocalClientHeight()
115
197
  end}
116
198
  )
199
+ __TS__ObjectDefineProperty(
200
+ LocalClient,
201
+ "isSD",
202
+ {get = function(self)
203
+ return true
204
+ end}
205
+ )
117
206
  __TS__ObjectDefineProperty(
118
207
  LocalClient,
119
208
  "isHD",
@@ -121,11 +210,18 @@ __TS__ObjectDefineProperty(
121
210
  return false
122
211
  end}
123
212
  )
213
+ __TS__ObjectDefineProperty(
214
+ LocalClient,
215
+ "isDE",
216
+ {get = function(self)
217
+ return false
218
+ end}
219
+ )
124
220
  __TS__ObjectDefineProperty(
125
221
  LocalClient,
126
222
  "graphicsMode",
127
223
  {get = function(self)
128
- return self.isHD and 1 or 0
224
+ return 0
129
225
  end}
130
226
  )
131
227
  __TS__ObjectDefineProperty(
@@ -142,6 +238,34 @@ __TS__ObjectDefineProperty(
142
238
  return getLocalClientHeight() == 0
143
239
  end}
144
240
  )
241
+ __TS__ObjectDefineProperty(
242
+ LocalClient,
243
+ "mouseScreenX",
244
+ {get = function(self)
245
+ return getMouseScreenPosX()
246
+ end}
247
+ )
248
+ __TS__ObjectDefineProperty(
249
+ LocalClient,
250
+ "mouseScreenY",
251
+ {get = function(self)
252
+ return getMouseScreenPosY()
253
+ end}
254
+ )
255
+ __TS__ObjectDefineProperty(
256
+ LocalClient,
257
+ "mouseFrameX",
258
+ {get = function(self)
259
+ return pixelToFrameX(getMouseScreenPosX())
260
+ end}
261
+ )
262
+ __TS__ObjectDefineProperty(
263
+ LocalClient,
264
+ "mouseFrameY",
265
+ {get = function(self)
266
+ return pixelToFrameY(getMouseScreenPosY())
267
+ end}
268
+ )
145
269
  __TS__ObjectDefineProperty(
146
270
  LocalClient,
147
271
  "mouseFocusUnit",
@@ -153,33 +277,7 @@ __TS__ObjectDefineProperty(
153
277
  LocalClient,
154
278
  "mainSelectedUnit",
155
279
  {get = function(self)
156
- Unit:getSelectionOf(Player["local"], localSelectedUnits)
157
- for i = 1, #localSelectedUnits do
158
- indexByLocalSelectedUnit[localSelectedUnits[i]] = i
159
- end
160
- tableSort(localSelectedUnits, compareUnitsSelectionPriority)
161
- local mainSelectedUnitIndex
162
- if selectionButtons and #localSelectedUnits > 1 then
163
- local maxButtonWidth = 0
164
- for i = 0, #selectionButtons - 1 do
165
- local width = selectionButtons[i + 1].width
166
- if width > maxButtonWidth then
167
- maxButtonWidth = width
168
- mainSelectedUnitIndex = i
169
- end
170
- end
171
- end
172
- local mainSelectedUnit = localSelectedUnits[(mainSelectedUnitIndex or 0) + 1]
173
- for i = 1, #localSelectedUnits do
174
- indexByLocalSelectedUnit[localSelectedUnits[i]] = nil
175
- localSelectedUnits[i] = nil
176
- end
177
- if mainSelectedUnitChangeEvent ~= nil and mainSelectedUnit ~= previousMainSelectedUnit then
178
- local previousPreviousMainSelectedUnit = previousMainSelectedUnit
179
- previousMainSelectedUnit = mainSelectedUnit
180
- Event.invoke(mainSelectedUnitChangeEvent, previousPreviousMainSelectedUnit, previousMainSelectedUnit)
181
- end
182
- return mainSelectedUnit
280
+ return currentMainSelectedUnit
183
281
  end}
184
282
  )
185
283
  __TS__ObjectDefineProperty(
@@ -188,9 +286,6 @@ __TS__ObjectDefineProperty(
188
286
  {get = function(self)
189
287
  if mainSelectedUnitChangeEvent == nil then
190
288
  mainSelectedUnitChangeEvent = __TS__New(Event)
191
- Timer.onPeriod[1 / 64]:addListener(function()
192
- local _ = ____exports.LocalClient.mainSelectedUnit
193
- end)
194
289
  end
195
290
  return mainSelectedUnitChangeEvent
196
291
  end}
@@ -212,17 +307,104 @@ LocalClient.onDisconnect = __TS__New(
212
307
  end,
213
308
  function() return end
214
309
  )
310
+ local function actualizeMainSelectedUnit()
311
+ Unit:getSelectionOf(Player["local"], localSelectedUnits)
312
+ local selectionCount = #localSelectedUnits
313
+ for i = 1, selectionCount do
314
+ indexByLocalSelectedUnit[localSelectedUnits[i]] = i
315
+ end
316
+ tableSort(localSelectedUnits, compareUnitsSelectionPriority)
317
+ local mainSelectedUnit
318
+ if selectionCount <= 1 then
319
+ mainSelectedUnit = localSelectedUnits[1]
320
+ else
321
+ local hp, maxHp = parsePortraitValues(portraitHpText)
322
+ local mana, maxMana = parsePortraitValues(portraitManaText)
323
+ if maxHp >= 0 then
324
+ local healthMatch
325
+ for i = 1, selectionCount do
326
+ local unit = localSelectedUnits[i]
327
+ if matchesPortraitHealth(unit, hp, maxHp) then
328
+ if matchesPortraitMana(unit, mana, maxMana) then
329
+ mainSelectedUnit = unit
330
+ break
331
+ end
332
+ if healthMatch == nil then
333
+ healthMatch = unit
334
+ end
335
+ end
336
+ end
337
+ if mainSelectedUnit == nil then
338
+ mainSelectedUnit = healthMatch
339
+ end
340
+ end
341
+ if mainSelectedUnit == nil and previousMainSelectedUnit ~= nil then
342
+ for i = 1, selectionCount do
343
+ if localSelectedUnits[i] == previousMainSelectedUnit then
344
+ mainSelectedUnit = previousMainSelectedUnit
345
+ break
346
+ end
347
+ end
348
+ end
349
+ if mainSelectedUnit == nil then
350
+ mainSelectedUnit = localSelectedUnits[1]
351
+ end
352
+ end
353
+ for i = 1, selectionCount do
354
+ indexByLocalSelectedUnit[localSelectedUnits[i]] = nil
355
+ localSelectedUnits[i] = nil
356
+ end
357
+ currentMainSelectedUnit = mainSelectedUnit
358
+ if mainSelectedUnitChangeEvent ~= nil and mainSelectedUnit ~= previousMainSelectedUnit then
359
+ local previousPreviousMainSelectedUnit = previousMainSelectedUnit
360
+ previousMainSelectedUnit = mainSelectedUnit
361
+ Event.invoke(mainSelectedUnitChangeEvent, previousPreviousMainSelectedUnit, previousMainSelectedUnit)
362
+ end
363
+ end
215
364
  local commandButtons = array(
216
365
  12,
217
366
  function(i) return Frame:byOrigin(ORIGIN_FRAME_COMMAND_BUTTON, i) end
218
367
  )
368
+ local commandButtonContainers = array(
369
+ 12,
370
+ function(i) return Frame:byName("CommandButton_" .. tostring(i)) end
371
+ )
219
372
  local function getTargetingModeState()
220
- for i = 0, 10 do
221
- if commandButtons[i + 1].visible then
222
- return false
373
+ for ____, container in ipairs(commandButtonContainers) do
374
+ if container.hideCounter > 0 then
375
+ setFrameVisible(container.handle, true)
223
376
  end
224
377
  end
225
- return commandButtons[12].visible
378
+ local targeting = false
379
+ local failed = false
380
+ local failure
381
+ do
382
+ local function ____catch(____error)
383
+ failed = true
384
+ failure = ____error
385
+ end
386
+ local ____try, ____hasReturned = pcall(function()
387
+ targeting = commandButtons[12].visible
388
+ for i = 0, 10 do
389
+ if commandButtons[i + 1].visible then
390
+ targeting = false
391
+ break
392
+ end
393
+ end
394
+ end)
395
+ if not ____try then
396
+ ____catch(____hasReturned)
397
+ end
398
+ end
399
+ for ____, container in ipairs(commandButtonContainers) do
400
+ if container.hideCounter > 0 then
401
+ setFrameVisible(container.handle, false)
402
+ end
403
+ end
404
+ if failed then
405
+ error(failure, 0)
406
+ end
407
+ return targeting
226
408
  end
227
409
  actualizeTargetingModeState = function()
228
410
  if getTargetingModeState() then
@@ -240,14 +422,17 @@ actualizeTargetingModeState = function()
240
422
  end
241
423
  return false
242
424
  end
425
+ Timer.onPeriod[1]:addListener(actualizePortraitFrames)
243
426
  Timer.onPeriod[1 / 64]:addListener(function()
427
+ actualizeMainSelectedUnit()
244
428
  actualizeTargetingModeState()
245
429
  end)
246
430
  warpack.afterMapInit(function()
247
- rawset(
248
- ____exports.LocalClient,
249
- "isHD",
250
- loadTOCFile(tocPath)
251
- )
431
+ local isDE = loadTOCFile(deTocPath)
432
+ local isHD = not isDE and loadTOCFile(hdTocPath)
433
+ rawset(____exports.LocalClient, "isDE", isDE)
434
+ rawset(____exports.LocalClient, "isHD", isHD)
435
+ rawset(____exports.LocalClient, "isSD", not isDE and not isHD)
436
+ rawset(____exports.LocalClient, "graphicsMode", isDE and 2 or (isHD and 1 or 0))
252
437
  end)
253
438
  return ____exports
@@ -8,6 +8,13 @@ export type AttachmentPreset = {
8
8
  nodeName: ModelNodeName;
9
9
  nodeQualifiers: ModelNodeQualifier[];
10
10
  };
11
+ /** Where an effect attaches: a model node, e.g. the chest or the left hand. */
12
+ export type AttachmentPoint = {
13
+ nodeName: ModelNodeName;
14
+ nodeQualifiers: ModelNodeQualifier[];
15
+ };
16
+ export type AttachmentPointInput = Optional<AttachmentPoint, "nodeQualifiers">;
17
+ export declare const attachmentPointToNodeFQN: (attachmentPoint: AttachmentPointInput) => string;
11
18
  export type EffectPresetWithParameters = AttachmentPreset & {
12
19
  parameters?: EffectParameters;
13
20
  };
@@ -3,6 +3,13 @@ local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
3
3
  local __TS__StringSplit = ____lualib.__TS__StringSplit
4
4
  local __TS__ArraySlice = ____lualib.__TS__ArraySlice
5
5
  local ____exports = {}
6
+ ____exports.attachmentPointToNodeFQN = function(attachmentPoint) return table.concat(
7
+ {
8
+ attachmentPoint.nodeName,
9
+ table.unpack(attachmentPoint.nodeQualifiers or ({}))
10
+ },
11
+ ","
12
+ ) end
6
13
  ____exports.toEffectPreset = function(effectPresetInput)
7
14
  return type(effectPresetInput) == "string" and ({modelPath = effectPresetInput, nodeName = "origin", nodeQualifiers = {}}) or ({modelPath = effectPresetInput.modelPath, nodeName = effectPresetInput.nodeName or "origin", nodeQualifiers = effectPresetInput.nodeQualifiers or ({}), parameters = effectPresetInput.parameters})
8
15
  end
@@ -0,0 +1,12 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum EquipmentSlot {
3
+ HEAD = 0,
4
+ CHEST = 1,
5
+ GLOVES = 2,
6
+ BOOTS = 3,
7
+ RING = 4,
8
+ ALTERNATE_RING = 5,
9
+ PRIMARY = 6,
10
+ OFFHAND = 7,
11
+ TRINKET = 8
12
+ }
@@ -0,0 +1,2 @@
1
+ local ____exports = {}
2
+ return ____exports
@@ -0,0 +1,12 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum EquipmentType {
3
+ NONE = 0,
4
+ HEAD = 1,
5
+ CHEST = 2,
6
+ GLOVES = 3,
7
+ BOOTS = 4,
8
+ RING = 5,
9
+ PRIMARY = 6,
10
+ OFFHAND = 7,
11
+ TRINKET = 8
12
+ }
@@ -0,0 +1,26 @@
1
+ local ____exports = {}
2
+ local ____records = require("utility.records")
3
+ local invertRecord = ____records.invertRecord
4
+ local stringByEquipmentType = {
5
+ [0] = "None",
6
+ [1] = "Head",
7
+ [2] = "Chest",
8
+ [3] = "Gloves",
9
+ [4] = "Boots",
10
+ [5] = "Ring",
11
+ [6] = "Primary",
12
+ [7] = "Offhand",
13
+ [8] = "Trinket"
14
+ }
15
+ local equipmentTypeByString = invertRecord(stringByEquipmentType)
16
+ ---
17
+ -- @internal For use by internal systems only.
18
+ ____exports.equipmentTypeToString = function(equipmentType)
19
+ return stringByEquipmentType[equipmentType]
20
+ end
21
+ ---
22
+ -- @internal For use by internal systems only.
23
+ ____exports.stringToEquipmentType = function(____string)
24
+ return equipmentTypeByString[____string] or 0
25
+ end
26
+ return ____exports
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum ItemClass {
3
+ PERMANENT = "Permanent",
4
+ CHARGED = "Charged",
5
+ POWER_UP = "PowerUp",
6
+ ARTIFACT = "Artifact",
7
+ PURCHASABLE = "Purchasable",
8
+ CAMPAIGN = "Campaign",
9
+ MISCELLANEOUS = "Miscellaneous",
10
+ EQUIPMENT = "Equipment"
11
+ }
@@ -0,0 +1,2 @@
1
+ local ____exports = {}
2
+ return ____exports
@@ -0,0 +1,12 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum ItemTag {
3
+ UNDEFINED = 0,
4
+ DROPPABLE = 1,
5
+ QUEST_REWARD = 2,
6
+ BOSS_DROP = 3,
7
+ SECRET = 4,
8
+ PUZZLE = 5,
9
+ WORLD = 6,
10
+ SHOP = 7,
11
+ ANY = 8
12
+ }
@@ -0,0 +1,2 @@
1
+ local ____exports = {}
2
+ return ____exports