final case class ObjectCreateMessage(streamLength: Long, objectClass: Int, guid: PlanetSideGUID, parentInfo: Option[ObjectCreateMessageParent], data: ConstructorData) extends PlanetSideGamePacket with Product with Serializable
Communicate with the client that a certain object with certain properties is to be created.
In general, ObjectCreateMessage
and its counterpart ObjectCreateDetailedMessage
should look similar.
ObjectCreateMessage
is capable of creating every non-environmental object in the game through the use of encoding patterns.
The objects produced by this packet generally do not always fully express all the complexities of the object class.
With respect to a client's avatar, all of the items in his inventory are given thorough detail so that the client can account for their interaction.
The "shallow" objects produced by this packet are not like that.
They express only the essential information necessary for client interaction when the client interacts with them.
For example, a weapon defined by this packet may not care internally what fire mode it is in or how much ammunition it has.
Such a weapon is not in the client's player's holster or inventory.
It is imperceptive information to which he would not currently have access.
An 0x17
game object is, therefore, a game object with only the essential data exposed.
When interacting with an 0x17
game object, the server will swap back and forth between it and an 0x18
object.
(Or it will be removed when it is placed somewhere a given client will no longer be able to see it.)
The purpose of this conversion is to control network traffic and object agency.
It is not necessary to keep track of all objects on every player on every client individually.
This relates to the goal of this packet exposing only "essential data."
One player does not need to know how much ammunition remains in a weapon belonging to another player normally.
One player also does not need to know how much ammunition is used up when another player reloads their weapon.
The only way the first player will know is when the weapon is transferred into his own inventory.
All other clients are spared micromanagement of the hypothetical other player's weapon.
Updated information is only made available when and where it is needed.
Knowing the object's type is necessary for proper parsing.
If the object does not have encoding information or is unknown, it will not translate between byte data and a game object.
- streamLength
the total length of the data that composes this packet in bits; exclude the opcode (1 byte) and end padding (0-7 bits); when encoding, it will be calculated automatically
- objectClass
the code for the type of object being constructed; always an 11-bit LE value
- guid
the GUID this object will be assigned
- parentInfo
if defined, the relationship between this object and another object (its parent)
- data
the data used to construct this type of object; on decoding, set to
None
if the process failed
- Source
- ObjectCreateMessage.scala
- See also
ObjectCreateDetailedMessage
ObjectCreateMessageParent
- Alphabetic
- By Inheritance
- ObjectCreateMessage
- Product
- Equals
- PlanetSideGamePacket
- PlanetSidePacket
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new ObjectCreateMessage(streamLength: Long, objectClass: Int, guid: PlanetSideGUID, parentInfo: Option[ObjectCreateMessageParent], data: ConstructorData)
- streamLength
the total length of the data that composes this packet in bits; exclude the opcode (1 byte) and end padding (0-7 bits); when encoding, it will be calculated automatically
- objectClass
the code for the type of object being constructed; always an 11-bit LE value
- guid
the GUID this object will be assigned
- parentInfo
if defined, the relationship between this object and another object (its parent)
- data
the data used to construct this type of object; on decoding, set to
None
if the process failed
Type Members
- type Packet = ObjectCreateMessage
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- val data: ConstructorData
- def encode: Attempt[BitVector]
- Definition Classes
- ObjectCreateMessage → PlanetSidePacket
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- val guid: PlanetSideGUID
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- val objectClass: Int
- def opcode: GamePacketOpcode.Value
- Definition Classes
- ObjectCreateMessage → PlanetSideGamePacket → PlanetSidePacket
- val parentInfo: Option[ObjectCreateMessageParent]
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- val streamLength: Long
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()