diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 8efdba38c..72c81d374 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1535,15 +1535,17 @@ void NPC::AI_DoMovement() { roambox_movingto_x = zone->random.Real(roambox_min_x+1,roambox_max_x-1); if (roambox_movingto_y > roambox_max_y || roambox_movingto_y < roambox_min_y) roambox_movingto_y = zone->random.Real(roambox_min_y+1,roambox_max_y-1); + Log(Logs::Detail, Logs::AI, + "Roam Box: d=%.3f (%.3f->%.3f,%.3f->%.3f): Go To (%.3f,%.3f)", + roambox_distance, roambox_min_x, roambox_max_x, roambox_min_y, + roambox_max_y, roambox_movingto_x, roambox_movingto_y); } - Log(Logs::Detail, Logs::AI, "Roam Box: d=%.3f (%.3f->%.3f,%.3f->%.3f): Go To (%.3f,%.3f)", - roambox_distance, roambox_min_x, roambox_max_x, roambox_min_y, roambox_max_y, roambox_movingto_x, roambox_movingto_y); - - float new_z = this->FindGroundZ(m_Position.x, m_Position.y, 5) + this->GetZOffset(); - - if (!CalculateNewPosition2(roambox_movingto_x, roambox_movingto_y, new_z, walksp, true)) + // Keep calling with updates, using wherever we are in Z. + if (!MakeNewPositionAndSendUpdate(roambox_movingto_x, + roambox_movingto_y, m_Position.z, walksp)) { + this->FixZ(); // FixZ on final arrival point. roambox_movingto_x = roambox_max_x + 1; // force update pLastFightingDelayMoving = Timer::GetCurrentTime() + RandomTimer(roambox_min_delay, roambox_delay); SetMoving(false);