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)]