From 50d9294b3eed0ffaeefe6b791b75269833c617a2 Mon Sep 17 00:00:00 2001 From: tfarley Date: Sun, 14 Aug 2016 12:47:40 -0700 Subject: [PATCH] Packet: WeaponDryFireMessage (#59) * Add WeaponDryFireMessage packet * Add WeaponDryFireMessage test --- .../psforever/packet/GamePacketOpcode.scala | 2 +- .../packet/game/WeaponDryFireMessage.scala | 27 +++++++++++++++++++ common/src/test/scala/GamePacketTest.scala | 20 ++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 common/src/main/scala/net/psforever/packet/game/WeaponDryFireMessage.scala diff --git a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala index f984eb784..4da688b37 100644 --- a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala +++ b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala @@ -417,7 +417,7 @@ object GamePacketOpcode extends Enumeration { // OPCODE 80 case TargetingInfoMessage => noDecoder(opcode) case TriggerEffectMessage => noDecoder(opcode) - case WeaponDryFireMessage => noDecoder(opcode) + case WeaponDryFireMessage => game.WeaponDryFireMessage.decode case DroppodLaunchRequestMessage => noDecoder(opcode) case HackMessage => noDecoder(opcode) case DroppodLaunchResponseMessage => noDecoder(opcode) diff --git a/common/src/main/scala/net/psforever/packet/game/WeaponDryFireMessage.scala b/common/src/main/scala/net/psforever/packet/game/WeaponDryFireMessage.scala new file mode 100644 index 000000000..f1b7a411e --- /dev/null +++ b/common/src/main/scala/net/psforever/packet/game/WeaponDryFireMessage.scala @@ -0,0 +1,27 @@ +// Copyright (c) 2016 PSForever.net to present +package net.psforever.packet.game + +import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket} +import scodec.Codec +import scodec.codecs._ + +/** + * Instructs client to play a weapon's dryfire sound when sent server to client. + * + * The particular sound played depends on the type of weapon that the guid is (likely from adb gamedata). + * See also [[WeaponJammedMessage]] + * + * @param weapon_guid the weapon that is dry firing + */ +final case class WeaponDryFireMessage(weapon_guid : PlanetSideGUID) + extends PlanetSideGamePacket { + type Packet = WeaponDryFireMessage + def opcode = GamePacketOpcode.WeaponDryFireMessage + def encode = WeaponDryFireMessage.encode(this) +} + +object WeaponDryFireMessage extends Marshallable[WeaponDryFireMessage] { + implicit val codec : Codec[WeaponDryFireMessage] = ( + ("weapon_guid" | PlanetSideGUID.codec) + ).as[WeaponDryFireMessage] +} diff --git a/common/src/test/scala/GamePacketTest.scala b/common/src/test/scala/GamePacketTest.scala index 3f351b20c..167b8a7ad 100644 --- a/common/src/test/scala/GamePacketTest.scala +++ b/common/src/test/scala/GamePacketTest.scala @@ -776,6 +776,26 @@ class GamePacketTest extends Specification { } } + "WeaponDryFireMessage" should { + val string = hex"52 4C00" + + "decode" in { + PacketCoding.DecodePacket(string).require match { + case WeaponDryFireMessage(weapon_guid) => + weapon_guid mustEqual PlanetSideGUID(76) + case default => + ko + } + } + + "encode" in { + val msg = WeaponDryFireMessage(PlanetSideGUID(76)) + val pkt = PacketCoding.EncodePacket(msg).require.toByteVector + + pkt mustEqual string + } + } + "PingMsg" should { val packet = hex"1a 00000000 b0360000"