mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-03-04 04:30:21 +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
|
||||
|
||||
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 {
|
||||
case VehicleSpawnPad.VehicleOrder(player, vehicle) =>
|
||||
trace(s"order from $player for $vehicle received")
|
||||
|
|
@ -86,6 +95,20 @@ class VehicleSpawnControl(pad : VehicleSpawnPad) extends VehicleSpawnControlBase
|
|||
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 _ => ;
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +150,8 @@ object VehicleSpawnControl {
|
|||
object ProcessControl extends Enumeration {
|
||||
val
|
||||
Reminder,
|
||||
GetNewOrder
|
||||
GetNewOrder,
|
||||
Flush
|
||||
= Value
|
||||
}
|
||||
/**
|
||||
|
|
@ -232,6 +256,27 @@ object VehicleSpawnControl {
|
|||
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] = {
|
||||
// if(!iter.hasNext) {
|
||||
// None
|
||||
|
|
|
|||
|
|
@ -163,7 +163,8 @@ object VehicleSpawnPad {
|
|||
object Reminders extends Enumeration {
|
||||
val
|
||||
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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue