hello all, Following on from the 'drop the death penalty' thread on the metalforge messageboard I started playing around with the expmul value in the archetypes for the lockpicking skill. Then I got pointed here. The aim is to make it give some modicum of xp without being the preferred way to level up a character. By changing exp to 100 and expmul to 0.1 I was able to make it so that lockpicking gives 200 xp per lock in lockpicking and 20 xp overall. However it appears that this breaks the level breaks or the skills command. Leveling up in lockpicking is made to occur at 200, 400, 800 xp instead of 2000, 4000 etc. The skills command displays the level breaks as normal meaning that the output can read things like: lockpicking.............................lvl: 3 (xp:400/8000) I found the definition of expmul in crossfire/doc/Developers/skills and it doesn't seem to suggest it should act this way, saying nothing about level breaks. However the comment for expmul in include/object.h says /* needed experience = (calc_exp*expmul) - means some */ /* races/classes can need less/more exp to gain levels */ So it looks like there are two conflicting definitions of this value, one altering rate at which xp goes to skill vs overall, and one where it determines the xp for level breaks. If both are correct behavior (as they are currently) then expmul is currently acting like expmul squared and the skills command is misbehaving. If it is incorrect behaviour then the rest of this post probably doesn't apply... From grepping the code it seems like level_exp returns expmul * the level break xp, which suggests it is probably the value passed to it that is odd. This is AFAICT level_exp(pl->level+1, pl->expmul) in server/c_misc.c to do the skills command and level_exp(tmp->level+1, op->expmul) in server/skill_util.c doing something else. There is also ADD_EXP(op->stats.exp, (float) exp_to_add * (skill_obj? skill_obj->expmul:1)) in common/living.c which /looks/ like it is the bit doing the experience adding, if so will mangling the other two lines to read level_exp(pl->level+1, pl->expmul*(skill_obj? skill_obj->expmul:1)) make it consistant? I have tried compiling a server with those changes and it complains about undeclared skill_obj. Unfortunately I can't find a .h file with any mentions of it to #include only a give_skill_by_name() in common/living.c and I don't know how to use this. I have tried following this through the source code further, but there is only so far I can get with grep and I don't really know how to use doxygen properly. _______________________________________________ crossfire-devel mailing list crossfire-devel at lists.real-time.com https://mailman.real-time.com/mailman/listinfo/crossfire-devel