mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-19 18:44:45 +00:00
retimed the self-reporting vehicle test for radiation cloud interaction
This commit is contained in:
parent
01c014a59c
commit
12cbcfc6c1
|
|
@ -288,11 +288,11 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
final def Enabled: Receive =
|
final def Enabled: Receive =
|
||||||
commonEnabledBehavior
|
commonEnabledBehavior
|
||||||
.orElse {
|
.orElse {
|
||||||
case VehicleControl.RadiationTick =>
|
case VehicleControl.RadiationTick if !passengerRadiationCloudTimer.isCancelled =>
|
||||||
vehicle.interaction().find { _.Type == RadiationInMountableInteraction } match {
|
vehicle
|
||||||
case Some(func) => func.interaction(vehicle.getInteractionSector, vehicle)
|
.interaction()
|
||||||
case _ => ()
|
.find(_.Type == RadiationInMountableInteraction)
|
||||||
}
|
.foreach(_.interaction(vehicle.getInteractionSector, vehicle))
|
||||||
case _ => ()
|
case _ => ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -355,13 +355,12 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
}
|
}
|
||||||
|
|
||||||
def mountCleanup(mount_point: Int, user: Player): Unit = {
|
def mountCleanup(mount_point: Int, user: Player): Unit = {
|
||||||
val obj = MountableObject
|
vehicle.PassengerInSeat(user) match {
|
||||||
obj.PassengerInSeat(user) match {
|
case Some(0) => //driver seat
|
||||||
case Some(seatNumber) =>
|
|
||||||
val vsrc = VehicleSource(vehicle)
|
val vsrc = VehicleSource(vehicle)
|
||||||
user.LogActivity(VehicleMountActivity(vsrc, PlayerSource.inSeat(user, vsrc, seatNumber), vehicle.Zone.Number))
|
user.LogActivity(VehicleMountActivity(vsrc, PlayerSource.inSeat(user, vsrc, seatNumber = 0), vehicle.Zone.Number))
|
||||||
//if the driver mount, change ownership if that is permissible for this vehicle
|
//if the driver mount, change ownership if that is permissible for this vehicle
|
||||||
if (seatNumber == 0 && !obj.OwnerName.contains(user.Name) && obj.Definition.CanBeOwned.nonEmpty) {
|
if (!vehicle.OwnerName.contains(user.Name) && vehicle.Definition.CanBeOwned.nonEmpty) {
|
||||||
//whatever vehicle was previously owned
|
//whatever vehicle was previously owned
|
||||||
vehicle.Zone.GUID(user.avatar.vehicle) match {
|
vehicle.Zone.GUID(user.avatar.vehicle) match {
|
||||||
case Some(v: Vehicle) =>
|
case Some(v: Vehicle) =>
|
||||||
|
|
@ -370,13 +369,24 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
user.avatar.vehicle = None
|
user.avatar.vehicle = None
|
||||||
}
|
}
|
||||||
GainOwnership(user) //gain new ownership
|
GainOwnership(user) //gain new ownership
|
||||||
passengerRadiationCloudTimer.cancel()
|
|
||||||
} else {
|
} else {
|
||||||
decaying = false
|
decaying = false
|
||||||
decayTimer.cancel()
|
decayTimer.cancel()
|
||||||
}
|
}
|
||||||
|
passengerRadiationCloudTimer.cancel()
|
||||||
updateZoneInteractionProgressUI(user)
|
updateZoneInteractionProgressUI(user)
|
||||||
case None => ;
|
|
||||||
|
case Some(seatNumber) => //literally any other seat
|
||||||
|
val vsrc = VehicleSource(vehicle)
|
||||||
|
user.LogActivity(VehicleMountActivity(vsrc, PlayerSource.inSeat(user, vsrc, seatNumber), vehicle.Zone.Number))
|
||||||
|
decaying = false
|
||||||
|
decayTimer.cancel()
|
||||||
|
if (!vehicle.Seats(0).isOccupied && passengerRadiationCloudTimer.isCancelled) {
|
||||||
|
StartRadiationSelfReporting()
|
||||||
|
}
|
||||||
|
updateZoneInteractionProgressUI(user)
|
||||||
|
|
||||||
|
case None => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -390,19 +400,17 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
|
|
||||||
def dismountCleanup(seatBeingDismounted: Int, user: Player): Unit = {
|
def dismountCleanup(seatBeingDismounted: Int, user: Player): Unit = {
|
||||||
val obj = MountableObject
|
val obj = MountableObject
|
||||||
|
val allSeatsUnoccupied = !obj.Seats.values.exists(_.isOccupied)
|
||||||
// Reset velocity to zero when driver dismounts, to allow jacking/repair if vehicle was moving slightly before dismount
|
// Reset velocity to zero when driver dismounts, to allow jacking/repair if vehicle was moving slightly before dismount
|
||||||
if (!obj.Seats(0).isOccupied) {
|
if (!obj.Seats(0).isOccupied) {
|
||||||
obj.Velocity = Some(Vector3.Zero)
|
obj.Velocity = Some(Vector3.Zero)
|
||||||
}
|
}
|
||||||
if (seatBeingDismounted == 0) {
|
if (allSeatsUnoccupied) {
|
||||||
passengerRadiationCloudTimer = context.system.scheduler.scheduleWithFixedDelay(
|
passengerRadiationCloudTimer.cancel()
|
||||||
250.milliseconds,
|
} else if (seatBeingDismounted == 0) {
|
||||||
250.milliseconds,
|
StartRadiationSelfReporting()
|
||||||
self,
|
|
||||||
VehicleControl.RadiationTick
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
if (!obj.Seats(seatBeingDismounted).isOccupied) { //seat was vacated
|
if (!obj.Seats(seatBeingDismounted).isOccupied) { //this seat really was vacated
|
||||||
user.LogActivity(VehicleDismountActivity(VehicleSource(vehicle), PlayerSource(user), vehicle.Zone.Number))
|
user.LogActivity(VehicleDismountActivity(VehicleSource(vehicle), PlayerSource(user), vehicle.Zone.Number))
|
||||||
//we were only owning the vehicle while we sat in its driver seat
|
//we were only owning the vehicle while we sat in its driver seat
|
||||||
val canBeOwned = obj.Definition.CanBeOwned
|
val canBeOwned = obj.Definition.CanBeOwned
|
||||||
|
|
@ -411,9 +419,9 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
}
|
}
|
||||||
//are we already decaying? are we unowned? is no one seated anywhere?
|
//are we already decaying? are we unowned? is no one seated anywhere?
|
||||||
if (!decaying &&
|
if (!decaying &&
|
||||||
obj.Definition.undergoesDecay &&
|
obj.Definition.undergoesDecay &&
|
||||||
obj.OwnerGuid.isEmpty &&
|
obj.OwnerGuid.isEmpty &&
|
||||||
obj.Seats.values.forall(!_.isOccupied)) {
|
allSeatsUnoccupied) {
|
||||||
decaying = true
|
decaying = true
|
||||||
decayTimer = context.system.scheduler.scheduleOnce(
|
decayTimer = context.system.scheduler.scheduleOnce(
|
||||||
MountableObject.Definition.DeconstructionTime.getOrElse(5 minutes),
|
MountableObject.Definition.DeconstructionTime.getOrElse(5 minutes),
|
||||||
|
|
@ -424,6 +432,16 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def StartRadiationSelfReporting(): Unit = {
|
||||||
|
passengerRadiationCloudTimer.cancel()
|
||||||
|
passengerRadiationCloudTimer = context.system.scheduler.scheduleWithFixedDelay(
|
||||||
|
250.milliseconds,
|
||||||
|
250.milliseconds,
|
||||||
|
self,
|
||||||
|
VehicleControl.RadiationTick
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
def PrepareForDisabled(kickPassengers: Boolean) : Unit = {
|
def PrepareForDisabled(kickPassengers: Boolean) : Unit = {
|
||||||
val guid = vehicle.GUID
|
val guid = vehicle.GUID
|
||||||
val zone = vehicle.Zone
|
val zone = vehicle.Zone
|
||||||
|
|
@ -492,7 +510,7 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
case Some(_) =>
|
case Some(_) =>
|
||||||
decaying = false
|
decaying = false
|
||||||
decayTimer.cancel()
|
decayTimer.cancel()
|
||||||
case None => ;
|
case None => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -507,9 +525,9 @@ class VehicleControl(vehicle: Vehicle)
|
||||||
self.toString,
|
self.toString,
|
||||||
AvatarAction.SendResponse(Service.defaultPlayerGUID, ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
AvatarAction.SendResponse(Service.defaultPlayerGUID, ObjectAttachMessage(obj.GUID, item.GUID, slot))
|
||||||
)
|
)
|
||||||
case None => ;
|
case None => ()
|
||||||
}
|
}
|
||||||
case _ => ;
|
case _ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue