added support for Lockers and access to Locker contents; modified RequestDelete to handle Locker, as well as previously neglected vehicle trunk contents; added Lockers to Hart C shuttle observation room

This commit is contained in:
FateJH 2018-01-22 20:45:05 -05:00
parent af796167b5
commit f5182030da
7 changed files with 161 additions and 27 deletions

View file

@ -500,6 +500,8 @@ object GlobalDefinitions {
val spawn_pad = new ObjectDefinition(800) { Name = "spawn_pad" }
val mb_locker = new ObjectDefinition(524) { Name = "mb_locker" }
val lock_external = new IFFLockDefinition
val door = new DoorDefinition

View file

@ -2,17 +2,55 @@
package net.psforever.objects
import net.psforever.objects.definition.EquipmentDefinition
import net.psforever.objects.definition.converter.LockerContainerConverter
import net.psforever.objects.equipment.{Equipment, EquipmentSize}
import net.psforever.objects.inventory.GridInventory
import net.psforever.objects.equipment.Equipment
import net.psforever.objects.inventory.{Container, GridInventory, InventoryItem}
import net.psforever.packet.game.PlanetSideGUID
class LockerContainer extends Equipment {
import scala.annotation.tailrec
class LockerContainer extends Equipment with Container {
private val inventory = GridInventory(30, 20)
def Inventory : GridInventory = inventory
def VisibleSlots : Set[Int] = Set.empty[Int]
override def Slot(slot : Int) : EquipmentSlot = {
if(inventory.Offset <= slot && slot <= inventory.LastIndex) {
inventory.Slot(slot)
}
else {
OffhandEquipmentSlot.BlockedSlot
}
}
def Fit(obj : Equipment) : Option[Int] = inventory.Fit(obj.Definition.Tile)
def Find(guid : PlanetSideGUID) : Option[Int] = {
findInInventory(inventory.Items.values.iterator, guid) match {
case Some(index) =>
Some(index)
case None =>
None
}
}
@tailrec private def findInInventory(iter : Iterator[InventoryItem], guid : PlanetSideGUID) : Option[Int] = {
if(!iter.hasNext) {
None
}
else {
val item = iter.next
if(item.obj.GUID == guid) {
Some(item.start)
}
else {
findInInventory(iter, guid)
}
}
}
def Definition : EquipmentDefinition = GlobalDefinitions.locker_container
}
@ -20,11 +58,4 @@ object LockerContainer {
def apply() : LockerContainer = {
new LockerContainer()
}
import net.psforever.packet.game.PlanetSideGUID
def apply(guid : PlanetSideGUID) : LockerContainer = {
val obj = new LockerContainer()
obj.GUID = guid
obj
}
}

View file

@ -188,6 +188,8 @@ class Player(private val name : String,
def Inventory : GridInventory = inventory
def Locker : LockerContainer = fifthSlot.Equipment.get.asInstanceOf[LockerContainer]
def Fit(obj : Equipment) : Option[Int] = {
recursiveHolsterFit(holsters.iterator, obj.Size) match {
case Some(index) =>

View file

@ -0,0 +1,33 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.serverobject.mblocker
import akka.actor.ActorContext
import net.psforever.objects.GlobalDefinitions
import net.psforever.objects.definition.ObjectDefinition
import net.psforever.objects.serverobject.PlanetSideServerObject
class Locker extends PlanetSideServerObject {
def Definition : ObjectDefinition = GlobalDefinitions.mb_locker
}
object Locker {
/**
* Overloaded constructor.
* @return a `VehicleSpawnPad` object
*/
def apply() : Locker = {
new Locker()
}
/**
* Instantiate an configure a `Locker` object
* @param id the unique id that will be assigned to this entity
* @param context a context to allow the object to properly set up `ActorSystem` functionality;
* not necessary for this object, but required by signature
* @return the `Locker` object
*/
def Constructor(id : Int, context : ActorContext) : Locker = {
val obj = Locker()
obj
}
}

View file

@ -2,7 +2,6 @@
package objects
import akka.actor.{Actor, Props}
import net.psforever.objects.GlobalDefinitions.order_terminal
import net.psforever.objects.guid.NumberPoolHub
import net.psforever.packet.game.PlanetSideGUID
import net.psforever.objects.serverobject.ServerObjectBuilder
@ -62,6 +61,7 @@ class ImplantTerminalMechObjectBuilderTest extends ActorTest {
}
class TerminalObjectBuilderTest extends ActorTest {
import net.psforever.objects.GlobalDefinitions.order_terminal
import net.psforever.objects.serverobject.terminals.Terminal
"TerminalObjectBuilder" should {
"build" in {
@ -99,6 +99,24 @@ class VehicleSpawnPadObjectBuilderTest extends ActorTest {
}
}
class LockerObjectBuilderTest extends ActorTest {
import net.psforever.objects.serverobject.mblocker.Locker
"LockerObjectBuilder" should {
"build" in {
val hub = ServerObjectBuilderTest.NumberPoolHub
val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1,
Locker.Constructor), hub), "locker")
actor ! "!"
val reply = receiveOne(Duration.create(1000, "ms"))
assert(reply.isInstanceOf[Locker])
assert(reply.asInstanceOf[Locker].HasGUID)
assert(reply.asInstanceOf[Locker].GUID == PlanetSideGUID(1))
assert(reply == hub(1).get)
}
}
}
object ServerObjectBuilderTest {
import net.psforever.objects.guid.source.LimitedNumberSource
def NumberPoolHub : NumberPoolHub = {