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
|
// Copyright (c) 2018 PSForever
|
||||||
package net.psforever.objects.ce
|
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.{Default, TelepadDeployable, Vehicle}
|
||||||
import net.psforever.objects.serverobject.PlanetSideServerObject
|
import net.psforever.objects.serverobject.PlanetSideServerObject
|
||||||
import net.psforever.objects.serverobject.structures.Amenity
|
import net.psforever.objects.serverobject.structures.Amenity
|
||||||
|
|
@ -147,6 +147,12 @@ object TelepadLike {
|
||||||
LocalAction.SendResponse(GenericObjectActionMessage(telepadGUID, 28))
|
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`
|
* @param obj an entity that extends `TelepadLike`
|
||||||
*/
|
*/
|
||||||
class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
||||||
var setup: Cancellable = Default.Cancellable
|
|
||||||
|
|
||||||
def receive: akka.actor.Actor.Receive = {
|
def receive: akka.actor.Actor.Receive = {
|
||||||
case TelepadLike.Activate(o: InternalTelepad) if obj eq o =>
|
case TelepadLike.Activate(o: InternalTelepad) if obj eq o =>
|
||||||
obj.Active = true
|
obj.Active = true
|
||||||
|
|
@ -166,11 +170,9 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor {
|
||||||
case TelepadLike.Deactivate(o: InternalTelepad) if obj eq o =>
|
case TelepadLike.Deactivate(o: InternalTelepad) if obj eq o =>
|
||||||
obj.Active = false
|
obj.Active = false
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
zone.GUID(obj.Telepad) match {
|
zone.GUID(obj.Telepad).collect {
|
||||||
case Some(oldTpad: TelepadDeployable)
|
case oldTpad: TelepadDeployable if oldTpad.Active =>
|
||||||
if !obj.Active && !setup.isCancelled =>
|
|
||||||
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
||||||
case _ => ;
|
|
||||||
}
|
}
|
||||||
obj.Telepad = None
|
obj.Telepad = None
|
||||||
zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.SendResponse(ObjectDeleteMessage(obj.GUID, 0)))
|
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) =>
|
case TelepadLike.RequestLink(tpad: TelepadDeployable) =>
|
||||||
val zone = obj.Zone
|
val zone = obj.Zone
|
||||||
if (obj.Active) {
|
if (obj.Active) {
|
||||||
zone.GUID(obj.Telepad) match {
|
zone
|
||||||
case Some(oldTpad: TelepadDeployable) if !obj.Active && !setup.isCancelled =>
|
.GUID(obj.Telepad)
|
||||||
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
.collect {
|
||||||
case _ => ;
|
case oldTpad: TelepadDeployable if oldTpad eq tpad =>
|
||||||
}
|
Some(oldTpad)
|
||||||
obj.Telepad = tpad.GUID
|
case oldTpad: TelepadDeployable if oldTpad.Active =>
|
||||||
//zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.StartRouterInternalTelepad(obj.Owner.GUID, obj.GUID, obj))
|
oldTpad.Actor ! TelepadLike.SeverLink(obj)
|
||||||
TelepadLike.StartRouterInternalTelepad(zone, obj.Owner.GUID, obj)
|
TelepadLike.InitializeTelepadDeployable(zone, obj, tpad)
|
||||||
tpad.Actor ! TelepadLike.Activate(obj)
|
Some(oldTpad)
|
||||||
|
}
|
||||||
|
.orElse {
|
||||||
|
TelepadLike.InitializeTelepadDeployable(zone, obj, tpad)
|
||||||
|
None
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("")
|
val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("")
|
||||||
zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed"))
|
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)))
|
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)
|
class AntControl(vehicle: Vehicle)
|
||||||
extends DeployingVehicleControl(vehicle)
|
extends DeployingVehicleControl(vehicle)
|
||||||
with AntTransferBehavior {
|
with AntTransferBehavior {
|
||||||
def ChargeTransferObject = vehicle
|
def ChargeTransferObject: Vehicle = vehicle
|
||||||
|
|
||||||
override def commonEnabledBehavior: Receive = super.commonEnabledBehavior.orElse(antBehavior)
|
override def commonEnabledBehavior: Receive = super.commonEnabledBehavior.orElse(antBehavior)
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ class AntControl(vehicle: Vehicle)
|
||||||
vehicle.Actor,
|
vehicle.Actor,
|
||||||
TransferBehavior.Charging(Ntu.Nanites)
|
TransferBehavior.Charging(Ntu.Nanites)
|
||||||
)
|
)
|
||||||
case _ => ;
|
case _ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ class AntControl(vehicle: Vehicle)
|
||||||
state match {
|
state match {
|
||||||
case DriveState.Undeploying =>
|
case DriveState.Undeploying =>
|
||||||
TryStopChargingEvent(vehicle)
|
TryStopChargingEvent(vehicle)
|
||||||
case _ => ;
|
case _ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import net.psforever.types._
|
||||||
class DeployingVehicleControl(vehicle: Vehicle)
|
class DeployingVehicleControl(vehicle: Vehicle)
|
||||||
extends VehicleControl(vehicle)
|
extends VehicleControl(vehicle)
|
||||||
with DeploymentBehavior {
|
with DeploymentBehavior {
|
||||||
def DeploymentObject = vehicle
|
def DeploymentObject: Vehicle = vehicle
|
||||||
|
|
||||||
override def commonEnabledBehavior : Receive = super.commonEnabledBehavior.orElse(deployBehavior)
|
override def commonEnabledBehavior : Receive = super.commonEnabledBehavior.orElse(deployBehavior)
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@ class DeployingVehicleControl(vehicle: Vehicle)
|
||||||
override def commonDeleteBehavior : Receive =
|
override def commonDeleteBehavior : Receive =
|
||||||
super.commonDeleteBehavior
|
super.commonDeleteBehavior
|
||||||
.orElse {
|
.orElse {
|
||||||
case msg : Deployment.TryUndeploy =>
|
case msg: Deployment.TryUndeploy =>
|
||||||
deployBehavior.apply(msg)
|
deployBehavior.apply(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ class DeployingVehicleControl(vehicle: Vehicle)
|
||||||
* Even when disabled, the vehicle can be made to undeploy.
|
* Even when disabled, the vehicle can be made to undeploy.
|
||||||
*/
|
*/
|
||||||
override def PrepareForDisabled(kickPassengers: Boolean) : Unit = {
|
override def PrepareForDisabled(kickPassengers: Boolean) : Unit = {
|
||||||
vehicle.Actor ! Deployment.TryUndeploy(DriveState.Undeploying)
|
TryUndeployStateChange(DriveState.Undeploying)
|
||||||
super.PrepareForDisabled(kickPassengers)
|
super.PrepareForDisabled(kickPassengers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,10 @@ class RouterControl(vehicle: Vehicle)
|
||||||
override def specificResponseToDeployment(state: DriveState.Value): Unit = {
|
override def specificResponseToDeployment(state: DriveState.Value): Unit = {
|
||||||
state match {
|
state match {
|
||||||
case DriveState.Deployed =>
|
case DriveState.Deployed =>
|
||||||
vehicle.Utility(UtilityType.internal_router_telepad_deployable) match {
|
vehicle.Utility(UtilityType.internal_router_telepad_deployable).collect {
|
||||||
case Some(util: Utility.InternalTelepad) => util.Actor ! TelepadLike.Activate(util)
|
case util: Utility.InternalTelepad => util.Actor ! TelepadLike.Activate(util)
|
||||||
case _ => ;
|
|
||||||
}
|
}
|
||||||
case _ => ;
|
case _ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -40,11 +39,10 @@ class RouterControl(vehicle: Vehicle)
|
||||||
override def specificResponseToUndeployment(state: DriveState.Value): Unit = {
|
override def specificResponseToUndeployment(state: DriveState.Value): Unit = {
|
||||||
state match {
|
state match {
|
||||||
case DriveState.Undeploying =>
|
case DriveState.Undeploying =>
|
||||||
vehicle.Utility(UtilityType.internal_router_telepad_deployable) match {
|
vehicle.Utility(UtilityType.internal_router_telepad_deployable).collect {
|
||||||
case Some(util: Utility.InternalTelepad) => util.Actor ! TelepadLike.Deactivate(util)
|
case util: Utility.InternalTelepad => util.Actor ! TelepadLike.Deactivate(util)
|
||||||
case _ => ;
|
|
||||||
}
|
}
|
||||||
case _ => ;
|
case _ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue