/* ================= SV_IsSimulating ================= */ qboolean SV_IsSimulating( void ) { if( sv.background && SV_Active() && CL_Active()) { if( CL_IsInConsole( )) return false; return true; // force simulating for background map } if( sv.hostflags & SVF_PLAYERSONLY ) return false; if( !SV_HasActivePlayers()) return false; if( !sv.paused && CL_IsInGame( )) return true; return false; }
void SCR_CheckStartupVids( void ) { int c = 0; char *afile, *pfile; string token; if( Sys_CheckParm( "-nointro" ) || host.developer >= 2 || cls.demonum != -1 ) { // don't run movies where we in developer-mode cls.movienum = -1; return; } if( !FS_FileExists( "media/StartupVids.txt", false )) SCR_CreateStartupVids(); afile = FS_LoadFile( "media/StartupVids.txt", NULL, false ); if( !afile ) return; // something bad happens pfile = afile; while(( pfile = COM_ParseFile( pfile, token )) != NULL ) { Q_strncpy( cls.movies[c], token, sizeof( cls.movies[0] )); if( ++c > MAX_MOVIES - 1 ) { MsgDev( D_WARN, "Host_StartMovies: max %i movies in StartupVids\n", MAX_MOVIES ); break; } } Mem_Free( afile ); // run cinematic if( !SV_Active() && cls.movienum != -1 && cls.state != ca_cinematic ) { cls.movienum = 0; SCR_NextMovie (); } else cls.movienum = -1; }
/* ================== CL_Demos_f Return to looping demos ================== */ void CL_Demos_f( void ) { if( cls.key_dest != key_menu ) { MsgDev( D_INFO, "demos is not valid from the console\n" ); return; } cls.demonum = cls.olddemonum; if( cls.demonum == -1 ) cls.demonum = 0; if( !SV_Active() && !cls.demoplayback ) { // run demos loop in background mode cls.changedemo = true; CL_NextDemo (); } }
/* ================ SV_Shutdown Called when each game quits, before Sys_Quit or Sys_Error ================ */ void SV_Shutdown( qboolean reconnect ) { // already freed if( !SV_Active( )) return; if( host.type == HOST_DEDICATED ) MsgDev( D_INFO, "SV_Shutdown: %s\n", host.finalmsg ); if( svs.clients ) SV_FinalMessage( host.finalmsg, reconnect ); Master_Shutdown(); if( !reconnect ) SV_UnloadProgs (); else SV_DeactivateServer (); // free current level Q_memset( &sv, 0, sizeof( sv )); Host_SetServerState( sv.state ); // free server static data if( svs.clients ) { Z_Free( svs.clients ); svs.clients = NULL; } if( svs.baselines ) { Z_Free( svs.baselines ); svs.baselines = NULL; } if( svs.packet_entities ) { Z_Free( svs.packet_entities ); svs.packet_entities = NULL; svs.num_client_entities = 0; svs.next_client_entities = 0; } svs.initialized = false; }
/* =============== CL_LerpPoint Determines the fraction between the last two messages that the objects should be put at. =============== */ static float CL_LerpPoint( void ) { float f, frac; f = cl.mtime[0] - cl.mtime[1]; if( !f || SV_Active( )) { cl.time = cl.mtime[0]; return 1.0f; } if( f > 0.1f ) { // dropped packet, or start of demo cl.mtime[1] = cl.mtime[0] - 0.1f; f = 0.1f; } frac = ( cl.time - cl.mtime[1] ) / f; if( frac < 0 ) { if( frac < -0.01f ) cl.time = cl.mtime[1]; frac = 0.0f; } else if( frac > 1.0f ) { if( frac > 1.01f ) cl.time = cl.mtime[0]; frac = 1.0f; } return frac; }
void Host_ShutdownServer( void ) { if( !SV_Active()) return; Q_strncpy( host.finalmsg, "Server was killed", MAX_STRING ); SV_Shutdown( false ); }
qboolean Host_IsLocalGame( void ) { if( CL_Active() && SV_Active() && CL_GetMaxClients() == 1 ) return true; return false; }