/* * Change the server to a new map, taking all connected * clients along with it. */ void SV_SpawnServer ( char *server, char *spawnpoint, server_state_t serverstate, qboolean attractloop, qboolean loadgame ) { int i; unsigned checksum; if ( attractloop ) { Cvar_Set( "paused", "0" ); } Com_Printf( "------- server initialization ------\n" ); Com_DPrintf( "SpawnServer: %s\n", server ); if ( sv.demofile ) { FS_FCloseFile( (size_t) sv.demofile ); } svs.spawncount++; /* any partially connected client will be restarted */ sv.state = ss_dead; Com_SetServerState( sv.state ); /* wipe the entire per-level structure */ memset( &sv, 0, sizeof ( sv ) ); svs.realtime = 0; sv.loadgame = loadgame; sv.attractloop = attractloop; /* save name for levels that don't set message */ strcpy( sv.configstrings [ CS_NAME ], server ); if ( Cvar_VariableValue( "deathmatch" ) ) { sprintf( sv.configstrings [ CS_AIRACCEL ], "%g", sv_airaccelerate->value ); pm_airaccelerate = sv_airaccelerate->value; } else { strcpy( sv.configstrings [ CS_AIRACCEL ], "0" ); pm_airaccelerate = 0; } SZ_Init( &sv.multicast, sv.multicast_buf, sizeof ( sv.multicast_buf ) ); strcpy( sv.name, server ); /* leave slots at start for clients only */ for ( i = 0; i < maxclients->value; i++ ) { /* needs to reconnect */ if ( svs.clients [ i ].state > cs_connected ) { svs.clients [ i ].state = cs_connected; } svs.clients [ i ].lastframe = -1; } sv.time = 1000; strcpy( sv.name, server ); strcpy( sv.configstrings [ CS_NAME ], server ); if ( serverstate != ss_game ) { sv.models [ 1 ] = CM_LoadMap( "", false, &checksum ); /* no real map */ } else { Com_sprintf( sv.configstrings [ CS_MODELS + 1 ], sizeof ( sv.configstrings [ CS_MODELS + 1 ] ), "maps/%s.bsp", server ); sv.models [ 1 ] = CM_LoadMap( sv.configstrings [ CS_MODELS + 1 ], false, &checksum ); } Com_sprintf( sv.configstrings [ CS_MAPCHECKSUM ], sizeof ( sv.configstrings [ CS_MAPCHECKSUM ] ), "%i", checksum ); /* clear physics interaction links */ SV_ClearWorld(); for ( i = 1; i < CM_NumInlineModels(); i++ ) { Com_sprintf( sv.configstrings [ CS_MODELS + 1 + i ], sizeof ( sv.configstrings [ CS_MODELS + 1 + i ] ), "*%i", i ); sv.models [ i + 1 ] = CM_InlineModel( sv.configstrings [ CS_MODELS + 1 + i ] ); } /* spawn the rest of the entities on the map */ sv.state = ss_loading; Com_SetServerState( sv.state ); /* load and spawn all other entities */ ge->SpawnEntities( sv.name, CM_EntityString(), spawnpoint ); /* run two frames to allow everything to settle */ ge->RunFrame(); ge->RunFrame(); /* verify game didn't clobber important stuff */ if ( (int) checksum != (int)strtol( sv.configstrings [ CS_MAPCHECKSUM ], (char **)NULL, 10 ) ) { Com_Error( ERR_DROP, "Game DLL corrupted server configstrings" ); } /* all precaches are complete */ sv.state = serverstate; Com_SetServerState( sv.state ); /* create a baseline for more efficient communications */ SV_CreateBaseline(); /* check for a savegame */ SV_CheckForSavegame(); /* set serverinfo variable */ Cvar_FullSet( "mapname", sv.name, CVAR_SERVERINFO | CVAR_NOSET ); Cvar_SetValue( "windowed_mouse", 1 ); Com_Printf( "------------------------------------\n\n" ); }
/* ================ SV_SpawnServer Change the server to a new map, taking all connected clients along with it. ================ */ void SV_SpawnServer (char *server, char *spawnpoint, server_state_t serverstate, qboolean attractloop, qboolean loadgame) { int i; unsigned checksum; if (attractloop) Cvar_Set ("paused", "0"); Com_Printf ("------- Server Initialization -------\n"); Com_DPrintf ("SpawnServer: %s\n",server); if (sv.demofile) fclose (sv.demofile); svs.spawncount++; // any partially connected client will be // restarted sv.state = ss_dead; Com_SetServerState (sv.state); // wipe the entire per-level structure memset (&sv, 0, sizeof(sv)); svs.realtime = 0; sv.loadgame = loadgame; sv.attractloop = attractloop; // save name for levels that don't set message strcpy (sv.configstrings[CS_NAME], server); if (Cvar_VariableValue ("deathmatch")) { sprintf(sv.configstrings[CS_AIRACCEL], "%g", sv_airaccelerate->value); pm_airaccelerate = sv_airaccelerate->value; } else { strcpy(sv.configstrings[CS_AIRACCEL], "0"); pm_airaccelerate = 0; } SZ_Init (&sv.multicast, sv.multicast_buf, sizeof(sv.multicast_buf)); strcpy (sv.name, server); // leave slots at start for clients only for (i=0 ; i<maxclients->value ; i++) { // needs to reconnect if (svs.clients[i].state > cs_connected) svs.clients[i].state = cs_connected; svs.clients[i].lastframe = -1; } sv.time = 1000; strcpy (sv.name, server); strcpy (sv.configstrings[CS_NAME], server); if (serverstate != ss_game) { sv.models[1] = CM_LoadMap ("", false, &checksum); // no real map } else { Com_sprintf (sv.configstrings[CS_MODELS+1],sizeof(sv.configstrings[CS_MODELS+1]), "maps/%s.bsp", server); sv.models[1] = CM_LoadMap (sv.configstrings[CS_MODELS+1], false, &checksum); } Com_sprintf (sv.configstrings[CS_MAPCHECKSUM],sizeof(sv.configstrings[CS_MAPCHECKSUM]), "%i", checksum); // // clear physics interaction links // SV_ClearWorld (); for (i=1 ; i< CM_NumInlineModels() ; i++) { Com_sprintf (sv.configstrings[CS_MODELS+1+i], sizeof(sv.configstrings[CS_MODELS+1+i]), "*%i", i); sv.models[i+1] = CM_InlineModel (sv.configstrings[CS_MODELS+1+i]); } // // spawn the rest of the entities on the map // // precache and static commands can be issued during // map initialization sv.state = ss_loading; Com_SetServerState (sv.state); // load and spawn all other entities ge->SpawnEntities ( sv.name, CM_EntityString(), spawnpoint ); // run two frames to allow everything to settle ge->RunFrame (); ge->RunFrame (); // all precaches are complete sv.state = serverstate; Com_SetServerState (sv.state); // create a baseline for more efficient communications SV_CreateBaseline (); // check for a savegame SV_CheckForSavegame (); // set serverinfo variable Cvar_FullSet ("mapname", sv.name, CVAR_SERVERINFO | CVAR_NOSET); Com_Printf ("-------------------------------------\n"); }
/* ================ SV_SpawnServer Change the server to a new map, taking all connected clients along with it. ================ */ void SV_SpawnServer (char *server, char *spawnpoint, server_state_t serverstate, qboolean attractloop, qboolean loadgame) { int i; unsigned checksum; float cer_public; float cer_sv_login; float cer_sv_forcesky; float cer_guntemp_inc; float cer_guntemp_dec; float cer_elim; float cer_fraglimit; float cer_timelimit; if (attractloop) Cvar_Set("paused", "0"); Com_Printf("------- Server Initialization -------\n"); Com_DPrintf("SpawnServer: %s\n", server); if (sv.demofile) fclose(sv.demofile); svs.spawncount++; // any partially connected client will be restarted sv.state = ss_dead; Com_SetServerState(sv.state); // wipe the entire per-level structure memset(&sv, 0, sizeof(sv)); svs.realtime = 0; sv.loadgame = loadgame; sv.attractloop = attractloop; // save name for levels that don't set message strcpy(sv.configstrings[CS_NAME], server); sprintf(sv.configstrings[CS_AIRACCEL], "%g", sv_airaccelerate->value); pm_airaccelerate = sv_airaccelerate->value; SV_ReplicatePhysicsSettings(); // jitmovephysics sprintf(sv.configstrings[CS_SERVEREVERSION], "Enginever: %g Enginebuild: %d", VERSION, BUILD); SZ_Init(&sv.multicast, sv.multicast_buf, sizeof(sv.multicast_buf)); strcpy(sv.name, server); // leave slots at start for clients only for (i = 0; i < maxclients->value; i++) { // needs to reconnect if (svs.clients[i].state > cs_connected) svs.clients[i].state = cs_connected; svs.clients[i].lastframe = -1; } sv.time = 1000; strcpy(sv.name, server); strcpy(sv.configstrings[CS_NAME], server); if (serverstate != ss_game) { sv.models[1] = CM_LoadMap("", false, &checksum); // no real map } else { Com_sprintf(sv.configstrings[CS_MODELS + 1], sizeof(sv.configstrings[CS_MODELS + 1]), "maps/%s.bsp", server); sv.models[1] = CM_LoadMap(sv.configstrings[CS_MODELS + 1], false, &checksum); } Com_sprintf(sv.configstrings[CS_MAPCHECKSUM], sizeof(sv.configstrings[CS_MAPCHECKSUM]), "%i", checksum); // clear physics interaction links SV_ClearWorld(); for (i = 1; i < CM_NumInlineModels(); i++) { Com_sprintf (sv.configstrings[CS_MODELS + 1 + i], sizeof(sv.configstrings[CS_MODELS + 1 + i]), "*%i", i); sv.models[i + 1] = CM_InlineModel(sv.configstrings[CS_MODELS + 1 + i]); } // // spawn the rest of the entities on the map // // precache and static commands can be issued during // map initialization sv.state = ss_loading; Com_SetServerState(sv.state); //if(!sv.attractloop) // jitdemo -- don't spawn game stuff while demo is playing! { // load and spawn all other entities ge->SpawnEntities(sv.name, CM_EntityString(), spawnpoint); // run two frames to allow everything to settle ge->RunFrame(); ge->RunFrame(); } // all precaches are complete sv.state = serverstate; Com_SetServerState(sv.state); // create a baseline for more efficient communications SV_CreateBaseline(); // check for a savegame SV_CheckForSavegame(); // set serverinfo variable Cvar_FullSet("mapname", sv.name, CVAR_SERVERINFO | CVAR_NOSET, true); // T3RR0R15T: certificated server info (default settings atm) //cer_maxclients = Cvar_VariableValue("maxclients"); cer_elim = Cvar_VariableValue("elim"); cer_fraglimit = Cvar_VariableValue("fraglimit"); cer_timelimit = Cvar_VariableValue("timelimit"); //cer_sv_minclientbuild = Cvar_VariableValue("sv_minclientbuild"); cer_guntemp_inc = Cvar_VariableValue("guntemp_inc"); cer_guntemp_dec = Cvar_VariableValue("guntemp_dec"); cer_sv_forcesky = Cvar_VariableValue("sv_forcesky"); cer_sv_login = Cvar_VariableValue("sv_login"); cer_public = Cvar_VariableValue("public"); // Don't forget to change the SV_Certificatedinfo_f (sv_ccmds.c), if you change something here ! if (//cer_maxclients->value == 16 && (cer_elim >= 60.0f || cer_elim == 0.0f) && cer_fraglimit == 50.0f && cer_timelimit == 20.0f && //cer_sv_minclientbuild >= 28.0f && cer_guntemp_inc >= 10.5f && // 11 + some leeway cer_guntemp_dec <= 4.2f && // 4 + some leeway cer_sv_forcesky && cer_sv_login && cer_public) { Cvar_FullSet("sv_certificated", "1", CVAR_SERVERINFO | CVAR_NOSET, true); } else { Cvar_FullSet("sv_certificated", "0", CVAR_SERVERINFO | CVAR_NOSET, true); } Com_Printf("-------------------------------------\n"); }