More on matchmode..

This commit is contained in:
Daniel Simoes 2002-02-05 23:42:06 +00:00
parent 4ed445fd36
commit e146dbb353
7 changed files with 124 additions and 50 deletions

View file

@ -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

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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 );

View file

@ -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

View file

@ -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");
}
}

View file

@ -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;