From fa8680746ea2e314313919c645cc4b616e26374a Mon Sep 17 00:00:00 2001 From: thomasjteachey <81936627+thomasjteachey@users.noreply.github.com> Date: Thu, 4 Jul 2024 07:42:36 -0400 Subject: [PATCH] =?UTF-8?q?fix(Core/Arena):=20Check=20to=20see=20if=20othe?= =?UTF-8?q?r=20members=20in=20your=20arena=20team=20are=20queued=20or=20in?= =?UTF-8?q?=20a=20r=E2=80=A6=20(#18808)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Check to see if other members in your arena team are queued or in a rated arena already and, if so, do not allow queue to go through * Accidentally put team party check inside the for loop * some basic logic efficiency changes * minor syntax issue --- src/server/game/Groups/Group.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 8db5f3740..630856b7a 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -41,6 +41,8 @@ #include "World.h" #include "WorldPacket.h" #include "WorldSession.h" +#include "ArenaTeam.h" +#include "ArenaTeamMgr.h" Roll::Roll(ObjectGuid _guid, LootItem const& li) : itemGUID(_guid), itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), @@ -1996,6 +1998,35 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* if (bgTemplate->isArena() && memberscount != MinPlayerCount) return ERR_ARENA_TEAM_PARTY_SIZE; + //check against other arena team members + if (isRated) + { + ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(arenaTeamId); + for (auto const& itr : arenaTeam->GetMembers()) + { + Player* teamMember = ObjectAccessor::FindConnectedPlayer(itr.Guid); + //are they online and not a member of this current group? + if (teamMember && !IsMember(teamMember->GetGUID())) + { + //are they already in queue for a rated arena? + if (teamMember->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeId)) + { + GroupQueueInfo ginfo; + BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); + if (queue.GetPlayerGroupInfoData(teamMember->GetGUID(), &ginfo)) + { + if (ginfo.IsRated) + return ERR_BATTLEGROUND_JOIN_FAILED; + } + } + //are they currently in an arena match? + Battleground* bg = teamMember->GetBattleground(false); + if (bg && bg->isRated() && bg->GetMinPlayersPerTeam() == MinPlayerCount) + return ERR_BATTLEGROUND_JOIN_FAILED; + } + } + } + return GroupJoinBattlegroundResult(bgTemplate->GetBgTypeID()); }