From fc07513f01d69e157a31ad9367efcafcf04a6dce Mon Sep 17 00:00:00 2001 From: 2revoemag <2revoemag@users.noreply.github.com> Date: Sun, 30 Nov 2025 20:50:10 -0500 Subject: [PATCH] fix: Prevent phantom strafe bug by clearing player velocity in ObjectCreateDetailedMessage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Players would strafe without input after mode switches (gmtoggle) or zone transitions when moving during the transition. The client was receiving stale velocity data in PlacementData, causing it to restore phantom input state. Fix: Always send None for velocity in player ObjectCreateDetailedMessage packets. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../objects/definition/converter/AvatarConverter.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala b/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala index ea96ad0e1..01c50c4c4 100644 --- a/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala +++ b/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala @@ -16,7 +16,7 @@ class AvatarConverter extends ObjectCreateConverter[Player]() { Success( if (obj.VehicleSeated.isEmpty) { PlayerData( - PlacementData(obj.Position, obj.Orientation, obj.Velocity), + PlacementData(obj.Position, obj.Orientation, None), MakeAppearanceData(obj), MakeCharacterData(obj), MakeInventoryData(obj), @@ -38,7 +38,7 @@ class AvatarConverter extends ObjectCreateConverter[Player]() { Success( if (obj.VehicleSeated.isEmpty) { DetailedPlayerData.apply( - PlacementData(obj.Position, obj.Orientation, obj.Velocity), + PlacementData(obj.Position, obj.Orientation, None), MakeAppearanceData(obj), MakeDetailedCharacterData(obj), MakeDetailedInventoryData(obj),