/****************************************************************** * Class save, etc. Used for.. stuff. * ******************************************************************/ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" void save_config args(( void )); void load_config args(( void )); void check_class args(( CHAR_DATA *ch )); void check_class( CHAR_DATA *ch ) { if ( IS_CLASS(ch, CLASS_VAMPIRE) ) { if ( (config_info->drow + config_info->demons + config_info->ninjas + config_info->monks) / 3 < config_info->vampires ) { stc("Sorry. There are too many Vampires at the moment.\n",ch); stc("Try another class, or select None for now.\n\r",ch); ch->class = 0; ch->generation = 1; } } else if ( IS_CLASS(ch, CLASS_DROW) ) { if ( (config_info->vampires + config_info->demons + config_info->ninjas + config_info->monks) / 3 < config_info->drow ) { stc("Sorry. There are too many Drow at the moment.\n\r",ch); stc("Try another class, or select None for now.\n\r",ch); ch->class = 0; ch->generation = 1; } } else if ( IS_CLASS(ch, CLASS_DEMON) ) { if ( (config_info->vampires + config_info->drow + config_info->ninjas + config_info->monks) / 3 < config_info->demons ) { stc("Sorry. There are too many Demons at the moment.\n\r",ch); stc("Try another class, or select None for now.\n\r",ch); ch->class = 0; ch->generation = 1; } } else if ( IS_CLASS(ch, CLASS_NINJA) ) { if ( (config_info->vampires + config_info->drow + config_info->demons + config_info->monks) / 3 < config_info->ninjas ) { stc("Sorry. There are too many Ninjas at the moment.\n\r",ch); stc("Try another class, or select None for now.\n\r",ch); ch->class = 0; ch->generation = 1; } } else if ( IS_CLASS(ch, CLASS_MONK) ) { if ( (config_info->vampires + config_info->drow + config_info->ninjas + config_info->demons) / 3 < config_info->monks ) { stc("Sorry. There are too many Monks at the moment.\n\r",ch); stc("Try another class, or select None for now.\n\r",ch); ch->class = 0; ch->generation = 1; } } else return; return; } /* void do_configure(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char *wholearg; CHAR_DATA *vch; int ox, oy; argument = one_argument( argument, arg1 ); wholearg = argument; argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); if (arg1[0] == '\0') { send_to_char("Current Configuration: \n\r",ch); sprintf(buf, "hitpoints = Mobile Hp *= %d / %d\n\r", config_info->mob_hp_mult, config_info->mob_hp_div); send_to_char(buf, ch); sprintf(buf, "level = Mobile Level *= %d / %d\n\r", config_info->mob_level_mult, config_info->mob_level_div); send_to_char(buf, ch); sprintf(buf, "damage = Mobile Damage *= %d / %d\n\r", config_info->mob_dam_mult, config_info->mob_dam_div); send_to_char(buf, ch); sprintf(buf, "Exp = Exp Given *= %d / %d\n\r", config_info->research_exp_mult, config_info->research_exp_div); send_to_char(buf, ch); sprintf(buf, "Forge = Number-Range %d , %d\n\r", config_info->forge1, config_info->forge2); sprintf(buf, "autohelp = Automatic Help Prompt = %s\n\r",config_info->autohelp); send_to_char(buf, ch); return; } if (!str_prefix(arg1, "autohelp")) { if (wholearg[0] == '\0') { send_to_char("Syntax: configure autohelp <help page>",ch); return; } free_string( config_info->autohelp ); config_info->autohelp = str_dup( wholearg ); send_to_char("Successfully updated Auto Help.\n\r",ch); save_config(); send_to_char("Parameters successfully saved in config.sys.\n\r",ch); return; } if (!is_number(arg2) || !is_number(arg3)) { send_to_char("Syntax: configure <variable> <x> <y>\n\r",ch); send_to_char("where x:y is the ratio you wish to set the variable to.\n\r",ch); send_to_char("eg. configure hitpoints 2 1\n\r",ch); send_to_char("Doubles the number of hp every mob has.\n\r",ch); send_to_char("Configure on it's own lists all variables.\n\r",ch); return; } if (atoi(arg3) == 0 || atoi(arg2)==0) { send_to_char("Values of zero are not allowed.\n\r",ch); return; } if (atoi(arg2) / atoi(arg3) > 6) { send_to_char("Ratio too large.\n\r",ch); return; } if (atoi(arg3) / atoi(arg2) > 6) { send_to_char("Ratio too small.\n\r",ch); return; } if (!str_prefix(arg1, "forge")) { ox = config_info->forge1; oy = config_info->forge2; config_info->forge1 = atoi(arg2); config_info->forge2 = atoi(arg3); save_config(); stc("Forge updated.\n\r",ch); return; } if (!str_prefix(arg1, "hitpoints")) { ox = config_info->mob_hp_mult; oy = config_info->mob_hp_div; config_info->mob_hp_mult = atoi(arg2); config_info->mob_hp_div = atoi(arg3); stc("Successful update of config.sys.\n\r",ch); for (vch = char_list; vch != NULL; vch = vch->next) { if (IS_NPC(vch)) { vch->hit = vch->hit * oy / ox; vch->hit = vch->hit * config_info->mob_hp_mult / config_info->mob_hp_div; vch->max_hit = vch->max_hit * oy / ox; vch->max_hit = vch->max_hit * config_info->mob_hp_mult / config_info->mob_hp_div; } } send_to_char("Successful update of mobile hitpoints.\n\r",ch); save_config(); send_to_char("Parameters successfully saved in config.sys.\n\r",ch); return; } if (!str_prefix(arg1, "damage")) { ox = config_info->mob_dam_mult; oy = config_info->mob_dam_div; config_info->mob_dam_mult = atoi(arg2); config_info->mob_dam_div = atoi(arg3); for (vch = char_list; vch != NULL; vch = vch->next) { if (IS_NPC(vch)) { vch->damroll = vch->damroll * oy / ox; vch->damroll = vch->damroll * config_info->mob_hp_mult / config_info->mob_hp_div; } } send_to_char("Successful update of mobile damage.\n\r",ch); save_config(); send_to_char("Parameters successfully saved in config.sys.\n\r",ch); return; } if (!str_prefix(arg1, "level")) { ox = config_info->mob_level_mult; oy = config_info->mob_level_div; config_info->mob_level_mult = atoi(arg2); config_info->mob_level_div = atoi(arg3); for (vch = char_list; vch != NULL; vch = vch->next) { if (IS_NPC(vch)) { int lvl; lvl = vch->level; vch->level = vch->level * oy / ox; vch->level = vch->level * config_info->mob_level_mult / config_info->mob_level_div; if (vch->level < lvl) vch->level = lvl; } } send_to_char("Successful update of mobile level.\n\r",ch); save_config(); send_to_char("Parameters successfully saved in config.sys.\n\r",ch); return; } if (!str_prefix(arg1, "exp")) { config_info->research_exp_mult = atoi(arg2); config_info->research_exp_div = atoi(arg3); send_to_char("Successful update of exp.\n\r",ch); save_config(); send_to_char("Parameters successfully saved in config.sys.\n\r",ch); return; } if (!str_prefix(arg1, "points")) { config_info->prac_exp_mult = atoi(arg2); config_info->prac_exp_div = atoi(arg3); fread_word(fp); send_to_char("Successful update of Disc Points.\n\r",ch); send_to_char("Parameters successfully saved in config.sys.\n\r",ch); return; } send_to_char("Cannot update a non-existant variable.\n\r",ch); send_to_char("config with no arguments to list.\n\r",ch); } */ void initialise_config() { if (config_info == NULL) config_info = alloc_perm( sizeof(*config_info) ); config_info->demons = 0; config_info->mages = 0; config_info->vampires = 0; config_info->werewolves = 0; config_info->drow = 0; config_info->monks = 0; config_info->ninjas = 0; load_config(); } void load_config() { FILE *fp; if ((fp = fopen("config.sys","r")) == NULL) { bug("Creating config.sys",0); save_config(); return; } fread_to_eol( fp ); fread_word(fp); config_info->demons = fread_number( fp ); fread_word(fp); config_info->mages = fread_number( fp ); fread_word(fp); config_info->vampires = fread_number( fp ); fread_word(fp); config_info->werewolves = fread_number( fp ); fread_word(fp); config_info->drow = fread_number( fp ); fread_word(fp); config_info->monks = fread_number( fp ); fread_word(fp); config_info->ninjas = fread_number( fp ); fclose( fp ); } void save_config() { FILE *fp; if ((fp = fopen("config.sys","w")) == NULL) { bug("Error saving to config.sys",0); return; } fprintf( fp, "Config.sys - Stuff for Classes, etc.\n"); fprintf( fp, "Demons %d\n",config_info->demons ); fprintf( fp, "Mages %d\n",config_info->mages ); fprintf( fp, "Vampires %d\n",config_info->vampires ); fprintf( fp, "Werewolves %d\n",config_info->werewolves); fprintf( fp, "Drow %d\n",config_info->drow ); fprintf( fp, "Monks %d\n",config_info->monks ); fprintf( fp, "Ninjas %d\n",config_info->ninjas ); fclose( fp ); }