aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 6de7f3f449a..69820676e53 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -626,13 +626,22 @@ void LFGMgr::LeaveLfg(ObjectGuid guid, bool disconnected)
case LFG_STATE_QUEUED:
if (!gguid.IsEmpty())
{
+ 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))
+ 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(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), true);
}
}