From fc78d53ecbd3487f5b284e263e9a978224eacb19 Mon Sep 17 00:00:00 2001 From: Mazo Date: Wed, 18 Jul 2018 13:41:28 +0100 Subject: [PATCH] Fix NTU warning flag having the wrong data type (#224) Fix LowNtuWarning having the wrong data type --- .../resourcesilo/ResourceSilo.scala | 11 ++--- .../resourcesilo/ResourceSiloControl.scala | 14 +++---- .../test/scala/objects/ResourceSiloTest.scala | 42 +++++++++---------- .../src/main/scala/WorldSessionActor.scala | 2 +- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSilo.scala b/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSilo.scala index ec91da7e..74041427 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSilo.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSilo.scala @@ -9,8 +9,9 @@ import net.psforever.packet.game.UseItemMessage class ResourceSilo extends Amenity { private var chargeLevel : Int = 0 private val maximumCharge : Int = 1000 - // For the flashing red light on top of the NTU silo on - private var lowNtuWarningOn : Int = 0 + // For the flashing red light on top of the NTU silo on. + // Default to true until charge level can be persisted across restarts as default charge level is 0 + private var lowNtuWarningOn : Boolean = true // For the NTU display bar private var capacitorDisplay : Long = 0 @@ -31,8 +32,8 @@ class ResourceSilo extends Amenity { def MaximumCharge : Int = maximumCharge - def LowNtuWarningOn : Int = lowNtuWarningOn - def LowNtuWarningOn_=(enabled: Int) : Int = { + def LowNtuWarningOn : Boolean = lowNtuWarningOn + def LowNtuWarningOn_=(enabled: Boolean) : Boolean = { lowNtuWarningOn = enabled LowNtuWarningOn } @@ -55,7 +56,7 @@ object ResourceSilo { final case class Use(player: Player, msg : UseItemMessage) final case class UpdateChargeLevel(amount: Int) - final case class LowNtuWarning(enabled: Int) + final case class LowNtuWarning(enabled: Boolean) sealed trait Exchange final case class ChargeEvent() extends Exchange final case class ResourceSiloMessage(player: Player, msg : UseItemMessage, response : Exchange) diff --git a/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala b/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala index ae1a5db9..1de8894a 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/resourcesilo/ResourceSiloControl.scala @@ -40,10 +40,10 @@ class ResourceSiloControl(resourceSilo : ResourceSilo) extends Actor with Factio def Processing : Receive = checkBehavior.orElse { case ResourceSilo.Use(player, msg) => sender ! ResourceSilo.ResourceSiloMessage(player, msg, resourceSilo.Use(player, msg)) - case ResourceSilo.LowNtuWarning(enabled: Int) => + case ResourceSilo.LowNtuWarning(enabled: Boolean) => resourceSilo.LowNtuWarningOn = enabled log.trace(s"LowNtuWarning: Silo ${resourceSilo.GUID} low ntu warning set to ${enabled}") - avatarService ! AvatarServiceMessage(resourceSilo.Owner.asInstanceOf[Building].Zone.Id, AvatarAction.PlanetsideAttribute(PlanetSideGUID(resourceSilo.Owner.asInstanceOf[Building].ModelId), 47, resourceSilo.LowNtuWarningOn)) + avatarService ! AvatarServiceMessage(resourceSilo.Owner.asInstanceOf[Building].Zone.Id, AvatarAction.PlanetsideAttribute(PlanetSideGUID(resourceSilo.Owner.asInstanceOf[Building].ModelId), 47, if(resourceSilo.LowNtuWarningOn) 1 else 0)) case ResourceSilo.UpdateChargeLevel(amount: Int) => val siloChargeBeforeChange = resourceSilo.ChargeLevel @@ -65,10 +65,10 @@ class ResourceSiloControl(resourceSilo : ResourceSilo) extends Actor with Factio } val ntuIsLow = resourceSilo.ChargeLevel.toFloat / resourceSilo.MaximumCharge.toFloat < 0.2f - if(resourceSilo.LowNtuWarningOn == 1 && !ntuIsLow){ - self ! ResourceSilo.LowNtuWarning(0) - } else if (resourceSilo.LowNtuWarningOn == 0 && ntuIsLow) { - self ! ResourceSilo.LowNtuWarning(1) + if(resourceSilo.LowNtuWarningOn && !ntuIsLow){ + self ! ResourceSilo.LowNtuWarning(enabled = false) + } else if (!resourceSilo.LowNtuWarningOn && ntuIsLow) { + self ! ResourceSilo.LowNtuWarning(enabled = true) } @@ -76,7 +76,7 @@ class ResourceSiloControl(resourceSilo : ResourceSilo) extends Actor with Factio // Oops, someone let the base run out of power. Shut it all down. //todo: Make base neutral if silo hits zero NTU - // temporarily disabled until warpgates can bring ANTs from sanctuary, otherwise we'd be stuck in a situation with an unpowered base and no way to get an ANT to refill it. + //todo: temporarily disabled until warpgates can bring ANTs from sanctuary, otherwise we'd be stuck in a situation with an unpowered base and no way to get an ANT to refill it. // avatarService ! AvatarServiceMessage(resourceSilo.Owner.asInstanceOf[Building].Zone.Id, AvatarAction.PlanetsideAttribute(PlanetSideGUID(resourceSilo.Owner.asInstanceOf[Building].ModelId), 48, 1)) } else if (siloChargeBeforeChange == 0 && resourceSilo.ChargeLevel > 0) { // Power restored. Reactor Online. Sensors Online. Weapons Online. All systems nominal. diff --git a/common/src/test/scala/objects/ResourceSiloTest.scala b/common/src/test/scala/objects/ResourceSiloTest.scala index 846959f3..958478df 100644 --- a/common/src/test/scala/objects/ResourceSiloTest.scala +++ b/common/src/test/scala/objects/ResourceSiloTest.scala @@ -30,14 +30,14 @@ class ResourceSiloTest extends Specification { obj.Definition mustEqual GlobalDefinitions.resource_silo obj.MaximumCharge mustEqual 1000 obj.ChargeLevel mustEqual 0 - obj.LowNtuWarningOn mustEqual 0 + obj.LowNtuWarningOn mustEqual true obj.CapacitorDisplay mustEqual 0 // obj.ChargeLevel = 50 - obj.LowNtuWarningOn = 25 + obj.LowNtuWarningOn = false obj.CapacitorDisplay = 75 obj.ChargeLevel mustEqual 50 - obj.LowNtuWarningOn mustEqual 25 + obj.LowNtuWarningOn mustEqual false obj.CapacitorDisplay mustEqual 75 } @@ -116,13 +116,13 @@ class ResourceSiloControlNtuWarningTest extends ActorTest { } "Resource silo" should { - "announce low ntu" in { + "announce high ntu" in { expectNoMsg(1 seconds) - assert(obj.LowNtuWarningOn == 0) - obj.Actor ! ResourceSilo.LowNtuWarning(10) + assert(obj.LowNtuWarningOn == true) + obj.Actor ! ResourceSilo.LowNtuWarning(false) val reply = probe.receiveOne(500 milliseconds) - assert(obj.LowNtuWarningOn == 10) + assert(obj.LowNtuWarningOn == false) assert(reply.isInstanceOf[AvatarServiceMessage]) assert(reply.asInstanceOf[AvatarServiceMessage].forChannel == "nowhere") assert(reply.asInstanceOf[AvatarServiceMessage] @@ -132,7 +132,7 @@ class ResourceSiloControlNtuWarningTest extends ActorTest { assert(reply.asInstanceOf[AvatarServiceMessage] .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_type == 47) assert(reply.asInstanceOf[AvatarServiceMessage] - .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 10) + .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 0) } } } @@ -154,17 +154,17 @@ class ResourceSiloControlUpdate1Test extends ActorTest { obj.Owner = bldg "Resource silo" should { - "update the charge level and capacitor display (report low ntu, power restored)" in { + "update the charge level and capacitor display (report high ntu, power restored)" in { expectNoMsg(1 seconds) assert(obj.ChargeLevel == 0) assert(obj.CapacitorDisplay == 0) - obj.Actor ! ResourceSilo.UpdateChargeLevel(105) + obj.Actor ! ResourceSilo.UpdateChargeLevel(305) val reply1 = probe1.receiveOne(500 milliseconds) val reply2 = probe2.receiveOne(500 milliseconds) - assert(obj.ChargeLevel == 105) - assert(obj.CapacitorDisplay == 1) + assert(obj.ChargeLevel == 305) + assert(obj.CapacitorDisplay == 3) assert(reply1.isInstanceOf[AvatarServiceMessage]) assert(reply1.asInstanceOf[AvatarServiceMessage].forChannel == "nowhere") assert(reply1.asInstanceOf[AvatarServiceMessage] @@ -174,7 +174,7 @@ class ResourceSiloControlUpdate1Test extends ActorTest { assert(reply1.asInstanceOf[AvatarServiceMessage] .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_type == 45) assert(reply1.asInstanceOf[AvatarServiceMessage] - .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 1) + .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 3) assert(reply2.isInstanceOf[Building.SendMapUpdateToAllClients]) @@ -191,7 +191,7 @@ class ResourceSiloControlUpdate1Test extends ActorTest { .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 0) val reply4 = probe1.receiveOne(500 milliseconds) - assert(obj.LowNtuWarningOn == 1) + assert(obj.LowNtuWarningOn == false) assert(reply4.isInstanceOf[AvatarServiceMessage]) assert(reply4.asInstanceOf[AvatarServiceMessage].forChannel == "nowhere") assert(reply4.asInstanceOf[AvatarServiceMessage] @@ -201,7 +201,7 @@ class ResourceSiloControlUpdate1Test extends ActorTest { assert(reply4.asInstanceOf[AvatarServiceMessage] .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_type == 47) assert(reply4.asInstanceOf[AvatarServiceMessage] - .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 1) + .actionMessage.asInstanceOf[AvatarAction.PlanetsideAttribute].attribute_value == 0) } } } @@ -228,10 +228,10 @@ class ResourceSiloControlUpdate2Test extends ActorTest { obj.ChargeLevel = 100 obj.CapacitorDisplay = 1 - obj.LowNtuWarningOn = 1 + obj.LowNtuWarningOn = true assert(obj.ChargeLevel == 100) assert(obj.CapacitorDisplay == 1) - assert(obj.LowNtuWarningOn == 1) + assert(obj.LowNtuWarningOn == true) obj.Actor ! ResourceSilo.UpdateChargeLevel(105) val reply1 = probe1.receiveOne(500 milliseconds) @@ -252,7 +252,7 @@ class ResourceSiloControlUpdate2Test extends ActorTest { assert(reply2.isInstanceOf[Building.SendMapUpdateToAllClients]) val reply3 = probe1.receiveOne(500 milliseconds) - assert(obj.LowNtuWarningOn == 0) + assert(obj.LowNtuWarningOn == false) assert(reply3.isInstanceOf[AvatarServiceMessage]) assert(reply3.asInstanceOf[AvatarServiceMessage].forChannel == "nowhere") assert(reply3.asInstanceOf[AvatarServiceMessage] @@ -289,10 +289,10 @@ class ResourceSiloControlNoUpdateTest extends ActorTest { obj.ChargeLevel = 250 obj.CapacitorDisplay = 3 - obj.LowNtuWarningOn = 0 + obj.LowNtuWarningOn = false assert(obj.ChargeLevel == 250) assert(obj.CapacitorDisplay == 3) - assert(obj.LowNtuWarningOn == 0) + assert(obj.LowNtuWarningOn == false) obj.Actor ! ResourceSilo.UpdateChargeLevel(50) expectNoMsg(500 milliseconds) @@ -300,7 +300,7 @@ class ResourceSiloControlNoUpdateTest extends ActorTest { probe2.expectNoMsg(500 milliseconds) assert(obj.ChargeLevel == 300) assert(obj.CapacitorDisplay == 3) - assert(obj.LowNtuWarningOn == 0) + assert(obj.LowNtuWarningOn == false) } } } diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index a7166325..18b55d83 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -4856,7 +4856,7 @@ class WorldSessionActor extends Actor with MDCContextAware { // Synchronise warning light & silo capacity var silo = amenity.asInstanceOf[ResourceSilo] sendResponse(PlanetsideAttributeMessage(amenityId, 45, silo.CapacitorDisplay)) - sendResponse(PlanetsideAttributeMessage(amenityId, 47, silo.LowNtuWarningOn)) + sendResponse(PlanetsideAttributeMessage(amenityId, 47, if(silo.LowNtuWarningOn) 1 else 0)) if(silo.ChargeLevel == 0) { // temporarily disabled until warpgates can bring ANTs from sanctuary, otherwise we'd be stuck in a situation with an unpowered base and no way to get an ANT to refill it.