From 055a6096a1521b0239db3b72a4b954cc7ef34d5a Mon Sep 17 00:00:00 2001 From: FateJH Date: Sat, 28 Jan 2017 02:17:50 -0500 Subject: [PATCH] initial work on ZoneInfoMessage --- .../psforever/packet/GamePacketOpcode.scala | 2 +- .../packet/game/ZoneInfoMessage.scala | 33 +++++++++++++++++++ common/src/test/scala/GamePacketTest.scala | 22 +++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 common/src/main/scala/net/psforever/packet/game/ZoneInfoMessage.scala diff --git a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala index 6db4941c..6e494320 100644 --- a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala +++ b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala @@ -553,7 +553,7 @@ object GamePacketOpcode extends Enumeration { case 0xc3 => noDecoder(ProximityTerminalUseMessage) case 0xc4 => game.QuantityDeltaUpdateMessage.decode case 0xc5 => noDecoder(ChainLashMessage) - case 0xc6 => noDecoder(ZoneInfoMessage) + case 0xc6 => game.ZoneInfoMessage.decode case 0xc7 => noDecoder(LongRangeProjectileInfoMessage) // 0xc8 case 0xc8 => noDecoder(WeaponLazeTargetPositionMessage) diff --git a/common/src/main/scala/net/psforever/packet/game/ZoneInfoMessage.scala b/common/src/main/scala/net/psforever/packet/game/ZoneInfoMessage.scala new file mode 100644 index 00000000..09e84c7d --- /dev/null +++ b/common/src/main/scala/net/psforever/packet/game/ZoneInfoMessage.scala @@ -0,0 +1,33 @@ +// Copyright (c) 2016 PSForever.net to present +package net.psforever.packet.game + +import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket} +import scodec.Codec +import scodec.codecs._ + +/** + * na + * @param zone the zone id + * @param empire_status change the "Empire Status" text in the Interstellar Map zone description; + * `true` displays the queue availability for the avatar's empire; + * `false` display "Inactive" + * @param unk na; + * always 0? + * @see `ZonePopulationUpdateMessage` + */ +final case class ZoneInfoMessage(zone : Int, + empire_status : Boolean, + unk : Long) + extends PlanetSideGamePacket { + type Packet = ZoneInfoMessage + def opcode = GamePacketOpcode.ZoneInfoMessage + def encode = ZoneInfoMessage.encode(this) +} + +object ZoneInfoMessage extends Marshallable[ZoneInfoMessage] { + implicit val codec : Codec[ZoneInfoMessage] = ( + ("zone" | uint16L) :: + ("empire_status" | bool) :: + ("unk" | uint32L) + ).as[ZoneInfoMessage] +} diff --git a/common/src/test/scala/GamePacketTest.scala b/common/src/test/scala/GamePacketTest.scala index 92e3843d..abb05c7e 100644 --- a/common/src/test/scala/GamePacketTest.scala +++ b/common/src/test/scala/GamePacketTest.scala @@ -2182,6 +2182,28 @@ class GamePacketTest extends Specification { } } + "ZoneInfoMessage" should { + val string = hex"C6 0C 00 80 00 00 00 00" + + "decode" in { + PacketCoding.DecodePacket(string).require match { + case ZoneInfoMessage(zone, empire_status, unk) => + zone mustEqual 12 + empire_status mustEqual true + unk mustEqual 0 + case default => + ko + } + } + + "encode" in { + val msg = ZoneInfoMessage(12, true, 0) + val pkt = PacketCoding.EncodePacket(msg).require.toByteVector + + pkt mustEqual string + } + } + "PingMsg" should { val packet = hex"1a 00000000 b0360000"