Re: EXP Formula (Yes, again!)

From: ;P (siv@CYBERENET.NET)
Date: 02/02/98


> >         I've worked out a system for formula based experience, but I am ashamedly
> > not very good at stuff such as logarithms. I want an experience system in
> > which it takes maybe 2000 more experience than the last level took. i.e.,
> > if you needed 4000 last level to level up, you need 6000 this level to
> > level up. I'm sure it's not too difficult, but I am having a hell of a time
>
> Simple mathmatics.... (2000*level) or 2000*(level+1) as the case may be

yeah, but i'm sure that's not what you want...that means that every level
will be as easy as the last...you probably want something like:
lev - exp
1 - 2000
2 - 4000
3 - 8000
4 - 14000
5 - 22000

"exp = pow(2, level) * 1000" will give you something close to the above
table, but it would probably be better to make your exp_to_level a
combination of equations and tables..a table will allow for easier
customization, and is faster than redoing calcs every time someone types
score..

what i did was make tables for exp, class mods, etc..and combined them
into an equation..here's my function:

int exp_to_level(struct char_data *ch)
{
  float exp;
  extern struct int_app_type int_app[];
  extern struct wis_app_type wis_app[];
  extern int exp_needed[];
  extern float class_exp_mod[];

  if (IS_NPC(ch) || (GET_LEVEL(ch) >= LVL_IMMORT)) {
    log_info("SYSERR: NPC or Immortal getting to exp_to_level!");
    return 1;
  }

  exp = (float) exp_needed[(int) GET_LEVEL(ch)];
  exp *= (float) class_exp_mod[(int) GET_CLASS(ch)];
  exp *= (float) int_app[GET_INT(ch)].int_exp_mod;
  exp *= (float) wis_app[GET_WIS(ch)].wis_exp_mod;

  return ((int) exp);
}

siv


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST