From 34502e5147d21d888fa33e982bfb6e6259d6d46d Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Mon, 25 Apr 2022 04:05:42 +0200 Subject: [PATCH] Make loading required paks per level more reliable Also seems to work good on the dedicated server --- r5dev/engine/sys_utils.cpp | 25 ++----------------------- r5dev/rtech/rtech_game.cpp | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/r5dev/engine/sys_utils.cpp b/r5dev/engine/sys_utils.cpp index e493b0bc..6d92988e 100644 --- a/r5dev/engine/sys_utils.cpp +++ b/r5dev/engine/sys_utils.cpp @@ -8,10 +8,7 @@ #include "core/logdef.h" #include "tier0/commandline.h" #include "tier1/cvar.h" -#include "engine/common.h" -#include "engine/host_state.h" #include "engine/sys_utils.h" -#include "engine/cmodel_bsp.h" #ifdef DEDICATED #include "engine/sv_rcon.h" #else @@ -331,26 +328,8 @@ void* HSys_LoadAssetHelper(const CHAR* lpFileName, std::int64_t a2, LARGE_INTEGE { std::string mod_file; std::string base_file = lpFileName; - const std::string mod_dir = "paks\\Win32\\"; - const std::string base_dir = "paks\\Win64\\"; - static bool bBasePaksLoaded = false; - - if (g_pHostState) - { - std::string svLevelName = g_pHostState->m_levelName; - std::string svMapPakName = svLevelName + ".rpak"; - - if (!g_bLevelResourceInitialized && !g_pHostState->m_bActiveGame && - bBasePaksLoaded || !strcmp(std::string(lpFileName).erase(0, 11).c_str(), "mp_lobby.rpak")) - { - // Attempt to load level dependencies if they exist. - MOD_PreloadPak(svLevelName); - - // By the time mp_lobby.rpak is loaded, all the base paks are loaded as well and we can load anything else. - bBasePaksLoaded = true; - g_bLevelResourceInitialized = true; - } - } + static const std::string mod_dir = "paks\\Win32\\"; + static const std::string base_dir = "paks\\Win64\\"; if (strstr(lpFileName, base_dir.c_str())) { diff --git a/r5dev/rtech/rtech_game.cpp b/r5dev/rtech/rtech_game.cpp index ae2b9005..2f1cb930 100644 --- a/r5dev/rtech/rtech_game.cpp +++ b/r5dev/rtech/rtech_game.cpp @@ -6,6 +6,8 @@ #include "core/stdafx.h" #include "engine/host_cmd.h" #include "engine/sys_utils.h" +#include "engine/host_state.h" +#include "engine/cmodel_bsp.h" #include "rtech/rtech_game.h" vector g_LoadedPakHandle{ }; @@ -39,6 +41,24 @@ RPakHandle_t CPakFile::AsyncLoad(const char* szPakFileName, uintptr_t pMalloc, i } #endif // DEDICATED + if (g_pHostState) + { + string svLevelName = g_pHostState->m_levelName; + string svMapPakName = svLevelName + ".rpak"; + static bool bBasePaksLoaded = false; + + if (!g_bLevelResourceInitialized && !g_pHostState->m_bActiveGame && + bBasePaksLoaded || !strcmp(szPakFileName, "mp_lobby.rpak")) + { + // Attempt to load level dependencies if they exist. + MOD_PreloadPak(svLevelName); + + // By the time mp_lobby.rpak is loaded, all the base paks are loaded as well and we can load anything else. + bBasePaksLoaded = true; + g_bLevelResourceInitialized = true; + } + } + string svPakFilePathMod = "paks\\Win32\\" + string(szPakFileName); string svPakFilePathBase = "paks\\Win64\\" + string(szPakFileName);