2019-03-03 08:23:30 -05:00
|
|
|
// Copyright (c) 2019 PSForever
|
2017-12-05 00:37:24 -05:00
|
|
|
package game.objectcreate
|
|
|
|
|
|
2019-03-03 08:23:30 -05:00
|
|
|
import net.psforever.packet.PacketCoding
|
|
|
|
|
import net.psforever.packet.game.{ObjectCreateMessage, PlanetSideGUID}
|
2017-12-05 00:37:24 -05:00
|
|
|
import net.psforever.packet.game.objectcreate._
|
|
|
|
|
import net.psforever.types.PlanetSideEmpire
|
2019-03-03 08:23:30 -05:00
|
|
|
import org.specs2.mutable.Specification
|
|
|
|
|
import scodec.bits._
|
2017-12-05 00:37:24 -05:00
|
|
|
|
2019-03-03 08:23:30 -05:00
|
|
|
object CommonFieldDataTest extends Specification {
|
|
|
|
|
val string_shotgunshell_dropped = hex"17 A5000000 F9A7D0D 5E269 BED5A F114 0000596000000"
|
|
|
|
|
val string_implant_interface = hex"17 6C000000 01014C93304818000000"
|
|
|
|
|
val string_order_terminala = hex"17 A5000000 B2AF30EACF1889F7A3D1200007D2000000"
|
|
|
|
|
|
|
|
|
|
"AmmoBoxData" should {
|
|
|
|
|
"decode (shotgun shells, dropped)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_shotgunshell_dropped).require match {
|
|
|
|
|
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
|
|
|
|
len mustEqual 165
|
|
|
|
|
cls mustEqual ObjectClass.shotgun_shell
|
|
|
|
|
guid mustEqual PlanetSideGUID(3453)
|
|
|
|
|
parent.isDefined mustEqual false
|
|
|
|
|
data.isInstanceOf[DroppedItemData[_]] mustEqual true
|
|
|
|
|
val drop = data.asInstanceOf[DroppedItemData[_]]
|
|
|
|
|
drop.pos.coord.x mustEqual 4684.7344f
|
|
|
|
|
drop.pos.coord.y mustEqual 5547.4844f
|
|
|
|
|
drop.pos.coord.z mustEqual 83.765625f
|
|
|
|
|
drop.pos.orient.x mustEqual 0f
|
|
|
|
|
drop.pos.orient.y mustEqual 0f
|
|
|
|
|
drop.pos.orient.z mustEqual 199.6875f
|
|
|
|
|
drop.obj match {
|
|
|
|
|
case CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid) =>
|
|
|
|
|
faction mustEqual PlanetSideEmpire.NEUTRAL
|
|
|
|
|
bops mustEqual false
|
|
|
|
|
alternate mustEqual false
|
|
|
|
|
v1 mustEqual false
|
|
|
|
|
v2.isEmpty mustEqual true
|
|
|
|
|
v3 mustEqual false
|
|
|
|
|
v4.contains(false) mustEqual true
|
|
|
|
|
v5.isEmpty mustEqual true
|
|
|
|
|
fguid mustEqual PlanetSideGUID(0)
|
|
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (shotgun shells, dropped)" in {
|
|
|
|
|
val obj = DroppedItemData(
|
|
|
|
|
PlacementData(4684.7344f, 5547.4844f, 83.765625f, 0f, 0f, 199.6875f),
|
|
|
|
|
CommonFieldData()(false)
|
|
|
|
|
)
|
|
|
|
|
val msg = ObjectCreateMessage(ObjectClass.shotgun_shell, PlanetSideGUID(3453), obj)
|
|
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
pkt mustEqual string_shotgunshell_dropped
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"TerminalData" should {
|
|
|
|
|
"decode (implant interface)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_implant_interface).require match {
|
|
|
|
|
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
|
|
|
|
len mustEqual 108
|
|
|
|
|
cls mustEqual 0x199
|
|
|
|
|
guid mustEqual PlanetSideGUID(1075)
|
|
|
|
|
parent.isDefined mustEqual true
|
|
|
|
|
parent.get.guid mustEqual PlanetSideGUID(514)
|
|
|
|
|
parent.get.slot mustEqual 1
|
|
|
|
|
data.isInstanceOf[CommonFieldData] mustEqual true
|
|
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"decode (order terminal a)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_order_terminala).require match {
|
|
|
|
|
case ObjectCreateMessage(len, cls, guid, parent, data) =>
|
|
|
|
|
len mustEqual 165
|
|
|
|
|
cls mustEqual ObjectClass.order_terminala
|
|
|
|
|
guid mustEqual PlanetSideGUID(3827)
|
|
|
|
|
parent.isDefined mustEqual false
|
|
|
|
|
data.isInstanceOf[DroppedItemData[_]] mustEqual true
|
|
|
|
|
val drop = data.asInstanceOf[DroppedItemData[_]]
|
|
|
|
|
drop.pos.coord.x mustEqual 4579.3438f
|
|
|
|
|
drop.pos.coord.y mustEqual 5615.0703f
|
|
|
|
|
drop.pos.coord.z mustEqual 72.953125f
|
|
|
|
|
drop.pos.orient.x mustEqual 0f
|
|
|
|
|
drop.pos.orient.y mustEqual 0f
|
|
|
|
|
drop.pos.orient.z mustEqual 98.4375f
|
|
|
|
|
drop.obj.isInstanceOf[CommonFieldData] mustEqual true
|
|
|
|
|
drop.obj.asInstanceOf[CommonFieldData].faction mustEqual PlanetSideEmpire.NC
|
|
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (implant interface)" in {
|
|
|
|
|
val obj = CommonFieldData(PlanetSideEmpire.VS)(false)
|
|
|
|
|
val msg = ObjectCreateMessage(0x199, PlanetSideGUID(1075), ObjectCreateMessageParent(PlanetSideGUID(514), 1), obj)
|
|
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
pkt mustEqual string_implant_interface
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (order terminal a)" in {
|
|
|
|
|
val obj = DroppedItemData(
|
|
|
|
|
PlacementData(4579.3438f, 5615.0703f, 72.953125f, 0f, 0f, 98.4375f),
|
|
|
|
|
CommonFieldData(PlanetSideEmpire.NC)(false)
|
|
|
|
|
)
|
|
|
|
|
val msg = ObjectCreateMessage(ObjectClass.order_terminala, PlanetSideGUID(3827), obj)
|
|
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
pkt mustEqual string_order_terminala
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"InternalSlot" in {
|
|
|
|
|
TerminalData(ObjectClass.order_terminala, PlanetSideGUID(1), 1, CommonFieldData(PlanetSideEmpire.NC)(false)) mustEqual
|
|
|
|
|
InternalSlot(ObjectClass.order_terminala, PlanetSideGUID(1), 1, CommonFieldData(PlanetSideEmpire.NC)(false))
|
2017-12-05 00:37:24 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|