Fix bug where restart commands don't work

We reset the idle name in HS_GAME_SHUTDOWN, but the restart command callback uses the name field to 'map' into the same map (restarting), which causes issues when we reset it to 'server_idle'.
Changed behavior to only reset name (non recursive) if we are running but do not have an active game.
This commit is contained in:
Kawe Mazidjatari 2022-09-14 21:51:15 +02:00
parent 4d2c5513f2
commit d32a4f2df0

View File

@ -57,6 +57,7 @@
FORCEINLINE void CHostState::FrameUpdate(CHostState* pHostState, double flCurrentTime, float flFrameTime)
{
static bool bInitialized = false;
static bool bResetIdleName = false;
if (!bInitialized)
{
g_pHostState->Setup();
@ -106,15 +107,25 @@ FORCEINLINE void CHostState::FrameUpdate(CHostState* pHostState, double flCurren
}
case HostStates_t::HS_RUN:
{
if (!g_pHostState->m_bActiveGame)
{
if (bResetIdleName)
{
g_pHostState->ResetLevelName();
bResetIdleName = false;
}
}
else // Reset idle name the next non-active frame.
{
bResetIdleName = true;
}
CHostState_State_Run(&g_pHostState->m_iCurrentState, flCurrentTime, flFrameTime);
break;
}
case HostStates_t::HS_GAME_SHUTDOWN:
{
DevMsg(eDLL_T::ENGINE, "%s - Shutdown host game\n", "CHostState::FrameUpdate");
if (g_pHostState->m_bActiveGame) {
g_pHostState->ResetLevelName();
}
CHostState_State_GameShutDown(g_pHostState);
break;
}
@ -310,8 +321,6 @@ FORCEINLINE void CHostState::GameShutDown(void)
g_pServerGameDLL->GameShutdown();
#endif // !CLIENT_DLL
m_bActiveGame = 0;
ResetLevelName();
}
}
@ -419,7 +428,7 @@ FORCEINLINE void CHostState::ResetLevelName(void)
#else // DEDICATED
const char* szNoMap = "main_menu";
#endif
snprintf(const_cast<char*>(m_levelName), sizeof(m_levelName), szNoMap);
Q_snprintf(const_cast<char*>(m_levelName), sizeof(m_levelName), szNoMap);
}
///////////////////////////////////////////////////////////////////////////////