From e94038010bafbe7a64632252489c1457ce009d5c Mon Sep 17 00:00:00 2001 From: Rutherther Date: Fri, 20 Jan 2023 18:40:50 +0100 Subject: [PATCH] feat(pathfinding): respond to su, tp, c_info packets to update position --- .../Extensions/ServiceCollectionExtensions.cs | 4 ++ .../NosSmooth.Extensions.Pathfinding.csproj | 4 +- .../PathfinderState.cs | 5 ++ .../Responders/CInfoPacketResponder.cs | 34 +++++++++++++ .../Responders/SuPacketResponder.cs | 50 +++++++++++++++++++ .../Responders/TpPacketResponder.cs | 39 +++++++++++++++ 6 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 Extensions/NosSmooth.Extensions.Pathfinding/Responders/CInfoPacketResponder.cs create mode 100644 Extensions/NosSmooth.Extensions.Pathfinding/Responders/SuPacketResponder.cs create mode 100644 Extensions/NosSmooth.Extensions.Pathfinding/Responders/TpPacketResponder.cs diff --git a/Extensions/NosSmooth.Extensions.Pathfinding/Extensions/ServiceCollectionExtensions.cs b/Extensions/NosSmooth.Extensions.Pathfinding/Extensions/ServiceCollectionExtensions.cs index 61abeff8f50dc4c1e6b431c40c8f8b7daf0122a1..0812beab7648e3f269ee658f63ad775203593791 100644 --- a/Extensions/NosSmooth.Extensions.Pathfinding/Extensions/ServiceCollectionExtensions.cs +++ b/Extensions/NosSmooth.Extensions.Pathfinding/Extensions/ServiceCollectionExtensions.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using NosSmooth.Core.Extensions; using NosSmooth.Extensions.Pathfinding.Responders; +using NosSmooth.Packets.Server.Character; using NosSmooth.Packets.Server.Maps; namespace NosSmooth.Extensions.Pathfinding.Extensions; @@ -30,6 +31,9 @@ public static class ServiceCollectionExtensions .AddPacketResponder() .AddPacketResponder() .AddPacketResponder() + .AddPacketResponder() + .AddPacketResponder() + .AddPacketResponder() .AddSingleton() .AddSingleton() .AddSingleton(); diff --git a/Extensions/NosSmooth.Extensions.Pathfinding/NosSmooth.Extensions.Pathfinding.csproj b/Extensions/NosSmooth.Extensions.Pathfinding/NosSmooth.Extensions.Pathfinding.csproj index a8406bf48bc6b30df9516e2e6ebb91346b5106bb..ad333e4ce83d4055b860b54c383a4790d5132dd1 100644 --- a/Extensions/NosSmooth.Extensions.Pathfinding/NosSmooth.Extensions.Pathfinding.csproj +++ b/Extensions/NosSmooth.Extensions.Pathfinding/NosSmooth.Extensions.Pathfinding.csproj @@ -8,8 +8,8 @@ https://github.com/Rutherther/NosSmooth/ MIT NosSmooth extension allowing for finding paths on maps. - 1.1.3 - Update dependencies + 1.2.0 + React to su and tp packet by changing character position. diff --git a/Extensions/NosSmooth.Extensions.Pathfinding/PathfinderState.cs b/Extensions/NosSmooth.Extensions.Pathfinding/PathfinderState.cs index 7dac6d9c8d01e59f83e472d01f6cd267a7526726..59b38817244a284bbf6315bc8f16dda796634fb2 100644 --- a/Extensions/NosSmooth.Extensions.Pathfinding/PathfinderState.cs +++ b/Extensions/NosSmooth.Extensions.Pathfinding/PathfinderState.cs @@ -34,4 +34,9 @@ public class PathfinderState : IStatefulEntity /// Gets or sets the current y. /// internal short Y { get; set; } + + /// + /// Gets or sets the id of the charcter. + /// + internal long CharacterId { get; set; } } \ No newline at end of file diff --git a/Extensions/NosSmooth.Extensions.Pathfinding/Responders/CInfoPacketResponder.cs b/Extensions/NosSmooth.Extensions.Pathfinding/Responders/CInfoPacketResponder.cs new file mode 100644 index 0000000000000000000000000000000000000000..e0b258ddc6220f827dd9f03566845b7541ff4757 --- /dev/null +++ b/Extensions/NosSmooth.Extensions.Pathfinding/Responders/CInfoPacketResponder.cs @@ -0,0 +1,34 @@ +// +// CInfoPacketResponder.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 NosSmooth.Core.Packets; +using NosSmooth.Packets.Server.Character; +using Remora.Results; + +namespace NosSmooth.Extensions.Pathfinding.Responders; + +/// +public class CInfoPacketResponder : IPacketResponder +{ + private readonly PathfinderState _state; + + /// + /// Initializes a new instance of the class. + /// + /// The state. + public CInfoPacketResponder(PathfinderState state) + { + _state = state; + + } + + /// + public Task Respond(PacketEventArgs packetArgs, CancellationToken ct = default) + { + _state.CharacterId = packetArgs.Packet.CharacterId; + return Task.FromResult(Result.FromSuccess()); + } +} \ No newline at end of file diff --git a/Extensions/NosSmooth.Extensions.Pathfinding/Responders/SuPacketResponder.cs b/Extensions/NosSmooth.Extensions.Pathfinding/Responders/SuPacketResponder.cs new file mode 100644 index 0000000000000000000000000000000000000000..dcb1ad4f62b348b8dc740616a0087a40d70b3617 --- /dev/null +++ b/Extensions/NosSmooth.Extensions.Pathfinding/Responders/SuPacketResponder.cs @@ -0,0 +1,50 @@ +// +// SuPacketResponder.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 NosSmooth.Core.Packets; +using NosSmooth.Packets.Server.Battle; +using Remora.Results; + +namespace NosSmooth.Extensions.Pathfinding.Responders; + +/// +public class SuPacketResponder : IPacketResponder +{ + private readonly PathfinderState _state; + + /// + /// Initializes a new instance of the class. + /// + /// The state. + public SuPacketResponder(PathfinderState state) + { + _state = state; + + } + + /// + public Task Respond(PacketEventArgs packetArgs, CancellationToken ct = default) + { + var packet = packetArgs.Packet; + if (packet.CasterEntityId == _state.CharacterId) + { + if (packet.PositionX is null || packet.PositionY is null) + { + return Task.FromResult(Result.FromSuccess()); + } + + if (packet.PositionX == 0 || packet.PositionY == 0) + { + return Task.FromResult(Result.FromSuccess()); + } + + _state.X = packet.PositionX.Value; + _state.Y = packet.PositionY.Value; + } + + return Task.FromResult(Result.FromSuccess()); + } +} \ No newline at end of file diff --git a/Extensions/NosSmooth.Extensions.Pathfinding/Responders/TpPacketResponder.cs b/Extensions/NosSmooth.Extensions.Pathfinding/Responders/TpPacketResponder.cs new file mode 100644 index 0000000000000000000000000000000000000000..a72390defac9faef5783eebcf30840f3f55592c6 --- /dev/null +++ b/Extensions/NosSmooth.Extensions.Pathfinding/Responders/TpPacketResponder.cs @@ -0,0 +1,39 @@ +// +// TpPacketResponder.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 NosSmooth.Core.Packets; +using NosSmooth.Packets.Server.Maps; +using Remora.Results; + +namespace NosSmooth.Extensions.Pathfinding.Responders; + +/// +public class TpPacketResponder : IPacketResponder +{ + private readonly PathfinderState _state; + + /// + /// Initializes a new instance of the class. + /// + /// The state. + public TpPacketResponder(PathfinderState state) + { + _state = state; + } + + /// + public Task Respond(PacketEventArgs packetArgs, CancellationToken ct = default) + { + var packet = packetArgs.Packet; + if (packet.EntityId == _state.CharacterId) + { + _state.X = packet.PositionX; + _state.Y = packet.PositionY; + } + + return Task.FromResult(Result.FromSuccess()); + } +} \ No newline at end of file