diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fa4d11683ed..5b268493ae5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17076,6 +17076,8 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)      GetSession()->SetPlayer(this);      MapEntry const* mapEntry = sMapStore.LookupEntry(mapId); +    Map* map = nullptr; +    bool player_at_bg = false;      if (!mapEntry || !IsPositionValid())      {          TC_LOG_ERROR("entities.player", "Player::LoadFromDB: Player (%s) has invalid coordinates (MapId: %u X: %f Y: %f Z: %f O: %f). Teleport to default race/class locations.", @@ -17089,10 +17091,12 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)          if (m_bgData.bgInstanceID)                                                //saved in Battleground              currentBg = sBattlegroundMgr->GetBattleground(m_bgData.bgInstanceID, BATTLEGROUND_TYPE_NONE); -        bool player_at_bg = currentBg && currentBg->IsPlayerInBattleground(GetGUID()); +        player_at_bg = currentBg && currentBg->IsPlayerInBattleground(GetGUID());          if (player_at_bg && currentBg->GetStatus() != STATUS_WAIT_LEAVE)          { +            map = currentBg->GetBgMap(); +              BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(currentBg->GetTypeID(), currentBg->GetArenaType());              AddBattlegroundQueueId(bgQueueTypeId); @@ -17112,8 +17116,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)                  currentBg->RemovePlayerAtLeave(GetGUID(), false, true);              // Do not look for instance if bg not found -            const WorldLocation& _loc = GetBattlegroundEntryPoint(); -            mapId = _loc.GetMapId(); instanceId = 0; +            WorldLocation const& _loc = GetBattlegroundEntryPoint(); +            mapId = _loc.GetMapId(); +            instanceId = 0;              // Db field type is type int16, so it can never be MAPID_INVALID              //if (mapId == MAPID_INVALID) -- code kept for reference @@ -17242,7 +17247,8 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)      // NOW player must have valid map      // load the player's map here if it's not already loaded -    Map* map = sMapMgr->CreateMap(mapId, this, instanceId); +    if (!map) +        map = sMapMgr->CreateMap(mapId, this, instanceId);      AreaTrigger const* areaTrigger = nullptr;      bool check = false; @@ -17325,6 +17331,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)      if (!CheckInstanceValidity(true) && !IsInstanceLoginGameMasterException())          m_InstanceValid = false; +    if (player_at_bg) +        map->ToBattlegroundMap()->GetBG()->AddPlayer(this); +      // randomize first save time in range [CONFIG_INTERVAL_SAVE] around [CONFIG_INTERVAL_SAVE]      // this must help in case next save after mass player load after server startup      m_nextSave = urand(m_nextSave / 2, m_nextSave * 3 / 2);  | 
