re-initialized vehicle utility actors properly depending in regards to what zone the vehicle belongs; this affects pretty much every utility (initially observed in AMS terminals specifically); touch-up on pickup and drop item ops (#271)

This commit is contained in:
Fate-JH 2019-10-06 14:02:44 -04:00 committed by GitHub
parent 4fe871455d
commit 612bceb440
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 4 deletions

View file

@ -1,7 +1,7 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.vehicles
import akka.actor.Actor
import akka.actor.{Actor, ActorRef}
import net.psforever.objects.Vehicle
import net.psforever.objects.ballistics.VehicleSource
import net.psforever.objects.serverobject.mount.{Mountable, MountableBehavior}
@ -33,6 +33,14 @@ class VehicleControl(vehicle : Vehicle) extends Actor
def receive : Receive = Enabled
override def postStop() : Unit = {
super.postStop()
vehicle.Utilities.values.foreach { util =>
util().Actor ! akka.actor.PoisonPill
util().Actor = ActorRef.noSender
}
}
def Enabled : Receive = checkBehavior
.orElse(deployBehavior)
.orElse(dismountBehavior)

View file

@ -607,6 +607,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
case Zone.Ground.CanNotDropItem(zone, item, reason) =>
log.warn(s"DropItem: $player tried to drop a $item on the ground, but $reason")
if(!item.HasGUID) {
log.warn(s"DropItem: zone ${continent.Id} contents may be in disarray")
}
case Zone.Ground.ItemInHand(item : BoomerTrigger) =>
if(PutItemInHand(item)) {
@ -640,6 +643,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
log.warn(s"DropItem: finding a $item on the ground was suggested, but $player can not reach it")
case None =>
log.warn(s"DropItem: finding an item ($item_guid) on the ground was suggested, but $player can not see it")
sendResponse(ObjectDeleteMessage(item_guid, 0))
}
case Zone.Deployable.DeployableIsBuilt(obj, tool) =>
@ -3653,18 +3657,19 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ DropItemMessage(item_guid) =>
log.info(s"DropItem: $msg")
continent.GUID(item_guid) match {
case Some(item : Equipment) =>
case Some(anItem : Equipment) =>
player.FreeHand.Equipment match {
case Some(_) =>
case Some(item) =>
if(item.GUID == item_guid) {
continent.Ground ! Zone.Ground.DropItem(item, player.Position, player.Orientation)
}
case None =>
log.warn(s"DropItem: $player wanted to drop a $item, but it wasn't at hand")
log.warn(s"DropItem: $player wanted to drop a $anItem, but it wasn't at hand")
}
case Some(obj) => //TODO LLU
log.warn(s"DropItem: $player wanted to drop a $obj, but that isn't possible")
case None =>
sendResponse(ObjectDeleteMessage(item_guid, 0)) //this is fine; item doesn't exist to the server anyway
log.warn(s"DropItem: $player wanted to drop an item ($item_guid), but it was nowhere to be found")
}