diff --git a/src/main/scala/net/psforever/packet/game/GenericActionMessage.scala b/src/main/scala/net/psforever/packet/game/GenericActionMessage.scala index a7b60f0a..c0a920a4 100644 --- a/src/main/scala/net/psforever/packet/game/GenericActionMessage.scala +++ b/src/main/scala/net/psforever/packet/game/GenericActionMessage.scala @@ -19,8 +19,11 @@ import scodec.codecs._ * 07 - warning: missile lock
* 08 - warning: Wasp missile lock
* 09 - warning: T-REK lock
+ * 11 - Drop special item e.g. LLU
* 12 - sound: base captured fanfare
* 14 - prompt: new character basic training
+ * 15 - MAX Deploy
+ * 16 - MAX Undeploy
* 22 - message: awarded a cavern capture (updates cavern capture status)
* 23 - award a cavern kill
* 24 - message: you have been imprinted (updates imprinted status; does it?)
@@ -53,7 +56,21 @@ final case class GenericActionMessage(action: Int) extends PlanetSideGamePacket } object GenericActionMessage extends Marshallable[GenericActionMessage] { + def apply(action: GenericActionEnum.GenericActionEnum): GenericActionMessage = { + GenericActionMessage(action.id) + } + implicit val codec: Codec[GenericActionMessage] = ( "action" | uint(6) ).as[GenericActionMessage] } + +object GenericActionEnum extends Enumeration { + type GenericActionEnum = Value + + /** Drop special item e.g. LLU */ + val DropSpecialItem = Value(11) + + /** Plays the base capture fanfare sound */ + val BaseCaptureFanfare = Value(12) +} diff --git a/src/main/scala/net/psforever/packet/game/GenericObjectActionMessage.scala b/src/main/scala/net/psforever/packet/game/GenericObjectActionMessage.scala index 87a19a15..91d71720 100644 --- a/src/main/scala/net/psforever/packet/game/GenericObjectActionMessage.scala +++ b/src/main/scala/net/psforever/packet/game/GenericObjectActionMessage.scala @@ -21,6 +21,7 @@ import shapeless.{::, HNil} * 11 - Deploy capital base shield pole with animation and broadcasts "The capitol force dome at X has been activated" * 12 - Stow capital base shield pole with animation and broadcasts "The capitol force dome at X has been deactivated" * 13 - Deploy capital base shield pole (instantly, unless still in the middle of the stow animation) + * 14 - Changes capture console to say "Facility hacked by the LLU has been spawned." when looked at * 15 - Displays "This facility's generator is under attack!" * 16 - Displays "Generator has Overloaded! Evacuate Generator Room Immediately!" * 17 - Displays "This facility's generator is back on line" @@ -41,6 +42,7 @@ import shapeless.{::, HNil} * 53 - Put down an FDU * 56 - Sets vehicle or player to be black ops * 57 - Reverts player from black ops + * @see GenericObjectActionEnum */ final case class GenericObjectActionMessage(object_guid: PlanetSideGUID, code: Int) extends PlanetSideGamePacket { type Packet = GenericObjectActionMessage @@ -49,6 +51,10 @@ final case class GenericObjectActionMessage(object_guid: PlanetSideGUID, code: I } object GenericObjectActionMessage extends Marshallable[GenericObjectActionMessage] { + def apply(object_guid: PlanetSideGUID, code: GenericObjectActionEnum.GenericObjectActionEnum): GenericObjectActionMessage = { + GenericObjectActionMessage(object_guid, code.id) + } + implicit val codec: Codec[GenericObjectActionMessage] = ( ("object_guid" | PlanetSideGUID.codec) :: ("code" | uint(bits = 6)) :: @@ -64,3 +70,12 @@ object GenericObjectActionMessage extends Marshallable[GenericObjectActionMessag } ) } + +object GenericObjectActionEnum extends Enumeration { + type GenericObjectActionEnum = Value + + /** Effect: Capture console displays "Facility hacked by the LLU has been spawned." when looked at
+ * Target: CaptureTerminal + */ + val FlagSpawned = Value(14) +} diff --git a/src/main/scala/net/psforever/packet/game/ObjectAttachMessage.scala b/src/main/scala/net/psforever/packet/game/ObjectAttachMessage.scala index 42d4c713..bb2f04ea 100644 --- a/src/main/scala/net/psforever/packet/game/ObjectAttachMessage.scala +++ b/src/main/scala/net/psforever/packet/game/ObjectAttachMessage.scala @@ -33,6 +33,7 @@ import scodec.codecs._ * `0x84` - 4 - knife holster
* `0x86` - 6 - grid (1,1)
* `0x00FA` - 250 - is a special dest/extra code that "attaches the item to the player's cursor" + * `0x00FC` - 252 - special item slot e.g. LLU (Possibly also cavern modules) * @param parent_guid the parent object * @param child_guid the child object * @param slot a codified location within the parent object's inventory; diff --git a/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala b/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala index a8922214..02b02301 100644 --- a/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala +++ b/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala @@ -144,8 +144,8 @@ import scodec.codecs._ * `43 - Info on avatar name : 0 = Nothing, 1 = "(LD)" message`
* `45 - NTU charge bar 0-10, 5 = 50% full. Seems to apply to both ANT and NTU Silo (possibly siphons?)`
* `46 - Sends "Generator damage is at a critical level!" message` - * `47 - Sets base NTU level to CRITICAL. MUST use base MapId not base GUID`
- * `48 - Set to 1 to send base power loss message & turns on red warning lights throughout base. MUST use base MapId not base GUID`?
+ * `47 - Sets base NTU level to CRITICAL.`
+ * `48 - Set to 1 to send base power loss message & turns on red warning lights throughout base.
* `49 - Vehicle texture effects state? (>0 turns on ANT panel glow or ntu silo panel glow + orbs) (bit?)`
* `52 - Vehicle particle effects? (>0 turns on orbs going towards ANT. Doesn't affect silo) (bit?)`
* `53 - LFS. Value is 1 to flag LFS`
@@ -161,7 +161,7 @@ import scodec.codecs._ * `55 - "Someone is attempting to Heal you". Value is 1`
* `56 - "Someone is attempting to Repair you". Value is 1`
* `64 - ????? related to using router telepads` - * `67 - Enables base shields (from cavern module/lock). MUST use base MapId not GUID`
+ * `67 - Enables base shields (from cavern module/lock)`
* `73 - "You are locked into the Core Beam. Charging your Module now.". Value is 1 to active`
* `77 - Cavern Facility Captures. Value is the number of captures`
* `78 - Cavern Kills. Value is the number of kills`
diff --git a/src/main/scala/net/psforever/types/ChatMessageType.scala b/src/main/scala/net/psforever/types/ChatMessageType.scala index d1e1c11f..dd0d9654 100644 --- a/src/main/scala/net/psforever/types/ChatMessageType.scala +++ b/src/main/scala/net/psforever/types/ChatMessageType.scala @@ -248,14 +248,24 @@ object ChatMessageType extends Enum[ChatMessageType] { case object CMT_REMOVE_VANUMODULE extends ChatMessageType // /moduleremove OR /modulerm case object CMT_DEBUG_MASSIVE extends ChatMessageType // /debugmassive case object CMT_WARP_TO_NEXT_BILLBOARD extends ChatMessageType // ??? - case object UNK_222 extends ChatMessageType // ??? "CTF Flag stolen" - case object UNK_223 extends ChatMessageType // ??? "CTF Flag lost" + case object UNK_222 extends ChatMessageType // "CTF Flag stolen" + // Plays a trumpet-like sound and displays the message: " has spawned a LLU" + // "It must be taken to 's Control Console within 15 minutes or the hack will fail!" + // Example string: @CTF_FlagSpawned^@cryo_facility~^@Hanish~^@comm_station_dsp~^@Akkan~^15~ + case object UNK_223 extends ChatMessageType // "CTF Flag lost" + // Handles both LLU lost and LLU resecured + // Example string: @CTF_Failed_SourceResecured^@TerranRepublic~^@Hanish~ + // Output: "The Terran Republic resecured Hanish!" "The LLU was lost!" + // Example string: @CTF_Failed_FlagLost^@TerranRepublic~^@Hanish~ + // Output: "The Terran Republic lost Hanish's LLU" "Hack canceled!" case object UNK_224 extends ChatMessageType // ??? "Vehicle Dismount" case object UNK_225 extends ChatMessageType // ??? empty case object UNK_226 extends ChatMessageType // ??? empty case object UNK_227 extends ChatMessageType // ??? empty case object UNK_228 extends ChatMessageType // ??? empty - case object UNK_229 extends ChatMessageType // ??? empty + case object UNK_229 extends ChatMessageType // See UNK_222 - seems to do the same except without trumpet-like sound + // Is used for flag pickup @CTF_FlagPickedUp^OzTurtle~^@NewConglomerate~^@Qumu~ + // Or flag warning @CTF_Warning_Carrier^VanuHemlock~^@VanuSovereigncy~^@Mani~^@Dagur~^10~ case object UNK_230 extends ChatMessageType // ??? "Vehicle Mount" case object UNK_231 extends ChatMessageType // ??? empty case object UNK_232 extends ChatMessageType // ??? empty