fix(Core/Movement): Force replan when dest shifts >40y from cached spline endpoint

This commit is contained in:
bash 2026-05-08 22:58:15 +02:00
parent 21b68caffc
commit 82bf33f3d4

View File

@ -72,7 +72,16 @@ bool NewRpgBaseAction::MoveFarTo(WorldPosition dest)
if (bot->isMoving() && lastMove.lastMoveToMapId == bot->GetMapId()) if (bot->isMoving() && lastMove.lastMoveToMapId == bot->GetMapId())
{ {
float remaining = bot->GetExactDist(lastMove.lastMoveToX, lastMove.lastMoveToY, lastMove.lastMoveToZ); float remaining = bot->GetExactDist(lastMove.lastMoveToX, lastMove.lastMoveToY, lastMove.lastMoveToZ);
if (remaining > 10.0f) // Only ride the existing spline if the cached endpoint is
// still close to the requested dest. A dest shift > 40y is
// a target change (objective POI -> turn-in NPC, new POI
// selection, …) and needs a fresh travelplan/mmap probe;
// otherwise the bot rides a stale spline straight through
// geometry.
float endpointToDest = dest.distance(WorldPosition(
lastMove.lastMoveToMapId, lastMove.lastMoveToX,
lastMove.lastMoveToY, lastMove.lastMoveToZ));
if (remaining > 10.0f && endpointToDest <= 40.0f)
{ {
EmitDebugMove("MoveFar", "spline-plan", EmitDebugMove("MoveFar", "spline-plan",
lastMove.lastMoveToX, lastMove.lastMoveToY, lastMove.lastMoveToZ); lastMove.lastMoveToX, lastMove.lastMoveToY, lastMove.lastMoveToZ);