Packet: ObjectHeldMessage

* Add ObjectHeldMessage packet

* Add ObjectHeldMessage test

* Add ObjectHeldMessage handler stub
This commit is contained in:
tfarley 2016-07-23 22:49:51 -07:00 committed by pschord
parent 60e7a76de5
commit 44a4d9b5f9
4 changed files with 49 additions and 1 deletions

View file

@ -380,7 +380,7 @@ object GamePacketOpcode extends Enumeration {
// OPCODE 50
case SetCurrentAvatarMessage => game.SetCurrentAvatarMessage.decode
case ObjectHeldMessage => noDecoder(opcode)
case ObjectHeldMessage => game.ObjectHeldMessage.decode
case WeaponFireMessage => noDecoder(opcode)
case AvatarJumpMessage => noDecoder(opcode)
case PickupItemMessage => noDecoder(opcode)

View file

@ -0,0 +1,23 @@
// 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 ObjectHeldMessage(avatar_guid : PlanetSideGUID,
held_holsters : Int,
unk1 : Boolean)
extends PlanetSideGamePacket {
type Packet = ObjectHeldMessage
def opcode = GamePacketOpcode.ObjectHeldMessage
def encode = ObjectHeldMessage.encode(this)
}
object ObjectHeldMessage extends Marshallable[ObjectHeldMessage] {
implicit val codec : Codec[ObjectHeldMessage] = (
("avatar_guid" | PlanetSideGUID.codec) ::
("held_holsters" | uint8L) ::
("unk1" | bool)
).as[ObjectHeldMessage]
}

View file

@ -327,5 +327,27 @@ class GamePacketTest extends Specification {
pkt mustEqual string
}
}
"ObjectHeldMessage" should {
val string = hex"33 4B00 02 00"
"decode" in {
PacketCoding.DecodePacket(string).require match {
case ObjectHeldMessage(avatar_guid, held_holsters, unk1) =>
avatar_guid mustEqual PlanetSideGUID(75)
held_holsters mustEqual (1 << 1)
unk1 mustEqual false
case default =>
ko
}
}
"encode" in {
val msg = ObjectHeldMessage(PlanetSideGUID(75), (1 << 1), false)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
}
}
}

View file

@ -174,6 +174,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
log.info("Reload: " + msg)
sendResponse(PacketCoding.CreateGamePacket(0, ReloadMessage(item_guid, 123, unk1)))
case msg @ ObjectHeldMessage(avatar_guid, held_holsters, unk1) =>
log.info("ObjectHeld: " + msg)
case default => log.debug(s"Unhandled GamePacket ${pkt}")
}