2017-03-06 19:30:45 -05:00
|
|
|
// Copyright (c) 2017 PSForever
|
2017-03-05 12:24:57 -05:00
|
|
|
package game
|
|
|
|
|
|
|
|
|
|
import org.specs2.mutable._
|
|
|
|
|
import net.psforever.packet._
|
|
|
|
|
import net.psforever.packet.game._
|
2018-11-21 20:31:51 -05:00
|
|
|
import net.psforever.types.{SpawnGroup, Vector3}
|
2017-03-05 12:24:57 -05:00
|
|
|
import scodec.bits._
|
|
|
|
|
|
|
|
|
|
class BindPlayerMessageTest extends Specification {
|
2018-11-21 20:31:51 -05:00
|
|
|
val string_standard = hex"16028004000000000000000000000000000000"
|
2017-03-05 12:24:57 -05:00
|
|
|
val string_ams = hex"16 05 8440616D73 08 28000000 00000000 00000 00000 0000"
|
|
|
|
|
val string_tech = hex"16 01 8b40746563685f706c616e74 d4 28000000 38000000 00064 012b1 a044"
|
2018-11-21 20:31:51 -05:00
|
|
|
val string_akkan = hex"16048440616d7388100000001400000214e171a8e33024"
|
|
|
|
|
|
|
|
|
|
"decode (standard)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_standard).require match {
|
|
|
|
|
case BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) =>
|
|
|
|
|
action mustEqual BindStatus.Unbind
|
|
|
|
|
bindDesc mustEqual ""
|
|
|
|
|
unk1 mustEqual false
|
|
|
|
|
logging mustEqual false
|
|
|
|
|
unk2 mustEqual SpawnGroup.BoundAMS
|
|
|
|
|
unk3 mustEqual 0
|
|
|
|
|
unk4 mustEqual 0
|
|
|
|
|
pos mustEqual Vector3.Zero
|
|
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-03-05 12:24:57 -05:00
|
|
|
|
|
|
|
|
"decode (ams)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_ams).require match {
|
|
|
|
|
case BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) =>
|
2018-11-21 20:31:51 -05:00
|
|
|
action mustEqual BindStatus.Unavailable
|
2017-03-05 12:24:57 -05:00
|
|
|
bindDesc mustEqual "@ams"
|
|
|
|
|
unk1 mustEqual false
|
|
|
|
|
logging mustEqual false
|
2018-11-21 20:31:51 -05:00
|
|
|
unk2 mustEqual SpawnGroup.AMS
|
|
|
|
|
unk3 mustEqual 10
|
2017-03-05 12:24:57 -05:00
|
|
|
unk4 mustEqual 0
|
2018-11-21 20:31:51 -05:00
|
|
|
pos mustEqual Vector3.Zero
|
2017-03-05 12:24:57 -05:00
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"decode (tech)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_tech).require match {
|
|
|
|
|
case BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) =>
|
2018-11-21 20:31:51 -05:00
|
|
|
action mustEqual BindStatus.Bind
|
2017-03-05 12:24:57 -05:00
|
|
|
bindDesc mustEqual "@tech_plant"
|
|
|
|
|
unk1 mustEqual true
|
|
|
|
|
logging mustEqual true
|
2018-11-21 20:31:51 -05:00
|
|
|
unk2 mustEqual SpawnGroup.BoundFacility
|
|
|
|
|
unk3 mustEqual 10
|
|
|
|
|
unk4 mustEqual 14
|
|
|
|
|
pos mustEqual Vector3(4610.0f, 6292, 69.625f)
|
|
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"decode (akkan)" in {
|
|
|
|
|
PacketCoding.DecodePacket(string_akkan).require match {
|
|
|
|
|
case BindPlayerMessage(action, bindDesc, unk1, logging, unk2, unk3, unk4, pos) =>
|
|
|
|
|
action mustEqual BindStatus.Available
|
|
|
|
|
bindDesc mustEqual "@ams"
|
|
|
|
|
unk1 mustEqual true
|
|
|
|
|
logging mustEqual false
|
|
|
|
|
unk2 mustEqual SpawnGroup.AMS
|
|
|
|
|
unk3 mustEqual 4
|
|
|
|
|
unk4 mustEqual 5
|
|
|
|
|
pos mustEqual Vector3(2673.039f, 4423.547f, 39.1875f)
|
2017-03-05 12:24:57 -05:00
|
|
|
case _ =>
|
|
|
|
|
ko
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-21 20:31:51 -05:00
|
|
|
"encode (standard)" in {
|
|
|
|
|
val msg = BindPlayerMessage.Standard
|
|
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
|
|
|
|
|
pkt mustEqual string_standard
|
|
|
|
|
}
|
|
|
|
|
|
2017-03-05 12:24:57 -05:00
|
|
|
"encode (ams)" in {
|
2018-11-21 20:31:51 -05:00
|
|
|
val msg = BindPlayerMessage(BindStatus.Unavailable, "@ams", false, false, SpawnGroup.AMS, 10, 0, Vector3.Zero)
|
2017-03-05 12:24:57 -05:00
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
|
|
|
|
|
pkt mustEqual string_ams
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"encode (tech)" in {
|
2018-11-21 20:31:51 -05:00
|
|
|
val msg = BindPlayerMessage(BindStatus.Bind, "@tech_plant", true, true, SpawnGroup.BoundFacility, 10, 14, Vector3(4610.0f, 6292, 69.625f))
|
2017-03-05 12:24:57 -05:00
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
|
|
|
|
|
pkt mustEqual string_tech
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-21 20:31:51 -05:00
|
|
|
"encode (akkan)" in {
|
|
|
|
|
val msg = BindPlayerMessage(BindStatus.Available, "@ams", true, false, SpawnGroup.AMS, 4, 5, Vector3(2673.039f, 4423.547f, 39.1875f))
|
2017-03-05 12:24:57 -05:00
|
|
|
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
|
|
|
|
|
2018-11-21 20:31:51 -05:00
|
|
|
pkt mustEqual string_akkan
|
2017-03-05 12:24:57 -05:00
|
|
|
}
|
|
|
|
|
}
|