From 6aaa8a409b5bbb098194d7465634c8f3dedd3277 Mon Sep 17 00:00:00 2001 From: Brues <5278969+brues-code@users.noreply.github.com> Date: Mon, 27 Jul 2026 22:28:09 -0500 Subject: [PATCH] Add conditional support to /equipset via ClassicAPI equipment sets ClassicAPI registers a bare /equipset that resolves a name and calls C_EquipmentSet.UseEquipmentSet with no conditional layer. DoEquipSet routes it through DoWithConditionals like the other /equip* commands, so it gains [combat]/[mod]/@unit/etc. and ';'-separated fallthrough (first set whose conditionals pass wins). Console.lua reclaims the EQUIP_SET handler (keeping ClassicAPI's localized aliases) and falls back to registering /equipset itself if the API command isn't present. --- Console.lua | 10 ++++++++++ Core.lua | 26 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/Console.lua b/Console.lua index ed99624..47c6777 100644 --- a/Console.lua +++ b/Console.lua @@ -63,6 +63,16 @@ SlashCmdList.EQSLOT13 = CleveRoids.DoEquipTrinket1 SLASH_EQSLOT141 = "/equip14" SlashCmdList.EQSLOT14 = CleveRoids.DoEquipTrinket2 +-- Reclaim ClassicAPI's /equipset (command name EQUIP_SET) so it supports +-- conditionals. ClassicAPI registers the localized aliases against EQUIP_SET; +-- swapping the handler keeps every alias and adds the conditional engine. +if SlashCmdList.EQUIP_SET then + SlashCmdList.EQUIP_SET = CleveRoids.DoEquipSet +else + SLASH_EQUIPSET1 = "/equipset" + SlashCmdList.EQUIPSET = CleveRoids.DoEquipSet +end + SLASH_UNSHIFT1 = "/unshift" SlashCmdList.UNSHIFT = CleveRoids.DoUnshift diff --git a/Core.lua b/Core.lua index 1678d92..f96d46c 100644 --- a/Core.lua +++ b/Core.lua @@ -3596,6 +3596,32 @@ function CleveRoids.DoEquipRing2(msg) return false end +-- Equip a ClassicAPI equipment set by name. msg is the resolved set name (after +-- conditional parsing). ClassicAPI's own /equipset is a bare +-- GetEquipmentSetID -> UseEquipmentSet with no conditional support; routing it +-- through DoWithConditionals adds [combat]/[mod]/@unit/etc. and ";"-separated +-- fallthrough (first set whose conditionals pass wins). Nil-guarded so a client +-- without the EquipmentSet API just no-ops instead of erroring. +local function _equipSetAction(msg) + if not msg or msg == "" then return false end + if type(C_EquipmentSet) ~= "table" then return false end + local setID = C_EquipmentSet.GetEquipmentSetID(msg) + if not setID then return false end + C_EquipmentSet.UseEquipmentSet(setID) + return true +end + +function CleveRoids.DoEquipSet(msg) + local parts = CleveRoids.splitStringIgnoringQuotes(msg) + for i = 1, table.getn(parts) do + local v = string.gsub(parts[i], "^%?", "") + if CleveRoids.DoWithConditionals(v, _equipSetAction, CleveRoids.FixEmptyTarget, false, _equipSetAction) then + return true + end + end + return false +end + function CleveRoids.DoCancelForm(msg) local handled -- PERFORMANCE: Use numeric iteration to avoid pairs() iterator allocation