diff --git a/CHANGELOG.md b/CHANGELOG.md index aacaddbc9de..7cd0ca5140a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ https://github.com/nwnxee/unified/compare/build8193.36.12...HEAD ### Added - DotNET: Added `NWNX_DOTNET_METHOD` option to change entrypoint method (default: `Bootstrap`) - DotNET: Added `NWNX_DOTNET_NEW_BOOTSTRAP` option to enable a new bootstrap method with less boilerplate code. +- DotNET: Added `RequestFunctionHook`, `ReturnFunctionHook`. ##### New Plugins - Store: Enables getting and setting store data. diff --git a/Plugins/DotNET/DotNETExports.cpp b/Plugins/DotNET/DotNETExports.cpp index e39dd22cdb2..a57fdd360ea 100644 --- a/Plugins/DotNET/DotNETExports.cpp +++ b/Plugins/DotNET/DotNETExports.cpp @@ -737,6 +737,24 @@ NWNX_EXPORT void ReturnHook(void* trampoline) } } +NWNX_EXPORT Hooks::FunctionHook* RequestFunctionHook(void* address, void* managedFuncPtr, const int32_t order) +{ + const auto funcHook = s_managedHooks.emplace_back(Hooks::HookFunction(address, managedFuncPtr, order)).get(); + return funcHook; +} + +NWNX_EXPORT void ReturnFunctionHook(const Hooks::FunctionHook* funcHook) +{ + for (auto it = s_managedHooks.begin(); it != s_managedHooks.end(); ++it) + { + if (it->get() == funcHook) + { + s_managedHooks.erase(it); + return; + } + } +} + std::vector GetExports() { //