// // WalkCommands.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.ChatCommands; using NosSmooth.Core.Client; using NosSmooth.Core.Commands; using NosSmooth.Packets.Enums; using NosSmooth.Packets.Enums.Chat; using NosSmooth.Packets.Server.Chat; using Remora.Commands.Attributes; using Remora.Commands.Groups; using Remora.Results; namespace WalkCommands.Commands; /// /// Represents command group for walking. /// public class WalkCommands : CommandGroup { private readonly INostaleClient _client; private readonly FeedbackService _feedbackService; /// /// Initializes a new instance of the class. /// /// The nostale client. /// The feedback service. public WalkCommands(INostaleClient client, FeedbackService feedbackService) { _client = client; _feedbackService = feedbackService; } /// /// Attempts to walk the character to the specified lcoation. /// /// The x coordinate. /// The y coordinate. /// Whether the user can cancel the operation. /// A result that may or may not have succeeded. [Command("walk")] public async Task HandleWalkToAsync ( ushort x, ushort y, bool isCancellable = true ) { var receiveResult = await _client.ReceivePacketAsync ( new SayPacket(EntityType.Map, 1, SayColor.Red, $"Going to walk to {x} {y}."), CancellationToken ); if (!receiveResult.IsSuccess) { return receiveResult; } var command = new WalkCommand(x, y, isCancellable); var walkResult = await _client.SendCommandAsync(command, CancellationToken); if (!walkResult.IsSuccess) { await _feedbackService.SendErrorMessageAsync($"Could not finish walking. {walkResult.Error.Message}", CancellationToken); await _client.ReceivePacketAsync ( new SayPacket(EntityType.Map, 1, SayColor.Red, "Could not finish walking."), CancellationToken ); return walkResult; } return await _client.ReceivePacketAsync ( new SayPacket(EntityType.Map, 1, SayColor.Red, "Walk has finished successfully."), CancellationToken ); } }