aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ArenaTeamHandler.cpp
diff options
context:
space:
mode:
authorGooyeth <migmadmu@hotmail.com>2018-03-26 03:21:10 -0600
committerjackpoz <giacomopoz@gmail.com>2018-03-26 11:21:10 +0200
commitf39919ca8c323e5f0005b29a49ff9d5b8c5fd96b (patch)
treedab6c08c2c3e2473b354c5c9770c5601433b38f6 /src/server/game/Handlers/ArenaTeamHandler.cpp
parentfb31cb7c047f4d79e7bea04b72175e6ef251a317 (diff)
Core/ArenaTeam: Remove queues of members if a character is removed (#21491)
* Core/ArenaTeam: Remove queues of members when a character is removed from the team * Remove only if you do not have an invitation * If have an invitation, do not leave the team * Send packet when leaving queue * Fix build * It's possible that there are two or more groups of arenas, then we eliminate from the queue only the members of the group that leaves the team - Changed FindPlayer to FindConnectedPlayer for possible screen loads * Change to FindConnectPlayer The leader can remove while the player is loading screen.
Diffstat (limited to 'src/server/game/Handlers/ArenaTeamHandler.cpp')
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp37
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;