diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index b7c1b98c918..1f4b4deeeb1 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -677,13 +677,22 @@ void LFGMgr::LeaveLfg(ObjectGuid guid, bool disconnected) LFG_UPDATETYPE_REMOVED_FROM_QUEUE : LFG_UPDATETYPE_LEAVE_RAIDBROWSER; if (gguid) { + LfgState newState = LFG_STATE_NONE; + LfgState oldState = GetOldState(gguid); + + // Set the new state to LFG_STATE_DUNGEON/LFG_STATE_FINISHED_DUNGEON if the group is already in a dungeon + // This is required in case a LFG group vote-kicks a player in a dungeon, queues, then leaves the queue (maybe to queue later again) + if (Group* group = sGroupMgr->GetGroupByGUID(gguid.GetCounter())) + if (group->isLFGGroup() && GetDungeon(gguid) && (oldState == LFG_STATE_DUNGEON || oldState == LFG_STATE_FINISHED_DUNGEON)) + newState = oldState; + LFGQueue& queue = GetQueue(gguid); queue.RemoveFromQueue(gguid); - SetState(gguid, LFG_STATE_NONE); + SetState(gguid, newState); GuidSet const& players = GetPlayers(gguid); for (GuidSet::const_iterator it = players.begin(); it != players.end(); ++it) { - SetState(*it, LFG_STATE_NONE); + SetState(*it, newState); SendLfgUpdateStatus(*it, LfgUpdateData(type), true); } }