How-To-Xcenter, coded by Xrakisis /* xcenter.c */ -Put load_balance, save_balance and do_xcenter in either xcenter.c or another file of your choosing. The Way this howto snippit works is it draws every Class's weapon levels, Number_attacks, Damcap, Parry, Dodge and Middy from a txt file in the txt dir. I included two entrys in do_xcenter for you to see how each class's args are set up. when you originaly make the txt file make it 6 0's on top of each other for every class you have in xcenter.. the purpous of xcenter is to be able to balance your classes from within the mud. -There will be a number associated with every class, this is not the class bit but an independant number just used to store info in the txt file and draw the info from the file.. the two entrys for Demon and Werewolf below will show you how to set up all your args for all your classes.. Angel in xcenter was given the number 5, so every balance[5] is angel for my example fight.c if (IS_CLASS(ch, CLASS_ANGEL)) count += balance[5].number_attacks; // number_attacks if (IS_CLASS(ch, CLASS_ANGEL)) max_dam += balance[5].damcap; // update_damcap if (IS_CLASS(ch, CLASS_ANGEL)) chance -= balance[5].parry; // parry if (IS_CLASS(victim, CLASS_ANGEL)) chance += balance[5].parry; // parry if (IS_CLASS(ch, CLASS_ANGEL)) chance -= balance[5].dodge; // dodge if (IS_CLASS(victim, CLASS_ANGEL)) chance += balance[5].dodge; // dodge kav_fight.c (improve_wpn) if (IS_CLASS(ch, CLASS_ANGEL)) max_skl = balance[5].wpnlvl; // weapon Level update.c if you have weapon levels in an update in update.c just make an aditional entry for wpnlvl in there for each class example of /txt/balance.txt, this is what it would look like to start if you only had one class in xcenter. 0 0 0 0 0 0 /* merc.h */ void save_balance args( (void) ); void load_balance args( (void) ); typedef struct balance { int wpnlvl; int number_attacks; int damcap; int parry; int dodge; int middy; } BALANCE; BALANCE balance[20]; /* End merc.h *./ // DB.C load_balance(); put that in with all the other mud loads //End Db.c void load_balance() { int i; FILE *fp; if ((fp = fopen("../txt/balance.txt", "r")) == NULL) { log_string("Error: balance.txt not found!"); exit(1); } balance[0].wpnlvl = 0; balance[0].number_attacks = 0; balance[0].damcap = 0; balance[0].parry = 0; balance[0].dodge = 0; balance [0].middy = 0; for (i = 0; i < 21; i++) { balance[i].wpnlvl = fread_number(fp); balance[i].number_attacks = fread_number(fp); balance[i].damcap = fread_number(fp); balance[i].parry = fread_number(fp); balance[i].dodge = fread_number(fp); balance[i].middy = fread_number(fp); } fclose(fp); } void save_balance() { FILE *fp; int i; if ((fp = fopen("../txt/balance.txt","w")) == NULL) { log_string("Error writing to balance.txt"); return; } for (i=0;i<21;i++) { fprintf(fp, "%d\n", balance[i].wpnlvl); fprintf(fp, "%d\n", balance[i].number_attacks); fprintf(fp, "%d\n", balance[i].damcap); fprintf(fp, "%d\n", balance[i].parry); fprintf(fp, "%d\n", balance[i].dodge); fprintf(fp, "%d\n", balance[i].middy); } fclose (fp); } void do_xcenter(CHAR_DATA *ch, char *argument) { int i; char class[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; unsigned long int value = 0; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); save_balance(); if (arg1[0] == '\0') { send_to_char("#CClass#0 : #GClass #0-#RNmbrAttacks #yDamcap Parry Dodge Middy#n\n\r",ch); send_to_char("\n\r",ch); for (i=0;i<21;i++) { if (i==0) sprintf(class,"#R[#0Demon#R]#n "); if (i==1) sprintf(class,"#y((#LWerewolf#y))#n "); if (i==3) sprintf(class,"#0<<#RVampire#0>>#n "); if (i==2) sprintf(class,"#P.o0#0Drow#P0o.#n "); if (i==4) sprintf(class,"#y{#RTanar'ri#y}#n "); if (i==5) sprintf(class,"#y.x#0(#7Angel#0)#yx.#n "); if (i==6) sprintf(class,"#0|[#LUndead Knight#0]|#n "); if (i==7) sprintf(class,"#g[#rX#g]#oAssassin#g[#rX#g]#n "); if (i==8) sprintf(class,"#7(#0*#R=#r-#oWraith#r-#R=#0*#7)#n "); if (i==9) sprintf(class,"#Rx#rX#C[#gElemental#C]#rX#Rx#n "); if (i==10) sprintf(class,"#y<#7/#y+#7>#nPaladin#7<#y+#7\\#y>#n "); if (i==11) sprintf(class,"#C***#yHydra#C***#n "); if (i==12) sprintf(class,"#r:=#CDragon#r=:#n "); if (i==13) sprintf(class,"#0(#r*#7Zombie#r*#0)#n "); if (i==14) sprintf(class,"#l\#0|#l/-#7S#0hinob#7i#l-\#0|#l/#n "); if (i==15) sprintf(class,"#r+#y=#r+Human#r+#y=#r+#n "); if (i==16) sprintf(class,"#c<>#GG#gian#Gt#c<>#n "); if (i==17) sprintf(class,"#r^-^#0Anti-Paladin#r^-^#n "); if (i==18) sprintf(class,"#L=#R*#w>#CSky#Wblade#w<#R*#L=#n "); if (i==19) sprintf(class,"#w]>#L*#wPriest#L*#w<[#n "); if (i==20) sprintf(class,"#GX#gx#G(#gGhoul#G)#gx#GX#n "); sprintf(buf,"%-18s #0: #G%-12d #0-> #R%-2d #y%-5d #y%-5d #y%-5d #y%-5d\n\r",class,balance[i].class,balance[i].number_attacks, balance[i].damcap, balance[i].parry, balance[i].dodge, balance[i].middy); send_to_char(buf,ch); }} value = is_number( arg3 ) ? atoi( arg3 ) : -1; if (!str_cmp(arg1,"demon")) { if (arg2[0] == '\0') { send_to_char("numberattacks, damcap, parry, dodge, middy",ch); return; } if (!str_cmp(arg2,"weaponlevel")) { if ( value < 200 || value > 1200 ) { stc( "Weapon Level range is 200 to 1200.\n\r", ch ); return; } sprintf(buf,"Demon Weapon Levels set to %d.\n\r",value); send_to_char(buf,ch); balance[0].wpnlvl = value; return; } if (!str_cmp(arg2,"numberattacks")) { if ( value < 2 || value > 10 ) { stc( "Number of Attacks range is 2 to 10.\n\r", ch ); return; } sprintf(buf,"Demon number_attacks set to %d.\n\r",value); send_to_char(buf,ch); balance[0].number_attacks = value; return; } if (!str_cmp(arg2,"damcap")) { if ( value < 1000 || value > 6000 ) { stc( "Damcap range is 1000 to 6000.\n\r", ch ); return; } sprintf(buf,"Demon Damcap set to %d.\n\r",value); send_to_char(buf,ch); balance[0].damcap = value; return; } if (!str_cmp(arg2,"parry")) { if ( value < 20 || value > 70 ) { stc( "Parry range is 20 to 70.\n\r", ch ); return; } sprintf(buf,"Demon Parry set to %d.\n\r",value); send_to_char(buf,ch); balance[0].parry = value; return; } if (!str_cmp(arg2,"dodge")) { if ( value < 20 || value > 70 ) { stc( "dodge range is 20 to 70.\n\r", ch ); return; } sprintf(buf,"Demon Dodge set to %d.\n\r",value); send_to_char(buf,ch); balance[0].dodge = value; return; } if (!str_cmp(arg2,"middy")) { if ( value < 5000 || value > 15000 ) { stc( "Leech range is 5000 to 15000.\n\r", ch ); return; } sprintf(buf,"Demon Leech set to %d.\n\r",value); send_to_char(buf,ch); balance[0].middy = value; return; } } if (!str_cmp(arg1,"werewolf")) { if (arg2[0] == '\0') { send_to_char("numberattacks, damcap, parry, dodge, middy",ch); return; } if (!str_cmp(arg2,"weaponlevel")) { if ( value < 200 || value > 1200 ) { stc( "Weapon Level range is 200 to 1200.\n\r", ch ); return; } sprintf(buf,"Werewolf Weapon Levels set to %d.\n\r",value); send_to_char(buf,ch); balance[1].wpnlvl = value; return; } if (!str_cmp(arg2,"numberattacks")) { if ( value < 2 || value > 10 ) { stc( "Number of Attacks range is 2 to 10.\n\r", ch ); return; } sprintf(buf,"Werewolf number_attacks set to %d.\n\r",value); send_to_char(buf,ch); balance[1].number_attacks = value; return; } if (!str_cmp(arg2,"damcap")) { if ( value < 1000 || value > 6000 ) { stc( "Damcap range is 1000 to 6000.\n\r", ch ); return; } sprintf(buf,"Werewolf Damcap set to %d.\n\r",value); send_to_char(buf,ch); balance[1].damcap = value; return; } if (!str_cmp(arg2,"parry")) { if ( value < 20 || value > 70 ) { stc( "Parry range is 20 to 70.\n\r", ch ); return; } sprintf(buf,"Werewolf Parry set to %d.\n\r",value); send_to_char(buf,ch); balance[1].parry = value; return; } if (!str_cmp(arg2,"dodge")) { if ( value < 20 || value > 70 ) { stc( "dodge range is 20 to 70.\n\r", ch ); return; } sprintf(buf,"Werewolf Dodge set to %d.\n\r",value); send_to_char(buf,ch); balance[1].dodge = value; return; } if (!str_cmp(arg2,"middy")) { if ( value < 5000 || value > 15000 ) { stc( "Talons range is 5000 to 15000.\n\r", ch ); return; } sprintf(buf,"Werewolf Talons set to %d.\n\r",value); send_to_char(buf,ch); balance[1].middy = value; return; } }