aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MovementHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index a8cd953abb7..ce38b918519 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -79,6 +79,10 @@ void WorldSession::HandleMoveWorldportAck()
sMapMgr->FindMap(loc.GetMapId(), *GetPlayer()->GetTeleportDestInstanceId()) :
sMapMgr->CreateMap(loc.GetMapId(), GetPlayer());
+ MovementInfo::TransportInfo transportInfo = player->m_movementInfo.transport;
+ if (TransportBase* transport = player->GetTransport())
+ transport->RemovePassenger(player);
+
if (player->IsInWorld())
{
TC_LOG_ERROR("network", "%s %s is still in world when teleported from map %s (%u) to new map %s (%u)", player->GetGUID().ToString().c_str(), player->GetName().c_str(), oldMap->GetMapName(), oldMap->GetId(), newMap ? newMap->GetMapName() : "Unknown", loc.GetMapId());
@@ -110,6 +114,13 @@ void WorldSession::HandleMoveWorldportAck()
if (!seamlessTeleport)
player->SendInitialPacketsBeforeAddToMap();
+ // move player between transport copies on each map
+ if (Transport* newTransport = newMap->GetTransport(transportInfo.guid))
+ {
+ player->m_movementInfo.transport = transportInfo;
+ newTransport->AddPassenger(player);
+ }
+
if (!player->GetMap()->AddPlayerToMap(player, !seamlessTeleport))
{
TC_LOG_ERROR("network", "WORLD: failed to teleport player %s %s to map %d (%s) because of unknown reason!",