--- deliantra/server/common/living.C 2009/11/07 18:30:05 1.100 +++ deliantra/server/common/living.C 2010/01/30 23:30:26 1.106 @@ -609,7 +609,7 @@ if (!tmp) { - tmp = arch_to_object (at); + tmp = at->instance (); tmp = insert_ob_in_ob (tmp, this); SET_FLAG (tmp, FLAG_APPLIED); } @@ -639,7 +639,7 @@ if (!value) return; - tmp = arch_to_object (at); + tmp = at->instance (); tmp = insert_ob_in_ob (tmp, this); SET_FLAG (tmp, FLAG_APPLIED); } @@ -769,6 +769,8 @@ /* First task is to clear all the values back to their original values */ if (type == PLAYER) { + contr->delayed_update = false; + for (int i = 0; i < NUM_STATS; i++) stat_sum [i] = contr->orig_stats.stat (i); @@ -911,7 +913,7 @@ continue; for (int i = 0; i < NUM_STATS; i++) - stat_sum [i] = stat_sum [i] + tmp->stats.stat (i); + stat_sum [i] += tmp->stats.stat (i); if (digest_types [tmp->type]) { @@ -1174,18 +1176,16 @@ { // clamp various player stats for (int i = 0; i < NUM_STATS; ++i) - stats.stat (i) = clamp (stat_sum [i], MIN_STAT, MAX_STAT); + stats.stat (i) = stat_sum [i]; + + check_stat_bounds (&stats); contr->digestion = clamp (contr->digestion, MIN_DIGESTION, MAX_DIGESTION); /* Figure out the players sp/mana/hp totals. */ int pl_level; - check_stat_bounds (&(stats)); - pl_level = level; - - if (pl_level < 1) - pl_level = 1; /* safety, we should always get 1 levels worth of hp! */ + pl_level = max (1, level); /* safety, we should always get 1 levels worth of hp! */ /* You basically get half a con bonus/level. But we do take into account rounding, * so if your bonus is 7, you still get 7 worth of bonus every 2 levels. @@ -1358,8 +1358,7 @@ /* Put a lower limit on speed. Note with this speed, you move once every * 25 ticks or so. This amounts to once every 3 seconds of realtime. */ - if (speed < 0.04f && type == PLAYER) - speed = 0.04f; + max_it (speed, is_player () ? MIN_PLAYER_SPEED : MIN_ACTIVE_SPEED); if (speed != old_speed) set_speed (speed); @@ -1407,11 +1406,8 @@ /* It is quite possible that a player's spell costing might have changed, * so we will check that now. */ - if (type == PLAYER) - { - esrv_update_stats (contr); - esrv_update_spells (contr); - } + if (is_player ()) + contr->update_spells (); // update the mapspace, if we are on a map if (!flag [FLAG_REMOVED] && map) @@ -1611,7 +1607,7 @@ op->level++; - if (op && op == who && op->stats.exp > 1 && is_dragon_pl (who)) + if (op && op == who && op->stats.exp > 1 && who->is_dragon ()) dragon_level_gain (who); /* Only roll these if it is the player (who) that gained the level */ @@ -1654,12 +1650,7 @@ } if (changed) - { - who->update_stats (); - esrv_update_stats (who->contr); - /* check if the spell data has changed */ - esrv_update_spells (who->contr); - } + who->update_stats (); // should cause esrv_update_stats and esrv_update_spells } /*