From 0275a1405fb3949ad42e93064f784cd0e863641d Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 30 Oct 2021 20:16:25 -0400 Subject: [PATCH] Core/LFG: Order group members before creating LFG group (leader > tank > healer > dps). Port From (https://github.com/TrinityCore/TrinityCore/commit/fff5a32a13ae896ecd4288838f6678ce484f7e23) --- Source/Game/DungeonFinding/LFGManager.cs | 28 +++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/Source/Game/DungeonFinding/LFGManager.cs b/Source/Game/DungeonFinding/LFGManager.cs index 53a7bcf5b..dcb9a41cd 100644 --- a/Source/Game/DungeonFinding/LFGManager.cs +++ b/Source/Game/DungeonFinding/LFGManager.cs @@ -867,20 +867,42 @@ namespace Game.DungeonFinding void MakeNewGroup(LfgProposal proposal) { List players = new(); + List tankPlayers = new(); + List healPlayers = new(); + List dpsPlayers = new(); List playersToTeleport = new(); foreach (var it in proposal.players) { ObjectGuid guid = it.Key; if (guid == proposal.leader) - players.Insert(0, guid); - else players.Add(guid); - + else + { + switch (it.Value.role & ~LfgRoles.Leader) + { + case LfgRoles.Tank: + tankPlayers.Add(guid); + break; + case LfgRoles.Healer: + healPlayers.Add(guid); + break; + case LfgRoles.Damage: + dpsPlayers.Add(guid); + break; + default: + Cypher.Assert(false, $"Invalid LFG role {it.Value.role}"); + break; + } + } if (proposal.isNew || GetGroup(guid) != proposal.group) playersToTeleport.Add(guid); } + players.AddRange(tankPlayers); + players.AddRange(healPlayers); + players.AddRange(dpsPlayers); + // Set the dungeon difficulty LFGDungeonData dungeon = GetLFGDungeon(proposal.dungeonId); Cypher.Assert(dungeon != null);