mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2025-03-13 22:22:13 +00:00
New MM features and bug fixes
This commit is contained in:
parent
4449216cdb
commit
eae88c0b04
8 changed files with 227 additions and 32 deletions
Binary file not shown.
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.118 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
// Revision 1.117 2002/09/29 16:06:44 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -1871,6 +1874,8 @@ void ClientDisconnect(int clientNum)
|
|||
}
|
||||
//Slicer: matchmode
|
||||
if (g_RQ3_matchmode.integer) {
|
||||
if(ent->client->sess.referee)
|
||||
--level.refAmmount;
|
||||
switch (ent->client->sess.captain) {
|
||||
case TEAM_RED:
|
||||
level.team1ready = qfalse;
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.171 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
// Revision 1.170 2002/09/30 01:32:30 jbravo
|
||||
// Fixing the vote and callvote cmd's so dead players in CTB can use them.
|
||||
//
|
||||
|
@ -502,10 +505,10 @@ void DeathmatchScoreboardMessage(gentity_t * ent)
|
|||
stringlength += j;
|
||||
}
|
||||
|
||||
trap_SendServerCommand(ent - g_entities, va("scores %i %i %i %i %i %i%s", i,
|
||||
trap_SendServerCommand(ent - g_entities, va("scores %i %i %i %i %i %i %i%s", i,
|
||||
level.teamScores[TEAM_RED], level.teamScores[TEAM_BLUE],
|
||||
level.team1ready, level.team2ready,
|
||||
(int) level.matchTime, string));
|
||||
(int) level.matchTime, level.refAmmount ? level.refStatus : -1,string));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1050,6 +1053,9 @@ void SetTeam(gentity_t * ent, char *s)
|
|||
//
|
||||
// execute the team change
|
||||
//
|
||||
//sLiCeR: Matchmode referee hear all protection
|
||||
if(g_gametype.integer == GT_TEAMPLAY && (oldTeam == TEAM_FREE || oldTeam == TEAM_SPECTATOR) && (team == TEAM_RED || team == TEAM_BLUE))
|
||||
ent->client->sess.refHear = qfalse;
|
||||
|
||||
// if the player was dead leave the body
|
||||
if (client->ps.stats[STAT_HEALTH] <= 0) {
|
||||
|
@ -1375,7 +1381,7 @@ static void G_SayTo(gentity_t * ent, gentity_t * other, int mode, int color, con
|
|||
if (other->client->pers.connected != CON_CONNECTED) {
|
||||
return;
|
||||
}
|
||||
if (mode == SAY_TEAM && !OnSameTeam(ent, other)) {
|
||||
if (mode == SAY_TEAM && !OnSameTeam(ent, other) && !ent->client->sess.refHear) { //Slicer: This makes referees read say_team stuff if Hear all
|
||||
return;
|
||||
}
|
||||
// no chatting to players in tournements
|
||||
|
@ -1453,10 +1459,10 @@ void G_Say(gentity_t * ent, gentity_t * target, int mode, const char *chatText)
|
|||
Q_COLOR_ESCAPE, COLOR_WHITE);
|
||||
else {
|
||||
if (ent->client->sess.savedTeam == TEAM_SPECTATOR)
|
||||
Com_sprintf(name, sizeof(name), "[SPECTATOR] %s%c%c" EC ": ", ent->client->pers.netname,
|
||||
Com_sprintf(name, sizeof(name), "%s %s%c%c" EC ": ",ent->client->sess.referee ? "[REFEREE]":"[SPECTATOR]", ent->client->pers.netname,
|
||||
Q_COLOR_ESCAPE, COLOR_WHITE);
|
||||
else
|
||||
Com_sprintf(name, sizeof(name), "[DEAD] %s%c%c" EC ": ", ent->client->pers.netname,
|
||||
Com_sprintf(name, sizeof(name), "%s %s%c%c" EC ": ",ent->client->sess.referee ? "[REFEREE]":"[DEAD]", ent->client->pers.netname,
|
||||
Q_COLOR_ESCAPE, COLOR_WHITE);
|
||||
}
|
||||
} else {
|
||||
|
@ -1472,7 +1478,7 @@ void G_Say(gentity_t * ent, gentity_t * target, int mode, const char *chatText)
|
|||
ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE);
|
||||
else {
|
||||
if (ent->client->sess.savedTeam == TEAM_SPECTATOR)
|
||||
Com_sprintf(name, sizeof(name), EC "[SPECTATOR] (%s%c%c" EC ")" EC ": ",
|
||||
Com_sprintf(name, sizeof(name), EC "%s (%s%c%c" EC ")" EC ": ",ent->client->sess.referee ? "[REFEREE]":"[SPECTATOR]",
|
||||
ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE);
|
||||
else
|
||||
Com_sprintf(name, sizeof(name), EC "[DEAD] (%s%c%c" EC ")" EC ": ",
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.126 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
// Revision 1.125 2002/09/29 16:06:44 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -550,6 +553,8 @@ typedef gentity_t *ignorelist_t[MAXIGNORE];
|
|||
// MUST be dealt with in G_InitSessionData() / G_ReadSessionData() / G_WriteSessionData()
|
||||
typedef struct {
|
||||
//Slicer Matchmode
|
||||
qboolean refHear;
|
||||
int refReady;
|
||||
int referee;
|
||||
team_t captain;
|
||||
team_t sub;
|
||||
|
@ -844,6 +849,8 @@ typedef struct {
|
|||
gentity_t *bodyQue[BODY_QUEUE_SIZE];
|
||||
// Slicer: Matchmode
|
||||
float matchTime;
|
||||
int refStatus;
|
||||
int refAmmount;
|
||||
qboolean team1ready;
|
||||
qboolean team2ready;
|
||||
qboolean inGame;
|
||||
|
@ -1377,7 +1384,7 @@ extern vmCvar_t g_RQ3_ctb_respawndelay; // JBravo: delay in seconds for ctb resp
|
|||
//extern vmCvar_t g_RQ3_team2ready;
|
||||
//aasimon: Ref System for MM
|
||||
extern vmCvar_t g_RQ3_AllowRef;
|
||||
extern vmCvar_t g_RQ3_RefPass;
|
||||
extern vmCvar_t g_RQ3_RefPassword;
|
||||
//extern vmCvar_t g_RQ3_RefID;
|
||||
extern vmCvar_t g_RQ3_maxRefs;
|
||||
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.121 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
// Revision 1.120 2002/09/29 16:06:44 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -445,7 +448,7 @@ vmCvar_t g_RQ3_ctb_respawndelay;
|
|||
|
||||
// aasimon: Ref System for MM
|
||||
vmCvar_t g_RQ3_AllowRef;
|
||||
vmCvar_t g_RQ3_RefPass;
|
||||
vmCvar_t g_RQ3_RefPassword;
|
||||
vmCvar_t g_RQ3_maxRefs;
|
||||
|
||||
// aasimon: ini stuff
|
||||
|
@ -591,7 +594,7 @@ static cvarTable_t gameCvarTable[] = {
|
|||
//{ &g_RQ3_team2ready, "g_RQ3_team2ready", "0", 0, 0, qfalse},
|
||||
// aasimon: Ref system for MM,added infor for referee id (clientnumber)
|
||||
{&g_RQ3_AllowRef, "g_RQ3_AllowRef", "0", CVAR_SERVERINFO, 0, qtrue},
|
||||
{&g_RQ3_RefPass, "g_RQ3_RefPassword", "", CVAR_ARCHIVE, 0, qfalse},
|
||||
{&g_RQ3_RefPassword, "g_RQ3_RefPasswordword", "", CVAR_ARCHIVE, 0, qfalse},
|
||||
//{&g_RQ3_RefID, "g_RQ3_RefID", "-1", CVAR_SYSTEMINFO | CVAR_ROM, 0, qfalse},
|
||||
{&g_RQ3_maxRefs, "g_RQ3_maxRefs", "1", CVAR_SERVERINFO, 0, qtrue},
|
||||
// aasimon: stuff for da ini file
|
||||
|
@ -952,6 +955,7 @@ void G_InitGame(int levelTime, int randomSeed, int restart)
|
|||
int i;
|
||||
char model[MAX_STRING_CHARS], model2[MAX_STRING_CHARS];
|
||||
char *s;
|
||||
gentity_t *ent;
|
||||
|
||||
G_Printf("------- Game Initialization -------\n");
|
||||
G_Printf("gamename: %s\n", GAMEVERSION);
|
||||
|
@ -1101,6 +1105,15 @@ void G_InitGame(int levelTime, int randomSeed, int restart)
|
|||
}
|
||||
// Slicer: reset matchmode vars
|
||||
if (g_RQ3_matchmode.integer && (g_gametype.integer == GT_TEAMPLAY || g_gametype.integer == GT_CTF)) {
|
||||
level.refAmmount = 0;
|
||||
for (i = 0; i < level.maxclients; i++) {
|
||||
ent = &g_entities[i];
|
||||
if (!ent || !ent->inuse)
|
||||
continue;
|
||||
if(ent->client->sess.referee)
|
||||
++level.refAmmount ;
|
||||
}
|
||||
level.refStatus = 0;
|
||||
level.matchTime = 0;
|
||||
level.inGame = qfalse;
|
||||
level.team1ready = qfalse;
|
||||
|
|
|
@ -223,6 +223,7 @@ void MM_TeamModel_f(gentity_t * ent)
|
|||
if (level.team_game_going || level.team_round_going) {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"You cannot change your team's model while playing or ready.\n\""));
|
||||
return;
|
||||
}
|
||||
|
||||
trap_Argv(1, buff, sizeof(buff));
|
||||
|
@ -271,8 +272,8 @@ void MM_TeamName_f(gentity_t * ent)
|
|||
} else {
|
||||
|
||||
if((g_RQ3_mmflags.integer & MMF_TEAMNAME) != MMF_TEAMNAME) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR "This server does not allow you to change team name\n\""));
|
||||
return;
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR "This server does not allow you to change team name\n\""));
|
||||
return;
|
||||
}
|
||||
if (ent->client->sess.captain == TEAM_FREE) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"You need to be a captain for that\n\""));
|
||||
|
@ -282,6 +283,7 @@ void MM_TeamName_f(gentity_t * ent)
|
|||
if (level.team_game_going || level.team_round_going) {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"You cannot change your team's name while playing or ready.\n\""));
|
||||
return;
|
||||
}
|
||||
|
||||
buff = ConcatArgs(1);
|
||||
|
@ -438,23 +440,10 @@ qboolean Ref_Auth(gentity_t * ent)
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
if (Q_stricmp(g_RQ3_RefPass.string, "") == 0) {
|
||||
if (Q_stricmp(g_RQ3_RefPassword.string, "") == 0) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"No Referee Password Set on this server\n\""));
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/* if (Ref_Exists()) {
|
||||
// One ref per match
|
||||
cn = ent - g_entities;
|
||||
|
||||
if (cn == g_RQ3_RefID.integer) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"You are already the referee\n\""));
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"Referee already set on this server\n\""));
|
||||
return qfalse;
|
||||
}*/
|
||||
if(getNumberOfRefs() == g_RQ3_maxRefs.integer) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"Too many referees already on the server\n\""));
|
||||
return qfalse;
|
||||
|
@ -473,14 +462,15 @@ qboolean Ref_Auth(gentity_t * ent)
|
|||
|
||||
// Does a simple plain text auth
|
||||
|
||||
if (Q_stricmp(pass, g_RQ3_RefPass.string) == 0) {
|
||||
if (Q_stricmp(pass, g_RQ3_RefPassword.string) == 0) {
|
||||
ent->client->sess.referee = 1;
|
||||
++level.refAmmount;
|
||||
trap_SendServerCommand(-1,
|
||||
va("print \"%s "MM_OK_COLOR"is now a Referee\n\"",
|
||||
ent->client->pers.netname));
|
||||
return qtrue;
|
||||
}
|
||||
/* if (Q_stricmp(pass, g_RQ3_RefPass.string) == 0) {
|
||||
/* if (Q_stricmp(pass, g_RQ3_RefPassword.string) == 0) {
|
||||
cn = ent - g_entities;
|
||||
Com_sprintf(teste, 3, "%i", cn);
|
||||
trap_Cvar_Set("g_RQ3_RefID", teste);
|
||||
|
@ -512,6 +502,22 @@ void MM_ResetMatch() {
|
|||
level.matchTime = 0;
|
||||
}
|
||||
|
||||
void refReadyStatus() {
|
||||
gentity_t *ent;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < level.maxclients; i++) {
|
||||
ent = &g_entities[i];
|
||||
if (!ent || !ent->inuse)
|
||||
continue;
|
||||
if(ent->client->sess.refReady) {
|
||||
level.refStatus = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// aasimon: processes comands sent from the referee
|
||||
//
|
||||
|
@ -520,20 +526,26 @@ void Ref_Command(gentity_t * ent)
|
|||
char com[MAX_TOKEN_CHARS];
|
||||
char param[MAX_TOKEN_CHARS];
|
||||
char arg2[MAX_STRING_CHARS];
|
||||
int cn, i;
|
||||
int cn, i,args;
|
||||
gentity_t *p;
|
||||
char *buff;
|
||||
|
||||
args = trap_Argc();
|
||||
//cn = ent - g_entities;
|
||||
if (!ent->client->sess.referee) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"You are not a referee\n\""));
|
||||
return;
|
||||
}
|
||||
if(args < 2) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"You need to specify a command. Use \"ref help\" to list available commands\n\""));
|
||||
return;
|
||||
}
|
||||
|
||||
trap_Argv(1, com, sizeof(com));
|
||||
|
||||
// nice strcmp for each comand (borring, wheres my beer?)
|
||||
if (Q_stricmp(com, "help") == 0) {
|
||||
// Theres a clean way to do this - add more help here (this is for example only)
|
||||
/* // Theres a clean way to do this - add more help here (this is for example only)
|
||||
trap_SendServerCommand(ent - g_entities, "print \"kick <player number>\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"map_restart\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"clearscores\n\"");
|
||||
|
@ -543,6 +555,147 @@ void Ref_Command(gentity_t * ent)
|
|||
trap_SendServerCommand(ent - g_entities, "print \"resetMatch\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print\"map <map_to_go>\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print\"say <text>\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"hearAll\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"ready\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"forceReady\n\"");*/
|
||||
trap_SendServerCommand(ent - g_entities, "print \"kick <player number>\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"map_restart\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"clearscores\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"pause\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"cyclemap\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print\"lockSettings\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"resetMatch\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print\"map <map_to_go>\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print\"say <text>\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"hearAll\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"ready\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"teamReady <team1/team2>\n\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"teamName <team1/team2> <name>\t\t\"");
|
||||
trap_SendServerCommand(ent - g_entities, "print \"teamModel <team1/team2> <model>\t\t\"");
|
||||
return;
|
||||
} else if (Q_stricmp(com, "teamModel") == 0) {
|
||||
if (args < 3) {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"Please specify which Team and Model Name: ref <team1 / team2> <model>\n\""));
|
||||
return;
|
||||
}
|
||||
if (level.team_game_going || level.team_round_going) {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"You cannot change Models while game is occuring.\n\""));
|
||||
return;
|
||||
}
|
||||
trap_Argv(2, com, sizeof(com));
|
||||
if (Q_stricmp(com, "team1") == 0) {
|
||||
buff = ConcatArgs(2);
|
||||
|
||||
trap_Cvar_Set("g_RQ3_team1model", buff);
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"New Team1 Model: %s\n\"",g_RQ3_team1model.string));
|
||||
}
|
||||
else if (Q_stricmp(com, "team2") == 0) {
|
||||
buff = ConcatArgs(2);
|
||||
|
||||
trap_Cvar_Set("g_RQ3_team2model", buff);
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"New Team2 Model: %s\n\"",g_RQ3_team2model.string));
|
||||
}
|
||||
else {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"Invalid Team. Available teams are: \"team1\" or \"team2\"\n\""));
|
||||
}
|
||||
return;
|
||||
} else if (Q_stricmp(com, "teamName") == 0) {
|
||||
if (args < 3) {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"Please specify which Team and Name: ref <team1 / team2> <name>\n\""));
|
||||
return;
|
||||
}
|
||||
trap_Argv(2, com, sizeof(com));
|
||||
if (Q_stricmp(com, "team1") == 0) {
|
||||
buff = ConcatArgs(2);
|
||||
|
||||
if (strlen(buff) > TEAM_NAME_SIZE)
|
||||
buff[TEAM_NAME_SIZE] = 0;
|
||||
|
||||
trap_Cvar_Set("g_RQ3_team1name", buff);
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"New Team1 Name: %s\n\"",g_RQ3_team1name.string));
|
||||
}
|
||||
else if (Q_stricmp(com, "team2") == 0) {
|
||||
buff = ConcatArgs(2);
|
||||
|
||||
if (strlen(buff) > TEAM_NAME_SIZE)
|
||||
buff[TEAM_NAME_SIZE] = 0;
|
||||
|
||||
trap_Cvar_Set("g_RQ3_team2name", buff);
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"New Team2 Name: %s\n\"",g_RQ3_team2name.string));
|
||||
}
|
||||
else {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"Invalid Team. Available teams are: \"team1\" or \"team2\"\n\""));
|
||||
}
|
||||
return;
|
||||
} else if (Q_stricmp(com, "teamReady") == 0) {
|
||||
if (args < 2) {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"Please specify which team: ref <team1 / team2>\n\""));
|
||||
return;
|
||||
}
|
||||
trap_Argv(2, com, sizeof(com));
|
||||
if (Q_stricmp(com, "team1") == 0) {
|
||||
trap_SendServerCommand(-1, va("cp \"%s forced %s to be%s Ready.\n\"",
|
||||
ent->client->pers.netname,g_RQ3_team1name.string, level.team1ready ? " no longer" : ""));
|
||||
|
||||
if (level.team1ready)
|
||||
level.team1ready = qfalse;
|
||||
else
|
||||
level.team1ready = qtrue;
|
||||
}
|
||||
else if (Q_stricmp(com, "team2") == 0) {
|
||||
trap_SendServerCommand(-1, va("cp \"%s forced %s to be%s Ready.\n\"",
|
||||
ent->client->pers.netname,g_RQ3_team2name.string, level.team2ready ? " no longer" : ""));
|
||||
|
||||
if (level.team2ready)
|
||||
level.team2ready = qfalse;
|
||||
else
|
||||
level.team2ready = qtrue;
|
||||
}
|
||||
else {
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"Invalid Team. Available teams are: \"team1\" or \"team2\"\n\""));
|
||||
}
|
||||
return;
|
||||
} else if (Q_stricmp(com, "ready") == 0) {
|
||||
if(ent->client->sess.refReady) {
|
||||
ent->client->sess.refReady = 0;
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"You are no longer Ready\n\""));
|
||||
}
|
||||
else {
|
||||
ent->client->sess.refReady = 1;
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"You are now Ready\n\""));
|
||||
}
|
||||
refReadyStatus();
|
||||
return;
|
||||
} else if (Q_stricmp(com, "hearall") == 0) {
|
||||
if(ent->client->sess.refHear) {
|
||||
ent->client->sess.refHear = qfalse;
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"Hear All Disabled\n\""));
|
||||
}
|
||||
else{
|
||||
if(ent->client->sess.savedTeam != TEAM_SPECTATOR) {
|
||||
ent->client->sess.refHear = qtrue;
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_OK_COLOR"Hear All Enabled\n\""));
|
||||
}
|
||||
else
|
||||
trap_SendServerCommand(ent - g_entities,
|
||||
va("print \""MM_DENY_COLOR"You cannot use hear all when on a team\n\""));
|
||||
|
||||
}
|
||||
return;
|
||||
} else if (Q_stricmp(com, "resetMatch") == 0) {
|
||||
MM_ResetMatch();
|
||||
|
@ -649,6 +802,7 @@ void Ref_Command(gentity_t * ent)
|
|||
void Ref_Resign(gentity_t * ent)
|
||||
{
|
||||
if (ent->client->sess.referee) {
|
||||
--level.refAmmount;
|
||||
ent->client->sess.referee = 0;
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_OK_COLOR"You resign from your referee status\n\""));
|
||||
}
|
||||
|
@ -686,7 +840,7 @@ void MM_Settings_f(gentity_t * ent) {
|
|||
return;
|
||||
}
|
||||
|
||||
if ((g_RQ3_mmflags.integer & MMF_SETTINGS) != MMF_SETTINGS) {
|
||||
if ((g_RQ3_mmflags.integer & MMF_SETTINGS) != MMF_SETTINGS && !ent->client->sess.referee) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR "This server does not allow you to change settings\n\""));
|
||||
return;
|
||||
}
|
||||
|
@ -700,7 +854,7 @@ void MM_Settings_f(gentity_t * ent) {
|
|||
return;
|
||||
}
|
||||
//Referee locked settings
|
||||
if (level.settingsLocked) {
|
||||
if (level.settingsLocked && !ent->client->sess.referee) {
|
||||
trap_SendServerCommand(ent - g_entities, va("print \""MM_DENY_COLOR"Settings are currently locked, only Referee can unlock them\n\""));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.22 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
// Revision 1.21 2002/09/29 16:06:45 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -189,6 +192,8 @@ void G_InitSessionData(gclient_t * client, char *userinfo)
|
|||
sess->captain = TEAM_FREE;
|
||||
sess->sub = TEAM_FREE;
|
||||
sess->referee = 0;
|
||||
sess->refHear = qfalse;
|
||||
sess->refReady = 0;
|
||||
|
||||
// JBravo: adding PERS_SAVEDTEAM
|
||||
client->ps.persistant[PERS_SAVEDTEAM] = TEAM_SPECTATOR;
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.140 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
// Revision 1.139 2002/09/29 16:06:45 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -527,6 +530,8 @@ void CheckTeamRules()
|
|||
trap_SendServerCommand(-1, "cp \"Referee has paused the Game!\n\"");
|
||||
else if (level.team1ready && level.team2ready)
|
||||
trap_SendServerCommand(-1, "cp \"Not enough players to play!\n\"");
|
||||
else if (level.refAmmount && !level.refStatus)
|
||||
trap_SendServerCommand(-1, "cp \"At least one Referee needs to be ready!\n\"");
|
||||
else
|
||||
trap_SendServerCommand(-1, "cp \"Both Teams Must Be Ready!\n\"");
|
||||
} else
|
||||
|
@ -653,7 +658,7 @@ qboolean BothTeamsHavePlayers()
|
|||
int onteam1 = 0, onteam2 = 0;
|
||||
|
||||
//Slicer: Matchmode
|
||||
if (g_RQ3_matchmode.integer && (!level.team1ready || !level.team2ready || level.paused))
|
||||
if (g_RQ3_matchmode.integer && ((level.refAmmount && !level.refStatus) || !level.team1ready || !level.team2ready || level.paused))
|
||||
return 0;
|
||||
|
||||
onteam1 = RQ3TeamCount(-1, TEAM_RED);
|
||||
|
|
Loading…
Reference in a new issue