From a8bf7fbc0fd05cd4ccca2ec1fc04025a3185f94d Mon Sep 17 00:00:00 2001 From: Brues <5278969+brues-code@users.noreply.github.com> Date: Sun, 21 Jun 2026 14:16:56 -0500 Subject: [PATCH] Identify equipped weapon type by item subclass, not localized name HasWeaponEquipped matched the localized GetItemInfo subtype string, which required a hand-maintained translation of all 13 weapon/shield subtypes per locale plus brittle "^Fist"/last-word string parsing. Use the locale-independent class/subclass IDs from C_Item.GetItemInfoInstant instead: - Init.lua: WeaponTypeNames entries now carry numeric class + subClass set (Axes/Swords/Maces span their 1H+2H subclasses; Shields are armor class 4). - Conditionals.lua: HasWeaponEquipped resolves the slot's itemID via ClassicAPI GetInventoryItemID, then compares classID/subClassID -- no link parsing, no string munging. - Localization.lua: drop the now-unused weapon-subtype strings from every locale block (112 lines). --- Conditionals.lua | 31 ++++--------- Init.lua | 42 ++++++++++-------- Localization.lua | 112 ----------------------------------------------- 3 files changed, 32 insertions(+), 153 deletions(-) diff --git a/Conditionals.lua b/Conditionals.lua index ecc80f9..4e36fb6 100644 --- a/Conditionals.lua +++ b/Conditionals.lua @@ -2094,34 +2094,21 @@ end -- weaponType: The name of the weapon's type (e.g. Axe, Shield, etc.) -- returns: True when equipped, otherwhise false function CleveRoids.HasWeaponEquipped(weaponType) - if not CleveRoids.WeaponTypeNames[weaponType] then + local def = CleveRoids.WeaponTypeNames[weaponType] + if not def then return false end - local slotName = CleveRoids.WeaponTypeNames[weaponType].slot - local localizedName = CleveRoids.WeaponTypeNames[weaponType].name - local slotId = GetInventorySlotInfo(slotName) - local slotLink = GetInventoryItemLink("player",slotId) - - if not slotLink then + local slotId = GetInventorySlotInfo(def.slot) + local itemId = CleveRoids.ClassicAPI.GetInventoryItemID("player", slotId) + if not itemId then return false end - local _,_,itemId = string.find(slotLink,"item:(%d+)") - if not itemId then -- Also good to check if itemId was found - return false - end - local _name,_link,_,_lvl,_type,subtype = GetItemInfo(itemId) - -- just had to be special huh? - local fist = string.find(subtype,"^Fist") - -- drops things like the One-Handed prefix - local _,_,subtype = string.find(subtype,"%s?(%S+)$") - - if subtype == localizedName or (fist and (CleveRoids.WeaponTypeNames[weaponType].name == CleveRoids.Localized.FistWeapon)) then - return true - end - - return false + -- Compare locale-independent item class/subclass instead of matching the + -- localized subtype string (GetItemInfoInstant: ..., classID, subClassID). + local _, _, _, _, _, classID, subClassID = C_Item.GetItemInfoInstant(itemId) + return classID == def.class and def.subClass[subClassID] == true end -- Checks whether or not the given UnitId is in your party or your raid diff --git a/Init.lua b/Init.lua index 7fe3be2..ae1017a 100644 --- a/Init.lua +++ b/Init.lua @@ -242,28 +242,32 @@ CleveRoids.auraTextures = { -- I need to make a 2h modifier --- Maps easy to use weapon type names (e.g. Axes, Shields) to their inventory slot name and their localized tooltip name +-- Maps easy-to-use weapon type names (e.g. Axes, Shields) to their inventory +-- slot plus the locale-independent item class/subclass IDs that identify them +-- (read via C_Item.GetItemInfoInstant). class 2 = Weapon, 4 = Armor (shields). +-- subClass is a set because the logical "Axes"/"Swords"/"Maces" types span both +-- the one-handed and two-handed weapon subclasses. CleveRoids.WeaponTypeNames = { - Daggers = { slot = "MainHandSlot", name = CleveRoids.Localized.Dagger }, - Fists = { slot = "MainHandSlot", name = CleveRoids.Localized.FistWeapon }, - Axes = { slot = "MainHandSlot", name = CleveRoids.Localized.Axe }, - Swords = { slot = "MainHandSlot", name = CleveRoids.Localized.Sword }, - Staves = { slot = "MainHandSlot", name = CleveRoids.Localized.Staff }, - Maces = { slot = "MainHandSlot", name = CleveRoids.Localized.Mace }, - Polearms = { slot = "MainHandSlot", name = CleveRoids.Localized.Polearm }, + Daggers = { slot = "MainHandSlot", class = 2, subClass = { [15] = true } }, + Fists = { slot = "MainHandSlot", class = 2, subClass = { [13] = true } }, + Axes = { slot = "MainHandSlot", class = 2, subClass = { [0] = true, [1] = true } }, + Swords = { slot = "MainHandSlot", class = 2, subClass = { [7] = true, [8] = true } }, + Staves = { slot = "MainHandSlot", class = 2, subClass = { [10] = true } }, + Maces = { slot = "MainHandSlot", class = 2, subClass = { [4] = true, [5] = true } }, + Polearms = { slot = "MainHandSlot", class = 2, subClass = { [6] = true } }, -- OH - Daggers2 = { slot = "SecondaryHandSlot", name = CleveRoids.Localized.Dagger }, - Fists2 = { slot = "SecondaryHandSlot", name = CleveRoids.Localized.FistWeapon }, - Axes2 = { slot = "SecondaryHandSlot", name = CleveRoids.Localized.Axe }, - Swords2 = { slot = "SecondaryHandSlot", name = CleveRoids.Localized.Sword }, - Maces2 = { slot = "SecondaryHandSlot", name = CleveRoids.Localized.Mace }, - Shields = { slot = "SecondaryHandSlot", name = CleveRoids.Localized.Shield }, + Daggers2 = { slot = "SecondaryHandSlot", class = 2, subClass = { [15] = true } }, + Fists2 = { slot = "SecondaryHandSlot", class = 2, subClass = { [13] = true } }, + Axes2 = { slot = "SecondaryHandSlot", class = 2, subClass = { [0] = true, [1] = true } }, + Swords2 = { slot = "SecondaryHandSlot", class = 2, subClass = { [7] = true, [8] = true } }, + Maces2 = { slot = "SecondaryHandSlot", class = 2, subClass = { [4] = true, [5] = true } }, + Shields = { slot = "SecondaryHandSlot", class = 4, subClass = { [6] = true } }, -- ranged - Guns = { slot = "RangedSlot", name = CleveRoids.Localized.Gun }, - Crossbows = { slot = "RangedSlot", name = CleveRoids.Localized.Crossbow }, - Bows = { slot = "RangedSlot", name = CleveRoids.Localized.Bow }, - Thrown = { slot = "RangedSlot", name = CleveRoids.Localized.Thrown }, - Wands = { slot = "RangedSlot", name = CleveRoids.Localized.Wand }, + Guns = { slot = "RangedSlot", class = 2, subClass = { [3] = true } }, + Crossbows = { slot = "RangedSlot", class = 2, subClass = { [18] = true } }, + Bows = { slot = "RangedSlot", class = 2, subClass = { [2] = true } }, + Thrown = { slot = "RangedSlot", class = 2, subClass = { [16] = true } }, + Wands = { slot = "RangedSlot", class = 2, subClass = { [19] = true } }, } -- Detect available features diff --git a/Localization.lua b/Localization.lua index 54b7e0f..f68f838 100644 --- a/Localization.lua +++ b/Localization.lua @@ -8,20 +8,6 @@ CleveRoids.Locale = GetLocale() CleveRoids.Localized = {} if CleveRoids.Locale == "enUS" or CleveRoids.Locale == "enGB" then - CleveRoids.Localized.Shield = "Shields" - CleveRoids.Localized.Bow = "Bows" - CleveRoids.Localized.Crossbow = "Crossbows" - CleveRoids.Localized.Gun = "Guns" - CleveRoids.Localized.Thrown = "Thrown" - CleveRoids.Localized.Wand = "Wands" - CleveRoids.Localized.Sword = "Swords" - CleveRoids.Localized.Staff = "Staves" - CleveRoids.Localized.Polearm = "Polearms" - CleveRoids.Localized.Mace = "Maces" - CleveRoids.Localized.FistWeapon = "Fist Weapons" - CleveRoids.Localized.Dagger = "Daggers" - CleveRoids.Localized.Axe = "Axes" - CleveRoids.Localized.Attack = "Attack" CleveRoids.Localized.AutoShot = "Auto Shot" CleveRoids.Localized.Shoot = "Shoot" @@ -49,20 +35,6 @@ if CleveRoids.Locale == "enUS" or CleveRoids.Locale == "enGB" then ["Shadowmeld"] = "Shadowmeld", } elseif CleveRoids.Locale == "deDE" then - CleveRoids.Localized.Shield = "Schilde" - CleveRoids.Localized.Bow = "Bögen" - CleveRoids.Localized.Crossbow = "Armbrüste" - CleveRoids.Localized.Gun = "Waffen" - CleveRoids.Localized.Thrown = "Geworfen" - CleveRoids.Localized.Wand = "Zauberstäbe" - CleveRoids.Localized.Sword = "Schwerter" - CleveRoids.Localized.Staff = "Dauben" - CleveRoids.Localized.Polearm = "Stangenwaffen" - CleveRoids.Localized.Mace = "Streitkolben" - CleveRoids.Localized.FistWeapon = "Faustwaffen" - CleveRoids.Localized.Dagger = "Dolche" - - CleveRoids.Localized.Axe = "Äxte" CleveRoids.Localized.Attack = "Angriff" CleveRoids.Localized.AutoShot = "Automatischer Schuss" CleveRoids.Localized.Shoot = "Schießen" @@ -89,20 +61,6 @@ elseif CleveRoids.Locale == "deDE" then ["Shadowmeld"] = "Schattenmimik", } elseif CleveRoids.Locale == "frFR" then - CleveRoids.Localized.Shield = "Boucliers" - CleveRoids.Localized.Bow = "Arcs" - CleveRoids.Localized.Crossbow = "Arbalètes" - CleveRoids.Localized.Gun = "Armes à feu" - CleveRoids.Localized.Thrown = "Thrown" - CleveRoids.Localized.Wand = "Wands" - CleveRoids.Localized.Sword = "Swords" - CleveRoids.Localized.Staff = "Staves" - CleveRoids.Localized.Polearm = "Polearms" - CleveRoids.Localized.Mace = "Maces" - CleveRoids.Localized.FistWeapon = "Fist Weapons" - CleveRoids.Localized.Dagger = "Daggers" - CleveRoids.Localized.Axe = "Axes" - CleveRoids.Localized.Attack = "Attack" CleveRoids.Localized.AutoShot = "Auto Shot" CleveRoids.Localized.Shoot = "Shoot" @@ -128,20 +86,6 @@ elseif CleveRoids.Locale == "frFR" then ["Shadowmeld"] = "Camouflage dans l'ombre", } elseif CleveRoids.Locale == "koKR" then - CleveRoids.Localized.Shield = "Shields" - CleveRoids.Localized.Bow = "Bows" - CleveRoids.Localized.Crossbow = "Crossbows" - CleveRoids.Localized.Gun = "Guns" - CleveRoids.Localized.Thrown = "Thrown" - CleveRoids.Localized.Wand = "Wands" - CleveRoids.Localized.Sword = "Swords" - CleveRoids.Localized.Staff = "Staves" - CleveRoids.Localized.Polearm = "Polearms" - CleveRoids.Localized.Mace = "Maces" - CleveRoids.Localized.FistWeapon = "Fist Weapons" - CleveRoids.Localized.Dagger = "Daggers" - CleveRoids.Localized.Axe = "Axes" - CleveRoids.Localized.Attack = "Attack" CleveRoids.Localized.AutoShot = "Auto Shot" CleveRoids.Localized.Shoot = "Shoot" @@ -167,20 +111,6 @@ elseif CleveRoids.Locale == "koKR" then ["Shadowmeld"] = "그림자 숨기", } elseif CleveRoids.Locale == "zhCN" then - CleveRoids.Localized.Shield = "盾牌" - CleveRoids.Localized.Bow = "弓" - CleveRoids.Localized.Crossbow = "弩" - CleveRoids.Localized.Gun = "枪械" - CleveRoids.Localized.Thrown = "投掷武器" - CleveRoids.Localized.Wand = "魔杖" - CleveRoids.Localized.Sword = "剑" - CleveRoids.Localized.Staff = "法杖" - CleveRoids.Localized.Polearm = "长柄武器" - CleveRoids.Localized.Mace = "锤" - CleveRoids.Localized.FistWeapon = "拳套" - CleveRoids.Localized.Dagger = "匕首" - CleveRoids.Localized.Axe = "斧" - CleveRoids.Localized.Attack = "攻击" CleveRoids.Localized.AutoShot = "自动射击" CleveRoids.Localized.Shoot = "射击" @@ -206,20 +136,6 @@ elseif CleveRoids.Locale == "zhCN" then ["Shadowmeld"] = "影遁", } elseif CleveRoids.Locale == "zhTW" then - CleveRoids.Localized.Shield = "盾牌" - CleveRoids.Localized.Bow = "長弓" - CleveRoids.Localized.Crossbow = "弩" - CleveRoids.Localized.Gun = "槍械" - CleveRoids.Localized.Thrown = "投擲武器" - CleveRoids.Localized.Wand = "魔杖" - CleveRoids.Localized.Sword = "劍" - CleveRoids.Localized.Staff = "法杖" - CleveRoids.Localized.Polearm = "長柄武器" - CleveRoids.Localized.Mace = "錘" - CleveRoids.Localized.FistWeapon = "拳套" - CleveRoids.Localized.Dagger = "匕首" - CleveRoids.Localized.Axe = "斧" - CleveRoids.Localized.Attack = "攻擊" CleveRoids.Localized.AutoShot = "自動射擊" CleveRoids.Localized.Shoot = "射擊" @@ -245,20 +161,6 @@ elseif CleveRoids.Locale == "zhTW" then ["Shadowmeld"] = "影遁", } elseif CleveRoids.Locale == "ruRU" then - CleveRoids.Localized.Shield = "Shields" - CleveRoids.Localized.Bow = "Bows" - CleveRoids.Localized.Crossbow = "Crossbows" - CleveRoids.Localized.Gun = "Guns" - CleveRoids.Localized.Thrown = "Thrown" - CleveRoids.Localized.Wand = "Wands" - CleveRoids.Localized.Sword = "Swords" - CleveRoids.Localized.Staff = "Staves" - CleveRoids.Localized.Polearm = "Polearms" - CleveRoids.Localized.Mace = "Maces" - CleveRoids.Localized.FistWeapon = "Fist Weapons" - CleveRoids.Localized.Dagger = "Daggers" - CleveRoids.Localized.Axe = "Axes" - CleveRoids.Localized.Attack = "Attack" CleveRoids.Localized.AutoShot = "Auto Shot" CleveRoids.Localized.Shoot = "Shoot" @@ -284,20 +186,6 @@ elseif CleveRoids.Locale == "ruRU" then ["Shadowmeld"] = "Слияние с тенью", } elseif CleveRoids.Locale == "esES" then - CleveRoids.Localized.Shield = "Shields" - CleveRoids.Localized.Bow = "Bows" - CleveRoids.Localized.Crossbow = "Crossbows" - CleveRoids.Localized.Gun = "Guns" - CleveRoids.Localized.Thrown = "Thrown" - CleveRoids.Localized.Wand = "Wands" - CleveRoids.Localized.Sword = "Swords" - CleveRoids.Localized.Staff = "Staves" - CleveRoids.Localized.Polearm = "Polearms" - CleveRoids.Localized.Mace = "Maces" - CleveRoids.Localized.FistWeapon = "Fist Weapons" - CleveRoids.Localized.Dagger = "Daggers" - CleveRoids.Localized.Axe = "Axes" - CleveRoids.Localized.Attack = "Attack" CleveRoids.Localized.AutoShot = "Auto Shot" CleveRoids.Localized.Shoot = "Shoot"