mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2025-02-01 22:30:53 +00:00
More on matchmode..
This commit is contained in:
parent
4ed445fd36
commit
e146dbb353
7 changed files with 124 additions and 50 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue