diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-06-13 21:00:25 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-06-13 21:00:25 +0200 |
commit | d2733eb6f1f9a550ec6511b5fa696b67b11044b3 (patch) | |
tree | 92e101dba7e48661de4a02c93bfba5700a6f1bdf /src/server/game/Handlers/MovementHandler.cpp | |
parent | 3903482eb810625fce64c616a4edca3f06975e94 (diff) | |
parent | 2fe6fc63d79655a96ee2135a6b380ce353729088 (diff) |
Merge branch '6.x' of https://github.com/TrinityCore/TrinityCore into legion
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 0349fad420a..9e11c044f3e 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -31,6 +31,7 @@ #include "InstanceSaveMgr.h" #include "ObjectMgr.h" #include "Vehicle.h" +#include "InstancePackets.h" #include "MovementPackets.h" #define MOVEMENT_PACKET_TIME_DELAY 0 @@ -95,6 +96,11 @@ void WorldSession::HandleMoveWorldportAckOpcode() GetPlayer()->ResetMap(); GetPlayer()->SetMap(newMap); + WorldPackets::Movement::ResumeToken resumeToken; + resumeToken.SequenceIndex = _player->m_movementCounter; + resumeToken.Reason = seamlessTeleport ? 2 : 1; + SendPacket(resumeToken.Write()); + if (!seamlessTeleport) GetPlayer()->SendInitialPacketsBeforeAddToMap(); @@ -214,6 +220,30 @@ void WorldSession::HandleMoveWorldportAckOpcode() GetPlayer()->ProcessDelayedOperations(); } +void WorldSession::HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTokenResponse& /*suspendTokenResponse*/) +{ + if (!_player->IsBeingTeleportedFar()) + return; + + WorldLocation const& loc = GetPlayer()->GetTeleportDest(); + + if (sMapStore.AssertEntry(loc.GetMapId())->IsDungeon()) + { + WorldPackets::Instance::UpdateLastInstance updateLastInstance; + updateLastInstance.MapID = loc.GetMapId(); + SendPacket(updateLastInstance.Write()); + } + + WorldPackets::Movement::NewWorld packet; + packet.MapID = loc.GetMapId(); + packet.Pos.Relocate(loc); + packet.Reason = !_player->IsBeingTeleportedSeamlessly() ? NEW_WORLD_NORMAL : NEW_WORLD_SEAMLESS; + SendPacket(packet.Write()); + + if (_player->IsBeingTeleportedSeamlessly()) + HandleMoveWorldportAckOpcode(); +} + void WorldSession::HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet) { TC_LOG_DEBUG("network", "CMSG_MOVE_TELEPORT_ACK: Guid: %s, Sequence: %u, Time: %u", packet.MoverGUID.ToString().c_str(), packet.AckIndex, packet.MoveTime); @@ -330,7 +360,7 @@ void WorldSession::HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMov { GameObject* go = mover->GetMap()->GetGameObject(movementInfo.transport.guid); if (!go || go->GetGoType() != GAMEOBJECT_TYPE_TRANSPORT) - movementInfo.transport.guid.Clear(); + movementInfo.transport.Reset(); } } else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave |