From 07d508ed4ebcd247250b8a983e5c85dffee4d5ef Mon Sep 17 00:00:00 2001 From: HappyDOGE <28511119+HappyDOGE@users.noreply.github.com> Date: Mon, 27 Dec 2021 14:53:25 +0300 Subject: initial work on maxplayers --- NorthstarDedicatedTest/dllmain.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'NorthstarDedicatedTest/dllmain.cpp') diff --git a/NorthstarDedicatedTest/dllmain.cpp b/NorthstarDedicatedTest/dllmain.cpp index 212b5711..c8f29550 100644 --- a/NorthstarDedicatedTest/dllmain.cpp +++ b/NorthstarDedicatedTest/dllmain.cpp @@ -25,6 +25,7 @@ #include "scriptmainmenupromos.h" #include "miscclientfixes.h" #include "memalloc.h" +#include "maxplayers.h" bool initialised = false; @@ -116,6 +117,11 @@ void InitialiseNorthstar() AddDllLoadCallback("filesystem_stdio.dll", InitialiseFilesystem); AddDllLoadCallback("engine.dll", InitialiseKeyValues); + // maxplayers increase + AddDllLoadCallback("engine.dll", InitialiseMaxPlayersOverride_Engine); + AddDllLoadCallback("client.dll", InitialiseMaxPlayersOverride_Client, true); + AddDllLoadCallback("server.dll", InitialiseMaxPlayersOverride_Server, true); + // mod manager after everything else AddDllLoadCallback("engine.dll", InitialiseModManager); } \ No newline at end of file -- cgit v1.2.3 From 1cb1d1e19804d1b7b52c8b2bd21f10dde4bf6bf8 Mon Sep 17 00:00:00 2001 From: HappyDOGE <28511119+HappyDOGE@users.noreply.github.com> Date: Mon, 27 Dec 2021 19:56:08 +0300 Subject: remove hook preload as it's not crossplatform use a universal solution instead --- NorthstarDedicatedTest/dllmain.cpp | 4 ++-- NorthstarDedicatedTest/hooks.cpp | 32 +------------------------------- NorthstarDedicatedTest/hooks.h | 2 +- NorthstarDedicatedTest/maxplayers.cpp | 8 ++++++++ 4 files changed, 12 insertions(+), 34 deletions(-) (limited to 'NorthstarDedicatedTest/dllmain.cpp') diff --git a/NorthstarDedicatedTest/dllmain.cpp b/NorthstarDedicatedTest/dllmain.cpp index 1eafef7f..6f57d265 100644 --- a/NorthstarDedicatedTest/dllmain.cpp +++ b/NorthstarDedicatedTest/dllmain.cpp @@ -121,8 +121,8 @@ void InitialiseNorthstar() // maxplayers increase AddDllLoadCallback("engine.dll", InitialiseMaxPlayersOverride_Engine); - AddDllLoadCallback("client.dll", InitialiseMaxPlayersOverride_Client, true); - AddDllLoadCallback("server.dll", InitialiseMaxPlayersOverride_Server, true); + AddDllLoadCallback("client.dll", InitialiseMaxPlayersOverride_Client); + AddDllLoadCallback("server.dll", InitialiseMaxPlayersOverride_Server); // mod manager after everything else AddDllLoadCallback("engine.dll", InitialiseModManager); diff --git a/NorthstarDedicatedTest/hooks.cpp b/NorthstarDedicatedTest/hooks.cpp index e5ea0cb6..302fa7bb 100644 --- a/NorthstarDedicatedTest/hooks.cpp +++ b/NorthstarDedicatedTest/hooks.cpp @@ -14,15 +14,9 @@ HMODULE LoadLibraryExAHook(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); typedef HMODULE(*LoadLibraryExWType)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); HMODULE LoadLibraryExWHook(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); -typedef BOOLEAN(*PDLL_INIT_ROUTINE)(PVOID DllHandle, ULONG Reason, PCONTEXT Context); -typedef BOOLEAN(*LdrpCallInitRoutineType)(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context); -BOOLEAN LdrpCallInitRoutineHook(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context); - LoadLibraryExAType LoadLibraryExAOriginal; LoadLibraryExWType LoadLibraryExWOriginal; -LdrpCallInitRoutineType LdrpCallInitRoutineHookOriginal; - void InstallInitialHooks() { if (MH_Initialize() != MH_OK) @@ -31,9 +25,6 @@ void InstallInitialHooks() HookEnabler hook; ENABLER_CREATEHOOK(hook, &LoadLibraryExA, &LoadLibraryExAHook, reinterpret_cast(&LoadLibraryExAOriginal)); ENABLER_CREATEHOOK(hook, &LoadLibraryExW, &LoadLibraryExWHook, reinterpret_cast(&LoadLibraryExWOriginal)); - - void* LdrpCallInitRoutine = FindSignature("ntdll.dll", "\x48\x89\x5C\x24\x00\x44\x89\x44\x24\x00\x48\x89\x54\x24", "xxxx?xxxx?xxxx"); - ENABLER_CREATEHOOK(hook, LdrpCallInitRoutine, &LdrpCallInitRoutineHook, reinterpret_cast(&LdrpCallInitRoutineHookOriginal)); } // dll load callback stuff @@ -43,18 +34,16 @@ struct DllLoadCallback std::string dll; DllLoadCallbackFuncType callback; bool called; - bool preinit; }; std::vector dllLoadCallbacks; -void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback, bool preinit) +void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback) { DllLoadCallback* callbackStruct = new DllLoadCallback; callbackStruct->dll = dll; callbackStruct->callback = callback; callbackStruct->called = false; - callbackStruct->preinit = preinit; dllLoadCallbacks.push_back(callbackStruct); } @@ -97,23 +86,4 @@ HMODULE LoadLibraryExWHook(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) } return moduleAddress; -} - -BOOLEAN LdrpCallInitRoutineHook(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context) -{ - char fullModulePath[MAX_PATH] = { 0 }; - GetModuleFileNameA((HMODULE)BaseAddress, fullModulePath, sizeof(fullModulePath)); - - std::string name = std::filesystem::path(fullModulePath).filename().string(); - - for (auto& callbackStruct : dllLoadCallbacks) - { - if (!callbackStruct->called && callbackStruct->preinit && name == callbackStruct->dll) - { - callbackStruct->callback((HMODULE)BaseAddress); - callbackStruct->called = true; - } - } - - return LdrpCallInitRoutineHookOriginal(EntryPoint, BaseAddress, Reason, Context); } \ No newline at end of file diff --git a/NorthstarDedicatedTest/hooks.h b/NorthstarDedicatedTest/hooks.h index 012b12ec..972b38a6 100644 --- a/NorthstarDedicatedTest/hooks.h +++ b/NorthstarDedicatedTest/hooks.h @@ -4,4 +4,4 @@ void InstallInitialHooks(); typedef void(*DllLoadCallbackFuncType)(HMODULE moduleAddress); -void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback, bool preinit = false); \ No newline at end of file +void AddDllLoadCallback(std::string dll, DllLoadCallbackFuncType callback); \ No newline at end of file diff --git a/NorthstarDedicatedTest/maxplayers.cpp b/NorthstarDedicatedTest/maxplayers.cpp index 1c984c96..e649b0a6 100644 --- a/NorthstarDedicatedTest/maxplayers.cpp +++ b/NorthstarDedicatedTest/maxplayers.cpp @@ -427,6 +427,10 @@ void InitialiseMaxPlayersOverride_Server(HMODULE baseAddress) // GameLoop::RunUserCmds - rebuild HookEnabler hook; ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x483D10, &RunUserCmds_Hook, reinterpret_cast(&RunUserCmds_Original)); + + *(DWORD*)((char*)baseAddress + 0x14E7390) = 0; + auto DT_PlayerResource_Construct = (__int64(__fastcall*)())((char*)baseAddress + 0x5C4FE0); + DT_PlayerResource_Construct(); } void InitialiseMaxPlayersOverride_Client(HMODULE baseAddress) @@ -579,4 +583,8 @@ void InitialiseMaxPlayersOverride_Client(HMODULE baseAddress) // Some other get name func 2 (that seems to be unused too) - change m_bConnected address ChangeOffset((char*)baseAddress + 0x164834 + 3, C_PlayerResource_OriginalSize + PlayerResource_Connected_Start); + + *(DWORD*)((char*)baseAddress + 0xC35068) = 0; + auto DT_PlayerResource_Construct = (__int64(__fastcall*)())((char*)baseAddress + 0x163400); + DT_PlayerResource_Construct(); } \ No newline at end of file -- cgit v1.2.3