diff --git a/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala index 997f2624a..9af1aeeb6 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala @@ -301,6 +301,9 @@ class SessionMountHandlers( obj match { case v: Vehicle if seatNum == 0 && Vector3.MagnitudeSquared(v.Velocity.getOrElse(Vector3.Zero)) > 0f => + sessionData.vehicles.serverVehicleControlVelocity.collect { _ => + sessionData.vehicles.ServerVehicleOverrideEnd(v) + } v.Velocity = Vector3.Zero continent.VehicleEvents ! VehicleServiceMessage( continent.id, diff --git a/src/main/scala/net/psforever/actors/session/support/SessionVehicleHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionVehicleHandlers.scala index 270c9dacd..651009208 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionVehicleHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionVehicleHandlers.scala @@ -265,8 +265,6 @@ class SessionVehicleHandlers( } case VehicleResponse.PlayerSeatedInVehicle(vehicle, _) => - val vehicle_guid = vehicle.GUID - sendResponse(PlanetsideAttributeMessage(vehicle_guid, attribute_type=22, attribute_value=0L)) //mount points on Vehicles.ReloadAccessPermissions(vehicle, player.Name) sessionData.vehicles.ServerVehicleLock(vehicle) @@ -279,8 +277,7 @@ class SessionVehicleHandlers( ) case VehicleResponse.ServerVehicleOverrideEnd(vehicle, _) => - session = session.copy(avatar = avatar.copy(vehicle = Some(vehicle.GUID))) - sessionData.vehicles.DriverVehicleControl(vehicle, vehicle.Definition.AutoPilotSpeed2) + sessionData.vehicles.ServerVehicleOverrideEnd(vehicle) case VehicleResponse.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, data) => sendResponse(ChatMsg( diff --git a/src/main/scala/net/psforever/actors/session/support/VehicleOperations.scala b/src/main/scala/net/psforever/actors/session/support/VehicleOperations.scala index 0285d72f2..e46914eb9 100644 --- a/src/main/scala/net/psforever/actors/session/support/VehicleOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/VehicleOperations.scala @@ -268,12 +268,15 @@ class VehicleOperations( def handleMountVehicle(pkt: MountVehicleMsg): Unit = { val MountVehicleMsg(_, mountable_guid, entry_point) = pkt - sessionData.validObject(mountable_guid, decorator = "MountVehicle") match { - case Some(obj: Mountable) => + sessionData.validObject(mountable_guid, decorator = "MountVehicle").collect { + case obj: Mountable if serverVehicleControlVelocity.isEmpty => obj.Actor ! Mountable.TryMount(player, entry_point) - case Some(_) => + case _: Mountable => + log.warn( + s"DismountVehicleMsg: ${player.Name} can not mount while server has asserted control; please wait" + ) + case _ => log.error(s"MountVehicleMsg: object ${mountable_guid.guid} not a mountable thing, ${player.Name}") - case None => ; } } @@ -297,7 +300,7 @@ class VehicleOperations( None }) match { case Some(_) if serverVehicleControlVelocity.nonEmpty => - log.debug( + log.warn( s"DismountVehicleMsg: ${player.Name} can not dismount from vehicle while server has asserted control; please wait" ) case Some(obj: Mountable) => @@ -594,6 +597,16 @@ class VehicleOperations( ) } + /** + * + */ + def ServerVehicleOverrideEnd(vehicle: Vehicle): Unit = { + val vehicleGuid = vehicle.GUID + session = session.copy(avatar = avatar.copy(vehicle = Some(vehicleGuid))) + sessionData.vehicles.DriverVehicleControl(vehicle, vehicle.Definition.AutoPilotSpeed2) + sendResponse(PlanetsideAttributeMessage(vehicleGuid, attribute_type=22, attribute_value=0L)) //mount points on + } + /** * Lock all applicable controls of the current vehicle. * This includes forward motion, turning, and, if applicable, strafing.