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