On Mon, 18 Jul 1994, The Chronicler wrote:
> what i did was this....now i have less exp.
>
> 1. get exp for damage.
> 2. add all of groups levels.
> 3. exp gain = group_gain/num_of_levels * GET_LEVEL(ch);
>
> so a 30, a 25, and 1 would be a grtoup of 56 levels...
> ws the 1st level woulg get 1/56 of group exp, the 30 would gert 30/56 etc...
Actually I thought this question was already solved in Circle 3.0. Xp
was divided based on level as above, with a max XP gain cap as well.
I've simply implemented it so that you can only gain 1/4 of the current
level width, or 100,000xp, which ever is smaller.
It also checks and doesnt let people auto-immort either. Just a couple
simple checks. Here's my gain_exp function.
void gain_exp(struct char_data *ch, int gain)
{
int i;
long maxgain;
bool is_altered = FALSE;
if (IS_NPC(ch) || ((GET_LEVEL(ch) < LEVEL_IMMORT) && (GET_LEVEL(ch) > 0))) {
if (gain > 0) {
/* Max gain for a pc is 1/4 of the width to the next level -vamp 12/22 */
if (IS_NPC(ch)){
gain = MIN(100000, gain);
} else {
maxgain = (titles[GET_CLASS(ch)-1][GET_LEVEL(ch)+1].exp - titles[GET_CLASS(ch)-1][GET_LEVEL(ch)].exp) * .1;
gain = MIN(maxgain, gain);
}
GET_EXP(ch) += gain;
if (!IS_NPC(ch)) {
for (i = 0; titles[GET_CLASS(ch)-1][i].exp <= GET_EXP(ch); i++) {
/* Do not allow lv 30 players to advance to lv 31 via simple exp.
Must use the advance command, even though XP continues to pile up
-vamp 12/22
*/
if ((i > GET_LEVEL(ch)) && (GET_LEVEL(ch) < LEVEL_MORTAL_MAX)) {
send_to_char("You rise a level!\n\r", ch);
GET_LEVEL(ch) = i;
advance_level(ch);
is_altered = TRUE;
}
}
}
}
if (gain < 0) {
gain = MAX(-500000, gain); /* Never loose more than 1/2 mil */
GET_EXP(ch) += gain;
if (GET_EXP(ch) < 0)
GET_EXP(ch) = 0;
}
if (is_altered) {
set_title(ch);
check_autowiz(ch);
}
}
}
_O_ Ryan L. Watkins e-mail: vamp@csulb.edu
| Academic Computing Services url : http://www.acs.csulb.edu/~vamp/
| CSU Long Beach - Network Support pgpkey: finger vamp@gothic.acs.csulb.edu
Darkside Consulting - Unix / Windows / Mac / Internet / Design
This archive was generated by hypermail 2b30 : 12/07/00 PST