From 4d2639b54d98429594888e7fded5d1b8c8d715a5 Mon Sep 17 00:00:00 2001 From: 2revoemag Date: Sun, 30 Nov 2025 21:48:50 -0500 Subject: [PATCH] fix: Prevent phantom strafe bug by clearing player velocity in ObjectCreateDetailedMessage (#1322) 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: 2revoemag <2revoemag@users.noreply.github.com> 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),