fix(B.6 slice 2): don't cancel autowalk on the companion InterpretedMotionState

Prior trace (launch-slice2.log) showed ACE follows every mt=0x06
MoveToObject immediately with an mt=0x00 InterpretedMotionState
(cmd=0x0007 RunForward, fwdSpd=2.86) — the locomotion echo for the
same auto-walk, NOT a cancel. My wiring was treating the second
packet as 'server intent changed' and calling EndServerAutoWalk,
which killed the auto-walk on frame 1. Result: [autowalk-begin]
immediately followed by [autowalk-end reason=motion-non-moveto] and
zero visible motion.

Remove the over-eager cancel. The two natural cancel paths remain:
arrival detection inside ApplyAutoWalkOverlay, and user-input
cancellation (any movement key). A fresh MoveToObject re-targets via
BeginServerAutoWalk overwrite, which is the correct sticky-targeting
behavior.
This commit is contained in:
Erik 2026-05-14 20:20:21 +02:00
parent b936ef8b0b
commit f18de7ccde

View file

@ -3345,13 +3345,19 @@ public sealed class GameWindow : IDisposable
$"[autowalk-begin] dest=({destWorld.X:F2},{destWorld.Y:F2},{destWorld.Z:F2}) minDist={pathData.MinDistance:F2} objDist={pathData.DistanceToObject:F2} towards={update.MotionState.MoveTowards}"));
}
}
else if (_playerController.IsServerAutoWalking)
{
// A non-MoveTo motion arrived (e.g., Ready, or a
// user-input echo) — server's auto-walk intent is
// gone; release the local driver.
_playerController.EndServerAutoWalk("motion-non-moveto");
}
// Note: do NOT cancel auto-walk on a non-MoveTo motion
// arriving. The trace (2026-05-14, launch-slice2.log)
// shows ACE follows every mt=0x06 MoveToObject
// immediately with an mt=0x00 InterpretedMotionState
// (cmd=0x0007 RunForward, fwdSpd=2.86) — the
// companion locomotion echo, NOT a cancel. The two
// travel as separate packets but both belong to the
// same auto-walk. Cancelling on the InterpretedMotionState
// killed the auto-walk on frame 1. Arrival detection
// (inside ApplyAutoWalkOverlay) and user-input
// cancellation (same) are the two natural end paths;
// a fresh MoveToObject re-targets via BeginServerAutoWalk
// overwrite.
}
}
else