aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding/LFGMgr.cpp
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-08-22 21:31:13 +0200
committerShauren <shauren.trinity@gmail.com>2021-10-22 23:17:04 +0200
commitfff5a32a13ae896ecd4288838f6678ce484f7e23 (patch)
tree428598c311522e0fed47997cfc62a5f39eb50531 /src/server/game/DungeonFinding/LFGMgr.cpp
parentb6f28a7ebc2684d7514211201a344a6e510b7be5 (diff)
Core/LFG: Order group members before creating LFG group (leader > tank > healer > dps). Closes #16244.
(cherry picked from commit dd54c8012321ecd40fc82f04cf0c98b201bc580e)
Diffstat (limited to 'src/server/game/DungeonFinding/LFGMgr.cpp')
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index faeee1e4b67..0d35077cebd 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -917,21 +917,39 @@ bool LFGMgr::CheckGroupRoles(LfgRolesMap& groles)
*/
void LFGMgr::MakeNewGroup(LfgProposal const& proposal)
{
- GuidList players;
+ GuidList players, tankPlayers, healPlayers, dpsPlayers;
GuidList playersToTeleport;
for (LfgProposalPlayerContainer::const_iterator it = proposal.players.begin(); it != proposal.players.end(); ++it)
{
ObjectGuid guid = it->first;
if (guid == proposal.leader)
- players.push_front(guid);
- else
players.push_back(guid);
+ else
+ switch (it->second.role & ~PLAYER_ROLE_LEADER)
+ {
+ case PLAYER_ROLE_TANK:
+ tankPlayers.push_back(guid);
+ break;
+ case PLAYER_ROLE_HEALER:
+ healPlayers.push_back(guid);
+ break;
+ case PLAYER_ROLE_DAMAGE:
+ dpsPlayers.push_back(guid);
+ break;
+ default:
+ ASSERT(false, "Invalid LFG role %u", it->second.role);
+ break;
+ }
if (proposal.isNew || GetGroup(guid) != proposal.group)
playersToTeleport.push_back(guid);
}
+ players.splice(players.end(), tankPlayers);
+ players.splice(players.end(), healPlayers);
+ players.splice(players.end(), dpsPlayers);
+
// Set the dungeon difficulty
LFGDungeonData const* dungeon = GetLFGDungeon(proposal.dungeonId);
ASSERT(dungeon);