aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp17
-rw-r--r--src/server/game/Globals/ObjectMgr.h1
4 files changed, 18 insertions, 4 deletions
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index edef0191304..b2856d6ef7b 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -469,7 +469,7 @@ void BattlegroundMgr::SendToBattleground(Player* player, uint32 instanceId, Batt
WorldSafeLocsEntry const* pos = bg->GetTeamStartPosition(Battleground::GetTeamIndexByTeamId(team));
TC_LOG_DEBUG("bg.battleground", "BattlegroundMgr::SendToBattleground: Sending {} to map {}, {} (bgType {})", player->GetName(), mapid, pos->Loc.ToString(), bgTypeId);
- player->TeleportTo(pos->Loc);
+ player->TeleportTo({ .Location = pos->Loc, .TransportGuid = pos->TransportSpawnId ? ObjectGuid::Create<HighGuid::Transport>(*pos->TransportSpawnId) : ObjectGuid::Empty });
}
else
TC_LOG_ERROR("bg.battleground", "BattlegroundMgr::SendToBattleground: Instance {} (bgType {}) not found while trying to teleport player {}", instanceId, bgTypeId, player->GetName());
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 547655b5a0e..7a89cd5f48c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4834,7 +4834,7 @@ void Player::RepopAtGraveyard()
// and don't show spirit healer location
if (closestGrave)
{
- TeleportTo(closestGrave->Loc, shouldResurrect ? TELE_REVIVE_AT_TELEPORT : TELE_TO_NONE);
+ TeleportTo({ .Location = closestGrave->Loc, .TransportGuid = closestGrave->TransportSpawnId ? ObjectGuid::Create<HighGuid::Transport>(*closestGrave->TransportSpawnId) : ObjectGuid::Empty }, shouldResurrect ? TELE_REVIVE_AT_TELEPORT : TELE_TO_NONE);
if (isDead()) // not send if alive, because it used in TeleportTo()
{
WorldPackets::Misc::DeathReleaseLoc packet;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 9f8ffeb4d8e..838f5f575c1 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -7011,8 +7011,8 @@ void ObjectMgr::LoadWorldSafeLocs()
{
uint32 oldMSTime = getMSTime();
- // 0 1 2 3 4 5
- if (QueryResult result = WorldDatabase.Query("SELECT ID, MapID, LocX, LocY, LocZ, Facing FROM world_safe_locs"))
+ // 0 1 2 3 4 5 6
+ if (QueryResult result = WorldDatabase.Query("SELECT ID, MapID, LocX, LocY, LocZ, Facing, TransportSpawnId FROM world_safe_locs"))
{
do
{
@@ -7025,9 +7025,22 @@ void ObjectMgr::LoadWorldSafeLocs()
continue;
}
+ Optional<ObjectGuid::LowType> transportSpawnId = {};
+ if (!fields[6].IsNull())
+ {
+ if (!sTransportMgr->GetTransportSpawn(fields[6].GetUInt64()))
+ {
+ TC_LOG_ERROR("sql.sql", "World location (ID: {}) has a invalid transportSpawnID {}, skipped.", id, fields[6].GetUInt64());
+ continue;
+ }
+
+ transportSpawnId = fields[6].GetUInt64();
+ }
+
WorldSafeLocsEntry& worldSafeLocs = _worldSafeLocs[id];
worldSafeLocs.ID = id;
worldSafeLocs.Loc.WorldRelocate(loc);
+ worldSafeLocs.TransportSpawnId = transportSpawnId;
} while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index d373047127c..5e599b242d6 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -835,6 +835,7 @@ struct WorldSafeLocsEntry
{
uint32 ID = 0;
WorldLocation Loc;
+ Optional<ObjectGuid::LowType> TransportSpawnId = {};
};
struct GraveyardData