From 612bceb44037bdec33f2bde4359ea8f4ba1fad09 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Sun, 6 Oct 2019 14:02:44 -0400 Subject: [PATCH] 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) --- .../psforever/objects/vehicles/VehicleControl.scala | 10 +++++++++- pslogin/src/main/scala/WorldSessionActor.scala | 11 ++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/common/src/main/scala/net/psforever/objects/vehicles/VehicleControl.scala b/common/src/main/scala/net/psforever/objects/vehicles/VehicleControl.scala index b5e017a8..deafa3ae 100644 --- a/common/src/main/scala/net/psforever/objects/vehicles/VehicleControl.scala +++ b/common/src/main/scala/net/psforever/objects/vehicles/VehicleControl.scala @@ -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) diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index 76b8c796..3db5eff7 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -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") }