diff --git a/server/gamemodes.cpp b/server/gamemodes.cpp index 160cedf..440884e 100644 --- a/server/gamemodes.cpp +++ b/server/gamemodes.cpp @@ -133,6 +133,35 @@ void CGameMode::Unload() //---------------------------------------------------------------------------------- +void CGameMode::Frame(float fElapsedTime) +{ + if (!m_bInitialised) + return; + + if (!m_bSleeping) + return; + + if (m_fSleepTime > 0.0f) + { + m_fSleepTime -= fElapsedTime; + } + else + { + cell ret; + int err = amx_Exec(&m_amx, &ret, AMX_EXEC_CONT); + if (err == AMX_ERR_SLEEP) + { + m_bSleeping = true; + m_fSleepTime = ((float)ret / 1000.0f); + } + else + { + m_bSleeping = false; + AMXPrintError(this, &m_amx, err); + } + } +} + //---------------------------------------------------------------------------------- int CGameMode::CallPublic(char* szFuncName) diff --git a/server/gamemodes.h b/server/gamemodes.h index 3d69b8d..efa5143 100644 --- a/server/gamemodes.h +++ b/server/gamemodes.h @@ -22,6 +22,7 @@ public: bool Load(char* pFileName); void Unload(); + void Frame(float fElapsedTime); int CallPublic(char* szFuncName); diff --git a/server/netgame.cpp b/server/netgame.cpp index e562f23..20bb628 100644 --- a/server/netgame.cpp +++ b/server/netgame.cpp @@ -592,11 +592,18 @@ void CNetGame::Process() { float fElapsedTime = GetElapsedTime(); + if(m_iGameState == GAMESTATE_RUNNING) + { + if(m_pGameMode) m_pGameMode->Frame(fElapsedTime); + } + else if(m_iGameState == GAMESTATE_RESTARTING) + { + + } // TODO: CNetGame::Process W: 00491240 L: 080AEEE0 /* - v4 = sub_80AA3D0(); sub_80ABF00(this); sub_80AECE0((int)this); v1 = this->field_5E;