From 52ae7b82365ffda1436c62665839ded4d414feb4 Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Wed, 16 Sep 2026 18:35:09 +0700 Subject: [PATCH] feat(vehicles): enable direct vehicle boarding with F key via story enter and drive state --- .../Game/GameRouter.VehicleStory.cs | 1 + .../Game/GameRouter.Vehicles.cs | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/Ananta.Server/Ananta.Handlers/Game/GameRouter.VehicleStory.cs b/Ananta.Server/Ananta.Handlers/Game/GameRouter.VehicleStory.cs index f72a2e4..a375f6c 100644 --- a/Ananta.Server/Ananta.Handlers/Game/GameRouter.VehicleStory.cs +++ b/Ananta.Server/Ananta.Handlers/Game/GameRouter.VehicleStory.cs @@ -243,6 +243,7 @@ internal sealed partial class GameRouter { VehicleInstanceId = vehicleId, ControllerPid = pid }); await SendVehicleBoardingStatus(conn, unitId, vehicleId, seat, 2); conn.Log.Info($"[VEHICLE-STORY] enter begin vehicle={vehicleId} seat={seat} unit={unitId} status=2 lazy={lazyRegistered}"); + await ForceEnterVehicleAsync(conn.Session, vehicleId); } private async Task AdvanceVehicleEnter(Connection conn, VehicleStoryState story, int phase) diff --git a/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs b/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs index f0fd047..982d6ac 100644 --- a/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs +++ b/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs @@ -371,6 +371,27 @@ internal sealed partial class GameRouter } [Handler(MethodId.AskPlayerStartEnterOrExitVehicle, HandlerPacketKind.Notify)] + private async Task AskPlayerStartEnterOrExitVehicle(Connection conn, UxRpcMessage msg) + { + try + { + var drive = msg.GetArgs(); + conn.Log.Info($"[VEHICLE] AskPlayerStartEnterOrExitVehicle vehicle={drive.VehicleEntityId} enter={drive.EnterOrLeave} seat={drive.SeatIndex}"); + if (drive.EnterOrLeave) + { + await ForceEnterVehicleAsync(conn.Session, drive.VehicleEntityId); + } + else + { + await ForceExitVehicleAsync(conn.Session); + } + } + catch (Exception ex) + { + conn.Log.Warn($"[VEHICLE] AskPlayerStartEnterOrExitVehicle failed: {ex.Message}"); + } + } + [Handler(MethodId.AskPlayerFinishEnterOrExitVehicle, HandlerPacketKind.Notify)] [Handler(MethodId.AskVehicleStartMove, HandlerPacketKind.Notify)] [Handler(MethodId.AskVehicleStopMove, HandlerPacketKind.Notify)]