//++ BulliT #include "extdll.h" #include "util.h" #include "cbase.h" #include "game.h" #include "player.h" #include "agtimer.h" #include "agglobal.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// DLL_GLOBAL bool g_bPaused = false; extern int gmsgTimer; AgTimer::AgTimer() { m_fNextTimerUpdate = gpGlobals->time + 5.0f; //Dont start timer directly. m_fLastTimeCheck = gpGlobals->time; m_fEffectiveTime = 0.0f; m_pmp_timelimit = CVAR_GET_POINTER("mp_timelimit"); } AgTimer::~AgTimer() { } void AgTimer::Think() { //Calculate effective time if (!g_bPaused) m_fEffectiveTime += gpGlobals->time - m_fLastTimeCheck; m_fLastTimeCheck = gpGlobals->time; if (m_fNextTimerUpdate <= m_fEffectiveTime) { //Sanity time check. Some dudes tends to put timelimit weird. if (timelimit.value > 2880) CVAR_SET_FLOAT("mp_timelimit",2880); //Max two days. //Write the time. (negative turns off timer on client) #if AG_NO_CLIENT_DLL long lTime = (m_pmp_timelimit->value * 60) - m_fEffectiveTime; if (lTime > 0) { char szTime[128]; if (86400 < lTime) { //More than one day. Print days, hour, minutes and seconds ldiv_t d1 = ldiv(lTime, 86400); ldiv_t d2 = ldiv(d1.rem, 3600); ldiv_t d3 = ldiv(d2.rem, 60); sprintf(szTime,"%ldd %ldh %02ldm %02lds\n",d1.quot,d2.quot,d3.quot,d3.rem); } else if (3600 < lTime) { //More than one hour. Print hour, minutes and seconds ldiv_t d1 = ldiv(lTime, 3600); ldiv_t d2 = ldiv(d1.rem, 60); sprintf(szTime,"%ldh %02ldm %02lds\n",d1.quot,d2.quot,d2.rem); } else if (60 < lTime) { //More than one minute. Print minutes and seconds. ldiv_t d = ldiv(lTime, 60); sprintf(szTime,"%ld:%02ld\n",d.quot,d.rem); } else { //Less than a minute left. Print seconds. sprintf(szTime,"%ld\n",lTime); } AgSay(NULL,szTime,NULL,5,0.5,0.01,1); if (120L < lTime) m_fNextTimerUpdate += 30; else m_fNextTimerUpdate += 5; } #else MESSAGE_BEGIN( MSG_BROADCAST, gmsgTimer ); WRITE_LONG( (int)m_pmp_timelimit->value * 60); //Timelimit WRITE_LONG( (int)m_fEffectiveTime ); //How much time that has passed. MESSAGE_END(); //Send next in 1 sec m_fNextTimerUpdate += 1; #endif } } //-- Martin Webrant