diff --git a/common/src/main/scala/net/psforever/packet/game/AvatarGrenadeStateMessage.scala b/common/src/main/scala/net/psforever/packet/game/AvatarGrenadeStateMessage.scala index 652fca18..77ad80d3 100644 --- a/common/src/main/scala/net/psforever/packet/game/AvatarGrenadeStateMessage.scala +++ b/common/src/main/scala/net/psforever/packet/game/AvatarGrenadeStateMessage.scala @@ -1,30 +1,24 @@ // Copyright (c) 2016 PSForever.net to present package net.psforever.packet.game -import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket} +import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket} import scodec.Codec import scodec.codecs._ -object GrenadeState extends Enumeration { - type Type = Value - val unk0, - PRIMED, - THROWN, - unk3 - = Value - - implicit val codec = PacketHelpers.createEnumerationCodec(this, uintL(1)) -} - /** - * na + * Report the state of the "grenade throw" animation for this player.
+ *
+ * States:
+ * 1 - prepare for throwing (grenade held back over shoulder)
+ * 2 - throwing (grenade released overhand)
+ *
+ * Exploration:
+ * How many grenade states are possible? * @param player_guid the player - * @param count the state + * @param state the animation state */ -//case msg @ AvatarGrenadeStateMessage(player_guid, state) => -//log.info("AvatarGrenadeStateMessage: " + msg) final case class AvatarGrenadeStateMessage(player_guid : PlanetSideGUID, - count : GrenadeState.Value) + state : Int) extends PlanetSideGamePacket { type Packet = AvatarGrenadeStateMessage def opcode = GamePacketOpcode.AvatarGrenadeStateMessage @@ -34,7 +28,6 @@ final case class AvatarGrenadeStateMessage(player_guid : PlanetSideGUID, object AvatarGrenadeStateMessage extends Marshallable[AvatarGrenadeStateMessage] { implicit val codec : Codec[AvatarGrenadeStateMessage] = ( ("player_guid" | PlanetSideGUID.codec) :: - ("state" | GrenadeState.codec) + ("state" | uint8L) ).as[AvatarGrenadeStateMessage] } - diff --git a/common/src/test/scala/GamePacketTest.scala b/common/src/test/scala/GamePacketTest.scala index 2f7e8a11..31943426 100644 --- a/common/src/test/scala/GamePacketTest.scala +++ b/common/src/test/scala/GamePacketTest.scala @@ -681,6 +681,27 @@ class GamePacketTest extends Specification { } } + "AvatarGrenadeStateMessage" should { + val string = hex"A9 DA11 01" + + "decode" in { + PacketCoding.DecodePacket(string).require match { + case AvatarGrenadeStateMessage(player_guid, state) => + player_guid mustEqual PlanetSideGUID(4570) + state mustEqual 1 + case default => + ko + } + } + + "encode" in { + val msg = AvatarGrenadeStateMessage(PlanetSideGUID(4570), 1) + val pkt = PacketCoding.EncodePacket(msg).require.toByteVector + + pkt mustEqual string + } + } + "BroadcastWarpgateUpdateMessage" should { val string = hex"D9 0D 00 01 00 20" diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index ea99a03c..aa725ffe 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -274,6 +274,9 @@ class WorldSessionActor extends Actor with MDCContextAware { case msg @ AvatarFirstTimeEventMessage(avatar_guid, object_guid, unk1, event_name) => log.info("AvatarFirstTimeEvent: " + msg) + case msg @ AvatarGrenadeStateMessage(player_guid, state) => + log.info("AvatarGrenadeStateMessage: " + msg) + case default => log.debug(s"Unhandled GamePacket ${pkt}") }