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:
Mazo 2019-08-21 15:39:44 +01:00 committed by Fate-JH
parent 0730c0deb6
commit 2048fa19cb
8 changed files with 223 additions and 59 deletions

View file

@ -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)
}
/**

View file

@ -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
}

View file

@ -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] = {

View file

@ -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))

View file

@ -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,

View file

@ -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)