diff options
Diffstat (limited to 'src/server/game/Battlegrounds/ArenaTeam.cpp')
| -rw-r--r-- | src/server/game/Battlegrounds/ArenaTeam.cpp | 28 | 
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 | 
