aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Battlegrounds/ArenaTeam.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/Battlegrounds/ArenaTeam.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/Battlegrounds/ArenaTeam.cpp')
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index e9fa1df6f88..54bebb9bc1c 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -18,6 +18,7 @@
#include "ArenaTeam.h"
#include "ArenaTeamMgr.h"
+#include "BattlegroundMgr.h"
#include "CharacterCache.h"
#include "DatabaseEnv.h"
#include "Group.h"
@@ -314,9 +315,34 @@ void ArenaTeam::SetCaptain(ObjectGuid guid)
void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb)
{
+ Player* player = ObjectAccessor::FindConnectedPlayer(guid);
+ Group* group = (player && player->GetGroup()) ? player->GetGroup() : nullptr;
+
// Remove member from team
for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
+ // Remove queues of members
+ if (Player* playerMember = ObjectAccessor::FindConnectedPlayer(itr->Guid))
+ {
+ if (group && playerMember->GetGroup() && group->GetGUID() == playerMember->GetGroup()->GetGUID())
+ {
+ if (BattlegroundQueueTypeId bgQueue = BattlegroundMgr::BGQueueTypeId(BATTLEGROUND_AA, GetType()))
+ {
+ GroupQueueInfo ginfo;
+ BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueue);
+ if (queue.GetPlayerGroupInfoData(playerMember->GetGUID(), &ginfo))
+ if (!ginfo.IsInvitedToBGInstanceGUID)
+ {
+ WorldPacket data;
+ playerMember->RemoveBattlegroundQueueId(bgQueue);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, nullptr, playerMember->GetBattlegroundQueueIndex(bgQueue), STATUS_NONE, 0, 0, 0, 0);
+ queue.RemovePlayer(playerMember->GetGUID(), true);
+ playerMember->GetSession()->SendPacket(&data);
+ }
+ }
+ }
+ }
+
if (itr->Guid == guid)
{
Members.erase(itr);
@@ -326,7 +352,7 @@ void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb)
}
// Inform player and remove arena team info from player data
- if (Player* player = ObjectAccessor::FindPlayer(guid))
+ if (player)
{
player->GetSession()->SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, GetName(), "", 0);
// delete all info regarding this team