/* * Cmd_Match_f */ static void Cmd_Match_f( void ) { const char *cmd; if( trap_Cmd_Argc() != 2 ) { Com_Printf( "Usage: match <option: restart|advance|status>\n" ); return; } cmd = trap_Cmd_Argv( 1 ); if( !Q_stricmp( cmd, "restart" ) ) { level.exitNow = false; level.hardReset = false; Q_strncpyz( level.forcemap, level.mapname, sizeof( level.mapname ) ); G_EndMatch(); } else if( !Q_stricmp( cmd, "advance" ) ) { level.exitNow = false; level.hardReset = true; // level.forcemap[0] = 0; G_EndMatch(); } else if( !Q_stricmp( cmd, "status" ) ) { trap_Cmd_ExecuteText( EXEC_APPEND, "status" ); } }
/* * G_Match_CheckStateAbort */ static void G_Match_CheckStateAbort( void ) { bool any = false; bool enough; if( GS_MatchState() <= MATCH_STATE_NONE || GS_MatchState() >= MATCH_STATE_POSTMATCH || level.gametype.mathAbortDisabled ) { GS_GamestatSetFlag( GAMESTAT_FLAG_WAITING, false ); return; } if( GS_TeamBasedGametype() ) { int team, emptyteams = 0; for( team = TEAM_ALPHA; team < GS_MAX_TEAMS; team++ ) { if( !teamlist[team].numplayers ) emptyteams++; else any = true; } enough = ( emptyteams == 0 ); } else { enough = ( teamlist[TEAM_PLAYERS].numplayers > 1 ); any = ( teamlist[TEAM_PLAYERS].numplayers > 0 ); } // if waiting, turn on match states when enough players joined if( GS_MatchWaiting() && enough ) { GS_GamestatSetFlag( GAMESTAT_FLAG_WAITING, false ); G_UpdatePlayersMatchMsgs(); } // turn off active match states if not enough players left else if( GS_MatchState() == MATCH_STATE_WARMUP && !enough && GS_MatchDuration() ) { GS_GamestatSetFlag( GAMESTAT_FLAG_WAITING, true ); G_UpdatePlayersMatchMsgs(); } else if( GS_MatchState() == MATCH_STATE_COUNTDOWN && !enough ) { if( any ) { G_PrintMsg( NULL, "Not enough players left. Countdown aborted.\n" ); G_CenterPrintMsg( NULL, "COUNTDOWN ABORTED" ); } G_Match_Autorecord_Cancel(); G_Match_LaunchState( MATCH_STATE_WARMUP ); GS_GamestatSetFlag( GAMESTAT_FLAG_WAITING, true ); G_UpdatePlayersMatchMsgs(); } // match running, but not enough players left else if( GS_MatchState() == MATCH_STATE_PLAYTIME && !enough ) { if( any ) { G_PrintMsg( NULL, "Not enough players left. Match aborted.\n" ); G_CenterPrintMsg( NULL, "MATCH ABORTED" ); } G_EndMatch(); } }
void G_RestartLevel( void ) { Q_strncpyz( level.forcemap, level.mapname, sizeof( level.mapname ) ); G_EndMatch(); }