mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-16 08:55:18 +00:00
removing an active router will always clean up an active router telepad with which it is paired
This commit is contained in:
parent
561b23d265
commit
0d02d7b556
4 changed files with 36 additions and 31 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// Copyright (c) 2018 PSForever
|
||||
package net.psforever.objects.ce
|
||||
|
||||
import akka.actor.{ActorContext, Cancellable}
|
||||
import akka.actor.ActorContext
|
||||
import net.psforever.objects.{Default, TelepadDeployable, Vehicle}
|
||||
import net.psforever.objects.serverobject.PlanetSideServerObject
|
||||
import net.psforever.objects.serverobject.structures.Amenity
|
||||
|
|
@ -147,6 +147,12 @@ object TelepadLike {
|
|||
LocalAction.SendResponse(GenericObjectActionMessage(telepadGUID, 28))
|
||||
)
|
||||
}
|
||||
|
||||
def InitializeTelepadDeployable(zone: Zone, internal: InternalTelepad, pad: TelepadDeployable): Unit = {
|
||||
internal.Telepad = pad.GUID
|
||||
TelepadLike.StartRouterInternalTelepad(zone, internal.Owner.GUID, internal)
|
||||
pad.Actor ! TelepadLike.Activate(internal)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -157,8 +163,6 @@ object TelepadLike {
|
|||
* @param obj an entity that extends `TelepadLike`
|
||||
*/
|
||||
class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
||||
var setup: Cancellable = Default.Cancellable
|
||||
|
||||
def receive: akka.actor.Actor.Receive = {
|
||||
case TelepadLike.Activate(o: InternalTelepad) if obj eq o =>
|
||||
obj.Active = true
|
||||
|
|
@ -166,11 +170,9 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
|||
case TelepadLike.Deactivate(o: InternalTelepad) if obj eq o =>
|
||||
obj.Active = false
|
||||
val zone = obj.Zone
|
||||
zone.GUID(obj.Telepad) match {
|
||||
case Some(oldTpad: TelepadDeployable)
|
||||
if !obj.Active && !setup.isCancelled =>
|
||||
zone.GUID(obj.Telepad).collect {
|
||||
case oldTpad: TelepadDeployable if oldTpad.Active =>
|
||||
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
||||
case _ => ;
|
||||
}
|
||||
obj.Telepad = None
|
||||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
||||
|
|
@ -178,15 +180,20 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
|||
case TelepadLike.RequestLink(tpad: TelepadDeployable) =>
|
||||
val zone = obj.Zone
|
||||
if (obj.Active) {
|
||||
zone.GUID(obj.Telepad) match {
|
||||
case Some(oldTpad: TelepadDeployable) if !obj.Active && !setup.isCancelled =>
|
||||
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
||||
case _ => ;
|
||||
}
|
||||
obj.Telepad = tpad.GUID
|
||||
//zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.StartRouterInternalTelepad(obj.Owner.GUID, obj.GUID, obj))
|
||||
TelepadLike.StartRouterInternalTelepad(zone, obj.Owner.GUID, obj)
|
||||
tpad.Actor ! TelepadLike.Activate(obj)
|
||||
zone
|
||||
.GUID(obj.Telepad)
|
||||
.collect {
|
||||
case oldTpad: TelepadDeployable if oldTpad eq tpad =>
|
||||
Some(oldTpad)
|
||||
case oldTpad: TelepadDeployable if oldTpad.Active =>
|
||||
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
||||
TelepadLike.InitializeTelepadDeployable(zone, obj, tpad)
|
||||
Some(oldTpad)
|
||||
}
|
||||
.orElse {
|
||||
TelepadLike.InitializeTelepadDeployable(zone, obj, tpad)
|
||||
None
|
||||
}
|
||||
} else {
|
||||
val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("")
|
||||
zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed"))
|
||||
|
|
@ -200,6 +207,6 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
|||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
||||
}
|
||||
|
||||
case _ => ;
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import scala.concurrent.duration._
|
|||
class AntControl(vehicle: Vehicle)
|
||||
extends DeployingVehicleControl(vehicle)
|
||||
with AntTransferBehavior {
|
||||
def ChargeTransferObject = vehicle
|
||||
def ChargeTransferObject: Vehicle = vehicle
|
||||
|
||||
override def commonEnabledBehavior: Receive = super.commonEnabledBehavior.orElse(antBehavior)
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ class AntControl(vehicle: Vehicle)
|
|||
vehicle.Actor,
|
||||
TransferBehavior.Charging(Ntu.Nanites)
|
||||
)
|
||||
case _ => ;
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ class AntControl(vehicle: Vehicle)
|
|||
state match {
|
||||
case DriveState.Undeploying =>
|
||||
TryStopChargingEvent(vehicle)
|
||||
case _ => ;
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import net.psforever.types._
|
|||
class DeployingVehicleControl(vehicle: Vehicle)
|
||||
extends VehicleControl(vehicle)
|
||||
with DeploymentBehavior {
|
||||
def DeploymentObject = vehicle
|
||||
def DeploymentObject: Vehicle = vehicle
|
||||
|
||||
override def commonEnabledBehavior : Receive = super.commonEnabledBehavior.orElse(deployBehavior)
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ class DeployingVehicleControl(vehicle: Vehicle)
|
|||
override def commonDeleteBehavior : Receive =
|
||||
super.commonDeleteBehavior
|
||||
.orElse {
|
||||
case msg : Deployment.TryUndeploy =>
|
||||
case msg: Deployment.TryUndeploy =>
|
||||
deployBehavior.apply(msg)
|
||||
}
|
||||
|
||||
|
|
@ -53,7 +53,7 @@ class DeployingVehicleControl(vehicle: Vehicle)
|
|||
* Even when disabled, the vehicle can be made to undeploy.
|
||||
*/
|
||||
override def PrepareForDisabled(kickPassengers: Boolean) : Unit = {
|
||||
vehicle.Actor ! Deployment.TryUndeploy(DriveState.Undeploying)
|
||||
TryUndeployStateChange(DriveState.Undeploying)
|
||||
super.PrepareForDisabled(kickPassengers)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,11 +24,10 @@ class RouterControl(vehicle: Vehicle)
|
|||
override def specificResponseToDeployment(state: DriveState.Value): Unit = {
|
||||
state match {
|
||||
case DriveState.Deployed =>
|
||||
vehicle.Utility(UtilityType.internal_router_telepad_deployable) match {
|
||||
case Some(util: Utility.InternalTelepad) => util.Actor ! TelepadLike.Activate(util)
|
||||
case _ => ;
|
||||
vehicle.Utility(UtilityType.internal_router_telepad_deployable).collect {
|
||||
case util: Utility.InternalTelepad => util.Actor ! TelepadLike.Activate(util)
|
||||
}
|
||||
case _ => ;
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -40,11 +39,10 @@ class RouterControl(vehicle: Vehicle)
|
|||
override def specificResponseToUndeployment(state: DriveState.Value): Unit = {
|
||||
state match {
|
||||
case DriveState.Undeploying =>
|
||||
vehicle.Utility(UtilityType.internal_router_telepad_deployable) match {
|
||||
case Some(util: Utility.InternalTelepad) => util.Actor ! TelepadLike.Deactivate(util)
|
||||
case _ => ;
|
||||
vehicle.Utility(UtilityType.internal_router_telepad_deployable).collect {
|
||||
case util: Utility.InternalTelepad => util.Actor ! TelepadLike.Deactivate(util)
|
||||
}
|
||||
case _ => ;
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue