diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 9dba4371040..a057c10cab9 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -619,13 +619,22 @@ void LFGMgr::LeaveLfg(ObjectGuid guid, bool disconnected) case LFG_STATE_QUEUED: 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); SendLfgUpdateParty(*it, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE)); } } |