Added spectator noclip, g_specNoclip. (Issue 152)
Added decent kick reasons (Issue 153) Added `g_defaultLayout` to control which layout is used for a map (Issue 154) Added `!bubbles` flag Q (Issue 156)
This commit is contained in:
1 parent
a44ecfa4a9
commit
2e5b254639
7 files changed
+85
-9
No files matched your search
+12
-1
@@ -393,7 +393,12 @@ void SpectatorThink( gentity_t *ent, usercmd_t *ucmd )
|
||||
if( client->sess.spectatorState == SPECTATOR_LOCKED || client->sess.spectatorState == SPECTATOR_FOLLOW )
|
||||
client->ps.pm_type = PM_FREEZE;
|
||||
else
|
||||
client->ps.pm_type = PM_SPECTATOR;
|
||||
{
|
||||
if( g_specNoclip.integer )
|
||||
client->ps.pm_type = PM_NOCLIP;
|
||||
else
|
||||
client->ps.pm_type = PM_SPECTATOR;
|
||||
}
|
||||
|
||||
if ( client->sess.spectatorState == SPECTATOR_FOLLOW )
|
||||
{
|
||||
@@ -1635,6 +1640,12 @@ void ClientThink_real( gentity_t *ent )
|
||||
VectorCopy( clear, ent->client->ps.velocity );
|
||||
VectorCopy( ent->client->pers.grabber->s.origin, ent->client->ps.origin );
|
||||
}
|
||||
|
||||
if( client->pers.bubble && client->pers.bubbletime < level.time ){
|
||||
gentity_t *bub;
|
||||
bub = G_TempEntity( client->ps.origin, EV_PLAYER_TELEPORT_OUT );
|
||||
client->pers.bubbletime += 500;
|
||||
}
|
||||
|
||||
if( BG_InventoryContainsUpgrade( UP_MEDKIT, client->ps.stats ) &&
|
||||
BG_UpgradeIsActive( UP_MEDKIT, client->ps.stats ) )
|
||||
|
||||
+48
-1
@@ -145,6 +145,11 @@ g_admin_cmd_t g_admin_cmds[ ] =
|
||||
"This will bring you to said players location.",
|
||||
"[^3name|slot#^7]"
|
||||
},
|
||||
|
||||
{"bubble", G_admin_bubble, "Q",
|
||||
"Cause bobbles to appear around you untill turned off",
|
||||
"[^3name|slot#^7]"
|
||||
},
|
||||
|
||||
{"flag", G_admin_flag, "f",
|
||||
"add an admin flag to a player, prefix flag with '-' to disallow",
|
||||
@@ -2303,7 +2308,7 @@ qboolean G_admin_kick( gentity_t *ent, int skiparg )
|
||||
vic->client->pers.netname,
|
||||
vic->client->pers.guid,
|
||||
vic->client->pers.ip, g_adminTempBan.integer,
|
||||
"automatic temp ban created by kick" );
|
||||
( *reason ) ? reason : "automatic temp ban created by kick" );
|
||||
if( g_admin.string[ 0 ] )
|
||||
admin_writeconfig();
|
||||
}
|
||||
@@ -7466,3 +7471,45 @@ qboolean G_admin_lockname( 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 ];
|
||||
char command[ MAX_ADMIN_CMD_LEN ];
|
||||
gentity_t *vic;
|
||||
|
||||
if( G_SayArgc() < 2 + skiparg )
|
||||
{
|
||||
ADMP( "^3!bubble: ^7usage: !lockname [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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
vic = &g_entities[ pids[ 0 ] ];
|
||||
if( vic->client->pers.bubble == qtrue )
|
||||
{
|
||||
ADMP( va("^3!bubble: ^7bubble mode has been ^1disable^7 for %s^7\n", vic->client->pers.netname ));
|
||||
vic->client->pers.bubble = qfalse;
|
||||
vic->client->pers.bubbletime = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ADMP( va("^3!bubble: ^7bubble mode has been ^2enabled^7 for %s^7\n", vic->client->pers.netname ));
|
||||
vic->client->pers.bubble = qtrue;
|
||||
vic->client->pers.bubbletime = level.time;
|
||||
}
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
@@ -266,6 +266,7 @@ qboolean G_admin_nobuildsave( gentity_t *ent, int skiparg );
|
||||
qboolean G_admin_grab( gentity_t *ent, int skiparg );
|
||||
qboolean G_admin_bring( gentity_t *ent, int skiparg );
|
||||
qboolean G_admin_lockname( 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 );
|
||||
|
||||
+10
-1
@@ -4090,7 +4090,16 @@ void G_LayoutSelect( void )
|
||||
int cnt = 0;
|
||||
int layoutNum;
|
||||
|
||||
Q_strncpyz( layouts, g_layouts.string, sizeof( layouts ) );
|
||||
Q_strncpyz( layouts, g_defaultLayout.string, sizeof( layouts ) );
|
||||
Q_strncpyz( layouts2, g_layouts.string, sizeof( layouts2 ) );
|
||||
|
||||
if( Q_stricmp( layouts, "" ) && !Q_stricmp( layouts2, "" ) ){
|
||||
Q_strncpyz( layouts, g_defaultLayout.string, sizeof( layouts ) );
|
||||
}
|
||||
else{
|
||||
Q_strncpyz( layouts, g_layouts.string, sizeof( layouts ) );
|
||||
}
|
||||
|
||||
trap_Cvar_VariableStringBuffer( "mapname", map, sizeof( map ) );
|
||||
|
||||
// one time use cvar
|
||||
|
||||
+2
-2
@@ -1833,8 +1833,8 @@ void Cmd_CallVote_f( gentity_t *ent )
|
||||
|
||||
// use ip in case this player disconnects before the vote ends
|
||||
Com_sprintf( level.voteString, sizeof( level.voteString ),
|
||||
"!ban %s %d vote kick", level.clients[ clientNum ].pers.ip,
|
||||
g_adminTempBan.integer + 1 );
|
||||
"!ban %s %d %s", level.clients[ clientNum ].pers.ip,
|
||||
g_adminTempBan.integer + 1, G_SayConcatArgs( 3 ) );
|
||||
//bit of a hack here, but it does work :)
|
||||
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ),
|
||||
"Kick player \'%s^7\' for \'%s^7\'", name, G_SayConcatArgs( 3 ) );
|
||||
|
||||
+5
-1
@@ -413,6 +413,9 @@ typedef struct
|
||||
gentity_t *grabber;
|
||||
|
||||
qboolean nlocked;
|
||||
|
||||
qboolean bubble;
|
||||
int bubbletime;
|
||||
|
||||
qboolean firstConnect;
|
||||
} clientPersistant_t;
|
||||
@@ -1456,7 +1459,7 @@ extern vmCvar_t g_modWeaponAmmo; // Weapon ammo per clip
|
||||
extern vmCvar_t g_modWeaponReload; // Weapon reload time
|
||||
extern vmCvar_t g_modTurretAngle; // Allow high turret build angles
|
||||
extern vmCvar_t g_instantBuild; // Enable instant building outside of devmap mode
|
||||
|
||||
extern vmCvar_t g_defaultLayout;
|
||||
extern vmCvar_t g_teamStatus; // Allow the use of /teamstatus
|
||||
extern vmCvar_t g_teamStatusTime; // Allow the use of /teamstatus
|
||||
|
||||
@@ -1466,6 +1469,7 @@ extern vmCvar_t g_AllStatsTime;
|
||||
extern vmCvar_t g_wwNoHovelBuild;
|
||||
|
||||
extern vmCvar_t g_moverBuild;
|
||||
extern vmCvar_t g_specNoclip;
|
||||
|
||||
void trap_Printf( const char *fmt );
|
||||
void trap_Error( const char *fmt );
|
||||
|
||||
+7
-3
@@ -247,7 +247,7 @@ vmCvar_t g_modTurretAngle;
|
||||
vmCvar_t g_teamStatus;
|
||||
vmCvar_t g_teamStatusTime;
|
||||
|
||||
|
||||
vmCvar_t g_defaultLayout;
|
||||
vmCvar_t g_instantBuild;
|
||||
|
||||
vmCvar_t g_AllStats;
|
||||
@@ -257,6 +257,8 @@ vmCvar_t g_wwNoHovelBuild;
|
||||
|
||||
vmCvar_t g_moverBuild;
|
||||
|
||||
vmCvar_t g_specNoclip;
|
||||
|
||||
|
||||
static cvarTable_t gameCvarTable[ ] =
|
||||
{
|
||||
@@ -479,7 +481,7 @@ static cvarTable_t gameCvarTable[ ] =
|
||||
{ &g_msgTime, "g_msgTime", "0", CVAR_ARCHIVE, 0, qfalse },
|
||||
{ &g_welcomeMsg, "g_welcomeMsg", "", CVAR_ARCHIVE, 0, qfalse },
|
||||
{ &g_welcomeMsgTime, "g_welcomeMsgTime", "0", CVAR_ARCHIVE, 0, qfalse },
|
||||
|
||||
{ &g_defaultLayout, "g_defaultLayout", "", CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_rankings, "g_rankings", "0", 0, 0, qfalse },
|
||||
{ &g_allowShare, "g_allowShare", "1", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse},
|
||||
{ &g_creditOverflow, "g_creditOverflow", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse},
|
||||
@@ -496,7 +498,9 @@ static cvarTable_t gameCvarTable[ ] =
|
||||
{ &g_wwNoHovelBuild, "g_wwNoHovelBuild", "0", CVAR_ARCHIVE, 0, qfalse },
|
||||
|
||||
|
||||
{ &g_moverBuild, "g_moverBuild", "0", CVAR_ARCHIVE, 0, qfalse }
|
||||
{ &g_moverBuild, "g_moverBuild", "0", CVAR_ARCHIVE, 0, qfalse },
|
||||
|
||||
{ &g_specNoclip, "g_specNoclip", "0", CVAR_ARCHIVE, 0, qtrue }
|
||||
};
|
||||
|
||||
static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] );
|
||||
|
||||
Reference in new issue
Block a user