Merge pull request #140 from SouNourS/AvatarVehicleTimerMessage

Packet: AvatarVehicleTimerMessage
This commit is contained in:
Fate-JH 2017-05-02 22:55:48 -04:00 committed by GitHub
commit 6168f8533c
3 changed files with 80 additions and 1 deletions

View file

@ -421,7 +421,7 @@ object GamePacketOpcode extends Enumeration {
case 0x54 => noDecoder(HackMessage)
case 0x55 => noDecoder(DroppodLaunchResponseMessage)
case 0x56 => noDecoder(GenericObjectActionMessage)
case 0x57 => noDecoder(AvatarVehicleTimerMessage)
case 0x57 => game.AvatarVehicleTimerMessage.decode
// 0x58
case 0x58 => game.AvatarImplantMessage.decode
case 0x59 => noDecoder(UnknownMessage89)

View file

@ -0,0 +1,31 @@
// Copyright (c) 2017 PSForever
package net.psforever.packet.game
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
import scodec.Codec
import scodec.codecs._
/**
* @param player_guid player guid !
* @param text name of the item or vehicle name (ex : medkit, fury ...)
* @param time in seconds
* @param unk1 NA - Seems to be false when it's for medkit, true for vehicles
*/
final case class AvatarVehicleTimerMessage(player_guid : PlanetSideGUID,
text : String,
time : Long,
unk1 : Boolean
) extends PlanetSideGamePacket {
type Packet = AvatarVehicleTimerMessage
def opcode = GamePacketOpcode.AvatarVehicleTimerMessage
def encode = AvatarVehicleTimerMessage.encode(this)
}
object AvatarVehicleTimerMessage extends Marshallable[AvatarVehicleTimerMessage] {
implicit val codec : Codec[AvatarVehicleTimerMessage] = (
("player_guid" | PlanetSideGUID.codec) ::
("text" | PacketHelpers.encodedString) ::
("time" | uint32L) ::
("unk1" | bool)
).as[AvatarVehicleTimerMessage]
}

View file

@ -0,0 +1,48 @@
// Copyright (c) 2017 PSForever
package game
import org.specs2.mutable._
import net.psforever.packet._
import net.psforever.packet.game._
import scodec.bits._
class AvatarVehicleTimerMessageTest extends Specification {
val string = hex"57bd16866d65646b69740500000000"
val string2 = hex"57971b84667572794800000080"
"decode medkit" in {
PacketCoding.DecodePacket(string).require match {
case AvatarVehicleTimerMessage(player_guid, text, time, u1) =>
player_guid mustEqual PlanetSideGUID(5821)
text mustEqual "medkit"
time mustEqual 5
u1 mustEqual false
case _ =>
ko
}
}
"decode fury" in {
PacketCoding.DecodePacket(string2).require match {
case AvatarVehicleTimerMessage(player_guid, text, time, u1) =>
player_guid mustEqual PlanetSideGUID(7063)
text mustEqual "fury"
time mustEqual 72
u1 mustEqual true
case _ =>
ko
}
}
"encode medkit" in {
val msg = AvatarVehicleTimerMessage(PlanetSideGUID(5821),"medkit",5,false)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string
}
"encode fury" in {
val msg = AvatarVehicleTimerMessage(PlanetSideGUID(7063),"fury",72,true)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string2
}
}