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}")
}