#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 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' ) { stc("Current Configuration:\n\r",ch); sprintf(buf," Mobile Hp *= %d / %d\n\r", config_info->mob_hp_mult, config_info->mob_hp_div); stc(buf,ch); sprintf(buf," Mobile Level *= %d / %d\n\r", config_info->mob_level_mult, config_info->mob_level_div); stc(buf,ch); sprintf(buf," Mobile Damage *= %d / %d\n\r", config_info->mob_dam_mult, config_info->mob_dam_div); stc(buf,ch); sprintf(buf," Mobile Exp *= %d / %d\n\r", config_info->research_exp_mult, config_info->research_exp_div); stc(buf,ch); sprintf(buf," AutoHelp == %s\n\r", config_info->autohelp); stc(buf,ch); sprintf(buf," TitleNone == %s\n\r", config_info->title_none); stc(buf,ch); sprintf(buf," Title00 == %s\n\r", config_info->title00); stc(buf,ch); sprintf(buf," Title05 == %s\n\r", config_info->title05); stc(buf,ch); sprintf(buf," Title10 == %s\n\r", config_info->title10); stc(buf,ch); sprintf(buf," Title15 == %s\n\r", config_info->title15); stc(buf,ch); sprintf(buf," Title20 == %s\n\r", config_info->title20); stc(buf,ch); sprintf(buf," Title25 == %s\n\r", config_info->title25); stc(buf,ch); sprintf(buf," Title30 == %s\n\r", config_info->title30); stc(buf,ch); sprintf(buf," Title35 == %s\n\r", config_info->title35); stc(buf,ch); sprintf(buf," Title40 == %s\n\r", config_info->title40); stc(buf,ch); sprintf(buf," Title45 == %s\n\r", config_info->title45); stc( buf, ch); sprintf(buf," Title50 == %s\n\r", config_info->title50); stc( buf, ch); sprintf(buf," Imm07 == %s\n\r", config_info->imm07); stc(buf,ch); sprintf(buf," Imm08 == %s\n\r", config_info->imm08); stc(buf,ch); sprintf(buf," Imm09 == %s\n\r", config_info->imm09); stc(buf,ch); sprintf(buf," Imm10 == %s\n\r", config_info->imm10); stc(buf,ch); sprintf(buf," Imm11 == %s\n\r", config_info->imm11); stc(buf,ch); sprintf(buf," Imm12 == %s\n\r", config_info->imm12); stc(buf,ch); return; } if( !str_prefix(arg1,"autohelp") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure autohelp <help page>",ch); return; } free_string(config_info->autohelp); config_info->autohelp = str_dup(wholearg); stc("Successfully updated Auto Help.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"titlenone") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure titlenone <string>",ch); return; } free_string(config_info->title_none); config_info->title_none = str_dup(wholearg); stc("Successfully updated titlenone.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title00") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title00 <string>",ch); return; } free_string(config_info->title00); config_info->title00 = str_dup(wholearg); stc("Successfully updated title00.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title05") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title05 <string>",ch); return; } free_string(config_info->title05); config_info->title05 = str_dup(wholearg); stc("Successfully updated title05.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title10") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title10 <string>",ch); return; } free_string(config_info->title10); config_info->title10 = str_dup(wholearg); stc("Successfully updated title10.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title15") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title15 <string>",ch); return; } free_string(config_info->title15); config_info->title15 = str_dup(wholearg); stc("Successfully updated title15.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title20") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title20 <string>",ch); return; } free_string(config_info->title20); config_info->title20 = str_dup(wholearg); stc("Successfully updated title20.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title25") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title25 <string>",ch); return; } free_string(config_info->title25); config_info->title25 = str_dup(wholearg); stc("Successfully updated title25.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title30") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title30 <string>",ch); return; } free_string(config_info->title30); config_info->title30 = str_dup(wholearg); stc("Successfully updated title30.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title35") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title35 <string>",ch); return; } free_string(config_info->title35); config_info->title35 = str_dup(wholearg); stc("Successfully updated title35.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title40") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title40 <string>",ch); return; } free_string(config_info->title40); config_info->title40 = str_dup(wholearg); stc("Successfully updated title40.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title45") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title45 <string>",ch); return; } free_string(config_info->title45); config_info->title45 = str_dup(wholearg); stc("Successfully updated title45.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"title50") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure title50 <string>",ch); return; } free_string(config_info->title50); config_info->title50 = str_dup(wholearg); stc("Successfully updated title50.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"imm07") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure imm07 <string>",ch); return; } free_string(config_info->imm07); config_info->imm07 = str_dup(wholearg); stc("Successfully updated imm07.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"imm08") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure imm08 <string>",ch); return; } free_string(config_info->imm08); config_info->imm08 = str_dup(wholearg); stc("Successfully updated imm08.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"imm09") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure imm09 <string>",ch); return; } free_string(config_info->imm09); config_info->imm09 = str_dup(wholearg); stc("Successfully updated imm09.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"imm10") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure imm10 <string>",ch); return; } free_string(config_info->imm10); config_info->imm10 = str_dup(wholearg); stc("Successfully updated imm10.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"imm11") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure imm11 <string>",ch); return; } free_string(config_info->imm11); config_info->imm11 = str_dup(wholearg); stc("Successfully updated imm11.\n\r",ch); save_config(); return; } if( !str_cmp(arg1,"imm12") ) { if( wholearg[0] == '\0' ) { stc("Syntax: configure imm12 <string>",ch); return; } free_string(config_info->imm12); config_info->imm12 = str_dup(wholearg); stc("Successfully updated imm12.\n\r",ch); save_config(); return; } if( !is_number(arg2) || !is_number(arg3) ) { stc("Syntax: configure <variable> <x> <y>\n\r",ch); stc("where x:y is the ratio you wish to set the variable to.\n\r",ch); stc("eg. configure hitpoints 2 1\n\r",ch); stc("Doubles the number of hp every mob has.\n\r",ch); stc("Configure on it's own lists all variables.\n\r",ch); return; } if( atoi(arg3) == 0 || atoi(arg2)==0 ) { stc("Values of zero are not allowed.\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); 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; } } stc("Successful update of mobile hitpoints.\n\r",ch); save_config(); 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; } } stc("Successful update of mobile damage.\n\r",ch); save_config(); 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; } } stc("Successful update of mobile level.\n\r",ch); save_config(); return; } if( !str_prefix(arg1,"exp") ) { config_info->research_exp_mult = atoi(arg2); config_info->research_exp_div = atoi(arg3); stc("Successful update of exp.\n\r",ch); save_config(); return; } if( !str_prefix(arg1,"points") ) { config_info->prac_exp_mult = atoi(arg2); config_info->prac_exp_div = atoi(arg3); stc("Successful update of Disc Points.\n\r",ch); save_config(); return; } stc("Cannot update a non-existant variable.\n\r",ch); stc("config with no arguments to list.\n\r",ch); return; } void initialise_config() { if (config_info == NULL) config_info = alloc_perm( sizeof(*config_info) ); config_info->ap_exp_points = 1000000; config_info->ap_exp_mult = 1.00; config_info->mob_hp_mult = 1; config_info->mob_hp_div = 1; config_info->mob_level_mult = 1; config_info->mob_level_div = 1; config_info->mob_dam_mult = 1; config_info->mob_dam_div = 1; config_info->prac_exp_mult = 1; config_info->prac_exp_div = 1; config_info->train_exp_mult = 1; config_info->train_exp_div = 1; config_info->research_exp_mult = 1; config_info->research_exp_div = 1; config_info->research_time_mult = 1; config_info->research_time_div = 1; config_info->max_players = 0; config_info->autohelp = str_dup("help"); config_info->title_none = str_dup("titlenone"); config_info->title00 = str_dup("title00"); config_info->title05 = str_dup("title05"); config_info->title10 = str_dup("title10"); config_info->title15 = str_dup("title15"); config_info->title20 = str_dup("title20"); config_info->title25 = str_dup("title25"); config_info->title30 = str_dup("title30"); config_info->title35 = str_dup("title35"); config_info->title40 = str_dup("title40"); config_info->title45 = str_dup("title45"); config_info->title45 = str_dup("title50"); config_info->imm07 = str_dup("imm07"); config_info->imm08 = str_dup("imm08"); config_info->imm09 = str_dup("imm09"); config_info->imm10 = str_dup("imm10"); config_info->imm11 = str_dup("imm11"); config_info->imm12 = str_dup("imm12"); load_config(); return; } void load_config( void ) { FILE *fp; char *word; bool done = FALSE; bool found = FALSE; if( (fp = fopen( CONFIG_FILE, "r")) == NULL) { log_string("No configuration file found...Creating new."); save_config(); return; } log_string("Loading configuration data..."); word = fread_word(fp); while(!done) { found = FALSE; if( !str_cmp( word, "ApExpPoints") ) { config_info->ap_exp_points = fread_number(fp); found = TRUE; } if( !str_cmp( word, "ApExpMult") ) { config_info->ap_exp_mult = atof( fread_string(fp) ); found = TRUE; } if( !str_cmp(word,"MobHpMult") ) { config_info->mob_hp_mult = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"MobHpDiv") ) { config_info->mob_hp_div = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"MobLevelMult") ) { config_info->mob_level_mult = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"MobLevelDiv") ) { config_info->mob_level_div = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"MobDamMult") ) { config_info->mob_dam_mult = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"MobDamDiv") ) { config_info->mob_dam_div = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"ExpMult") ) { config_info->research_exp_mult = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"ExpDiv") ) { config_info->research_exp_div = fread_number(fp); found = TRUE; } else if( !str_cmp(word,"AutoHelp") ) { config_info->autohelp = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"TitleNone") ) { config_info->title_none = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title00") ) { config_info->title00 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title05") ) { config_info->title05 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title10") ) { config_info->title10 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title15") ) { config_info->title15 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title20") ) { config_info->title20 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title25") ) { config_info->title25 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title30") ) { config_info->title30 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title35") ) { config_info->title35 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Title40") ) { config_info->title40 = fread_string(fp); found = TRUE; } else if( !str_cmp(word, "Title45") ) { config_info->title45 = fread_string(fp); found = TRUE; } else if( !str_cmp(word, "Title50") ) { config_info->title50 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Imm07") ) { config_info->imm07 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Imm08") ) { config_info->imm08 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Imm09") ) { config_info->imm09 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Imm10") ) { config_info->imm10 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Imm11") ) { config_info->imm11 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"Imm12") ) { config_info->imm12 = fread_string(fp); found = TRUE; } else if( !str_cmp(word,"#END") ) { done = TRUE; found = TRUE; break; } if(!found) { fclose(fp); return; } if(!done) word = fread_word(fp); } log_string("Configuration data loaded..."); fclose(fp); return; } void save_config( void ) { FILE *fp; if( (fp = fopen( CONFIG_FILE, "w")) == NULL) { log_string("Can not open CONFIG_FILE for writing."); return; } fprintf(fp,"MobHpMult %d\n",config_info->mob_hp_mult); fprintf(fp,"MobHpDiv %d\n",config_info->mob_hp_div); fprintf(fp,"MobLevelMult %d\n",config_info->mob_level_mult); fprintf(fp,"MobLevelDiv %d\n",config_info->mob_level_div); fprintf(fp,"MobDamMult %d\n",config_info->mob_dam_mult); fprintf(fp,"MobDamDiv %d\n",config_info->mob_dam_div); fprintf(fp,"ExpMult %d\n",config_info->research_exp_mult); fprintf(fp,"ExpDiv %d\n",config_info->research_exp_div); fprintf(fp,"AutoHelp %s~\n",config_info->autohelp); fprintf(fp,"TitleNone %s~\n",config_info->title_none); fprintf(fp,"Title00 %s~\n",config_info->title00); fprintf(fp,"Title05 %s~\n",config_info->title05); fprintf(fp,"Title10 %s~\n",config_info->title10); fprintf(fp,"Title15 %s~\n",config_info->title15); fprintf(fp,"Title20 %s~\n",config_info->title20); fprintf(fp,"Title25 %s~\n",config_info->title25); fprintf(fp,"Title30 %s~\n",config_info->title30); fprintf(fp,"Title35 %s~\n",config_info->title35); fprintf(fp,"Title40 %s~\n",config_info->title40); fprintf(fp,"Title45 %s~\n",config_info->title45); fprintf(fp,"Title50 %s~\n",config_info->title50); fprintf(fp,"Imm07 %s~\n",config_info->imm07); fprintf(fp,"Imm08 %s~\n",config_info->imm08); fprintf(fp,"Imm09 %s~\n",config_info->imm09); fprintf(fp,"Imm10 %s~\n",config_info->imm10); fprintf(fp,"Imm11 %s~\n",config_info->imm11); fprintf(fp,"Imm12 %s~\n",config_info->imm12); fprintf(fp,"ApExpPoints %d\n" ,config_info->ap_exp_points); fprintf(fp,"ApExpMult %1.3f~\n",config_info->ap_exp_mult); fprintf(fp,"#END\n"); log_string("Configuration successfully saved."); fclose(fp); return; }