/***************************************************************************** * DikuMUD (C) 1990, 1991 by: * * Sebastian Hammer, Michael Seifert, Hans Henrik Staefeldt, Tom Madsen, * * and Katja Nyboe. * *---------------------------------------------------------------------------* * MERC 2.1 (C) 1992, 1993 by: * * Michael Chastain, Michael Quan, and Mitchell Tse. * *---------------------------------------------------------------------------* * SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by: Derek Snider. * * Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, Swordbearer, * * gorog, Grishnakh, Nivek, Tricops, and Fireblade. * *---------------------------------------------------------------------------* * SMAUG 1.7 FUSS by: Samson and others of the SMAUG community. * * Their contributions are greatly appreciated. * *---------------------------------------------------------------------------* * LoP (C) 2006, 2007, 2008 by: the LoP team. * *****************************************************************************/ #include <stdio.h> #include "h/mud.h" #define SYSDATA_FILE SYSTEM_DIR "sysdata.dat" /* Save system info to data file */ void save_sysdata( bool autosave ) { FILE *fp; /* If autosave and not set to allow autosave just return */ if( autosave && !sysdata.autosavecset ) return; if( !( fp = fopen( SYSDATA_FILE, "w" ) ) ) { bug( "%s: couldn't open %s for writing", __FUNCTION__, SYSDATA_FILE ); perror( SYSDATA_FILE ); return; } if( sysdata.mud_name ) fprintf( fp, "MudName %s~\n", sysdata.mud_name ); if( !xIS_EMPTY( sysdata.save_flags ) ) fprintf( fp, "Saveflags %s~\n", ext_flag_string( &sysdata.save_flags, save_flag ) ); if( sysdata.time_of_max ) fprintf( fp, "Highplayertime %ld\n", sysdata.time_of_max ); if( sysdata.next_pfile_cleanup ) fprintf( fp, "NPfileCleanup %ld\n", sysdata.next_pfile_cleanup ); if( sysdata.alltimemax ) fprintf( fp, "Highplayers %d\n", sysdata.alltimemax ); if( sysdata.ident_retries != 20 ) fprintf( fp, "IdentTries %d\n", sysdata.ident_retries ); if( sysdata.ban_site != PERM_HEAD) fprintf( fp, "BanSiteLevel %d\n", sysdata.ban_site ); if( sysdata.ban_race != PERM_HEAD ) fprintf( fp, "BanRaceLevel %d\n", sysdata.ban_race ); if( sysdata.ban_class != PERM_HEAD ) fprintf( fp, "BanClassLevel %d\n", sysdata.ban_class ); if( sysdata.perm_forcepc != PERM_HEAD ) fprintf( fp, "Forcepc %d\n", sysdata.perm_forcepc ); if( sysdata.NAME_RESOLVING ) fprintf( fp, "%s", "NameResolving\n" ); if( sysdata.DENY_NEW_PLAYERS ) fprintf( fp, "%s", "DenyNewPlayers\n" ); if( sysdata.WAIT_FOR_AUTH ) fprintf( fp, "%s", "WaitForAuth\n" ); if( sysdata.morph_opt ) fprintf( fp, "%s", "MorphOpt\n" ); if( sysdata.save_pets ) fprintf( fp, "%s", "PetSave\n" ); if( sysdata.pk_loot ) fprintf( fp, "%s", "PkLoot\n" ); if( sysdata.wizlock ) fprintf( fp, "%s", "WizLock\n" ); if( sysdata.skipclasses ) fprintf( fp, "%s", "SkipClasses\n" ); if( sysdata.autosavecset ) fprintf( fp, "%s", "AutoSaveCset\n" ); if( sysdata.autosavecommands ) fprintf( fp, "%s", "AutoSaveCommands\n" ); if( sysdata.autosavesocials ) fprintf( fp, "%s", "AutoSaveSocials\n" ); if( sysdata.autosaveskills ) fprintf( fp, "%s", "AutoSaveSkills\n" ); if( sysdata.perm_getobjnotake != PERM_LEADER ) fprintf( fp, "GetObjNoTake %d\n", sysdata.perm_getobjnotake ); if( sysdata.perm_muse != PERM_LEADER ) fprintf( fp, "Muse %d\n", sysdata.perm_muse ); if( sysdata.perm_think != PERM_HEAD ) fprintf( fp, "Think %d\n", sysdata.perm_think ); if( sysdata.perm_build != PERM_BUILDER ) fprintf( fp, "Build %d\n", sysdata.perm_build ); if( sysdata.perm_log != PERM_LOG ) fprintf( fp, "Log %d\n", sysdata.perm_log ); if( sysdata.perm_modify_proto != PERM_LEADER ) fprintf( fp, "Protoflag %d\n", sysdata.perm_modify_proto ); if( sysdata.perm_override_private != PERM_LEADER ) fprintf( fp, "Overridepriv %d\n", sysdata.perm_override_private ); if( sysdata.perm_mset_player != PERM_HEAD ) fprintf( fp, "Msetplayer %d\n", sysdata.perm_mset_player ); if( sysdata.save_frequency != 20 ) fprintf( fp, "Savefreq %d\n", sysdata.save_frequency ); if( sysdata.bestow_dif != 5 ) fprintf( fp, "Bestowdif %d\n", sysdata.bestow_dif ); if( sysdata.mlimit_total != 6 ) fprintf( fp, "MLimitTotal %d\n", sysdata.mlimit_total ); if( sysdata.mlimit_deadly != 1 ) fprintf( fp, "MLimitDeadly %d\n", sysdata.mlimit_total ); if( sysdata.mlimit_peaceful != 3 ) fprintf( fp, "MLimitPeaceful %d\n", sysdata.mlimit_peaceful ); if( sysdata.maxpet > 1 ) fprintf( fp, "MaxPet %d\n", sysdata.maxpet ); if( sysdata.expmulti > 1 ) fprintf( fp, "ExpMulti %d\n", sysdata.expmulti ); if( sysdata.mclass > 1 ) fprintf( fp, "MClass %d\n", sysdata.mclass ); if( sysdata.room_limbo ) fprintf( fp, "RoomLimbo %d\n", sysdata.room_limbo ); if( sysdata.room_poly ) fprintf( fp, "RoomPoly %d\n", sysdata.room_poly ); if( sysdata.room_authstart ) fprintf( fp, "RoomAuthstart %d\n", sysdata.room_authstart ); if( sysdata.room_deadly ) fprintf( fp, "RoomDeadly %d\n", sysdata.room_deadly ); if( sysdata.room_school ) fprintf( fp, "RoomSchool %d\n", sysdata.room_school ); if( sysdata.room_temple ) fprintf( fp, "RoomTemple %d\n", sysdata.room_temple ); if( sysdata.room_altar ) fprintf( fp, "RoomAltar %d\n", sysdata.room_altar ); fprintf( fp, "End\n" ); fclose( fp ); fp = NULL; } void fread_sysdata( FILE *fp ) { char *infoflags, flag[MIL]; const char *word; int value; bool fMatch; for( ;; ) { word = feof( fp ) ? "End" : fread_word( fp ); fMatch = false; if( word[0] == EOF ) word = "End"; switch( UPPER( word[0] ) ) { case '*': fMatch = true; fread_to_eol( fp ); break; case 'A': if( !str_cmp( word, "AutoSaveCset" ) ) { sysdata.autosavecset = true; fMatch = true; break; } if( !str_cmp( word, "AutoSaveCommands" ) ) { sysdata.autosavecommands = true; fMatch = true; break; } if( !str_cmp( word, "AutoSaveSocials" ) ) { sysdata.autosavesocials = true; fMatch = true; break; } if( !str_cmp( word, "AutoSaveSkills" ) ) { sysdata.autosaveskills = true; fMatch = true; break; } break; case 'B': KEY( "Bestowdif", sysdata.bestow_dif, fread_number( fp ) ); KEY( "Build", sysdata.perm_build, fread_number( fp ) ); KEY( "BanSiteLevel", sysdata.ban_site, fread_number( fp ) ); KEY( "BanClassLevel", sysdata.ban_class, fread_number( fp ) ); KEY( "BanRaceLevel", sysdata.ban_race, fread_number( fp ) ); break; case 'D': if( !str_cmp( word, "DenyNewPlayers" ) ) { sysdata.DENY_NEW_PLAYERS = true; fMatch = true; break; } break; case 'E': KEY( "ExpMulti", sysdata.expmulti, fread_number( fp ) ); if( !str_cmp( word, "End" ) ) return; break; case 'F': KEY( "Forcepc", sysdata.perm_forcepc, fread_number( fp ) ); break; case 'G': KEY( "GetObjNoTake", sysdata.perm_getobjnotake, fread_number( fp ) ); break; case 'H': KEY( "Highplayers", sysdata.alltimemax, fread_number( fp ) ); KEY( "Highplayertime", sysdata.time_of_max, fread_time( fp ) ); break; case 'I': KEY( "IdentTries", sysdata.ident_retries, fread_number( fp ) ); break; case 'L': KEY( "Log", sysdata.perm_log, fread_number( fp ) ); break; case 'M': if( !str_cmp( word, "MClass" ) ) { sysdata.mclass = fread_number( fp ); if( sysdata.mclass > MAX_PC_CLASS ) sysdata.mclass = MAX_PC_CLASS; fMatch = true; break; } if( !str_cmp( word, "MorphOpt" ) ) { sysdata.morph_opt = true; fMatch = true; break; } KEY( "MLimitTotal", sysdata.mlimit_total, fread_number( fp ) ); KEY( "MLimitDeadly", sysdata.mlimit_deadly, fread_number( fp ) ); KEY( "MLimitPeaceful", sysdata.mlimit_peaceful, fread_number( fp ) ); KEY( "MaxPet", sysdata.maxpet, fread_number( fp ) ); KEY( "Msetplayer", sysdata.perm_mset_player, fread_number( fp ) ); KEY( "MudName", sysdata.mud_name, fread_string( fp ) ); KEY( "Muse", sysdata.perm_muse, fread_number( fp ) ); break; case 'N': if( !str_cmp( word, "NameResolving" ) ) { sysdata.NAME_RESOLVING = true; fMatch = true; break; } KEY( "NPfileCleanup", sysdata.next_pfile_cleanup, fread_time( fp ) ); break; case 'O': KEY( "Overridepriv", sysdata.perm_override_private, fread_number( fp ) ); break; case 'P': if( !str_cmp( word, "PetSave" ) ) { sysdata.save_pets = true; fMatch = true; break; } if( !str_cmp( word, "PkLoot" ) ) { sysdata.pk_loot = true; fMatch = true; break; } KEY( "Protoflag", sysdata.perm_modify_proto, fread_number( fp ) ); break; case 'R': KEY( "RoomLimbo", sysdata.room_limbo, fread_number( fp ) ); KEY( "RoomPoly", sysdata.room_poly, fread_number( fp ) ); KEY( "RoomAuthstart", sysdata.room_authstart, fread_number( fp ) ); KEY( "RoomDeadly", sysdata.room_deadly, fread_number( fp ) ); KEY( "RoomSchool", sysdata.room_school, fread_number( fp ) ); KEY( "RoomTemple", sysdata.room_temple, fread_number( fp ) ); KEY( "RoomAltar", sysdata.room_altar, fread_number( fp ) ); break; case 'S': WEXTKEY( "Saveflags", sysdata.save_flags, fp, save_flag, SV_MAX ); KEY( "Savefreq", sysdata.save_frequency, fread_number( fp ) ); if( !str_cmp( word, "SkipClasses" ) ) { sysdata.skipclasses = true; fMatch = true; break; } break; case 'T': KEY( "Think", sysdata.perm_think, fread_number( fp ) ); break; case 'W': if( !str_cmp( word, "WizLock" ) ) { sysdata.wizlock = true; fMatch = true; break; } if( !str_cmp( word, "WaitForAuth" ) ) { sysdata.WAIT_FOR_AUTH = true; fMatch = true; break; } break; } if( !fMatch ) { bug( "%s: no match: %s", __FUNCTION__, word ); fread_to_eol( fp ); } } } /* Load the sysdata file */ void load_systemdata( void ) { FILE *fp; /* Defaults */ xCLEAR_BITS( sysdata.save_flags ); sysdata.mud_name = NULL; sysdata.perm_muse = PERM_LEADER; sysdata.perm_think = PERM_HEAD; sysdata.perm_build = PERM_BUILDER; sysdata.perm_log = PERM_LOG; sysdata.perm_modify_proto = PERM_LEADER; sysdata.perm_override_private = PERM_LEADER; sysdata.perm_mset_player = PERM_HEAD; sysdata.perm_getobjnotake = PERM_LEADER; sysdata.ban_site = PERM_HEAD; sysdata.ban_race = PERM_HEAD; sysdata.ban_class = PERM_HEAD; sysdata.perm_forcepc = PERM_HEAD; sysdata.save_frequency = 20; /* minutes */ sysdata.ident_retries = 20; sysdata.bestow_dif = 5; sysdata.time_of_max = 0; sysdata.next_pfile_cleanup = 0; sysdata.WAIT_FOR_AUTH = false; sysdata.DENY_NEW_PLAYERS = false; sysdata.NAME_RESOLVING = false; sysdata.morph_opt = false; sysdata.save_pets = false; sysdata.pk_loot = false; sysdata.wizlock = false; sysdata.autosavecset = false; sysdata.autosavecommands = false; sysdata.autosavesocials = false; sysdata.autosaveskills = false; sysdata.skipclasses = false; sysdata.mlimit_total = 6; sysdata.mlimit_deadly = 1; sysdata.mlimit_peaceful = 4; sysdata.maxpet = 1; sysdata.expmulti = 1; sysdata.mclass = 1; sysdata.room_limbo = 2; sysdata.room_poly = 3; sysdata.room_authstart = 21017; sysdata.room_deadly = 21017; sysdata.room_school = 21017; sysdata.room_temple = 21017; sysdata.room_altar = 21017; if( !( fp = fopen( SYSDATA_FILE, "r" ) ) ) { log_printf( "%s: couldn't open %s for reading. Using Defaults.", __FUNCTION__, SYSDATA_FILE ); perror( SYSDATA_FILE ); return; } fread_sysdata( fp ); fclose( fp ); fp = NULL; } CMDF( do_cset ) { char arg[MSL]; short level; set_pager_color( AT_PLAIN, ch ); if( !argument || argument[0] == '\0' ) { pager_printf( ch, "\r\n&WMudName: &c%s\r\n", sysdata.mud_name ? sysdata.mud_name : "Not Set" ); pager_printf( ch, "&WMultiPlayingLimits:\r\n &wMLTotal: &c%6d &wMLDeadly: &c%6d &wMLPeaceful: &c%6d\r\n", sysdata.mlimit_total, sysdata.mlimit_deadly, sysdata.mlimit_peaceful ); pager_printf( ch, "&WSaveFlag:\r\n &c%s\r\n", ext_flag_string( &sysdata.save_flags, save_flag ) ); send_to_pager( "&WAutoSaves:\r\n", ch ); pager_printf( ch, " &wASCset: &c%6s &wASCommands: &c%6s &wASSocials: &c%6s\r\n", sysdata.autosavecset ? "ON" : "off", sysdata.autosavecommands ? "ON" : "off", sysdata.autosavesocials ? "ON" : "off" ); pager_printf( ch, " &wASSkills: &c%6s\r\n", sysdata.autosaveskills ? "ON" : "off" ); send_to_pager( "&WChannels:\r\n", ch ); pager_printf( ch, " &wMuse: &c%6s &wThink: &c%6s &wLog: &c%6s\r\n &wBuild: &c%6s\r\n", perms_flag[sysdata.perm_muse], perms_flag[sysdata.perm_think], perms_flag[sysdata.perm_log], perms_flag[sysdata.perm_build] ); send_to_pager( "&WBuilding:\r\n", ch ); pager_printf( ch, " &wProtoModify: &c%6s &wMset_Player: &c%6s\r\n", perms_flag[sysdata.perm_modify_proto], perms_flag[sysdata.perm_mset_player] ); send_to_pager( "&WBan Data:\r\n", ch ); pager_printf( ch, " &wBanSite: &c%6s &wBanClass: &c%6s &wBanRace: &c%6s\r\n", perms_flag[sysdata.ban_site], perms_flag[sysdata.ban_class], perms_flag[sysdata.ban_race] ); send_to_pager( "&WOthers:\r\n", ch ); pager_printf( ch, " &wGetObjNoTake: &c%6s &wSaveFrequency: &c%6d &wBestowDif: &c%6d\r\n", perms_flag[sysdata.perm_getobjnotake], sysdata.save_frequency, sysdata.bestow_dif ); pager_printf( ch, " &wIdent: &c%6d &wForcePc: &c%6s &wOverridePrivate: &c%6s\r\n", sysdata.ident_retries, perms_flag[sysdata.perm_forcepc], perms_flag[sysdata.perm_override_private] ); pager_printf( ch, " &wMaxPet: &c%6d &wExpMulti: &c%6d &wMultiClass: &c%6d\r\n", sysdata.maxpet, sysdata.expmulti, sysdata.mclass ); send_to_pager( "&WToggles:\r\n", ch ); pager_printf( ch, " &wNameResolving: &c%6s &wWaitForAuth: &c%6s &wPkLoot: &c%6s\r\n", sysdata.NAME_RESOLVING ? "ON" : "off", sysdata.WAIT_FOR_AUTH ? "ON" : "off", sysdata.pk_loot ? "ON" : "off" ); pager_printf( ch, " &wDenyNewPlayers: &c%6s &wMorphOpt: &c%6s &wPetSave: &c%6s\r\n", sysdata.DENY_NEW_PLAYERS ? "ON" : "off", sysdata.morph_opt ? "ON" : "off", sysdata.save_pets ? "ON" : "off" ); pager_printf( ch, " &wWizLock: &c%6s &wSkipClasses: &c%6s\r\n", sysdata.wizlock ? "ON" : "off", sysdata.skipclasses ? "ON" : "off" ); send_to_pager( "&WRooms:\r\n", ch ); pager_printf( ch, " &wRoomLimbo: &c%6d &wRoomPoly: &c%6d &wRoomAuthStart: &c%6d\r\n", sysdata.room_limbo, sysdata.room_poly, sysdata.room_authstart ); pager_printf( ch, " &wRoomDeadly: &c%6d &wRoomSchool: &c%6d &wRoomTemple: &c%6d\r\n", sysdata.room_deadly, sysdata.room_school, sysdata.room_temple ); pager_printf( ch, " &wRoomAltar: &c%6d\r\n", sysdata.room_altar ); return; } argument = one_argument( argument, arg ); if( !str_cmp( arg, "save" ) ) { save_sysdata( false ); send_to_char( "Cset functions saved.\r\n", ch ); return; } if( !str_cmp( arg, "mudname" ) ) { STRSET( sysdata.mud_name, argument ); send_to_char( "Name Set.\r\n", ch ); save_sysdata( true ); return; } if( !str_cmp( arg, "saveflag" ) ) { int x = 0; while( argument && argument[0] != '\0' ) { argument = one_argument( argument, arg ); x = get_flag( arg, save_flag, SV_MAX ); if( x < 0 || x >= SV_MAX ) ch_printf( ch, "%s isn't a valid save flag.\r\n", arg ); else xTOGGLE_BIT( sysdata.save_flags, x ); } send_to_char( "SaveFlags Set.\r\n", ch ); save_sysdata( true ); return; } level = ( short )atoi( argument ); if( !str_cmp( arg, "mltotal" ) ) { sysdata.mlimit_total = URANGE( 1, level, 100 ); ch_printf( ch, "MLTotal set to %d.\r\n", sysdata.mlimit_total ); save_sysdata( true ); return; } if( !str_cmp( arg, "mldeadly" ) ) { sysdata.mlimit_deadly = URANGE( 1, level, 100 ); ch_printf( ch, "MLDeadly set to %d.\r\n", sysdata.mlimit_deadly ); save_sysdata( true ); return; } if( !str_cmp( arg, "mlpeaceful" ) ) { sysdata.mlimit_peaceful = URANGE( 1, level, 100 ); ch_printf( ch, "MLPeaceful set to %d.\r\n", sysdata.mlimit_peaceful ); save_sysdata( true ); return; } if( !str_cmp( arg, "maxpet" ) ) { sysdata.maxpet = URANGE( 1, level, 100 ); ch_printf( ch, "MaxPet set to %d.\r\n", sysdata.maxpet ); save_sysdata( true ); return; } if( !str_cmp( arg, "expmulti" ) ) { sysdata.expmulti = URANGE( 1, level, 100 ); ch_printf( ch, "ExpMulti set to %d.\r\n", sysdata.expmulti ); save_sysdata( true ); return; } if( !str_cmp( arg, "multiclass" ) ) { sysdata.mclass = URANGE( 1, level, MAX_PC_CLASS ); ch_printf( ch, "MultiClass set to %d.\r\n", sysdata.mclass ); save_sysdata( true ); return; } if( !str_cmp( arg, "ident_retries" ) || !str_cmp( arg, "ident" ) ) { sysdata.ident_retries = URANGE( 0, level, 20 ); if( sysdata.ident_retries <= 0 ) send_to_char( "Ident lookups turned off.\r\n", ch ); else ch_printf( ch, "Ident set to %d.\r\n", sysdata.ident_retries ); save_sysdata( true ); return; } if( !str_cmp( arg, "petsave" ) ) sysdata.save_pets = !sysdata.save_pets; else if( !str_cmp( arg, "pkloot" ) ) sysdata.pk_loot = !sysdata.pk_loot; else if( !str_cmp( arg, "ascset" ) ) { sysdata.autosavecset = !sysdata.autosavecset; /* If we are turning off autosave need to do one last auto save, set as false so it will save change since autosave is now off */ if( !sysdata.autosavecset ) save_sysdata( false ); } else if( !str_cmp( arg, "ascommands" ) ) sysdata.autosavecommands = !sysdata.autosavecommands; else if( !str_cmp( arg, "associals" ) ) sysdata.autosavesocials = !sysdata.autosavesocials; else if( !str_cmp( arg, "asskills" ) ) sysdata.autosaveskills = !sysdata.autosaveskills; else if( !str_cmp( arg, "wizlock" ) ) sysdata.wizlock = !sysdata.wizlock; else if( !str_cmp( arg, "skipclasses" ) ) sysdata.skipclasses = !sysdata.skipclasses; else if( !str_cmp( arg, "morphopt" ) ) sysdata.morph_opt = !sysdata.morph_opt; else if( !str_cmp( arg, "nameresolving" ) ) sysdata.NAME_RESOLVING = !sysdata.NAME_RESOLVING; else if( !str_cmp( arg, "denynewplayers" ) ) sysdata.DENY_NEW_PLAYERS = !sysdata.DENY_NEW_PLAYERS; else if( !str_cmp( arg, "waitforauth" ) ) sysdata.WAIT_FOR_AUTH = !sysdata.WAIT_FOR_AUTH; else if( !str_prefix( arg, "savefrequency" ) ) sysdata.save_frequency = level; else if( !str_cmp( arg, "bestowdif" ) ) sysdata.bestow_dif = URANGE( 1, level, 10 ); else if( !str_cmp( arg, "getobjnotake" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_getobjnotake = level; } else if( !str_cmp( arg, "mset_player" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_mset_player = level; } else if( !str_cmp( arg, "forcepc" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_forcepc = level; } else if( !str_cmp( arg, "bansite" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.ban_site = level; } else if( !str_cmp( arg, "banrace" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.ban_race = level; } else if( !str_cmp( arg, "banclass" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.ban_class = level; } else if( !str_cmp( arg, "muse" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_muse = level; } else if( !str_cmp( arg, "think" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_think = level; } else if( !str_cmp( arg, "log" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_log = level; } else if( !str_cmp( arg, "build" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_build = level; } else if( !str_cmp( arg, "protomodify" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_modify_proto = level; } else if( !str_cmp( arg, "overrideprivate" ) ) { if( !is_number( argument ) ) level = get_flag( argument, perms_flag, PERM_MAX ); if( level < PERM_IMM || level > get_trust( ch ) || level >= PERM_MAX ) { send_to_char( "Permission out of range.\r\n", ch ); return; } sysdata.perm_override_private = level; } else if( !str_cmp( arg, "roomlimbo" ) ) sysdata.room_limbo = UMAX( 0, level ); else if( !str_cmp( arg, "roompoly" ) ) sysdata.room_poly = UMAX( 0, level ); else if( !str_cmp( arg, "roomauthstart" ) ) sysdata.room_authstart = UMAX( 0, level ); else if( !str_cmp( arg, "roomdeadly" ) ) sysdata.room_deadly = UMAX( 0, level ); else if( !str_cmp( arg, "roomschool" ) ) sysdata.room_school = UMAX( 0, level ); else if( !str_cmp( arg, "roomtemple" ) ) sysdata.room_temple = UMAX( 0, level ); else if( !str_cmp( arg, "roomaltar" ) ) sysdata.room_altar = UMAX( 0, level ); else { send_to_char( "Invalid argument.\r\n", ch ); return; } ch_printf( ch, "%s Set.\r\n", capitalize( arg ) ); save_sysdata( true ); } CMDF( do_wizlock ) { sysdata.wizlock = !sysdata.wizlock; set_char_color( AT_DANGER, ch ); save_sysdata( false ); ch_printf( ch, "Game %swizlocked and sysdata saved.\r\n", sysdata.wizlock ? "" : "un-" ); }