From 07a23d7d26beb4cb03f66565fd286e6daf59e031 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Sun, 19 Mar 2017 18:40:17 -0400 Subject: [PATCH] Packet: ZoneForcedCavernConnectionsMessage (#122) * initial ZoneForcedCavernConnectionsMessage packet and tests * adjusted tests so that 2u field has a value; minor comment change to packet file --- .../psforever/packet/GamePacketOpcode.scala | 2 +- .../ZoneForcedCavernConnectionsMessage.scala | 26 +++++++++++++++++ ...neForcedCavernConnectionsMessageTest.scala | 29 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 common/src/main/scala/net/psforever/packet/game/ZoneForcedCavernConnectionsMessage.scala create mode 100644 common/src/test/scala/game/ZoneForcedCavernConnectionsMessageTest.scala diff --git a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala index 1f0eb2a5c..94e669a8f 100644 --- a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala +++ b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala @@ -588,7 +588,7 @@ object GamePacketOpcode extends Enumeration { case 0xe0 => noDecoder(SquadBindInfoMessage) case 0xe1 => noDecoder(AudioSequenceMessage) case 0xe2 => noDecoder(SquadFacilityBindInfoMessage) - case 0xe3 => noDecoder(ZoneForcedCavernConnectionsMessage) + case 0xe3 => game.ZoneForcedCavernConnectionsMessage.decode case 0xe4 => noDecoder(MissionActionMessage) case 0xe5 => noDecoder(MissionKillTriggerMessage) case 0xe6 => game.ReplicationStreamMessage.decode diff --git a/common/src/main/scala/net/psforever/packet/game/ZoneForcedCavernConnectionsMessage.scala b/common/src/main/scala/net/psforever/packet/game/ZoneForcedCavernConnectionsMessage.scala new file mode 100644 index 000000000..fc35796ec --- /dev/null +++ b/common/src/main/scala/net/psforever/packet/game/ZoneForcedCavernConnectionsMessage.scala @@ -0,0 +1,26 @@ +// Copyright (c) 2017 PSForever +package net.psforever.packet.game + +import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket} +import scodec.Codec +import scodec.codecs._ + +/** + * Dispatched to the client in regards to cavern connections via geowarp gates. + * @param zone the zone + * @param unk na + */ +final case class ZoneForcedCavernConnectionsMessage(zone : PlanetSideGUID, + unk : Int) + extends PlanetSideGamePacket { + type Packet = ZoneForcedCavernConnectionsMessage + def opcode = GamePacketOpcode.ZoneForcedCavernConnectionsMessage + def encode = ZoneForcedCavernConnectionsMessage.encode(this) +} + +object ZoneForcedCavernConnectionsMessage extends Marshallable[ZoneForcedCavernConnectionsMessage] { + implicit val codec : Codec[ZoneForcedCavernConnectionsMessage] = ( + ("zone" | PlanetSideGUID.codec) :: + ("unk" | uint2L) + ).as[ZoneForcedCavernConnectionsMessage] +} diff --git a/common/src/test/scala/game/ZoneForcedCavernConnectionsMessageTest.scala b/common/src/test/scala/game/ZoneForcedCavernConnectionsMessageTest.scala new file mode 100644 index 000000000..d963928d1 --- /dev/null +++ b/common/src/test/scala/game/ZoneForcedCavernConnectionsMessageTest.scala @@ -0,0 +1,29 @@ +// Copyright (c) 2017 PSForever +package game + +import org.specs2.mutable._ +import net.psforever.packet._ +import net.psforever.packet.game._ +import net.psforever.types.Vector3 +import scodec.bits._ + +class ZoneForcedCavernConnectionsMessageTest extends Specification { + val string = hex"E3200040" + + "decode" in { + PacketCoding.DecodePacket(string).require match { + case ZoneForcedCavernConnectionsMessage(zone, unk) => + zone mustEqual PlanetSideGUID(32) + unk mustEqual 1 + case _ => + ko + } + } + + "encode" in { + val msg = ZoneForcedCavernConnectionsMessage(PlanetSideGUID(32), 1) + val pkt = PacketCoding.EncodePacket(msg).require.toByteVector + + pkt mustEqual string + } +}