--- deliantra/server/common/living.C 2008/05/02 20:16:24 1.83 +++ deliantra/server/common/living.C 2008/07/15 20:41:58 1.88 @@ -281,10 +281,12 @@ int change_abil (object *op, object *tmp) { - int flag = QUERY_FLAG (tmp, FLAG_APPLIED) ? 1 : -1, success = 0; + int flag = tmp->flag [FLAG_APPLIED] ? 1 : -1; + int success = 0; char message[MAX_BUF]; int potion_max = 0; + // keep some stats for comparison purposes object::flags_t prev_flag = op->flag; MoveType prev_move_type = op->move_type; sint16 prev_resist [NROFATTACKS]; // clumsy @@ -296,6 +298,7 @@ if (tmp->type == POTION) { potion_max = 1; + for (int j = 0; j < NUM_STATS; j++) { int ostat = op->contr->orig_stats.stat (j); @@ -304,8 +307,7 @@ /* nstat is what the stat will be after use of the potion */ int nstat = flag * i + ostat; - /* Do some bounds checking. While I don't think any - * potions do so right now, there is the potential for potions + /* Do some bounds checking. There is the potential for potions * that adjust that stat by more than one point, so we need * to allow for that. */ @@ -400,7 +402,7 @@ */ if (tmp->move_type & MOVE_FLY_LOW && !(op->move_type & MOVE_FLY_HIGH)) { - DIFF_MSG (flag, "You start to float in the air!.", "You float down to the ground."); + DIFF_MSG (flag, "You start to float in the air!", "You float down to the ground."); } if (tmp->move_type & MOVE_FLY_HIGH) @@ -568,16 +570,12 @@ } if (!potion_max) - { - for (int j = 0; j < NUM_STATS; j++) + for (int j = 0; j < NUM_STATS; j++) + if (int i = tmp->stats.stat (j)) { - if (int i = tmp->stats.stat (j)) - { - success = 1; - DIFF_MSG (i * flag, gain_msg[j], lose_msg[j]); - } + success = 1; + DIFF_MSG (i * flag, gain_msg[j], lose_msg[j]); } - } return success; } @@ -865,8 +863,7 @@ /* See note in map.c:update_position about making this additive * since light sources are never applied, need to put check here. */ - if (tmp->glow_radius > glow_radius) - glow_radius = tmp->glow_radius; + glow_radius = max (glow_radius, tmp->glow_radius); /* For some things, we don't care what is equipped */ if (tmp->type == SKILL) @@ -889,7 +886,7 @@ } } - /* Container objects are not meant to adjust a players, but other applied + /* Container objects are not meant to adjust players, but other applied * objects need to make adjustments. * This block should handle all player specific changes * The check for Praying is a bit of a hack - god given bonuses are put @@ -922,7 +919,8 @@ { contr->digestion += tmp->stats.food; contr->gen_hp += tmp->stats.hp; - contr->gen_sp += tmp->stats.sp; + if (tmp->type != BOW) // ugly exception for bows + contr->gen_sp += tmp->stats.sp; contr->gen_grace += tmp->stats.grace; contr->gen_sp_armour += tmp->gen_sp_armour; } @@ -942,7 +940,7 @@ speed_reduce_from_disease = min (speed_reduce_from_disease, tmp->last_sp ? tmp->last_sp / 100.f : 1.f); - /* Pos. and neg. protections are counted seperate (-> pro/vuln). + /* Pos. and neg. protections are counted separate (-> pro/vuln). * (Negative protections are calculated exactly like positive.) * Resistance from potions are treated special as well. If there's * more than one potion-effect, the bigger prot.-value is taken. @@ -1446,11 +1444,6 @@ * set the new dragon name after gaining levels or * changing ability focus (later this can be extended to * eventually change the player's face and animation) - * - * Note that the title is written to 'own_title' in the - * player struct. This should be changed to 'ext_title' - * as soon as clients support this! - * Please, anyone, write support for 'ext_title'. */ void set_dragon_name (object *pl, const object *abil, const object *skin) @@ -1478,29 +1471,17 @@ if (atnr_is_dragon_enabled (abil->stats.exp) && abil->resist[abil->stats.exp] >= level) atnr = abil->stats.exp; - level = (int) (level / 25.); - /* now set the new title */ - if (pl->contr) + if (level < 25) sprintf (pl->contr->title, "%s hatchling", attacks[atnr]); + else if (level < 50) sprintf (pl->contr->title, "%s wyrm" , attacks[atnr]); + else if (level < 75) sprintf (pl->contr->title, "%s wyvern" , attacks[atnr]); + else if (level < 100) sprintf (pl->contr->title, "%s dragon" , attacks[atnr]); + else { - if (level == 0) - sprintf (pl->contr->title, "%s hatchling", attacks[atnr]); - else if (level == 1) - sprintf (pl->contr->title, "%s wyrm", attacks[atnr]); - else if (level == 2) - sprintf (pl->contr->title, "%s wyvern", attacks[atnr]); - else if (level == 3) - sprintf (pl->contr->title, "%s dragon", attacks[atnr]); - else - { - /* special titles for extra high resistance! */ - if (skin->resist[atnr] > 80) - sprintf (pl->contr->title, "legendary %s dragon", attacks[atnr]); - else if (skin->resist[atnr] > 50) - sprintf (pl->contr->title, "ancient %s dragon", attacks[atnr]); - else - sprintf (pl->contr->title, "big %s dragon", attacks[atnr]); - } + /* special titles for extra high resistance! */ + if (skin->resist[atnr] > 80) sprintf (pl->contr->title, "legendary %s dragon", attacks[atnr]); + else if (skin->resist[atnr] > 50) sprintf (pl->contr->title, "ancient %s dragon" , attacks[atnr]); + else sprintf (pl->contr->title, "big %s dragon" , attacks[atnr]); } strcpy (pl->contr->own_title, "");