On Thu, 27 Jun 1996, Iggy wrote: > > Anyone knows how to change gain_exp function so the players won't be able > to advance more than one level per kill ? Also, when they gain a level > their exp should be set on 0. Here is the function: > ---------------------------------- > void gain_exp(struct char_data * ch, int gain) > { > int is_altered = FALSE; > int num_levels = 0; > char buf[128]; > > if (!IS_NPC(ch) && ((GET_LEVEL(ch) < 1 || GET_LEVEL(ch) >= LVL_IMMORT))) > return; > > if (IS_NPC(ch)) { > GET_EXP(ch) += gain; > return; > } > if (gain > 0) { Right here add some code like this: /* Decide what the max gain he can have for his level, before * counting max_exp_gain */ gain = MIN(((titles[(int)GET_CLASS(ch)][(int) GET_LEVEL(ch)+1].exp - titles[(int)GET_CLASS(ch)][(int) GET_LEVEL(ch)].exp) /4), gain); > gain = MIN(max_exp_gain, gain); /* put a cap on the max gain per kill */ > GET_EXP(ch) += gain; > while (GET_LEVEL(ch) < LVL_IMMORT && > GET_EXP(ch) >= titles[(int) GET_CLASS(ch)][GET_LEVEL(ch) + 1].exp) { > GET_LEVEL(ch) += 1; > num_levels++; > advance_level(ch); > is_altered = TRUE; > } > > if (is_altered) { > if (num_levels == 1) > send_to_char("You rise a level!\r\n", ch); > else { > sprintf(buf, "You rise %d levels!\r\n", num_levels); > send_to_char(buf, ch); > } > set_title(ch, NULL); > check_autowiz(ch); > } > } else if (gain < 0) { > gain = MAX(-max_exp_loss, gain); /* Cap max exp lost per death */ > GET_EXP(ch) += gain; > if (GET_EXP(ch) < 0) > GET_EXP(ch) = 0; > } > }
This archive was generated by hypermail 2b30 : 12/18/00 PST