aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/BattleGroundHandler.cpp
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2019-07-12 14:14:01 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-15 23:31:31 +0100
commita69a061d76fe4e142e84c775230e2fcbd6ddb9d4 (patch)
tree1573037ff6f0f016a8fa350c77b47b0ed93e0b1a /src/server/game/Handlers/BattleGroundHandler.cpp
parentb4b581de1b9d2fd6afef02d1734e69b3ce6a8e63 (diff)
Battleground/Arena: Properly check RBAC arena join permission before allowing queue. Closes #23000.
(cherry picked from commit af082664ca8ff76cc8ef1947d6ce76310d65b58b)
Diffstat (limited to 'src/server/game/Handlers/BattleGroundHandler.cpp')
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index a01b18116f1..6eed6f7099f 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -118,10 +118,19 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPackets::Battleground::Batt
return;
}
- // check Deserter debuff
+ // check RBAC permissions
if (!_player->CanJoinToBattleground(bg))
{
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
+ sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bgQueueTypeId, _player, 0, ERR_BATTLEGROUND_JOIN_TIMED_OUT);
+ SendPacket(battlefieldStatus.Write());
+ return;
+ }
+
+ // check Deserter debuff
+ if (_player->IsDeserter())
+ {
+ WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bgQueueTypeId, _player, 0, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
SendPacket(battlefieldStatus.Write());
return;
@@ -326,7 +335,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPackets::Battleground::Battl
if (battlefieldPort.AcceptedInvite && bgQueue.GetQueueId().TeamSize == 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
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
@@ -566,6 +575,14 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPackets::Battleground::Battl
continue;
}
+ if (!_player->CanJoinToBattleground(bg))
+ {
+ WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
+ sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bgQueueTypeId, _player, 0, ERR_BATTLEGROUND_JOIN_FAILED, &errorGuid);
+ member->SendDirectMessage(battlefieldStatus.Write());
+ return;
+ }
+
// add to queue
uint32 queueSlot = member->AddBattlegroundQueueId(bgQueueTypeId);