Battleground/Arena: Properly check RBAC arena join permission before allowing queue. Closes #23000.

(cherry picked from commit af082664ca)
This commit is contained in:
Treeston
2019-07-12 14:14:01 +02:00
committed by Shauren
parent b4b581de1b
commit a69a061d76
4 changed files with 31 additions and 16 deletions

View File

@@ -118,8 +118,17 @@ 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);
@@ -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);