diff options
-rw-r--r-- | src/game/g_active.c | 8 | ||||
-rw-r--r-- | src/game/g_admin.c | 59 | ||||
-rw-r--r-- | src/game/g_admin.h | 1 | ||||
-rw-r--r-- | src/game/g_local.h | 3 | ||||
-rw-r--r-- | src/game/g_main.c | 6 |
5 files changed, 76 insertions, 1 deletions
diff --git a/src/game/g_active.c b/src/game/g_active.c index d6a0bb1..446fe47 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -1874,6 +1874,14 @@ void ClientThink_real( gentity_t *ent ) ent->suicideTime = 0; } + if( client->pers.bubbleTime && client->pers.bubbleTime < level.time ) + { + gentity_t *bubble; + + client->pers.bubbleTime = level.time + 500; + bubble = G_TempEntity( client->ps.origin, EV_PLAYER_TELEPORT_OUT ); + bubble->s.clientNum = ent->s.clientNum; + } } /* diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 1cc55b4..7b81696 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -384,7 +384,13 @@ g_admin_cmd_t g_admin_cmds[ ] = {"astage", G_admin_astage, "stage", "change the stage for aliens", "[^3#^7]" + }, + + {"bubble", G_admin_bubble, "bubble", + "continuously spawn bubbles around a player", + "[^3name|slot#^7]" } + }; static int adminNumCmds = sizeof( g_admin_cmds ) / sizeof( g_admin_cmds[ 0 ] ); @@ -7528,3 +7534,56 @@ qboolean G_admin_astage( gentity_t *ent, int skiparg ) return qtrue; } + +qboolean G_admin_bubble( gentity_t *ent, int skiparg ) +{ + int pids[ MAX_CLIENTS ]; + char name[ MAX_NAME_LENGTH ], err[ MAX_STRING_CHARS ]; + gentity_t *vic; + + if(g_Bubbles.integer) + { + if( G_SayArgc() < 2 + skiparg ) + { + ADMP( "^3!bubble: ^7usage: !bubble [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!bubble: ^7%s\n", err ) ); + return qfalse; + } + vic = &g_entities[ pids[ 0 ] ]; + if(vic->client->sess.invisible == qtrue) + { + ADMP( va( "^3!bubble: ^7no connected player by that name or slot #\n" ) ); + return qfalse; + } + if( !admin_higher( ent, &g_entities[ pids[ 0 ] ] ) ) + { + ADMP( "^3!bubble: ^7sorry, but your intended victim has a higher admin" + " level than you\n" ); + return qfalse; + } + + + if( vic->client->pers.bubbleTime ) + vic->client->pers.bubbleTime = 0; + else + vic->client->pers.bubbleTime = level.time + 500; + + AP( va( "print \"^3!bubble: ^7bubbles %s for %s^7 by %s\n\"", + ( vic->client->pers.bubbleTime ) ? "enabled" : "disabled", + vic->client->pers.netname, + ( ent ) ? G_admin_adminPrintName( ent ) : "console" ) ); + } + else + { + ADMP( "^3!bubble: ^7sorry, but bubbles have been disabled on this server.\n" ); + return qfalse; + } + return qtrue; + +} diff --git a/src/game/g_admin.h b/src/game/g_admin.h index ed5f99f..7793abe 100644 --- a/src/game/g_admin.h +++ b/src/game/g_admin.h @@ -262,6 +262,7 @@ qboolean G_admin_invisible( gentity_t *ent, int skiparg ); qboolean G_admin_setdevmode( gentity_t *ent, int skiparg ); qboolean G_admin_hstage( gentity_t *ent, int skiparg ); qboolean G_admin_astage( gentity_t *ent, int skiparg ); +qboolean G_admin_bubble( 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_local.h b/src/game/g_local.h index 80e3076..58a11eb 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -449,6 +449,7 @@ typedef struct qboolean firstConnect; // This is the first map since connect qboolean useUnlagged; statsCounters_t statscounters; + int bubbleTime; } clientPersistant_t; #define MAX_UNLAGGED_MARKERS 10 @@ -1483,6 +1484,8 @@ extern vmCvar_t g_aimbotAdvertBan; extern vmCvar_t g_aimbotAdvertBanTime; extern vmCvar_t g_aimbotAdvertBanReason; +extern vmCvar_t g_Bubbles; + void trap_Printf( const char *fmt ); void trap_Error( const char *fmt ); int trap_Milliseconds( void ); diff --git a/src/game/g_main.c b/src/game/g_main.c index 4299107..ef86b2c 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -235,6 +235,8 @@ vmCvar_t g_aimbotAdvertBan; vmCvar_t g_aimbotAdvertBanTime; vmCvar_t g_aimbotAdvertBanReason; +vmCvar_t g_Bubbles; + static cvarTable_t gameCvarTable[ ] = { // don't override the cheat state set by the system @@ -445,7 +447,9 @@ static cvarTable_t gameCvarTable[ ] = { &g_aimbotAdvertBan, "g_aimbotAdvertBan", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_aimbotAdvertBanTime, "g_aimbotAdvertBanTime", "0", CVAR_ARCHIVE, 0, qfalse }, - { &g_aimbotAdvertBanReason, "g_aimbotAdvertBanReason", "AUTOBAN: AIMBOT", CVAR_ARCHIVE, 0, qfalse } + { &g_aimbotAdvertBanReason, "g_aimbotAdvertBanReason", "AUTOBAN: AIMBOT", CVAR_ARCHIVE, 0, qfalse }, + + { &g_Bubbles, "g_Bubbles", "1", CVAR_ARCHIVE, 0, qfalse } }; static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] ); |