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.
- package/core/dummy.lua +4 -2
- package/core/types/effect.d.ts +11 -1
- package/core/types/effect.lua +43 -77
- package/core/types/frame.d.ts +15 -2
- package/core/types/frame.lua +16 -30
- package/core/types/handle.lua +3 -0
- package/core/types/player.d.ts +1 -0
- package/core/types/player.lua +6 -2
- package/core/types/playerColor.lua +4 -3
- package/core/types/sound.d.ts +1 -1
- package/core/types/sound.lua +13 -8
- package/core/types/tileCell.d.ts +7 -2
- package/core/types/tileCell.lua +11 -0
- package/core/types/unit.d.ts +5 -0
- package/core/types/unit.lua +5 -0
- package/core/util.d.ts +3 -1
- package/core/util.lua +109 -3
- package/decl/native.d.ts +705 -7
- package/engine/ability-type-extended-tooltip.d.ts +8 -0
- package/engine/ability-type-extended-tooltip.lua +44 -0
- package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
- package/engine/behaviour/ability/damage.d.ts +1 -0
- package/engine/behaviour/ability/damage.lua +12 -14
- package/engine/behaviour/ability/emulate-impact.lua +1 -1
- package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
- package/engine/behaviour/ability/on-command-impact.lua +1 -0
- package/engine/behaviour/ability.d.ts +2 -0
- package/engine/behaviour/ability.lua +25 -0
- package/engine/behaviour/unit.d.ts +1 -0
- package/engine/behaviour/unit.lua +1 -0
- package/engine/buff.d.ts +12 -10
- package/engine/buff.lua +64 -16
- package/engine/index.d.ts +2 -1
- package/engine/internal/ability.d.ts +7 -0
- package/engine/internal/ability.lua +60 -31
- package/engine/internal/item/owner-cache.d.ts +5 -0
- package/engine/internal/item/owner-cache.lua +4 -0
- package/engine/internal/item+owner.d.ts +2 -0
- package/engine/internal/item+owner.lua +27 -4
- package/engine/internal/item.d.ts +17 -1
- package/engine/internal/item.lua +115 -23
- package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
- package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
- package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
- package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
- package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
- package/engine/internal/unit/add-item-to-slot.lua +53 -12
- package/engine/internal/unit/appearance.d.ts +15 -0
- package/engine/internal/unit/appearance.lua +85 -0
- package/engine/internal/unit/bonus.d.ts +8 -0
- package/engine/internal/unit/bonus.lua +69 -5
- package/engine/internal/unit/buff.d.ts +2 -2
- package/engine/internal/unit/buff.lua +34 -19
- package/engine/internal/unit/equipment-inventory.d.ts +44 -0
- package/engine/internal/unit/equipment-inventory.lua +233 -0
- package/engine/internal/unit/expiration-timer.lua +1 -1
- package/engine/internal/unit/extended-inventory.d.ts +25 -0
- package/engine/internal/unit/extended-inventory.lua +99 -0
- package/engine/internal/unit/ignore-events-items.lua +10 -1
- package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
- package/engine/internal/unit/inventory.lua +87 -0
- package/engine/internal/unit/item-container.d.ts +25 -0
- package/engine/internal/unit/item-container.lua +11 -0
- package/engine/internal/unit/item-order-events.d.ts +17 -0
- package/engine/internal/unit/item-order-events.lua +67 -0
- package/engine/internal/unit/item-slot.d.ts +27 -0
- package/engine/internal/unit/item-slot.lua +92 -0
- package/engine/internal/unit/order.d.ts +3 -3
- package/engine/internal/unit/order.lua +10 -10
- package/engine/internal/unit+ability.d.ts +2 -1
- package/engine/internal/unit+ability.lua +63 -2
- package/engine/internal/unit+damage.d.ts +9 -0
- package/engine/internal/unit+damage.lua +33 -0
- package/engine/internal/unit+rally.lua +9 -31
- package/engine/internal/unit-missile-data.lua +58 -32
- package/engine/internal/unit-missile-launch.lua +13 -13
- package/engine/internal/unit.d.ts +2 -10
- package/engine/internal/unit.lua +50 -100
- package/engine/local-client.d.ts +21 -0
- package/engine/local-client.lua +242 -57
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
- package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
- package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
- package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
- package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
- package/engine/object-data/auxiliary/equipment-type.lua +26 -0
- package/engine/object-data/auxiliary/item-class.d.ts +11 -0
- package/engine/object-data/auxiliary/item-class.lua +2 -0
- package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
- package/engine/object-data/auxiliary/item-tag.lua +2 -0
- package/engine/object-data/auxiliary/order-type.d.ts +939 -0
- package/engine/object-data/auxiliary/order-type.lua +2 -0
- package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
- package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
- package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
- package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
- package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
- package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
- package/engine/object-data/entry/ability-type/banshee.lua +13 -0
- package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
- package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
- package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
- package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
- package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
- package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
- package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
- package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
- package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
- package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
- package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
- package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
- package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
- package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
- package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
- package/engine/object-data/entry/ability-type/consecration.lua +52 -0
- package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
- package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
- package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
- package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
- package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
- package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
- package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
- package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
- package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
- package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
- package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
- package/engine/object-data/entry/ability-type/equipment.lua +27 -0
- package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
- package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
- package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
- package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
- package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
- package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
- package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
- package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
- package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
- package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
- package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
- package/engine/object-data/entry/ability-type/grit.lua +65 -0
- package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
- package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
- package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
- package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
- package/engine/object-data/entry/ability-type/healing-modifier.d.ts +9 -0
- package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
- package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
- package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
- package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
- package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
- package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
- package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
- package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
- package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
- package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
- package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
- package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
- package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
- package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
- package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
- package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
- package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
- package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
- package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
- package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
- package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
- package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
- package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
- package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
- package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
- package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
- package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
- package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
- package/engine/object-data/entry/ability-type/provoke.lua +66 -0
- package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
- package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
- package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
- package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
- package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
- package/engine/object-data/entry/ability-type/resolve.lua +39 -0
- package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
- package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
- package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
- package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
- package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
- package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
- package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
- package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
- package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
- package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
- package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
- package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
- package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
- package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
- package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
- package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
- package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
- package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
- package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
- package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
- package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
- package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
- package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
- package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
- package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
- package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
- package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
- package/engine/object-data/entry/ability-type/talents.lua +27 -0
- package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
- package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
- package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
- package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
- package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
- package/engine/object-data/entry/ability-type/warcry.lua +26 -0
- package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
- package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
- package/engine/object-data/entry/ability-type.d.ts +29 -6
- package/engine/object-data/entry/ability-type.lua +240 -45
- package/engine/object-data/entry/buff-type.d.ts +6 -2
- package/engine/object-data/entry/buff-type.lua +26 -0
- package/engine/object-data/entry/destructible-type.d.ts +6 -2
- package/engine/object-data/entry/destructible-type.lua +26 -0
- package/engine/object-data/entry/item-type.d.ts +18 -3
- package/engine/object-data/entry/item-type.lua +84 -0
- package/engine/object-data/entry/lightning-type.d.ts +6 -8
- package/engine/object-data/entry/lightning-type.lua +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +2 -2
- package/engine/object-data/entry/unit-type.d.ts +47 -2
- package/engine/object-data/entry/unit-type.lua +383 -49
- package/engine/object-data/entry/upgrade.d.ts +2 -2
- package/engine/object-data/entry.d.ts +6 -1
- package/engine/object-data/entry.lua +8 -0
- package/engine/random.lua +1 -1
- package/engine/standard/entries/ability-type.d.ts +3102 -7
- package/engine/standard/entries/ability-type.lua +0 -6
- package/engine/standard/entries/buff-type.d.ts +45 -0
- package/engine/standard/entries/buff-type.lua +43 -0
- package/engine/standard/entries/item-type.d.ts +1299 -0
- package/engine/standard/entries/item-type.lua +2 -0
- package/engine/standard/entries/lightning-type.d.ts +42 -15
- package/engine/standard/entries/lightning-type.lua +0 -14
- package/engine/standard/entries/unit-type.d.ts +5 -0
- package/engine/standard/entries/unit-type.lua +5 -0
- package/engine/unit.d.ts +5 -1
- package/engine/unit.lua +5 -1
- package/event.d.ts +1 -1
- package/objutil/buff.lua +1 -1
- package/package.json +2 -22
- package/utility/arrays.d.ts +7 -1
- package/utility/arrays.lua +17 -0
- package/engine/internal/unit/item.lua +0 -78
package/engine/local-client.lua
CHANGED
|
@@ -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
|
|
25
|
-
local
|
|
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
|
|
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
|
|
48
|
+
local hdTocPath = "_warscript\\IsHD.toc"
|
|
49
|
+
local deTocPath = "_warscript\\IsDE.toc"
|
|
38
50
|
compiletime(function()
|
|
39
51
|
if currentMap then
|
|
40
|
-
local
|
|
41
|
-
currentMap:addFileString("_HD.w3mod\\" ..
|
|
42
|
-
currentMap:addFileString("_HD.w3mod\\" ..
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
221
|
-
if
|
|
222
|
-
|
|
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
|
-
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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,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
|
+
}
|