diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index 42a4f2a2..9436c2be 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -6558,9 +6558,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con sendResponse(SetEmpireMessage(guid, building.Faction)) // power building.Generator match { - case Some(obj) if obj.Condition != PlanetSideGeneratorState.Normal => - sendResponse(PlanetsideAttributeMessage(guid, 48, 1)) - sendResponse(PlanetsideAttributeMessage(guid, 38, 0)) + case Some(obj) if obj.Condition == PlanetSideGeneratorState.Destroyed || building.NtuLevel == 0 => + sendResponse(PlanetsideAttributeMessage(guid, 48, 1)) //amenities disabled; red warning lights + sendResponse(PlanetsideAttributeMessage(guid, 38, 0)) //disable spawn target on deployment map case _ => ; } // capitol force dome state diff --git a/src/main/scala/net/psforever/objects/serverobject/generator/Generator.scala b/src/main/scala/net/psforever/objects/serverobject/generator/Generator.scala index b66646cb..27de959c 100644 --- a/src/main/scala/net/psforever/objects/serverobject/generator/Generator.scala +++ b/src/main/scala/net/psforever/objects/serverobject/generator/Generator.scala @@ -24,6 +24,16 @@ class Generator(private val gdef: GeneratorDefinition) extends Amenity { Condition } + override def Destroyed_=(state : Boolean) : Boolean = { + val isDestroyed = super.Destroyed_=(state) + condition = if (isDestroyed) { + PlanetSideGeneratorState.Destroyed + } else { + PlanetSideGeneratorState.Normal + } + isDestroyed + } + def Definition: GeneratorDefinition = gdef } diff --git a/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala b/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala index 693bde06..503f1dec 100644 --- a/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala +++ b/src/main/scala/net/psforever/objects/serverobject/generator/GeneratorControl.scala @@ -80,6 +80,8 @@ class GeneratorControl(gen: Generator) .orElse { case GeneratorControl.Destabilized() => imminentExplosion = true + //the generator's condition is technically destroyed, but avoid official reporting until the explosion + gen.Condition = PlanetSideGeneratorState.Destroyed GeneratorControl.UpdateOwner(gen, Some(GeneratorControl.Event.Destabilized)) queuedExplosion.cancel() queuedExplosion = context.system.scheduler.scheduleOnce(10 seconds, self, GeneratorControl.GeneratorExplodes()) @@ -89,7 +91,6 @@ class GeneratorControl(gen: Generator) val zone = gen.Zone gen.Health = 0 super.DestructionAwareness(gen, gen.LastShot.get) - gen.Condition = PlanetSideGeneratorState.Destroyed GeneratorControl.UpdateOwner(gen, Some(GeneratorControl.Event.Destroyed)) //kaboom zone.AvatarEvents ! AvatarServiceMessage( diff --git a/src/test/scala/objects/AutoRepairIntegrationTest.scala b/src/test/scala/objects/AutoRepairIntegrationTest.scala index 3ce68502..188847ca 100644 --- a/src/test/scala/objects/AutoRepairIntegrationTest.scala +++ b/src/test/scala/objects/AutoRepairIntegrationTest.scala @@ -160,7 +160,7 @@ object AutoRepairIntegrationTest { MaxHealth = 500 Damageable = true Repairable = true - autoRepair = AutoRepairStats(1, 500, 500, 1) + autoRepair = AutoRepairStats(200, 500, 500, 1) RepairIfDestroyed = true } } diff --git a/src/test/scala/objects/GeneratorTest.scala b/src/test/scala/objects/GeneratorTest.scala index 10807bf0..436164ec 100644 --- a/src/test/scala/objects/GeneratorTest.scala +++ b/src/test/scala/objects/GeneratorTest.scala @@ -287,7 +287,7 @@ class GeneratorControlDestroyedTest extends ActorTest { ) assert(gen.Health == 1) assert(!gen.Destroyed) - assert(gen.Condition == PlanetSideGeneratorState.Normal) + assert(gen.Condition == PlanetSideGeneratorState.Destroyed) avatarProbe.expectNoMessage(9500 milliseconds) val msg_avatar2 = avatarProbe.receiveN(3, 1000 milliseconds) //see DamageableEntity test file @@ -421,7 +421,7 @@ class GeneratorControlKillsTest extends ActorTest { ) assert(gen.Health == 1) assert(!gen.Destroyed) - assert(gen.Condition == PlanetSideGeneratorState.Normal) + assert(gen.Condition == PlanetSideGeneratorState.Destroyed) avatarProbe.expectNoMessage(9500 milliseconds) val msg_avatar2 = avatarProbe.receiveN(3, 1000 milliseconds) //see DamageableEntity test file @@ -631,7 +631,7 @@ class GeneratorControlNotDamageIfExplodingTest extends ActorTest { ) assert(gen.Health == 1) assert(!gen.Destroyed) - assert(gen.Condition == PlanetSideGeneratorState.Normal) + assert(gen.Condition == PlanetSideGeneratorState.Destroyed) //going to explode state //once @@ -732,7 +732,7 @@ class GeneratorControlNotRepairIfExplodingTest extends ActorTest { ) assert(gen.Health == 1) assert(!gen.Destroyed) - assert(gen.Condition == PlanetSideGeneratorState.Normal) + assert(gen.Condition == PlanetSideGeneratorState.Destroyed) //going to explode state //once