block mounting while vehicle in motion, or in control; if ejected early, end control early

This commit is contained in:
Fate-JH 2023-05-14 01:01:47 -04:00
parent b4fbebb8d7
commit a41bb4e86f
3 changed files with 22 additions and 9 deletions

View file

@ -301,6 +301,9 @@ class SessionMountHandlers(
obj match { obj match {
case v: Vehicle case v: Vehicle
if seatNum == 0 && Vector3.MagnitudeSquared(v.Velocity.getOrElse(Vector3.Zero)) > 0f => if seatNum == 0 && Vector3.MagnitudeSquared(v.Velocity.getOrElse(Vector3.Zero)) > 0f =>
sessionData.vehicles.serverVehicleControlVelocity.collect { _ =>
sessionData.vehicles.ServerVehicleOverrideEnd(v)
}
v.Velocity = Vector3.Zero v.Velocity = Vector3.Zero
continent.VehicleEvents ! VehicleServiceMessage( continent.VehicleEvents ! VehicleServiceMessage(
continent.id, continent.id,

View file

@ -265,8 +265,6 @@ class SessionVehicleHandlers(
} }
case VehicleResponse.PlayerSeatedInVehicle(vehicle, _) => 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) Vehicles.ReloadAccessPermissions(vehicle, player.Name)
sessionData.vehicles.ServerVehicleLock(vehicle) sessionData.vehicles.ServerVehicleLock(vehicle)
@ -279,8 +277,7 @@ class SessionVehicleHandlers(
) )
case VehicleResponse.ServerVehicleOverrideEnd(vehicle, _) => case VehicleResponse.ServerVehicleOverrideEnd(vehicle, _) =>
session = session.copy(avatar = avatar.copy(vehicle = Some(vehicle.GUID))) sessionData.vehicles.ServerVehicleOverrideEnd(vehicle)
sessionData.vehicles.DriverVehicleControl(vehicle, vehicle.Definition.AutoPilotSpeed2)
case VehicleResponse.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, data) => case VehicleResponse.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, data) =>
sendResponse(ChatMsg( sendResponse(ChatMsg(

View file

@ -268,12 +268,15 @@ class VehicleOperations(
def handleMountVehicle(pkt: MountVehicleMsg): Unit = { def handleMountVehicle(pkt: MountVehicleMsg): Unit = {
val MountVehicleMsg(_, mountable_guid, entry_point) = pkt val MountVehicleMsg(_, mountable_guid, entry_point) = pkt
sessionData.validObject(mountable_guid, decorator = "MountVehicle") match { sessionData.validObject(mountable_guid, decorator = "MountVehicle").collect {
case Some(obj: Mountable) => case obj: Mountable if serverVehicleControlVelocity.isEmpty =>
obj.Actor ! Mountable.TryMount(player, entry_point) 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}") log.error(s"MountVehicleMsg: object ${mountable_guid.guid} not a mountable thing, ${player.Name}")
case None => ;
} }
} }
@ -297,7 +300,7 @@ class VehicleOperations(
None None
}) match { }) match {
case Some(_) if serverVehicleControlVelocity.nonEmpty => 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" s"DismountVehicleMsg: ${player.Name} can not dismount from vehicle while server has asserted control; please wait"
) )
case Some(obj: Mountable) => 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. * Lock all applicable controls of the current vehicle.
* This includes forward motion, turning, and, if applicable, strafing. * This includes forward motion, turning, and, if applicable, strafing.