mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Core/Movement: Implement move time skipped handler (ported commit: f9ed72e351)
This commit is contained in:
@@ -937,49 +937,6 @@ void WorldSession::HandleNextCinematicCamera(WorldPacket& /*recvData*/)
|
||||
GetPlayer()->GetCinematicMgr()->BeginCinematic();
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket& recvData)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: Received CMSG_MOVE_TIME_SKIPPED");
|
||||
|
||||
ObjectGuid guid;
|
||||
uint32 time;
|
||||
recvData >> time;
|
||||
|
||||
guid[5] = recvData.ReadBit();
|
||||
guid[1] = recvData.ReadBit();
|
||||
guid[3] = recvData.ReadBit();
|
||||
guid[7] = recvData.ReadBit();
|
||||
guid[6] = recvData.ReadBit();
|
||||
guid[0] = recvData.ReadBit();
|
||||
guid[4] = recvData.ReadBit();
|
||||
guid[2] = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(guid[7]);
|
||||
recvData.ReadByteSeq(guid[1]);
|
||||
recvData.ReadByteSeq(guid[2]);
|
||||
recvData.ReadByteSeq(guid[4]);
|
||||
recvData.ReadByteSeq(guid[3]);
|
||||
recvData.ReadByteSeq(guid[6]);
|
||||
recvData.ReadByteSeq(guid[0]);
|
||||
recvData.ReadByteSeq(guid[5]);
|
||||
|
||||
//TODO!
|
||||
|
||||
/*
|
||||
uint64 guid;
|
||||
uint32 time_skipped;
|
||||
recvData >> guid;
|
||||
recvData >> time_skipped;
|
||||
TC_LOG_DEBUG("network", "WORLD: CMSG_MOVE_TIME_SKIPPED");
|
||||
|
||||
//// @todo
|
||||
must be need use in Trinity
|
||||
We substract server Lags to move time (AntiLags)
|
||||
for exmaple
|
||||
GetPlayer()->ModifyLastMoveTime(-int32(time_skipped));
|
||||
*/
|
||||
}
|
||||
|
||||
void WorldSession::HandleFeatherFallAck(WorldPacket& recvData)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: CMSG_MOVE_FEATHER_FALL_ACK");
|
||||
|
||||
@@ -655,3 +655,52 @@ void WorldSession::HandleSetCollisionHeightAck(WorldPacket& recvPacket)
|
||||
MovementInfo movementInfo;
|
||||
GetPlayer()->ReadMovementInfo(recvPacket, &movementInfo, &extra);
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket& recvData)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: Received CMSG_MOVE_TIME_SKIPPED");
|
||||
|
||||
ObjectGuid guid;
|
||||
uint32 time;
|
||||
recvData >> time;
|
||||
|
||||
guid[5] = recvData.ReadBit();
|
||||
guid[1] = recvData.ReadBit();
|
||||
guid[3] = recvData.ReadBit();
|
||||
guid[7] = recvData.ReadBit();
|
||||
guid[6] = recvData.ReadBit();
|
||||
guid[0] = recvData.ReadBit();
|
||||
guid[4] = recvData.ReadBit();
|
||||
guid[2] = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(guid[7]);
|
||||
recvData.ReadByteSeq(guid[1]);
|
||||
recvData.ReadByteSeq(guid[2]);
|
||||
recvData.ReadByteSeq(guid[4]);
|
||||
recvData.ReadByteSeq(guid[3]);
|
||||
recvData.ReadByteSeq(guid[6]);
|
||||
recvData.ReadByteSeq(guid[0]);
|
||||
recvData.ReadByteSeq(guid[5]);
|
||||
|
||||
Unit* mover = GetPlayer()->m_unitMovedByMe;
|
||||
|
||||
if (!mover)
|
||||
{
|
||||
TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong mover state from the unit moved by the player %s", GetPlayer()->GetGUID().ToString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
// prevent tampered movement data
|
||||
if (guid != mover->GetGUID())
|
||||
{
|
||||
TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong guid from the unit moved by the player %s", GetPlayer()->GetGUID().ToString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
mover->m_movementInfo.time += time;
|
||||
|
||||
WorldPacket data(MSG_MOVE_TIME_SKIPPED, recvData.size());
|
||||
data << guid.WriteAsPacked();
|
||||
data << time;
|
||||
GetPlayer()->SendMessageToSet(&data, false);
|
||||
}
|
||||
|
||||
@@ -609,7 +609,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAck );
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_TELEPORT_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_TIME_SKIPPED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_TIME_SKIPPED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode );
|
||||
DEFINE_OPCODE_HANDLER(MSG_NOTIFY_PARTY_SQUELCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
|
||||
Reference in New Issue
Block a user