aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp17
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);