mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-13 15:34:42 +00:00
Merge pull request #204 from Fate-JH/destroy-v-term
Destroy the Vehicle Terminal
This commit is contained in:
commit
0590b575d0
3 changed files with 64 additions and 11 deletions
|
|
@ -44,6 +44,15 @@ class VehicleSpawnControl(pad : VehicleSpawnPad) extends VehicleSpawnControlBase
|
||||||
|
|
||||||
def FactionObject : FactionAffinity = pad
|
def FactionObject : FactionAffinity = pad
|
||||||
|
|
||||||
|
import akka.actor.SupervisorStrategy._
|
||||||
|
override val supervisorStrategy = {
|
||||||
|
import akka.actor.OneForOneStrategy
|
||||||
|
OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) {
|
||||||
|
case _ : akka.actor.ActorKilledException => Restart
|
||||||
|
case _ => Resume
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def receive : Receive = checkBehavior.orElse {
|
def receive : Receive = checkBehavior.orElse {
|
||||||
case VehicleSpawnPad.VehicleOrder(player, vehicle) =>
|
case VehicleSpawnPad.VehicleOrder(player, vehicle) =>
|
||||||
trace(s"order from $player for $vehicle received")
|
trace(s"order from $player for $vehicle received")
|
||||||
|
|
@ -86,6 +95,20 @@ class VehicleSpawnControl(pad : VehicleSpawnPad) extends VehicleSpawnControlBase
|
||||||
periodicReminder.cancel
|
periodicReminder.cancel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case VehicleSpawnControl.ProcessControl.Flush =>
|
||||||
|
if(!periodicReminder.isCancelled) {
|
||||||
|
periodicReminder.cancel
|
||||||
|
orders.foreach { VehicleSpawnControl.CancelOrder(_, Continent) }
|
||||||
|
orders = Nil
|
||||||
|
trackedOrder match {
|
||||||
|
case Some(entry) =>
|
||||||
|
VehicleSpawnControl.CancelOrder(entry, Continent)
|
||||||
|
case None => ;
|
||||||
|
}
|
||||||
|
trackedOrder = None
|
||||||
|
concealPlayer ! akka.actor.Kill //will cause the actor to restart, which will abort any trapped messages
|
||||||
|
}
|
||||||
|
|
||||||
case _ => ;
|
case _ => ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,7 +150,8 @@ object VehicleSpawnControl {
|
||||||
object ProcessControl extends Enumeration {
|
object ProcessControl extends Enumeration {
|
||||||
val
|
val
|
||||||
Reminder,
|
Reminder,
|
||||||
GetNewOrder
|
GetNewOrder,
|
||||||
|
Flush
|
||||||
= Value
|
= Value
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|
@ -232,6 +256,27 @@ object VehicleSpawnControl {
|
||||||
VehicleSpawnControl.recursiveBlockedReminder(recipients.iterator, wrecked)
|
VehicleSpawnControl.recursiveBlockedReminder(recipients.iterator, wrecked)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel this vehicle order and inform the person who made it, if possible.
|
||||||
|
* @param entry the order being cancelled
|
||||||
|
* @param zone the continent on which the vehicle was registered
|
||||||
|
* @param context an `ActorContext` object for which to create the `TaskResolver` object
|
||||||
|
*/
|
||||||
|
def CancelOrder(entry : VehicleSpawnControl.Order, zone : Zone)(implicit context : ActorContext) : Unit = {
|
||||||
|
val vehicle = entry.vehicle
|
||||||
|
if(vehicle.Seats.values.count(_.isOccupied) == 0) {
|
||||||
|
if(vehicle.Actor != ActorRef.noSender) {
|
||||||
|
VehicleSpawnControl.DisposeSpawnedVehicle(entry, zone)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
VehicleSpawnControl.DisposeVehicle(entry, zone)
|
||||||
|
}
|
||||||
|
if(entry.sendTo != ActorRef.noSender) {
|
||||||
|
entry.sendTo ! VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Cancelled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// @tailrec private final def recursiveFindOrder(iter : Iterator[VehicleSpawnControl.Order], target : ActorRef, index : Int = 0) : Option[Int] = {
|
// @tailrec private final def recursiveFindOrder(iter : Iterator[VehicleSpawnControl.Order], target : ActorRef, index : Int = 0) : Option[Int] = {
|
||||||
// if(!iter.hasNext) {
|
// if(!iter.hasNext) {
|
||||||
// None
|
// None
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,8 @@ object VehicleSpawnPad {
|
||||||
object Reminders extends Enumeration {
|
object Reminders extends Enumeration {
|
||||||
val
|
val
|
||||||
Queue, //optional data is the numeric position in the queue
|
Queue, //optional data is the numeric position in the queue
|
||||||
Blocked //optional data is a message regarding the blockage
|
Blocked, //optional data is a message regarding the blockage
|
||||||
|
Cancelled
|
||||||
= Value
|
= Value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import net.psforever.objects.serverobject.doors.Door
|
||||||
import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
|
import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
|
||||||
import net.psforever.objects.serverobject.locks.IFFLock
|
import net.psforever.objects.serverobject.locks.IFFLock
|
||||||
import net.psforever.objects.serverobject.mblocker.Locker
|
import net.psforever.objects.serverobject.mblocker.Locker
|
||||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||||
import net.psforever.objects.serverobject.pad.process.{AutoDriveControls, VehicleSpawnControlGuided}
|
import net.psforever.objects.serverobject.pad.process.{AutoDriveControls, VehicleSpawnControlGuided}
|
||||||
import net.psforever.objects.serverobject.structures.{Building, StructureType, WarpGate}
|
import net.psforever.objects.serverobject.structures.{Building, StructureType, WarpGate}
|
||||||
import net.psforever.objects.serverobject.terminals.{MatrixTerminalDefinition, ProximityTerminal, Terminal}
|
import net.psforever.objects.serverobject.terminals.{MatrixTerminalDefinition, ProximityTerminal, Terminal}
|
||||||
|
|
@ -435,7 +435,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
}
|
}
|
||||||
|
|
||||||
case VehicleResponse.ConcealPlayer(player_guid) =>
|
case VehicleResponse.ConcealPlayer(player_guid) =>
|
||||||
sendResponse(GenericObjectActionMessage(player_guid, 36))
|
//TODO this is the correct message; but, I don't know how to undo the effects of it
|
||||||
|
//sendResponse(GenericObjectActionMessage(player_guid, 36))
|
||||||
|
sendResponse(PlanetsideAttributeMessage(player_guid, 29, 1))
|
||||||
|
|
||||||
case VehicleResponse.DismountVehicle(unk1, unk2) =>
|
case VehicleResponse.DismountVehicle(unk1, unk2) =>
|
||||||
if(tplayer_guid != guid) {
|
if(tplayer_guid != guid) {
|
||||||
|
|
@ -491,11 +493,8 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
sendResponse(GenericObjectActionMessage(pad_guid, 92))
|
sendResponse(GenericObjectActionMessage(pad_guid, 92))
|
||||||
|
|
||||||
case VehicleResponse.RevealPlayer(player_guid) =>
|
case VehicleResponse.RevealPlayer(player_guid) =>
|
||||||
//TODO any action will cause the player to appear after the effects of ConcealPlayer
|
//TODO see note in ConcealPlayer
|
||||||
if(player.GUID == player_guid) {
|
sendResponse(PlanetsideAttributeMessage(player_guid, 29, 0))
|
||||||
sendResponse(ChatMsg(ChatMessageType.CMT_OPEN, true, "", "You are in a strange situation.", None))
|
|
||||||
KillPlayer(player)
|
|
||||||
}
|
|
||||||
|
|
||||||
case VehicleResponse.SeatPermissions(vehicle_guid, seat_group, permission) =>
|
case VehicleResponse.SeatPermissions(vehicle_guid, seat_group, permission) =>
|
||||||
if(tplayer_guid != guid) {
|
if(tplayer_guid != guid) {
|
||||||
|
|
@ -1096,7 +1095,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
case VehicleSpawnPad.Reminders.Blocked =>
|
case VehicleSpawnPad.Reminders.Blocked =>
|
||||||
s"The vehicle spawn where you placed your order is blocked. ${data.getOrElse("")}"
|
s"The vehicle spawn where you placed your order is blocked. ${data.getOrElse("")}"
|
||||||
case VehicleSpawnPad.Reminders.Queue =>
|
case VehicleSpawnPad.Reminders.Queue =>
|
||||||
s"Your position in the vehicle spawn queue is ${data.get}."
|
s"Your position in the vehicle spawn queue is ${data.getOrElse("last")}."
|
||||||
|
case VehicleSpawnPad.Reminders.Cancelled =>
|
||||||
|
"Your vehicle order has been cancelled."
|
||||||
})
|
})
|
||||||
sendResponse(ChatMsg(ChatMessageType.CMT_OPEN, true, "", msg, None))
|
sendResponse(ChatMsg(ChatMessageType.CMT_OPEN, true, "", msg, None))
|
||||||
|
|
||||||
|
|
@ -1704,7 +1705,13 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(messagetype == ChatMessageType.CMT_DESTROY) {
|
if(messagetype == ChatMessageType.CMT_DESTROY) {
|
||||||
self ! PacketCoding.CreateGamePacket(0, RequestDestroyMessage(PlanetSideGUID(contents.toInt)))
|
val guid = contents.toInt
|
||||||
|
continent.Map.TerminalToSpawnPad.get(guid) match {
|
||||||
|
case Some(padGUID) =>
|
||||||
|
continent.GUID(padGUID).get.asInstanceOf[VehicleSpawnPad].Actor ! VehicleSpawnControl.ProcessControl.Flush
|
||||||
|
case None =>
|
||||||
|
self ! PacketCoding.CreateGamePacket(0, RequestDestroyMessage(PlanetSideGUID(guid)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (messagetype == ChatMessageType.CMT_VOICE) {
|
if (messagetype == ChatMessageType.CMT_VOICE) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue