diff options
author | Gooyeth <migmadmu@hotmail.com> | 2018-04-15 08:57:57 -0600 |
---|---|---|
committer | Aokromes <Aokromes@users.noreply.github.com> | 2018-04-15 16:57:57 +0200 |
commit | 8aad6f828e7ade2232da3d4697c41b12f3acc727 (patch) | |
tree | 3a2d42276277cd63ab6ada6873ca3d1e7b15a27e | |
parent | f3833b426d958c275f68d00574cce73ad68d74d8 (diff) |
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
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Groups/Group.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/BattleGroundHandler.cpp | 11 |
4 files changed, 17 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 221b12a5d57..33f35a8f934 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23032,10 +23032,13 @@ Battleground* Player::GetBattleground() const return sBattlegroundMgr->GetBattleground(GetBattlegroundId(), m_bgData.bgTypeID); } -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 || + (ignoreArena && m_bgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_2v2 && + m_bgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_3v3 && + m_bgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_5v5))) return true; return false; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2b31206b920..bb5573af0f8 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1875,7 +1875,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> BattlegroundTypeId GetBattlegroundTypeId() const { return m_bgData.bgTypeID; } Battleground* GetBattleground() const; - bool InBattlegroundQueue() const; + bool InBattlegroundQueue(bool ignoreArena = false) const; BattlegroundQueueTypeId GetBattlegroundQueueTypeId(uint32 index) const; uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index ef67bb36398..9c3608a0d11 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1933,7 +1933,7 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* if (member->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeIdRandom)) 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 && member->InBattlegroundQueue()) + if (bgOrTemplate->GetTypeID() == BATTLEGROUND_RB && member->InBattlegroundQueue(true)) 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 4207527ddb0..6707931b603 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -158,7 +158,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) return; } - if (_player->InBattlegroundQueue() && bgTypeId == BATTLEGROUND_RB) + if (_player->InBattlegroundQueue(true) && bgTypeId == BATTLEGROUND_RB) { // player is already in queue, can't start random queue WorldPacket data; @@ -668,6 +668,15 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) if (!asGroup) { + if (_player->isUsingLfg()) + { + // player is using dungeon finder or raid finder + WorldPacket data; + sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_LFG_CANT_USE_BATTLEGROUND); + _player->SendDirectMessage(&data); + return; + } + // check if already in queue if (_player->GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES) //player is already in this queue |