From a9e7464e0d1f201b4a84d7fd955018e3a2c2cc59 Mon Sep 17 00:00:00 2001 From: Gooyeth Date: Sun, 15 Apr 2018 08:57:57 -0600 Subject: Core/Battleground: allow Random battleground and arena queues same time. (#21730) - It also restricts queuing to arenas if it is in queue of dungeon finder (cherry picked from commit 8aad6f828e7ade2232da3d4697c41b12f3acc727) --- src/server/game/Entities/Player/Player.cpp | 5 +++-- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Groups/Group.cpp | 2 +- src/server/game/Handlers/BattleGroundHandler.cpp | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2dec675b4ca..d93cd968b56 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -24833,10 +24833,11 @@ uint32 Player::GetBattlegroundQueueJoinTime(BattlegroundQueueTypeId bgQueueTypeI return 0; } -bool Player::InBattlegroundQueue() const +bool Player::InBattlegroundQueue(bool ignoreArena) const { for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - if (m_bgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_NONE) + if (m_bgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_NONE + && (!ignoreArena || m_bgBattlegroundQueueID[i].bgQueueTypeId.BattlemasterListId != BATTLEGROUND_AA)) return true; return false; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 649f2ee9a31..f6ee48328ad 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2267,7 +2267,7 @@ class TC_GAME_API Player : public Unit, public GridObject Battleground* GetBattleground() const; uint32 GetBattlegroundQueueJoinTime(BattlegroundQueueTypeId bgQueueTypeId) const; - bool InBattlegroundQueue() const; + bool InBattlegroundQueue(bool ignoreArena = false) const; BattlegroundQueueTypeId GetBattlegroundQueueTypeId(uint32 index) const; uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const; bool IsInvitedForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 5c23b76fa9c..0b9b825129c 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1849,7 +1849,7 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* if (isInRandomBgQueue) return ERR_IN_RANDOM_BG; // don't let join to bg queue random if someone from the group is already in bg queue - if ((bgOrTemplate->GetTypeID() == BATTLEGROUND_RB || bgOrTemplate->GetTypeID() == BATTLEGROUND_RANDOM_EPIC) && member->InBattlegroundQueue() && !isInRandomBgQueue) + if ((bgOrTemplate->GetTypeID() == BATTLEGROUND_RB || bgOrTemplate->GetTypeID() == BATTLEGROUND_RANDOM_EPIC) && member->InBattlegroundQueue(true) && !isInRandomBgQueue) return ERR_IN_NON_RANDOM_BG; // check for deserter debuff in case not arena queue if (bgOrTemplate->GetTypeID() != BATTLEGROUND_AA && !member->CanJoinToBattleground(bgOrTemplate)) diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 67ec6fcd750..15d34caa157 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -139,7 +139,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPackets::Battleground::Batt return; } - if (_player->InBattlegroundQueue() && !isInRandomBgQueue && (bgTypeId == BATTLEGROUND_RB || bgTypeId == BATTLEGROUND_RANDOM_EPIC)) + if (_player->InBattlegroundQueue(true) && !isInRandomBgQueue && (bgTypeId == BATTLEGROUND_RB || bgTypeId == BATTLEGROUND_RANDOM_EPIC)) { // player is already in queue, can't start random queue WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus; -- cgit v1.2.3