diff --git a/include/game/game_handler.hpp b/include/game/game_handler.hpp index bd108497..30149c40 100644 --- a/include/game/game_handler.hpp +++ b/include/game/game_handler.hpp @@ -402,6 +402,7 @@ public: // Follow/Assist void followTarget(); + void cancelFollow(); // Stop following current target void assistTarget(); // PvP diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 49293f79..611319d9 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -10256,6 +10256,15 @@ void GameHandler::followTarget() { LOG_INFO("Following target: ", targetName, " (GUID: 0x", std::hex, targetGuid, std::dec, ")"); } +void GameHandler::cancelFollow() { + if (followTargetGuid_ == 0) { + addSystemChatMessage("You are not following anyone."); + return; + } + followTargetGuid_ = 0; + addSystemChatMessage("You stop following."); +} + void GameHandler::assistTarget() { if (state != WorldState::IN_WORLD) { LOG_WARNING("Cannot assist: not in world"); diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index c213d907..d23d7305 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -3809,6 +3809,20 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) { return; } + // /zone command — print current zone name + if (cmdLower == "zone") { + std::string zoneName; + if (auto* rend = core::Application::getInstance().getRenderer()) + zoneName = rend->getCurrentZoneName(); + game::MessageChatData sysMsg; + sysMsg.type = game::ChatType::SYSTEM; + sysMsg.language = game::ChatLanguage::UNIVERSAL; + sysMsg.message = zoneName.empty() ? "You are not in a known zone." : "You are in: " + zoneName; + gameHandler.addLocalChatMessage(sysMsg); + chatInputBuffer[0] = '\0'; + return; + } + // /played command if (cmdLower == "played") { gameHandler.requestPlayedTime(); @@ -3834,11 +3848,11 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) { " /maintank /mainassist /roll [min-max]", "Guild: /ginvite /gkick /gquit /gpromote /gdemote /gmotd", " /gleader /groster /ginfo /gcreate /gdisband", - "Combat: /startattack /stopattack /stopcasting /duel /pvp", - " /forfeit /follow /assist", + "Combat: /startattack /stopattack /stopcasting /cast /duel /pvp", + " /forfeit /follow /stopfollow /assist", "Target: /target /cleartarget /focus /clearfocus", "Movement: /sit /stand /kneel /dismount", - "Misc: /played /time /afk [msg] /dnd [msg] /inspect", + "Misc: /played /time /zone /afk [msg] /dnd [msg] /inspect", " /helm /cloak /trade /join /leave ", " /unstuck /logout /ticket /help", }; @@ -4083,6 +4097,13 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) { return; } + // /stopfollow command + if (cmdLower == "stopfollow") { + gameHandler.cancelFollow(); + chatInputBuffer[0] = '\0'; + return; + } + // /assist command if (cmdLower == "assist") { gameHandler.assistTarget();