PSF-BotServer/common/src/test/scala/game/objectcreate/LockerContainerDataTest.scala

71 lines
3.2 KiB
Scala
Raw Normal View History

// Copyright (c) 2017 PSForever
package game.objectcreate
import net.psforever.packet.PacketCoding
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
import net.psforever.packet.game.objectcreate._
import org.specs2.mutable._
import scodec.bits._
class LockerContainerDataTest extends Specification {
val string_locker_container = hex"17 AF010000 E414C0C00000000000000000000600000818829DC2E030000000202378620D80C00000378FA0FADC000006F1FC199D800000"
"LockerContainerData" should {
"decode" in {
PacketCoding.DecodePacket(string_locker_container).require match {
case ObjectCreateMessage(len, cls, guid, parent, data) =>
len mustEqual 431
cls mustEqual ObjectClass.locker_container
guid mustEqual PlanetSideGUID(3148)
parent.isDefined mustEqual false
data.isDefined mustEqual true
data.get.isInstanceOf[LockerContainerData] mustEqual true
val locker = data.get.asInstanceOf[LockerContainerData]
val contents = locker.inventory.contents
contents.size mustEqual 3
//0
contents.head.objectClass mustEqual ObjectClass.nano_dispenser
contents.head.guid mustEqual PlanetSideGUID(2935)
contents.head.parentSlot mustEqual 0
contents.head.obj.isInstanceOf[WeaponData] mustEqual true
val dispenser = contents.head.obj.asInstanceOf[WeaponData]
dispenser.unk1 mustEqual 0x6
dispenser.unk2 mustEqual 0x0
dispenser.ammo.head.objectClass mustEqual ObjectClass.armor_canister
dispenser.ammo.head.guid mustEqual PlanetSideGUID(3426)
dispenser.ammo.head.parentSlot mustEqual 0
dispenser.ammo.head.obj.isInstanceOf[AmmoBoxData] mustEqual true
dispenser.ammo.head.obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
//1
contents(1).objectClass mustEqual ObjectClass.armor_canister
contents(1).guid mustEqual PlanetSideGUID(4090)
contents(1).parentSlot mustEqual 45
contents(1).obj.isInstanceOf[AmmoBoxData] mustEqual true
contents(1).obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
//2
contents(2).objectClass mustEqual ObjectClass.armor_canister
contents(2).guid mustEqual PlanetSideGUID(3326)
contents(2).parentSlot mustEqual 78
contents(2).obj.isInstanceOf[AmmoBoxData] mustEqual true
contents(2).obj.asInstanceOf[AmmoBoxData].unk mustEqual 0
case _ =>
ko
}
}
"encode" in {
val obj = LockerContainerData(
InventoryData(
InventoryItemData(ObjectClass.nano_dispenser, PlanetSideGUID(2935), 0, WeaponData(0x6, 0x0, ObjectClass.armor_canister, PlanetSideGUID(3426), 0, AmmoBoxData())) ::
InventoryItemData(ObjectClass.armor_canister, PlanetSideGUID(4090), 45, AmmoBoxData()) ::
InventoryItemData(ObjectClass.armor_canister, PlanetSideGUID(3326), 78, AmmoBoxData()) ::
Nil
)
)
val msg = ObjectCreateMessage(ObjectClass.locker_container, PlanetSideGUID(3148), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_locker_container
}
}
}