From a3b88484491990c78a8ec024718fb81330a1b99e Mon Sep 17 00:00:00 2001 From: Jrc13245 Date: Tue, 11 Nov 2025 15:14:06 -0500 Subject: [PATCH] fix conditionals icons when used with slot numbers --- Conditionals.lua | 91 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 81 insertions(+), 10 deletions(-) diff --git a/Conditionals.lua b/Conditionals.lua index 2dce9e0..f8f1554 100644 --- a/Conditionals.lua +++ b/Conditionals.lua @@ -553,11 +553,38 @@ function CleveRoids.ValidateCooldown(args, ignoreGCD) if type(args) ~= "table" then -- Normalize the spell name by replacing underscores with spaces local normalized = string.gsub(args, "_", " ") + + -- NEW: If this is a numeric slot (1-19), resolve to the equipped item's name + local slotNum = tonumber(normalized) + if slotNum and slotNum >= 1 and slotNum <= 19 then + local link = GetInventoryItemLink("player", slotNum) + if link then + -- Extract item name from link + local _, _, itemName = string.find(link, "%[(.+)%]") + if itemName then + normalized = itemName + end + end + end + args = {name = normalized} else -- Also normalize if it's already a table if args.name then args.name = string.gsub(args.name, "_", " ") + + -- NEW: If this is a numeric slot (1-19), resolve to the equipped item's name + local slotNum = tonumber(args.name) + if slotNum and slotNum >= 1 and slotNum <= 19 then + local link = GetInventoryItemLink("player", slotNum) + if link then + -- Extract item name from link + local _, _, itemName = string.find(link, "%[(.+)%]") + if itemName then + args.name = itemName + end + end + end end end @@ -1315,24 +1342,68 @@ CleveRoids.Keywords = { end, usable = function(conditionals) - return Or(conditionals.usable, function(spellName) + return Or(conditionals.usable, function(name) -- If checking a reactive spell, use reactive logic - if CleveRoids.reactiveSpells[spellName] then - return CleveRoids.IsReactiveUsable(spellName) + if CleveRoids.reactiveSpells[name] then + return CleveRoids.IsReactiveUsable(name) end - -- Otherwise check general spell usability - return CleveRoids.CheckSpellUsable(spellName) + + -- Check if it's a spell first + local spell = CleveRoids.GetSpell(name) + if spell then + return CleveRoids.CheckSpellUsable(name) + end + + -- Not a spell - check if it's an item or slot number + local itemName = name + local slotNum = tonumber(name) + if slotNum and slotNum >= 1 and slotNum <= 19 then + -- Resolve slot number to item name + local link = GetInventoryItemLink("player", slotNum) + if link then + local _, _, extractedName = string.find(link, "%[(.+)%]") + if extractedName then + itemName = extractedName + end + end + end + + -- Check item cooldown (0 remaining = usable) + local remaining = CleveRoids.GetItemCooldown(itemName) + return remaining == 0 end) end, nousable = function(conditionals) - return And(conditionals.nousable, function(spellName) + return And(conditionals.nousable, function(name) -- If checking a reactive spell, use reactive logic - if CleveRoids.reactiveSpells[spellName] then - return not CleveRoids.IsReactiveUsable(spellName) + if CleveRoids.reactiveSpells[name] then + return not CleveRoids.IsReactiveUsable(name) end - -- Otherwise check general spell usability - return not CleveRoids.CheckSpellUsable(spellName) + + -- Check if it's a spell first + local spell = CleveRoids.GetSpell(name) + if spell then + return not CleveRoids.CheckSpellUsable(name) + end + + -- Not a spell - check if it's an item or slot number + local itemName = name + local slotNum = tonumber(name) + if slotNum and slotNum >= 1 and slotNum <= 19 then + -- Resolve slot number to item name + local link = GetInventoryItemLink("player", slotNum) + if link then + local _, _, extractedName = string.find(link, "%[(.+)%]") + if extractedName then + itemName = extractedName + end + end + end + + -- Check item cooldown (>0 remaining = not usable) + local remaining = CleveRoids.GetItemCooldown(itemName) + return remaining > 0 end) end,