--- deliantra/server/server/main.C 2007/05/12 20:21:54 1.101 +++ deliantra/server/server/main.C 2007/05/12 21:56:34 1.102 @@ -246,7 +246,7 @@ if (!pl->ob || !pl->ns || !pl->ob->active) continue; - if (pl->ob->speed_left > 0 && pl->ns) + if (pl->ob->speed_left > 0.f && pl->ns) if (handle_newcs_player (pl->ob)) flag = 1; @@ -263,23 +263,29 @@ for_all_players (pl) { - if (!pl->ob || !pl->ns || !pl->ob->active) + object *ob = pl->ob; + + if (!ob || !pl->ns || !ob->active) continue; if (settings.casting_time) { - if (pl->ob->casting_time > 0) + if (ob->casting_time > 0.f) { - pl->ob->casting_time--; - pl->ob->start_holding = 1; + --ob->casting_time; + ob->start_holding = 1; } /* set spell_state so we can update the range in stats field */ - if ((pl->ob->casting_time == 0) && (pl->ob->start_holding == 1)) + if (pl->ob->casting_time == 0.f && pl->ob->start_holding == 1) pl->ob->start_holding = 0; } - do_some_living (pl->ob); + // process_events might steal us one speed slot, so adjust accordingly + if (ob->speed_left > 0.f) + ++ob->speed_left; + + do_some_living (ob); } } @@ -289,24 +295,15 @@ /* Then check if any players should use weapon-speed instead of speed */ for_all_players (pl) { - /* The code that did weapon_sp handling here was out of place - - * this isn't called until after the player has finished her - * actions, and is thus out of place. All we do here is bounds - * checking. - */ if (pl->has_hit) { - if (pl->ob->speed_left > pl->weapon_sp) - pl->ob->speed_left = pl->weapon_sp; + pl->ob->speed_left = min (pl->weapon_sp, pl->ob->speed_left + pl->weapon_sp); - /* This needs to be here - if the player is running, we need to - * clear this each tick, but new commands are not being received - * so execute_newserver_command() is never called - */ - pl->has_hit = 0; + if (pl->ob->speed_left > 0.f) + pl->has_hit = 0; } - else if (pl->ob->speed_left > pl->ob->speed) - pl->ob->speed_left = pl->ob->speed; + else + pl->ob->speed_left = min (pl->ob->speed, pl->ob->speed_left + pl->ob->speed); } } @@ -346,14 +343,13 @@ */ if (op->anim_speed && op->last_anim >= op->anim_speed) { - animate_object (op, op->type == PLAYER ? op->facing : op->direction); - + animate_object (op, op->contr ? op->facing : op->direction); op->last_anim = 1; } else - op->last_anim++; + ++op->last_anim; - if (op->speed_left > 0) + if (op->speed_left > 0.f) { --op->speed_left; process_object (op); @@ -362,11 +358,11 @@ continue; } - if (settings.casting_time == TRUE && op->casting_time > 0) - op->casting_time--; + if (settings.casting_time == TRUE && op->casting_time > 0.f) + --op->casting_time; - if (op->speed_left <= 0) - op->speed_left += FABS (op->speed); + if (!op->contr) + op->speed_left = min (abs (op->speed), op->speed_left + abs (op->speed)); } process_players2 ();