From bc9c548e3de042ec6cd0e287feaef618368e9fb8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 5 Jan 2022 17:11:12 -0500 Subject: [PATCH] Core/LFG: Fix re-queueing while in a dungeon Port From (https://github.com/TrinityCore/TrinityCore/commit/4062c9763ff1230830bc18bb22308a5d3a7c152d) --- Source/Game/DungeonFinding/LFGManager.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/Game/DungeonFinding/LFGManager.cs b/Source/Game/DungeonFinding/LFGManager.cs index a107477a9..160bed7e8 100644 --- a/Source/Game/DungeonFinding/LFGManager.cs +++ b/Source/Game/DungeonFinding/LFGManager.cs @@ -585,13 +585,23 @@ namespace Game.DungeonFinding case LfgState.Queued: if (!gguid.IsEmpty()) { + LfgState newState = LfgState.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) + Group group = Global.GroupMgr.GetGroupByGUID(gguid); + if (group != null) + if (group.IsLFGGroup() && GetDungeon(gguid) != 0 && (oldState == LfgState.Dungeon || oldState == LfgState.FinishedDungeon)) + newState = oldState; + LFGQueue queue = GetQueue(gguid); queue.RemoveFromQueue(gguid); - SetState(gguid, LfgState.None); + SetState(gguid, newState); List players = GetPlayers(gguid); foreach (var it in players) { - SetState(it, LfgState.None); + SetState(it, newState); SendLfgUpdateStatus(it, new LfgUpdateData(LfgUpdateType.RemovedFromQueue), true); } }