mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-16 08:55:18 +00:00
block mounting while vehicle in motion, or in control; if ejected early, end control early
This commit is contained in:
parent
b4fbebb8d7
commit
a41bb4e86f
3 changed files with 22 additions and 9 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue