diff options
author | Tony J. White <tjw@tjw.org> | 2007-01-03 18:04:57 +0000 |
---|---|---|
committer | Tony J. White <tjw@tjw.org> | 2007-01-03 18:04:57 +0000 |
commit | f57b74635da93485851fb2e722bd765194c899a9 (patch) | |
tree | b1561a8e4824452d5b7352f40aabf9573228017a /src/game | |
parent | bfc7853860c7c40d1c11d34b2c5f92b1a2428229 (diff) |
* (bug 2996) better support for using "!" commands when g_admin is
disabled.
* (bug 2973) account for the *BUILTIN* layout in the count returned
by G_LayoutList()
* !readconfig now clears all g_admin data properly even if there is an
error reading or no g_admin data file is defined
Diffstat (limited to 'src/game')
-rw-r--r-- | src/game/g_admin.c | 39 | ||||
-rw-r--r-- | src/game/g_buildable.c | 2 | ||||
-rw-r--r-- | src/game/g_cmds.c | 4 |
3 files changed, 29 insertions, 16 deletions
diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 12ba721c..1af65c55 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -300,7 +300,7 @@ qboolean G_admin_name_check( gentity_t *ent, char *name, char *err, int len ) } } - if( !g_admin.string[ 0 ] || !g_adminNameProtect.string[ 0 ] ) + if( !g_adminNameProtect.string[ 0 ] ) return qtrue; for( i = 0; i < MAX_ADMIN_ADMINS && g_admin_admins[ i ]; i++ ) @@ -401,8 +401,9 @@ static void admin_writeconfig( void ) len = trap_FS_FOpenFile( g_admin.string, &f, FS_WRITE ); if( len < 0 ) { - G_Printf( "admin_writeconfig: could not open %s\n", + G_Printf( "admin_writeconfig: could not open g_admin file \"%s\"\n", g_admin.string ); + return; } for( i = 0; i < MAX_ADMIN_LEVELS && g_admin_levels[ i ]; i++ ) { @@ -1063,10 +1064,13 @@ qboolean G_admin_readconfig( gentity_t *ent, int skiparg ) qboolean level_open, admin_open, ban_open, command_open; char levels[ MAX_STRING_CHARS ] = {""}; + G_admin_cleanup(); + if( !g_admin.string[ 0 ] ) { ADMP( "^3!readconfig: g_admin is not set, not loading configuration " "from a file\n" ); + admin_default_levels(); return qfalse; } @@ -1084,8 +1088,6 @@ qboolean G_admin_readconfig( gentity_t *ent, int skiparg ) *( cnf + len ) = '\0'; trap_FS_FCloseFile( f ); - G_admin_cleanup(); - t = COM_Parse( &cnf ); level_open = admin_open = ban_open = command_open = qfalse; while( *t ) @@ -1512,7 +1514,12 @@ qboolean G_admin_setlevel( gentity_t *ent, int skiparg ) adminname, l, ( ent ) ? ent->client->pers.netname : "console" ) ); if( vic ) vic->client->pers.adminLevel = l; - admin_writeconfig(); + + if( !g_admin.string[ 0 ] ) + ADMP( "^3!setlevel: ^7WARNING g_admin not set, not saving admin record " + "to a file\n" ); + else + admin_writeconfig(); return qtrue; } @@ -1565,7 +1572,6 @@ static qboolean admin_create_ban( gentity_t *ent, return qfalse; } g_admin_bans[ i ] = b; - admin_writeconfig(); return qtrue; } @@ -1608,6 +1614,8 @@ qboolean G_admin_kick( gentity_t *ent, int skiparg ) vic->client->pers.guid, vic->client->pers.ip, g_adminTempBan.integer, "automatic temp ban created by kick" ); + if( g_admin.string[ 0 ] ) + admin_writeconfig(); } trap_SendServerCommand( pids[ 0 ], @@ -1773,6 +1781,10 @@ qboolean G_admin_ban( gentity_t *ent, int skiparg ) g_admin_namelog[ logmatch ]->guid, g_admin_namelog[ logmatch ]->ip, seconds, reason ); + if( !g_admin.string[ 0 ] ) + ADMP( "^3!ban: ^7WARNING g_admin not set, not saving ban to a file\n" ); + else + admin_writeconfig(); if(g_admin_namelog[ logmatch ]->slot == -1 ) { @@ -1831,7 +1843,8 @@ qboolean G_admin_unban( gentity_t *ent, int skiparg ) bnum, g_admin_bans[ bnum - 1 ]->name, ( ent ) ? ent->client->pers.netname : "console" ) ); - admin_writeconfig(); + if( g_admin.string[ 0 ] ) + admin_writeconfig(); return qtrue; } @@ -2010,6 +2023,11 @@ qboolean G_admin_listadmins( gentity_t *ent, int skiparg ) continue; found++; } + if( !found ) + { + ADMP( "^3!listadmins: ^7no admins defined\n" ); + return qfalse; + } if( G_SayArgc() == 2 + skiparg ) { @@ -2037,7 +2055,7 @@ qboolean G_admin_listadmins( gentity_t *ent, int skiparg ) if( start >= found ) { - ADMP( va( "^3!listadmins: ^7there are only %d admins\n", found ) ); + ADMP( va( "^3!listadmins: ^7listing %d admins\n", found ) ); return qfalse; } @@ -2082,11 +2100,6 @@ qboolean G_admin_listlayouts( gentity_t *ent, int skiparg ) trap_Cvar_VariableStringBuffer( "mapname", map, sizeof( map ) ); count = G_LayoutList( map, list, sizeof( list ) ); - if( !count ) - { - ADMP( va( "^3!listlayouts:^7 ^7no layouts found for map '%s'\n", map ) ); - return qfalse; - } ADMBP_begin( ); ADMBP( va( "^3!listlayouts:^7 %d layouts found for '%s':\n", count, map ) ); s = &list[ 0 ]; diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 1737b73c..7d02ec15 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -3410,7 +3410,7 @@ int G_LayoutList( const char *map, char *list, int len ) count, numFiles, map ); } Q_strncpyz( list, layouts, len ); - return count; + return count + 1; } /* diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index f17236d5..b7ca16d7 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -886,7 +886,7 @@ void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ) G_SayTo( ent, other, mode, color, name, text ); } - if( g_admin.string[ 0 ] && g_adminParseSay.integer ) + if( g_adminParseSay.integer ) { G_admin_cmd_check ( ent, qtrue ); } @@ -2712,7 +2712,7 @@ void ClientCommand( int clientNum ) return; } - if( g_admin.string[ 0 ] && G_admin_cmd_check( ent, qfalse ) ) + if( G_admin_cmd_check( ent, qfalse ) ) return; // ignore all other commands when at intermission |