/* ============= CheckTournament Once a frame, check for changes in tournement player state ============= */ void CheckTournament( void ) { // check because we run 3 game frames before calling Connect and/or ClientBegin // for clients on a map_restart if ( level.numPlayingClients == 0 ) { return; } if ( g_gametype.integer == GT_TOURNAMENT ) { // pull in a spectator if needed if ( level.numPlayingClients < 2 ) { AddTournamentPlayer(); } // if we don't have two players, go back to "waiting for players" if ( level.numPlayingClients != 2 ) { if ( level.warmupTime != -1 ) { level.warmupTime = -1; trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) ); G_LogPrintf( "Warmup:\n" ); } return; } if ( level.warmupTime == 0 ) { return; } // if the warmup is changed at the console, restart it if ( g_warmup.modificationCount != level.warmupModificationCount ) { level.warmupModificationCount = g_warmup.modificationCount; level.warmupTime = -1; } // if all players have arrived, start the countdown if ( level.warmupTime < 0 ) { if ( level.numPlayingClients == 2 ) { // fudge by -1 to account for extra delays if ( g_warmup.integer > 1 ) { level.warmupTime = level.time + ( g_warmup.integer - 1 ) * 1000; } else { level.warmupTime = 0; } trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) ); } return; } // if the warmup time has counted down, restart if ( level.time > level.warmupTime ) { level.warmupTime += 10000; trap_Cvar_Set( "g_restarted", "1" ); trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" ); level.restarted = qtrue; return; } } else if ( g_gametype.integer != GT_SINGLE_PLAYER && level.warmupTime != 0 ) { int counts[TEAM_NUM_TEAMS]; qboolean notEnough = qfalse; if ( g_gametype.integer > GT_TEAM ) { counts[TEAM_BLUE] = TeamCount( -1, TEAM_BLUE ); counts[TEAM_RED] = TeamCount( -1, TEAM_RED ); if (counts[TEAM_RED] < 1 || counts[TEAM_BLUE] < 1) { notEnough = qtrue; } } else if ( level.numPlayingClients < 2 ) { notEnough = qtrue; } if ( notEnough ) { if ( level.warmupTime != -1 ) { level.warmupTime = -1; trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) ); G_LogPrintf( "Warmup:\n" ); } return; // still waiting for team members } if ( level.warmupTime == 0 ) { return; } // if the warmup is changed at the console, restart it if ( g_warmup.modificationCount != level.warmupModificationCount ) { level.warmupModificationCount = g_warmup.modificationCount; level.warmupTime = -1; } // if all players have arrived, start the countdown if ( level.warmupTime < 0 ) { // fudge by -1 to account for extra delays if ( g_warmup.integer > 1 ) { level.warmupTime = level.time + ( g_warmup.integer - 1 ) * 1000; } else { level.warmupTime = 0; } trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) ); return; } // if the warmup time has counted down, restart if ( level.time > level.warmupTime ) { level.warmupTime += 10000; trap_Cvar_Set( "g_restarted", "1" ); trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" ); level.restarted = qtrue; return; } } }
/* ============= CheckTournament Once a frame, check for changes in tournement player state ============= */ void CheckTournament() { // check because we run 3 game frames before calling Connect and/or ClientBegin // for clients on a map_restart if( theLevel.numPlayingClients_ == 0 ) return; if( g_gametype.integer == GT_TOURNAMENT ) { // pull in a spectator if needed if( theLevel.numPlayingClients_ < 2 ) AddTournamentPlayer(); // if we don't have two players, go back to "waiting for players" if( theLevel.numPlayingClients_ != 2 ) { if( theLevel.warmupTime_ != -1 ) { theLevel.warmupTime_ = -1; SV_SetConfigstring( CS_WARMUP, va("%i", theLevel.warmupTime_) ); G_LogPrintf( "Warmup:\n" ); } return; } if( theLevel.warmupTime_ == 0 ) return; // if the warmup is changed at the console, restart it if( g_warmup.modificationCount != theLevel.warmupModificationCount_ ) { theLevel.warmupModificationCount_ = g_warmup.modificationCount; theLevel.warmupTime_ = -1; } // if all players have arrived, start the countdown if( theLevel.warmupTime_ < 0 ) { if( theLevel.numPlayingClients_ == 2 ) { // fudge by -1 to account for extra delays theLevel.warmupTime_ = theLevel.time_ + ( g_warmup.integer - 1 ) * 1000; SV_SetConfigstring( CS_WARMUP, va("%i", theLevel.warmupTime_) ); } return; } // if the warmup time has counted down, restart if( theLevel.time_ > theLevel.warmupTime_ ) { theLevel.warmupTime_ += 10000; Cvar_Set( "g_restarted", "1" ); Cbuf_ExecuteText( EXEC_APPEND, "map_restart 0\n" ); theLevel.restarted_ = true; return; } } else if( g_gametype.integer != GT_SINGLE_PLAYER && g_gametype.integer != GT_MISSION_EDITOR && theLevel.warmupTime_ != 0 ) { int counts[ClientBase::TEAM_NUM_TEAMS]; bool notEnough = false; if( g_gametype.integer > GT_TEAM ) { counts[ClientBase::TEAM_BLUE] = TeamCount( -1, ClientBase::TEAM_BLUE ); counts[ClientBase::TEAM_RED] = TeamCount( -1, ClientBase::TEAM_RED ); if (counts[ClientBase::TEAM_RED] < 1 || counts[ClientBase::TEAM_BLUE] < 1) notEnough = true; } else if( theLevel.numPlayingClients_ < 2 ) notEnough = true; if( notEnough ) { if( theLevel.warmupTime_ != -1 ) { theLevel.warmupTime_ = -1; SV_SetConfigstring( CS_WARMUP, va("%i", theLevel.warmupTime_) ); G_LogPrintf( "Warmup:\n" ); } return; // still waiting for team members } if( theLevel.warmupTime_ == 0 ) return; // if the warmup is changed at the console, restart it if( g_warmup.modificationCount != theLevel.warmupModificationCount_ ) { theLevel.warmupModificationCount_ = g_warmup.modificationCount; theLevel.warmupTime_ = -1; } // if all players have arrived, start the countdown if( theLevel.warmupTime_ < 0 ) { // fudge by -1 to account for extra delays theLevel.warmupTime_ = theLevel.time_ + ( g_warmup.integer - 1 ) * 1000; SV_SetConfigstring( CS_WARMUP, va("%i", theLevel.warmupTime_) ); return; } // if the warmup time has counted down, restart if( theLevel.time_ > theLevel.warmupTime_ ) { theLevel.warmupTime_ += 10000; Cvar_Set( "g_restarted", "1" ); Cbuf_ExecuteText( EXEC_APPEND, "map_restart 0\n" ); theLevel.restarted_ = true; return; } } }