From 6b3a61c6632e870b9dd261c8aa58390b3aca69bf Mon Sep 17 00:00:00 2001 From: IronClawTrem Date: Sat, 7 Mar 2020 20:51:09 +0000 Subject: add !god command --- src/game/g_admin.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/game/g_admin.h | 1 + src/game/g_client.c | 2 ++ src/game/g_local.h | 1 + 4 files changed, 64 insertions(+) diff --git a/src/game/g_admin.c b/src/game/g_admin.c index ffa7796..dcc8ecf 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -436,6 +436,11 @@ g_admin_cmd_t g_admin_cmds[ ] = {"drug", G_admin_drug, "drug", "induce a gas like effect on a player", "[^3name|slot#^7]" + }, + + {"god", G_admin_god, "god", + "makes a player invincible", + "[^3name|slot#^7]" } }; @@ -8317,3 +8322,58 @@ qboolean G_admin_drug( gentity_t *ent, int skiparg ) return qtrue; } + +qboolean G_admin_god( gentity_t *ent, int skiparg ) +{ + int pids[ MAX_CLIENTS ]; + char name[ MAX_NAME_LENGTH ], err[ MAX_STRING_CHARS ]; + int minargc; + gentity_t *vic; + + minargc = 2 + skiparg; + + if( G_SayArgc() < minargc ) + { + ADMP( "^3!god: ^7usage: !god [name|slot#]\n" ); + return qfalse; + } + + G_SayArgv( 1 + skiparg, name, sizeof( name ) ); + + if( G_ClientNumbersFromString( name, pids ) != 1 ) + { + G_MatchOnePlayer( pids, err, sizeof( err ) ); + ADMP( va( "^3!god: ^7%s\n", err ) ); + return qfalse; + } + + vic = &g_entities[ pids[ 0 ] ]; + + if( !ent ) + { + ADMP( "^3!god: ^7sorry, but console cannot do this" ); + return qfalse; + } + + if( !admin_higher( ent, &g_entities[ pids[ 0 ] ] ) ) + { + ADMP( "^3!god: ^7sorry, but that player has a higher admin" + " level than you\n" ); + return qfalse; + } + + vic->flags ^= FL_GODMODE; + + if( vic->client->pers.godMode ) + vic->client->pers.godMode = 0; + else + vic->client->pers.godMode = 1; + + AP( va( "print \"^3!god: ^7godmode for %s ^7for %s ^7by %s^7\n\"", + ( vic->client->pers.godMode ) ? "enabled" : "disabled", + vic->client->pers.netname, + ( ent ) ? G_admin_adminPrintName( ent ) : "console" ) ); + + return qtrue; + +} diff --git a/src/game/g_admin.h b/src/game/g_admin.h index acb366c..7f5fba8 100644 --- a/src/game/g_admin.h +++ b/src/game/g_admin.h @@ -293,6 +293,7 @@ void G_admin_tklog_log( gentity_t *attacker, gentity_t *victim, int meansOfDeath qboolean G_admin_print2( gentity_t *ent, int skiparg ); qboolean G_admin_switch( gentity_t *ent, int skiparg ); qboolean G_admin_drug( gentity_t *ent, int skiparg ); +qboolean G_admin_god( gentity_t *ent, int skiparg ); void G_admin_print( gentity_t *ent, char *m ); void G_admin_buffer_print( gentity_t *ent, char *m ); diff --git a/src/game/g_client.c b/src/game/g_client.c index e488126..09a09ec 100644 --- a/src/game/g_client.c +++ b/src/game/g_client.c @@ -1783,6 +1783,8 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn, vec3_t origin, vec3_t angles ent->waterlevel = 0; ent->watertype = 0; ent->flags = 0; + if( ent->client->pers.godMode ) + ent->flags = FL_GODMODE; //TA: calculate each client's acceleration ent->evaluateAcceleration = qtrue; diff --git a/src/game/g_local.h b/src/game/g_local.h index 6aea23d..7c96014 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -452,6 +452,7 @@ typedef struct qboolean useUnlagged; statsCounters_t statscounters; int bubbleTime; + int godMode; } clientPersistant_t; #define MAX_UNLAGGED_MARKERS 10 -- cgit