mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-02-12 19:31:04 +00:00
Vehicle jacking (#264)
* Jacking changes * GOAM documentation * Don't disable a deployed router's internal telepad when cleaning up remote telepads (i.e. when router is hacked) * Reduce some log spam
This commit is contained in:
parent
0730c0deb6
commit
2048fa19cb
8 changed files with 223 additions and 59 deletions
|
|
@ -4867,8 +4867,9 @@ object GlobalDefinitions {
|
|||
fury.TrunkOffset = 30
|
||||
fury.AutoPilotSpeeds = (24, 10)
|
||||
fury.DestroyedModel = Some(DestroyedVehicle.QuadAssault)
|
||||
fury.JackingDuration = Array(0, 10, 3, 2)
|
||||
|
||||
quadassault.Name = "quadassault"
|
||||
quadassault.Name = "quadassault" // Basilisk
|
||||
quadassault.MaxHealth = 650
|
||||
quadassault.MaxShields = 130 + 1
|
||||
quadassault.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -4881,8 +4882,9 @@ object GlobalDefinitions {
|
|||
quadassault.TrunkOffset = 30
|
||||
quadassault.AutoPilotSpeeds = (24, 10)
|
||||
quadassault.DestroyedModel = Some(DestroyedVehicle.QuadAssault)
|
||||
quadassault.JackingDuration = Array(0, 10, 3, 2)
|
||||
|
||||
quadstealth.Name = "quadstealth"
|
||||
quadstealth.Name = "quadstealth" // Wraith
|
||||
quadstealth.MaxHealth = 650
|
||||
quadstealth.MaxShields = 130 + 1
|
||||
quadstealth.CanCloak = true
|
||||
|
|
@ -4895,8 +4897,9 @@ object GlobalDefinitions {
|
|||
quadstealth.TrunkOffset = 30
|
||||
quadstealth.AutoPilotSpeeds = (24, 10)
|
||||
quadstealth.DestroyedModel = Some(DestroyedVehicle.QuadStealth)
|
||||
quadstealth.JackingDuration = Array(0, 10, 3, 2)
|
||||
|
||||
two_man_assault_buggy.Name = "two_man_assault_buggy"
|
||||
two_man_assault_buggy.Name = "two_man_assault_buggy" // Harasser
|
||||
two_man_assault_buggy.MaxHealth = 1250
|
||||
two_man_assault_buggy.MaxShields = 250 + 1
|
||||
two_man_assault_buggy.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -4911,6 +4914,7 @@ object GlobalDefinitions {
|
|||
two_man_assault_buggy.TrunkOffset = 30
|
||||
two_man_assault_buggy.AutoPilotSpeeds = (22, 8)
|
||||
two_man_assault_buggy.DestroyedModel = Some(DestroyedVehicle.TwoManAssaultBuggy)
|
||||
two_man_assault_buggy.JackingDuration = Array(0, 15, 5, 3)
|
||||
|
||||
skyguard.Name = "skyguard"
|
||||
skyguard.MaxHealth = 1000
|
||||
|
|
@ -4928,8 +4932,9 @@ object GlobalDefinitions {
|
|||
skyguard.TrunkOffset = 30
|
||||
skyguard.AutoPilotSpeeds = (22, 8)
|
||||
skyguard.DestroyedModel = Some(DestroyedVehicle.Skyguard)
|
||||
skyguard.JackingDuration = Array(0, 15, 5, 3)
|
||||
|
||||
threemanheavybuggy.Name = "threemanheavybuggy"
|
||||
threemanheavybuggy.Name = "threemanheavybuggy" // Marauder
|
||||
threemanheavybuggy.MaxHealth = 1700
|
||||
threemanheavybuggy.MaxShields = 340 + 1
|
||||
threemanheavybuggy.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -4950,8 +4955,9 @@ object GlobalDefinitions {
|
|||
threemanheavybuggy.AutoPilotSpeeds = (22, 8)
|
||||
threemanheavybuggy.DestroyedModel = Some(DestroyedVehicle.ThreeManHeavyBuggy)
|
||||
threemanheavybuggy.Subtract.Damage1 = 5
|
||||
threemanheavybuggy.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
twomanheavybuggy.Name = "twomanheavybuggy"
|
||||
twomanheavybuggy.Name = "twomanheavybuggy" // Enforcer
|
||||
twomanheavybuggy.MaxHealth = 1800
|
||||
twomanheavybuggy.MaxShields = 360 + 1
|
||||
twomanheavybuggy.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -4967,8 +4973,9 @@ object GlobalDefinitions {
|
|||
twomanheavybuggy.AutoPilotSpeeds = (22, 8)
|
||||
twomanheavybuggy.DestroyedModel = Some(DestroyedVehicle.TwoManHeavyBuggy)
|
||||
twomanheavybuggy.Subtract.Damage1 = 5
|
||||
twomanheavybuggy.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
twomanhoverbuggy.Name = "twomanhoverbuggy"
|
||||
twomanhoverbuggy.Name = "twomanhoverbuggy" // Thresher
|
||||
twomanhoverbuggy.MaxHealth = 1600
|
||||
twomanhoverbuggy.MaxShields = 320 + 1
|
||||
twomanhoverbuggy.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -4984,8 +4991,9 @@ object GlobalDefinitions {
|
|||
twomanhoverbuggy.AutoPilotSpeeds = (22, 10)
|
||||
twomanhoverbuggy.DestroyedModel = Some(DestroyedVehicle.TwoManHoverBuggy)
|
||||
twomanhoverbuggy.Subtract.Damage1 = 5
|
||||
twomanhoverbuggy.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
mediumtransport.Name = "mediumtransport"
|
||||
mediumtransport.Name = "mediumtransport" // Deliverer
|
||||
mediumtransport.MaxHealth = 2500
|
||||
mediumtransport.MaxShields = 500 + 1
|
||||
mediumtransport.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -5008,8 +5016,9 @@ object GlobalDefinitions {
|
|||
mediumtransport.AutoPilotSpeeds = (18, 6)
|
||||
mediumtransport.DestroyedModel = Some(DestroyedVehicle.MediumTransport)
|
||||
mediumtransport.Subtract.Damage1 = 7
|
||||
mediumtransport.JackingDuration = Array(0, 25, 8, 5)
|
||||
|
||||
battlewagon.Name = "battlewagon"
|
||||
battlewagon.Name = "battlewagon" // Raider
|
||||
battlewagon.MaxHealth = 2500
|
||||
battlewagon.MaxShields = 500 + 1
|
||||
battlewagon.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -5035,6 +5044,7 @@ object GlobalDefinitions {
|
|||
battlewagon.TrunkOffset = 30
|
||||
battlewagon.AutoPilotSpeeds = (18, 6)
|
||||
battlewagon.DestroyedModel = Some(DestroyedVehicle.MediumTransport)
|
||||
battlewagon.JackingDuration = Array(0, 25, 8, 5)
|
||||
|
||||
thunderer.Name = "thunderer"
|
||||
thunderer.MaxHealth = 2500
|
||||
|
|
@ -5059,6 +5069,7 @@ object GlobalDefinitions {
|
|||
thunderer.AutoPilotSpeeds = (18, 6)
|
||||
thunderer.DestroyedModel = Some(DestroyedVehicle.MediumTransport)
|
||||
thunderer.Subtract.Damage1 = 7
|
||||
thunderer.JackingDuration = Array(0, 25, 8, 5)
|
||||
|
||||
aurora.Name = "aurora"
|
||||
aurora.MaxHealth = 2500
|
||||
|
|
@ -5083,8 +5094,9 @@ object GlobalDefinitions {
|
|||
aurora.AutoPilotSpeeds = (18, 6)
|
||||
aurora.DestroyedModel = Some(DestroyedVehicle.MediumTransport)
|
||||
aurora.Subtract.Damage1 = 7
|
||||
aurora.JackingDuration = Array(0, 25, 8 ,5)
|
||||
|
||||
apc_tr.Name = "apc_tr"
|
||||
apc_tr.Name = "apc_tr" // Juggernaut
|
||||
apc_tr.MaxHealth = 6000
|
||||
apc_tr.MaxShields = 1200 + 1
|
||||
apc_tr.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -5129,8 +5141,9 @@ object GlobalDefinitions {
|
|||
apc_tr.TrunkOffset = 30
|
||||
apc_tr.AutoPilotSpeeds = (16, 6)
|
||||
apc_tr.DestroyedModel = Some(DestroyedVehicle.Apc)
|
||||
apc_tr.JackingDuration = Array(0, 45, 15, 10)
|
||||
|
||||
apc_nc.Name = "apc_nc"
|
||||
apc_nc.Name = "apc_nc" // Vindicator
|
||||
apc_nc.MaxHealth = 6000
|
||||
apc_nc.MaxShields = 1200 + 1
|
||||
apc_nc.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -5175,8 +5188,9 @@ object GlobalDefinitions {
|
|||
apc_nc.TrunkOffset = 30
|
||||
apc_nc.AutoPilotSpeeds = (16, 6)
|
||||
apc_nc.DestroyedModel = Some(DestroyedVehicle.Apc)
|
||||
apc_nc.JackingDuration = Array(0, 45, 15, 10)
|
||||
|
||||
apc_vs.Name = "apc_vs"
|
||||
apc_vs.Name = "apc_vs" // Leviathan
|
||||
apc_vs.MaxHealth = 6000
|
||||
apc_vs.MaxShields = 1200 + 1
|
||||
apc_vs.Seats += 0 -> new SeatDefinition()
|
||||
|
|
@ -5221,6 +5235,7 @@ object GlobalDefinitions {
|
|||
apc_vs.TrunkOffset = 30
|
||||
apc_vs.AutoPilotSpeeds = (16, 6)
|
||||
apc_vs.DestroyedModel = Some(DestroyedVehicle.Apc)
|
||||
apc_vs.JackingDuration = Array(0, 45, 15, 10)
|
||||
|
||||
lightning.Name = "lightning"
|
||||
lightning.MaxHealth = 2000
|
||||
|
|
@ -5236,6 +5251,7 @@ object GlobalDefinitions {
|
|||
lightning.AutoPilotSpeeds = (20, 8)
|
||||
lightning.DestroyedModel = Some(DestroyedVehicle.Lightning)
|
||||
lightning.Subtract.Damage1 = 7
|
||||
lightning.JackingDuration = Array(0, 20, 7 ,5)
|
||||
|
||||
prowler.Name = "prowler"
|
||||
prowler.MaxHealth = 4800
|
||||
|
|
@ -5256,6 +5272,7 @@ object GlobalDefinitions {
|
|||
prowler.AutoPilotSpeeds = (14, 6)
|
||||
prowler.DestroyedModel = Some(DestroyedVehicle.Prowler)
|
||||
prowler.Subtract.Damage1 = 9
|
||||
prowler.JackingDuration = Array(0, 30, 10, 5)
|
||||
|
||||
vanguard.Name = "vanguard"
|
||||
vanguard.MaxHealth = 5400
|
||||
|
|
@ -5272,6 +5289,7 @@ object GlobalDefinitions {
|
|||
vanguard.AutoPilotSpeeds = (16, 6)
|
||||
vanguard.DestroyedModel = Some(DestroyedVehicle.Vanguard)
|
||||
vanguard.Subtract.Damage1 = 9
|
||||
vanguard.JackingDuration = Array(0, 30, 10, 5)
|
||||
|
||||
magrider.Name = "magrider"
|
||||
magrider.MaxHealth = 4200
|
||||
|
|
@ -5290,6 +5308,7 @@ object GlobalDefinitions {
|
|||
magrider.AutoPilotSpeeds = (18, 6)
|
||||
magrider.DestroyedModel = Some(DestroyedVehicle.Magrider)
|
||||
magrider.Subtract.Damage1 = 9
|
||||
magrider.JackingDuration = Array(0, 30, 10, 5)
|
||||
|
||||
val utilityConverter = new UtilityVehicleConverter
|
||||
ant.Name = "ant"
|
||||
|
|
@ -5307,6 +5326,7 @@ object GlobalDefinitions {
|
|||
ant.Packet = utilityConverter
|
||||
ant.DestroyedModel = Some(DestroyedVehicle.Ant)
|
||||
ant.Subtract.Damage1 = 5
|
||||
ant.JackingDuration = Array (0, 60, 20, 15)
|
||||
|
||||
ams.Name = "ams"
|
||||
ams.MaxHealth = 3000
|
||||
|
|
@ -5327,6 +5347,7 @@ object GlobalDefinitions {
|
|||
ams.Packet = utilityConverter
|
||||
ams.DestroyedModel = Some(DestroyedVehicle.Ams)
|
||||
ams.Subtract.Damage1 = 10
|
||||
ams.JackingDuration = Array(0, 60, 20, 15)
|
||||
|
||||
val variantConverter = new VariantVehicleConverter
|
||||
router.Name = "router"
|
||||
|
|
@ -5346,6 +5367,7 @@ object GlobalDefinitions {
|
|||
router.Packet = variantConverter
|
||||
router.DestroyedModel = Some(DestroyedVehicle.Router)
|
||||
router.Subtract.Damage1 = 5
|
||||
router.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
switchblade.Name = "switchblade"
|
||||
switchblade.MaxHealth = 1750
|
||||
|
|
@ -5365,6 +5387,7 @@ object GlobalDefinitions {
|
|||
switchblade.DestroyedModel = Some(DestroyedVehicle.Switchblade)
|
||||
switchblade.Subtract.Damage0 = 5
|
||||
switchblade.Subtract.Damage1 = 5
|
||||
switchblade.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
flail.Name = "flail"
|
||||
flail.MaxHealth = 2400
|
||||
|
|
@ -5382,6 +5405,7 @@ object GlobalDefinitions {
|
|||
flail.Packet = variantConverter
|
||||
flail.DestroyedModel = Some(DestroyedVehicle.Flail)
|
||||
flail.Subtract.Damage1 = 7
|
||||
flail.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
mosquito.Name = "mosquito"
|
||||
mosquito.MaxHealth = 665
|
||||
|
|
@ -5398,8 +5422,9 @@ object GlobalDefinitions {
|
|||
mosquito.AutoPilotSpeeds = (0, 6)
|
||||
mosquito.Packet = variantConverter
|
||||
mosquito.DestroyedModel = Some(DestroyedVehicle.Mosquito)
|
||||
mosquito.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
lightgunship.Name = "lightgunship"
|
||||
lightgunship.Name = "lightgunship" // Reaver
|
||||
lightgunship.MaxHealth = 1000
|
||||
lightgunship.MaxShields = 200 + 1
|
||||
lightgunship.CanFly = true
|
||||
|
|
@ -5415,6 +5440,7 @@ object GlobalDefinitions {
|
|||
lightgunship.Packet = variantConverter
|
||||
lightgunship.DestroyedModel = Some(DestroyedVehicle.LightGunship)
|
||||
lightgunship.Subtract.Damage1 = 3
|
||||
lightgunship.JackingDuration = Array(0, 30, 10, 5)
|
||||
|
||||
wasp.Name = "wasp"
|
||||
wasp.MaxHealth = 515
|
||||
|
|
@ -5431,6 +5457,7 @@ object GlobalDefinitions {
|
|||
wasp.AutoPilotSpeeds = (0, 6)
|
||||
wasp.Packet = variantConverter
|
||||
wasp.DestroyedModel = Some(DestroyedVehicle.Mosquito) //set_resource_parent wasp game_objects mosquito
|
||||
wasp.JackingDuration = Array(0, 20, 7, 5)
|
||||
|
||||
liberator.Name = "liberator"
|
||||
liberator.MaxHealth = 2500
|
||||
|
|
@ -5455,6 +5482,7 @@ object GlobalDefinitions {
|
|||
liberator.Packet = variantConverter
|
||||
liberator.DestroyedModel = Some(DestroyedVehicle.Liberator)
|
||||
liberator.Subtract.Damage1 = 5
|
||||
liberator.JackingDuration = Array(0, 30, 10, 5)
|
||||
|
||||
vulture.Name = "vulture"
|
||||
vulture.MaxHealth = 2500
|
||||
|
|
@ -5479,8 +5507,9 @@ object GlobalDefinitions {
|
|||
vulture.Packet = variantConverter
|
||||
vulture.DestroyedModel = Some(DestroyedVehicle.Liberator) //add_property vulture destroyedphysics liberator_destroyed
|
||||
vulture.Subtract.Damage1 = 5
|
||||
vulture.JackingDuration = Array(0, 30, 10, 5)
|
||||
|
||||
dropship.Name = "dropship"
|
||||
dropship.Name = "dropship" // Galaxy
|
||||
dropship.MaxHealth = 5000
|
||||
dropship.MaxShields = 1000 + 1
|
||||
dropship.CanFly = true
|
||||
|
|
@ -5535,6 +5564,7 @@ object GlobalDefinitions {
|
|||
dropship.Packet = variantConverter
|
||||
dropship.DestroyedModel = Some(DestroyedVehicle.Dropship)
|
||||
dropship.Subtract.Damage1 = 7
|
||||
dropship.JackingDuration = Array(0, 60, 20, 10)
|
||||
|
||||
galaxy_gunship.Name = "galaxy_gunship"
|
||||
galaxy_gunship.MaxHealth = 6000
|
||||
|
|
@ -5568,6 +5598,7 @@ object GlobalDefinitions {
|
|||
galaxy_gunship.Packet = variantConverter
|
||||
galaxy_gunship.DestroyedModel = Some(DestroyedVehicle.Dropship) //the adb calls out a galaxy_gunship_destroyed but no such asset exists
|
||||
galaxy_gunship.Subtract.Damage1 = 7
|
||||
galaxy_gunship.JackingDuration = Array(0, 60, 20, 10)
|
||||
|
||||
lodestar.Name = "lodestar"
|
||||
lodestar.MaxHealth = 5000
|
||||
|
|
@ -5591,6 +5622,7 @@ object GlobalDefinitions {
|
|||
lodestar.Packet = variantConverter
|
||||
lodestar.DestroyedModel = Some(DestroyedVehicle.Lodestar)
|
||||
lodestar.Subtract.Damage1 = 7
|
||||
lodestar.JackingDuration = Array(0, 60, 20, 10)
|
||||
|
||||
phantasm.Name = "phantasm"
|
||||
phantasm.MaxHealth = 2500
|
||||
|
|
@ -5616,6 +5648,7 @@ object GlobalDefinitions {
|
|||
phantasm.AutoPilotSpeeds = (0, 6)
|
||||
phantasm.Packet = variantConverter
|
||||
phantasm.DestroyedModel = None //the adb calls out a phantasm_destroyed but no such asset exists
|
||||
phantasm.JackingDuration = Array(0, 60, 20, 10)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -123,6 +123,9 @@ class Vehicle(private val vehicleDef : VehicleDefinition) extends PlanetSideServ
|
|||
faction
|
||||
}
|
||||
|
||||
/** How long it takes to jack the vehicle in seconds, based on the hacker's certification level */
|
||||
def JackingDuration: Array[Int] = Definition.JackingDuration
|
||||
|
||||
def MountedIn : Option[PlanetSideGUID] = {
|
||||
this.mountedIn
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,6 +160,13 @@ class VehicleDefinition(objectId : Int) extends ObjectDefinition(objectId)
|
|||
MaximumCapacitor
|
||||
}
|
||||
|
||||
private var jackDuration = Array(0, 0, 0, 0)
|
||||
def JackingDuration: Array[Int] = jackDuration
|
||||
def JackingDuration_=(arr: Array[Int]) : Array[Int] = {
|
||||
jackDuration = arr
|
||||
arr
|
||||
}
|
||||
|
||||
def DestroyedModel : Option[DestroyedVehicle.Value] = destroyedModel
|
||||
|
||||
def DestroyedModel_=(model : Option[DestroyedVehicle.Value]) : Option[DestroyedVehicle.Value] = {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class ResourceSiloControl(resourceSilo : ResourceSilo) extends Actor with Factio
|
|||
|
||||
case ServiceManager.LookupResult("avatar", endpoint) =>
|
||||
avatarService = endpoint
|
||||
log.info("ResourceSiloControl: Silo " + resourceSilo.GUID + " Got avatar service " + endpoint)
|
||||
log.trace("ResourceSiloControl: Silo " + resourceSilo.GUID + " Got avatar service " + endpoint)
|
||||
|
||||
// todo: This is just a temporary solution to drain NTU over time. When base object destruction is properly implemented NTU should be deducted when base objects repair themselves
|
||||
context.system.scheduler.schedule(5 second, 5 second, self, ResourceSilo.UpdateChargeLevel(-1))
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class BuildingControl(building : Building) extends Actor with FactionAffinityBeh
|
|||
private[this] val log = org.log4s.getLogger
|
||||
|
||||
override def preStart = {
|
||||
log.info(s"Starting BuildingControl for ${building.GUID} / ${building.MapId}")
|
||||
log.trace(s"Starting BuildingControl for ${building.GUID} / ${building.MapId}")
|
||||
ServiceManager.serviceManager ! Lookup("galaxy")
|
||||
ServiceManager.serviceManager ! Lookup("local")
|
||||
}
|
||||
|
|
@ -23,10 +23,10 @@ class BuildingControl(building : Building) extends Actor with FactionAffinityBeh
|
|||
def receive : Receive = checkBehavior.orElse {
|
||||
case ServiceManager.LookupResult("galaxy", endpoint) =>
|
||||
galaxyService = endpoint
|
||||
log.info("BuildingControl: Building " + building.GUID + " Got galaxy service " + endpoint)
|
||||
log.trace("BuildingControl: Building " + building.GUID + " Got galaxy service " + endpoint)
|
||||
case ServiceManager.LookupResult("local", endpoint) =>
|
||||
localService = endpoint
|
||||
log.info("BuildingControl: Building " + building.GUID + " Got local service " + endpoint)
|
||||
log.trace("BuildingControl: Building " + building.GUID + " Got local service " + endpoint)
|
||||
case FactionAffinity.ConvertFactionAffinity(faction) =>
|
||||
val originalAffinity = building.Faction
|
||||
if(originalAffinity != (building.Faction = faction)) {
|
||||
|
|
@ -37,7 +37,7 @@ class BuildingControl(building : Building) extends Actor with FactionAffinityBeh
|
|||
case Building.SendMapUpdate(all_clients: Boolean) =>
|
||||
val zoneNumber = building.Zone.Number
|
||||
val buildingNumber = building.MapId
|
||||
log.info(s"sending BuildingInfoUpdateMessage update - zone=$zoneNumber, building=$buildingNumber")
|
||||
log.trace(s"sending BuildingInfoUpdateMessage update - zone=$zoneNumber, building=$buildingNumber")
|
||||
val (
|
||||
ntuLevel,
|
||||
isHacked, empireHack, hackTimeRemaining, controllingEmpire,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,13 @@ import shapeless.{::, HNil}
|
|||
* (Write more some other time.)
|
||||
* @param object_guid the target object
|
||||
* @param code the action code
|
||||
* 24 - deconstructs player
|
||||
* 28 - start imprinting process (progress bar + character animation)
|
||||
* 32 - finish imprinting?
|
||||
* 36 - cloak
|
||||
* 40 - uncloak
|
||||
* 82 - hit flinch?
|
||||
* 138 - time till item can be used ?????
|
||||
* 44, 45, 46, 47 - Deploy capital base shield pole with animation and broadcasts "The capitol force dome at X has been activated"
|
||||
* 48, 49, 50, 51 - Stow capital base shield pole with animation and broadcasts "The capitol force dome at X has been deactivated"
|
||||
* 52, 53, 54, 55 - Deploy capital base shield pole (instantly, unless still in the middle of the stow animation)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue