diff options
| -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); |
