mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-03-01 11:33:41 +00:00
defining all doors; moving around classes related to environment fields; separating global definitions into a main file and implementation files
This commit is contained in:
parent
4826e338c1
commit
d17c16fd9b
14 changed files with 8527 additions and 8290 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,330 @@
|
|||
// Copyright (c) 2024 PSForever
|
||||
package net.psforever.objects.global
|
||||
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
import net.psforever.objects.equipment.EquipmentSize
|
||||
import net.psforever.objects.inventory.InventoryTile
|
||||
|
||||
object GlobalDefinitionsAmmo {
|
||||
import GlobalDefinitions._
|
||||
|
||||
/**
|
||||
* Initialize `AmmoBoxDefinition` globals.
|
||||
*/
|
||||
final def init(): Unit = {
|
||||
melee_ammo.Name = "melee_ammo"
|
||||
melee_ammo.Size = EquipmentSize.Blocked
|
||||
|
||||
frag_grenade_ammo.Name = "frag_grenade_ammo"
|
||||
frag_grenade_ammo.Size = EquipmentSize.Blocked
|
||||
|
||||
jammer_grenade_ammo.Name = "jammer_grenade_ammo"
|
||||
jammer_grenade_ammo.Size = EquipmentSize.Blocked
|
||||
|
||||
plasma_grenade_ammo.Name = "plasma_grenade_ammo"
|
||||
plasma_grenade_ammo.Size = EquipmentSize.Blocked
|
||||
|
||||
bullet_9mm.Name = "9mmbullet"
|
||||
bullet_9mm.Capacity = 50
|
||||
bullet_9mm.Tile = InventoryTile.Tile33
|
||||
|
||||
bullet_9mm_AP.Name = "9mmbullet_AP"
|
||||
bullet_9mm_AP.Capacity = 50
|
||||
bullet_9mm_AP.Tile = InventoryTile.Tile33
|
||||
|
||||
shotgun_shell.Name = "shotgun_shell"
|
||||
shotgun_shell.Capacity = 16
|
||||
shotgun_shell.Tile = InventoryTile.Tile33
|
||||
|
||||
shotgun_shell_AP.Name = "shotgun_shell_AP"
|
||||
shotgun_shell_AP.Capacity = 16
|
||||
shotgun_shell_AP.Tile = InventoryTile.Tile33
|
||||
|
||||
energy_cell.Name = "energy_cell"
|
||||
energy_cell.Capacity = 50
|
||||
energy_cell.Tile = InventoryTile.Tile33
|
||||
|
||||
anniversary_ammo.Name = "anniversary_ammo"
|
||||
anniversary_ammo.Capacity = 30
|
||||
anniversary_ammo.Tile = InventoryTile.Tile33
|
||||
|
||||
ancient_ammo_combo.Name = "ancient_ammo_combo"
|
||||
ancient_ammo_combo.Capacity = 30
|
||||
ancient_ammo_combo.Tile = InventoryTile.Tile33
|
||||
|
||||
maelstrom_ammo.Name = "maelstrom_ammo"
|
||||
maelstrom_ammo.Capacity = 50
|
||||
maelstrom_ammo.Tile = InventoryTile.Tile33
|
||||
|
||||
phoenix_missile.Name = "phoenix_missile"
|
||||
phoenix_missile.Size = EquipmentSize.Blocked
|
||||
|
||||
striker_missile_ammo.Name = "striker_missile_ammo"
|
||||
striker_missile_ammo.Capacity = 15
|
||||
striker_missile_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
hunter_seeker_missile.Name = "hunter_seeker_missile"
|
||||
hunter_seeker_missile.Capacity = 9
|
||||
hunter_seeker_missile.Tile = InventoryTile.Tile44
|
||||
|
||||
lancer_cartridge.Name = "lancer_cartridge"
|
||||
lancer_cartridge.Capacity = 18
|
||||
lancer_cartridge.Tile = InventoryTile.Tile44
|
||||
|
||||
rocket.Name = "rocket"
|
||||
rocket.Capacity = 15
|
||||
rocket.Tile = InventoryTile.Tile33
|
||||
|
||||
frag_cartridge.Name = "frag_cartridge"
|
||||
frag_cartridge.Capacity = 12
|
||||
frag_cartridge.Tile = InventoryTile.Tile33
|
||||
|
||||
plasma_cartridge.Name = "plasma_cartridge"
|
||||
plasma_cartridge.Capacity = 12
|
||||
plasma_cartridge.Tile = InventoryTile.Tile33
|
||||
|
||||
jammer_cartridge.Name = "jammer_cartridge"
|
||||
jammer_cartridge.Capacity = 12
|
||||
jammer_cartridge.Tile = InventoryTile.Tile33
|
||||
|
||||
bolt.Name = "bolt"
|
||||
bolt.Capacity = 10
|
||||
bolt.Tile = InventoryTile.Tile33
|
||||
|
||||
oicw_ammo.Name = "oicw_ammo"
|
||||
oicw_ammo.Capacity = 10
|
||||
oicw_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
flamethrower_ammo.Name = "flamethrower_ammo"
|
||||
flamethrower_ammo.Capacity = 100
|
||||
flamethrower_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
winchester_ammo.Name = "winchester_ammo"
|
||||
winchester_ammo.Capacity = 10
|
||||
winchester_ammo.Tile = InventoryTile.Tile33
|
||||
|
||||
pellet_gun_ammo.Name = "pellet_gun_ammo"
|
||||
pellet_gun_ammo.Capacity = 8
|
||||
pellet_gun_ammo.Tile = InventoryTile.Tile33
|
||||
|
||||
six_shooter_ammo.Name = "six_shooter_ammo"
|
||||
six_shooter_ammo.Capacity = 12
|
||||
six_shooter_ammo.Tile = InventoryTile.Tile33
|
||||
|
||||
dualcycler_ammo.Name = "dualcycler_ammo"
|
||||
dualcycler_ammo.Capacity = 100
|
||||
dualcycler_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
pounder_ammo.Name = "pounder_ammo"
|
||||
pounder_ammo.Capacity = 50
|
||||
pounder_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
burster_ammo.Name = "burster_ammo"
|
||||
burster_ammo.Capacity = 100
|
||||
burster_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
scattercannon_ammo.Name = "scattercannon_ammo"
|
||||
scattercannon_ammo.Capacity = 50
|
||||
scattercannon_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
falcon_ammo.Name = "falcon_ammo"
|
||||
falcon_ammo.Capacity = 50
|
||||
falcon_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
sparrow_ammo.Name = "sparrow_ammo"
|
||||
sparrow_ammo.Capacity = 50
|
||||
sparrow_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
quasar_ammo.Name = "quasar_ammo"
|
||||
quasar_ammo.Capacity = 60
|
||||
quasar_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
comet_ammo.Name = "comet_ammo"
|
||||
comet_ammo.Capacity = 50
|
||||
comet_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
starfire_ammo.Name = "starfire_ammo"
|
||||
starfire_ammo.Capacity = 50
|
||||
starfire_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
health_canister.Name = "health_canister"
|
||||
health_canister.Capacity = 100
|
||||
health_canister.Tile = InventoryTile.Tile23
|
||||
|
||||
armor_canister.Name = "armor_canister"
|
||||
armor_canister.Capacity = 100
|
||||
armor_canister.repairAmount = 12f //ADB says 12.5, but 12 is better for the math
|
||||
armor_canister.Tile = InventoryTile.Tile23
|
||||
|
||||
upgrade_canister.Name = "upgrade_canister"
|
||||
upgrade_canister.Capacity = 1
|
||||
upgrade_canister.Tile = InventoryTile.Tile23
|
||||
|
||||
trek_ammo.Name = "trek_ammo"
|
||||
trek_ammo.Size = EquipmentSize.Blocked
|
||||
|
||||
bullet_35mm.Name = "35mmbullet"
|
||||
bullet_35mm.Capacity = 100
|
||||
bullet_35mm.Tile = InventoryTile.Tile44
|
||||
|
||||
aphelion_laser_ammo.Name = "aphelion_laser_ammo"
|
||||
aphelion_laser_ammo.Capacity = 165
|
||||
aphelion_laser_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
aphelion_immolation_cannon_ammo.Name = "aphelion_immolation_cannon_ammo"
|
||||
aphelion_immolation_cannon_ammo.Capacity = 100
|
||||
aphelion_immolation_cannon_ammo.Tile = InventoryTile.Tile55
|
||||
|
||||
aphelion_plasma_rocket_ammo.Name = "aphelion_plasma_rocket_ammo"
|
||||
aphelion_plasma_rocket_ammo.Capacity = 195
|
||||
aphelion_plasma_rocket_ammo.Tile = InventoryTile.Tile55
|
||||
|
||||
aphelion_ppa_ammo.Name = "aphelion_ppa_ammo"
|
||||
aphelion_ppa_ammo.Capacity = 110
|
||||
aphelion_ppa_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
aphelion_starfire_ammo.Name = "aphelion_starfire_ammo"
|
||||
aphelion_starfire_ammo.Capacity = 132
|
||||
aphelion_starfire_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
skyguard_flak_cannon_ammo.Name = "skyguard_flak_cannon_ammo"
|
||||
skyguard_flak_cannon_ammo.Capacity = 200
|
||||
skyguard_flak_cannon_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
firebird_missile.Name = "firebird_missile"
|
||||
firebird_missile.Capacity = 50
|
||||
firebird_missile.Tile = InventoryTile.Tile44
|
||||
|
||||
flux_cannon_thresher_battery.Name = "flux_cannon_thresher_battery"
|
||||
flux_cannon_thresher_battery.Capacity = 150
|
||||
flux_cannon_thresher_battery.Tile = InventoryTile.Tile44
|
||||
|
||||
fluxpod_ammo.Name = "fluxpod_ammo"
|
||||
fluxpod_ammo.Capacity = 80
|
||||
fluxpod_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
hellfire_ammo.Name = "hellfire_ammo"
|
||||
hellfire_ammo.Capacity = 24
|
||||
hellfire_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
liberator_bomb.Name = "liberator_bomb"
|
||||
liberator_bomb.Capacity = 20
|
||||
liberator_bomb.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_25mm.Name = "25mmbullet"
|
||||
bullet_25mm.Capacity = 150
|
||||
bullet_25mm.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_75mm.Name = "75mmbullet"
|
||||
bullet_75mm.Capacity = 100
|
||||
bullet_75mm.Tile = InventoryTile.Tile44
|
||||
|
||||
heavy_grenade_mortar.Name = "heavy_grenade_mortar"
|
||||
heavy_grenade_mortar.Capacity = 100
|
||||
heavy_grenade_mortar.Tile = InventoryTile.Tile44
|
||||
|
||||
pulse_battery.Name = "pulse_battery"
|
||||
pulse_battery.Capacity = 100
|
||||
pulse_battery.Tile = InventoryTile.Tile44
|
||||
|
||||
heavy_rail_beam_battery.Name = "heavy_rail_beam_battery"
|
||||
heavy_rail_beam_battery.Capacity = 100
|
||||
heavy_rail_beam_battery.Tile = InventoryTile.Tile44
|
||||
|
||||
reaver_rocket.Name = "reaver_rocket"
|
||||
reaver_rocket.Capacity = 12
|
||||
reaver_rocket.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_20mm.Name = "20mmbullet"
|
||||
bullet_20mm.Capacity = 200
|
||||
bullet_20mm.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_12mm.Name = "12mmbullet"
|
||||
bullet_12mm.Capacity = 300
|
||||
bullet_12mm.Tile = InventoryTile.Tile44
|
||||
|
||||
wasp_rocket_ammo.Name = "wasp_rocket_ammo"
|
||||
wasp_rocket_ammo.Capacity = 6
|
||||
wasp_rocket_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
wasp_gun_ammo.Name = "wasp_gun_ammo"
|
||||
wasp_gun_ammo.Capacity = 150
|
||||
wasp_gun_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_15mm.Name = "15mmbullet"
|
||||
bullet_15mm.Capacity = 360
|
||||
bullet_15mm.Tile = InventoryTile.Tile44
|
||||
|
||||
colossus_100mm_cannon_ammo.Name = "colossus_100mm_cannon_ammo"
|
||||
colossus_100mm_cannon_ammo.Capacity = 90
|
||||
colossus_100mm_cannon_ammo.Tile = InventoryTile.Tile55
|
||||
|
||||
colossus_burster_ammo.Name = "colossus_burster_ammo"
|
||||
colossus_burster_ammo.Capacity = 235
|
||||
colossus_burster_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
colossus_cluster_bomb_ammo.Name = "colossus_cluster_bomb_ammo"
|
||||
colossus_cluster_bomb_ammo.Capacity = 150
|
||||
colossus_cluster_bomb_ammo.Tile = InventoryTile.Tile55
|
||||
|
||||
colossus_chaingun_ammo.Name = "colossus_chaingun_ammo"
|
||||
colossus_chaingun_ammo.Capacity = 600
|
||||
colossus_chaingun_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
colossus_tank_cannon_ammo.Name = "colossus_tank_cannon_ammo"
|
||||
colossus_tank_cannon_ammo.Capacity = 110
|
||||
colossus_tank_cannon_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_105mm.Name = "105mmbullet"
|
||||
bullet_105mm.Capacity = 100
|
||||
bullet_105mm.Tile = InventoryTile.Tile44
|
||||
|
||||
gauss_cannon_ammo.Name = "gauss_cannon_ammo"
|
||||
gauss_cannon_ammo.Capacity = 15
|
||||
gauss_cannon_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
peregrine_dual_machine_gun_ammo.Name = "peregrine_dual_machine_gun_ammo"
|
||||
peregrine_dual_machine_gun_ammo.Capacity = 240
|
||||
peregrine_dual_machine_gun_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
peregrine_mechhammer_ammo.Name = "peregrine_mechhammer_ammo"
|
||||
peregrine_mechhammer_ammo.Capacity = 30
|
||||
peregrine_mechhammer_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
peregrine_particle_cannon_ammo.Name = "peregrine_particle_cannon_ammo"
|
||||
peregrine_particle_cannon_ammo.Capacity = 40
|
||||
peregrine_particle_cannon_ammo.Tile = InventoryTile.Tile55
|
||||
|
||||
peregrine_rocket_pod_ammo.Name = "peregrine_rocket_pod_ammo"
|
||||
peregrine_rocket_pod_ammo.Capacity = 275
|
||||
peregrine_rocket_pod_ammo.Tile = InventoryTile.Tile55
|
||||
|
||||
peregrine_sparrow_ammo.Name = "peregrine_sparrow_ammo"
|
||||
peregrine_sparrow_ammo.Capacity = 150
|
||||
peregrine_sparrow_ammo.Tile = InventoryTile.Tile44
|
||||
|
||||
bullet_150mm.Name = "150mmbullet"
|
||||
bullet_150mm.Capacity = 50
|
||||
bullet_150mm.Tile = InventoryTile.Tile44
|
||||
|
||||
phalanx_ammo.Name = "phalanx_ammo"
|
||||
phalanx_ammo.Size = EquipmentSize.Inventory
|
||||
|
||||
spitfire_ammo.Name = "spitfire_ammo"
|
||||
spitfire_ammo.Size = EquipmentSize.Inventory
|
||||
|
||||
spitfire_aa_ammo.Name = "spitfire_aa_ammo"
|
||||
spitfire_aa_ammo.Size = EquipmentSize.Inventory
|
||||
|
||||
energy_gun_ammo.Name = "energy_gun_ammo"
|
||||
energy_gun_ammo.Size = EquipmentSize.Inventory
|
||||
|
||||
armor_siphon_ammo.Name = "armor_siphon_ammo"
|
||||
armor_siphon_ammo.Capacity = 0
|
||||
armor_siphon_ammo.Size = EquipmentSize.Blocked
|
||||
|
||||
ntu_siphon_ammo.Name = "ntu_siphon_ammo"
|
||||
ntu_siphon_ammo.Capacity = 0
|
||||
ntu_siphon_ammo.Size = EquipmentSize.Blocked
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,461 @@
|
|||
// Copyright (c) 2024 PSForever
|
||||
package net.psforever.objects.global
|
||||
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
import net.psforever.objects.ce.DeployableCategory
|
||||
import net.psforever.objects.definition.DeployAnimation
|
||||
import net.psforever.objects.definition.converter.{FieldTurretConverter, InternalTelepadDeployableConverter, TelepadDeployableConverter}
|
||||
import net.psforever.objects.equipment.{EffectTarget, TargetValidation}
|
||||
import net.psforever.objects.geometry.GeometryForm
|
||||
import net.psforever.objects.geometry.d3.VolumetricGeometry
|
||||
import net.psforever.objects.serverobject.mount.{MountInfo, SeatDefinition}
|
||||
import net.psforever.objects.serverobject.turret.{AutoChecks, AutoCooldowns, AutoRanges, Automation, TurretUpgrade}
|
||||
import net.psforever.objects.vital.{CollisionXYData, CollisionZData, ComplexDeployableResolutions, SimpleResolutions}
|
||||
import net.psforever.objects.vital.base.DamageType
|
||||
import net.psforever.objects.vital.collision.TrapCollisionDamageMultiplier
|
||||
import net.psforever.objects.vital.etc.ExplodingRadialDegrade
|
||||
import net.psforever.objects.vital.prop.DamageWithPosition
|
||||
|
||||
import scala.collection.mutable
|
||||
import scala.concurrent.duration._
|
||||
|
||||
object GlobalDefinitionsDeployable {
|
||||
import GlobalDefinitions._
|
||||
|
||||
/**
|
||||
* Initialize `Deployable` globals.
|
||||
*/
|
||||
def init(): Unit = {
|
||||
val mine: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.1914f, height = 0.0957f)
|
||||
val smallTurret: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.48435f, height = 1.23438f)
|
||||
val sensor: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.1914f, height = 1.21875f)
|
||||
val largeTurret: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 0.8437f, height = 2.29687f)
|
||||
|
||||
boomer.Name = "boomer"
|
||||
boomer.Descriptor = "Boomers"
|
||||
boomer.MaxHealth = 100
|
||||
boomer.Damageable = true
|
||||
boomer.DamageableByFriendlyFire = false
|
||||
boomer.Repairable = false
|
||||
boomer.DeployCategory = DeployableCategory.Boomers
|
||||
boomer.DeployTime = Duration.create(1000, "ms")
|
||||
boomer.deployAnimation = DeployAnimation.Standard
|
||||
boomer.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.Splash
|
||||
SympatheticExplosion = true
|
||||
Damage0 = 250
|
||||
Damage1 = 750
|
||||
Damage2 = 400
|
||||
Damage3 = 400
|
||||
Damage4 = 1850
|
||||
DamageRadius = 5.1f
|
||||
DamageAtEdge = 0.1f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
boomer.Geometry = mine
|
||||
|
||||
he_mine.Name = "he_mine"
|
||||
he_mine.Descriptor = "Mines"
|
||||
he_mine.MaxHealth = 100
|
||||
he_mine.Damageable = true
|
||||
he_mine.DamageableByFriendlyFire = false
|
||||
he_mine.Repairable = false
|
||||
he_mine.DeployTime = Duration.create(1000, "ms")
|
||||
he_mine.deployAnimation = DeployAnimation.Standard
|
||||
he_mine.triggerRadius = 3f
|
||||
he_mine.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.Splash
|
||||
SympatheticExplosion = true
|
||||
Damage0 = 100
|
||||
Damage1 = 750
|
||||
Damage2 = 400
|
||||
Damage3 = 565
|
||||
Damage4 = 1600
|
||||
DamageRadius = 6.6f
|
||||
DamageAtEdge = 0.25f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
he_mine.Geometry = mine
|
||||
|
||||
jammer_mine.Name = "jammer_mine"
|
||||
jammer_mine.Descriptor = "JammerMines"
|
||||
jammer_mine.MaxHealth = 100
|
||||
jammer_mine.Damageable = true
|
||||
jammer_mine.DamageableByFriendlyFire = false
|
||||
jammer_mine.Repairable = false
|
||||
jammer_mine.DeployTime = Duration.create(1000, "ms")
|
||||
jammer_mine.deployAnimation = DeployAnimation.Standard
|
||||
jammer_mine.DetonateOnJamming = false
|
||||
jammer_mine.triggerRadius = 3f
|
||||
jammer_mine.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.Splash
|
||||
Damage0 = 0
|
||||
DamageRadius = 10f
|
||||
DamageAtEdge = 1.0f
|
||||
AdditionalEffect = true
|
||||
JammedEffectDuration += TargetValidation(
|
||||
EffectTarget.Category.Player,
|
||||
EffectTarget.Validation.Player
|
||||
) -> 1000
|
||||
JammedEffectDuration += TargetValidation(
|
||||
EffectTarget.Category.Vehicle,
|
||||
EffectTarget.Validation.AMS
|
||||
) -> 5000
|
||||
JammedEffectDuration += TargetValidation(
|
||||
EffectTarget.Category.Deployable,
|
||||
EffectTarget.Validation.MotionSensor
|
||||
) -> 30000
|
||||
JammedEffectDuration += TargetValidation(
|
||||
EffectTarget.Category.Deployable,
|
||||
EffectTarget.Validation.Spitfire
|
||||
) -> 30000
|
||||
JammedEffectDuration += TargetValidation(
|
||||
EffectTarget.Category.Turret,
|
||||
EffectTarget.Validation.Turret
|
||||
) -> 30000
|
||||
JammedEffectDuration += TargetValidation(
|
||||
EffectTarget.Category.Vehicle,
|
||||
EffectTarget.Validation.VehicleNotAMS
|
||||
) -> 10000
|
||||
}
|
||||
jammer_mine.Geometry = mine
|
||||
|
||||
spitfire_turret.Name = "spitfire_turret"
|
||||
spitfire_turret.Descriptor = "Spitfires"
|
||||
spitfire_turret.MaxHealth = 100
|
||||
spitfire_turret.Damageable = true
|
||||
spitfire_turret.Repairable = true
|
||||
spitfire_turret.RepairIfDestroyed = false
|
||||
spitfire_turret.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
spitfire_turret.WeaponPaths(1) += TurretUpgrade.None -> spitfire_weapon
|
||||
spitfire_turret.ReserveAmmunition = false
|
||||
spitfire_turret.DeployCategory = DeployableCategory.SmallTurrets
|
||||
spitfire_turret.DeployTime = Duration.create(5000, "ms")
|
||||
spitfire_turret.Model = ComplexDeployableResolutions.calculate
|
||||
spitfire_turret.deployAnimation = DeployAnimation.Standard
|
||||
spitfire_turret.AutoFire = Automation(
|
||||
AutoRanges(
|
||||
detection = 75f,
|
||||
trigger = 50f,
|
||||
escape = 50f
|
||||
),
|
||||
AutoChecks(
|
||||
validation = List(
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidatePlayerTarget,
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidateMaxTarget,
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidateGroundVehicleTarget,
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget,
|
||||
EffectTarget.Validation.AutoTurretValidateMountableEntityTarget
|
||||
)
|
||||
),
|
||||
retaliatoryDelay = 2000L, //8000L
|
||||
refireTime = 200.milliseconds //150.milliseconds
|
||||
)
|
||||
spitfire_turret.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 200
|
||||
Damage1 = 300
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.2f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
spitfire_turret.Geometry = smallTurret
|
||||
spitfire_turret.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
spitfire_turret.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
spitfire_turret.mass = 5f
|
||||
|
||||
spitfire_cloaked.Name = "spitfire_cloaked"
|
||||
spitfire_cloaked.Descriptor = "CloakingSpitfires"
|
||||
spitfire_cloaked.MaxHealth = 100
|
||||
spitfire_cloaked.Damageable = true
|
||||
spitfire_cloaked.Repairable = true
|
||||
spitfire_cloaked.RepairIfDestroyed = false
|
||||
spitfire_cloaked.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
spitfire_cloaked.WeaponPaths(1) += TurretUpgrade.None -> spitfire_weapon
|
||||
spitfire_cloaked.ReserveAmmunition = false
|
||||
spitfire_cloaked.DeployCategory = DeployableCategory.SmallTurrets
|
||||
spitfire_cloaked.DeployTime = Duration.create(5000, "ms")
|
||||
spitfire_cloaked.deployAnimation = DeployAnimation.Standard
|
||||
spitfire_cloaked.Model = ComplexDeployableResolutions.calculate
|
||||
spitfire_cloaked.AutoFire = Automation(
|
||||
AutoRanges(
|
||||
detection = 75f,
|
||||
trigger = 50f,
|
||||
escape = 75f
|
||||
),
|
||||
AutoChecks(
|
||||
validation = List(
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidatePlayerTarget,
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidateMaxTarget,
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidateGroundVehicleTarget,
|
||||
EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget,
|
||||
EffectTarget.Validation.AutoTurretValidateMountableEntityTarget
|
||||
)
|
||||
),
|
||||
cooldowns = AutoCooldowns(
|
||||
targetSelect = 0L,
|
||||
missedShot = 0L
|
||||
),
|
||||
detectionSweepTime = 500.milliseconds,
|
||||
retaliatoryDelay = 1L, //8000L
|
||||
retaliationOverridesTarget = false,
|
||||
refireTime = 200.milliseconds //150.milliseconds
|
||||
)
|
||||
spitfire_cloaked.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 50
|
||||
Damage1 = 75
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.2f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
spitfire_cloaked.Geometry = smallTurret
|
||||
spitfire_cloaked.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
spitfire_cloaked.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
spitfire_cloaked.mass = 5f
|
||||
|
||||
spitfire_aa.Name = "spitfire_aa"
|
||||
spitfire_aa.Descriptor = "FlakSpitfires"
|
||||
spitfire_aa.MaxHealth = 100
|
||||
spitfire_aa.Damageable = true
|
||||
spitfire_aa.Repairable = true
|
||||
spitfire_aa.RepairIfDestroyed = false
|
||||
spitfire_aa.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
spitfire_aa.WeaponPaths(1) += TurretUpgrade.None -> spitfire_aa_weapon
|
||||
spitfire_aa.ReserveAmmunition = false
|
||||
spitfire_aa.DeployCategory = DeployableCategory.SmallTurrets
|
||||
spitfire_aa.DeployTime = Duration.create(5000, "ms")
|
||||
spitfire_aa.deployAnimation = DeployAnimation.Standard
|
||||
spitfire_aa.Model = ComplexDeployableResolutions.calculate
|
||||
spitfire_aa.AutoFire = Automation(
|
||||
AutoRanges(
|
||||
detection = 125f,
|
||||
trigger = 100f,
|
||||
escape = 200f
|
||||
),
|
||||
AutoChecks(
|
||||
validation = List(EffectTarget.Validation.SmallRoboticsTurretValidateAircraftTarget)
|
||||
),
|
||||
retaliatoryDelay = 2000L, //8000L
|
||||
retaliationOverridesTarget = false,
|
||||
refireTime = 0.seconds, //300.milliseconds
|
||||
cylindrical = true,
|
||||
cylindricalExtraHeight = 50f
|
||||
)
|
||||
spitfire_aa.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 200
|
||||
Damage1 = 300
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.2f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
spitfire_aa.Geometry = smallTurret
|
||||
spitfire_aa.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
spitfire_aa.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
spitfire_aa.mass = 5f
|
||||
|
||||
motionalarmsensor.Name = "motionalarmsensor"
|
||||
motionalarmsensor.Descriptor = "MotionSensors"
|
||||
motionalarmsensor.MaxHealth = 100
|
||||
motionalarmsensor.Damageable = true
|
||||
motionalarmsensor.Repairable = true
|
||||
motionalarmsensor.RepairIfDestroyed = false
|
||||
motionalarmsensor.DeployTime = Duration.create(1000, "ms")
|
||||
motionalarmsensor.deployAnimation = DeployAnimation.Standard
|
||||
motionalarmsensor.Geometry = sensor
|
||||
|
||||
sensor_shield.Name = "sensor_shield"
|
||||
sensor_shield.Descriptor = "SensorShields"
|
||||
sensor_shield.MaxHealth = 100
|
||||
sensor_shield.Damageable = true
|
||||
sensor_shield.Repairable = true
|
||||
sensor_shield.RepairIfDestroyed = false
|
||||
sensor_shield.DeployTime = Duration.create(5000, "ms")
|
||||
sensor_shield.deployAnimation = DeployAnimation.Standard
|
||||
sensor_shield.Geometry = sensor
|
||||
|
||||
tank_traps.Name = "tank_traps"
|
||||
tank_traps.Descriptor = "TankTraps"
|
||||
tank_traps.MaxHealth = 5000
|
||||
tank_traps.Damageable = true
|
||||
tank_traps.Repairable = true
|
||||
tank_traps.RepairIfDestroyed = false
|
||||
tank_traps.DeployCategory = DeployableCategory.TankTraps
|
||||
tank_traps.DeployTime = Duration.create(6000, "ms")
|
||||
tank_traps.deployAnimation = DeployAnimation.Fdu
|
||||
//tank_traps do not explode
|
||||
tank_traps.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 10
|
||||
Damage1 = 10
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.2f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
tank_traps.Geometry = GeometryForm.representByCylinder(radius = 2.89680997f, height = 3.57812f)
|
||||
tank_traps.collision.xy = CollisionXYData(Array((0.01f, 5), (0.02f, 10), (0.03f, 15), (0.04f, 20), (0.05f, 25)))
|
||||
tank_traps.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
tank_traps.Modifiers = TrapCollisionDamageMultiplier(5f) //10f
|
||||
tank_traps.mass = 600f
|
||||
|
||||
val fieldTurretConverter = new FieldTurretConverter
|
||||
portable_manned_turret.Name = "portable_manned_turret"
|
||||
portable_manned_turret.Descriptor = "FieldTurrets"
|
||||
portable_manned_turret.MaxHealth = 1000
|
||||
portable_manned_turret.Damageable = true
|
||||
portable_manned_turret.Repairable = true
|
||||
portable_manned_turret.RepairIfDestroyed = false
|
||||
portable_manned_turret.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
portable_manned_turret.WeaponPaths(1) += TurretUpgrade.None -> energy_gun
|
||||
portable_manned_turret.Seats += 0 -> new SeatDefinition()
|
||||
portable_manned_turret.controlledWeapons(seat = 0, weapon = 1)
|
||||
portable_manned_turret.MountPoints += 1 -> MountInfo(0)
|
||||
portable_manned_turret.MountPoints += 2 -> MountInfo(0)
|
||||
portable_manned_turret.ReserveAmmunition = true
|
||||
portable_manned_turret.FactionLocked = true
|
||||
portable_manned_turret.Packet = fieldTurretConverter
|
||||
portable_manned_turret.DeployCategory = DeployableCategory.FieldTurrets
|
||||
portable_manned_turret.DeployTime = Duration.create(6000, "ms")
|
||||
portable_manned_turret.deployAnimation = DeployAnimation.Fdu
|
||||
portable_manned_turret.Model = ComplexDeployableResolutions.calculate
|
||||
portable_manned_turret.RadiationShielding = 0.5f
|
||||
portable_manned_turret.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 150
|
||||
Damage1 = 300
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.1f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
portable_manned_turret.Geometry = largeTurret
|
||||
portable_manned_turret.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
portable_manned_turret.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
portable_manned_turret.mass = 100f
|
||||
|
||||
portable_manned_turret_nc.Name = "portable_manned_turret_nc"
|
||||
portable_manned_turret_nc.Descriptor = "FieldTurrets"
|
||||
portable_manned_turret_nc.MaxHealth = 1000
|
||||
portable_manned_turret_nc.Damageable = true
|
||||
portable_manned_turret_nc.Repairable = true
|
||||
portable_manned_turret_nc.RepairIfDestroyed = false
|
||||
portable_manned_turret_nc.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
portable_manned_turret_nc.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_nc
|
||||
portable_manned_turret_nc.Seats += 0 -> new SeatDefinition()
|
||||
portable_manned_turret_nc.controlledWeapons(seat = 0, weapon = 1)
|
||||
portable_manned_turret_nc.MountPoints += 1 -> MountInfo(0)
|
||||
portable_manned_turret_nc.MountPoints += 2 -> MountInfo(0)
|
||||
portable_manned_turret_nc.ReserveAmmunition = true
|
||||
portable_manned_turret_nc.FactionLocked = true
|
||||
portable_manned_turret_nc.Packet = fieldTurretConverter
|
||||
portable_manned_turret_nc.DeployCategory = DeployableCategory.FieldTurrets
|
||||
portable_manned_turret_nc.DeployTime = Duration.create(6000, "ms")
|
||||
portable_manned_turret_nc.deployAnimation = DeployAnimation.Fdu
|
||||
portable_manned_turret_nc.Model = ComplexDeployableResolutions.calculate
|
||||
portable_manned_turret_nc.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 150
|
||||
Damage1 = 300
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.1f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
portable_manned_turret_nc.Geometry = largeTurret
|
||||
portable_manned_turret_nc.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
portable_manned_turret_nc.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
portable_manned_turret_nc.mass = 100f
|
||||
|
||||
portable_manned_turret_tr.Name = "portable_manned_turret_tr"
|
||||
portable_manned_turret_tr.Descriptor = "FieldTurrets"
|
||||
portable_manned_turret_tr.MaxHealth = 1000
|
||||
portable_manned_turret_tr.Damageable = true
|
||||
portable_manned_turret_tr.Repairable = true
|
||||
portable_manned_turret_tr.RepairIfDestroyed = false
|
||||
portable_manned_turret_tr.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
portable_manned_turret_tr.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_tr
|
||||
portable_manned_turret_tr.Seats += 0 -> new SeatDefinition()
|
||||
portable_manned_turret_tr.controlledWeapons(seat = 0, weapon = 1)
|
||||
portable_manned_turret_tr.MountPoints += 1 -> MountInfo(0)
|
||||
portable_manned_turret_tr.MountPoints += 2 -> MountInfo(0)
|
||||
portable_manned_turret_tr.ReserveAmmunition = true
|
||||
portable_manned_turret_tr.FactionLocked = true
|
||||
portable_manned_turret_tr.Packet = fieldTurretConverter
|
||||
portable_manned_turret_tr.DeployCategory = DeployableCategory.FieldTurrets
|
||||
portable_manned_turret_tr.DeployTime = Duration.create(6000, "ms")
|
||||
portable_manned_turret_tr.deployAnimation = DeployAnimation.Fdu
|
||||
portable_manned_turret_tr.Model = ComplexDeployableResolutions.calculate
|
||||
portable_manned_turret_tr.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 150
|
||||
Damage1 = 300
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.1f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
portable_manned_turret_tr.Geometry = largeTurret
|
||||
portable_manned_turret_tr.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
portable_manned_turret_tr.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
portable_manned_turret_tr.mass = 100f
|
||||
|
||||
portable_manned_turret_vs.Name = "portable_manned_turret_vs"
|
||||
portable_manned_turret_vs.Descriptor = "FieldTurrets"
|
||||
portable_manned_turret_vs.MaxHealth = 1000
|
||||
portable_manned_turret_vs.Damageable = true
|
||||
portable_manned_turret_vs.Repairable = true
|
||||
portable_manned_turret_vs.RepairIfDestroyed = false
|
||||
portable_manned_turret_vs.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
portable_manned_turret_vs.WeaponPaths(1) += TurretUpgrade.None -> energy_gun_vs
|
||||
portable_manned_turret_vs.Seats += 0 -> new SeatDefinition()
|
||||
portable_manned_turret_vs.controlledWeapons(seat = 0, weapon = 1)
|
||||
portable_manned_turret_vs.MountPoints += 1 -> MountInfo(0)
|
||||
portable_manned_turret_vs.MountPoints += 2 -> MountInfo(0)
|
||||
portable_manned_turret_vs.ReserveAmmunition = true
|
||||
portable_manned_turret_vs.FactionLocked = true
|
||||
portable_manned_turret_vs.Packet = fieldTurretConverter
|
||||
portable_manned_turret_vs.DeployCategory = DeployableCategory.FieldTurrets
|
||||
portable_manned_turret_vs.DeployTime = Duration.create(6000, "ms")
|
||||
portable_manned_turret_vs.deployAnimation = DeployAnimation.Fdu
|
||||
portable_manned_turret_vs.Model = ComplexDeployableResolutions.calculate
|
||||
portable_manned_turret_vs.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 150
|
||||
Damage1 = 300
|
||||
DamageRadius = 8
|
||||
DamageAtEdge = 0.1f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
portable_manned_turret_vs.Geometry = largeTurret
|
||||
portable_manned_turret_vs.collision.xy = CollisionXYData(Array((0.01f, 10), (0.02f, 40), (0.03f, 60), (0.04f, 80), (0.05f, 100)))
|
||||
portable_manned_turret_vs.collision.z = CollisionZData(Array((4f, 10), (4.25f, 40), (4.5f, 60), (4.75f, 80), (5f, 100)))
|
||||
portable_manned_turret_vs.mass = 100f
|
||||
|
||||
deployable_shield_generator.Name = "deployable_shield_generator"
|
||||
deployable_shield_generator.Descriptor = "ShieldGenerators"
|
||||
deployable_shield_generator.MaxHealth = 1700
|
||||
deployable_shield_generator.Damageable = true
|
||||
deployable_shield_generator.Repairable = true
|
||||
deployable_shield_generator.RepairIfDestroyed = false
|
||||
deployable_shield_generator.DeployTime = Duration.create(6000, "ms")
|
||||
deployable_shield_generator.deployAnimation = DeployAnimation.Fdu
|
||||
deployable_shield_generator.Model = ComplexDeployableResolutions.calculate
|
||||
deployable_shield_generator.Geometry = GeometryForm.representByCylinder(radius = 0.6562f, height = 2.17188f)
|
||||
|
||||
router_telepad_deployable.Name = "router_telepad_deployable"
|
||||
router_telepad_deployable.MaxHealth = 100
|
||||
router_telepad_deployable.Damageable = true
|
||||
router_telepad_deployable.Repairable = false
|
||||
router_telepad_deployable.DeployTime = Duration.create(1, "ms")
|
||||
router_telepad_deployable.DeployCategory = DeployableCategory.Telepads
|
||||
router_telepad_deployable.Packet = new TelepadDeployableConverter
|
||||
router_telepad_deployable.Model = SimpleResolutions.calculate
|
||||
router_telepad_deployable.Geometry = GeometryForm.representByRaisedSphere(radius = 1.2344f)
|
||||
|
||||
internal_router_telepad_deployable.Name = "router_telepad_deployable"
|
||||
internal_router_telepad_deployable.MaxHealth = 1
|
||||
internal_router_telepad_deployable.Damageable = false
|
||||
internal_router_telepad_deployable.Repairable = false
|
||||
internal_router_telepad_deployable.DeployTime = Duration.create(1, "ms")
|
||||
internal_router_telepad_deployable.DeployCategory = DeployableCategory.Telepads
|
||||
internal_router_telepad_deployable.Packet = new InternalTelepadDeployableConverter
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
// Copyright (c) 2024 PSForever
|
||||
package net.psforever.objects.global
|
||||
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
import net.psforever.objects.avatar.Certification
|
||||
import net.psforever.objects.definition.SpecialExoSuitDefinition
|
||||
import net.psforever.objects.equipment.EquipmentSize
|
||||
import net.psforever.objects.inventory.InventoryTile
|
||||
import net.psforever.objects.vital.MaxResolutions
|
||||
import net.psforever.objects.vital.damage.DamageCalculations
|
||||
|
||||
object GlobalDefinitionsExoSuit {
|
||||
import GlobalDefinitions._
|
||||
|
||||
/**
|
||||
* Initialize `ExoSuitType` globals.
|
||||
*/
|
||||
def init(): Unit = {
|
||||
Standard.Name = "standard"
|
||||
Standard.MaxArmor = 50
|
||||
Standard.InventoryScale = InventoryTile.Tile96
|
||||
Standard.InventoryOffset = 6
|
||||
Standard.Holster(0, EquipmentSize.Pistol)
|
||||
Standard.Holster(2, EquipmentSize.Rifle)
|
||||
Standard.Holster(4, EquipmentSize.Melee)
|
||||
Standard.ResistanceDirectHit = 4
|
||||
Standard.ResistanceSplash = 15
|
||||
Standard.ResistanceAggravated = 8
|
||||
Standard.collision.forceFactor = 1.5f
|
||||
Standard.collision.massFactor = 2f
|
||||
|
||||
Agile.Name = "lite_armor"
|
||||
Agile.Descriptor = "agile"
|
||||
Agile.MaxArmor = 100
|
||||
Agile.InventoryScale = InventoryTile.Tile99
|
||||
Agile.InventoryOffset = 6
|
||||
Agile.Holster(0, EquipmentSize.Pistol)
|
||||
Agile.Holster(1, EquipmentSize.Pistol)
|
||||
Agile.Holster(2, EquipmentSize.Rifle)
|
||||
Agile.Holster(4, EquipmentSize.Melee)
|
||||
Agile.ResistanceDirectHit = 6
|
||||
Agile.ResistanceSplash = 25
|
||||
Agile.ResistanceAggravated = 10
|
||||
Agile.collision.forceFactor = 1.5f
|
||||
Agile.collision.massFactor = 2f
|
||||
|
||||
Reinforced.Name = "med_armor"
|
||||
Reinforced.Descriptor = "reinforced"
|
||||
Reinforced.Permissions = List(Certification.ReinforcedExoSuit)
|
||||
Reinforced.MaxArmor = 200
|
||||
Reinforced.InventoryScale = InventoryTile.Tile1209
|
||||
Reinforced.InventoryOffset = 6
|
||||
Reinforced.Holster(0, EquipmentSize.Pistol)
|
||||
Reinforced.Holster(1, EquipmentSize.Pistol)
|
||||
Reinforced.Holster(2, EquipmentSize.Rifle)
|
||||
Reinforced.Holster(3, EquipmentSize.Rifle)
|
||||
Reinforced.Holster(4, EquipmentSize.Melee)
|
||||
Reinforced.ResistanceDirectHit = 10
|
||||
Reinforced.ResistanceSplash = 35
|
||||
Reinforced.ResistanceAggravated = 12
|
||||
Reinforced.collision.forceFactor = 2f
|
||||
Reinforced.collision.massFactor = 3f
|
||||
|
||||
Infiltration.Name = "infiltration_suit"
|
||||
Infiltration.Permissions = List(Certification.InfiltrationSuit)
|
||||
Infiltration.MaxArmor = 0
|
||||
Infiltration.InventoryScale = InventoryTile.Tile66
|
||||
Infiltration.InventoryOffset = 6
|
||||
Infiltration.Holster(0, EquipmentSize.Pistol)
|
||||
Infiltration.Holster(4, EquipmentSize.Melee)
|
||||
|
||||
def CommonMaxConfig(max: SpecialExoSuitDefinition): Unit = {
|
||||
max.Permissions = List(Certification.AIMAX, Certification.AVMAX, Certification.AAMAX, Certification.UniMAX)
|
||||
max.MaxArmor = 650
|
||||
max.InventoryScale = InventoryTile.Tile1612
|
||||
max.InventoryOffset = 6
|
||||
max.Holster(0, EquipmentSize.Max)
|
||||
max.Holster(4, EquipmentSize.Melee)
|
||||
max.Subtract.Damage1 = 2
|
||||
max.ResistanceDirectHit = 6
|
||||
max.ResistanceSplash = 35
|
||||
max.ResistanceAggravated = 10
|
||||
max.RadiationShielding = 0.5f
|
||||
max.collision.forceFactor = 4f
|
||||
max.collision.massFactor = 10f
|
||||
max.DamageUsing = DamageCalculations.AgainstMaxSuit
|
||||
max.Model = MaxResolutions.calculate
|
||||
}
|
||||
|
||||
CommonMaxConfig(VSMAX)
|
||||
VSMAX.Name = "vshev"
|
||||
VSMAX.MaxCapacitor = 50
|
||||
VSMAX.CapacitorRechargeDelayMillis = 5000
|
||||
VSMAX.CapacitorRechargePerSecond = 3
|
||||
VSMAX.CapacitorDrainPerSecond = 20
|
||||
|
||||
CommonMaxConfig(TRMAX)
|
||||
TRMAX.Name = "trhev"
|
||||
TRMAX.MaxCapacitor = 300
|
||||
TRMAX.CapacitorRechargeDelayMillis = 10000
|
||||
TRMAX.CapacitorRechargePerSecond = 10
|
||||
TRMAX.CapacitorDrainPerSecond = 30
|
||||
|
||||
CommonMaxConfig(NCMAX)
|
||||
NCMAX.Name = "nchev"
|
||||
NCMAX.MaxCapacitor = 400
|
||||
NCMAX.CapacitorRechargeDelayMillis = 10000
|
||||
NCMAX.CapacitorRechargePerSecond = 4
|
||||
NCMAX.CapacitorDrainPerSecond = 4
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright (c) 2024 PSForever
|
||||
package net.psforever.objects.global
|
||||
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
|
||||
object GlobalDefinitionsKit {
|
||||
import GlobalDefinitions._
|
||||
|
||||
/**
|
||||
* Initialize `KitDefinition` globals.
|
||||
*/
|
||||
def init(): Unit = {
|
||||
medkit.Name = "medkit"
|
||||
|
||||
super_medkit.Name = "super_medkit"
|
||||
|
||||
super_armorkit.Name = "super_armorkit"
|
||||
|
||||
super_staminakit.Name = "super_staminakit"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,856 @@
|
|||
// Copyright (c) 2024 PSForever
|
||||
package net.psforever.objects.global
|
||||
|
||||
import net.psforever.objects.{GlobalDefinitions, SpawnPoint}
|
||||
import net.psforever.objects.avatar.Certification
|
||||
import net.psforever.objects.equipment.EffectTarget
|
||||
import net.psforever.objects.geometry.GeometryForm
|
||||
import net.psforever.objects.geometry.d3.VolumetricGeometry
|
||||
import net.psforever.objects.serverobject.mount.{MountInfo, SeatDefinition}
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPadDefinition
|
||||
import net.psforever.objects.serverobject.structures.AutoRepairStats
|
||||
import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalDefinition
|
||||
import net.psforever.objects.serverobject.terminals.{EquipmentTerminalDefinition, VehicleTerminalDefinition}
|
||||
import net.psforever.objects.serverobject.terminals.tabs.{ArmorWithAmmoPage, BattleframeSpawnLoadoutPage, CavernEquipmentQuestion, CavernVehicleQuestion, CertificationPage, EquipmentPage, ImplantPage, InfantryLoadoutPage, NoCavernEquipmentRule, NoExoSuitRule, VehicleLoadoutPage, VehiclePage}
|
||||
import net.psforever.objects.serverobject.turret.{AutoChecks, AutoRanges, Automation, TurretUpgrade}
|
||||
import net.psforever.objects.vital.base.DamageType
|
||||
import net.psforever.objects.vital.etc.ExplodingRadialDegrade
|
||||
import net.psforever.objects.vital.prop.DamageWithPosition
|
||||
import net.psforever.types.{ExoSuitType, Vector3}
|
||||
|
||||
import scala.collection.mutable
|
||||
import scala.concurrent.duration._
|
||||
|
||||
object GlobalDefinitionsMiscellaneous {
|
||||
import GlobalDefinitions._
|
||||
|
||||
/**
|
||||
* Initialize `Miscellaneous` globals.
|
||||
*/
|
||||
def init(): Unit = {
|
||||
val vterm: Any => VolumetricGeometry = GeometryForm.representByCylinder(radius = 1.03515f, height = 1.09374f)
|
||||
val certs: Seq[Certification] = Certification.values.filter(_.cost != 0)
|
||||
val page: CertificationPage = CertificationPage(certs)
|
||||
|
||||
ams_respawn_tube.Name = "ams_respawn_tube"
|
||||
ams_respawn_tube.Delay = 10 // Temporary -- Default value is 15
|
||||
ams_respawn_tube.SpecificPointFunc = SpawnPoint.AMS
|
||||
ams_respawn_tube.Damageable = false
|
||||
ams_respawn_tube.Repairable = false
|
||||
|
||||
matrix_terminala.Name = "matrix_terminala"
|
||||
matrix_terminala.Damageable = false
|
||||
matrix_terminala.Repairable = false
|
||||
|
||||
matrix_terminalb.Name = "matrix_terminalb"
|
||||
matrix_terminalb.Damageable = false
|
||||
matrix_terminalb.Repairable = false
|
||||
|
||||
matrix_terminalc.Name = "matrix_terminalc"
|
||||
matrix_terminalc.Damageable = false
|
||||
matrix_terminalc.Repairable = false
|
||||
|
||||
spawn_terminal.Name = "spawn_terminal"
|
||||
spawn_terminal.Damageable = false
|
||||
spawn_terminal.Repairable = false
|
||||
spawn_terminal.autoRepair = AutoRepairStats(1, 5000, 200, 1)
|
||||
|
||||
order_terminal.Name = "order_terminal"
|
||||
order_terminal.Tab += 0 -> {
|
||||
val tab = EquipmentPage(
|
||||
EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons
|
||||
)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
order_terminal.Tab += 1 -> ArmorWithAmmoPage(
|
||||
EquipmentTerminalDefinition.suits ++ EquipmentTerminalDefinition.maxSuits,
|
||||
EquipmentTerminalDefinition.maxAmmo
|
||||
)
|
||||
order_terminal.Tab += 2 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons
|
||||
)
|
||||
order_terminal.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
||||
order_terminal.Tab += 4 -> {
|
||||
val tab = InfantryLoadoutPage()
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
order_terminal.SellEquipmentByDefault = true
|
||||
order_terminal.MaxHealth = 500
|
||||
order_terminal.Damageable = true
|
||||
order_terminal.Repairable = true
|
||||
order_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
order_terminal.RepairIfDestroyed = true
|
||||
order_terminal.Subtract.Damage1 = 8
|
||||
order_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.8438f, height = 1.3f)
|
||||
|
||||
order_terminala.Name = "order_terminala"
|
||||
order_terminala.Tab += 0 -> {
|
||||
val tab = EquipmentPage(
|
||||
EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons
|
||||
)
|
||||
tab.Exclude = List(NoCavernEquipmentRule)
|
||||
tab
|
||||
}
|
||||
order_terminala.Tab += 1 -> ArmorWithAmmoPage(
|
||||
EquipmentTerminalDefinition.suits,
|
||||
EquipmentTerminalDefinition.maxAmmo
|
||||
)
|
||||
order_terminala.Tab += 2 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons
|
||||
)
|
||||
order_terminala.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
||||
order_terminala.Tab += 4 -> {
|
||||
val tab = InfantryLoadoutPage()
|
||||
tab.Exclude = List(NoExoSuitRule(ExoSuitType.MAX), NoCavernEquipmentRule)
|
||||
tab
|
||||
}
|
||||
order_terminala.SellEquipmentByDefault = true
|
||||
order_terminala.Damageable = false
|
||||
order_terminala.Repairable = false
|
||||
|
||||
order_terminalb.Name = "order_terminalb"
|
||||
order_terminalb.Tab += 0 -> {
|
||||
val tab = EquipmentPage(
|
||||
EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons
|
||||
)
|
||||
tab.Exclude = List(NoCavernEquipmentRule)
|
||||
tab
|
||||
}
|
||||
order_terminalb.Tab += 1 -> ArmorWithAmmoPage(
|
||||
EquipmentTerminalDefinition.suits,
|
||||
EquipmentTerminalDefinition.maxAmmo
|
||||
)
|
||||
order_terminalb.Tab += 2 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons
|
||||
)
|
||||
order_terminalb.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
||||
order_terminalb.Tab += 4 -> {
|
||||
val tab = InfantryLoadoutPage()
|
||||
tab.Exclude = List(NoExoSuitRule(ExoSuitType.MAX), NoCavernEquipmentRule)
|
||||
tab
|
||||
}
|
||||
order_terminalb.SellEquipmentByDefault = true
|
||||
order_terminalb.Damageable = false
|
||||
order_terminalb.Repairable = false
|
||||
|
||||
vanu_equipment_term.Name = "vanu_equipment_term"
|
||||
vanu_equipment_term.Tab += 0 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.infantryAmmunition ++ EquipmentTerminalDefinition.infantryWeapons
|
||||
)
|
||||
vanu_equipment_term.Tab += 1 -> ArmorWithAmmoPage(
|
||||
EquipmentTerminalDefinition.suits ++ EquipmentTerminalDefinition.maxSuits,
|
||||
EquipmentTerminalDefinition.maxAmmo
|
||||
)
|
||||
vanu_equipment_term.Tab += 2 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.supportAmmunition ++ EquipmentTerminalDefinition.supportWeapons
|
||||
)
|
||||
vanu_equipment_term.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
||||
vanu_equipment_term.Tab += 4 -> InfantryLoadoutPage()
|
||||
vanu_equipment_term.SellEquipmentByDefault = true
|
||||
vanu_equipment_term.Damageable = false
|
||||
vanu_equipment_term.Repairable = false
|
||||
|
||||
cert_terminal.Name = "cert_terminal"
|
||||
cert_terminal.Tab += 0 -> page
|
||||
cert_terminal.MaxHealth = 500
|
||||
cert_terminal.Damageable = true
|
||||
cert_terminal.Repairable = true
|
||||
cert_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
cert_terminal.RepairIfDestroyed = true
|
||||
cert_terminal.Subtract.Damage1 = 8
|
||||
cert_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.66405f, height = 1.09374f)
|
||||
|
||||
implant_terminal_mech.Name = "implant_terminal_mech"
|
||||
implant_terminal_mech.MaxHealth = 1500 //TODO 1000; right now, 1000 (mech) + 500 (interface)
|
||||
implant_terminal_mech.Damageable = true
|
||||
implant_terminal_mech.Repairable = true
|
||||
implant_terminal_mech.autoRepair = AutoRepairStats(1.6f, 5000, 2400, 0.05f)
|
||||
implant_terminal_mech.RepairIfDestroyed = true
|
||||
implant_terminal_mech.RadiationShielding = 0.5f
|
||||
implant_terminal_mech.Geometry = GeometryForm.representByCylinder(radius = 2.7813f, height = 6.4375f)
|
||||
|
||||
implant_terminal_interface.Name = "implant_terminal_interface"
|
||||
implant_terminal_interface.Tab += 0 -> ImplantPage(ImplantTerminalDefinition.implants)
|
||||
implant_terminal_interface.MaxHealth = 500
|
||||
implant_terminal_interface.Damageable = false //TODO true
|
||||
implant_terminal_interface.Repairable = true
|
||||
implant_terminal_interface.autoRepair = AutoRepairStats(1, 5000, 200, 1)
|
||||
implant_terminal_interface.RepairIfDestroyed = true
|
||||
//TODO will need geometry when Damageable = true
|
||||
|
||||
ground_vehicle_terminal.Name = "ground_vehicle_terminal"
|
||||
ground_vehicle_terminal.Tab += 46769 -> {
|
||||
val tab = VehiclePage(
|
||||
VehicleTerminalDefinition.groundVehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
tab.Exclude = List(CavernVehicleQuestion)
|
||||
tab
|
||||
}
|
||||
ground_vehicle_terminal.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
ground_vehicle_terminal.MaxHealth = 500
|
||||
ground_vehicle_terminal.Damageable = true
|
||||
ground_vehicle_terminal.Repairable = true
|
||||
ground_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
ground_vehicle_terminal.RepairIfDestroyed = true
|
||||
ground_vehicle_terminal.Subtract.Damage1 = 8
|
||||
ground_vehicle_terminal.Geometry = vterm
|
||||
|
||||
air_vehicle_terminal.Name = "air_vehicle_terminal"
|
||||
air_vehicle_terminal.Tab += 46769 -> VehiclePage(
|
||||
VehicleTerminalDefinition.flight1Vehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
air_vehicle_terminal.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernVehicleQuestion, CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
air_vehicle_terminal.MaxHealth = 500
|
||||
air_vehicle_terminal.Damageable = true
|
||||
air_vehicle_terminal.Repairable = true
|
||||
air_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
air_vehicle_terminal.RepairIfDestroyed = true
|
||||
air_vehicle_terminal.Subtract.Damage1 = 8
|
||||
air_vehicle_terminal.Geometry = vterm
|
||||
|
||||
dropship_vehicle_terminal.Name = "dropship_vehicle_terminal"
|
||||
dropship_vehicle_terminal.Tab += 46769 -> VehiclePage(
|
||||
VehicleTerminalDefinition.flight1Vehicles ++ VehicleTerminalDefinition.flight2Vehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
dropship_vehicle_terminal.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
dropship_vehicle_terminal.MaxHealth = 500
|
||||
dropship_vehicle_terminal.Damageable = true
|
||||
dropship_vehicle_terminal.Repairable = true
|
||||
dropship_vehicle_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
dropship_vehicle_terminal.RepairIfDestroyed = true
|
||||
dropship_vehicle_terminal.Subtract.Damage1 = 8
|
||||
dropship_vehicle_terminal.Geometry = vterm
|
||||
|
||||
vehicle_terminal_combined.Name = "vehicle_terminal_combined"
|
||||
vehicle_terminal_combined.Tab += 46769 -> {
|
||||
val tab = VehiclePage(
|
||||
VehicleTerminalDefinition.flight1Vehicles ++ VehicleTerminalDefinition.groundVehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
tab.Exclude = List(CavernVehicleQuestion)
|
||||
tab
|
||||
}
|
||||
vehicle_terminal_combined.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
vehicle_terminal_combined.MaxHealth = 500
|
||||
vehicle_terminal_combined.Damageable = true
|
||||
vehicle_terminal_combined.Repairable = true
|
||||
vehicle_terminal_combined.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
vehicle_terminal_combined.RepairIfDestroyed = true
|
||||
vehicle_terminal_combined.Subtract.Damage1 = 8
|
||||
vehicle_terminal_combined.Geometry = vterm
|
||||
|
||||
vanu_air_vehicle_term.Name = "vanu_air_vehicle_term"
|
||||
vanu_air_vehicle_term.Tab += 46769 -> VehiclePage(
|
||||
VehicleTerminalDefinition.flight1Vehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
vanu_air_vehicle_term.Tab += 4 -> VehicleLoadoutPage(10)
|
||||
vanu_air_vehicle_term.MaxHealth = 500
|
||||
vanu_air_vehicle_term.Damageable = true
|
||||
vanu_air_vehicle_term.Repairable = true
|
||||
vanu_air_vehicle_term.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
vanu_air_vehicle_term.RepairIfDestroyed = true
|
||||
vanu_air_vehicle_term.Subtract.Damage1 = 8
|
||||
|
||||
vanu_vehicle_term.Name = "vanu_vehicle_term"
|
||||
vanu_vehicle_term.Tab += 46769 -> VehiclePage(
|
||||
VehicleTerminalDefinition.groundVehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
vanu_vehicle_term.Tab += 4 -> VehicleLoadoutPage(10)
|
||||
vanu_vehicle_term.MaxHealth = 500
|
||||
vanu_vehicle_term.Damageable = true
|
||||
vanu_vehicle_term.Repairable = true
|
||||
vanu_vehicle_term.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
vanu_vehicle_term.RepairIfDestroyed = true
|
||||
vanu_vehicle_term.Subtract.Damage1 = 8
|
||||
|
||||
bfr_terminal.Name = "bfr_terminal"
|
||||
bfr_terminal.Tab += 0 -> VehiclePage(
|
||||
VehicleTerminalDefinition.bfrVehicles,
|
||||
VehicleTerminalDefinition.trunk
|
||||
)
|
||||
bfr_terminal.Tab += 1 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrArmWeapons
|
||||
) //inaccessible?
|
||||
bfr_terminal.Tab += 2 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrGunnerWeapons
|
||||
) //inaccessible?
|
||||
bfr_terminal.Tab += 3 -> {
|
||||
val tab = BattleframeSpawnLoadoutPage(VehicleTerminalDefinition.bfrVehicles)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
bfr_terminal.MaxHealth = 500
|
||||
bfr_terminal.Damageable = true
|
||||
bfr_terminal.Repairable = true
|
||||
bfr_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
bfr_terminal.RepairIfDestroyed = true
|
||||
bfr_terminal.Subtract.Damage1 = 8
|
||||
bfr_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.92185f, height = 2.64693f)
|
||||
|
||||
respawn_tube.Name = "respawn_tube"
|
||||
respawn_tube.Delay = 10
|
||||
respawn_tube.SpecificPointFunc = SpawnPoint.Tube
|
||||
respawn_tube.MaxHealth = 1000
|
||||
respawn_tube.Damageable = true
|
||||
respawn_tube.DamageableByFriendlyFire = false
|
||||
respawn_tube.Repairable = true
|
||||
respawn_tube.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1)
|
||||
respawn_tube.RepairIfDestroyed = true
|
||||
respawn_tube.Subtract.Damage1 = 8
|
||||
respawn_tube.Geometry = GeometryForm.representByCylinder(radius = 0.9336f, height = 2.84375f)
|
||||
|
||||
respawn_tube_sanctuary.Name = "respawn_tube"
|
||||
respawn_tube_sanctuary.Delay = 10
|
||||
respawn_tube_sanctuary.SpecificPointFunc = SpawnPoint.Default
|
||||
respawn_tube_sanctuary.MaxHealth = 1000
|
||||
respawn_tube_sanctuary.Damageable = false //true?
|
||||
respawn_tube_sanctuary.DamageableByFriendlyFire = false
|
||||
respawn_tube_sanctuary.Repairable = true
|
||||
respawn_tube_sanctuary.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1)
|
||||
//TODO will need geometry when Damageable = true
|
||||
|
||||
respawn_tube_tower.Name = "respawn_tube_tower"
|
||||
respawn_tube_tower.Delay = 10 // Temporary -- Default value is 20
|
||||
respawn_tube_tower.SpecificPointFunc = SpawnPoint.Tube
|
||||
respawn_tube_tower.MaxHealth = 1000
|
||||
respawn_tube_tower.Damageable = true
|
||||
respawn_tube_tower.DamageableByFriendlyFire = false
|
||||
respawn_tube_tower.Repairable = true
|
||||
respawn_tube_tower.autoRepair = AutoRepairStats(1.6f, 10000, 2400, 1)
|
||||
respawn_tube_tower.RepairIfDestroyed = true
|
||||
respawn_tube_tower.Subtract.Damage1 = 8
|
||||
respawn_tube_tower.Geometry = GeometryForm.representByCylinder(radius = 0.9336f, height = 2.84375f)
|
||||
|
||||
teleportpad_terminal.Name = "teleportpad_terminal"
|
||||
teleportpad_terminal.Tab += 0 -> EquipmentPage(EquipmentTerminalDefinition.routerTerminal)
|
||||
teleportpad_terminal.Damageable = false
|
||||
teleportpad_terminal.Repairable = false
|
||||
|
||||
targeting_laser_dispenser.Name = "targeting_laser_dispenser"
|
||||
targeting_laser_dispenser.Tab += 0 -> EquipmentPage(EquipmentTerminalDefinition.flailTerminal)
|
||||
targeting_laser_dispenser.Damageable = false
|
||||
targeting_laser_dispenser.Repairable = false
|
||||
|
||||
medical_terminal.Name = "medical_terminal"
|
||||
medical_terminal.Interval = 500
|
||||
medical_terminal.HealAmount = 5
|
||||
medical_terminal.ArmorAmount = 10
|
||||
medical_terminal.UseRadius = 0.75f
|
||||
medical_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical
|
||||
medical_terminal.MaxHealth = 500
|
||||
medical_terminal.Damageable = true
|
||||
medical_terminal.Repairable = true
|
||||
medical_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
medical_terminal.RepairIfDestroyed = true
|
||||
medical_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.711f, height = 1.75f)
|
||||
|
||||
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
|
||||
adv_med_terminal.MaxHealth = 750
|
||||
adv_med_terminal.Damageable = true
|
||||
adv_med_terminal.Repairable = true
|
||||
adv_med_terminal.autoRepair = AutoRepairStats(1.57894f, 5000, 2400, 0.05f)
|
||||
adv_med_terminal.RepairIfDestroyed = true
|
||||
adv_med_terminal.Geometry = GeometryForm.representByCylinder(radius = 0.8662125f, height = 3.47f)
|
||||
|
||||
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_a.Damageable = false
|
||||
crystals_health_a.Repairable = false
|
||||
|
||||
crystals_health_b.Name = "crystals_health_b"
|
||||
crystals_health_b.Interval = 500
|
||||
crystals_health_b.HealAmount = 4
|
||||
crystals_health_b.UseRadius = 5
|
||||
crystals_health_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.HealthCrystal
|
||||
crystals_health_b.Damageable = false
|
||||
crystals_health_b.Repairable = false
|
||||
|
||||
crystals_repair_a.Name = "crystals_repair_a"
|
||||
crystals_repair_a.Interval = 500
|
||||
crystals_repair_a.ArmorAmount = 4
|
||||
crystals_repair_a.UseRadius = 5
|
||||
crystals_repair_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.RepairCrystal
|
||||
crystals_repair_a.Damageable = false
|
||||
crystals_repair_a.Repairable = false
|
||||
|
||||
crystals_repair_b.Name = "crystals_repair_b"
|
||||
crystals_repair_b.Interval = 500
|
||||
crystals_repair_b.ArmorAmount = 4
|
||||
crystals_repair_b.UseRadius = 5
|
||||
crystals_repair_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.RepairCrystal
|
||||
crystals_repair_b.Damageable = false
|
||||
crystals_repair_b.Repairable = false
|
||||
|
||||
crystals_vehicle_a.Name = "crystals_vehicle_a"
|
||||
crystals_vehicle_a.Interval = 1000
|
||||
crystals_vehicle_a.HealAmount = 60
|
||||
crystals_vehicle_a.UseRadius = 15
|
||||
crystals_vehicle_a.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.VehicleCrystal
|
||||
crystals_vehicle_a.Damageable = false
|
||||
crystals_vehicle_a.Repairable = false
|
||||
|
||||
crystals_vehicle_b.Name = "crystals_vehicle_b"
|
||||
crystals_vehicle_b.Interval = 1000
|
||||
crystals_vehicle_b.HealAmount = 60
|
||||
crystals_vehicle_b.UseRadius = 15
|
||||
crystals_vehicle_b.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.VehicleCrystal
|
||||
crystals_vehicle_b.Damageable = false
|
||||
crystals_vehicle_b.Repairable = false
|
||||
|
||||
crystals_energy_a.Name = "crystals_energy_a"
|
||||
crystals_energy_a.Interval = 1000
|
||||
crystals_energy_a.UseRadius = 5
|
||||
crystals_energy_a.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge
|
||||
crystals_energy_a.Damageable = false
|
||||
crystals_energy_a.Repairable = false
|
||||
|
||||
crystals_energy_b.Name = "crystals_energy_b"
|
||||
crystals_energy_b.Interval = 1000
|
||||
crystals_energy_b.UseRadius = 5
|
||||
crystals_energy_b.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge
|
||||
crystals_energy_b.Damageable = false
|
||||
crystals_energy_b.Repairable = false
|
||||
|
||||
crystals_energy.Name = "crystals_energy"
|
||||
crystals_energy.Interval = 1000
|
||||
crystals_energy.UseRadius = 5
|
||||
crystals_energy.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge
|
||||
crystals_energy.Damageable = false
|
||||
crystals_energy.Repairable = false
|
||||
|
||||
portable_med_terminal.Name = "portable_med_terminal"
|
||||
portable_med_terminal.Interval = 500
|
||||
portable_med_terminal.HealAmount = 5
|
||||
portable_med_terminal.ArmorAmount = 10
|
||||
portable_med_terminal.UseRadius = 3
|
||||
portable_med_terminal.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.Medical
|
||||
portable_med_terminal.MaxHealth = 500
|
||||
portable_med_terminal.Damageable = false //TODO actually true
|
||||
portable_med_terminal.Repairable = false
|
||||
portable_med_terminal.autoRepair = AutoRepairStats(2.24215f, 5000, 3500, 0.05f)
|
||||
|
||||
pad_landing_frame.Name = "pad_landing_frame"
|
||||
pad_landing_frame.Interval = 1000
|
||||
pad_landing_frame.HealAmount = 60
|
||||
pad_landing_frame.UseRadius = 20
|
||||
pad_landing_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding
|
||||
pad_landing_frame.Damageable = false
|
||||
pad_landing_frame.Repairable = false
|
||||
|
||||
pad_landing_tower_frame.Name = "pad_landing_tower_frame"
|
||||
pad_landing_tower_frame.Interval = 1000
|
||||
pad_landing_tower_frame.HealAmount = 60
|
||||
pad_landing_tower_frame.UseRadius = 20
|
||||
pad_landing_tower_frame.TargetValidation += EffectTarget.Category.Aircraft -> EffectTarget.Validation.PadLanding
|
||||
pad_landing_tower_frame.Damageable = false
|
||||
pad_landing_tower_frame.Repairable = false
|
||||
|
||||
repair_silo.Name = "repair_silo"
|
||||
repair_silo.Interval = 1000
|
||||
repair_silo.HealAmount = 60
|
||||
repair_silo.UseRadius = 20
|
||||
repair_silo.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.RepairSilo
|
||||
repair_silo.Damageable = false
|
||||
repair_silo.Repairable = false
|
||||
|
||||
recharge_terminal.Name = "recharge_terminal"
|
||||
recharge_terminal.Interval = 1000
|
||||
recharge_terminal.UseRadius = 20
|
||||
recharge_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.AncientVehicleWeaponRecharge
|
||||
recharge_terminal.Damageable = false
|
||||
recharge_terminal.Repairable = false
|
||||
|
||||
recharge_terminal_weapon_module.Name = "recharge_terminal_weapon_module"
|
||||
recharge_terminal_weapon_module.Interval = 1000
|
||||
recharge_terminal_weapon_module.UseRadius = 300
|
||||
recharge_terminal_weapon_module.TargetValidation += EffectTarget.Category.Player -> EffectTarget.Validation.AncientWeaponRecharge
|
||||
recharge_terminal_weapon_module.Damageable = false
|
||||
recharge_terminal_weapon_module.Repairable = false
|
||||
|
||||
mb_pad_creation.Name = "mb_pad_creation"
|
||||
mb_pad_creation.Damageable = false
|
||||
mb_pad_creation.Repairable = false
|
||||
mb_pad_creation.VehicleCreationZOffset = 2.52604f
|
||||
mb_pad_creation.killBox = VehicleSpawnPadDefinition.prepareKillBox(
|
||||
forwardLimit = 14,
|
||||
backLimit = 10,
|
||||
sideLimit = 7.5f,
|
||||
aboveLimit = 5 //double to 10 when spawning a flying vehicle
|
||||
)
|
||||
mb_pad_creation.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 99999
|
||||
DamageRadiusMin = 14
|
||||
DamageRadius = 14.5f
|
||||
DamageAtEdge = 0.00002f
|
||||
//damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m
|
||||
}
|
||||
|
||||
dropship_pad_doors.Name = "dropship_pad_doors"
|
||||
dropship_pad_doors.Damageable = false
|
||||
dropship_pad_doors.Repairable = false
|
||||
dropship_pad_doors.VehicleCreationZOffset = 4.89507f
|
||||
dropship_pad_doors.VehicleCreationZOrientOffset = -90f
|
||||
dropship_pad_doors.killBox = VehicleSpawnPadDefinition.prepareKillBox(
|
||||
forwardLimit = 14,
|
||||
backLimit = 14,
|
||||
sideLimit = 13.5f,
|
||||
aboveLimit = 5 //doubles to 10
|
||||
)
|
||||
dropship_pad_doors.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 99999
|
||||
DamageRadiusMin = 14
|
||||
DamageRadius = 14.5f
|
||||
DamageAtEdge = 0.00002f
|
||||
//damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m
|
||||
}
|
||||
|
||||
vanu_vehicle_creation_pad.Name = "vanu_vehicle_creation_pad"
|
||||
vanu_vehicle_creation_pad.Damageable = false
|
||||
vanu_vehicle_creation_pad.Repairable = false
|
||||
vanu_vehicle_creation_pad.killBox = VehicleSpawnPadDefinition.prepareVanuKillBox(
|
||||
radius = 8.5f,
|
||||
aboveLimit = 5
|
||||
)
|
||||
vanu_vehicle_creation_pad.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 99999
|
||||
DamageRadiusMin = 14
|
||||
DamageRadius = 14.5f
|
||||
DamageAtEdge = 0.00002f
|
||||
//damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m
|
||||
}
|
||||
|
||||
bfr_door.Name = "bfr_door"
|
||||
bfr_door.Damageable = false
|
||||
bfr_door.Repairable = false
|
||||
//bfr_door.VehicleCreationZOffset = -4.5f
|
||||
bfr_door.VehicleCreationZOrientOffset = 0f //90f
|
||||
bfr_door.killBox = VehicleSpawnPadDefinition.prepareBfrShedKillBox(
|
||||
radius = 10f,
|
||||
aboveLimit = 10f
|
||||
)
|
||||
bfr_door.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 99999
|
||||
DamageRadiusMin = 14 //TODO fix this
|
||||
DamageRadius = 14.5f //TODO fix this
|
||||
DamageAtEdge = 0.00002f
|
||||
//damage is 99999 at 14m, dropping rapidly to ~1 at 14.5m
|
||||
}
|
||||
|
||||
pad_create.Name = "pad_create"
|
||||
pad_create.Damageable = false
|
||||
pad_create.Repairable = false
|
||||
//pad_create.killBox = ...
|
||||
//pad_create.innateDamage = ...
|
||||
|
||||
pad_creation.Name = "pad_creation"
|
||||
pad_creation.Damageable = false
|
||||
pad_creation.Repairable = false
|
||||
pad_creation.VehicleCreationZOffset = 1.70982f
|
||||
//pad_creation.killBox = ...
|
||||
//pad_creation.innateDamage = ...
|
||||
|
||||
spawnpoint_vehicle.Name = "spawnpoint_vehicle"
|
||||
spawnpoint_vehicle.Damageable = false
|
||||
spawnpoint_vehicle.Repairable = false
|
||||
//spawnpoint_vehicle.killBox = ...
|
||||
//spawnpoint_vehicle.innateDamage = ...
|
||||
|
||||
mb_locker.Name = "mb_locker"
|
||||
mb_locker.Damageable = false
|
||||
mb_locker.Repairable = false
|
||||
|
||||
lock_external.Name = "lock_external"
|
||||
lock_external.Damageable = false
|
||||
lock_external.Repairable = false
|
||||
|
||||
door.Name = "door"
|
||||
door.Damageable = false
|
||||
door.Repairable = false
|
||||
|
||||
door_spawn_mb.Name = "door_spawn_mb"
|
||||
door_spawn_mb.Damageable = true
|
||||
door_spawn_mb.Repairable = false
|
||||
|
||||
gr_door_mb_orb.Name = "gr_door_mb_orb"
|
||||
gr_door_mb_orb.Damageable = false
|
||||
gr_door_mb_orb.Repairable = false
|
||||
|
||||
spawn_tube_door.Name = "spawn_tube_door"
|
||||
spawn_tube_door.Damageable = true
|
||||
spawn_tube_door.Repairable = false
|
||||
|
||||
resource_silo.Name = "resource_silo"
|
||||
resource_silo.Damageable = false
|
||||
resource_silo.Repairable = false
|
||||
resource_silo.MaxNtuCapacitor = 1000
|
||||
resource_silo.ChargeTime = 105.seconds //from 0-100% in roughly 105s on live (~20%-100% https://youtu.be/veOWToR2nSk?t=1402)
|
||||
|
||||
capture_terminal.Name = "capture_terminal"
|
||||
capture_terminal.Damageable = false
|
||||
capture_terminal.Repairable = false
|
||||
capture_terminal.FacilityHackTime = 15.minutes
|
||||
|
||||
secondary_capture.Name = "secondary_capture"
|
||||
secondary_capture.Damageable = false
|
||||
secondary_capture.Repairable = false
|
||||
secondary_capture.FacilityHackTime = 1.millisecond
|
||||
|
||||
vanu_control_console.Name = "vanu_control_console"
|
||||
vanu_control_console.Damageable = false
|
||||
vanu_control_console.Repairable = false
|
||||
vanu_control_console.FacilityHackTime = 10.minutes
|
||||
|
||||
lodestar_repair_terminal.Name = "lodestar_repair_terminal"
|
||||
lodestar_repair_terminal.Interval = 1000
|
||||
lodestar_repair_terminal.HealAmount = 60
|
||||
lodestar_repair_terminal.UseRadius = 40
|
||||
lodestar_repair_terminal.TargetValidation += EffectTarget.Category.Vehicle -> EffectTarget.Validation.LodestarRepair
|
||||
lodestar_repair_terminal.Damageable = false
|
||||
lodestar_repair_terminal.Repairable = false
|
||||
|
||||
multivehicle_rearm_terminal.Name = "multivehicle_rearm_terminal"
|
||||
multivehicle_rearm_terminal.Tab += 3 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.vehicleAmmunition
|
||||
)
|
||||
multivehicle_rearm_terminal.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
multivehicle_rearm_terminal.SellEquipmentByDefault = true //TODO ?
|
||||
multivehicle_rearm_terminal.Damageable = false
|
||||
multivehicle_rearm_terminal.Repairable = false
|
||||
|
||||
bfr_rearm_terminal.Name = "bfr_rearm_terminal"
|
||||
bfr_rearm_terminal.Tab += 1 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrArmWeapons
|
||||
)
|
||||
bfr_rearm_terminal.Tab += 2 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.bfrAmmunition ++ EquipmentTerminalDefinition.bfrGunnerWeapons
|
||||
)
|
||||
bfr_rearm_terminal.Tab += 3 -> {
|
||||
val tab = VehicleLoadoutPage(15)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
bfr_rearm_terminal.SellEquipmentByDefault = true //TODO ?
|
||||
bfr_rearm_terminal.Damageable = false
|
||||
bfr_rearm_terminal.Repairable = false
|
||||
|
||||
air_rearm_terminal.Name = "air_rearm_terminal"
|
||||
air_rearm_terminal.Tab += 3 -> EquipmentPage(EquipmentTerminalDefinition.vehicleAmmunition)
|
||||
air_rearm_terminal.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
air_rearm_terminal.SellEquipmentByDefault = true //TODO ?
|
||||
air_rearm_terminal.Damageable = false
|
||||
air_rearm_terminal.Repairable = false
|
||||
|
||||
ground_rearm_terminal.Name = "ground_rearm_terminal"
|
||||
ground_rearm_terminal.Tab += 3 -> EquipmentPage(
|
||||
EquipmentTerminalDefinition.vehicleAmmunition
|
||||
)
|
||||
ground_rearm_terminal.Tab += 4 -> {
|
||||
val tab = VehicleLoadoutPage(10)
|
||||
tab.Exclude = List(CavernEquipmentQuestion)
|
||||
tab
|
||||
}
|
||||
ground_rearm_terminal.SellEquipmentByDefault = true //TODO ?
|
||||
ground_rearm_terminal.Damageable = false
|
||||
ground_rearm_terminal.Repairable = false
|
||||
|
||||
manned_turret.Name = "manned_turret"
|
||||
manned_turret.MaxHealth = 3600
|
||||
manned_turret.Damageable = true
|
||||
manned_turret.DamageDisablesAt = 1800
|
||||
manned_turret.Repairable = true
|
||||
manned_turret.autoRepair = AutoRepairStats(1.0909f, 10000, 1600, 0.05f)
|
||||
manned_turret.RepairIfDestroyed = true
|
||||
manned_turret.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
manned_turret.WeaponPaths(1) += TurretUpgrade.None -> phalanx_sgl_hevgatcan
|
||||
manned_turret.WeaponPaths(1) += TurretUpgrade.AVCombo -> phalanx_avcombo
|
||||
manned_turret.WeaponPaths(1) += TurretUpgrade.FlakCombo -> phalanx_flakcombo
|
||||
manned_turret.Seats += 0 -> new SeatDefinition()
|
||||
manned_turret.controlledWeapons(seat = 0, weapon = 1)
|
||||
manned_turret.MountPoints += 1 -> MountInfo(0)
|
||||
manned_turret.FactionLocked = true
|
||||
manned_turret.ReserveAmmunition = false
|
||||
manned_turret.RadiationShielding = 0.5f
|
||||
manned_turret.AutoFire = Automation(
|
||||
AutoRanges(
|
||||
detection = 125f,
|
||||
trigger = 100f,
|
||||
escape = 200f
|
||||
),
|
||||
AutoChecks(
|
||||
validation = List(
|
||||
EffectTarget.Validation.FacilityTurretValidateMaxTarget,
|
||||
EffectTarget.Validation.FacilityTurretValidateGroundVehicleTarget,
|
||||
EffectTarget.Validation.FacilityTurretValidateAircraftTarget,
|
||||
EffectTarget.Validation.AutoTurretValidateMountableEntityTarget
|
||||
)
|
||||
),
|
||||
retaliatoryDelay = 4000L, //8000L
|
||||
cylindrical = true,
|
||||
cylindricalExtraHeight = 50f,
|
||||
detectionSweepTime = 2.seconds,
|
||||
refireTime = 362.milliseconds //312.milliseconds
|
||||
)
|
||||
manned_turret.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 150
|
||||
Damage1 = 300
|
||||
DamageRadius = 5
|
||||
DamageAtEdge = 0.1f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
}
|
||||
manned_turret.Geometry = GeometryForm.representByCylinder(radius = 1.2695f, height = 4.042f)
|
||||
|
||||
vanu_sentry_turret.Name = "vanu_sentry_turret"
|
||||
vanu_sentry_turret.MaxHealth = 1500
|
||||
vanu_sentry_turret.Damageable = true
|
||||
vanu_sentry_turret.DamageDisablesAt = 0
|
||||
vanu_sentry_turret.Repairable = true
|
||||
vanu_sentry_turret.autoRepair = AutoRepairStats(3.27272f, 10000, 1000, 0.05f)
|
||||
vanu_sentry_turret.RepairIfDestroyed = true
|
||||
vanu_sentry_turret.WeaponPaths += 1 -> new mutable.HashMap()
|
||||
vanu_sentry_turret.WeaponPaths(1) += TurretUpgrade.None -> vanu_sentry_turret_weapon
|
||||
vanu_sentry_turret.Seats += 0 -> new SeatDefinition()
|
||||
vanu_sentry_turret.controlledWeapons(seat = 0, weapon = 1)
|
||||
vanu_sentry_turret.MountPoints += 1 -> MountInfo(0)
|
||||
vanu_sentry_turret.MountPoints += 2 -> MountInfo(0)
|
||||
vanu_sentry_turret.FactionLocked = false
|
||||
vanu_sentry_turret.ReserveAmmunition = false
|
||||
vanu_sentry_turret.Geometry = GeometryForm.representByCylinder(radius = 1.76311f, height = 3.984375f)
|
||||
|
||||
painbox.Name = "painbox"
|
||||
painbox.alwaysOn = false
|
||||
painbox.sphereOffset = Vector3(0, 0, -0.4f)
|
||||
painbox.Damageable = false
|
||||
painbox.Repairable = false
|
||||
painbox.innateDamage = new DamageWithPosition {
|
||||
Damage0 = 2
|
||||
DamageRadius = 0
|
||||
DamageToHealthOnly = true
|
||||
}
|
||||
|
||||
painbox_continuous.Name = "painbox_continuous"
|
||||
painbox_continuous.sphereOffset = Vector3(0, 0, -0.4f)
|
||||
painbox_continuous.Damageable = false
|
||||
painbox_continuous.Repairable = false
|
||||
painbox_continuous.innateDamage = new DamageWithPosition {
|
||||
Damage0 = 2
|
||||
DamageRadius = 0
|
||||
DamageToHealthOnly = true
|
||||
}
|
||||
|
||||
painbox_door_radius.Name = "painbox_door_radius"
|
||||
painbox_door_radius.alwaysOn = false
|
||||
painbox_door_radius.sphereOffset = Vector3(0, 0, -0.4f)
|
||||
painbox_door_radius.hasNearestDoorDependency = true
|
||||
painbox_door_radius.Damageable = false
|
||||
painbox_door_radius.Repairable = false
|
||||
painbox_door_radius.innateDamage = new DamageWithPosition {
|
||||
Damage0 = 2
|
||||
DamageRadius = 10f * 0.6928f
|
||||
DamageToHealthOnly = true
|
||||
}
|
||||
|
||||
painbox_door_radius_continuous.Name = "painbox_door_radius_continuous"
|
||||
painbox_door_radius_continuous.sphereOffset = Vector3(0, 0, -0.4f)
|
||||
painbox_door_radius_continuous.hasNearestDoorDependency = true
|
||||
painbox_door_radius_continuous.Damageable = false
|
||||
painbox_door_radius_continuous.Repairable = false
|
||||
painbox_door_radius_continuous.innateDamage = new DamageWithPosition {
|
||||
Damage0 = 2
|
||||
DamageRadius = 10f * 0.6928f
|
||||
DamageToHealthOnly = true
|
||||
}
|
||||
|
||||
painbox_radius.Name = "painbox_radius"
|
||||
painbox_radius.alwaysOn = false
|
||||
painbox_radius.sphereOffset = Vector3(0, 0, -0.4f)
|
||||
painbox_radius.Damageable = false
|
||||
painbox_radius.Repairable = false
|
||||
painbox_radius.innateDamage = new DamageWithPosition {
|
||||
Damage0 = 2
|
||||
DamageRadius = 10f * 0.6928f
|
||||
DamageToHealthOnly = true
|
||||
}
|
||||
|
||||
painbox_radius_continuous.Name = "painbox_radius_continuous"
|
||||
painbox_radius_continuous.Damageable = false
|
||||
painbox_radius_continuous.Repairable = false
|
||||
painbox_radius_continuous.innateDamage = new DamageWithPosition {
|
||||
Damage0 = 2
|
||||
DamageRadius = 8.55f
|
||||
DamageToHealthOnly = true
|
||||
}
|
||||
|
||||
gen_control.Name = "gen_control"
|
||||
gen_control.Damageable = false
|
||||
gen_control.Repairable = false
|
||||
|
||||
generator.Name = "generator"
|
||||
generator.MaxHealth = 4000
|
||||
generator.Damageable = true
|
||||
generator.DamageableByFriendlyFire = false
|
||||
generator.Repairable = true
|
||||
generator.autoRepair = AutoRepairStats(0.77775f, 5000, 875, 1)
|
||||
generator.RepairDistance = 13.5f
|
||||
generator.RepairIfDestroyed = true
|
||||
generator.Subtract.Damage1 = 9
|
||||
generator.innateDamage = new DamageWithPosition {
|
||||
CausesDamageType = DamageType.One
|
||||
Damage0 = 99999
|
||||
DamageRadiusMin = 15
|
||||
DamageRadius = 15.1f
|
||||
DamageAtEdge = 0.000011f
|
||||
Modifiers = ExplodingRadialDegrade
|
||||
//damage is 99999 at 15m, dropping rapidly to ~1 at 15.1m
|
||||
}
|
||||
generator.Geometry = GeometryForm.representByCylinder(radius = 1.2617f, height = 9.14063f)
|
||||
|
||||
obbasemesh.Name = "obbasemesh"
|
||||
obbasemesh.Descriptor = "orbital_shuttle_pad"
|
||||
obbasemesh.Damageable = false
|
||||
obbasemesh.Repairable = false
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package net.psforever.objects.serverobject.doors
|
||||
|
||||
import net.psforever.objects.geometry.GeometryForm
|
||||
import net.psforever.objects.serverobject.structures.AmenityDefinition
|
||||
|
||||
/**
|
||||
|
|
@ -14,4 +15,15 @@ class DoorDefinition(objectId: Int)
|
|||
var initialOpeningDistance: Float = 7.5f
|
||||
/** range within which the door must detect a target player to remain open */
|
||||
var continuousOpenDistance: Float = 5.05f
|
||||
|
||||
var geometryInteractionRadius: Option[Float] = None
|
||||
var geometryInteractionHeight: Option[Float] = None
|
||||
|
||||
Geometry = {
|
||||
(geometryInteractionRadius, geometryInteractionHeight) match {
|
||||
case (Some(r), Some(h)) => GeometryForm.representByCylinder(r, h)
|
||||
case (Some(r), None) => GeometryForm.representBySphereOnBase(r)
|
||||
case _ => super.Geometry
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
// Copyright (c) 2020-2024 PSForever
|
||||
package net.psforever.objects.serverobject.environment
|
||||
|
||||
import enumeratum.{Enum, EnumEntry}
|
||||
import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle}
|
||||
import net.psforever.objects.vital.Vitality
|
||||
import net.psforever.types.Vector3
|
||||
|
||||
/**
|
||||
* A general description of environment and its interactive possibilities.
|
||||
*/
|
||||
sealed abstract class EnvironmentTrait extends EnumEntry {
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean
|
||||
}
|
||||
|
||||
object EnvironmentAttribute extends Enum[EnvironmentTrait] {
|
||||
/** glue connecting `EnumEntry` to `Enumeration` */
|
||||
val values: IndexedSeq[EnvironmentTrait] = findValues
|
||||
|
||||
case object Water extends EnvironmentTrait {
|
||||
/** water can only interact with objects that are negatively affected by being exposed to water;
|
||||
* it's better this way */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj.Definition.DrownAtMaxDepth || obj.Definition.DisableAtMaxDepth || (obj match {
|
||||
case p: Player => p.VehicleSeated.isEmpty
|
||||
case v: Vehicle => v.MountedIn.isEmpty
|
||||
case _ => true
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case object Lava extends EnvironmentTrait {
|
||||
/** lava can only interact with anything capable of registering damage */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case o: Vitality => o.Definition.Damageable
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object Death extends EnvironmentTrait {
|
||||
/** death can only interact with anything capable of registering damage */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case o: Vitality => o.Definition.Damageable
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object GantryDenialField
|
||||
extends EnvironmentTrait {
|
||||
/** only interact with living player characters */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case p: Player => p.isAlive
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object MovementFieldTrigger
|
||||
extends EnvironmentTrait {
|
||||
/** only interact with living player characters or vehicles */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case p: Player => p.isAlive && p.Position != Vector3.Zero
|
||||
case v: Vehicle => !v.Destroyed && v.Position != Vector3.Zero
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,7 @@
|
|||
// Copyright (c) 2020 PSForever
|
||||
package net.psforever.objects.serverobject.environment
|
||||
|
||||
import enumeratum.{Enum, EnumEntry}
|
||||
import net.psforever.objects.{PlanetSideGameObject, Player, Vehicle}
|
||||
import net.psforever.objects.vital.Vitality
|
||||
import net.psforever.objects.PlanetSideGameObject
|
||||
import net.psforever.objects.zones.blockmap.BlockMapEntity
|
||||
import net.psforever.types.{PlanetSideGUID, Vector3}
|
||||
|
||||
|
|
@ -52,69 +50,24 @@ trait PieceOfEnvironment
|
|||
def Velocity_=(vec: Option[Vector3]): Option[Vector3] = None
|
||||
}
|
||||
|
||||
/**
|
||||
* A general description of environment and its interactive possibilities.
|
||||
*/
|
||||
sealed abstract class EnvironmentTrait extends EnumEntry {
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean
|
||||
}
|
||||
|
||||
object EnvironmentAttribute extends Enum[EnvironmentTrait] {
|
||||
/** glue connecting `EnumEntry` to `Enumeration` */
|
||||
val values: IndexedSeq[EnvironmentTrait] = findValues
|
||||
|
||||
case object Water extends EnvironmentTrait {
|
||||
/** water can only interact with objects that are negatively affected by being exposed to water;
|
||||
* it's better this way */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj.Definition.DrownAtMaxDepth || obj.Definition.DisableAtMaxDepth || (obj match {
|
||||
case p: Player => p.VehicleSeated.isEmpty
|
||||
case v: Vehicle => v.MountedIn.isEmpty
|
||||
case _ => true
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case object Lava extends EnvironmentTrait {
|
||||
/** lava can only interact with anything capable of registering damage */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case o: Vitality => o.Definition.Damageable
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object Death extends EnvironmentTrait {
|
||||
/** death can only interact with anything capable of registering damage */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case o: Vitality => o.Definition.Damageable
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object GantryDenialField
|
||||
extends EnvironmentTrait {
|
||||
/** only interact with living player characters */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case p: Player => p.isAlive
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case object MovementFieldTrigger
|
||||
extends EnvironmentTrait {
|
||||
/** only interact with living player characters or vehicles */
|
||||
def canInteractWith(obj: PlanetSideGameObject): Boolean = {
|
||||
obj match {
|
||||
case p: Player => p.isAlive && p.Position != Vector3.Zero
|
||||
case v: Vehicle => !v.Destroyed && v.Position != Vector3.Zero
|
||||
case _ => false
|
||||
}
|
||||
object PieceOfEnvironment {
|
||||
/**
|
||||
* Did the test point move into or leave the bounds of the represented environment since its previous test?
|
||||
* @param body the environment
|
||||
* @param pos the test point
|
||||
* @param previousPos the previous test point which is being compared against
|
||||
* @param varDepth how far "into" the environment the point must be
|
||||
* @return `Some(true)`, if the point has become sufficiently "deep";
|
||||
* `Some(false)`, if the point has left the sufficiently "deep" region;
|
||||
* `None`, if the described points only exist outside of or only exists inside of the critical region
|
||||
*/
|
||||
def testStepIntoInteraction(body: PieceOfEnvironment, pos: Vector3, previousPos: Vector3, varDepth: Float): Option[Boolean] = {
|
||||
val isEncroaching = body.collision.testInteraction(pos, varDepth)
|
||||
val wasEncroaching = body.collision.testInteraction(previousPos, varDepth)
|
||||
if (isEncroaching != wasEncroaching) {
|
||||
Some(isEncroaching)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -171,34 +124,12 @@ final case class GantryDenialField(
|
|||
mountPoint: Int,
|
||||
collision: EnvironmentCollision
|
||||
) extends PieceOfEnvironment {
|
||||
def attribute = EnvironmentAttribute.GantryDenialField
|
||||
def attribute: EnvironmentTrait = EnvironmentAttribute.GantryDenialField
|
||||
}
|
||||
|
||||
final case class GeneralMovementField(
|
||||
triggerAction: PlanetSideGameObject => Unit,
|
||||
collision: EnvironmentCollision
|
||||
) extends PieceOfEnvironment {
|
||||
def attribute = EnvironmentAttribute.MovementFieldTrigger
|
||||
}
|
||||
|
||||
object PieceOfEnvironment {
|
||||
/**
|
||||
* Did the test point move into or leave the bounds of the represented environment since its previous test?
|
||||
* @param body the environment
|
||||
* @param pos the test point
|
||||
* @param previousPos the previous test point which is being compared against
|
||||
* @param varDepth how far "into" the environment the point must be
|
||||
* @return `Some(true)`, if the point has become sufficiently "deep";
|
||||
* `Some(false)`, if the point has left the sufficiently "deep" region;
|
||||
* `None`, if the described points only exist outside of or only exists inside of the critical region
|
||||
*/
|
||||
def testStepIntoInteraction(body: PieceOfEnvironment, pos: Vector3, previousPos: Vector3, varDepth: Float): Option[Boolean] = {
|
||||
val isEncroaching = body.collision.testInteraction(pos, varDepth)
|
||||
val wasEncroaching = body.collision.testInteraction(previousPos, varDepth)
|
||||
if (isEncroaching != wasEncroaching) {
|
||||
Some(isEncroaching)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
def attribute: EnvironmentTrait = EnvironmentAttribute.MovementFieldTrigger
|
||||
}
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ object PainboxControl {
|
|||
|| amenity.Definition == GlobalDefinitions.respawn_tube
|
||||
|| amenity.Definition == GlobalDefinitions.spawn_terminal
|
||||
|| amenity.Definition == GlobalDefinitions.order_terminal
|
||||
|| amenity.Definition == GlobalDefinitions.door)
|
||||
|| amenity.isInstanceOf[Door])
|
||||
&& amenity.Position.x > painbox.Position.x - planarRange && amenity.Position.x < painbox.Position.x + planarRange
|
||||
&& amenity.Position.y > painbox.Position.y - planarRange && amenity.Position.y < painbox.Position.y + planarRange
|
||||
&& amenity.Position.z > painbox.Position.z - belowRange && amenity.Position.z < painbox.Position.z + aboveRange
|
||||
|
|
|
|||
|
|
@ -177,23 +177,44 @@ object Zones {
|
|||
)
|
||||
|
||||
private val doorTypes = Seq(
|
||||
"gr_door_garage_int",
|
||||
"gr_door_int",
|
||||
"gr_door_med",
|
||||
"spawn_tube_door",
|
||||
"amp_cap_door",
|
||||
"ancient_door",
|
||||
"ancient_garage_door",
|
||||
"cryo_med_door",
|
||||
"cryo_room_door",
|
||||
"door",
|
||||
"door_airlock",
|
||||
"door_airlock_orb",
|
||||
"door_dsp",
|
||||
"door_garage",
|
||||
"door_interior",
|
||||
"door_mb",
|
||||
"door_mb_garage",
|
||||
"door_mb_main",
|
||||
"door_mb_orb",
|
||||
"door_mb_side",
|
||||
"door_nc_garage",
|
||||
"door_nc_rotating",
|
||||
"door_ncside",
|
||||
"door_orbspawn",
|
||||
"door_spawn_mb",
|
||||
"garage_door",
|
||||
"gr_door_airlock",
|
||||
"gr_door_ext",
|
||||
"gr_door_garage_ext",
|
||||
"gr_door_garage_int",
|
||||
"gr_door_int",
|
||||
"gr_door_main",
|
||||
"gr_door_mb_ext",
|
||||
"gr_door_mb_int",
|
||||
"gr_door_mb_lrg",
|
||||
"gr_door_mb_obsd",
|
||||
"gr_door_mb_orb",
|
||||
"door_spawn_mb",
|
||||
"ancient_door",
|
||||
"ancient_garage_door"
|
||||
"gr_door_med",
|
||||
"main_door",
|
||||
"shield_door",
|
||||
"spawn_tube_door",
|
||||
"spawn_tube_door_coffin"
|
||||
)
|
||||
|
||||
lazy val zoneMaps: Seq[ZoneMap] = {
|
||||
|
|
@ -384,14 +405,6 @@ object Zones {
|
|||
owningBuildingGuid = ownerGuid
|
||||
)
|
||||
|
||||
case "gr_door_mb_orb" =>
|
||||
zoneMap
|
||||
.addLocalObject(
|
||||
obj.guid,
|
||||
Door.Constructor(obj.position, GlobalDefinitions.gr_door_mb_orb),
|
||||
owningBuildingGuid = ownerGuid
|
||||
)
|
||||
|
||||
case doorType if doorType.equals("door_spawn_mb") || doorType.equals("spawn_tube_door") =>
|
||||
zoneMap.addLocalObject(
|
||||
obj.guid,
|
||||
|
|
@ -404,7 +417,14 @@ object Zones {
|
|||
|
||||
case objectType if doorTypes.contains(objectType) =>
|
||||
zoneMap
|
||||
.addLocalObject(obj.guid, Door.Constructor(obj.position), owningBuildingGuid = ownerGuid)
|
||||
.addLocalObject(
|
||||
obj.guid,
|
||||
Door.Constructor(
|
||||
obj.position,
|
||||
DefinitionUtil.fromString(objectType).asInstanceOf[DoorDefinition]
|
||||
),
|
||||
owningBuildingGuid = ownerGuid
|
||||
)
|
||||
|
||||
case "locker_cryo" | "locker_med" | "mb_locker" =>
|
||||
zoneMap
|
||||
|
|
@ -798,7 +818,7 @@ object Zones {
|
|||
}
|
||||
}
|
||||
|
||||
lazy val cavernLattice = {
|
||||
lazy val cavernLattice: Map[String, Iterable[Iterable[String]]] = {
|
||||
val res = Source.fromResource(s"zonemaps/lattice.json")
|
||||
val json = res.mkString
|
||||
res.close()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue