mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-19 18:44:45 +00:00
bail malfunction, gen normal state, stop vehicle momentum
This commit is contained in:
parent
4ce53e3a32
commit
d1e8da208b
|
|
@ -297,6 +297,10 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
sendResponse(ChatMsg(ChatMessageType.UNK_224, "@SA_CannotBailAtThisTime"))
|
sendResponse(ChatMsg(ChatMessageType.UNK_224, "@SA_CannotBailAtThisTime"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Mountable.CanNotDismount(obj: Vehicle, _, BailType.Bailed)
|
||||||
|
if obj.Health <= (obj.MaxHealth * .35).round && GlobalDefinitions.isFlightVehicle(obj.Definition) =>
|
||||||
|
sendResponse(ChatMsg(ChatMessageType.UNK_224, "@BailingMechanismFailure_Pilot"))
|
||||||
|
|
||||||
case Mountable.CanNotDismount(obj: Vehicle, _, BailType.Bailed)
|
case Mountable.CanNotDismount(obj: Vehicle, _, BailType.Bailed)
|
||||||
if {
|
if {
|
||||||
continent
|
continent
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,10 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
||||||
if obj.DeploymentState == DriveState.AutoPilot =>
|
if obj.DeploymentState == DriveState.AutoPilot =>
|
||||||
sendResponse(ChatMsg(ChatMessageType.UNK_224, "@SA_CannotBailAtThisTime"))
|
sendResponse(ChatMsg(ChatMessageType.UNK_224, "@SA_CannotBailAtThisTime"))
|
||||||
|
|
||||||
|
case Mountable.CanNotDismount(obj: Vehicle, _, BailType.Bailed)
|
||||||
|
if obj.Health <= (obj.MaxHealth * .35).round && GlobalDefinitions.isFlightVehicle(obj.Definition) =>
|
||||||
|
sendResponse(ChatMsg(ChatMessageType.UNK_224, "@BailingMechanismFailure_Pilot"))
|
||||||
|
|
||||||
case Mountable.CanNotDismount(obj: Vehicle, _, BailType.Bailed)
|
case Mountable.CanNotDismount(obj: Vehicle, _, BailType.Bailed)
|
||||||
if {
|
if {
|
||||||
continent
|
continent
|
||||||
|
|
|
||||||
|
|
@ -202,10 +202,10 @@ class SessionMountHandlers(
|
||||||
//until vehicles maintain synchronized momentum without a driver
|
//until vehicles maintain synchronized momentum without a driver
|
||||||
obj match {
|
obj match {
|
||||||
case v: Vehicle
|
case v: Vehicle
|
||||||
if seatNum == 0 && Vector3.MagnitudeSquared(v.Velocity.getOrElse(Vector3.Zero)) > 0f =>
|
if seatNum == 0 =>
|
||||||
sessionLogic.vehicles.serverVehicleControlVelocity.collect { _ =>
|
/*sessionLogic.vehicles.serverVehicleControlVelocity.collect { _ =>
|
||||||
sessionLogic.vehicles.ServerVehicleOverrideStop(v)
|
sessionLogic.vehicles.ServerVehicleOverrideStop(v)
|
||||||
}
|
}*/
|
||||||
v.Velocity = Vector3.Zero
|
v.Velocity = Vector3.Zero
|
||||||
continent.VehicleEvents ! VehicleServiceMessage(
|
continent.VehicleEvents ! VehicleServiceMessage(
|
||||||
continent.id,
|
continent.id,
|
||||||
|
|
@ -213,9 +213,9 @@ class SessionMountHandlers(
|
||||||
tplayer.GUID,
|
tplayer.GUID,
|
||||||
v.GUID,
|
v.GUID,
|
||||||
unk1 = 0,
|
unk1 = 0,
|
||||||
v.Position,
|
tplayer.Position,
|
||||||
v.Orientation,
|
v.Orientation,
|
||||||
vel = None,
|
v.Velocity,
|
||||||
v.Flying,
|
v.Flying,
|
||||||
unk3 = 0,
|
unk3 = 0,
|
||||||
unk4 = 0,
|
unk4 = 0,
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,10 @@ class GeneratorControl(gen: Generator)
|
||||||
if(newHealth == target.Definition.MaxHealth) {
|
if(newHealth == target.Definition.MaxHealth) {
|
||||||
stopAutoRepair()
|
stopAutoRepair()
|
||||||
}
|
}
|
||||||
|
if(gen.Condition == PlanetSideGeneratorState.Critical && newHealth > (target.MaxHealth / 2)) {
|
||||||
|
gen.Condition = PlanetSideGeneratorState.Normal
|
||||||
|
GeneratorControl.UpdateOwner(gen, Some(GeneratorControl.Event.Normal))
|
||||||
|
}
|
||||||
newHealth
|
newHealth
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, VehicleSource}
|
||||||
import net.psforever.objects.vehicles._
|
import net.psforever.objects.vehicles._
|
||||||
import net.psforever.objects.vehicles.interaction.WithWater
|
import net.psforever.objects.vehicles.interaction.WithWater
|
||||||
import net.psforever.objects.vital.interaction.DamageResult
|
import net.psforever.objects.vital.interaction.DamageResult
|
||||||
import net.psforever.objects.vital.{InGameActivity, ShieldCharge, SpawningActivity, VehicleDismountActivity, VehicleMountActivity}
|
import net.psforever.objects.vital.{DamagingActivity, InGameActivity, ShieldCharge, SpawningActivity, VehicleDismountActivity, VehicleMountActivity}
|
||||||
import net.psforever.objects.zones._
|
import net.psforever.objects.zones._
|
||||||
import net.psforever.packet.PlanetSideGamePacket
|
import net.psforever.packet.PlanetSideGamePacket
|
||||||
import net.psforever.packet.game._
|
import net.psforever.packet.game._
|
||||||
|
|
@ -39,6 +39,7 @@ import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
|
import scala.util.Random
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An `Actor` that handles messages being dispatched to a specific `Vehicle`.<br>
|
* An `Actor` that handles messages being dispatched to a specific `Vehicle`.<br>
|
||||||
|
|
@ -140,6 +141,36 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
}) =>
|
}) =>
|
||||||
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
||||||
|
|
||||||
|
case Mountable.TryDismount(user, seat_num, bailType)
|
||||||
|
if vehicle.Health <= (vehicle.Definition.MaxHealth * .1).round && bailType == BailType.Bailed
|
||||||
|
&& GlobalDefinitions.isFlightVehicle(vehicle.Definition)
|
||||||
|
&& (seat_num == 0 || vehicle.SeatPermissionGroup(seat_num).getOrElse(0) == AccessPermissionGroup.Gunner)
|
||||||
|
&& (vehicle.History.findLast { entry => entry.isInstanceOf[DamagingActivity] } match {
|
||||||
|
case Some(entry) if System.currentTimeMillis() - entry.time < 4000L => true
|
||||||
|
case _ if Random.nextInt(10) == 1 => false
|
||||||
|
case _ => true }) =>
|
||||||
|
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
||||||
|
|
||||||
|
case Mountable.TryDismount(user, seat_num, bailType)
|
||||||
|
if vehicle.Health <= (vehicle.Definition.MaxHealth * .2).round && bailType == BailType.Bailed
|
||||||
|
&& GlobalDefinitions.isFlightVehicle(vehicle.Definition)
|
||||||
|
&& (seat_num == 0 || vehicle.SeatPermissionGroup(seat_num).getOrElse(0) == AccessPermissionGroup.Gunner)
|
||||||
|
&& (vehicle.History.findLast { entry => entry.isInstanceOf[DamagingActivity] } match {
|
||||||
|
case Some(entry) if System.currentTimeMillis() - entry.time < 3500L => true
|
||||||
|
case _ if Random.nextInt(5) == 1 => false
|
||||||
|
case _ => true }) =>
|
||||||
|
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
||||||
|
|
||||||
|
case Mountable.TryDismount(user, seat_num, bailType)
|
||||||
|
if vehicle.Health <= (vehicle.Definition.MaxHealth * .35).round && bailType == BailType.Bailed
|
||||||
|
&& GlobalDefinitions.isFlightVehicle(vehicle.Definition)
|
||||||
|
&& (seat_num == 0 || vehicle.SeatPermissionGroup(seat_num).getOrElse(0) == AccessPermissionGroup.Gunner)
|
||||||
|
&& (vehicle.History.findLast { entry => entry.isInstanceOf[DamagingActivity] } match {
|
||||||
|
case Some(entry) if System.currentTimeMillis() - entry.time < 3000L => true
|
||||||
|
case _ if Random.nextInt(4) == 1 => false
|
||||||
|
case _ => true }) =>
|
||||||
|
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
||||||
|
|
||||||
case Mountable.TryDismount(user, seat_num, bailType)
|
case Mountable.TryDismount(user, seat_num, bailType)
|
||||||
if vehicle.DeploymentState == DriveState.AutoPilot =>
|
if vehicle.DeploymentState == DriveState.AutoPilot =>
|
||||||
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
sender() ! Mountable.MountMessages(user, Mountable.CanNotDismount(vehicle, seat_num, bailType))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue