mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-07-13 07:24:53 +00:00
Few more small vehicle related tweaks (#320)
* Revert back to using vehicle GUID for target gone check when jacking, as GUIDs are now retained when an object is removed from the world * Don't allow dead vehicles to be repaired * Don't show repair bar on dead vehicles * Add IsDead flag to Vehicle
This commit is contained in:
parent
db82b9f01f
commit
d0bd823e9e
3 changed files with 46 additions and 8 deletions
|
|
@ -77,6 +77,7 @@ class Vehicle(private val vehicleDef : VehicleDefinition) extends AmenityOwner
|
||||||
private var faction : PlanetSideEmpire.Value = PlanetSideEmpire.TR
|
private var faction : PlanetSideEmpire.Value = PlanetSideEmpire.TR
|
||||||
private var health : Int = 1
|
private var health : Int = 1
|
||||||
private var shields : Int = 0
|
private var shields : Int = 0
|
||||||
|
private var isDead : Boolean = false
|
||||||
private var decal : Int = 0
|
private var decal : Int = 0
|
||||||
private var trunkAccess : Option[PlanetSideGUID] = None
|
private var trunkAccess : Option[PlanetSideGUID] = None
|
||||||
private var jammered : Boolean = false
|
private var jammered : Boolean = false
|
||||||
|
|
@ -140,12 +141,23 @@ class Vehicle(private val vehicleDef : VehicleDefinition) extends AmenityOwner
|
||||||
MountedIn
|
MountedIn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def IsDead : Boolean = {
|
||||||
|
isDead
|
||||||
|
}
|
||||||
|
|
||||||
def Health : Int = {
|
def Health : Int = {
|
||||||
health
|
health
|
||||||
}
|
}
|
||||||
|
|
||||||
def Health_=(assignHealth : Int) : Int = {
|
def Health_=(assignHealth : Int) : Int = {
|
||||||
health = math.min(math.max(0, assignHealth), MaxHealth)
|
if(!isDead) {
|
||||||
|
health = math.min(math.max(0, assignHealth), MaxHealth)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(health == 0) {
|
||||||
|
isDead = true
|
||||||
|
}
|
||||||
|
|
||||||
health
|
health
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -630,6 +630,34 @@ class VehicleControlMountingOwnedUnlockedDriverSeatTest extends ActorTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VehicleControlRepairTest extends ActorTest {
|
||||||
|
val probe = new TestProbe(system)
|
||||||
|
val vehicle = Vehicle(GlobalDefinitions.fury)
|
||||||
|
vehicle.GUID = PlanetSideGUID(10)
|
||||||
|
vehicle.Health = 50
|
||||||
|
vehicle.Actor = system.actorOf(Props(classOf[VehicleControl], vehicle), "vehicle-test")
|
||||||
|
vehicle.Zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||||
|
VehicleEvents = probe.ref
|
||||||
|
}
|
||||||
|
|
||||||
|
"Can repair alive vehicle" in {
|
||||||
|
assert(vehicle.Health == 50)
|
||||||
|
|
||||||
|
vehicle.Health += 10
|
||||||
|
assert(vehicle.Health == 60)
|
||||||
|
}
|
||||||
|
|
||||||
|
"Can't repair dead vehicle" in {
|
||||||
|
assert(vehicle.Health > 0)
|
||||||
|
|
||||||
|
vehicle.Health = 0
|
||||||
|
assert(vehicle.Health == 0)
|
||||||
|
|
||||||
|
vehicle.Health += 10
|
||||||
|
assert(vehicle.Health == 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class VehicleControlShieldsChargingTest extends ActorTest {
|
class VehicleControlShieldsChargingTest extends ActorTest {
|
||||||
val probe = new TestProbe(system)
|
val probe = new TestProbe(system)
|
||||||
val vehicle = Vehicle(GlobalDefinitions.fury)
|
val vehicle = Vehicle(GlobalDefinitions.fury)
|
||||||
|
|
|
||||||
|
|
@ -861,7 +861,7 @@ class WorldSessionActor extends Actor
|
||||||
|
|
||||||
case Zone.Lattice.SpawnPoint(zone_id, spawn_tube) =>
|
case Zone.Lattice.SpawnPoint(zone_id, spawn_tube) =>
|
||||||
var (pos, ori) = spawn_tube.SpecificPoint(continent.GUID(player.VehicleSeated) match {
|
var (pos, ori) = spawn_tube.SpecificPoint(continent.GUID(player.VehicleSeated) match {
|
||||||
case Some(obj : Vehicle) if obj.Health > 0 =>
|
case Some(obj : Vehicle) if !obj.IsDead =>
|
||||||
obj
|
obj
|
||||||
case _ =>
|
case _ =>
|
||||||
player
|
player
|
||||||
|
|
@ -3172,8 +3172,7 @@ class WorldSessionActor extends Actor
|
||||||
|
|
||||||
if(!target.HasGUID) {
|
if(!target.HasGUID) {
|
||||||
// Target is gone, cancel the hack.
|
// Target is gone, cancel the hack.
|
||||||
// Note: I couldn't find any examples of an object that no longer has a GUID in packet captures, but sending the hacking player's GUID as the target to cancel the hack seems to work
|
sendResponse(HackMessage(progressType, target.GUID, player.GUID, 0, 0L, HackState.Cancelled, 8L))
|
||||||
sendResponse(HackMessage(progressType, player.GUID, player.GUID, 0, 0L, HackState.Cancelled, 8L))
|
|
||||||
}
|
}
|
||||||
else if(vis == HackState.Cancelled) {
|
else if(vis == HackState.Cancelled) {
|
||||||
// Object moved. Cancel the hack (e.g. vehicle drove away)
|
// Object moved. Cancel the hack (e.g. vehicle drove away)
|
||||||
|
|
@ -5171,9 +5170,8 @@ class WorldSessionActor extends Actor
|
||||||
else if(equipment.isDefined) {
|
else if(equipment.isDefined) {
|
||||||
equipment.get.Definition match {
|
equipment.get.Definition match {
|
||||||
case GlobalDefinitions.nano_dispenser =>
|
case GlobalDefinitions.nano_dispenser =>
|
||||||
//TODO repairing behavior
|
|
||||||
if (!player.isMoving && Vector3.Distance(player.Position, obj.Position) < 5) {
|
if (!player.isMoving && Vector3.Distance(player.Position, obj.Position) < 5) {
|
||||||
if (obj.Health < obj.MaxHealth) {
|
if (obj.Health < obj.MaxHealth && !obj.IsDead) {
|
||||||
obj.Health += 48
|
obj.Health += 48
|
||||||
// sendResponse(QuantityUpdateMessage(PlanetSideGUID(8214),ammo_quantity_left))
|
// sendResponse(QuantityUpdateMessage(PlanetSideGUID(8214),ammo_quantity_left))
|
||||||
val RepairPercent: Int = obj.Health * 100 / obj.MaxHealth
|
val RepairPercent: Int = obj.Health * 100 / obj.MaxHealth
|
||||||
|
|
@ -5918,7 +5916,7 @@ class WorldSessionActor extends Actor
|
||||||
case Some(vehicleGUID) =>
|
case Some(vehicleGUID) =>
|
||||||
continent.GUID(vehicleGUID) match {
|
continent.GUID(vehicleGUID) match {
|
||||||
case Some(obj : Vehicle) =>
|
case Some(obj : Vehicle) =>
|
||||||
if(obj.Health > 0) { //vehicle will try to charge even if destroyed
|
if(!obj.IsDead) { //vehicle will try to charge even if destroyed
|
||||||
obj.Actor ! Vehicle.ChargeShields(15)
|
obj.Actor ! Vehicle.ChargeShields(15)
|
||||||
}
|
}
|
||||||
case _ =>
|
case _ =>
|
||||||
|
|
@ -8311,7 +8309,7 @@ class WorldSessionActor extends Actor
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
continent.GUID(player.VehicleSeated) match {
|
continent.GUID(player.VehicleSeated) match {
|
||||||
case Some(obj : Vehicle) if obj.Health > 0 =>
|
case Some(obj : Vehicle) if !obj.IsDead =>
|
||||||
cluster ! Zone.Lattice.RequestSpawnPoint(sanctNumber, tplayer, 12) //warp gates for functioning vehicles
|
cluster ! Zone.Lattice.RequestSpawnPoint(sanctNumber, tplayer, 12) //warp gates for functioning vehicles
|
||||||
case None =>
|
case None =>
|
||||||
cluster ! Zone.Lattice.RequestSpawnPoint(sanctNumber, tplayer, 7) //player character spawns
|
cluster ! Zone.Lattice.RequestSpawnPoint(sanctNumber, tplayer, 7) //player character spawns
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue