From 14007c81dfac405deaafb78ab0e8fc01a2703305 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Fri, 20 Mar 2026 17:24:16 -0700 Subject: [PATCH] feat: add /cancelqueuedspell command to clear spell queue Add cancelQueuedSpell() method that clears queuedSpellId_ and queuedSpellTarget_. Wire /cancelqueuedspell and /stopspellqueue slash commands. Useful for combat macros that need to prevent queued spells from firing after a current cast. --- include/game/game_handler.hpp | 1 + src/ui/game_screen.cpp | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/include/game/game_handler.hpp b/include/game/game_handler.hpp index 9873e22e..5da300cc 100644 --- a/include/game/game_handler.hpp +++ b/include/game/game_handler.hpp @@ -868,6 +868,7 @@ public: // 400ms spell-queue window: next spell to cast when current finishes uint32_t getQueuedSpellId() const { return queuedSpellId_; } + void cancelQueuedSpell() { queuedSpellId_ = 0; queuedSpellTarget_ = 0; } // Unit cast state (tracked per GUID for target frame + boss frames) struct UnitCastState { diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index cab36b9f..473e46a0 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -7140,6 +7140,12 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) { return; } + if (cmdLower == "cancelqueuedspell" || cmdLower == "stopspellqueue") { + gameHandler.cancelQueuedSpell(); + chatInputBuffer[0] = '\0'; + return; + } + // /equipset [name] — equip a saved equipment set by name (partial match, case-insensitive) // /equipset — list available sets in chat if (cmdLower == "equipset") {