diff options
-rw-r--r-- | NorthstarDedicatedTest/dedicatedmaterialsystem.cpp | 41 | ||||
-rw-r--r-- | NorthstarDedicatedTest/serverauthentication.cpp | 6 |
2 files changed, 42 insertions, 5 deletions
diff --git a/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp b/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp index 758f0527..804e35cf 100644 --- a/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp +++ b/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp @@ -135,11 +135,48 @@ void* RegisterRpakTypeHook(RpakTypeDefinition* rpakStruct, unsigned int a1, unsi return RegisterRpakType(rpakStruct, a1, a2); } +typedef void*(*PakLoadAPI__LoadRpakType)(char* filename, void* unknown, int flags); +PakLoadAPI__LoadRpakType PakLoadAPI__LoadRpak; + +void* PakLoadAPI__LoadRpakHook(char* filename, void* unknown, int flags) +{ + spdlog::info("PakLoadAPI__LoadRpakHook {}", filename); + + // on dedi, don't load any paks that aren't required + if (strncmp(filename, "common", 6)) + return 0; + + return PakLoadAPI__LoadRpak(filename, unknown, flags); +} + +typedef void* (*PakLoadAPI__LoadRpak2Type)(char* filename, void* unknown, int flags, void* callback, void* callback2); +PakLoadAPI__LoadRpak2Type PakLoadAPI__LoadRpak2; + +void* PakLoadAPI__LoadRpak2Hook(char* filename, void* unknown, int flags, void* callback, void* callback2) +{ + spdlog::info("PakLoadAPI__LoadRpak2Hook {}", filename); + + // on dedi, don't load any paks that aren't required + if (strncmp(filename, "common", 6)) + return 0; + + return PakLoadAPI__LoadRpak2(filename, unknown, flags, callback, callback2); +} + void InitialiseDedicatedRtechGame(HMODULE baseAddress) { - if (!IsDedicated() || !DisableDedicatedWindowCreation()) + if (!IsDedicated()) return; + baseAddress = GetModuleHandleA("rtech_game.dll"); + HookEnabler hook; - ENABLER_CREATEHOOK(hook, (char*)GetModuleHandleA("rtech_game.dll") + 0x7BE0, &RegisterRpakTypeHook, reinterpret_cast<LPVOID*>(&RegisterRpakType)); + // unfortunately this is unstable, seems to freeze when changing maps + //ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0xB0F0, &PakLoadAPI__LoadRpakHook, reinterpret_cast<LPVOID*>(&PakLoadAPI__LoadRpak)); + //ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0xB170, &PakLoadAPI__LoadRpak2Hook, reinterpret_cast<LPVOID*>(&PakLoadAPI__LoadRpak2)); + + if (DisableDedicatedWindowCreation()) + { + ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x7BE0, &RegisterRpakTypeHook, reinterpret_cast<LPVOID*>(&RegisterRpakType)); + } }
\ No newline at end of file diff --git a/NorthstarDedicatedTest/serverauthentication.cpp b/NorthstarDedicatedTest/serverauthentication.cpp index 7042e9c1..85dc700e 100644 --- a/NorthstarDedicatedTest/serverauthentication.cpp +++ b/NorthstarDedicatedTest/serverauthentication.cpp @@ -109,7 +109,7 @@ bool ServerAuthenticationManager::AuthenticatePlayer(void* player, int64_t uid, { // use stored auth data AuthData authData = m_authData[authToken]; - if (!strcmp(strUid.c_str(), authData.uid)) // connecting client's uid is different from auth's uid + if (!strcmp(strUid.c_str(), authData.uid)) // connecting client's uid is the same as auth's uid { authFail = false; // uuid @@ -134,13 +134,13 @@ bool ServerAuthenticationManager::AuthenticatePlayer(void* player, int64_t uid, strcpy((char*)player + 0xF500, strUid.c_str()); // try reading pdata file for player - std::string pdataPath = "playerdata/playerdata_"; + std::string pdataPath = "R2Northstar/playerdata_"; pdataPath += strUid; pdataPath += ".pdata"; std::fstream pdataStream(pdataPath, std::ios_base::in); if (pdataStream.fail()) // file doesn't exist, use placeholder - pdataStream = std::fstream("playerdata/placeholder_playerdata.pdata"); + pdataStream = std::fstream("R2Northstar/placeholder_playerdata.pdata"); // get file length pdataStream.seekg(0, pdataStream.end); |