From 061a21da8fd8b030f7fb8a07471724985bf501e0 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sun, 29 Mar 2026 19:31:21 -0700 Subject: [PATCH] fix: guild event string never appended; /leave left stale party state 1. Contradictory condition (!numStrings && numStrings >= 1) was always false, so unknown guild event messages never included the server's context string. Fixed to just numStrings >= 1. 2. leaveParty() only sent the packet without clearing partyData or firing addon events, so /leave left party frames visible until the server pushed an update. Now delegates to leaveGroup() which handles both the packet and local state cleanup. --- src/game/social_handler.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/game/social_handler.cpp b/src/game/social_handler.cpp index 19485c50..084a9348 100644 --- a/src/game/social_handler.cpp +++ b/src/game/social_handler.cpp @@ -1144,10 +1144,11 @@ void SocialHandler::uninvitePlayer(const std::string& playerName) { } void SocialHandler::leaveParty() { - if (owner_.getState() != WorldState::IN_WORLD || !owner_.socket) return; - auto packet = GroupDisbandPacket::build(); - owner_.socket->send(packet); - owner_.addSystemChatMessage("You have left the group."); + // Delegates to leaveGroup which handles both the packet send AND local + // state cleanup (clearing partyData, firing addon events). Previously + // this method only sent the packet, leaving the client thinking it was + // still in a group until the server pushed a group list update. + leaveGroup(); } void SocialHandler::setMainTank(uint64_t targetGuid) { @@ -1500,7 +1501,8 @@ void SocialHandler::handleGuildEvent(network::Packet& packet) { break; default: msg = "Guild event " + std::to_string(data.eventType); - if (!data.numStrings && data.numStrings >= 1) msg += ": " + data.strings[0]; + // Was `!numStrings && numStrings >= 1` — always false (0 can't be ≥1). + if (data.numStrings >= 1) msg += ": " + data.strings[0]; break; }