This packet should be generated by firing specific weapons in specific fire modes.
For example, the Phoenix (<code>hunterseeker</code>) discharged in its primary fire mode generates this packet;
but, the Phoenix in secondary fire mode does not.
The Striker (<code>striker</code>) discharged in its primary fire mode generates this packet;
but, the Striker in secondary fire mode does not.
The chosen fire mode(s) are not a straight-fire projectile but one that has special control asserted over it.
For the Phoenix, it is user operated (camera-guided).
For the Striker, it tracks towards a valid target while the weapon's reticle hovers over that target.<br>
<br>
This packet will continue to be dispatched by the client for as long as the projectile being tracked is in the air.
All projectiles have a maximum lifespan before they will lose control and either despawn and/or explode.
This number is tracked in the packet for simplicity.
<br>
This control can not be demonstrated until that projectile is physically constructed on the other clients
in the same way that a player or a vehicle is constructed.
A projectile that exhibits intentional construction behavior is flagged using the property <code>exists_on_remote_client</code>.
The model comes with a number of caveats,
some that originate from the object construction process itself,
but also some from this packet.
For example,
as indicated by the static <code>shot_original_orient</code> values reported by this packet.
a discharged controlled projectile will not normally rotate.
A minor loss of lifespan may be levied.</p></div><dlclass="paramcmts block"><dtclass="param">projectile_guid</dt><ddclass="cmt"><p>when dispatched by the client, the client-specific local unique identifier of the projectile;
when dispatched by the server, the global unique identifier for the synchronized projectile object</p></dd><dtclass="param">shot_pos</dt><ddclass="cmt"><p>the position of the projectile</p></dd><dtclass="param">shot_vel</dt><ddclass="cmt"><p>the velocity of the projectile</p></dd><dtclass="param">shot_original_orient</dt><ddclass="cmt"><p>the orientation of the projectile when it was discharged</p></dd><dtclass="param">sequence_num</dt><ddclass="cmt"><p>an incrementing index of the packet in this projectile's lifetime;
suggests the "time alive" and indicates a place in packet ordering</p></dd><dtclass="param">end</dt><ddclass="cmt"><p>indicates the projectile has reached the end of its lifespan;
usually, it should explode</p></dd><dtclass="param">hit_target_guid</dt><ddclass="cmt"><p>the global unique identifier of the object the projwectile collided with;
will be 0 if it reached the end of its life naturally, without colliding with anything</p></dd></dl><dlclass="attributes block"><dt>Source</dt><dd><ahref="https://github.com/psforever/PSF-LoginServer/blob/master//home/runner/work/PSF-LoginServer/PSF-LoginServer/src/main/scala/net/psforever/packet/game/ProjectileStateMessage.scala"target="_blank">ProjectileStateMessage.scala</a></dd><dt>See also</dt><dd><spanclass="cmt"><p><code>ProjectileDefinition</code></p></span><spanclass="cmt"><p><code>RemoteProjectileData</code></p></span></dd></dl><divclass="toggleContainer"><divclass="toggle block"><span>Linear Supertypes</span><divclass="superTypes hiddenContent"><spanname="scala.Product"class="extype">Product</span>, <spanname="scala.Equals"class="extype">Equals</span>, <ahref="../PlanetSideGamePacket.html"name="net.psforever.packet.PlanetSideGamePacket"id="net.psforever.packet.PlanetSideGamePacket"class="extype">PlanetSideGamePacket</a>, <ahref="../PlanetSidePacket.html"name="net.psforever.packet.PlanetSidePacket"id="net.psforever.packet.PlanetSidePacket"class="extype">PlanetSidePacket</a>, <ahref="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html#java.io.Serializable"name="java.io.Serializable"id="java.io.Serializable"class="extype">Serializable</a>, <spanname="scala.AnyRef"class="extype">AnyRef</span>, <spanname="scala.Any"class="extype">Any</span></div></div></div></div><divid="mbrsel"><divclass="toggle"></div><divid="memberfilter"><iclass="material-icons arrow"></i><spanclass="input"><inputplaceholder="Filter all members"id="mbrsel-input"type="text"accesskey="/"/></span><iclass="clear material-icons"></i></div><divid="filterby"><divid="order"><spanclass="filtertype">Ordering</span><ol><liclass="alpha in"><span>Alphabetic</span></li><liclass="inherit out"><span>By Inheritance</span></li></ol></div><divclass="ancestors"><spanclass="filtertype">Inherited<br/></span><olid="linearization"><liclass="in"name="net.psforever.packet.game.ProjectileStateMessage"><span>ProjectileStateMessage</span></li><liclass="in"name="scala.Product"><span>Product</span></li><liclass="in"name="scala.Equals"><span>Equals</span></li><liclass="in"name="net.psforever.packet.PlanetSideGamePacket"><span>PlanetSideGamePacket</span></li><liclass="in"name="net.psforever.packet.PlanetSidePacket"><span>PlanetSidePacket</span></li><liclass="in"name="java.io.Serializable"><span>Serializable</span></li><liclass="in"name="scala.AnyRef"><span>AnyRef</span></li><liclass="in"name="scala.Any"><span>Any</span></li></ol></div><divclass="ancestors"><spanclass="filtertype"></span><ol><liclass="hideall out"><span>Hide All</span></li><liclass="showall in"><span>Show All</span></li></ol></div><divid="visbl"><spanclass="filtertype">Visibility</span><ol><liclass="public in"><span>Public</span></li><liclass="protected out"><span>Protected</span></li></ol></div></div></div><divid="template"><divid="allMembers"><divid="constructors"class="members"><h3>Instance Constructors</h3><ol><liclass="indented0 "name="net.psforever.packet.game.ProjectileStateMessage#<init>"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="<init>(projectile_guid:net.psforever.types.PlanetSideGUID,shot_pos:net.psforever.types.Vector3,shot_vel:net.psforever.types.Vector3,shot_original_orient:net.psforever.types.Vector3,sequence_num:Int,end:Boolean,hit_target_guid:net.psforever.types.PlanetSideGUID):net.psforever.packet.game.ProjectileStateMessage"></a><aid="<init>:ProjectileStateMessage"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/ProjectileStateMessage.html#<init>(projectile_guid:net.psforever.types.PlanetSideGUID,shot_pos:net.psforever.types.Vector3,shot_vel:net.psforever.types.Vector3,shot_original_orient:net.psforever.types.Vector3,sequence_num:Int,end:Boolean,hit_target_guid:net.psforever.types.PlanetSideGUID):net.psforever.packet.game.ProjectileStateMessage"title="Permalink"><iclass="material-icons">
when dispatched by the server, the global unique identifier for the synchronized projectile object</p></dd><dtclass="param">shot_pos</dt><ddclass="cmt"><p>the position of the projectile</p></dd><dtclass="param">shot_vel</dt><ddclass="cmt"><p>the velocity of the projectile</p></dd><dtclass="param">shot_original_orient</dt><ddclass="cmt"><p>the orientation of the projectile when it was discharged</p></dd><dtclass="param">sequence_num</dt><ddclass="cmt"><p>an incrementing index of the packet in this projectile's lifetime;
suggests the "time alive" and indicates a place in packet ordering</p></dd><dtclass="param">end</dt><ddclass="cmt"><p>indicates the projectile has reached the end of its lifespan;
usually, it should explode</p></dd><dtclass="param">hit_target_guid</dt><ddclass="cmt"><p>the global unique identifier of the object the projwectile collided with;
will be 0 if it reached the end of its life naturally, without colliding with anything</p></dd></dl></div></li></ol></div><divid="types"class="types members"><h3>Type Members</h3><ol><liclass="indented0 "name="net.psforever.packet.game.ProjectileStateMessage.Packet"group="Ungrouped"fullComment="no"data-isabs="false"visbl="pub"><aid="Packet=net.psforever.packet.game.ProjectileStateMessage"></a><aid="Packet:Packet"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/ProjectileStateMessage.html#Packet=net.psforever.packet.game.ProjectileStateMessage"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">type</span></span><spanclass="symbol"><spanclass="name">Packet</span><spanclass="result alias"> = <ahref=""name="net.psforever.packet.game.ProjectileStateMessage"id="net.psforever.packet.game.ProjectileStateMessage"class="extype">ProjectileStateMessage</a></span></span></li></ol></div><divclass="values members"><h3>Value Members</h3><ol><liclass="indented0 "name="scala.AnyRef#!="group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="!=(x$1:Any):Boolean"></a><aid="!=(Any):Boolean"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/ProjectileStateMessage.html#!=(x$1:Any):Boolean"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name"title="gt4s: $bang$eq">!=</span><spanclass="params">(<spanname="arg0">arg0: <spanname="scala.Any"class="extype">Any</span></span>)</span><spanclass="result">: <spanname="scala.Boolean"class="extype">Boolean</span></span></span><divclass="fullcomment"><dlclass="attributes block"><dt>Definition Classes</dt><dd>AnyRef → Any</dd></dl></div></li><liclass="indented0 "name="scala.AnyRef###"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="##:Int"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/ProjectileStateMessage.html###:Int"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name"title="gt4s: $hash$hash">##</span><spanclass="result">: <spanname="scala.Int"class="extype">Int</span></span></span><divclass="fullcomment"><dlclass="attributes block"><dt>Definition Classes</dt><dd>AnyRef → Any</dd></dl></div></li><liclass="indented0 "name="scala.AnyRef#=="group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="==(x$1:Any):Boolean"></a><aid="==(Any):Boolean"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/ProjectileStateMessage.html#==(x$1:Any):Boolean"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name"title="gt4s: $eq$eq">==</span><spanclass="params">(<spanname="arg0">arg0: <spanname="scala.Any"class="extype">Any</span></span>)</span><spanclass="result">: <spanname="scala.Boolean"class="extype">Boolean</span></span></span><divclass="fullcomment"><dlclass="attributes block"><dt>Definition Classes</dt><dd>AnyRef → Any</dd></dl></div></li><liclass="indented0 "name="scala.Any#asInstanceOf"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="asInstanceOf[T0]:T0"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/ProjectileStateMessage.html#asInstanceOf[T0]:T0"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name">asInstanceOf</span><spanclass="tparams">[<spanname="T0">T0</span>]</span><spanclass="result">: <spanname="scala.Any.asInstanc