mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
Core/Movement: Implement move time skipped handler (#22994)
* Implement CMSG_MOVE_TIME_SKIPPED handler and move it to MovementHandler.cpp
* Add better error handling
* Update MovementHandler.cpp
(cherry picked from commit f9ed72e351)
This commit is contained in:
@@ -651,10 +651,6 @@ void WorldSession::HandleMoveSetModMovementForceMagnitudeAck(WorldPackets::Movem
|
||||
mover->SendMessageToSet(updateModMovementForceMagnitude.Write(), false);
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& /*moveTimeSkipped*/)
|
||||
{
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSplineDone& moveSplineDone)
|
||||
{
|
||||
MovementInfo movementInfo = moveSplineDone.Status;
|
||||
@@ -696,3 +692,27 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline
|
||||
if (GetPlayer()->pvpInfo.IsHostile)
|
||||
GetPlayer()->CastSpell(GetPlayer(), 2479, true);
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& moveTimeSkipped)
|
||||
{
|
||||
Unit* mover = GetPlayer()->m_unitMovedByMe;
|
||||
if (!mover)
|
||||
{
|
||||
TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong mover state from the unit moved by %s", GetPlayer()->GetGUID().ToString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
// prevent tampered movement data
|
||||
if (moveTimeSkipped.MoverGUID != mover->GetGUID())
|
||||
{
|
||||
TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong guid from the unit moved by %s", GetPlayer()->GetGUID().ToString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
mover->m_movementInfo.time += moveTimeSkipped.TimeSkipped;
|
||||
|
||||
WorldPackets::Movement::MoveSkipTime moveSkipTime;
|
||||
moveSkipTime.MoverGUID = moveTimeSkipped.MoverGUID;
|
||||
moveSkipTime.TimeSkipped = moveTimeSkipped.TimeSkipped;
|
||||
mover->SendMessageToSet(moveSkipTime.Write(), _player);
|
||||
}
|
||||
|
||||
@@ -918,6 +918,14 @@ void WorldPackets::Movement::MoveTimeSkipped::Read()
|
||||
_worldPacket >> TimeSkipped;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Movement::MoveSkipTime::Write()
|
||||
{
|
||||
_worldPacket << MoverGUID;
|
||||
_worldPacket << TimeSkipped;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Movement::SummonResponse::Read()
|
||||
{
|
||||
_worldPacket >> SummonerGUID;
|
||||
|
||||
@@ -546,6 +546,17 @@ namespace WorldPackets
|
||||
uint32 TimeSkipped = 0;
|
||||
};
|
||||
|
||||
class MoveSkipTime final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
MoveSkipTime() : ServerPacket(SMSG_MOVE_SKIP_TIME, 16 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid MoverGUID;
|
||||
uint32 TimeSkipped = 0;
|
||||
};
|
||||
|
||||
class SummonResponse final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -1578,7 +1578,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_VEHICLE_REC_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_WALK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_WATER_WALK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SKIP_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SKIP_TIME, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_DISABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_DISABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_ENABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
|
||||
Reference in New Issue
Block a user