mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-20 02:54:46 +00:00
added FavoritesMessage packet and tests
This commit is contained in:
parent
daa22c572e
commit
3789bc2ae5
|
|
@ -433,7 +433,7 @@ object GamePacketOpcode extends Enumeration {
|
|||
case 0x5f => noDecoder(FavoritesResponse)
|
||||
|
||||
// OPCODES 0x60-6f
|
||||
case 0x60 => noDecoder(FavoritesMessage)
|
||||
case 0x60 => game.FavoritesMessage.decode
|
||||
case 0x61 => noDecoder(ObjectDetectedMessage)
|
||||
case 0x62 => noDecoder(SplashHitMessage)
|
||||
case 0x63 => noDecoder(SetChatFilterMessage)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
// 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._
|
||||
|
||||
/**
|
||||
* na
|
||||
* @param list na
|
||||
* @param player_guid the player
|
||||
* @param line na
|
||||
* @param subject na
|
||||
* @param armor the type of exo-suit
|
||||
* @param subtype the exo-suit subtype, if any
|
||||
*/
|
||||
final case class FavoritesMessage(list : Int,
|
||||
player_guid : PlanetSideGUID,
|
||||
line : Int,
|
||||
subject : String,
|
||||
armor : Option[Int] = None,
|
||||
subtype : Option[Int] = None)
|
||||
extends PlanetSideGamePacket {
|
||||
type Packet = FavoritesMessage
|
||||
def opcode = GamePacketOpcode.FavoritesMessage
|
||||
def encode = FavoritesMessage.encode(this)
|
||||
}
|
||||
|
||||
object FavoritesMessage extends Marshallable[FavoritesMessage] {
|
||||
implicit val codec : Codec[FavoritesMessage] = (
|
||||
("list" | uintL(2)) >>:~ { value =>
|
||||
("player_guid" | PlanetSideGUID.codec) ::
|
||||
("line" | uintL(4)) ::
|
||||
("subject" | PacketHelpers.encodedWideStringAligned(2)) ::
|
||||
conditional(value == 0, "armor" | uintL(3)) ::
|
||||
conditional(value == 0, "subtype" | uintL(3))
|
||||
}).as[FavoritesMessage]
|
||||
}
|
||||
|
|
@ -850,6 +850,55 @@ class GamePacketTest extends Specification {
|
|||
}
|
||||
}
|
||||
|
||||
"FavoritesMessage" should {
|
||||
val stringVehicles = hex"60 5C 84 02 20 5300 6B00 7900 6700 7500 6100 7200 6400"
|
||||
val stringInfantry = hex"60 2C 03 82 34 4100 6700 6900 6C00 6500 2000 2800 6200 6100 7300 6900 6300 2900 20"
|
||||
|
||||
"decode (for infantry)" in {
|
||||
PacketCoding.DecodePacket(stringInfantry).require match {
|
||||
case FavoritesMessage(list, player_guid, line, subject, armor, subtype) =>
|
||||
list mustEqual 0
|
||||
player_guid mustEqual PlanetSideGUID(3760)
|
||||
line mustEqual 0
|
||||
subject mustEqual "Agile (basic)"
|
||||
armor.isDefined mustEqual true
|
||||
armor.get mustEqual 1
|
||||
subtype.isDefined mustEqual true
|
||||
subtype.get mustEqual 0
|
||||
case default =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode (for infantry)" in {
|
||||
val msg = FavoritesMessage(0, PlanetSideGUID(3760), 0, "Agile (basic)", Option(1), Option(0))
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual stringInfantry
|
||||
}
|
||||
|
||||
"decode (for vehicles)" in {
|
||||
PacketCoding.DecodePacket(stringVehicles).require match {
|
||||
case FavoritesMessage(list, player_guid, line, subject, armor, subtype) =>
|
||||
list mustEqual 1
|
||||
player_guid mustEqual PlanetSideGUID(4210)
|
||||
line mustEqual 0
|
||||
subject mustEqual "Skyguard"
|
||||
armor.isDefined mustEqual false
|
||||
subtype.isDefined mustEqual false
|
||||
case default =>
|
||||
ko
|
||||
}
|
||||
}
|
||||
|
||||
"encode (for vehicles)" in {
|
||||
val msg = FavoritesMessage(1, PlanetSideGUID(4210), 0, "Skyguard")
|
||||
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
|
||||
|
||||
pkt mustEqual stringVehicles
|
||||
}
|
||||
}
|
||||
|
||||
"WeaponJammedMessage" should {
|
||||
val string = hex"66 4C00"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue