From af082664ca8ff76cc8ef1947d6ce76310d65b58b Mon Sep 17 00:00:00 2001 From: Treeston Date: Fri, 12 Jul 2019 14:14:01 +0200 Subject: Battleground/Arena: Properly check RBAC arena join permission before allowing queue. Closes #23000. --- src/server/game/Handlers/BattleGroundHandler.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/server/game/Handlers/BattleGroundHandler.cpp') diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index dbd858d7673..f57e82ae653 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -138,9 +138,18 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) GetPlayer()->SendDirectMessage(&data); return; } + + // check RBAC permissions + if (!_player->CanJoinToBattleground(bg)) + { + WorldPacket data; + sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_JOIN_TIMED_OUT); + GetPlayer()->SendDirectMessage(&data); + return; + } // check Deserter debuff - if (!_player->CanJoinToBattleground(bg)) + if (_player->IsDeserter()) { WorldPacket data; sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS); @@ -419,7 +428,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) if (action == 1 && ginfo.ArenaType == 0) { //if player is trying to enter battleground (not arena!) and he has deserter debuff, we must just remove him from queue - if (!_player->CanJoinToBattleground(bg)) + if (_player->IsDeserter()) { //send bg command result to show nice message WorldPacket data2; @@ -672,6 +681,14 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) _player->SendDirectMessage(&data); return; } + + if (!_player->CanJoinToBattleground(bg)) + { + WorldPacket data; + sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_JOIN_FAILED); + _player->SendDirectMessage(&data); + return; + } // check if already in queue if (_player->GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES) -- cgit v1.2.3