--- deliantra/server/common/exp.C 2009/11/06 13:03:34 1.23 +++ deliantra/server/common/exp.C 2009/11/29 09:41:27 1.25 @@ -114,6 +114,7 @@ */ prot_mult += (exp_prot_mult[i] * 200 * ob->resist[i]) / 100.0; } + spec_mult += (0.3 * (QUERY_FLAG (ob, FLAG_SEE_INVISIBLE) != 0)) + (0.5 * (QUERY_FLAG (ob, FLAG_SPLITTING) != 0)) + (0.3 * (QUERY_FLAG (ob, FLAG_HITBACK) != 0)) + @@ -128,12 +129,12 @@ exp *= (QUERY_FLAG (ob, FLAG_CAST_SPELL) && has_ability (ob)) ? (40 + (ob->stats.maxsp > 80 ? 80 : ob->stats.maxsp)) / 40 : 1; exp *= (80.0 / (70.0 + ob->stats.wc)) * (80.0 / (70.0 + ob->stats.ac)) * (50.0 + ob->stats.dam) / 50.0; exp *= att_mult * prot_mult * spec_mult; - exp *= 2.0 / (2.0 - ((fabs (ob->speed) < 0.95) ? fabs (ob->speed) : 0.95)); + exp *= 2.0 / (2.0 - min (ob->speed, 0.95)); exp *= (20.0 + ob->stats.Con) / 20.0; if (QUERY_FLAG (ob, FLAG_STAND_STILL)) exp /= 2; - return (int) exp; + return exp; } /* This loads the experience table from the exp_table @@ -143,14 +144,13 @@ * state. */ void -init_experience (void) +init_experience () { char buf[MAX_BUF], *cp; int lastlevel = 0, comp; sint64 lastexp = -1, tmpexp; FILE *fp; - sprintf (buf, "%s/exp_table", settings.confdir); if ((fp = open_and_uncompress (buf, 0, &comp)) == NULL)