@@ 5,6 5,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using NosSmooth.Core.Packets;
+using NosSmooth.Game.Data.Characters;
using NosSmooth.Game.Data.Info;
using NosSmooth.Packets.Server.Maps;
using Remora.Results;
@@ 32,17 33,20 @@ public class AtResponder : IPacketResponder<AtPacket>
public Task<Result> Respond(PacketEventArgs<AtPacket> packetArgs, CancellationToken ct = default)
{
var packet = packetArgs.Packet;
- var map = _game.CurrentMap;
- if (map is null)
- {
- return Task.FromResult(Result.FromSuccess());
- }
-
- var entity = map.Entities.GetEntity(packet.CharacterId);
- if (entity is not null)
- {
- entity.Position = new Position(packet.X, packet.Y);
- }
+
+ _game.CreateOrUpdateCharacterAsync
+ (
+ () => new Character()
+ {
+ Id = packet.CharacterId,
+ Position = new Position(packet.X, packet.Y)
+ },
+ c =>
+ {
+ c.Position = new Position(packet.X, packet.Y);
+ return c;
+ }
+ );
return Task.FromResult(Result.FromSuccess());
}