From aee720ae842210ec59868f85de1210be769520c6 Mon Sep 17 00:00:00 2001 From: FateJH Date: Thu, 19 Jan 2017 13:39:54 -0500 Subject: [PATCH] modifying packet for previously unhandled fields (all) --- .../packet/game/BuildingInfoUpdateMessage.scala | 13 ++++++++++--- common/src/test/scala/GamePacketTest.scala | 7 ++++--- pslogin/src/main/scala/WorldSessionActor.scala | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/common/src/main/scala/net/psforever/packet/game/BuildingInfoUpdateMessage.scala b/common/src/main/scala/net/psforever/packet/game/BuildingInfoUpdateMessage.scala index c60029b2..b883be03 100644 --- a/common/src/main/scala/net/psforever/packet/game/BuildingInfoUpdateMessage.scala +++ b/common/src/main/scala/net/psforever/packet/game/BuildingInfoUpdateMessage.scala @@ -20,6 +20,9 @@ final case class Additional1(unk1 : String, unk2 : Int, unk3 : Long) +final case class Additional2(unk1 : Int, + unk2 : Long) + final case class Additional3(unk1 : Boolean, unk2 : Int) @@ -40,7 +43,7 @@ final case class BuildingInfoUpdateMessage(continent_guid : PlanetSideGUID, force_dome_active : Boolean, lattice_benefit : Int, unk3 : Int, - unk4 : Int, + unk4 : List[Additional2], unk5 : Long, unk6 : Boolean, unk7 : Int, @@ -60,6 +63,11 @@ object BuildingInfoUpdateMessage extends Marshallable[BuildingInfoUpdateMessage] ("unk3" | uint32L) ).as[Additional1] + private val additional2_codec : Codec[Additional2] = ( + ("unk1" | uint4L) :: + ("unk2" | uint32L) + ).as[Additional2] + private val additional3_codec : Codec[Additional3] = ( ("unk1" | bool) :: ("unk2" | uint2L) @@ -80,8 +88,7 @@ object BuildingInfoUpdateMessage extends Marshallable[BuildingInfoUpdateMessage] ("force_dome_active" | bool) :: ("lattice_benefit" | uintL(5)) :: //5 possible benefits, bitwise combination. (MSB)5:Tech 4:Inter 3:Bio 2:Drop 1:Amp(LSB) ("unk3" | uintL(10)) :: //Module related. 0x3FF gives all modules with no timer. Unclear how this works. - ("unk4" | uint4L) :: - //TODO: additional fields if unk4 > 0 + ("unk4" | listOfN(uint4L, additional2_codec)) :: ("unk5" | uint32L) :: ("unk6" | bool) :: (("unk7" | uint4L) >>:~ { unk7 => diff --git a/common/src/test/scala/GamePacketTest.scala b/common/src/test/scala/GamePacketTest.scala index 635a9508..6faa6e6e 100644 --- a/common/src/test/scala/GamePacketTest.scala +++ b/common/src/test/scala/GamePacketTest.scala @@ -1878,7 +1878,7 @@ class GamePacketTest extends Specification { force_dome_active : Boolean, lattice_benefit : Int, unk3 : Int, - unk4 : Int, + unk4 : List[Additional2], unk5 : Long, unk6 : Boolean, unk7 : Int, @@ -1899,7 +1899,8 @@ class GamePacketTest extends Specification { force_dome_active mustEqual false lattice_benefit mustEqual 28 unk3 mustEqual 0 - unk4 mustEqual 0 + unk4.size mustEqual 0 + unk4.isEmpty mustEqual true unk5 mustEqual 0 unk6 mustEqual false unk7 mustEqual 8 @@ -1926,7 +1927,7 @@ class GamePacketTest extends Specification { false, 28, 0, - 0, + Nil, 0, false, 8, diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index ffd14068..fbce7b3e 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -206,7 +206,7 @@ class WorldSessionActor extends Actor with MDCContextAware { true, //Force dome active 16, //Tech plant lattice benefit 0, - 0, //!! Field > 0 will cause malformed packet. See class def. + Nil, //!! Field > 0 will cause malformed packet. See class def. 0, false, 8, //!! Field != 8 will cause malformed packet. See class def.