diff options
Diffstat (limited to 'src/game/g_admin.c')
-rw-r--r-- | src/game/g_admin.c | 91 |
1 files changed, 84 insertions, 7 deletions
diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 0fb2975b..018639a7 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -50,8 +50,8 @@ g_admin_cmd_t g_admin_cmds[ ] = {"ban", G_admin_ban, "b", "ban a player by IP and GUID with an optional expiration time and reason." - "time is seconds or suffix with 'w' - weeks, 'd' - days, 'h' - hours, or " - "'m' - minutes", + " time is seconds or suffix with 'w' - weeks, 'd' - days, 'h' - hours, " + "or 'm' - minutes", "[^3name|slot#|IP^7] (^5time^7) (^5reason^7)" }, @@ -79,6 +79,11 @@ g_admin_cmd_t g_admin_cmds[ ] = "display a list of players, their client numbers and their levels", "" }, + + {"lock", G_admin_lock, "K", + "lock a team to prevent anyone from joining it", + "[^3a|h^7]" + }, {"mute", G_admin_mute, "m", "mute a player", @@ -142,6 +147,11 @@ g_admin_cmd_t g_admin_cmds[ ] = "unbans a player specified by the slot as seen in showbans", "[^3ban slot#^7]" }, + + {"unlock", G_admin_unlock, "K", + "unlock a locked team", + "[^3a|h^7]" + }, {"unmute", G_admin_mute, "m", "unmute a muted player", @@ -285,6 +295,8 @@ qboolean G_admin_name_check( gentity_t *ent, char *name, char *err, int len ) for( i = 0; i < MAX_ADMIN_ADMINS && g_admin_admins[ i ]; i++ ) { + if( g_admin_admins[ i ]->level < 1 ) + continue; G_SanitiseName( g_admin_admins[ i ]->name, testName ); if( !Q_stricmp( name2, testName ) && Q_stricmp( ent->client->pers.guid, g_admin_admins[ i ]->guid ) ) @@ -914,9 +926,8 @@ qboolean G_admin_cmd_check( gentity_t *ent, qboolean say ) command[ 0 ] = '\0'; G_SayArgv( 0, command, sizeof( command ) ); if( !Q_stricmp( command, "say" ) || - ( G_admin_permission( ent, ADMF_TEAMFTCMD ) && - ( !Q_stricmp( command, "say_team" ) || - !Q_stricmp( command, "say_buddy" ) ) ) ) + ( G_admin_permission( ent, ADMF_TEAMCHAT_CMD ) && + ( !Q_stricmp( command, "say_team" ) ) ) ) { skip = 1; G_SayArgv( 1, command, sizeof( command ) ); @@ -2303,7 +2314,7 @@ qboolean G_admin_help( gentity_t *ent, int skiparg ) ADMBP( va( "^3!help: ^7help for '!%s':\n", g_admin_cmds[ i ].keyword ) ); ADMBP( va( " ^3Funtion: ^7%s\n", g_admin_cmds[ i ].function ) ); - ADMBP( va( " ^3Syntax: ^7%s %s\n", g_admin_cmds[ i ].keyword, + ADMBP( va( " ^3Syntax: ^7!%s %s\n", g_admin_cmds[ i ].keyword, g_admin_cmds[ i ].syntax ) ); ADMBP( va( " ^3Flag: ^7'%c'\n", g_admin_cmds[ i ].flag[ 0 ] ) ); ADMBP_end(); @@ -2324,7 +2335,7 @@ qboolean G_admin_help( gentity_t *ent, int skiparg ) ADMBP( va( "^3!help: ^7help for '%s':\n", g_admin_commands[ i ]->command ) ); ADMBP( va( " ^3Description: ^7%s\n", g_admin_commands[ i ]->desc ) ); - ADMBP( va( " ^3Syntax: ^7%s\n", g_admin_commands[ i ]->command ) ); + ADMBP( va( " ^3Syntax: ^7!%s\n", g_admin_commands[ i ]->command ) ); ADMBP_end(); return qtrue; } @@ -2600,6 +2611,72 @@ qboolean G_admin_namelog( gentity_t *ent, int skiparg ) return qtrue; } +qboolean G_admin_lock( gentity_t *ent, int skiparg ) +{ + char teamName[2] = {""}; + pTeam_t team; + + if( G_SayArgc() < 1 + skiparg ) + { + ADMP( "^3!lock: ^7usage: !lock [a|h]\n" ); + return qfalse; + } + G_SayArgv( 1 + skiparg, teamName, sizeof( teamName ) ); + if( teamName[ 0 ] == 'a' || teamName[ 0 ] == 'A' ) + team = PTE_ALIENS; + else if( teamName[ 0 ] == 'h' || teamName[ 0 ] == 'H' ) + team = PTE_HUMANS; + else + { + ADMP( va( "^3!lock: ^7invalid team\"%c\"\n", teamName[0] ) ); + return qfalse; + } + if( level.teamLocked[ team ] ) + { + ADMP( va( "^3!lock: ^7%s team is already locked\n", + ( team == PTE_ALIENS ) ? "Alien" : "Human" ) ); + return qfalse; + } + level.teamLocked[ team ] = qtrue; + AP( va( "print \"^3!lock: ^7%s team has been locked by %s\n\"", + ( team == PTE_ALIENS ) ? "Alien" : "Human", + ( ent ) ? ent->client->pers.netname : "console" ) ); + return qtrue; +} + +qboolean G_admin_unlock( gentity_t *ent, int skiparg ) +{ + char teamName[2] = {""}; + pTeam_t team; + + if( G_SayArgc() < 1 + skiparg ) + { + ADMP( "^3!unlock: ^7usage: !unlock [a|h]\n" ); + return qfalse; + } + G_SayArgv( 1 + skiparg, teamName, sizeof( teamName ) ); + if( teamName[ 0 ] == 'a' || teamName[ 0 ] == 'A' ) + team = PTE_ALIENS; + else if( teamName[ 0 ] == 'h' || teamName[ 0 ] == 'H' ) + team = PTE_HUMANS; + else + { + ADMP( va( "^3!unlock: ^7invalid team\"%c\"\n", teamName[0] ) ); + return qfalse; + } + if( !level.teamLocked[ team ] ) + { + ADMP( va( "^3!lock: ^7%s team is not locked\n", + ( team == PTE_ALIENS ) ? "Alien" : "Human" ) ); + return qfalse; + } + level.teamLocked[ team ] = qfalse; + AP( va( "print \"^3!unlock: ^7%s team has been unlocked by %s\n\"", + ( team == PTE_ALIENS ) ? "Alien" : "Human", + ( ent ) ? ent->client->pers.netname : "console" ) ); + return qtrue; +} + /* * This function facilitates the TP define. ADMP() is similar to CP except that * it prints the message to the server console if ent is not defined. |