--- deliantra/server/common/living.C 2008/09/25 04:09:57 1.89 +++ deliantra/server/common/living.C 2008/12/04 01:07:34 1.91 @@ -1151,6 +1151,7 @@ } /* switch tmp->type */ } /* item is equipped */ } /* for loop of items */ + fprintf (stderr, "gr %s %d\n", &name, glow_radius);//D /* We've gone through all the objects the player has equipped. For many things, we * have generated intermediate values which we now need to assign. @@ -1700,7 +1701,7 @@ static void add_player_exp (object *op, sint64 exp, const char *skill_name, int flag) { - object *skill_obj = NULL; + object *skill_obj; sint64 limit, exp_to_add; int i; @@ -1713,29 +1714,22 @@ * chosen_skill. This means we don't need to search through * the players inventory. */ + skill_obj = 0; + if (skill_name) { - if (op->chosen_skill && op->chosen_skill->type == SKILL && !strcmp (skill_name, op->chosen_skill->skill)) - skill_obj = op->chosen_skill; - else + skill_obj = op->contr->find_skill (skill_name); + + /* Player doesn't have the skill. Check to see what to do, and give + * it to the player if necessary + */ + if (!skill_obj) { - for (object *tmp = op->inv; tmp; tmp = tmp->below) - if (tmp->skill == skill_name && tmp->type == SKILL) - { - skill_obj = splay (tmp); - break; - } + if (flag == SK_EXP_NONE) + return; - /* Player doesn't have the skill. Check to see what to do, and give - * it to the player if necessary - */ - if (!skill_obj) - { - if (flag == SK_EXP_NONE) - return; - else if (flag == SK_EXP_ADD_SKILL) - skill_obj = give_skill_by_name (op, skill_name); - } + if (flag == SK_EXP_ADD_SKILL) + skill_obj = give_skill_by_name (op, skill_name); } } @@ -1812,7 +1806,6 @@ return MIN (exp, (sint64) MAX_EXPERIENCE - op->stats.exp); } - /* Subtracts experience from player. * if skill is set and flag == SK_SUBTRACT_SKILL_EXP, then we * only subtract from the matching skill. Otherwise, @@ -1835,7 +1828,7 @@ for (tmp = op->inv; tmp; tmp = tmp->below) if (tmp->type == SKILL && tmp->stats.exp) { - if (flag == SK_SUBTRACT_SKILL_EXP && skill && !strcmp (tmp->skill, skill)) + if (flag == SK_SUBTRACT_SKILL_EXP && skill && !strcmp (&tmp->skill, skill)) { del_exp = check_exp_loss (tmp, exp); tmp->stats.exp -= del_exp;