From ca5db71e8215a6c5660fe03088a6d7349f55f817 Mon Sep 17 00:00:00 2001 From: BobTheBob <32057864+BobTheBob9@users.noreply.github.com> Date: Sat, 17 Jul 2021 22:33:00 +0100 Subject: add support for custom convars and concommands --- NorthstarDedicatedTest/sourceinterface.cpp | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 NorthstarDedicatedTest/sourceinterface.cpp (limited to 'NorthstarDedicatedTest/sourceinterface.cpp') diff --git a/NorthstarDedicatedTest/sourceinterface.cpp b/NorthstarDedicatedTest/sourceinterface.cpp new file mode 100644 index 00000000..cedfad3c --- /dev/null +++ b/NorthstarDedicatedTest/sourceinterface.cpp @@ -0,0 +1,68 @@ +#include "pch.h" +#include "sourceinterface.h" +#include "hooks.h" +#include "hookutils.h" + +#include "sourceconsole.h" +#include "context.h" +#include "convar.h" +#include + +// really wanted to do a modular callback system here but honestly couldn't be bothered so hardcoding stuff for now: todo later + +CreateInterfaceFn clientCreateInterfaceOriginal; +void* ClientCreateInterfaceHook(const char* pName, int* pReturnCode) +{ + void* ret = clientCreateInterfaceOriginal(pName, pReturnCode); + + std::cout << "CreateInterface CLIENT " << pName << std::endl; + if (!strcmp(pName, "GameClientExports001")) + InitialiseConsoleOnInterfaceCreation(); + + return ret; +} + +CreateInterfaceFn serverCreateInterfaceOriginal; +void* ServerCreateInterfaceHook(const char* pName, int* pReturnCode) +{ + void* ret = serverCreateInterfaceOriginal(pName, pReturnCode); + + std::cout << "CreateInterface SERVER " << pName << std::endl; + + return ret; +} + +CreateInterfaceFn engineCreateInterfaceOriginal; +void* EngineCreateInterfaceHook(const char* pName, int* pReturnCode) +{ + void* ret = engineCreateInterfaceOriginal(pName, pReturnCode); + + std::cout << "CreateInterface ENGINE " << pName << std::endl; + + return ret; +} + +void HookClientCreateInterface(HMODULE baseAddress) +{ + HookEnabler hook; + ENABLER_CREATEHOOK(hook, GetProcAddress(baseAddress, "CreateInterface"), &ClientCreateInterfaceHook, reinterpret_cast(&clientCreateInterfaceOriginal)); +} + +void HookServerCreateInterface(HMODULE baseAddress) +{ + HookEnabler hook; + ENABLER_CREATEHOOK(hook, GetProcAddress(baseAddress, "CreateInterface"), &ServerCreateInterfaceHook, reinterpret_cast(&serverCreateInterfaceOriginal)); +} + +void HookEngineCreateInterface(HMODULE baseAddress) +{ + HookEnabler hook; + ENABLER_CREATEHOOK(hook, GetProcAddress(baseAddress, "CreateInterface"), &EngineCreateInterfaceHook, reinterpret_cast(&engineCreateInterfaceOriginal)); +} + +void InitialiseInterfaceCreationHooks() +{ + AddDllLoadCallback("client.dll", HookClientCreateInterface); + AddDllLoadCallback("server.dll", HookServerCreateInterface); + AddDllLoadCallback("engine.dll", HookEngineCreateInterface); +} \ No newline at end of file -- cgit v1.2.3