mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-13 15:34:42 +00:00
added flags to indicate the projectile must be handled using the server as an intermediary; eliminated obsolete enumeration data; added analysis for the oicw_little_buddy
This commit is contained in:
parent
cea105042c
commit
56c7c4544e
6 changed files with 40 additions and 21 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) 2017 PSForever
|
// Copyright (c) 2017 PSForever
|
||||||
package net.psforever.objects
|
package net.psforever.objects
|
||||||
|
|
||||||
|
import net.psforever.objects.GlobalDefinitions.sparrow_projectile
|
||||||
import net.psforever.objects.ballistics.Projectiles
|
import net.psforever.objects.ballistics.Projectiles
|
||||||
import net.psforever.objects.ce.{DeployableCategory, DeployedItem}
|
import net.psforever.objects.ce.{DeployableCategory, DeployedItem}
|
||||||
import net.psforever.objects.definition._
|
import net.psforever.objects.definition._
|
||||||
|
|
@ -297,6 +298,8 @@ object GlobalDefinitions {
|
||||||
|
|
||||||
val oicw_projectile = ProjectileDefinition(Projectiles.oicw_projectile)
|
val oicw_projectile = ProjectileDefinition(Projectiles.oicw_projectile)
|
||||||
|
|
||||||
|
val oicw_little_buddy = ProjectileDefinition(Projectiles.oicw_little_buddy)
|
||||||
|
|
||||||
val pellet_gun_projectile = ProjectileDefinition(Projectiles.pellet_gun_projectile)
|
val pellet_gun_projectile = ProjectileDefinition(Projectiles.pellet_gun_projectile)
|
||||||
|
|
||||||
val peregrine_dual_machine_gun_projectile = ProjectileDefinition(Projectiles.peregrine_dual_machine_gun_projectile)
|
val peregrine_dual_machine_gun_projectile = ProjectileDefinition(Projectiles.peregrine_dual_machine_gun_projectile)
|
||||||
|
|
@ -2216,6 +2219,7 @@ object GlobalDefinitions {
|
||||||
aphelion_starfire_projectile.InitialVelocity = 45
|
aphelion_starfire_projectile.InitialVelocity = 45
|
||||||
aphelion_starfire_projectile.Lifespan = 7f
|
aphelion_starfire_projectile.Lifespan = 7f
|
||||||
aphelion_starfire_projectile.ProjectileDamageType = DamageType.Aggravated
|
aphelion_starfire_projectile.ProjectileDamageType = DamageType.Aggravated
|
||||||
|
aphelion_starfire_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(aphelion_starfire_projectile)
|
ProjectileDefinition.CalculateDerivedFields(aphelion_starfire_projectile)
|
||||||
|
|
||||||
bolt_projectile.Name = "bolt_projectile"
|
bolt_projectile.Name = "bolt_projectile"
|
||||||
|
|
@ -2692,6 +2696,7 @@ object GlobalDefinitions {
|
||||||
hunter_seeker_missile_projectile.ProjectileDamageType = DamageType.Splash
|
hunter_seeker_missile_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
hunter_seeker_missile_projectile.InitialVelocity = 40
|
hunter_seeker_missile_projectile.InitialVelocity = 40
|
||||||
hunter_seeker_missile_projectile.Lifespan = 6.3f
|
hunter_seeker_missile_projectile.Lifespan = 6.3f
|
||||||
|
hunter_seeker_missile_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(hunter_seeker_missile_projectile)
|
ProjectileDefinition.CalculateDerivedFields(hunter_seeker_missile_projectile)
|
||||||
|
|
||||||
jammer_cartridge_projectile.Name = "jammer_cartridge_projectile"
|
jammer_cartridge_projectile.Name = "jammer_cartridge_projectile"
|
||||||
|
|
@ -2977,8 +2982,21 @@ object GlobalDefinitions {
|
||||||
oicw_projectile.ProjectileDamageType = DamageType.Splash
|
oicw_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
oicw_projectile.InitialVelocity = 5
|
oicw_projectile.InitialVelocity = 5
|
||||||
oicw_projectile.Lifespan = 6.1f
|
oicw_projectile.Lifespan = 6.1f
|
||||||
|
oicw_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(oicw_projectile)
|
ProjectileDefinition.CalculateDerivedFields(oicw_projectile)
|
||||||
|
|
||||||
|
oicw_little_buddy.Name = "oicw_projectile"
|
||||||
|
oicw_little_buddy.Damage0 = 75
|
||||||
|
oicw_little_buddy.Damage1 = 75
|
||||||
|
oicw_little_buddy.DamageAtEdge = 0.1f
|
||||||
|
oicw_little_buddy.DamageRadius = 7.5f
|
||||||
|
oicw_little_buddy.ProjectileDamageType = DamageType.Splash
|
||||||
|
oicw_little_buddy.InitialVelocity = 40
|
||||||
|
oicw_little_buddy.Lifespan = 0.5f
|
||||||
|
oicw_little_buddy.ExistsOnRemoteClients = true
|
||||||
|
//add_property oicw_little_buddy multi_stage_spawn_server_side true ...
|
||||||
|
ProjectileDefinition.CalculateDerivedFields(oicw_little_buddy)
|
||||||
|
|
||||||
pellet_gun_projectile.Name = "pellet_gun_projectile"
|
pellet_gun_projectile.Name = "pellet_gun_projectile"
|
||||||
// TODO for later, maybe : set_resource_parent pellet_gun_projectile game_objects shotgun_shell_projectile
|
// TODO for later, maybe : set_resource_parent pellet_gun_projectile game_objects shotgun_shell_projectile
|
||||||
pellet_gun_projectile.Damage0 = 12
|
pellet_gun_projectile.Damage0 = 12
|
||||||
|
|
@ -3056,6 +3074,7 @@ object GlobalDefinitions {
|
||||||
peregrine_sparrow_projectile.ProjectileDamageType = DamageType.Splash
|
peregrine_sparrow_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
peregrine_sparrow_projectile.InitialVelocity = 45
|
peregrine_sparrow_projectile.InitialVelocity = 45
|
||||||
peregrine_sparrow_projectile.Lifespan = 7.5f
|
peregrine_sparrow_projectile.Lifespan = 7.5f
|
||||||
|
peregrine_sparrow_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(peregrine_sparrow_projectile)
|
ProjectileDefinition.CalculateDerivedFields(peregrine_sparrow_projectile)
|
||||||
|
|
||||||
phalanx_av_projectile.Name = "phalanx_av_projectile"
|
phalanx_av_projectile.Name = "phalanx_av_projectile"
|
||||||
|
|
@ -3383,6 +3402,7 @@ object GlobalDefinitions {
|
||||||
sparrow_projectile.ProjectileDamageType = DamageType.Splash
|
sparrow_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
sparrow_projectile.InitialVelocity = 60
|
sparrow_projectile.InitialVelocity = 60
|
||||||
sparrow_projectile.Lifespan = 5.85f
|
sparrow_projectile.Lifespan = 5.85f
|
||||||
|
sparrow_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(sparrow_projectile)
|
ProjectileDefinition.CalculateDerivedFields(sparrow_projectile)
|
||||||
|
|
||||||
sparrow_secondary_projectile.Name = "sparrow_secondary_projectile"
|
sparrow_secondary_projectile.Name = "sparrow_secondary_projectile"
|
||||||
|
|
@ -3397,6 +3417,7 @@ object GlobalDefinitions {
|
||||||
sparrow_secondary_projectile.ProjectileDamageType = DamageType.Splash
|
sparrow_secondary_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
sparrow_secondary_projectile.InitialVelocity = 60
|
sparrow_secondary_projectile.InitialVelocity = 60
|
||||||
sparrow_secondary_projectile.Lifespan = 5.85f
|
sparrow_secondary_projectile.Lifespan = 5.85f
|
||||||
|
sparrow_secondary_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(sparrow_secondary_projectile)
|
ProjectileDefinition.CalculateDerivedFields(sparrow_secondary_projectile)
|
||||||
|
|
||||||
spiker_projectile.Name = "spiker_projectile"
|
spiker_projectile.Name = "spiker_projectile"
|
||||||
|
|
@ -3447,6 +3468,7 @@ object GlobalDefinitions {
|
||||||
starfire_projectile.ProjectileDamageType = DamageType.Aggravated
|
starfire_projectile.ProjectileDamageType = DamageType.Aggravated
|
||||||
starfire_projectile.InitialVelocity = 45
|
starfire_projectile.InitialVelocity = 45
|
||||||
starfire_projectile.Lifespan = 7.8f
|
starfire_projectile.Lifespan = 7.8f
|
||||||
|
starfire_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(starfire_projectile)
|
ProjectileDefinition.CalculateDerivedFields(starfire_projectile)
|
||||||
|
|
||||||
striker_missile_projectile.Name = "striker_missile_projectile"
|
striker_missile_projectile.Name = "striker_missile_projectile"
|
||||||
|
|
@ -3478,6 +3500,7 @@ object GlobalDefinitions {
|
||||||
striker_missile_targeting_projectile.ProjectileDamageType = DamageType.Splash
|
striker_missile_targeting_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
striker_missile_targeting_projectile.InitialVelocity = 30
|
striker_missile_targeting_projectile.InitialVelocity = 30
|
||||||
striker_missile_targeting_projectile.Lifespan = 4.2f
|
striker_missile_targeting_projectile.Lifespan = 4.2f
|
||||||
|
striker_missile_targeting_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(striker_missile_targeting_projectile)
|
ProjectileDefinition.CalculateDerivedFields(striker_missile_targeting_projectile)
|
||||||
|
|
||||||
trek_projectile.Name = "trek_projectile"
|
trek_projectile.Name = "trek_projectile"
|
||||||
|
|
@ -3565,6 +3588,7 @@ object GlobalDefinitions {
|
||||||
wasp_rocket_projectile.ProjectileDamageType = DamageType.Splash
|
wasp_rocket_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
wasp_rocket_projectile.InitialVelocity = 60
|
wasp_rocket_projectile.InitialVelocity = 60
|
||||||
wasp_rocket_projectile.Lifespan = 6.5f
|
wasp_rocket_projectile.Lifespan = 6.5f
|
||||||
|
wasp_rocket_projectile.ExistsOnRemoteClients = true
|
||||||
ProjectileDefinition.CalculateDerivedFields(wasp_rocket_projectile)
|
ProjectileDefinition.CalculateDerivedFields(wasp_rocket_projectile)
|
||||||
|
|
||||||
winchester_projectile.Name = "winchester_projectile"
|
winchester_projectile.Name = "winchester_projectile"
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ object Projectiles extends Enumeration {
|
||||||
final val mine_projectile = Value(551)
|
final val mine_projectile = Value(551)
|
||||||
final val mine_sweeper_projectile = Value(554)
|
final val mine_sweeper_projectile = Value(554)
|
||||||
final val mine_sweeper_projectile_enh = Value(555)
|
final val mine_sweeper_projectile_enh = Value(555)
|
||||||
|
final val oicw_little_buddy = Value(601)
|
||||||
final val oicw_projectile = Value(602)
|
final val oicw_projectile = Value(602)
|
||||||
final val pellet_gun_projectile = Value(631)
|
final val pellet_gun_projectile = Value(631)
|
||||||
final val peregrine_dual_machine_gun_projectile = Value(639)
|
final val peregrine_dual_machine_gun_projectile = Value(639)
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ class ProjectileDefinition(objectId : Int) extends ObjectDefinition(objectId)
|
||||||
private var damageAtEdge : Float = 1f
|
private var damageAtEdge : Float = 1f
|
||||||
private var damageRadius : Float = 1f
|
private var damageRadius : Float = 1f
|
||||||
private var useDamage1Subtract : Boolean = false
|
private var useDamage1Subtract : Boolean = false
|
||||||
|
private var existsOnRemoteClients : Boolean = false //`true` spawns a server-managed object
|
||||||
//derived calculations
|
//derived calculations
|
||||||
private var distanceMax : Float = 0f
|
private var distanceMax : Float = 0f
|
||||||
private var distanceFromAcceleration : Float = 0f
|
private var distanceFromAcceleration : Float = 0f
|
||||||
|
|
@ -109,6 +110,13 @@ class ProjectileDefinition(objectId : Int) extends ObjectDefinition(objectId)
|
||||||
DamageRadius
|
DamageRadius
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def ExistsOnRemoteClients : Boolean = existsOnRemoteClients
|
||||||
|
|
||||||
|
def ExistsOnRemoteClients_=(existsOnRemoteClients : Boolean) : Boolean = {
|
||||||
|
this.existsOnRemoteClients = existsOnRemoteClients
|
||||||
|
ExistsOnRemoteClients
|
||||||
|
}
|
||||||
|
|
||||||
def DistanceMax : Float = distanceMax //accessor only
|
def DistanceMax : Float = distanceMax //accessor only
|
||||||
|
|
||||||
def DistanceFromAcceleration : Float = distanceFromAcceleration //accessor only
|
def DistanceFromAcceleration : Float = distanceFromAcceleration //accessor only
|
||||||
|
|
|
||||||
|
|
@ -1230,6 +1230,7 @@ object ObjectClass {
|
||||||
case ObjectClass.meteor_projectile_large => ConstructorData(TrackedProjectileData.codec, "meteor")
|
case ObjectClass.meteor_projectile_large => ConstructorData(TrackedProjectileData.codec, "meteor")
|
||||||
case ObjectClass.meteor_projectile_medium => ConstructorData(TrackedProjectileData.codec, "meteor")
|
case ObjectClass.meteor_projectile_medium => ConstructorData(TrackedProjectileData.codec, "meteor")
|
||||||
case ObjectClass.meteor_projectile_small => ConstructorData(TrackedProjectileData.codec, "meteor")
|
case ObjectClass.meteor_projectile_small => ConstructorData(TrackedProjectileData.codec, "meteor")
|
||||||
|
case ObjectClass.oicw_little_buddy => ConstructorData(TrackedProjectileData.codec, "projectile")
|
||||||
case ObjectClass.oicw_projectile => ConstructorData(TrackedProjectileData.codec, "projectile")
|
case ObjectClass.oicw_projectile => ConstructorData(TrackedProjectileData.codec, "projectile")
|
||||||
case ObjectClass.sparrow_projectile => ConstructorData(TrackedProjectileData.codec, "projectile")
|
case ObjectClass.sparrow_projectile => ConstructorData(TrackedProjectileData.codec, "projectile")
|
||||||
case ObjectClass.starfire_projectile => ConstructorData(TrackedProjectileData.codec, "projectile")
|
case ObjectClass.starfire_projectile => ConstructorData(TrackedProjectileData.codec, "projectile")
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,19 @@
|
||||||
// Copyright (c) 2017 PSForever
|
// Copyright (c) 2017 PSForever
|
||||||
package net.psforever.packet.game.objectcreate
|
package net.psforever.packet.game.objectcreate
|
||||||
|
|
||||||
import net.psforever.packet.{Marshallable, PacketHelpers}
|
import net.psforever.packet.Marshallable
|
||||||
import scodec.{Attempt, Codec, Err}
|
import scodec.{Attempt, Codec, Err}
|
||||||
import scodec.codecs._
|
import scodec.codecs._
|
||||||
import shapeless.{::, HNil}
|
import shapeless.{::, HNil}
|
||||||
|
|
||||||
object TrackedProjectile extends Enumeration {
|
|
||||||
type Type = Value
|
|
||||||
|
|
||||||
val Meteor = Value(32)
|
|
||||||
val WaspRocket = Value(208)
|
|
||||||
val Sparrow = Value(3355579)
|
|
||||||
val OICW = Value(3355587)
|
|
||||||
val Striker = Value(6710918)
|
|
||||||
val HunterSeeker = Value(10131913)
|
|
||||||
val Starfire = Value(10131961)
|
|
||||||
|
|
||||||
implicit val codec = PacketHelpers.createEnumerationCodec(this, uint24)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A representation of a projectile that the server must intentionally convey to players other than the shooter.
|
* A representation of a projectile that the server must intentionally convey to players other than the shooter.
|
||||||
* @param data na
|
* @param data na
|
||||||
* @param unk2 na;
|
* @param unk2 na
|
||||||
* data specific to the type of projectile(?)
|
|
||||||
* @param unk3 na
|
* @param unk3 na
|
||||||
*/
|
*/
|
||||||
final case class TrackedProjectileData(data : CommonFieldDataWithPlacement,
|
final case class TrackedProjectileData(data : CommonFieldDataWithPlacement,
|
||||||
unk2 : TrackedProjectile.Value,
|
unk2 : Int,
|
||||||
unk3 : Int = 0
|
unk3 : Int = 0
|
||||||
) extends ConstructorData {
|
) extends ConstructorData {
|
||||||
override def bitsize : Long = 33L + data.bitsize
|
override def bitsize : Long = 33L + data.bitsize
|
||||||
|
|
@ -37,7 +22,7 @@ final case class TrackedProjectileData(data : CommonFieldDataWithPlacement,
|
||||||
object TrackedProjectileData extends Marshallable[TrackedProjectileData] {
|
object TrackedProjectileData extends Marshallable[TrackedProjectileData] {
|
||||||
implicit val codec : Codec[TrackedProjectileData] = (
|
implicit val codec : Codec[TrackedProjectileData] = (
|
||||||
("data" | CommonFieldDataWithPlacement.codec) ::
|
("data" | CommonFieldDataWithPlacement.codec) ::
|
||||||
("unk2" | TrackedProjectile.codec) ::
|
("unk2" | uint24) ::
|
||||||
uint4 ::
|
uint4 ::
|
||||||
uint(3) ::
|
uint(3) ::
|
||||||
uint2
|
uint2
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ class TrackedProjectileDataTest extends Specification {
|
||||||
deploy.v5.isEmpty mustEqual true
|
deploy.v5.isEmpty mustEqual true
|
||||||
deploy.guid mustEqual PlanetSideGUID(0)
|
deploy.guid mustEqual PlanetSideGUID(0)
|
||||||
|
|
||||||
unk2 mustEqual TrackedProjectile.Striker
|
unk2 mustEqual 6710918
|
||||||
|
|
||||||
unk3 mustEqual 0
|
unk3 mustEqual 0
|
||||||
case _ =>
|
case _ =>
|
||||||
|
|
@ -50,7 +50,7 @@ class TrackedProjectileDataTest extends Specification {
|
||||||
PlacementData(4644.5938f, 5472.0938f, 82.375f, 0f, 30.9375f, 171.5625f),
|
PlacementData(4644.5938f, 5472.0938f, 82.375f, 0f, 30.9375f, 171.5625f),
|
||||||
CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0))
|
CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0))
|
||||||
),
|
),
|
||||||
TrackedProjectile.Striker,
|
6710918,
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
val msg = ObjectCreateMessage(ObjectClass.striker_missile_targeting_projectile, PlanetSideGUID(40192), obj)
|
val msg = ObjectCreateMessage(ObjectClass.striker_missile_targeting_projectile, PlanetSideGUID(40192), obj)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue