Packet: AvatarFirstTimeEventMessage (#53)

* AvatarFirstTimeEventMessage

* AvatarFirstTimeEventMessage

* AvatarFirstTimeEventMessage tests
This commit is contained in:
aphedox 2016-08-13 12:28:13 -05:00 committed by pschord
parent 10ec61c9a6
commit c5653013da
4 changed files with 52 additions and 1 deletions

View file

@ -444,7 +444,7 @@ object GamePacketOpcode extends Enumeration {
case WeaponJammedMessage => noDecoder(opcode)
case LinkDeadAwarenessMsg => noDecoder(opcode)
case DroppodFreefallingMessage => noDecoder(opcode)
case AvatarFirstTimeEventMessage => noDecoder(opcode)
case AvatarFirstTimeEventMessage => game.AvatarFirstTimeEventMessage.decode
case AggravatedDamageMessage => noDecoder(opcode)
case TriggerSoundMessage => noDecoder(opcode)
case LootItemMessage => noDecoder(opcode)

View file

@ -0,0 +1,25 @@
// 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._
final case class AvatarFirstTimeEventMessage(avatar_guid : PlanetSideGUID,
object_guid : PlanetSideGUID,
unk1 : Long,
event_name : String)
extends PlanetSideGamePacket {
type Packet = AvatarFirstTimeEventMessage
def opcode = GamePacketOpcode.AvatarFirstTimeEventMessage
def encode = AvatarFirstTimeEventMessage.encode(this)
}
object AvatarFirstTimeEventMessage extends Marshallable[AvatarFirstTimeEventMessage] {
implicit val codec : Codec[AvatarFirstTimeEventMessage] = (
("avatar_guid" | PlanetSideGUID.codec) ::
("object_guid" | PlanetSideGUID.codec) ::
("unk1" | uint32L ) ::
("event_name" | PacketHelpers.encodedString)
).as[AvatarFirstTimeEventMessage]
}

View file

@ -753,6 +753,29 @@ class GamePacketTest extends Specification {
}
}
"AvatarFirstTimeEventMessage" should {
val string = hex"69 4b00 c000 01000000 9e 766973697465645f63657274696669636174696f6e5f7465726d696e616c"
"decode" in {
PacketCoding.DecodePacket(string).require match {
case AvatarFirstTimeEventMessage(avatar_guid, object_guid, unk1, event_name) =>
avatar_guid mustEqual PlanetSideGUID(75)
object_guid mustEqual PlanetSideGUID(192)
unk1 mustEqual 1
event_name mustEqual "visited_certification_terminal"
case default =>
ko
}
}
"encode" in {
val msg = AvatarFirstTimeEventMessage(PlanetSideGUID(75), PlanetSideGUID(192), 1, "visited_certification_terminal")
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
}
"PingMsg" should {
val packet = hex"1a 00000000 b0360000"

View file

@ -244,6 +244,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ HitMessage(seq_time, projectile_guid, unk1, hit_info, unk2, unk3, unk4) =>
log.info("Hit: " + msg)
case msg @ AvatarFirstTimeEventMessage(avatar_guid, object_guid, unk1, event_name) =>
log.info("AvatarFirstTimeEvent: " + msg)
case default => log.debug(s"Unhandled GamePacket ${pkt}")
}