A Core/NosSmooth.Packets/Packets/Server/Map/MovePacket.cs => Core/NosSmooth.Packets/Packets/Server/Map/MovePacket.cs +34 -0
  
@@ 0,0 1,34 @@
+//
+//  MovePacket.cs
+//
+//  Copyright (c) František Boháček. All rights reserved.
+//  Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using NosCore.Shared.Enumerations;
+using NosSmooth.Packets.Attributes;
+
+namespace NosSmooth.Packets.Packets.Server.Map;
+
+/// <summary>
+/// The entity has moved to the given position.
+/// </summary>
+/// <param name="EntityType"></param>
+/// <param name="EntityId"></param>
+/// <param name="MapX"></param>
+/// <param name="MapY"></param>
+/// <param name="Speed"></param>
+[PacketHeader("mv", PacketSource.Server)]
+[GenerateSerializer]
+public record MovePacket
+(
+    [PacketIndex(0)]
+    VisualType EntityType,
+    [PacketIndex(1)]
+    long EntityId,
+    [PacketIndex(2)]
+    short MapX,
+    [PacketIndex(3)]
+    short MapY,
+    [PacketIndex(4)]
+    byte Speed
+) : IPacket;<
\ No newline at end of file
 
A Tests/NosSmooth.Packets.Tests/Converters/Packets/MovePacketConverterTests.cs => Tests/NosSmooth.Packets.Tests/Converters/Packets/MovePacketConverterTests.cs +65 -0
  
@@ 0,0 1,65 @@
+//
+//  MovePacketConverterTests.cs
+//
+//  Copyright (c) František Boháček. All rights reserved.
+//  Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Microsoft.Extensions.DependencyInjection;
+using NosCore.Shared.Enumerations;
+using NosSmooth.Packets.Attributes;
+using NosSmooth.Packets.Converters;
+using NosSmooth.Packets.Converters.Packets;
+using NosSmooth.Packets.Extensions;
+using NosSmooth.Packets.Packets.Server.Map;
+using NosSmooth.Packets.Packets.Server.Map.Generated;
+using Xunit;
+
+namespace NosSmooth.Packets.Tests.Converters.Packets;
+
+/// <summary>
+/// Tests <see cref="MovePacketConverter"/>.
+/// </summary>
+public class MovePacketConverterTests
+{
+    private readonly IPacketSerializer _packetSerializer;
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="MovePacketConverterTests"/> class.
+    /// </summary>
+    public MovePacketConverterTests()
+    {
+        var provider = new ServiceCollection()
+            .AddSingleton<TypeConverterRepository>()
+            .AddPacketSerialization()
+            .BuildServiceProvider();
+
+        _packetSerializer = provider.GetRequiredService<IPacketSerializer>();
+    }
+
+    /// <summary>
+    /// Tests that the converter serializes mv packet correctly.
+    /// </summary>
+    [Fact]
+    public void Converter_Serialization_SerializesCorrectly()
+    {
+        MovePacket packet = new MovePacket(VisualType.Monster, 122, 15, 20, 10);
+        var result = _packetSerializer.Serialize(packet);
+        Assert.True(result.IsSuccess);
+
+        Assert.Equal("mv 3 122 15 20 10", result.Entity);
+    }
+
+    /// <summary>
+    /// Tests that the converter serializes mv packet correctly.
+    /// </summary>
+    [Fact]
+    public void Converter_Deserialization_DeserializesCorrectly()
+    {
+        var packetString = "mv 3 122 15 20 10";
+        var result = _packetSerializer.Deserialize(packetString, PacketSource.Server);
+        Assert.True(result.IsSuccess);
+
+        MovePacket actualPacket = new MovePacket(VisualType.Monster, 122, 15, 20, 10);
+        Assert.Equal(result.Entity, actualPacket);
+    }
+}<
\ No newline at end of file