/*****************************************************************************
* 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-" );
}