From bdd7d0ec36b5cea3ebc5a65239cdebea5ba60ec9 Mon Sep 17 00:00:00 2001 From: FateJH Date: Tue, 2 May 2017 08:38:11 -0400 Subject: [PATCH] clarifying the fields of this packet; adding working tests; adding WSA match case; reset starting continent back to home3 (my mistake) --- .../packet/game/UnuseItemMessage.scala | 17 +++++++---- .../scala/game/UnuseItemMessageTest.scala | 28 +++++++++++++++++++ .../src/main/scala/WorldSessionActor.scala | 5 +++- 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 common/src/test/scala/game/UnuseItemMessageTest.scala diff --git a/common/src/main/scala/net/psforever/packet/game/UnuseItemMessage.scala b/common/src/main/scala/net/psforever/packet/game/UnuseItemMessage.scala index d9b3d85d..63433ded 100644 --- a/common/src/main/scala/net/psforever/packet/game/UnuseItemMessage.scala +++ b/common/src/main/scala/net/psforever/packet/game/UnuseItemMessage.scala @@ -6,11 +6,16 @@ import scodec.Codec import scodec.codecs._ /** - * Dispatched by the client when its player is done using something. - * The classic example is sifting through backpacks, an exclusive activity that only one player can do at a time. + * Dispatched by the client when its player is done using something.
+ *
+ * The common example is sifting through backpacks, an activity that only one player is allowed to do at a time. + * When a backpack is accessed by one player, other players are blocked. + * When the first player is done accessing the backpack, this packet informs the server so other players may be allowed access. + * @param player_guid the player + * @param item_guid the item */ -final case class UnuseItemMessage(guid1 : PlanetSideGUID, - guid2 : PlanetSideGUID) +final case class UnuseItemMessage(player_guid : PlanetSideGUID, + item_guid : PlanetSideGUID) extends PlanetSideGamePacket { type Packet = UnuseItemMessage def opcode = GamePacketOpcode.UnuseItemMessage @@ -19,7 +24,7 @@ final case class UnuseItemMessage(guid1 : PlanetSideGUID, object UnuseItemMessage extends Marshallable[UnuseItemMessage] { implicit val codec : Codec[UnuseItemMessage] = ( - ("guid1" | PlanetSideGUID.codec) :: - ("guid2" | PlanetSideGUID.codec) + ("player_guid" | PlanetSideGUID.codec) :: + ("item_guid" | PlanetSideGUID.codec) ).as[UnuseItemMessage] } diff --git a/common/src/test/scala/game/UnuseItemMessageTest.scala b/common/src/test/scala/game/UnuseItemMessageTest.scala new file mode 100644 index 00000000..c4b08213 --- /dev/null +++ b/common/src/test/scala/game/UnuseItemMessageTest.scala @@ -0,0 +1,28 @@ +// Copyright (c) 2017 PSForever +package game + +import org.specs2.mutable._ +import net.psforever.packet._ +import net.psforever.packet.game._ +import scodec.bits._ + +class UnuseItemMessageTest extends Specification { + val string = hex"26 4B00 340D" + + "decode" in { + PacketCoding.DecodePacket(string).require match { + case UnuseItemMessage(player, item) => + player mustEqual PlanetSideGUID(75) + item mustEqual PlanetSideGUID(3380) + case _ => + ko + } + } + + "encode" in { + val msg = UnuseItemMessage(PlanetSideGUID(75), PlanetSideGUID(3380)) + 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 804149d7..3e473610 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -190,7 +190,7 @@ class WorldSessionActor extends Actor with MDCContextAware { log.debug("Object: " + obj) // LoadMapMessage 13714 in mossy .gcap // XXX: hardcoded shit - sendResponse(PacketCoding.CreateGamePacket(0, LoadMapMessage("map10","z10",40100,25,true,3770441820L))) //VS Sanctuary + sendResponse(PacketCoding.CreateGamePacket(0, LoadMapMessage("map13","home3",40100,25,true,3770441820L))) //VS Sanctuary sendResponse(PacketCoding.CreateGamePacket(0, ZonePopulationUpdateMessage(PlanetSideGUID(13), 414, 138, 0, 138, 0, 138, 0, 138, 0))) sendResponse(PacketCoding.CreateGamePacket(0, objectHex)) @@ -355,6 +355,9 @@ class WorldSessionActor extends Actor with MDCContextAware { sendResponse(PacketCoding.CreateGamePacket(0, GenericObjectStateMsg(object_guid, 16))) } + case msg @ UnuseItemMessage(player, item) => + log.info("UnuseItem: " + msg) + case msg @ GenericObjectStateMsg(object_guid, unk1) => log.info("GenericObjectState: " + msg)