From 445176006f901b0deab4b3b8e4f0383cf3865519 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Fri, 24 May 2024 23:51:44 -0400 Subject: [PATCH] deployable vehicles should properly deploy again now that they don't have to fight with themselves for the ability to deploy --- .../actors/session/normal/VehicleLogic.scala | 1 - .../deploy/DeploymentBehavior.scala | 23 +++++++++++++------ .../control/DeployingVehicleControl.scala | 5 ++++ .../vehicles/control/VehicleControl.scala | 9 -------- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala b/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala index fdc8c1180..6b293ed75 100644 --- a/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/VehicleLogic.scala @@ -282,7 +282,6 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex log.warn(s"${player.Name} must be mounted as the driver to request a deployment change") } else { log.info(s"${player.Name} is requesting a deployment change for ${obj.Definition.Name} - $deploy_state") - obj.Actor ! Deployment.TryDeploymentChange(deploy_state) continent.Transport ! Zone.Vehicle.TryDeploymentChange(obj, deploy_state) } obj diff --git a/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala b/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala index e495f32b1..664facf54 100644 --- a/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala +++ b/src/main/scala/net/psforever/objects/serverobject/deploy/DeploymentBehavior.scala @@ -1,7 +1,8 @@ // Copyright (c) 2017 PSForever package net.psforever.objects.serverobject.deploy -import akka.actor.Actor +import akka.actor.{Actor, Cancellable} +import net.psforever.objects.Default import net.psforever.types.{DriveState, Vector3} import net.psforever.services.Service import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} @@ -22,8 +23,14 @@ import scala.concurrent.duration._ trait DeploymentBehavior { _: Actor => + private var deploymentTimer: Cancellable = Default.Cancellable + def DeploymentObject: Deployment.DeploymentObject + def deploymentPostStop(): Unit = { + deploymentTimer.cancel() + } + val deployBehavior: Receive = { case Deployment.TryDeploymentChange(state) => sender() ! TryDeploymentStateChange(state) @@ -98,9 +105,10 @@ trait DeploymentBehavior { obj.Velocity = Some(Vector3.Zero) //no velocity zone.VehicleEvents ! VehicleServiceMessage( zoneChannel, - VehicleAction.DeployRequest(GUID0, guid, state, 0, false, Vector3.Zero) + VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero) ) - context.system.scheduler.scheduleOnce( + deploymentTimer.cancel() + deploymentTimer = context.system.scheduler.scheduleOnce( obj.DeployTime milliseconds, obj.Actor, Deployment.TryDeploy(DriveState.Deployed) @@ -110,7 +118,7 @@ trait DeploymentBehavior { obj.Velocity = Some(Vector3.Zero) //no velocity zone.VehicleEvents ! VehicleServiceMessage( zoneChannel, - VehicleAction.DeployRequest(GUID0, guid, state, 0, false, Vector3.Zero) + VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero) ) state } else { @@ -130,10 +138,11 @@ trait DeploymentBehavior { if (state == DriveState.Undeploying) { zone.VehicleEvents ! VehicleServiceMessage( zoneChannel, - VehicleAction.DeployRequest(GUID0, guid, state, 0, false, Vector3.Zero) + VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero) ) import scala.concurrent.ExecutionContext.Implicits.global - context.system.scheduler.scheduleOnce( + deploymentTimer.cancel() + deploymentTimer = context.system.scheduler.scheduleOnce( obj.UndeployTime milliseconds, obj.Actor, Deployment.TryUndeploy(DriveState.Mobile) @@ -142,7 +151,7 @@ trait DeploymentBehavior { } else if (state == DriveState.Mobile) { zone.VehicleEvents ! VehicleServiceMessage( zoneChannel, - VehicleAction.DeployRequest(GUID0, guid, state, 0, false, Vector3.Zero) + VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero) ) state } else { diff --git a/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala index 4c33ec918..14faf3d90 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala @@ -22,6 +22,11 @@ class DeployingVehicleControl(vehicle: Vehicle) with DeploymentBehavior { def DeploymentObject: Vehicle = vehicle + override def postStop(): Unit = { + super.postStop() + deploymentPostStop() + } + override def commonEnabledBehavior : Receive = super.commonEnabledBehavior.orElse(deployBehavior) /** diff --git a/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala index 3ede78821..e65863eae 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/VehicleControl.scala @@ -75,15 +75,6 @@ class VehicleControl(vehicle: Vehicle) def CargoObject: Vehicle = vehicle def AffectedObject: Vehicle = vehicle -// SetInteraction(EnvironmentAttribute.Water, doInteractingWithWater) -// SetInteraction(EnvironmentAttribute.Lava, doInteractingWithLava) -// SetInteraction(EnvironmentAttribute.Death, doInteractingWithDeath) -// SetInteraction(EnvironmentAttribute.MovementFieldTrigger, doInteractingWithMovementTrigger) -// if (!GlobalDefinitions.isFlightVehicle(vehicle.Definition)) { -// //can recover from sinking disability -// SetInteractionStop(EnvironmentAttribute.Water, stopInteractingWithWater) -// } - /** cheap flag for whether the vehicle is decaying */ var decaying : Boolean = false /** primary vehicle decay timer */