Improve Outfit packets

This commit is contained in:
Resaec 2024-04-28 20:15:49 +02:00
parent d75ab1166f
commit 1e7c0123a4
3 changed files with 63 additions and 45 deletions

View file

@ -13,15 +13,15 @@ final case class OutfitMemberEvent(
unk1: Int,
unk2: Int,
unk3: Int,
unk4: Int,
unk5: Int,
unk6: Int,
member_name: String,
unk7: Int,
unk8: Int,
unk9: Int,
unk10: Int,
unk12: Int,
unk13: Int,
unk14: Int,
unk15: Int,
unk11: Int,
) extends PlanetSideGamePacket {
type Packet = OutfitMemberEvent
def opcode = GamePacketOpcode.OutfitMemberEvent
@ -32,26 +32,26 @@ object OutfitMemberEvent extends Marshallable[OutfitMemberEvent] {
implicit val codec: Codec[OutfitMemberEvent] = (
("unk00" | uintL(2)) ::
("outfit_id" | PlanetSideGUID.codec) ::
("unk1" | uint16L) ::
("unk2" | uint16L) ::
("unk3" | uint16L) ::
("unk1" | uint8L) ::
("unk2" | uint8L) ::
("unk3" | uint8L) ::
("unk4" | uint8L) ::
("unk5" | uint8L) ::
("unk6" | uint8L) ::
("member_name" | PacketHelpers.encodedWideStringAligned(6)) ::
("unk7" | uint8L) ::
("unk8" | uint8L) ::
("unk7" | uint16L) ::
("unk8" | uint16L) ::
("unk9" | uint16L) ::
("unk10" | uint8L) ::
("unk12" | uint8L) ::
("unk13" | uint8L) ::
("unk14" | uint8L) ::
("unk15" | uint8L)
("unk10" | uint16L) ::
("unk11" | uint8L)
).xmap[OutfitMemberEvent](
{
case unk00 :: outfit_id :: u1 :: u2 :: u3 :: member_name :: u7 :: u8 :: u9 :: u10 :: u12 :: u13 :: u14 :: u15 :: HNil =>
OutfitMemberEvent(unk00, outfit_id, u1, u2, u3, member_name, u7, u8, u9, u10, u12, u13, u14, u15)
case unk00 :: outfit_id :: u1 :: u2 :: u3 :: u4 :: u5 :: u6 :: member_name :: u7 :: u8 :: u9 :: u10 :: u11 :: HNil =>
OutfitMemberEvent(unk00, outfit_id, u1, u2, u3, u4, u5, u6, member_name, u7, u8, u9, u10, u11)
},
{
case OutfitMemberEvent(unk00, outfit_id, u1, u2, u3, member_name, u7, u8, u9, u10, u12, u13, u14, u15) =>
unk00 :: outfit_id :: u1 :: u2 :: u3 :: member_name :: u7 :: u8 :: u9 :: u10 :: u12 :: u13 :: u14 :: u15 :: HNil
case OutfitMemberEvent(unk00, outfit_id, u1, u2, u3, u4, u5, u6, member_name, u7, u8, u9, u10, u11) =>
unk00 :: outfit_id :: u1 :: u2 :: u3 :: u4 :: u5 :: u6 :: member_name :: u7 :: u8 :: u9 :: u10 :: u11 :: HNil
}
)
}

View file

@ -10,7 +10,7 @@ import shapeless.{::, HNil}
final case class OutfitMemberUpdate(
outfit_guid: PlanetSideGUID,
unk1: Int,
unk2: Int,
avatar_guid: PlanetSideGUID,
unk3: Int,
) extends PlanetSideGamePacket {
type Packet = OutfitMemberUpdate
@ -22,7 +22,7 @@ object OutfitMemberUpdate extends Marshallable[OutfitMemberUpdate] {
implicit val codec: Codec[OutfitMemberUpdate] = (
("outfit_guid" | PlanetSideGUID.codec) ::
("unk1" | uint16L) ::
("unk2" | uint16L) ::
("avatar_guid" | PlanetSideGUID.codec) ::
("unk3" | uint8L)
).xmap[OutfitMemberUpdate](
{

View file

@ -10,25 +10,43 @@ import scodec.bits._
class OutfitMemberEventTest extends Specification {
//val unk0_ABC: ByteVector = hex"90 3518 4000 1a4e 4100 2 180 450078007000650072007400 8483 07e0 119d bfe0 70" // 0x90048640001030c28022404c0061007a00650072003100390038003200f43a45e00b4c604010
val unk0_ABC: ByteVector = hex"90 048640001030c28022404c0061007a00650072003100390038003200f43a45e00b4c604010"
//val unk0_ABC: ByteVector = hex"90 3518 4000 1a4e 4100 2 180 450078007000650072007400 8483 07e0 119d bfe0 70" // 0x90048640001030c28022404c0061007a00650072003100390038003200f43a45e00b4c604010
val unk0_ABC_Lazer: ByteVector = hex"90 048640001030c28022404c0061007a00650072003100390038003200f43a45e00b4c604010"
val OpolE = hex"90 0 4864 0003 aad6 280a 14 0 4f0070006f006c004500 c9a1 80e0 0d03 2040 10"
val Billy = hex"90 0 4864 0003 a41a 280a 20 0 620069006c006c007900320035003600 935f 6000 186a b040 50"
val Lazer = hex"90 0 4864 0001 030c 2802 24 0 4c0061007a00650072003100390038003200 e6dc 25a0 153e 6040 10"
val Virus = hex"90 0 4864 0002 1b64 4c02 28 0 5600690072007500730047006900760065007200 2f89 0080 0000 0000 10"
val PvtPa = hex"90 0 4864 0000 1e69 e80a 2c 0 500076007400500061006e00630061006b0065007300 705e a080 0a85 e060 10"
val Night = hex"90 0 4864 0002 4cf0 3802 28 0 4e006900670068007400770069006e0067003100 b8fb 9a40 0da6 ec80 50"
/*
OutfitMemberEvent(0, ValidPlanetSideGUID(6418), 0, 0, 64, 195, 10, 0, Lazer1982, 230, 220, 37, 160, 21, 62, 96, 64, 16, BitVector(empty))
OutfitMemberEvent(0, ValidPlanetSideGUID(6418), 0, 0, 7, 154, 122, 2, PvtPancakes, 112, 94, 160, 128, 10, 133, 224, 96, 16, BitVector(empty))
OutfitMemberEvent(0, ValidPlanetSideGUID(6418), 0, 0, 134, 217, 19, 0, VirusGiver, 47, 137, 0, 128, 0, 0, 0, 0, 16, BitVector(empty))
OutfitMemberEvent(0, ValidPlanetSideGUID(6418), 0, 0, 234, 181, 138, 2, OpolE, 201, 161, 128, 224, 13, 3, 32, 64, 16, BitVector(empty))
OutfitMemberEvent(0, ValidPlanetSideGUID(6418), 0, 0, 233, 6, 138, 2, billy256, 147, 95, 96, 0, 24, 106, 176, 64, 80, BitVector(empty))
*/
"decode Unk0 ABC" in {
PacketCoding.decodePacket(unk0_ABC).require match {
case OutfitMemberEvent(unk00, outfit_guid, unk1, unk2, unk3, member_name, unk7, unk8, unk9, unk10, unk12, unk13, unk14, unk15) =>
PacketCoding.decodePacket(unk0_ABC_Lazer).require match {
case OutfitMemberEvent(unk00, outfit_guid, unk1, unk2, unk3, unk4, unk5, unk6, member_name, unk7, unk8, unk9, unk10, unk11) =>
unk00 mustEqual 0
outfit_guid mustEqual PlanetSideGUID(6418)
unk1 mustEqual 0
unk2 mustEqual 49984
unk3 mustEqual 10
unk2 mustEqual 0
unk3 mustEqual 64
unk4 mustEqual 195
unk5 mustEqual 10
unk6 mustEqual 0
member_name mustEqual "Lazer1982"
unk7 mustEqual 244
unk8 mustEqual 58
unk9 mustEqual 57413
unk10 mustEqual 11
unk12 mustEqual 76
unk13 mustEqual 96
unk14 mustEqual 64
unk15 mustEqual 16
unk7 mustEqual 15092
unk8 mustEqual 57413
unk9 mustEqual 19467
unk10 mustEqual 16480
unk11 mustEqual 16
case _ =>
ko
}
@ -39,20 +57,20 @@ val unk0_ABC: ByteVector = hex"90 048640001030c28022404c0061007a0065007200310039
unk00 = 0,
outfit_id = PlanetSideGUID(6418),
unk1 = 0,
unk2 = 49984,
unk3 = 10,
unk2 = 0,
unk3 = 64,
unk4 = 195,
unk5 = 10,
unk6 = 0,
member_name = "Lazer1982",
unk7 = 244,
unk8 = 58,
unk9 = 57413,
unk10 = 11,
unk12 = 76,
unk13 = 96,
unk14 = 64,
unk15 = 16,
unk7 = 15092,
unk8 = 57413,
unk9 = 19467,
unk10 = 16480,
unk11 = 16,
)
val pkt = PacketCoding.encodePacket(msg).require.toByteVector
pkt mustEqual unk0_ABC
pkt mustEqual unk0_ABC_Lazer
}
}