diff options
Diffstat (limited to 'src/server/game/Handlers/ArenaTeamHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/ArenaTeamHandler.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index 7d5248e25dc..25c7b96c68d 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -19,6 +19,7 @@ #include "WorldSession.h" #include "ArenaTeam.h" #include "ArenaTeamMgr.h" +#include "BattlegroundMgr.h" #include "CharacterCache.h" #include "Log.h" #include "ObjectAccessor.h" @@ -233,6 +234,19 @@ void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket& recvData) return; } + // Player cannot be removed during queues + if (BattlegroundQueueTypeId bgQueue = BattlegroundMgr::BGQueueTypeId(BATTLEGROUND_AA, arenaTeam->GetType())) + { + GroupQueueInfo ginfo; + BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueue); + if (queue.GetPlayerGroupInfoData(_player->GetGUID(), &ginfo)) + if (ginfo.IsInvitedToBGInstanceGUID) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAMS_LOCKED); + return; + } + } + // If team consists only of the captain, disband the team if (_player->GetGUID() == arenaTeam->GetCaptain()) { @@ -263,6 +277,16 @@ void WorldSession::HandleArenaTeamDisbandOpcode(WorldPacket& recvData) if (arenaTeam->GetCaptain() != _player->GetGUID()) return; + // Teams cannot be disbanded during queues + if (BattlegroundQueueTypeId bgQueue = BattlegroundMgr::BGQueueTypeId(BATTLEGROUND_AA, arenaTeam->GetType())) + { + GroupQueueInfo ginfo; + BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueue); + if (queue.GetPlayerGroupInfoData(_player->GetGUID(), &ginfo)) + if (ginfo.IsInvitedToBGInstanceGUID) + return; + } + // Teams cannot be disbanded during fights if (arenaTeam->IsFighting()) return; @@ -312,6 +336,19 @@ void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket& recvData) return; } + // Team cannot be removed during queues + if (BattlegroundQueueTypeId bgQueue = BattlegroundMgr::BGQueueTypeId(BATTLEGROUND_AA, arenaTeam->GetType())) + { + GroupQueueInfo ginfo; + BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueue); + if (queue.GetPlayerGroupInfoData(_player->GetGUID(), &ginfo)) + if (ginfo.IsInvitedToBGInstanceGUID) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAMS_LOCKED); + return; + } + } + // Player cannot be removed during fights if (arenaTeam->IsFighting()) return; |
