mirror of
https://github.com/brues-code/SuperCleveRoidMacros.git
synced 2026-09-16 03:38:00 +00:00
Add [mhenchant]/[ohenchant] weapon temp-enchant conditionals
Uses ClassicAPI's modern C_Item.GetWeaponEnchantInfo (12-tuple with enchant IDs) plus C_Item.GetEnchantInfo (ID -> localized name) to match WHICH temporary weapon enchant is applied -- by SpellItemEnchantment ID or name -- not just that one exists. Locale-proof and exact, unlike [mhimbue:Name]'s green-text tooltip scan. ClassicAPI.lua gains GetWeaponEnchant(slot) (centralizes the tuple indexing, vanilla-global fallback) and GetEnchantName(id). ValidateWeaponImbue now reads through GetWeaponEnchant. New keywords mhenchant/nomhenchant/ ohenchant/noohenchant support bare (any enchant), single ID/name, and OR-lists ([mhenchant:2823/Deadly_Poison]); registered in BOOLEAN_CONDITIONALS for the bare form and auto-added to VALID_CONDITIONALS via Keywords.
This commit is contained in:
@@ -174,6 +174,40 @@ function API.IsEquipmentSetEquipped(name)
|
||||
return isEquipped and true or false
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Weapon Enchant
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- Temporary weapon-enchant state for a slot: "mh" (main), "oh" (off), or
|
||||
-- "ranged". Returns hasEnchant, expirationMs, charges, enchantID. The enchantID
|
||||
-- comes from ClassicAPI's modern C_Item.GetWeaponEnchantInfo 12-tuple (the
|
||||
-- vanilla global omits it), so [mhenchant] can tell WHICH imbue is applied, not
|
||||
-- just that one exists. Falls back to the vanilla 6-tuple global (enchantID nil,
|
||||
-- no ranged slot) when the C_Item version is unavailable.
|
||||
function API.GetWeaponEnchant(slot)
|
||||
if type(C_Item) == "table" and type(C_Item.GetWeaponEnchantInfo) == "function" then
|
||||
local hasM, mExp, mChg, mID, hasO, oExp, oChg, oID, hasR, rExp, rChg, rID =
|
||||
C_Item.GetWeaponEnchantInfo()
|
||||
if slot == "oh" then return hasO, oExp, oChg, oID
|
||||
elseif slot == "ranged" then return hasR, rExp, rChg, rID
|
||||
else return hasM, mExp, mChg, mID end
|
||||
end
|
||||
local hasM, mExp, mChg, hasO, oExp, oChg = GetWeaponEnchantInfo()
|
||||
if slot == "oh" then return hasO, oExp, oChg, nil end
|
||||
return hasM, mExp, mChg, nil
|
||||
end
|
||||
|
||||
-- Localized name of an item-enchant ID (poison/oil/sharpening stone/permanent),
|
||||
-- read straight from SpellItemEnchantment.dbc via ClassicAPI -- or nil for an
|
||||
-- unknown id / a client without C_Item.GetEnchantInfo. Lets [mhenchant:Name]
|
||||
-- resolve the applied enchant's name without scraping the weapon tooltip.
|
||||
function API.GetEnchantName(enchantID)
|
||||
if not enchantID or enchantID == 0 then return nil end
|
||||
if type(C_Item) ~= "table" or type(C_Item.GetEnchantInfo) ~= "function" then return nil end
|
||||
local info = C_Item.GetEnchantInfo(enchantID)
|
||||
return info and info.name or nil
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Spell
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user