M src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs => src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs +12 -7
@@ 28,7 28,7 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
/// </summary>
public const string PetWalkControlGroup = "PetWalk";
- private readonly IPetWalkHook _petWalkHook;
+ private readonly Optional<IPetWalkHook> _petWalkHook;
private readonly Optional<PetManagerList> _petManagerList;
private readonly NosThreadSynchronizer _threadSynchronizer;
private readonly UserActionDetector _userActionDetector;
@@ 46,7 46,7 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
/// <param name="options">The options.</param>
public MateWalkCommandHandler
(
- IPetWalkHook petWalkHook,
+ Optional<IPetWalkHook> petWalkHook,
Optional<PetManagerList> petManagerList,
NosThreadSynchronizer threadSynchronizer,
UserActionDetector userActionDetector,
@@ 67,11 67,16 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
{
if (!_petManagerList.TryGet(out var petManagerList))
{
- return Result.FromError
- (
+ return
new NeededModulesNotInitializedError
- ("The mate walk command cannot be executed as PetManagerList is not present.", "PetManagerList")
- );
+ ("The mate walk command cannot be executed as PetManagerList is not present.", "PetManagerList");
+ }
+
+ if (!_petWalkHook.TryGet(out var petWalkHook))
+ {
+ return
+ new NeededModulesNotInitializedError
+ ("The mate walk command cannot be executed as PetWalkHook is not present.", IHookManager.PetWalkName);
}
PetManager? selectedPet = petManagerList.FirstOrDefault(x => x.Pet.Id == command.MateId);
@@ 88,7 93,7 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
(
() => _userActionDetector.NotUserAction<Result<bool>>
(
- () => _petWalkHook.WrapperFunction.Get()(selectedPet, (ushort)x, (ushort)y)
+ () => petWalkHook.WrapperFunction.Get()(selectedPet, (ushort)x, (ushort)y)
),
ct
),
M src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs => src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs +23 -6
@@ 11,6 11,7 @@ using NosSmooth.Core.Commands.Control;
using NosSmooth.Core.Commands.Walking;
using NosSmooth.Core.Extensions;
using NosSmooth.LocalBinding;
+using NosSmooth.LocalBinding.Errors;
using NosSmooth.LocalBinding.Hooks;
using NosSmooth.LocalBinding.Objects;
using NosSmooth.LocalBinding.Structs;
@@ 28,8 29,8 @@ public class PlayerWalkCommandHandler : ICommandHandler<PlayerWalkCommand>
/// </summary>
public const string PlayerWalkControlGroup = "PlayerWalk";
- private readonly PlayerManager _playerManager;
- private readonly IPlayerWalkHook _playerWalkHook;
+ private readonly Optional<PlayerManager> _playerManager;
+ private readonly Optional<IPlayerWalkHook> _playerWalkHook;
private readonly NosThreadSynchronizer _threadSynchronizer;
private readonly UserActionDetector _userActionDetector;
private readonly INostaleClient _nostaleClient;
@@ 46,8 47,8 @@ public class PlayerWalkCommandHandler : ICommandHandler<PlayerWalkCommand>
/// <param name="options">The options.</param>
public PlayerWalkCommandHandler
(
- PlayerManager playerManager,
- IPlayerWalkHook playerWalkHook,
+ Optional<PlayerManager> playerManager,
+ Optional<IPlayerWalkHook> playerWalkHook,
NosThreadSynchronizer threadSynchronizer,
UserActionDetector userActionDetector,
INostaleClient nostaleClient,
@@ 65,16 66,32 @@ public class PlayerWalkCommandHandler : ICommandHandler<PlayerWalkCommand>
/// <inheritdoc/>
public async Task<Result> HandleCommand(PlayerWalkCommand command, CancellationToken ct = default)
{
+ if (!_playerManager.TryGet(out var playerManager))
+ {
+ return new NeededModulesNotInitializedError
+ ("The player walk command cannot be executed as PlayerManager is not present.", "PlayerManager");
+ }
+
+ if (!_playerWalkHook.TryGet(out var playerWalkHook))
+ {
+ return
+ new NeededModulesNotInitializedError
+ (
+ "The player walk command cannot be executed as PlayerWalkHook is not present.",
+ IHookManager.CharacterWalkName
+ );
+ }
+
var handler = new ControlCommandWalkHandler
(
_nostaleClient,
async (x, y, ct)
=> await _threadSynchronizer.SynchronizeAsync
(
- () => _userActionDetector.NotUserWalk(_playerWalkHook, x, y),
+ () => _userActionDetector.NotUserWalk(playerWalkHook, x, y),
ct
),
- _playerManager,
+ playerManager,
_options
);