mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-12 06:55:10 +00:00
adding EMP-related fields to projectile definitions; adjusting target validation funcs for generic application
This commit is contained in:
parent
b48f173a98
commit
375edbbf94
6 changed files with 187 additions and 77 deletions
|
|
@ -2686,6 +2686,14 @@ object GlobalDefinitions {
|
||||||
jammer_cartridge_projectile.ProjectileDamageType = DamageType.Splash
|
jammer_cartridge_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_cartridge_projectile.InitialVelocity = 30
|
jammer_cartridge_projectile.InitialVelocity = 30
|
||||||
jammer_cartridge_projectile.Lifespan = 15f
|
jammer_cartridge_projectile.Lifespan = 15f
|
||||||
|
jammer_cartridge_projectile.AdditionalEffect = true
|
||||||
|
jammer_cartridge_projectile.JammerProjectile = true
|
||||||
|
jammer_cartridge_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player) -> (1 seconds)
|
||||||
|
jammer_cartridge_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.AMS) -> (5 seconds)
|
||||||
|
jammer_cartridge_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.MotionSensor) -> (30 seconds)
|
||||||
|
jammer_cartridge_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.Spitfire) -> (30 seconds)
|
||||||
|
jammer_cartridge_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) -> (30 seconds)
|
||||||
|
jammer_cartridge_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.VehicleNotAMS) -> (10 seconds)
|
||||||
ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile)
|
ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile)
|
||||||
|
|
||||||
jammer_cartridge_projectile_b.Name = "jammer_cartridge_projectile_b"
|
jammer_cartridge_projectile_b.Name = "jammer_cartridge_projectile_b"
|
||||||
|
|
@ -2697,6 +2705,14 @@ object GlobalDefinitions {
|
||||||
jammer_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash
|
jammer_cartridge_projectile_b.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_cartridge_projectile_b.InitialVelocity = 30
|
jammer_cartridge_projectile_b.InitialVelocity = 30
|
||||||
jammer_cartridge_projectile_b.Lifespan = 2f
|
jammer_cartridge_projectile_b.Lifespan = 2f
|
||||||
|
jammer_cartridge_projectile_b.AdditionalEffect = true
|
||||||
|
jammer_cartridge_projectile_b.JammerProjectile = true
|
||||||
|
jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player) -> (1 seconds)
|
||||||
|
jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.AMS) -> (5 seconds)
|
||||||
|
jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.MotionSensor) -> (30 seconds)
|
||||||
|
jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.Spitfire) -> (30 seconds)
|
||||||
|
jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) -> (30 seconds)
|
||||||
|
jammer_cartridge_projectile_b.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.VehicleNotAMS) -> (10 seconds)
|
||||||
ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile_b)
|
ProjectileDefinition.CalculateDerivedFields(jammer_cartridge_projectile_b)
|
||||||
|
|
||||||
jammer_grenade_projectile.Name = "jammer_grenade_projectile"
|
jammer_grenade_projectile.Name = "jammer_grenade_projectile"
|
||||||
|
|
@ -2707,6 +2723,14 @@ object GlobalDefinitions {
|
||||||
jammer_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
jammer_grenade_projectile.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_grenade_projectile.InitialVelocity = 30
|
jammer_grenade_projectile.InitialVelocity = 30
|
||||||
jammer_grenade_projectile.Lifespan = 15f
|
jammer_grenade_projectile.Lifespan = 15f
|
||||||
|
jammer_grenade_projectile.AdditionalEffect = true
|
||||||
|
jammer_grenade_projectile.JammerProjectile = true
|
||||||
|
jammer_grenade_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player) -> (1 seconds)
|
||||||
|
jammer_grenade_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.AMS) -> (5 seconds)
|
||||||
|
jammer_grenade_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.MotionSensor) -> (30 seconds)
|
||||||
|
jammer_grenade_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.Spitfire) -> (30 seconds)
|
||||||
|
jammer_grenade_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) -> (30 seconds)
|
||||||
|
jammer_grenade_projectile.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.VehicleNotAMS) -> (10 seconds)
|
||||||
ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile)
|
ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile)
|
||||||
|
|
||||||
jammer_grenade_projectile_enh.Name = "jammer_grenade_projectile_enh"
|
jammer_grenade_projectile_enh.Name = "jammer_grenade_projectile_enh"
|
||||||
|
|
@ -2718,6 +2742,13 @@ object GlobalDefinitions {
|
||||||
jammer_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash
|
jammer_grenade_projectile_enh.ProjectileDamageType = DamageType.Splash
|
||||||
jammer_grenade_projectile_enh.InitialVelocity = 30
|
jammer_grenade_projectile_enh.InitialVelocity = 30
|
||||||
jammer_grenade_projectile_enh.Lifespan = 3f
|
jammer_grenade_projectile_enh.Lifespan = 3f
|
||||||
|
jammer_grenade_projectile_enh.AdditionalEffect = true
|
||||||
|
jammer_grenade_projectile_enh.JammerProjectile = true
|
||||||
|
jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation(EffectTarget.Category.Player, EffectTarget.Validation.Player) -> (1 seconds)
|
||||||
|
jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation(EffectTarget.Category.Vehicle, EffectTarget.Validation.AMS) -> (5 seconds)
|
||||||
|
jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.MotionSensor) -> (30 seconds)
|
||||||
|
jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation(EffectTarget.Category.Deployable, EffectTarget.Validation.Spitfire) -> (30 seconds)
|
||||||
|
jammer_grenade_projectile_enh.JammedEffectDuration += TargetValidation(EffectTarget.Category.Turret, EffectTarget.Validation.Turret) -> (30 seconds)
|
||||||
ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile_enh)
|
ProjectileDefinition.CalculateDerivedFields(jammer_grenade_projectile_enh)
|
||||||
|
|
||||||
katana_projectile.Name = "katana_projectile"
|
katana_projectile.Name = "katana_projectile"
|
||||||
|
|
@ -6096,62 +6127,62 @@ object GlobalDefinitions {
|
||||||
teleportpad_terminal.Name = "teleportpad_terminal"
|
teleportpad_terminal.Name = "teleportpad_terminal"
|
||||||
teleportpad_terminal.Tab += 0 -> OrderTerminalDefinition.EquipmentPage(EquipmentTerminalDefinition.routerTerminal)
|
teleportpad_terminal.Tab += 0 -> OrderTerminalDefinition.EquipmentPage(EquipmentTerminalDefinition.routerTerminal)
|
||||||
|
|
||||||
adv_med_terminal.Name = "adv_med_terminal"
|
|
||||||
adv_med_terminal.Interval = 500
|
|
||||||
adv_med_terminal.HealAmount = 8
|
|
||||||
adv_med_terminal.ArmorAmount = 15
|
|
||||||
adv_med_terminal.UseRadius = 0.75f
|
|
||||||
adv_med_terminal.TargetValidation += ProximityTarget.Player -> ProximityTerminalControl.Validation.Medical
|
|
||||||
|
|
||||||
crystals_health_a.Name = "crystals_health_a"
|
|
||||||
crystals_health_a.Interval = 500
|
|
||||||
crystals_health_a.HealAmount = 4
|
|
||||||
crystals_health_a.UseRadius = 5
|
|
||||||
crystals_health_a.TargetValidation += ProximityTarget.Player -> ProximityTerminalControl.Validation.HealthCrystal
|
|
||||||
|
|
||||||
crystals_health_b.Name = "crystals_health_b"
|
|
||||||
crystals_health_b.Interval = 500
|
|
||||||
crystals_health_b.HealAmount = 4
|
|
||||||
crystals_health_b.UseRadius = 1.3f
|
|
||||||
crystals_health_b.TargetValidation += ProximityTarget.Player -> ProximityTerminalControl.Validation.HealthCrystal
|
|
||||||
|
|
||||||
medical_terminal.Name = "medical_terminal"
|
medical_terminal.Name = "medical_terminal"
|
||||||
medical_terminal.Interval = 500
|
medical_terminal.Interval = 500
|
||||||
medical_terminal.HealAmount = 5
|
medical_terminal.HealAmount = 5
|
||||||
medical_terminal.ArmorAmount = 10
|
medical_terminal.ArmorAmount = 10
|
||||||
medical_terminal.UseRadius = 0.75f
|
medical_terminal.UseRadius = 0.75f
|
||||||
medical_terminal.TargetValidation += ProximityTarget.Player -> ProximityTerminalControl.Validation.Medical
|
medical_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical
|
||||||
|
|
||||||
|
adv_med_terminal.Name = "adv_med_terminal"
|
||||||
|
adv_med_terminal.Interval = 500
|
||||||
|
adv_med_terminal.HealAmount = 8
|
||||||
|
adv_med_terminal.ArmorAmount = 15
|
||||||
|
adv_med_terminal.UseRadius = 0.75f
|
||||||
|
adv_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical
|
||||||
|
|
||||||
|
crystals_health_a.Name = "crystals_health_a"
|
||||||
|
crystals_health_a.Interval = 500
|
||||||
|
crystals_health_a.HealAmount = 4
|
||||||
|
crystals_health_a.UseRadius = 5
|
||||||
|
crystals_health_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal
|
||||||
|
|
||||||
|
crystals_health_b.Name = "crystals_health_b"
|
||||||
|
crystals_health_b.Interval = 500
|
||||||
|
crystals_health_b.HealAmount = 4
|
||||||
|
crystals_health_b.UseRadius = 1.3f
|
||||||
|
crystals_health_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal
|
||||||
|
|
||||||
portable_med_terminal.Name = "portable_med_terminal"
|
portable_med_terminal.Name = "portable_med_terminal"
|
||||||
portable_med_terminal.Interval = 500
|
portable_med_terminal.Interval = 500
|
||||||
portable_med_terminal.HealAmount = 5
|
portable_med_terminal.HealAmount = 5
|
||||||
portable_med_terminal.ArmorAmount = 10
|
portable_med_terminal.ArmorAmount = 10
|
||||||
portable_med_terminal.UseRadius = 3
|
portable_med_terminal.UseRadius = 3
|
||||||
portable_med_terminal.TargetValidation += ProximityTarget.Player -> ProximityTerminalControl.Validation.Medical
|
portable_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical
|
||||||
|
|
||||||
pad_landing_frame.Name = "pad_landing_frame"
|
pad_landing_frame.Name = "pad_landing_frame"
|
||||||
pad_landing_frame.Interval = 1000
|
pad_landing_frame.Interval = 1000
|
||||||
pad_landing_frame.HealAmount = 60
|
pad_landing_frame.HealAmount = 60
|
||||||
pad_landing_frame.UseRadius = 20
|
pad_landing_frame.UseRadius = 20
|
||||||
pad_landing_frame.TargetValidation += ProximityTarget.Aircraft -> ProximityTerminalControl.Validation.PadLanding
|
pad_landing_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding
|
||||||
|
|
||||||
pad_landing_tower_frame.Name = "pad_landing_tower_frame"
|
pad_landing_tower_frame.Name = "pad_landing_tower_frame"
|
||||||
pad_landing_tower_frame.Interval = 1000
|
pad_landing_tower_frame.Interval = 1000
|
||||||
pad_landing_tower_frame.HealAmount = 60
|
pad_landing_tower_frame.HealAmount = 60
|
||||||
pad_landing_tower_frame.UseRadius = 20
|
pad_landing_tower_frame.UseRadius = 20
|
||||||
pad_landing_tower_frame.TargetValidation += ProximityTarget.Aircraft -> ProximityTerminalControl.Validation.PadLanding
|
pad_landing_tower_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding
|
||||||
|
|
||||||
repair_silo.Name = "repair_silo"
|
repair_silo.Name = "repair_silo"
|
||||||
repair_silo.Interval = 1000
|
repair_silo.Interval = 1000
|
||||||
repair_silo.HealAmount = 60
|
repair_silo.HealAmount = 60
|
||||||
repair_silo.UseRadius = 20
|
repair_silo.UseRadius = 20
|
||||||
repair_silo.TargetValidation += ProximityTarget.Vehicle -> ProximityTerminalControl.Validation.RepairSilo
|
repair_silo.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.RepairSilo
|
||||||
|
|
||||||
lodestar_repair_terminal.Name = "lodestar_repair_terminal"
|
lodestar_repair_terminal.Name = "lodestar_repair_terminal"
|
||||||
lodestar_repair_terminal.Interval = 1000
|
lodestar_repair_terminal.Interval = 1000
|
||||||
lodestar_repair_terminal.HealAmount = 60
|
lodestar_repair_terminal.HealAmount = 60
|
||||||
lodestar_repair_terminal.UseRadius = 20
|
lodestar_repair_terminal.UseRadius = 20
|
||||||
lodestar_repair_terminal.TargetValidation += ProximityTarget.Vehicle -> ProximityTerminalControl.Validation.RepairSilo
|
lodestar_repair_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.RepairSilo
|
||||||
|
|
||||||
multivehicle_rearm_terminal.Name = "multivehicle_rearm_terminal"
|
multivehicle_rearm_terminal.Name = "multivehicle_rearm_terminal"
|
||||||
multivehicle_rearm_terminal.Tab += 3 -> OrderTerminalDefinition.EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
multivehicle_rearm_terminal.Tab += 3 -> OrderTerminalDefinition.EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,12 @@
|
||||||
package net.psforever.objects.definition
|
package net.psforever.objects.definition
|
||||||
|
|
||||||
import net.psforever.objects.ballistics.Projectiles
|
import net.psforever.objects.ballistics.Projectiles
|
||||||
|
import net.psforever.objects.serverobject.terminals.TargetValidation
|
||||||
import net.psforever.objects.vital.{DamageType, StandardDamageProfile}
|
import net.psforever.objects.vital.{DamageType, StandardDamageProfile}
|
||||||
|
|
||||||
|
import scala.collection.mutable
|
||||||
|
import scala.concurrent.duration.Duration
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The definition that outlines the damage-dealing characteristics of any projectile.
|
* The definition that outlines the damage-dealing characteristics of any projectile.
|
||||||
* `Tool` objects emit `ProjectileDefinition` objects and that is later wrapped into a `Projectile` object.
|
* `Tool` objects emit `ProjectileDefinition` objects and that is later wrapped into a `Projectile` object.
|
||||||
|
|
@ -26,6 +30,9 @@ class ProjectileDefinition(objectId : Int) extends ObjectDefinition(objectId)
|
||||||
private var existsOnRemoteClients : Boolean = false //`true` spawns a server-managed object
|
private var existsOnRemoteClients : Boolean = false //`true` spawns a server-managed object
|
||||||
private var remoteClientData : (Int, Int) = (0, 0) //artificial values; for ObjectCreateMessage packet (oicw_little_buddy is undefined)
|
private var remoteClientData : (Int, Int) = (0, 0) //artificial values; for ObjectCreateMessage packet (oicw_little_buddy is undefined)
|
||||||
private var autoLock : Boolean = false
|
private var autoLock : Boolean = false
|
||||||
|
private var additionalEffect : Boolean = false
|
||||||
|
private var jammerProjectile : Boolean = false
|
||||||
|
private val jammedEffectDuration : mutable.ListBuffer[(TargetValidation, Duration)] = new mutable.ListBuffer()
|
||||||
//derived calculations
|
//derived calculations
|
||||||
private var distanceMax : Float = 0f
|
private var distanceMax : Float = 0f
|
||||||
private var distanceFromAcceleration : Float = 0f
|
private var distanceFromAcceleration : Float = 0f
|
||||||
|
|
@ -133,6 +140,24 @@ class ProjectileDefinition(objectId : Int) extends ObjectDefinition(objectId)
|
||||||
AutoLock
|
AutoLock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def AdditionalEffect : Boolean = additionalEffect
|
||||||
|
|
||||||
|
def AdditionalEffect_=(effect : Boolean) : Boolean = {
|
||||||
|
additionalEffect = effect
|
||||||
|
AdditionalEffect
|
||||||
|
}
|
||||||
|
|
||||||
|
def JammerProjectile : Boolean = jammerProjectile
|
||||||
|
|
||||||
|
def JammerProjectile_=(effect : Boolean) : Boolean = {
|
||||||
|
jammerProjectile = effect
|
||||||
|
JammerProjectile
|
||||||
|
}
|
||||||
|
|
||||||
|
def HasJammedEffectDuration : Boolean = jammedEffectDuration.isEmpty
|
||||||
|
|
||||||
|
def JammedEffectDuration : mutable.ListBuffer[(TargetValidation, Duration)] = jammedEffectDuration
|
||||||
|
|
||||||
def DistanceMax : Float = distanceMax //accessor only
|
def DistanceMax : Float = distanceMax //accessor only
|
||||||
|
|
||||||
def DistanceFromAcceleration : Float = distanceFromAcceleration //accessor only
|
def DistanceFromAcceleration : Float = distanceFromAcceleration //accessor only
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,103 @@
|
||||||
|
// Copyright (c) 2017 PSForever
|
||||||
|
package net.psforever.objects.serverobject.terminals
|
||||||
|
|
||||||
|
import net.psforever.objects._
|
||||||
|
import net.psforever.objects.ce.DeployableCategory
|
||||||
|
import net.psforever.objects.serverobject.turret.FacilityTurret
|
||||||
|
|
||||||
|
final case class TargetValidation(category : EffectTarget.Category.Value, test : EffectTarget.Validation.Value)
|
||||||
|
|
||||||
|
object EffectTarget {
|
||||||
|
/**
|
||||||
|
* A classification of the target of interactions.
|
||||||
|
* Arbitrary, but useful.
|
||||||
|
*/
|
||||||
|
object Category extends Enumeration {
|
||||||
|
val
|
||||||
|
Aircraft,
|
||||||
|
Deployable,
|
||||||
|
Equipment,
|
||||||
|
Player,
|
||||||
|
Turret,
|
||||||
|
Vehicle
|
||||||
|
= Value
|
||||||
|
}
|
||||||
|
|
||||||
|
object Validation {
|
||||||
|
type Value = PlanetSideGameObject => Boolean
|
||||||
|
|
||||||
|
def Invalid(target : PlanetSideGameObject) : Boolean = false
|
||||||
|
|
||||||
|
def Medical(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case p : Player =>
|
||||||
|
p.Health > 0 && (p.Health < p.MaxHealth || p.Armor < p.MaxArmor)
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def HealthCrystal(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case p : Player =>
|
||||||
|
p.Health > 0 && p.Health < p.MaxHealth
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def RepairSilo(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case v : Vehicle =>
|
||||||
|
!GlobalDefinitions.isFlightVehicle(v.Definition) && v.Health > 0 && v.Health < v.MaxHealth
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def PadLanding(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case v : Vehicle =>
|
||||||
|
GlobalDefinitions.isFlightVehicle(v.Definition) && v.Health > 0 && v.Health < v.MaxHealth
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def Player(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case p : Player =>
|
||||||
|
p.isAlive
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def MotionSensor(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case s : SensorDeployable =>
|
||||||
|
s.Health > 0
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def Spitfire(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case t : TurretDeployable =>
|
||||||
|
t.Definition.DeployCategory == DeployableCategory.SmallTurrets && t.Health > 0
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def Turret(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case t : TurretDeployable =>
|
||||||
|
t.Definition.DeployCategory == DeployableCategory.FieldTurrets && t.Health > 0
|
||||||
|
case t : FacilityTurret =>
|
||||||
|
t.Health > 0
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def AMS(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case v : Vehicle =>
|
||||||
|
v.Health > 0 && v.Definition == GlobalDefinitions.ams
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
def VehicleNotAMS(target : PlanetSideGameObject) : Boolean = target match {
|
||||||
|
case v : Vehicle =>
|
||||||
|
v.Health > 0 && v.Definition != GlobalDefinitions.ams
|
||||||
|
case _ =>
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -17,7 +17,7 @@ trait ProximityDefinition {
|
||||||
this : ObjectDefinition =>
|
this : ObjectDefinition =>
|
||||||
|
|
||||||
private var useRadius : Float = 0f //TODO belongs on a wider range of object definitions
|
private var useRadius : Float = 0f //TODO belongs on a wider range of object definitions
|
||||||
private val targetValidation : mutable.HashMap[ProximityTarget.Value, PlanetSideGameObject=>Boolean] = new mutable.HashMap[ProximityTarget.Value, PlanetSideGameObject=>Boolean]()
|
private val targetValidation : mutable.HashMap[EffectTarget.Category.Value, PlanetSideGameObject=>Boolean] = new mutable.HashMap[EffectTarget.Category.Value, PlanetSideGameObject=>Boolean]()
|
||||||
|
|
||||||
def UseRadius : Float = useRadius
|
def UseRadius : Float = useRadius
|
||||||
|
|
||||||
|
|
@ -26,18 +26,14 @@ trait ProximityDefinition {
|
||||||
UseRadius
|
UseRadius
|
||||||
}
|
}
|
||||||
|
|
||||||
def TargetValidation : mutable.HashMap[ProximityTarget.Value, PlanetSideGameObject=>Boolean] = targetValidation
|
def TargetValidation : mutable.HashMap[EffectTarget.Category.Value, PlanetSideGameObject=>Boolean] = targetValidation
|
||||||
|
|
||||||
def Validations : Seq[PlanetSideGameObject=>Boolean] = {
|
def Validations : Seq[PlanetSideGameObject=>Boolean] = {
|
||||||
targetValidation.headOption match {
|
targetValidation.headOption match {
|
||||||
case Some(_) =>
|
case Some(_) =>
|
||||||
targetValidation.values.toSeq
|
targetValidation.values.toSeq
|
||||||
case None =>
|
case None =>
|
||||||
Seq(ProximityDefinition.Invalid)
|
Seq(EffectTarget.Validation.Invalid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object ProximityDefinition {
|
|
||||||
protected val Invalid : PlanetSideGameObject=>Boolean = (_ : PlanetSideGameObject) => false
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
// Copyright (c) 2017 PSForever
|
|
||||||
package net.psforever.objects.serverobject.terminals
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A classification of the target of this terminal's interactions.
|
|
||||||
* Arbitrary, but useful.
|
|
||||||
*/
|
|
||||||
object ProximityTarget extends Enumeration {
|
|
||||||
val
|
|
||||||
Aircraft,
|
|
||||||
Equipment,
|
|
||||||
Player,
|
|
||||||
Vehicle
|
|
||||||
= Value
|
|
||||||
}
|
|
||||||
|
|
@ -126,35 +126,5 @@ class ProximityTerminalControl(term : Terminal with ProximityUnit) extends Actor
|
||||||
}
|
}
|
||||||
|
|
||||||
object ProximityTerminalControl {
|
object ProximityTerminalControl {
|
||||||
object Validation {
|
|
||||||
def Medical(target : PlanetSideGameObject) : Boolean = target match {
|
|
||||||
case p : Player =>
|
|
||||||
p.Health > 0 && (p.Health < p.MaxHealth || p.Armor < p.MaxArmor)
|
|
||||||
case _ =>
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
def HealthCrystal(target : PlanetSideGameObject) : Boolean = target match {
|
|
||||||
case p : Player =>
|
|
||||||
p.Health > 0 && p.Health < p.MaxHealth
|
|
||||||
case _ =>
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
def RepairSilo(target : PlanetSideGameObject) : Boolean = target match {
|
|
||||||
case v : Vehicle =>
|
|
||||||
!GlobalDefinitions.isFlightVehicle(v.Definition) && v.Health > 0 && v.Health < v.MaxHealth
|
|
||||||
case _ =>
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
def PadLanding(target : PlanetSideGameObject) : Boolean = target match {
|
|
||||||
case v : Vehicle =>
|
|
||||||
GlobalDefinitions.isFlightVehicle(v.Definition) && v.Health > 0 && v.Health < v.MaxHealth
|
|
||||||
case _ =>
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private case class TerminalAction()
|
private case class TerminalAction()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue