From 2bafe069fe611a1a9430049cb07c376825f81d00 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sun, 1 Jan 2023 12:55:44 +0100 Subject: [PATCH] feat(binding): do not activate the hook if not needed --- .../Extensions/HookExtensions.cs | 32 +++++++++++++++++++ .../NosBindingManager.cs | 5 ++- .../Objects/NetworkBinding.cs | 5 +-- .../Objects/PetManagerBinding.cs | 3 +- .../Objects/PlayerManagerBinding.cs | 7 ++-- .../Objects/UnitManagerBinding.cs | 3 +- 6 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 src/Core/NosSmooth.LocalBinding/Extensions/HookExtensions.cs diff --git a/src/Core/NosSmooth.LocalBinding/Extensions/HookExtensions.cs b/src/Core/NosSmooth.LocalBinding/Extensions/HookExtensions.cs new file mode 100644 index 0000000000000000000000000000000000000000..f52a7b9e200099b89ebb35ba2935e6ee58fc1d53 --- /dev/null +++ b/src/Core/NosSmooth.LocalBinding/Extensions/HookExtensions.cs @@ -0,0 +1,32 @@ +// +// HookExtensions.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 Reloaded.Hooks.Definitions; + +namespace NosSmooth.LocalBinding.Extensions; + +/// +/// Extensions methods for . +/// +public static class HookExtensions +{ + /// + /// Enables the hook if it is active. + /// Activate it if it wasn't activated. + /// + /// The hook to enable or activate. + public static void EnableOrActivate(this IHook hook) + { + if (!hook.IsHookActivated) + { + hook.Activate(); + } + else + { + hook.Enable(); + } + } +} \ No newline at end of file diff --git a/src/Core/NosSmooth.LocalBinding/NosBindingManager.cs b/src/Core/NosSmooth.LocalBinding/NosBindingManager.cs index 0cf86dc05dec1cf24e8fea92a14a50ff28a2de4e..9fa5e53d25f16de846cf0f81ac7d640dadf51215 100644 --- a/src/Core/NosSmooth.LocalBinding/NosBindingManager.cs +++ b/src/Core/NosSmooth.LocalBinding/NosBindingManager.cs @@ -363,10 +363,9 @@ public class NosBindingManager : IDisposable callbackFunction, walkFunctionAddress.Offset + (int)_browserManager.Process.MainModule!.BaseAddress + options.Offset ); - hook.Activate(); - if (!options.Hook) + if (options.Hook) { - hook.Disable(); + hook.Activate(); } return Result>.FromSuccess(hook); diff --git a/src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs b/src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs index 593af1ab2f668e90e37c460e1dac0cf0432c6d6a..ea573eaa18b4e7823521941d5d2cab29427551d9 100644 --- a/src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs +++ b/src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs @@ -7,6 +7,7 @@ using System.Diagnostics; using System.Runtime.InteropServices; using NosSmooth.LocalBinding.Errors; +using NosSmooth.LocalBinding.Extensions; using NosSmooth.LocalBinding.Options; using Reloaded.Hooks.Definitions; using Reloaded.Hooks.Definitions.X86; @@ -153,8 +154,8 @@ public class NetworkBinding /// public void EnableHooks() { - _receiveHook.Enable(); - _sendHook.Enable(); + _receiveHook.EnableOrActivate(); + _sendHook.EnableOrActivate(); } /// diff --git a/src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs b/src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs index 26ff3ae9afb2c1280c777f8054da46dd0e5d566e..ae64567a6ce60aef7e253f391855b6293f9fe580 100644 --- a/src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs +++ b/src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs @@ -4,6 +4,7 @@ // 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.LocalBinding.Extensions; using NosSmooth.LocalBinding.Options; using NosSmooth.LocalBinding.Structs; using Reloaded.Hooks.Definitions; @@ -102,7 +103,7 @@ public class PetManagerBinding /// public void EnableHooks() { - _petWalkHook.Enable(); + _petWalkHook.EnableOrActivate(); } /// diff --git a/src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs b/src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs index 4348a7aa526f94b6236a493dddcd6506d05c33c6..7394f28763e5605389282bf0047000f725bf73f7 100644 --- a/src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs +++ b/src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using NosSmooth.LocalBinding.Errors; +using NosSmooth.LocalBinding.Extensions; using NosSmooth.LocalBinding.Options; using NosSmooth.LocalBinding.Structs; using Reloaded.Hooks.Definitions; @@ -146,9 +147,9 @@ public class PlayerManagerBinding /// public void EnableHooks() { - _followHook.Enable(); - _unfollowHook.Enable(); - _walkHook.Enable(); + _followHook.EnableOrActivate(); + _unfollowHook.EnableOrActivate(); + _walkHook.EnableOrActivate(); } /// diff --git a/src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs b/src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs index c6a33fada67ee4dc245eb8382b13b99e6aa75432..a595144855d7d552b0770cbdda5582cba323603c 100644 --- a/src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs +++ b/src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs @@ -10,7 +10,6 @@ using NosSmooth.LocalBinding.Extensions; using NosSmooth.LocalBinding.Options; using NosSmooth.LocalBinding.Structs; using Reloaded.Hooks.Definitions; -using Reloaded.Hooks.Definitions.Enums; using Reloaded.Hooks.Definitions.X86; using Remora.Results; @@ -122,7 +121,7 @@ public class UnitManagerBinding /// public void EnableHooks() { - _focusHook.Enable(); + _focusHook.EnableOrActivate(); } ///