From 3c98954a50d06a26aa2bde62bc0c221321e20c45 Mon Sep 17 00:00:00 2001 From: FateJH Date: Thu, 9 Feb 2017 21:19:34 -0500 Subject: [PATCH] replaced Integer (8u) with three Booleans (1u + 1u + 1u) --- .../game/BroadcastWarpgateUpdateMessage.scala | 21 ++++++++++++------- common/src/test/scala/GamePacketTest.scala | 8 ++++--- .../src/main/scala/WorldSessionActor.scala | 6 +++++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/common/src/main/scala/net/psforever/packet/game/BroadcastWarpgateUpdateMessage.scala b/common/src/main/scala/net/psforever/packet/game/BroadcastWarpgateUpdateMessage.scala index 71975c42..e4c07a4f 100644 --- a/common/src/main/scala/net/psforever/packet/game/BroadcastWarpgateUpdateMessage.scala +++ b/common/src/main/scala/net/psforever/packet/game/BroadcastWarpgateUpdateMessage.scala @@ -10,21 +10,26 @@ import scodec.codecs._ * * Change the map name of a warpgate into "Broadcast Warpgate." * If a proper warpgate is not designated, nothing happens. - * The input state is a byte starting at 00 where the first valid "on" state is 20. - * Subsequent "on" states are 40 values apart - 20, 60, A0, and E0. + * The input state is a byte starting at `00` where the first valid "on" state is `20`. + * Subsequent "on" states are '40' values apart - '20', '60', 'A0', and 'E0'. + * 'C0' is an uncommon value. * All other numbers (seem to) default to the normal map designation for the warpgate. * * Exploration: is this packet merely cosmetic or does it change the functionality of a warpgate too? * Exploration: are there any differences between the states besides "on" and "off"? * * @param continent_guid identifies the zone (continent) - * @param building_guid identifies the warpgate (see BuildingInfoUpdateMessage) - * @param state whether or not a warpgate is considered "broadcast;" - * 00, 20, 80, and A0 are common values; C0 is an uncommon value + * @param building_guid identifies the warpgate (see `BuildingInfoUpdateMessage`) + * @param state1 na + * @param state2 na + * @param is_broadcast if true, the gate replaces its destination text with "Broadcast;" + * the owner faction may shortcut between disconnected gates along the intercontinental lattice */ final case class BroadcastWarpgateUpdateMessage(continent_guid : PlanetSideGUID, building_guid : PlanetSideGUID, - state : Int) + state1 : Boolean, + state2 : Boolean, + is_broadcast : Boolean) extends PlanetSideGamePacket { type Packet = BroadcastWarpgateUpdateMessage def opcode = GamePacketOpcode.BroadcastWarpgateUpdateMessage @@ -35,6 +40,8 @@ object BroadcastWarpgateUpdateMessage extends Marshallable[BroadcastWarpgateUpda implicit val codec : Codec[BroadcastWarpgateUpdateMessage] = ( ("continent_guid" | PlanetSideGUID.codec) :: ("building_guid" | PlanetSideGUID.codec) :: - ("state" | uint8L) + ("state1" | bool) :: + ("state2" | bool) :: + ("is_broadcast" | bool) ).as[BroadcastWarpgateUpdateMessage] } diff --git a/common/src/test/scala/GamePacketTest.scala b/common/src/test/scala/GamePacketTest.scala index 7eac851e..9da598c2 100644 --- a/common/src/test/scala/GamePacketTest.scala +++ b/common/src/test/scala/GamePacketTest.scala @@ -1445,17 +1445,19 @@ class GamePacketTest extends Specification { "decode" in { PacketCoding.DecodePacket(string).require match { - case BroadcastWarpgateUpdateMessage(continent_guid, building_guid, state) => + case BroadcastWarpgateUpdateMessage(continent_guid, building_guid, state1, state2, state3) => continent_guid mustEqual PlanetSideGUID(13) building_guid mustEqual PlanetSideGUID(1) - state mustEqual 32 + state1 mustEqual false + state2 mustEqual false + state3 mustEqual true case default => ko } } "encode" in { - val msg = BroadcastWarpgateUpdateMessage(PlanetSideGUID(13), PlanetSideGUID(1), 32) + val msg = BroadcastWarpgateUpdateMessage(PlanetSideGUID(13), PlanetSideGUID(1), false, false, true) val pkt = PacketCoding.EncodePacket(msg).require.toByteVector pkt mustEqual string diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index 23f5f6d9..b4eafb6e 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -189,7 +189,11 @@ class WorldSessionActor extends Actor with MDCContextAware { sendResponse(PacketCoding.CreateGamePacket(0, TimeOfDayMessage(1191182336))) sendResponse(PacketCoding.CreateGamePacket(0, ContinentalLockUpdateMessage(PlanetSideGUID(13), PlanetSideEmpire.VS))) // "The VS have captured the VS Sanctuary." - sendResponse(PacketCoding.CreateGamePacket(0, BroadcastWarpgateUpdateMessage(PlanetSideGUID(13), PlanetSideGUID(1), 32))) // VS Sanctuary: Inactive Warpgate -> Broadcast Warpgate + sendResponse(PacketCoding.CreateGamePacket(0, BroadcastWarpgateUpdateMessage(PlanetSideGUID(13), PlanetSideGUID(1), false, false, true))) // VS Sanctuary: Inactive Warpgate -> Broadcast Warpgate + + sendRawResponse(hex"A0 03 00 03 00 06 00 00 00 01 80 00 00 00 10 00 00 00 00 00 00 40") + sendRawResponse(hex"CD 03 00 03 00 00 00 00") + sendResponse(PacketCoding.CreateGamePacket(0, BroadcastWarpgateUpdateMessage(PlanetSideGUID(3), PlanetSideGUID(3), true, false, true))) sendResponse(PacketCoding.CreateGamePacket(0,BuildingInfoUpdateMessage( PlanetSideGUID(6), //Ceryshen