/**************************************************************************** * ResortMUD Version 5.0 was mainly programmed by Ntanel, Garinan, Josh, * * Badastaz, Digifuzz, Senir, Kratas, Scion, Shogar and Tagith. * * ------------------------------------------------------------------------ * * Copyright (C) 1996 - 2001 Haslage Net Electronics: MudWorld of Lorain, * * Ohio. ALL RIGHTS RESERVED See /doc/RMLicense.txt for more details. * ****************************************************************************/ /* * Disable Module * * Disables commands. * * Syntax: disable cmd name * Kratas */ #include <string.h> #include "mud.h" #define DISABLE_FILE SYSTEM_DIR "disable.dat" void save_disabled( ); typedef struct disabled_data DISABLED_DATA; struct disabled_data { DISABLED_DATA *next; CMDTYPE *command; char *who; int level; }; DISABLED_DATA *first_disabled; void do_disable( CHAR_DATA * ch, char *argument ) { DISABLED_DATA *disabled; CMDTYPE *cmd; if( IS_NPC( ch ) ) { send_to_char( "Hi, I'm sorry but npcs can't use this command!\r\n", ch ); return; } if( argument == NULL || argument[0] == '\0' ) { char buf[MIL]; if( !first_disabled ) { send_to_char( "No commands are disabled.\r\n", ch ); return; } sprintf( buf, "Disabled commands:\r\n%-10s %5s %-15s\r\n", "Command", "Level", "Who Disabled" ); for( disabled = first_disabled; disabled; disabled = disabled->next ) { sprintf( buf + strlen( buf ), "%-10s %5d %-15s\r\n", disabled->command->name, disabled->level, disabled->who ); } send_to_pager( buf, ch ); return; } cmd = find_command( argument ); for( disabled = first_disabled; disabled; disabled = disabled->next ) if( disabled->command == cmd ) break; if( disabled ) { /* * Do they have access? */ if( disabled->level > get_trust( ch ) ) { send_to_char( "You don't have the access to un-disable this command.\r\n", ch ); return; } /* * They do, remove it */ if( first_disabled == disabled ) first_disabled = disabled->next; else { DISABLED_DATA *tmp; for( tmp = first_disabled; tmp->next != disabled; tmp = tmp->next ) ; tmp->next = disabled->next; } STRFREE( disabled->who ); DISPOSE( disabled ); save_disabled( ); send_to_char( "Command is now enabled.\r\n", ch ); } else { /* * DOn't let them disable this command. */ if( !str_cmp( argument, "disable" ) ) { send_to_char( "You cannot disable this command.\r\n", ch ); return; } cmd = find_command( argument ); if( !cmd ) { send_to_char( "No such command", ch ); return; } if( cmd->level > get_trust( ch ) ) { send_to_char( "You don't have access to this command.\r\n", ch ); return; } CREATE( disabled, DISABLED_DATA, 1 ); disabled->command = cmd; disabled->who = STRALLOC( ch->name ); disabled->level = get_trust( ch ); disabled->next = first_disabled; first_disabled = disabled; ch_printf( ch, "%s is now disabled.\r\n", cmd->name ); save_disabled( ); return; } } void load_disabled( ) { FILE *fp; DISABLED_DATA *disabled; CMDTYPE *cmd; char *word; fp = fopen( DISABLE_FILE, "r" ); if( !fp ) { bug( "Unable to open disabled commands list." ); return; } for( ;; ) { word = fread_word( fp ); if( !str_cmp( word, "End" ) ) break; cmd = find_command( word ); if( !cmd ) { bug( "Unknown command in disabled list." ); fread_number( fp ); fread_word( fp ); continue; } CREATE( disabled, DISABLED_DATA, 1 ); disabled->command = cmd; disabled->level = fread_number( fp ); disabled->who = STRALLOC( fread_word( fp ) ); disabled->next = first_disabled; first_disabled = disabled; } fclose( fp ); } void save_disabled( ) { DISABLED_DATA *disabled; FILE *fp; fp = fopen( DISABLE_FILE, "w" ); if( !fp ) { bug( "Unable to open disabled commands list." ); return; } for( disabled = first_disabled; disabled; disabled = disabled->next ) fprintf( fp, "%s %d %s\n", disabled->command->name, disabled->level, disabled->who ); fprintf( fp, "End\n" ); fclose( fp ); } bool check_disabled( CMDTYPE * cmd ) { DISABLED_DATA *disabled; if( !cmd ) return FALSE; for( disabled = first_disabled; disabled; disabled = disabled->next ) if( disabled->command->do_fun == cmd->do_fun ) return TRUE; return FALSE; }