aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MovementHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-06-13 18:00:55 +0200
committerShauren <shauren.trinity@gmail.com>2016-06-13 18:00:55 +0200
commit2fe6fc63d79655a96ee2135a6b380ce353729088 (patch)
treec38a3858345fd6e91d9c760acd3168a5181a24c6 /src/server/game/Handlers/MovementHandler.cpp
parenta906ba140881495f45b40367ccc5c4af4feee4d4 (diff)
Core/Movement: Fixed weird loading screen behavior (progress bar loading to full then disappearing) - also makes teleporting between maps faster
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 6464dd1838a..d8943099a93 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);