Core/Movement: Implement move time skipped handler
Port From (https://github.com/TrinityCore/TrinityCore/commit/4507a02ada7ff2b30d1e82d4a111fc7143fd0823)
This commit is contained in:
@@ -694,6 +694,26 @@ namespace Game
|
|||||||
[WorldPacketHandler(ClientOpcodes.MoveTimeSkipped, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.MoveTimeSkipped, Processing = PacketProcessing.Inplace)]
|
||||||
void HandleMoveTimeSkipped(MoveTimeSkipped moveTimeSkipped)
|
void HandleMoveTimeSkipped(MoveTimeSkipped moveTimeSkipped)
|
||||||
{
|
{
|
||||||
|
Unit mover = GetPlayer().m_unitMovedByMe;
|
||||||
|
if (mover == null)
|
||||||
|
{
|
||||||
|
Log.outWarn(LogFilter.Player, $"WorldSession.HandleMoveTimeSkipped wrong mover state from the unit moved by {GetPlayer().GetGUID()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// prevent tampered movement data
|
||||||
|
if (moveTimeSkipped.MoverGUID != mover.GetGUID())
|
||||||
|
{
|
||||||
|
Log.outWarn(LogFilter.Player, $"WorldSession.HandleMoveTimeSkipped wrong guid from the unit moved by {GetPlayer().GetGUID()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mover.m_movementInfo.Time += moveTimeSkipped.TimeSkipped;
|
||||||
|
|
||||||
|
MoveSkipTime moveSkipTime = new();
|
||||||
|
moveSkipTime.MoverGUID = moveTimeSkipped.MoverGUID;
|
||||||
|
moveSkipTime.TimeSkipped = moveTimeSkipped.TimeSkipped;
|
||||||
|
mover.SendMessageToSet(moveSkipTime, _player);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.MoveSplineDone, Processing = PacketProcessing.ThreadSafe)]
|
[WorldPacketHandler(ClientOpcodes.MoveSplineDone, Processing = PacketProcessing.ThreadSafe)]
|
||||||
|
|||||||
@@ -982,6 +982,20 @@ namespace Game.Networking.Packets
|
|||||||
public uint TimeSkipped;
|
public uint TimeSkipped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MoveSkipTime : ServerPacket
|
||||||
|
{
|
||||||
|
public MoveSkipTime() : base(ServerOpcodes.MoveSkipTime, ConnectionType.Instance) { }
|
||||||
|
|
||||||
|
public override void Write()
|
||||||
|
{
|
||||||
|
_worldPacket.WritePackedGuid(MoverGUID);
|
||||||
|
_worldPacket.WriteUInt32(TimeSkipped);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectGuid MoverGUID;
|
||||||
|
public uint TimeSkipped;
|
||||||
|
}
|
||||||
|
|
||||||
class SummonResponse : ClientPacket
|
class SummonResponse : ClientPacket
|
||||||
{
|
{
|
||||||
public SummonResponse(WorldPacket packet) : base(packet) { }
|
public SummonResponse(WorldPacket packet) : base(packet) { }
|
||||||
|
|||||||
Reference in New Issue
Block a user