From 61753dee3b102038fd31659898156ca8b7a5893f Mon Sep 17 00:00:00 2001 From: Daniel Simoes Date: Sun, 12 May 2002 12:15:05 +0000 Subject: [PATCH] Added Referee command for captains --- reaction/cgame/cg_consolecmds.c | 4 ++ reaction/game/g_cmds.c | 5 ++ reaction/game/g_main.c | 4 ++ reaction/game/g_matchmode.c | 82 ++++++++++++++++++++++++++++++--- reaction/game/g_matchmode.h | 12 +++-- 5 files changed, 95 insertions(+), 12 deletions(-) diff --git a/reaction/cgame/cg_consolecmds.c b/reaction/cgame/cg_consolecmds.c index 8780c3be..409cbfd3 100644 --- a/reaction/cgame/cg_consolecmds.c +++ b/reaction/cgame/cg_consolecmds.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.47 2002/05/12 12:14:14 slicer +// Added Referee command for captains +// // Revision 1.46 2002/05/10 04:06:27 jbravo // Added Ignore // @@ -996,6 +999,7 @@ void CG_InitConsoleCommands( void ) { trap_AddCommand ("sub"); trap_AddCommand ("teamname"); trap_AddCommand ("teammodel"); + trap_AddCommand ("referee"); // aasimon: refeere mm trap_AddCommand ("reflogin"); trap_AddCommand ("ref"); diff --git a/reaction/game/g_cmds.c b/reaction/game/g_cmds.c index 3fc29888..6a9bfba0 100644 --- a/reaction/game/g_cmds.c +++ b/reaction/game/g_cmds.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.108 2002/05/12 12:15:05 slicer +// Added Referee command for captains +// // Revision 1.107 2002/05/11 19:52:09 slicer // Added sub and captain to the scoreboard function // @@ -2887,6 +2890,8 @@ void ClientCommand( int clientNum ) { MM_TeamName_f(ent); else if (Q_stricmp (cmd, "teammodel") == 0) MM_TeamModel_f(ent); + else if (Q_stricmp (cmd, "referee") == 0) + MM_Referee_f(ent); // aasimon: referee for MM else if (Q_stricmp (cmd, "reflogin") == 0) Ref_Auth ( ent ); diff --git a/reaction/game/g_main.c b/reaction/game/g_main.c index 2ab6c83b..58ed1878 100644 --- a/reaction/game/g_main.c +++ b/reaction/game/g_main.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.58 2002/05/12 12:15:05 slicer +// Added Referee command for captains +// // Revision 1.57 2002/05/12 00:07:47 slicer // Added Normal Radio Flood Protection // @@ -891,6 +894,7 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) { level.inGame = qfalse; trap_Cvar_Set("g_RQ3_team1ready", "0"); trap_Cvar_Set("g_RQ3_team2ready", "0"); + refVotes[0] = refVotes[1] = -1; } if ( trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { diff --git a/reaction/game/g_matchmode.c b/reaction/game/g_matchmode.c index 0dc5d3f0..6821956c 100644 --- a/reaction/game/g_matchmode.c +++ b/reaction/game/g_matchmode.c @@ -2,6 +2,22 @@ // JBravo: for warnings int ClientNumberFromString(gentity_t *to, char *s); +int refVotes[2]; // refVotes[0] is the clientnumber red team voted + // refVotes[1] is the clientnumber blue team voted + +gentity_t* getEntByName ( char *name ){ + gentity_t *ent; + int i; + for (i = 0; i < level.maxclients; i++) { + ent = &g_entities[i]; + if (!ent->inuse) + continue; + if(!Q_stricmp(ent->client->pers.netname,name)) + return ent; + } + return NULL; +} + qboolean checkCaptain (team_t team) { gentity_t *ent; int i; @@ -212,9 +228,61 @@ void MM_TeamName_f (gentity_t *ent) { // aasimon: Referee Functions Definition, with some aid functions first // +void checkRefVotes() { + gentity_t *ent; + char nr[2]; + G_Printf("Vote Red: %i Vote Blue %i \n",refVotes[0],refVotes[1]); + if(refVotes[0] == refVotes[1]) { + ent = g_entities + refVotes[0]; + Com_sprintf(nr, sizeof(nr), "%i", refVotes[0]); + trap_Cvar_Set("g_RQ3_RefID", nr); + trap_SendServerCommand( -1, va("cp \"%s is the new Referee.\n\"",ent->client->pers.netname)); + refVotes[0] = refVotes[1] = -1; + } +} -// aasimon: perhaps in another place...but lets see +/* Slicer - MM_Referee_f +For captains to vote a referee*/ +void MM_Referee_f(gentity_t *ent) { + gentity_t *ref; + char *buff; + team_t captain; + + if(!g_RQ3_matchmode.integer) + return; + captain = ent->client->sess.captain; + + if ( !g_RQ3_AllowRef.integer ){ + trap_SendServerCommand( ent-g_entities, "print \"No Referee Allowed on this server\n\"" ); + return; + } + if(trap_Argc()<2) { + if(Ref_Exists()) { + ref = g_entities + g_RQ3_RefID.integer; + trap_SendServerCommand(ent-g_entities,va("print \"Current Referee: %s\n\"",ref->client->pers.netname)); + } + else + trap_SendServerCommand( ent-g_entities, "print \"No Referee currently assigned, use referee to assign\n\"" ); + return; + } + + if(captain != TEAM_FREE) { + buff = ConcatArgs( 1 ); + if((ref = getEntByName(buff))!=NULL) { + refVotes[captain - 1] = ref-g_entities; + trap_SendServerCommand(-1,va("print \"%s has voted %s for referee\n\"",ent->client->pers.netname,ref->client->pers.netname )); + checkRefVotes(); + } + else { + trap_SendServerCommand( ent-g_entities, "print \"Invalid Player Name\n\"" ); + return; + } + } + else + trap_SendServerCommand( ent-g_entities, "print \"You need to be a captain to assign a referee\n\"" ); + +} void MM_ClearScores (void) { gentity_t *ent; int i; @@ -227,11 +295,11 @@ void MM_ClearScores (void) { // aasimon: Clear only PERS info. Lata clear all REC information. See if more info is needed to be clean ent->client->ps.persistant[PERS_SCORE] = 0; ent->client->ps.persistant[PERS_KILLED] = 0; - - if (g_gametype.integer == GT_TEAMPLAY) { - level.teamScores[TEAM_RED] = 0; - level.teamScores[TEAM_BLUE] = 0; - } + ent->client->ps.persistant[PERS_DAMAGE_DELT] = 0; + } + if (g_gametype.integer == GT_TEAMPLAY) { + level.teamScores[TEAM_RED] = 0; + level.teamScores[TEAM_BLUE] = 0; } } @@ -313,7 +381,7 @@ void Ref_Command (gentity_t *ent) { // Theres a clean way to do this - add more help here (this is for example only) trap_SendServerCommand(ent-g_entities, "print \"kick player\n\""); trap_SendServerCommand(ent-g_entities, "print \"map_restart\n\""); - trap_SendServerCommand(ent-g_entities, "print \"clear_scores\n\""); + trap_SendServerCommand(ent-g_entities, "print \"clearscores\n\""); trap_SendServerCommand(ent-g_entities, "print \"pause\n\""); return; } else if (Q_stricmp (com, "kick") == 0) { // kick kick kick diff --git a/reaction/game/g_matchmode.h b/reaction/game/g_matchmode.h index 5a5c5f24..70c640f6 100644 --- a/reaction/game/g_matchmode.h +++ b/reaction/game/g_matchmode.h @@ -1,14 +1,16 @@ void MM_RunFrame( void ); -void MM_Captain_f(gentity_t *ent ); -void MM_Sub_f( gentity_t *ent); -void MM_Ready_f(gentity_t *ent); +void MM_Captain_f(gentity_t * ); +void MM_Sub_f( gentity_t *); +void MM_Ready_f(gentity_t *); void MM_ClearScores( void ); -void MM_TeamName_f(gentity_t *ent); -void MM_TeamModel_f(gentity_t *ent); +void MM_TeamName_f(gentity_t *); +void MM_TeamModel_f(gentity_t *); +void MM_Referee_f(gentity_t *); // aasimon: Declarations for Ref system qboolean Ref_Exists( void ); qboolean Ref_Auth( gentity_t *); // No need to return a boolean in this context void Ref_Command ( gentity_t * ); void Ref_Resign ( gentity_t * ); +extern int refVotes[2]; \ No newline at end of file