From d7f2fc95e7c572aa61b9cf13738edbf02f91f250 Mon Sep 17 00:00:00 2001 From: Nikita Zyuzin Date: Thu, 12 Nov 2015 13:06:05 +0400 Subject: [PATCH 1/2] Reset statboard after a game restart Fixes #335 --- src/game/client/gameclient.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index 51dbee5e0..2aa113f8f 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -1063,12 +1063,24 @@ void CGameClient::OnNewSnapshot() else if(Item.m_Type == NETOBJTYPE_GAMEINFO) { static bool s_GameOver = 0; + static bool s_GamePaused = 0; m_Snap.m_pGameInfoObj = (const CNetObj_GameInfo *)pData; - if(!s_GameOver && m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER) + bool CurrentTickGameOver = m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER; + if(!s_GameOver && CurrentTickGameOver) OnGameOver(); - else if(s_GameOver && !(m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER)) + else if(s_GameOver && !CurrentTickGameOver) OnStartGame(); - s_GameOver = m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER; + // Reset statboard when new round is started (RoundStartTick changed) + // New round is usually started after `restart` on server + if ((m_Snap.m_pGameInfoObj->m_RoundStartTick - m_LastRoundStartTick > 2) + // In GamePaused or GameOver state RoundStartTick is updated on each tick + // hence no need to reset stats until player leaves GameOver + // and it would be a mistake to reset stats after or during the pause + && !(CurrentTickGameOver || m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_PAUSED || s_GamePaused)) + m_pStatboard->OnReset(); + m_LastRoundStartTick = m_Snap.m_pGameInfoObj->m_RoundStartTick; + s_GameOver = CurrentTickGameOver; + s_GamePaused = m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_PAUSED; } else if(Item.m_Type == NETOBJTYPE_GAMEDATA) { From e63e9eed542375aa974994ee52d08cab69b228ef Mon Sep 17 00:00:00 2001 From: Nikita Zyuzin Date: Fri, 13 Nov 2015 14:33:12 +0400 Subject: [PATCH 2/2] Replace diff > 2 with != in RoundStartTick comparison --- src/game/client/gameclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index 2aa113f8f..890fc7e90 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -1072,7 +1072,7 @@ void CGameClient::OnNewSnapshot() OnStartGame(); // Reset statboard when new round is started (RoundStartTick changed) // New round is usually started after `restart` on server - if ((m_Snap.m_pGameInfoObj->m_RoundStartTick - m_LastRoundStartTick > 2) + if(m_Snap.m_pGameInfoObj->m_RoundStartTick != m_LastRoundStartTick // In GamePaused or GameOver state RoundStartTick is updated on each tick // hence no need to reset stats until player leaves GameOver // and it would be a mistake to reset stats after or during the pause