From 5347b78e7ca63f0475db6f498da60270c3c53533 Mon Sep 17 00:00:00 2001 From: Mazo Date: Sat, 2 Jun 2018 14:08:13 +0100 Subject: [PATCH] Add CargoMountPointStatusMessage / DismountVehicleCargoMsg / MountVehicleCargomsg packets --- .../psforever/packet/GamePacketOpcode.scala | 6 +-- .../game/CargoMountPointStatusMessage.scala | 45 +++++++++++++++++++ .../packet/game/DismountVehicleCargoMsg.scala | 33 ++++++++++++++ .../packet/game/MountVehicleCargoMsg.scala | 31 +++++++++++++ .../net/psforever/types/CargoStatus.scala | 15 +++++++ 5 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 common/src/main/scala/net/psforever/packet/game/CargoMountPointStatusMessage.scala create mode 100644 common/src/main/scala/net/psforever/packet/game/DismountVehicleCargoMsg.scala create mode 100644 common/src/main/scala/net/psforever/packet/game/MountVehicleCargoMsg.scala create mode 100644 common/src/main/scala/net/psforever/types/CargoStatus.scala diff --git a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala index f1a6ea45..4300e22a 100644 --- a/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala +++ b/common/src/main/scala/net/psforever/packet/GamePacketOpcode.scala @@ -395,9 +395,9 @@ object GamePacketOpcode extends Enumeration { case 0x3f => game.ProjectileStateMessage.decode // OPCODES 0x40-4f - case 0x40 => noDecoder(MountVehicleCargoMsg) - case 0x41 => noDecoder(DismountVehicleCargoMsg) - case 0x42 => noDecoder(CargoMountPointStatusMessage) + case 0x40 => game.MountVehicleCargoMsg.decode + case 0x41 => game.DismountVehicleCargoMsg.decode + case 0x42 => game.CargoMountPointStatusMessage.decode case 0x43 => game.BeginZoningMessage.decode case 0x44 => game.ItemTransactionMessage.decode case 0x45 => game.ItemTransactionResultMessage.decode diff --git a/common/src/main/scala/net/psforever/packet/game/CargoMountPointStatusMessage.scala b/common/src/main/scala/net/psforever/packet/game/CargoMountPointStatusMessage.scala new file mode 100644 index 00000000..fa250ead --- /dev/null +++ b/common/src/main/scala/net/psforever/packet/game/CargoMountPointStatusMessage.scala @@ -0,0 +1,45 @@ +// Copyright (c) 2017 PSForever +package net.psforever.packet.game + +import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket} +import net.psforever.types.CargoStatus +import scodec.Codec +import scodec.codecs._ + +/** + * + * @param cargo_vehicle_guid Cargo vehicle GUID (galaxy / lodestar) + * @param requesting_vehicle Seems to be vehicle that requested mounting (0 after mount) + * @param mounted_vehicle Seems to be vehicle that requested mounting after mount (0 before mount) + * @param dismounted_vehicle Seems to be vehicle that was mounted after disembarking (0 before embark or reset to 0 when MountVehicleCargoMsg received) + * @param slot Mount point for cargo bay 1 = lodestar, 15 = galaxy + * @param mount_status Mount status? 0 = None, 1 = Mount/Dismount in progress, 3 = Mounted + * @param orientation 0 = normal, 1 = sideways (e.g. router in lodestar) + */ +final case class CargoMountPointStatusMessage(cargo_vehicle_guid : PlanetSideGUID, + requesting_vehicle: PlanetSideGUID, + mounted_vehicle: PlanetSideGUID, + dismounted_vehicle: PlanetSideGUID, + slot: Int, + mount_status: CargoStatus.Value, + orientation: Int) + extends PlanetSideGamePacket { + type Packet = CargoMountPointStatusMessage + + def opcode = GamePacketOpcode.CargoMountPointStatusMessage + + def encode = CargoMountPointStatusMessage.encode(this) +} + +object CargoMountPointStatusMessage extends Marshallable[CargoMountPointStatusMessage] { + implicit val codec : Codec[CargoMountPointStatusMessage] = ( + ("cargo_vehicle_guid" | PlanetSideGUID.codec) :: + ("requesting_vehicle" | PlanetSideGUID.codec) :: + ("mounted_vehicle" | PlanetSideGUID.codec) :: + ("dismounted_vehicle" | PlanetSideGUID.codec) :: + ("slot" | uint8L) :: + ("mount_status" | CargoStatus.codec) :: + ("orientation" | uint2L) + ).as[CargoMountPointStatusMessage] +} + diff --git a/common/src/main/scala/net/psforever/packet/game/DismountVehicleCargoMsg.scala b/common/src/main/scala/net/psforever/packet/game/DismountVehicleCargoMsg.scala new file mode 100644 index 00000000..63da8503 --- /dev/null +++ b/common/src/main/scala/net/psforever/packet/game/DismountVehicleCargoMsg.scala @@ -0,0 +1,33 @@ +// Copyright (c) 2017 PSForever +package net.psforever.packet.game + +import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket} +import scodec.Codec +import scodec.codecs._ + +/** + * Note: For some reason this packet does not include the GUID of the vehicle that is being dismounted from. As a workaround vehicle.MountedIn in manually set/removed + * @param player_guid // GUID of the player that is rqeuesting dismount + * @param vehicle_guid GUID of the vehicle that is requesting dismount + * @param bailed If the vehicle bailed out of the cargo vehicle + * @param requestedByPassenger If a passenger of the vehicle in the cargo bay requests dismount this bit will be set + * @param kicked If the vehicle was kicked by the cargo vehicle pilot + */ +final case class DismountVehicleCargoMsg(player_guid : PlanetSideGUID, vehicle_guid: PlanetSideGUID, bailed: Boolean, requestedByPassenger: Boolean, kicked: Boolean) + extends PlanetSideGamePacket { + type Packet = DismountVehicleCargoMsg + + def opcode = GamePacketOpcode.DismountVehicleCargoMsg + + def encode = DismountVehicleCargoMsg.encode(this) +} + +object DismountVehicleCargoMsg extends Marshallable[DismountVehicleCargoMsg] { + implicit val codec : Codec[DismountVehicleCargoMsg] = ( + ("player_guid" | PlanetSideGUID.codec) :: + ("vehicle_guid" | PlanetSideGUID.codec) :: + ("unk3" | bool) :: // bailed? + ("unk4" | bool) :: + ("unk5" | bool) + ).as[DismountVehicleCargoMsg] +} \ No newline at end of file diff --git a/common/src/main/scala/net/psforever/packet/game/MountVehicleCargoMsg.scala b/common/src/main/scala/net/psforever/packet/game/MountVehicleCargoMsg.scala new file mode 100644 index 00000000..2eab06ed --- /dev/null +++ b/common/src/main/scala/net/psforever/packet/game/MountVehicleCargoMsg.scala @@ -0,0 +1,31 @@ +// Copyright (c) 2017 PSForever +package net.psforever.packet.game + +import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket} +import scodec.Codec +import scodec.codecs._ + +/** + * + * @param player_guid The guid of the player sending the request to board another vehicle with a cargo vehicle + * @param vehicle_guid The guid of the vehicle for the requesting player + * @param target_vehicle The cargo vehicle guid e.g. Galaxy / Lodestar + * @param unk4 + */ +final case class MountVehicleCargoMsg(player_guid : PlanetSideGUID, vehicle_guid: PlanetSideGUID, target_vehicle: PlanetSideGUID, unk4: Int) + extends PlanetSideGamePacket { + type Packet = MountVehicleCargoMsg + + def opcode = GamePacketOpcode.MountVehicleCargoMsg + + def encode = MountVehicleCargoMsg.encode(this) +} + +object MountVehicleCargoMsg extends Marshallable[MountVehicleCargoMsg] { + implicit val codec : Codec[MountVehicleCargoMsg] = ( + ("unk1" | PlanetSideGUID.codec) :: + ("unk2" | PlanetSideGUID.codec):: + ("unk3" | PlanetSideGUID.codec) :: + ("unk4" | uint8L) + ).as[MountVehicleCargoMsg] +} diff --git a/common/src/main/scala/net/psforever/types/CargoStatus.scala b/common/src/main/scala/net/psforever/types/CargoStatus.scala new file mode 100644 index 00000000..9cee94a7 --- /dev/null +++ b/common/src/main/scala/net/psforever/types/CargoStatus.scala @@ -0,0 +1,15 @@ +// Copyright (c) 2017 PSForever +package net.psforever.types + +import net.psforever.packet.PacketHelpers +import scodec.codecs._ + +object CargoStatus extends Enumeration { + type Type = Value + + val Empty = Value(0) + val InProgress = Value(1) + val Occupied = Value(3) + + implicit val codec = PacketHelpers.createEnumerationCodec(this, uint4L) +}