diff --git a/api/api.lua b/api/api.lua index 4cbcd09f..1499a6d1 100644 --- a/api/api.lua +++ b/api/api.lua @@ -28,12 +28,8 @@ function pfUI.api.HasNampower() return GetNampowerVersion and true or false end -local isTurtleWoW function pfUI.api.IsTurtleWoW() - if isTurtleWoW == nil then - isTurtleWoW = C_Spell.GetSpellTexture(46050) == "Interface\\Icons\\Trade_Survival" - end - return isTurtleWoW + return C_Spell.GetSpellTexture(46050) == "Interface\\Icons\\Trade_Survival" end -- [ GetUnitDistance ] @@ -434,13 +430,17 @@ function pfUI.api.GetBagFamily(bag) local id = GetInventoryItemID("player", ContainerIDToInventoryID(bag)) if id then - local _, _, _, _, _, itemType, subType = GetItemInfo(id) - local bagsubtype = L["bagtypes"][subType] - - if bagsubtype == "DEFAULT" then return "BAG" end - if bagsubtype == "SOULBAG" then return "SOULBAG" end - if bagsubtype == "QUIVER" then return "QUIVER" end - if bagsubtype == nil then return "SPECIAL" end + -- classID 1 = Container (bags), 11 = Quiver + -- Container subclasses: 0 = Bag (default), 1 = Soul Bag, 2+ = specialty (herb/enchanting/etc.) + -- Quiver subclasses: 2 = Quiver (arrows), 3 = Ammo Pouch (bullets) + local _, _, _, _, _, classID, subClassID = C_Item.GetItemInfoInstant(id) + if classID == 1 then + if subClassID == 0 then return "BAG" end + if subClassID == 1 then return "SOULBAG" end + return "SPECIAL" + elseif classID == 11 then + return "QUIVER" + end end return nil diff --git a/env/locales_deDE.lua b/env/locales_deDE.lua index 8b146d9e..fda1e73f 100644 --- a/env/locales_deDE.lua +++ b/env/locales_deDE.lua @@ -17,20 +17,6 @@ pfUI_locale["deDE"]["healduration"] = { ["Renew"] = "Erhöht die Wirkungsdauer von 'Erneuerung' um 3 Sek.", } -pfUI_locale["deDE"]["bagtypes"] = { - ["Köcher"] = "QUIVER", - ["Seelentasche"] = "SOULBAG", - ["Behälter"] = "DEFAULT", -} - -pfUI_locale["deDE"]["itemtypes"] = { - ["INVTYPE_WAND"] = "Zauberstab", - ["INVTYPE_THROWN"] = "Wurfwaffe", - ["INVTYPE_GUN"] = "Schusswaffe", - ["INVTYPE_CROSSBOW"] = "Armbrust", - ["INVTYPE_PROJECTILE"] = "Projektil", -} - pfUI_locale["deDE"]["customcast"] = { ["AIMEDSHOT"] = "Gezielter Schuss", ["MULTISHOT"] = "Mehrfach-Schuss", diff --git a/env/locales_enUS.lua b/env/locales_enUS.lua index d3870cd3..de6166f4 100644 --- a/env/locales_enUS.lua +++ b/env/locales_enUS.lua @@ -17,20 +17,6 @@ pfUI_locale["enUS"]["healduration"] = { ["Renew"] = "Increases the duration of your Renew spell by 3 sec.", } -pfUI_locale["enUS"]["bagtypes"] = { - ["Quiver"] = "QUIVER", - ["Soul Bag"] = "SOULBAG", - ["Bag"] = "DEFAULT", -} - -pfUI_locale["enUS"]["itemtypes"] = { - ["INVTYPE_WAND"] = "Wand", - ["INVTYPE_THROWN"] = "Thrown", - ["INVTYPE_GUN"] = "Gun", - ["INVTYPE_CROSSBOW"] = "Crossbow", - ["INVTYPE_PROJECTILE"] = "Projectile", -} - pfUI_locale["enUS"]["customcast"] = { ["AIMEDSHOT"] = "Aimed Shot", ["MULTISHOT"] = "Multi-Shot", diff --git a/env/locales_esES.lua b/env/locales_esES.lua index 506e8e77..e3b93837 100644 --- a/env/locales_esES.lua +++ b/env/locales_esES.lua @@ -17,20 +17,6 @@ pfUI_locale["esES"]["healduration"] = { ["Renew"] = "Aumenta en 3 s la duración de tu hechizo Renovar.", } -pfUI_locale["esES"]["bagtypes"] = { - ["Carcaj"] = "QUIVER", - ["Bolsa de almas"] = "SOULBAG", - ["Bolsa"] = "DEFAULT", -} - -pfUI_locale["esES"]["itemtypes"] = { - ["INVTYPE_WAND"] = "Varita", - ["INVTYPE_THROWN"] = "Arma arrojadiza", - ["INVTYPE_GUN"] = "Arma de fuego", - ["INVTYPE_CROSSBOW"] = "Ballesta", - ["INVTYPE_PROJECTILE"] = "Proyectil", -} - pfUI_locale["esES"]["customcast"] = { ["AIMEDSHOT"] = "Disparo de puntería", ["MULTISHOT"] = "Multidisparo", diff --git a/env/locales_frFR.lua b/env/locales_frFR.lua index cf56bac6..20d061b8 100644 --- a/env/locales_frFR.lua +++ b/env/locales_frFR.lua @@ -17,20 +17,6 @@ pfUI_locale["frFR"]["healduration"] = { ["Renew"] = "Augmente la durée de votre sort Rénovation de 3 sec.", } -pfUI_locale["frFR"]["bagtypes"] = { - ["Carquois"] = "QUIVER", - ["Sac d'âme"] = "SOULBAG", - ["Conteneur"] = "DEFAULT", -} - -pfUI_locale["frFR"]["itemtypes"] = { - ["INVTYPE_WAND"] = "Baguette", - ["INVTYPE_THROWN"] = "Armes de jet", - ["INVTYPE_GUN"] = "Arme à feu", - ["INVTYPE_CROSSBOW"] = "Arbalète", - ["INVTYPE_PROJECTILE"] = "Projectile", -} - pfUI_locale["frFR"]["customcast"] = { ["AIMEDSHOT"] = "Visée", ["MULTISHOT"] = "Flèches multiples", diff --git a/env/locales_koKR.lua b/env/locales_koKR.lua index 2619c363..76695249 100644 --- a/env/locales_koKR.lua +++ b/env/locales_koKR.lua @@ -17,20 +17,6 @@ pfUI_locale["koKR"]["healduration"] = { ["Renew"] = "소생의 지속시간이 3초만큼 증가합니다.", } -pfUI_locale["koKR"]["bagtypes"] = { - ["화살통"] = "QUIVER", - ["영혼의 가방"] = "SOULBAG", - ["가방"] = "DEFAULT", -} - -pfUI_locale["koKR"]["itemtypes"] = { - ["INVTYPE_WAND"] = "마법봉", - ["INVTYPE_THROWN"] = "투척 무기", - ["INVTYPE_GUN"] = "총", - ["INVTYPE_CROSSBOW"] = "석궁", - ["INVTYPE_PROJECTILE"] = "투사체", -} - pfUI_locale["koKR"]["customcast"] = { ["AIMEDSHOT"] = "조준 사격", ["MULTISHOT"] = "일제 사격", diff --git a/env/locales_ruRU.lua b/env/locales_ruRU.lua index 5f317819..1eacbe7f 100644 --- a/env/locales_ruRU.lua +++ b/env/locales_ruRU.lua @@ -17,20 +17,6 @@ pfUI_locale["ruRU"]["healduration"] = { ["Renew"] = "Продлевает действие \"Обновления\" на 3 сек.", } -pfUI_locale["ruRU"]["bagtypes"] = { - ["Колчан"] = "QUIVER", - ["Сумка душ"] = "SOULBAG", - ["Сумка"] = "DEFAULT", -} - -pfUI_locale["ruRU"]["itemtypes"] = { - ["INVTYPE_WAND"] = "Жезл", - ["INVTYPE_THROWN"] = "Метательное", - ["INVTYPE_GUN"] = "Огнестрельное", - ["INVTYPE_CROSSBOW"] = "Арбалет", - ["INVTYPE_PROJECTILE"] = "Боеприпасы", -} - pfUI_locale["ruRU"]["customcast"] = { ["AIMEDSHOT"] = "Прицельный выстрел", ["MULTISHOT"] = "Залп", diff --git a/env/locales_zhCN.lua b/env/locales_zhCN.lua index 6add34dc..c0679a2b 100644 --- a/env/locales_zhCN.lua +++ b/env/locales_zhCN.lua @@ -17,20 +17,6 @@ pfUI_locale["zhCN"]["healduration"] = { ["Renew"] = "使你的恢复术的持续时间延长3秒。", } -pfUI_locale["zhCN"]["bagtypes"] = { - ["箭袋"] = "QUIVER", - ["灵魂袋"] = "SOULBAG", - ["容器"] = "DEFAULT", -} - -pfUI_locale["zhCN"]["itemtypes"] = { - ["INVTYPE_WAND"] = "魔杖", - ["INVTYPE_THROWN"] = "投掷武器", - ["INVTYPE_GUN"] = "枪械", - ["INVTYPE_CROSSBOW"] = "弩", - ["INVTYPE_PROJECTILE"] = "弹药", -} - pfUI_locale["zhCN"]["customcast"] = { ["AIMEDSHOT"] = "瞄准射击", ["MULTISHOT"] = "多重射击", diff --git a/modules/eqcompare.lua b/modules/eqcompare.lua index 92bf7e09..09463aec 100644 --- a/modules/eqcompare.lua +++ b/modules/eqcompare.lua @@ -1,10 +1,5 @@ pfUI:RegisterModule("eqcompare", function () local sides = { "Left", "Right" } - local loc = pfUI.cache["locale"] - for key, value in pairs(L["itemtypes"]) do setglobal(key, value) end - INVTYPE_WEAPON_OTHER = INVTYPE_WEAPON.."_other" - INVTYPE_FINGER_OTHER = INVTYPE_FINGER.."_other" - INVTYPE_TRINKET_OTHER = INVTYPE_TRINKET.."_other" local function AddHeader(tooltip) local name = tooltip:GetName() @@ -46,39 +41,37 @@ pfUI:RegisterModule("eqcompare", function () tooltip:Show() end + -- Numeric slotTable keyed by Enum.InventoryType (from + -- C_Item.GetItemInventoryTypeByID). Pair-slot types (finger / trinket / + -- one-hand weapon) list both destinations so both comparison tooltips + -- can be shown at once. local slotTable = { - [INVTYPE_2HWEAPON] = "MainHandSlot", - [INVTYPE_BODY] = "ShirtSlot", - [INVTYPE_CHEST] = "ChestSlot", - [INVTYPE_CLOAK] = "BackSlot", - [INVTYPE_FEET] = "FeetSlot", - [INVTYPE_FINGER] = "Finger0Slot", - [INVTYPE_FINGER_OTHER] = "Finger1Slot", - [INVTYPE_HAND] = "HandsSlot", - [INVTYPE_HEAD] = "HeadSlot", - [INVTYPE_HOLDABLE] = "SecondaryHandSlot", - [INVTYPE_LEGS] = "LegsSlot", - [INVTYPE_NECK] = "NeckSlot", - [INVTYPE_RANGED] = "RangedSlot", - [INVTYPE_RELIC] = "RangedSlot", - [INVTYPE_ROBE] = "ChestSlot", - [INVTYPE_SHIELD] = "SecondaryHandSlot", - [INVTYPE_SHOULDER] = "ShoulderSlot", - [INVTYPE_TABARD] = "TabardSlot", - [INVTYPE_TRINKET] = "Trinket0Slot", - [INVTYPE_TRINKET_OTHER] = "Trinket1Slot", - [INVTYPE_WAIST] = "WaistSlot", - [INVTYPE_WEAPON] = "MainHandSlot", - [INVTYPE_WEAPON_OTHER] = "SecondaryHandSlot", - [INVTYPE_WEAPONMAINHAND] = "MainHandSlot", - [INVTYPE_WEAPONOFFHAND] = "SecondaryHandSlot", - [INVTYPE_WRIST] = "WristSlot", - - [INVTYPE_WAND] = "RangedSlot", - [INVTYPE_GUN] = "RangedSlot", - [INVTYPE_PROJECTILE] = "AmmoSlot", - [INVTYPE_CROSSBOW] = "RangedSlot", - [INVTYPE_THROWN] = "RangedSlot", + [1] = { "HeadSlot" }, + [2] = { "NeckSlot" }, + [3] = { "ShoulderSlot" }, + [4] = { "ShirtSlot" }, + [5] = { "ChestSlot" }, + [6] = { "WaistSlot" }, + [7] = { "LegsSlot" }, + [8] = { "FeetSlot" }, + [9] = { "WristSlot" }, + [10] = { "HandsSlot" }, + [11] = { "Finger0Slot", "Finger1Slot" }, + [12] = { "Trinket0Slot", "Trinket1Slot" }, + [13] = { "MainHandSlot", "SecondaryHandSlot" }, -- one-hand weapon + [14] = { "SecondaryHandSlot" }, -- shield + [15] = { "RangedSlot" }, -- ranged (bow) + [16] = { "BackSlot" }, + [17] = { "MainHandSlot" }, -- two-hand weapon + [19] = { "TabardSlot" }, + [20] = { "ChestSlot" }, -- robe + [21] = { "MainHandSlot" }, + [22] = { "SecondaryHandSlot" }, + [23] = { "SecondaryHandSlot" }, -- holdable (off-hand) + [24] = { "AmmoSlot" }, + [25] = { "RangedSlot" }, -- thrown + [26] = { "RangedSlot" }, -- ranged-right (wand/gun/crossbow) + [28] = { "RangedSlot" }, -- relic } local function startsWith(str, start) @@ -169,55 +162,52 @@ pfUI:RegisterModule("eqcompare", function () pfUI.eqcompare.tooltip = this if not IsShiftKeyDown() and C.tooltip.compare.showalways ~= "1" then return end - local rawborder, border = GetBorderSize() - for i=1,this:NumLines() do - local tmpText = _G[this:GetName() .. "TextLeft"..i] - for slotType, slotName in pairs(slotTable) do - if tmpText:GetText() == slotType then - local slotID = GetInventorySlotInfo(slotTable[slotType]) + -- Resolve the item's slot numerically instead of scanning tooltip text + -- for a localized INVTYPE_* label. GameTooltip:GetItem() returns + -- (name, link, itemID); the slotTable is keyed by Enum.InventoryType. + local _, _, itemID = this:GetItem() + if not itemID then return end + local invType = C_Item.GetItemInventoryTypeByID(itemID) + local slots = invType and slotTable[invType] + if not slots then return end - -- determine screen part - local ltrigger = GetScreenWidth() / 2 - local x = GetCursorPosition() - x = x / UIParent:GetEffectiveScale() - if x > ltrigger then ltrigger = nil end + local _, border = GetBorderSize() - -- first tooltip - ShoppingTooltip1:SetOwner(this, "ANCHOR_NONE") - ShoppingTooltip1:ClearAllPoints() + -- determine screen part + local ltrigger = GetScreenWidth() / 2 + local x = GetCursorPosition() + x = x / UIParent:GetEffectiveScale() + if x > ltrigger then ltrigger = nil end - if ltrigger then - ShoppingTooltip1:SetPoint("BOTTOMLEFT", this, "BOTTOMRIGHT", 0, 0) - else - ShoppingTooltip1:SetPoint("BOTTOMRIGHT", this, "BOTTOMLEFT", -border*2-1, 0) - end - - ShoppingTooltip1:SetInventoryItem("player", slotID) - ShoppingTooltip1:Show() - AddHeader(ShoppingTooltip1) - - -- second tooltip - if slotTable[slotType .. "_other"] then - local slotID_other = GetInventorySlotInfo(slotTable[slotType .. "_other"]) - - ShoppingTooltip2:SetOwner(this, "ANCHOR_NONE") - ShoppingTooltip2:ClearAllPoints() - - if ltrigger then - ShoppingTooltip2:SetPoint("BOTTOMLEFT", ShoppingTooltip1, "BOTTOMRIGHT", 0, 0) - else - ShoppingTooltip2:SetPoint("BOTTOMRIGHT", ShoppingTooltip1, "BOTTOMLEFT", -border*2-1, 0) - end - - ShoppingTooltip2:SetInventoryItem("player", slotID_other) - ShoppingTooltip2:Show() - AddHeader(ShoppingTooltip2) - end - return true - end - end + -- first tooltip + local slotID = GetInventorySlotInfo(slots[1]) + ShoppingTooltip1:SetOwner(this, "ANCHOR_NONE") + ShoppingTooltip1:ClearAllPoints() + if ltrigger then + ShoppingTooltip1:SetPoint("BOTTOMLEFT", this, "BOTTOMRIGHT", 0, 0) + else + ShoppingTooltip1:SetPoint("BOTTOMRIGHT", this, "BOTTOMLEFT", -border*2-1, 0) end + ShoppingTooltip1:SetInventoryItem("player", slotID) + ShoppingTooltip1:Show() + AddHeader(ShoppingTooltip1) + + -- second tooltip for pair slots (finger / trinket / 1H weapon) + if slots[2] then + local slotID_other = GetInventorySlotInfo(slots[2]) + ShoppingTooltip2:SetOwner(this, "ANCHOR_NONE") + ShoppingTooltip2:ClearAllPoints() + if ltrigger then + ShoppingTooltip2:SetPoint("BOTTOMLEFT", ShoppingTooltip1, "BOTTOMRIGHT", 0, 0) + else + ShoppingTooltip2:SetPoint("BOTTOMRIGHT", ShoppingTooltip1, "BOTTOMLEFT", -border*2-1, 0) + end + ShoppingTooltip2:SetInventoryItem("player", slotID_other) + ShoppingTooltip2:Show() + AddHeader(ShoppingTooltip2) + end + return true end -- add HookScript method if not already existing