From f365dbc10da16611cd43fbca234a80f5e8e39b23 Mon Sep 17 00:00:00 2001 From: kai Date: Tue, 30 Jun 2020 16:42:44 +0100 Subject: implement g_preventRagequit --- src/game/g_admin.c | 9 +++++++++ src/game/g_cmds.c | 11 +++++++++++ src/game/g_local.h | 1 + src/game/g_main.c | 2 ++ 4 files changed, 23 insertions(+) diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 91189eb..e79ced6 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -6797,6 +6797,15 @@ qboolean G_admin_putmespec( gentity_t *ent, int skiparg ) ADMP("!specme: disabled when game is paused\n"); return qfalse; } + + if( g_preventRagequit.integer > 0 + && ( ( ent->client->pers.teamSelection == PTE_HUMANS && level.numHumanSpawns == 0 ) + || ( ent->client->pers.teamSelection == PTE_ALIENS && level.numAlienSpawns == 0 ) ) ) + { + AP( va("print \"^3!specme: ^7%s^7 must gather their party before venturing forth from this place. " + "^3(ragequit not allowed!)\n\"", ent->client->pers.netname ) ); + return qfalse; + } if(ent->client->pers.teamSelection == PTE_NONE) return qfalse; diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index f033cc4..5810f56 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -805,7 +805,18 @@ void Cmd_Team_f( gentity_t *ent ) } if( !Q_stricmpn( s, "spec", 4 ) ) + { + if( g_preventRagequit.integer > 0 + && ( ( ent->client->pers.teamSelection == PTE_HUMANS && level.numHumanSpawns == 0 ) + || ( ent->client->pers.teamSelection == PTE_ALIENS && level.numAlienSpawns == 0 ) ) ) + { + AP( va("print \"^3!specme: ^7%s^7 must gather their party before venturing forth from this place. " + "^3(ragequit not allowed!)\n\"", ent->client->pers.netname ) ); + return; + } team = PTE_NONE; + } + else if( !force && ent->client->pers.teamSelection == PTE_NONE && g_maxGameClients.integer && level.numPlayingClients >= g_maxGameClients.integer ) diff --git a/src/game/g_local.h b/src/game/g_local.h index 7c69539..ff8cde5 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -1457,6 +1457,7 @@ extern vmCvar_t g_minDeconAffectsMark; extern vmCvar_t g_forceAutoSelect; extern vmCvar_t g_minLevelToSpecMM1; extern vmCvar_t g_banNotice; +extern vmCvar_t g_preventRagequit; extern vmCvar_t g_devmapKillerHP; extern vmCvar_t g_killerHP; diff --git a/src/game/g_main.c b/src/game/g_main.c index 742854c..2dafaff 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -181,6 +181,7 @@ vmCvar_t g_minLevelToJoinTeam; vmCvar_t g_minDeconLevel; vmCvar_t g_minDeconAffectsMark; vmCvar_t g_forceAutoSelect; +vmCvar_t g_preventRagequit; vmCvar_t g_privateMessages; vmCvar_t g_fullIgnore; @@ -428,6 +429,7 @@ static cvarTable_t gameCvarTable[ ] = { &g_minDeconAffectsMark, "g_minDeconAffectsMark", "0", CVAR_ARCHIVE, 0, qfalse}, { &g_forceAutoSelect, "g_forceAutoSelect", "0", CVAR_ARCHIVE, 0, qtrue }, { &g_adminExpireTime, "g_adminExpireTime", "0", CVAR_ARCHIVE, 0, qfalse }, + { &g_preventRagequit, "g_preventRagequit", "0", CVAR_ARCHIVE, 0, qtrue }, { &g_privateMessages, "g_privateMessages", "1", CVAR_ARCHIVE, 0, qfalse }, { &g_fullIgnore, "g_fullIgnore", "1", CVAR_ARCHIVE, 0, qtrue }, -- cgit