diff options
| author | Rat <gmstreetrat@gmail.com> | 2012-01-20 14:34:04 +0100 |
|---|---|---|
| committer | Rat <gmstreetrat@gmail.com> | 2012-01-20 14:34:04 +0100 |
| commit | 6cd52e7e027c325fad16c295dc83bd70da9d2ded (patch) | |
| tree | 2a10ef948a9dc14f8fad2e1894c71f1daa40c185 /src/server/game/Server/Protocol | |
| parent | 7d2c5d263d5a8b5681cb1f900e4519712f090468 (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/Protocol')
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/MiscHandler.cpp | 25 | ||||
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/MovementHandler.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 |
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 ); |
