diff options
author | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2023-01-04 00:36:51 +0000 |
---|---|---|
committer | GeckoEidechse <gecko.eidechse+git@pm.me> | 2023-01-04 14:59:34 +0100 |
commit | 2c4a25a0f2b28ba278a46c1755637374f90e9b35 (patch) | |
tree | 011a61c651a7f2244ffe828696fc3247012f15c6 /NorthstarDLL/engine/hoststate.cpp | |
parent | a7018f0178006f0271077863149283c9f3d95d64 (diff) | |
download | NorthstarLauncher-2c4a25a0f2b28ba278a46c1755637374f90e9b35.tar.gz NorthstarLauncher-2c4a25a0f2b28ba278a46c1755637374f90e9b35.zip |
generally cleanup authentication code and fix client state issues with rejection from local server (#360)v1.11.2-rc2
* generally cleanup authentication code and fix client state issues with
rejection from local server
* fix formatting
* fix formatting
* use client-provided uid for logging disconnect failure as it won't be
copied to player if authentication fails
* support loading savegame and use more reliable method for fixing
client rejection issues
* oops forgot to add rejectconnectionfixes.cpp
* fixup formatting
Diffstat (limited to 'NorthstarDLL/engine/hoststate.cpp')
-rw-r--r-- | NorthstarDLL/engine/hoststate.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/NorthstarDLL/engine/hoststate.cpp b/NorthstarDLL/engine/hoststate.cpp index f2318c78..d474b908 100644 --- a/NorthstarDLL/engine/hoststate.cpp +++ b/NorthstarDLL/engine/hoststate.cpp @@ -26,7 +26,12 @@ void ServerStartingOrChangingMap() // net_data_block_enabled is required for sp, force it if we're on an sp map // sucks for security but just how it be if (!strncmp(g_pHostState->m_levelName, "sp_", 3)) + { g_pCVar->FindVar("net_data_block_enabled")->SetValue(true); + g_pServerAuthentication->m_bStartingLocalSPGame = true; + } + else + g_pServerAuthentication->m_bStartingLocalSPGame = false; } // clang-format off @@ -60,6 +65,34 @@ void, __fastcall, (CHostState* self)) } // clang-format off +AUTOHOOK(CHostState__State_LoadGame, engine.dll + 0x16E730, +void, __fastcall, (CHostState* self)) +// clang-format on +{ + // singleplayer server starting + // useless in 99% of cases but without it things could potentially break very much + + spdlog::info("HostState: LoadGame"); + + Cbuf_AddText(Cbuf_GetCurrentPlayer(), "exec autoexec_ns_server", cmd_source_t::kCommandSrcCode); + Cbuf_Execute(); + + // this is normally done in ServerStartingOrChangingMap(), but seemingly the map name isn't set at this point + g_pCVar->FindVar("net_data_block_enabled")->SetValue(true); + g_pServerAuthentication->m_bStartingLocalSPGame = true; + + double dStartTime = Tier0::Plat_FloatTime(); + CHostState__State_LoadGame(self); + spdlog::info("loading took {}s", Tier0::Plat_FloatTime() - dStartTime); + + // no server presence, can't do it because no map name in hoststate + // and also not super important for sp saves really + + g_pServerAuthentication->StartPlayerAuthServer(); + g_pServerAuthentication->m_bNeedLocalAuthForNewgame = false; +} + +// clang-format off AUTOHOOK(CHostState__State_ChangeLevelMP, engine.dll + 0x16E520, void, __fastcall, (CHostState* self)) // clang-format on |