diff options
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 11 |
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!", |