Vehicle fixes (#313)

* Send shield + capacitor state to players mounting a vehicle

* Allow players to dismount vehicles that are slightly moving (e.g. rotating magrider, deployed vehicle with phantom velocity from pre-deployment), or vehicles in a deployed state

* Add vehicle ntu capacitor, keeping old capacitor for EMP functionality when implemented, send capacitor / ntu values on vehicle mount if definition has a maximum set
This commit is contained in:
Mazo 2020-01-08 13:24:14 +00:00 committed by Fate-JH
parent 9331a0136b
commit ddf702eea9
5 changed files with 53 additions and 22 deletions

View file

@ -5564,7 +5564,7 @@ object GlobalDefinitions {
ant.DeployTime = 1500
ant.UndeployTime = 1500
ant.AutoPilotSpeeds = (18, 6)
ant.MaximumCapacitor = 1500
ant.MaxNtuCapacitor = 1500
ant.Packet = utilityConverter
ant.DestroyedModel = Some(DestroyedVehicle.Ant)
ant.Subtract.Damage1 = 5

View file

@ -83,6 +83,7 @@ class Vehicle(private val vehicleDef : VehicleDefinition) extends AmenityOwner
private var jammered : Boolean = false
private var cloaked : Boolean = false
private var flying : Boolean = false
private var ntuCapacitor : Int = 0
private var capacitor : Int = 0
/**
* Permissions control who gets to access different parts of the vehicle;
@ -196,11 +197,24 @@ class Vehicle(private val vehicleDef : VehicleDefinition) extends AmenityOwner
Flying
}
def NtuCapacitor : Int = ntuCapacitor
def NtuCapacitor_=(value: Int) : Int = {
if(value > Definition.MaxNtuCapacitor) {
ntuCapacitor = Definition.MaxNtuCapacitor
} else if (value < 0) {
ntuCapacitor = 0
} else {
ntuCapacitor = value
}
NtuCapacitor
}
def Capacitor : Int = capacitor
def Capacitor_=(value: Int) : Int = {
if(value > Definition.MaximumCapacitor) {
capacitor = Definition.MaximumCapacitor
if(value > Definition.MaxCapacitor) {
capacitor = Definition.MaxCapacitor
} else if (value < 0) {
capacitor = 0
} else {

View file

@ -40,7 +40,8 @@ class VehicleDefinition(objectId : Int) extends ObjectDefinition(objectId)
private var canBeOwned : Boolean = true
private var serverVehicleOverrideSpeeds : (Int, Int) = (0, 0)
private var deconTime : Option[FiniteDuration] = None
private var maximumCapacitor : Int = 0
private var maxCapacitor : Int = 0
private var maxNtuCapacitor : Int = 0
private var destroyedModel : Option[DestroyedVehicle.Value] = None
Name = "vehicle"
Packet = VehicleDefinition.converter
@ -153,11 +154,18 @@ class VehicleDefinition(objectId : Int) extends ObjectDefinition(objectId)
def AutoPilotSpeed2 : Int = serverVehicleOverrideSpeeds._2
def MaximumCapacitor : Int = maximumCapacitor
def MaxNtuCapacitor : Int = maxNtuCapacitor
def MaximumCapacitor_=(maxCapacitor: Int) : Int = {
maximumCapacitor = maxCapacitor
MaximumCapacitor
def MaxNtuCapacitor_=(max: Int) : Int = {
maxNtuCapacitor = max
MaxNtuCapacitor
}
def MaxCapacitor : Int = maxCapacitor
def MaxCapacitor_=(max: Int) : Int = {
maxCapacitor = max
MaxCapacitor
}
private var jackDuration = Array(0, 0, 0, 0)

View file

@ -2,11 +2,12 @@
package net.psforever.objects.serverobject.mount
import akka.actor.Actor
import net.psforever.objects.PlanetSideGameObject
import net.psforever.objects.{PlanetSideGameObject, Vehicle}
import net.psforever.objects.entity.{Identifiable, WorldEntity}
import net.psforever.objects.serverobject.affinity.FactionAffinity
import net.psforever.objects.serverobject.hackable.Hackable
import net.psforever.objects.serverobject.turret.TurretDefinition
import net.psforever.types.DriveState
object MountableBehavior {
/**
@ -80,7 +81,7 @@ object MountableBehavior {
val obj = MountableObject
obj.Seat(seat_num) match {
case Some(seat) =>
if(seat.Bailable || !obj.isMoving) {
if(seat.Bailable || !obj.isMoving(1) || (obj.isInstanceOf[Vehicle] && obj.asInstanceOf[Vehicle].DeploymentState == DriveState.Deployed)) {
seat.Occupant = None
user.VehicleSeated = None
sender ! Mountable.MountMessages(user, Mountable.CanDismount(obj, seat_num))