From d5e16aadaecab0b8da7e03aad924f6d1bc45347b Mon Sep 17 00:00:00 2001 From: Rutherther Date: Mon, 2 Jan 2023 23:15:01 +0100 Subject: [PATCH] fix(bindings): pass position to walks in correct format --- .../Hooks/Implementations/PetWalkHook.cs | 4 +- .../Hooks/Implementations/PlayerWalkHook.cs | 44 ++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PetWalkHook.cs b/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PetWalkHook.cs index 36993210fcec046e49e0e259358621d727e4d0af..5f56233ebd9d82e30a5cc88733bc85c154ce49e0 100644 --- a/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PetWalkHook.cs +++ b/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PetWalkHook.cs @@ -49,7 +49,7 @@ internal class PetWalkHook : CancelableNostaleHook public override IPetWalkHook.PetWalkWrapperDelegate WrapperFunction - => (p, x, y) => OriginalFunction(p.Address, ((int)x << 16) | (int)y) == 1; + => (p, x, y) => OriginalFunction(p.Address, (y << 16) | x) == 1; /// protected override IPetWalkHook.PetWalkDelegate WrapWithCalling(IPetWalkHook.PetWalkDelegate function) @@ -77,7 +77,7 @@ internal class PetWalkHook : CancelableNostaleHook> 16) & 0xFFFF), (ushort)(position & 0xFFFF)); + (petManager, (ushort)(position & 0xFFFF), (ushort)((position >> 16) & 0xFFFF)); return HandleCall(walkArgs); } } \ No newline at end of file diff --git a/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PlayerWalkHook.cs b/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PlayerWalkHook.cs index a0952e9dbf726bcd449425e398c220d70dbf035d..e1de7d974edb3ae6b4dc796d6fdfe8f9487bfeb2 100644 --- a/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PlayerWalkHook.cs +++ b/src/Core/NosSmooth.LocalBinding/Hooks/Implementations/PlayerWalkHook.cs @@ -27,12 +27,12 @@ internal class PlayerWalkHook : CancelableNostaleHook options) { var hook = CreateHook - ( - bindingManager, - () => new PlayerWalkHook(browserManager.PlayerManager), - hook => hook.Detour, - options - ); + ( + bindingManager, + () => new PlayerWalkHook(browserManager.PlayerManager), + hook => hook.Detour, + options + ); return hook; } @@ -51,22 +51,34 @@ internal class PlayerWalkHook : CancelableNostaleHook (x, y) => { var playerManagerObject = _playerManager.Address; - return OriginalFunction(playerManagerObject, ((int)x << 16) | (int)y) == 1; + return OriginalFunction(playerManagerObject, (y << 16) | x) == 1; }; /// protected override IPlayerWalkHook.WalkDelegate WrapWithCalling(IPlayerWalkHook.WalkDelegate function) - => (playerManagerPtr, position, un0, un1) => - { - CallingFromNosSmooth = true; - var res = function(playerManagerPtr, position, un0, un1); - CallingFromNosSmooth = false; - return res; - }; + => + ( + playerManagerPtr, + position, + un0, + un1 + ) => + { + CallingFromNosSmooth = true; + var res = function(playerManagerPtr, position, un0, un1); + CallingFromNosSmooth = false; + return res; + }; - private nuint Detour(nuint playerManagerPtr, int position, short un0, int un1) + private nuint Detour + ( + nuint playerManagerPtr, + int position, + short un0, + int un1 + ) { - var walkArgs = new WalkEventArgs((ushort)((position >> 16) & 0xFFFF), (ushort)(position & 0xFFFF)); + var walkArgs = new WalkEventArgs((ushort)(position & 0xFFFF), (ushort)((position >> 16) & 0xFFFF)); return HandleCall(walkArgs); } } \ No newline at end of file