diff --git a/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala index 209809a6e..05750743b 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionAvatarHandlers.scala @@ -163,7 +163,7 @@ class SessionAvatarHandlers( case term: Terminal with ProximityUnit => sessionData.terminals.StopUsingProximityUnit(term) } if (sessionData.zoning.zoningStatus == Zoning.Status.Deconstructing) { - sessionData.zoning.zoningStatus = Zoning.Status.None + sessionData.stopDeconstructing() } case AvatarResponse.ObjectHeld(slot, _) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionData.scala b/src/main/scala/net/psforever/actors/session/support/SessionData.scala index 9214cf129..bafe56070 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionData.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionData.scala @@ -211,7 +211,7 @@ class SessionData( val isMovingPlus = isMoving || isJumping || jumpThrust if (isMovingPlus) { if (zoning.zoningStatus == Zoning.Status.Deconstructing) { - zoning.zoningStatus = Zoning.Status.None + stopDeconstructing() } else { zoning.CancelZoningProcessWithDescriptiveReason("cancel_motion") } @@ -525,7 +525,7 @@ class SessionData( if (action == ImplantAction.Activation) { if (zoning.zoningStatus == Zoning.Status.Deconstructing) { //do not activate; play deactivation sound instead - zoning.zoningStatus == Zoning.Status.None + stopDeconstructing() avatar.implants(slot).collect { case implant if implant.active => avatarActor ! AvatarActor.DeactivateImplant(implant.definition.implantType) @@ -1450,6 +1450,9 @@ class SessionData( } player.Actor ! PlayerControl.ObjectHeld(Player.HandsDownSlot, updateMyHolsterArm = true) zoning.zoningStatus = Zoning.Status.Deconstructing + if (player.death_by == 0) { + player.death_by = 1 + } terminals.CancelAllProximityUnits() zoning.spawn.GoToDeploymentMap() case _ => () @@ -2776,6 +2779,11 @@ class SessionData( sendResponse(ChatMsg(ChatMessageType.UNK_227, wideContents=false, "", "@charsaved", None)) } + def stopDeconstructing(): Unit = { + zoning.zoningStatus = Zoning.Status.None + player.death_by = math.min(player.death_by, 0) + } + def failWithError(error: String): Unit = { log.error(error) middlewareActor ! MiddlewareActor.Teardown() diff --git a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala index 417a8342d..e3d47ad47 100644 --- a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala @@ -2082,6 +2082,7 @@ class ZoningOperations( player.Health = health player.Armor = armor } + player.death_by = math.min(player.death_by, 0) sessionData.vehicles.GetKnownVehicleAndSeat() match { case (Some(vehicle: Vehicle), Some(seat: Int)) => //if the vehicle is the cargo of another vehicle in this zone diff --git a/src/main/scala/net/psforever/objects/Player.scala b/src/main/scala/net/psforever/objects/Player.scala index 79725b2b3..343092dad 100644 --- a/src/main/scala/net/psforever/objects/Player.scala +++ b/src/main/scala/net/psforever/objects/Player.scala @@ -547,6 +547,10 @@ class Player(var avatar: Avatar) ZoningRequest } + override def CanDamage: Boolean = { + death_by < 1 && super.CanDamage + } + def DamageModel: DamageResistanceModel = exosuit.asInstanceOf[DamageResistanceModel] def canEqual(other: Any): Boolean = other.isInstanceOf[Player]