----- Original Message ----- From: Phillip A Ames <kirk47@JUNO.COM> To: <CIRCLE@post.queensu.ca> Sent: Thursday, August 26, 1999 1:04 AM Subject: [CODE] Multiclass problem > Hi all, in my effort to perfect my multiclass code, I've hacked up a > function that (should) tell the players how many times they can level in > each different class, based on their current exp. It's (appropriately) > named 'level_check'. Now, the problem is this. Whenever a player gets > any amount of exp, even if its 1 and they had 0 before, this is the > output: > void level_check(struct char_data *ch){ > int i, check_class_lev, num_levels; > char classname[MAX_STRING_LENGTH+1]; > > if(GET_LEVEL(ch) >= LVL_ORGANIAN) > return; > sprintf(buf, ""); // Clear anything in buf since we use sprintf(buf + > strlen(buf) ...) > > for(i = 0; i < NUM_CLASSES; i++){ fine > > for(check_class_lev = GET_CLASS_LEV(ch, i), check_class_lev++; > GET_EXP(ch) > level_exp(check_class_lev); check_class_lev+=1){ // Check > if they have enough XP to level, and how many times, in each class > num_levels++; get rid of this or loop and use a while loop to get the number of levels they can raise a class. Also for each class before you check if it can be raised you need to reset num_levels to 0. check_class_lev = GET_CLASS_LEV(ch,i); num_levels=0; // reset levels counter to 0 check_class_lev++; while (GET_EXP(ch)>=level_exp(check_class_lev)){ /* if in here (the while loop) they can level, stay in here while they can level when it finishes the loop, num_levels holds the number of levels this class can be raised */ num_levels++; check_class_lev++; } you might want to stick another control on the while loop to cover all bases for errors summat like && (check_class_lev<LEV_WHATEVER_YOUR_IMMORT_CLASS_IS) > } > if(num_levels > 0){ > sprinttype(i, pc_class_types, classname); > sprintf(buf + strlen(buf), "You can rise %d level%s in: %s\r\n", > num_levels, num_levels > 1 ? "" : "s", classname); > } > } > > send_to_char(buf, ch); > > } > The code isnt tried and tested and double check the loop control as that is usually where I make mistakes. HTH -Madz +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST