fix(Core/Arena): Check to see if other members in your arena team are queued or in a r… (#18808)

* 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
This commit is contained in:
thomasjteachey
2024-07-04 07:42:36 -04:00
committed by GitHub
parent 60be029e4c
commit fa8680746e

View File

@@ -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());
}