mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-11 22:44:37 +00:00
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:
parent
af796167b5
commit
f5182030da
7 changed files with 161 additions and 27 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) =>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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 = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue