From e146dbb353a09c3fd394e33fd04634aa7bcbfea8 Mon Sep 17 00:00:00 2001 From: Daniel Simoes Date: Tue, 5 Feb 2002 23:42:06 +0000 Subject: [PATCH] More on matchmode.. --- reaction/cgame/cg_local.h | 7 +++- reaction/game/g_client.c | 9 +++-- reaction/game/g_cmds.c | 9 +++-- reaction/game/g_local.h | 10 +++-- reaction/game/g_main.c | 28 +++++++------ reaction/game/g_matchmode.c | 30 +++++++------- reaction/game/g_teamplay.c | 81 ++++++++++++++++++++++++++++++++----- 7 files changed, 124 insertions(+), 50 deletions(-) diff --git a/reaction/cgame/cg_local.h b/reaction/cgame/cg_local.h index 994232bc..9059a812 100644 --- a/reaction/cgame/cg_local.h +++ b/reaction/cgame/cg_local.h @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.45 2002/02/05 23:42:06 slicer +// More on matchmode.. +// // Revision 1.44 2002/02/04 02:17:39 jbravo // scoreStartTime definition missing // @@ -1449,8 +1452,8 @@ extern cheat_cvar cheats[30]; // JBravo: To signal cgame that lca is in progress extern vmCvar_t RQ3_lca; //Slicer: matchmode team status cvars -extern vmCvar_t MM_team1; -extern vmCvar_t MM_team2; +extern vmCvar_t RQ3_team1; +extern vmCvar_t RQ3_team2; // // cg_main.c diff --git a/reaction/game/g_client.c b/reaction/game/g_client.c index 763c2f01..7da8cff4 100644 --- a/reaction/game/g_client.c +++ b/reaction/game/g_client.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.32 2002/02/05 23:41:27 slicer +// More on matchmode.. +// // Revision 1.31 2002/02/04 00:10:49 slicer // Matchmode: Teams Ready/Not Ready goes by cvar MM_team1/2 // @@ -1132,7 +1135,7 @@ void ClientBegin( int clientNum ) { //Slicer : Reseting matchmode vars //Note: Each time a player changes team, this will also be called.. - if(g_matchmode.integer ) { + if(g_RQ3_matchmode.integer ) { client->pers.captain = TEAM_FREE; client->pers.sub = TEAM_FREE; } @@ -1527,10 +1530,10 @@ void ClientDisconnect( int clientNum ) { if(g_gametype.integer) { switch(ent->client->pers.captain ) { case TEAM_RED: - trap_Cvar_Set("MM_team1", "0"); + trap_Cvar_Set("RQ3_team1", "0"); break; case TEAM_BLUE: - trap_Cvar_Set("MM_team2", "0"); + trap_Cvar_Set("RQ3_team2", "0"); break; } } diff --git a/reaction/game/g_cmds.c b/reaction/game/g_cmds.c index 23108ce2..888fac3a 100644 --- a/reaction/game/g_cmds.c +++ b/reaction/game/g_cmds.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.48 2002/02/05 23:41:27 slicer +// More on matchmode.. +// // Revision 1.47 2002/02/04 00:10:49 slicer // Matchmode: Teams Ready/Not Ready goes by cvar MM_team1/2 // @@ -709,14 +712,14 @@ void SetTeam( gentity_t *ent, char *s ) { //Slicer : Matchmode - If a captain changes team , that team is no longer ready - if(g_matchmode.integer) { + if(g_RQ3_matchmode.integer) { // client->sess.savedTeam = team; switch(ent->client->pers.captain) { case TEAM_RED: - trap_Cvar_Set("MM_team1", "0"); + trap_Cvar_Set("RQ3_team1", "0"); break; case TEAM_BLUE: - trap_Cvar_Set("MM_team2", "0"); + trap_Cvar_Set("RQ3_team2", "0"); break; } } diff --git a/reaction/game/g_local.h b/reaction/game/g_local.h index 0e19a2a4..837b691f 100644 --- a/reaction/game/g_local.h +++ b/reaction/game/g_local.h @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.43 2002/02/05 23:41:27 slicer +// More on matchmode.. +// // Revision 1.42 2002/02/04 00:10:49 slicer // Matchmode: Teams Ready/Not Ready goes by cvar MM_team1/2 // @@ -615,6 +618,7 @@ typedef struct { #endif // Slicer: Matchmode float matchTime; + qboolean inGame; // JBravo adding TP int lights_camera_action; qboolean team_round_going; @@ -1048,7 +1052,7 @@ extern vmCvar_t g_enableBreath; extern vmCvar_t g_singlePlayer; extern vmCvar_t g_proxMineTimeout; //Slicer: Matchmode -extern vmCvar_t g_matchmode; +extern vmCvar_t g_RQ3_matchmode; //Blaze: Reaction cvars extern vmCvar_t g_rxn_knifelimit; extern vmCvar_t g_RQ3_maxWeapons; @@ -1069,8 +1073,8 @@ extern vmCvar_t g_RQ3_tgren; // JBravo: no. of team grenades extern vmCvar_t g_RQ3_limchasecam; // JBravo: 0 = no chasecam limit, 1 = limited to same team. extern vmCvar_t RQ3_lca; // JBravo: cvar to signal cgame that LCA is in progress //Slicer: Team Status Cvars for MM -extern vmCvar_t MM_team1; -extern vmCvar_t MM_team2; +extern vmCvar_t RQ3_team1; +extern vmCvar_t RQ3_team2; void trap_Printf( const char *fmt ); void trap_Error( const char *fmt ); diff --git a/reaction/game/g_main.c b/reaction/game/g_main.c index 8ee708d8..4fd3842e 100644 --- a/reaction/game/g_main.c +++ b/reaction/game/g_main.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.21 2002/02/05 23:41:27 slicer +// More on matchmode.. +// // Revision 1.20 2002/02/04 00:10:49 slicer // Matchmode: Teams Ready/Not Ready goes by cvar MM_team1/2 // @@ -96,7 +99,7 @@ vmCvar_t pmove_msec; vmCvar_t g_rankings; vmCvar_t g_listEntity; //Slicer: Matchmode -vmCvar_t g_matchmode; +vmCvar_t g_RQ3_matchmode; //Blaze: Reaction cvars vmCvar_t g_rxn_knifelimit; vmCvar_t g_RQ3_maxWeapons; @@ -117,8 +120,8 @@ vmCvar_t g_RQ3_tgren; vmCvar_t g_RQ3_limchasecam; vmCvar_t RQ3_lca; //Slicer: Team Status Cvars for MM -vmCvar_t MM_team1; -vmCvar_t MM_team2; +vmCvar_t RQ3_team1; +vmCvar_t RQ3_team2; #ifdef MISSIONPACK vmCvar_t g_obeliskHealth; vmCvar_t g_obeliskRegenPeriod; @@ -219,7 +222,7 @@ static cvarTable_t gameCvarTable[] = { { &g_rankings, "g_rankings", "0", 0, 0, qfalse}, //Slicer: Matchmode - { &g_matchmode, "g_matchmode", "0", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse }, + { &g_RQ3_matchmode, "g_RQ3_matchmode", "0", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse }, //Blaze: Reaction stuff // Elder: these are explicit values set every time the game initializes { &g_RQ3_ejectBlood, "g_RQ3_ejectBlood", "0", CVAR_ARCHIVE | CVAR_NORESTART,0, qfalse}, @@ -239,8 +242,8 @@ static cvarTable_t gameCvarTable[] = { { &g_RQ3_limchasecam, "g_RQ3_limchasecam", "0", 0, 0, qtrue}, { &RQ3_lca, "RQ3_lca", "0", CVAR_SYSTEMINFO, 0, qfalse}, //Slicer: Team Status Cvars for MM - { &MM_team1, "MM_team1", "0", CVAR_SYSTEMINFO, 0, qfalse}, - { &MM_team2, "MM_team2", "0", CVAR_SYSTEMINFO, 0, qfalse} + { &RQ3_team1, "RQ3_team1", "0", CVAR_SYSTEMINFO, 0, qfalse}, + { &RQ3_team2, "RQ3_team2", "0", CVAR_SYSTEMINFO, 0, qfalse} }; @@ -591,10 +594,11 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) { level.fps = trap_Cvar_VariableIntegerValue( "sv_fps" ); } // Slicer: reset matchmode vars - if(g_matchmode.integer) { + if(g_RQ3_matchmode.integer) { level.matchTime = 0; - trap_Cvar_Set("MM_team1", "0"); - trap_Cvar_Set("MM_team2", "0"); + level.inGame = qfalse; + trap_Cvar_Set("RQ3_team1", "0"); + trap_Cvar_Set("RQ3_team2", "0"); } if ( trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { @@ -1477,8 +1481,8 @@ void CheckExitRules( void ) { // always wait for sudden death return; } - - if ( g_timelimit.integer && !level.warmupTime ) { + //Slicer: Matchmode + if ( g_timelimit.integer && !level.warmupTime && !g_RQ3_matchmode.integer) { if ( level.time - level.startTime >= g_timelimit.integer*60000 ) { trap_SendServerCommand( -1, "print \"Timelimit hit.\n\""); LogExit( "Timelimit hit." ); @@ -2013,7 +2017,7 @@ void G_RunFrame( int levelTime ) { CheckTeamRules(); } // Slicer: matchmode - if(g_matchmode.integer ) + if(g_RQ3_matchmode.integer ) MM_RunFrame(); // check team votes diff --git a/reaction/game/g_matchmode.c b/reaction/game/g_matchmode.c index ad5b2c90..4ac288c3 100644 --- a/reaction/game/g_matchmode.c +++ b/reaction/game/g_matchmode.c @@ -1,7 +1,5 @@ #include "g_local.h" -/* Slicer - This will work on all MatchMode Aspects.. -timers, votes, etc etc. Called on each Frame*/ qboolean checkCaptain(team_t team) { gentity_t *ent; int i; @@ -22,14 +20,14 @@ void MM_RunFrame(void) { switch(g_gametype.integer) { //Each Type has different ways of dealing things.. case(GT_TEAMPLAY): - if(level.team_game_going) // This will need changes.. + if(level.team_game_going && level.inGame) level.matchTime += 1/fps; break; } } void MM_Sub_f( gentity_t *ent) { - if(!g_matchmode.integer) + if(!g_RQ3_matchmode.integer) return; if(ent->client->sess.savedTeam == TEAM_SPECTATOR || ent->client->sess.savedTeam == TEAM_FREE ) { trap_SendServerCommand(ent-g_entities, "print \"You need to be on a team for that\n\""); @@ -54,20 +52,20 @@ void MM_Sub_f( gentity_t *ent) { } } void MM_Captain_f( gentity_t *ent ) { - if(!g_matchmode.integer) + if(!g_RQ3_matchmode.integer) return; if(ent->client->sess.savedTeam == TEAM_SPECTATOR || ent->client->sess.savedTeam == TEAM_FREE ) { trap_SendServerCommand(ent-g_entities, "print \"You need to be on a team for that\n\""); return; } if(ent->client->pers.captain == TEAM_RED) { - trap_Cvar_Set("MM_team1", "0"); + trap_Cvar_Set("RQ3_team1", "0"); trap_SendServerCommand( -1, va("print \"%s is no longer %s's Captain.\n\"", ent->client->pers.netname,"Red Team"));// Teams will have names in the future.. ent->client->pers.captain = TEAM_FREE; } else if(ent->client->pers.captain == TEAM_BLUE) { - trap_Cvar_Set("MM_team2", "0"); + trap_Cvar_Set("RQ3_team2", "0"); trap_SendServerCommand( -1, va("print \"%s is no longer %s's Captain.\n\"", ent->client->pers.netname,"Blue Team"));// Teams will have names in the future.. ent->client->pers.captain = TEAM_FREE; @@ -84,28 +82,28 @@ void MM_Captain_f( gentity_t *ent ) { } } void MM_Ready_f(gentity_t *ent) { - if(!g_matchmode.integer) + if(!g_RQ3_matchmode.integer) return; if(ent->client->pers.captain != TEAM_FREE) { if(ent->client->sess.savedTeam == TEAM_RED) { trap_SendServerCommand( -1, va("cp \"%s is%s Ready.\n\"", - "Red Team",MM_team1.integer == 0 ? "": "no longer")); + "Red Team",RQ3_team1.integer == 0 ? "": "no longer")); - if(MM_team1.integer) - trap_Cvar_Set("MM_Team1", "0"); + if(RQ3_team1.integer) + trap_Cvar_Set("RQ3_Team1", "0"); else - trap_Cvar_Set("MM_Team1", "1"); + trap_Cvar_Set("RQ3_Team1", "1"); } else { trap_SendServerCommand( -1, va("cp \"%s is%s Ready.\n\"", - "Blue Team",MM_team2.integer == 0 ? "": " no longer")); + "Blue Team",RQ3_team2.integer == 0 ? "": " no longer")); - if(MM_team2.integer) - trap_Cvar_Set("MM_Team2", "0"); + if(RQ3_team2.integer) + trap_Cvar_Set("RQ3_Team2", "0"); else - trap_Cvar_Set("MM_Team2", "1"); + trap_Cvar_Set("RQ3_Team2", "1"); } } diff --git a/reaction/game/g_teamplay.c b/reaction/game/g_teamplay.c index cce2e349..fa9cb82b 100644 --- a/reaction/game/g_teamplay.c +++ b/reaction/game/g_teamplay.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.11 2002/02/05 23:41:27 slicer +// More on matchmode.. +// // Revision 1.10 2002/02/05 10:04:41 jbravo // Debugging message gone and cleanup of Antistick routinr // @@ -71,10 +74,21 @@ void CheckTeamRules() level.team_round_countdown = 0; if (BothTeamsHavePlayers()) { level.team_game_going = 1; + level.inGame = qtrue; StartLCA(); } else { - trap_SendServerCommand( -1, va("cp \"Not enough players to play!\n\"")); + //Slicer: Adding Matchmode + if(g_RQ3_matchmode.integer) { + if(RQ3_team1.integer && RQ3_team2.integer) + trap_SendServerCommand( -1, "cp \"Not enough players to play!\n\""); + else + trap_SendServerCommand( -1, "cp \"Both Teams Must Be Ready!\n\""); + } + else + trap_SendServerCommand( -1, "cp \"Not enough players to play!\n\""); + MakeAllLivePlayersObservers(); + level.inGame = qfalse; } } else { if (level.team_round_countdown) @@ -95,10 +109,24 @@ void CheckTeamRules() if (!level.team_round_going) { if (g_timelimit.integer) { - if (level.time - level.startTime >= g_timelimit.integer*60000) { - trap_SendServerCommand( -1, va("cp \"Timelimit hit.\n\"")); - level.team_round_going = level.team_round_countdown = level.team_game_going = 0; - return; + //Slicer : Matchmode + if(g_RQ3_matchmode.integer) { + if(level.matchTime >= g_timelimit.integer * 60) { + level.inGame = level.team_round_going = level.team_round_countdown = + level.team_game_going = level.matchTime = 0; + trap_Cvar_Set("RQ3_Team1", "0"); + trap_Cvar_Set("RQ3_Team2", "0"); + MakeAllLivePlayersObservers (); + trap_SendServerCommand( -1, "cp \"Match is OVER !!!.\n\""); + return; + } + } + else { + if (level.time - level.startTime >= g_timelimit.integer*60000) { + trap_SendServerCommand( -1, va("cp \"Timelimit hit.\n\"")); + level.team_round_going = level.team_round_countdown = level.team_game_going = 0; + return; + } } } if (!level.team_round_countdown) { @@ -193,6 +221,11 @@ qboolean BothTeamsHavePlayers() { int onteam1 = 0, onteam2 = 0; + //Slicer: Matchmode + if(g_RQ3_matchmode.integer && (!RQ3_team1.integer || !RQ3_team2.integer)) + return 0; + + onteam1 = RQ3TeamCount( -1, TEAM_RED ); onteam2 = RQ3TeamCount( -1, TEAM_BLUE ); @@ -335,18 +368,44 @@ int WonGame(int winner) } if (g_timelimit.integer) { - if (level.time - level.startTime >= g_timelimit.integer*60000) { - trap_SendServerCommand( -1, "print \"Timelimit hit.\n\"" ); - level.team_round_going = level.team_round_countdown = level.team_game_going = 0; - return 1; + //Slicer : Matchmode + if(g_RQ3_matchmode.integer) { + if(level.matchTime >= g_timelimit.integer * 60) { + level.inGame = level.team_round_going = level.team_round_countdown = + level.team_game_going = level.matchTime = 0; + trap_Cvar_Set("RQ3_Team1", "0"); + trap_Cvar_Set("RQ3_Team2", "0"); + MakeAllLivePlayersObservers (); + trap_SendServerCommand( -1, "cp \"Match is OVER !!!.\n\""); + return; + } + } + else { + if(level.time - level.startTime >= g_timelimit.integer*60000) { + trap_SendServerCommand( -1, "print \"Timelimit hit.\n\"" ); + level.team_round_going = level.team_round_countdown = level.team_game_going = 0; + return 1; + } } } if (g_RQ3_roundlimit.integer) { if (level.teamScores[TEAM_RED] >= g_RQ3_roundlimit.integer || level.teamScores[TEAM_BLUE] >= g_RQ3_roundlimit.integer) { + //Slicer : Matchmode + if(g_RQ3_matchmode.integer) { + level.inGame = level.team_round_going = level.team_round_countdown = + level.team_game_going = level.matchTime = 0; + trap_Cvar_Set("RQ3_Team1", "0"); + trap_Cvar_Set("RQ3_Team2", "0"); + MakeAllLivePlayersObservers (); + trap_SendServerCommand( -1, "cp \"Match is OVER !!!.\n\""); + return 1; + } + else { trap_SendServerCommand( -1, "Roundlimit hit.\n\"" ); level.team_round_going = level.team_round_countdown = level.team_game_going = 0; return 1; + } } } @@ -366,7 +425,7 @@ team_t RQ3TeamCount( int ignoreClientNum, int team ) continue; } //Slicer: Matchmode - Subs don't count - if(g_matchmode.integer && level.clients[i].pers.sub != TEAM_FREE) + if(g_RQ3_matchmode.integer && level.clients[i].pers.sub != TEAM_FREE) continue; if ( level.clients[i].sess.savedTeam == team ) { count++; @@ -413,7 +472,7 @@ void SpawnPlayers() continue; //Slicer: Matchmode - Subs don't spawn - if(g_matchmode.integer && player->client->pers.sub != TEAM_FREE) + if(g_RQ3_matchmode.integer && player->client->pers.sub != TEAM_FREE) continue; client = player->client;