aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorRat <gmstreetrat@gmail.com>2012-01-20 14:34:04 +0100
committerRat <gmstreetrat@gmail.com>2012-01-20 14:34:04 +0100
commit6cd52e7e027c325fad16c295dc83bd70da9d2ded (patch)
tree2a10ef948a9dc14f8fad2e1894c71f1daa40c185 /src/server/game/Server
parent7d2c5d263d5a8b5681cb1f900e4519712f090468 (diff)
Core/Movement: Fixed short-range teleportation, needs more testing
-added structure for CMSG_MOVE_TIME_SKIPPED, still need to implement the time synch
Diffstat (limited to 'src/server/game/Server')
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MiscHandler.cpp25
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MovementHandler.cpp18
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
3 files changed, 37 insertions, 10 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
index 898db683c0a..fac568b9857 100755
--- a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
@@ -1078,12 +1078,27 @@ void WorldSession::HandleNextCinematicCamera(WorldPacket & /*recv_data*/)
void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket & recv_data)
{
- /* WorldSession::Update(getMSTime());*/
- sLog->outStaticDebug("WORLD: Time Lag/Synchronization Resent/Update");
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_MOVE_TIME_SKIPPED");
+
+ BitStream mask = recv_data.ReadBitStream(8);
+
+ uint32 time;
+ recv_data >> time;
+
+ ByteBuffer bytes(8, true);
+ recv_data.ReadXorByte(mask[0], bytes[1]);
+ recv_data.ReadXorByte(mask[1], bytes[4]);
+ recv_data.ReadXorByte(mask[7], bytes[2]);
+ recv_data.ReadXorByte(mask[5], bytes[5]);
+ recv_data.ReadXorByte(mask[3], bytes[0]);
+ recv_data.ReadXorByte(mask[6], bytes[7]);
+ recv_data.ReadXorByte(mask[2], bytes[6]);
+ recv_data.ReadXorByte(mask[4], bytes[3]);
+
+ uint64 guid = BitConverter::ToUInt64(bytes);
+
+ //TODO!
- uint64 guid;
- recv_data.readPackGUID(guid);
- recv_data.read_skip<uint32>();
/*
uint64 guid;
uint32 time_skipped;
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index 9fc429f1321..b23a73dc9bb 100755
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -192,12 +192,24 @@ void WorldSession::HandleMoveWorldportAckOpcode()
void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_MOVE_TELEPORT_ACK");
- uint64 guid;
-
- recv_data.readPackGUID(guid);
+ BitStream mask = recv_data.ReadBitStream(8);
+
uint32 flags, time;
recv_data >> flags >> time;
+
+ ByteBuffer bytes(8, true);
+ recv_data.ReadXorByte(mask[6], bytes[1]);
+ recv_data.ReadXorByte(mask[0], bytes[3]);
+ recv_data.ReadXorByte(mask[1], bytes[2]);
+ recv_data.ReadXorByte(mask[7], bytes[0]);
+ recv_data.ReadXorByte(mask[5], bytes[6]);
+ recv_data.ReadXorByte(mask[3], bytes[4]);
+ recv_data.ReadXorByte(mask[2], bytes[7]);
+ recv_data.ReadXorByte(mask[4], bytes[5]);
+
+ uint64 guid = BitConverter::ToUInt64(bytes);
+
sLog->outStaticDebug("Guid " UI64FMTD, guid);
sLog->outStaticDebug("Flags %u, time %u", flags, time/IN_MILLISECONDS);
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 209099a3c7f..41ddddaaf1d 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -258,9 +258,9 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_MOVE_SPLINE_SET_RUN_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_SPLINE_SET_WALK_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_TOGGLE_LOGGING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_MOVE_TELEPORT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_OPCODE_HANDLER(CMSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAck );
+ DEFINE_OPCODE_HANDLER(CMSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAck );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_TOGGLE_FALL_LOGGING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(MSG_MOVE_FALL_LAND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
DEFINE_OPCODE_HANDLER(MSG_MOVE_START_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );