From ae40d393c31ca470f56365b37b2b2ec4e64cf87e Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 17 Mar 2026 13:50:49 -0700 Subject: [PATCH] feat: show tactical role badges in party frames; fix talent reset - Add MT/MA/Asst badges to party frames (matching raid frame treatment) - Clear learnedTalents_ on SMSG_TALENTS_INVOLUNTARILY_RESET so the talent screen stays accurate after a server-side talent wipe --- src/game/game_handler.cpp | 3 +++ src/ui/game_screen.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 84f70a5e..7decf08c 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -6086,6 +6086,9 @@ void GameHandler::handlePacket(network::Packet& packet) { // ---- Talents involuntarily reset ---- case Opcode::SMSG_TALENTS_INVOLUNTARILY_RESET: + // Clear cached talent data so the talent screen reflects the reset. + learnedTalents_[0].clear(); + learnedTalents_[1].clear(); addSystemChatMessage("Your talents have been reset by the server."); packet.setReadPos(packet.getSize()); break; diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index 317f03de..5ba3400b 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -9595,6 +9595,18 @@ void GameScreen::renderPartyFrames(game::GameHandler& gameHandler) { if (member.roles & 0x08) { ImGui::SameLine(); ImGui::TextColored(ImVec4(0.9f, 0.3f, 0.3f, 1.0f), "[D]"); } } + // Tactical role badge (MT/MA/Asst) from group flags + if (member.flags & 0x02) { + ImGui::SameLine(); + ImGui::TextColored(ImVec4(1.0f, 0.55f, 0.0f, 0.9f), "[MT]"); + } else if (member.flags & 0x04) { + ImGui::SameLine(); + ImGui::TextColored(ImVec4(0.4f, 0.7f, 1.0f, 0.9f), "[MA]"); + } else if (member.flags & 0x01) { + ImGui::SameLine(); + ImGui::TextColored(ImVec4(0.7f, 0.85f, 1.0f, 0.7f), "[A]"); + } + // Raid mark symbol — shown on same line as name when this party member has a mark { static const struct { const char* sym; ImU32 col; } kPartyMarks[] = {