diff --git a/src/game/g_admin.c b/src/game/g_admin.c index c7caf13..6ddf550 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -241,6 +241,11 @@ g_admin_cmd_t g_admin_cmds[ ] = "[^3name|slot#^7]" }, + {"lockname", G_admin_lockname, "m", + "lock/unlock a players name from changing/updating.", + "[^3name|slot#^7]" + }, + {"namelog", G_admin_namelog, "e", "display a list of names used by recently connected players", "(^5name^7)" @@ -3328,7 +3333,7 @@ qboolean G_admin_listplayers( gentity_t *ent, int skiparg ) char lname[ MAX_NAME_LENGTH ]; char lname2[ MAX_NAME_LENGTH ]; char guid_stub[ 9 ]; - char muted[ 2 ], denied[ 2 ], dbuilder[ 2 ], immune[ 2 ]; + char muted[ 2 ], denied[ 2 ], dbuilder[ 2 ], immune[ 2 ], nlocked[ 2 ]; int l; char lname_fmt[ 5 ]; @@ -3364,7 +3369,12 @@ qboolean G_admin_listplayers( gentity_t *ent, int skiparg ) for( j = 0; j < 8; j++ ) guid_stub[ j ] = p->pers.guid[ j + 24 ]; guid_stub[ j ] = '\0'; - + + nlocked[ 0 ] = '\0'; + if( p->pers.nlocked ) + { + Q_strncpyz( nlocked, "N", sizeof( muted ) ); + } muted[ 0 ] = '\0'; if( p->pers.muted ) { @@ -3459,6 +3469,7 @@ qboolean G_admin_listplayers( gentity_t *ent, int skiparg ) ( *lname ) ? lname2 : "", guid_stub, immune, + nlocked, muted, dbuilder, denied, @@ -3474,6 +3485,7 @@ qboolean G_admin_listplayers( gentity_t *ent, int skiparg ) i, c, t, + nlocked, muted, dbuilder, denied, @@ -6527,6 +6539,12 @@ qboolean G_admin_maplog( gentity_t *ent, int skiparg ) ptr = end; count++; } + + if( g_nextMap.string[0] ) + { + ADMBP( va( "^5NextMap override: %s\n", g_nextMap.string ) ); + } + ADMBP_end( ); return qtrue; @@ -7401,3 +7419,50 @@ qboolean G_admin_bring( gentity_t *ent, int skiparg ) return qtrue; } + +qboolean G_admin_lockname( 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!lockname: ^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!lockname: ^7%s\n", err ) ); + return qfalse; + } + if( !admin_higher( ent, &g_entities[ pids[ 0 ] ] ) ) + { + ADMP( "^3!lockname: ^7sorry, but your intended victim has a higher admin" + " level than you\n" ); + return qfalse; + } + vic = &g_entities[ pids[ 0 ] ]; + if( vic->client->pers.nlocked == qtrue ) + { + vic->client->pers.nlocked = qfalse; + CPx( pids[ 0 ], "cp \"^1Your name has been unlocked\"" ); + AP( va( "print \"^3!lockname: ^7%s^7's name has been unlocked by %s\n\"", + vic->client->pers.netname, + ( ent ) ? ent->client->pers.netname : "console" ) ); + } + else + { + vic->client->pers.nlocked = qtrue; + CPx( pids[ 0 ], "cp \"^1Your name has been locked\"" ); + AP( va( "print \"^3!lockname: ^7%s^7's name has been locked by ^7%s\n\"", + vic->client->pers.netname, + ( ent ) ? ent->client->pers.netname : "console" ) ); + } + ClientUserinfoChanged( pids[ 0 ] ); + return qtrue; +} + diff --git a/src/game/g_admin.h b/src/game/g_admin.h index de5d83f..e4d38f8 100644 --- a/src/game/g_admin.h +++ b/src/game/g_admin.h @@ -265,6 +265,7 @@ qboolean G_admin_nobuild( gentity_t *ent, int skiparg ); 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 ); 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_buildable.c b/src/game/g_buildable.c index 3192688..1c599ae 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -3087,7 +3087,13 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance { gentity_t *tent = &g_entities[ entitylist[ i ] ]; - if( tent->s.eType == ET_PLAYER ) + if( tent->s.eType == ET_MOVER && !g_moverBuild.integer ) + { + reason = IBE_NOROOM; + break; + } + + else if( tent->s.eType == ET_PLAYER ) { reason = IBE_NOROOM; break; diff --git a/src/game/g_client.c b/src/game/g_client.c index 921578f..a0f1c49 100644 --- a/src/game/g_client.c +++ b/src/game/g_client.c @@ -1151,7 +1151,6 @@ void ClientUserinfoChanged( int clientNum ) Q_strncpyz( oldname, G_NextNewbieName( ent ), sizeof( oldname ) ); } - if( client->pers.muted ) { trap_SendServerCommand( ent - g_entities, @@ -1180,6 +1179,12 @@ void ClientUserinfoChanged( int clientNum ) trap_SendServerCommand( ent - g_entities, va( "print \"%s\n\"", err ) ); revertName = qtrue; } + else if( client->pers.nlocked ) + { + trap_SendServerCommand( ent - g_entities, + "print \"Your name is locked, you can no longer rename.\n\"" ); + revertName = qtrue; + } if( revertName ) { diff --git a/src/game/g_local.h b/src/game/g_local.h index 13d3072..43c8ab8 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -411,6 +411,8 @@ typedef struct qboolean grabbed; gentity_t *grabber; + + qboolean nlocked; qboolean firstConnect; } clientPersistant_t; @@ -1463,6 +1465,8 @@ extern vmCvar_t g_AllStatsTime; extern vmCvar_t g_wwNoHovelBuild; +extern vmCvar_t g_moverBuild; + 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 a15e95e..3b97388 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -255,6 +255,8 @@ vmCvar_t g_AllStatsTime; vmCvar_t g_wwNoHovelBuild; +vmCvar_t g_moverBuild; + static cvarTable_t gameCvarTable[ ] = { @@ -491,7 +493,10 @@ static cvarTable_t gameCvarTable[ ] = { &g_AllStats, "g_AllStats", "", CVAR_ARCHIVE, 0, qfalse }, { &g_AllStatsTime, "g_AllStatsTime", "", CVAR_ARCHIVE, 0, qfalse }, - { &g_wwNoHovelBuild, "g_wwNoHovelBuild", "0", CVAR_ARCHIVE, 0, qfalse } + { &g_wwNoHovelBuild, "g_wwNoHovelBuild", "0", CVAR_ARCHIVE, 0, qfalse }, + + + { &g_moverBuild, "g_moverBuild", "0", CVAR_ARCHIVE, 0, qfalse } }; static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] ); diff --git a/src/game/g_maprotation.c b/src/game/g_maprotation.c index fc6fad7..5737149 100644 --- a/src/game/g_maprotation.c +++ b/src/game/g_maprotation.c @@ -1018,7 +1018,7 @@ static int G_GetMapVoteWinner( int *winvotes, int *totalvotes ) for( i = 0; i < MAX_MAP_ROTATION_CONDS; i++ ) { - if( results[ i ] > winner ) + if( results[ i ] > wv ) { winner = i; wv = results[ i ];