From 1040e9493c8cbf3a77cb250cb350bad58c3acfd6 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Mon, 14 Sep 2026 11:46:10 -0400 Subject: [PATCH 1/2] selection of building logic has been moved from the building control constructor to the global init for zones --- .../objects/AutoRepairIntegrationTest.scala | 13 +++---- .../psforever/actors/zone/BuildingActor.scala | 14 ++------ .../serverobject/structures/Building.scala | 35 +++---------------- .../serverobject/structures/WarpGate.scala | 27 ++++---------- .../scala/net/psforever/zones/Zones.scala | 21 +++++++---- src/test/scala/objects/BuildingTest.scala | 3 +- .../scala/objects/OrbitalShuttlePadTest.scala | 3 +- src/test/scala/objects/ResourceSiloTest.scala | 4 ++- .../objects/ServerObjectBuilderTest.scala | 5 +-- src/test/scala/objects/ZoneTest.scala | 10 +++--- 10 files changed, 50 insertions(+), 85 deletions(-) diff --git a/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala b/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala index b1b939c67b..c01a11e64b 100644 --- a/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala +++ b/server/src/test/scala/actor/objects/AutoRepairIntegrationTest.scala @@ -5,6 +5,7 @@ import akka.actor.Props import akka.testkit.TestProbe import base.FreedContextActorTest import net.psforever.actors.zone.BuildingActor +import net.psforever.actors.zone.building.{FacilityLogic, MajorFacilityLogic} import net.psforever.objects.avatar.Avatar import net.psforever.objects.ballistics.Projectile import net.psforever.objects.guid.NumberPoolHub @@ -45,7 +46,7 @@ class AutoRepairFacilityIntegrationTest extends FreedContextActorTest { override def VehicleEvents = catchall override def Activity = catchall } - val building = Building.Structure(StructureType.Facility)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context) + val building = Building.Structure(StructureType.Facility, Vector3.Zero, Vector3.Zero, GlobalDefinitions.building, MajorFacilityLogic)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context) building.Invalidate() val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) @@ -118,7 +119,7 @@ class AutoRepairFacilityIntegrationGiveNtuTest extends FreedContextActorTest { override def VehicleEvents = catchall override def Activity = catchall } - val building = Building.Structure(StructureType.Facility)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context) + val building = Building.Structure(StructureType.Facility, Vector3.Zero, Vector3.Zero, GlobalDefinitions.building, MajorFacilityLogic)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context) building.Invalidate() val terminal = new Terminal(AutoRepairIntegrationTest.terminal_definition) @@ -189,7 +190,7 @@ class AutoRepairFacilityIntegrationAntGiveNtuTest extends FreedContextActorTest GlobalDefinitions.cryo_facility ) buildingMap += 6 -> building - building.Actor = context.spawn(BuildingActor(zone, building), "integ-fac-test-building-control").toClassic + building.Actor = context.spawn(BuildingActor(zone, building, MajorFacilityLogic), "integ-fac-test-building-control").toClassic building.Invalidate() guid.register(player, number = 1) @@ -281,7 +282,7 @@ class AutoRepairFacilityIntegrationTerminalDestroyedTerminalAntTest extends Free GlobalDefinitions.cryo_facility ) buildingMap += 6 -> building - building.Actor = context.spawn(BuildingActor(zone, building), "integ-fac-test-building-control").toClassic + building.Actor = context.spawn(BuildingActor(zone, building, MajorFacilityLogic), "integ-fac-test-building-control").toClassic building.Invalidate() guid.register(player, number = 1) @@ -383,7 +384,7 @@ class AutoRepairFacilityIntegrationTerminalIncompleteRepairTest extends FreedCon GlobalDefinitions.cryo_facility ) buildingMap += 6 -> building - building.Actor = context.spawn(BuildingActor(zone, building), "integ-fac-test-building-control").toClassic + building.Actor = context.spawn(BuildingActor(zone, building, MajorFacilityLogic), "integ-fac-test-building-control").toClassic building.Invalidate() guid.register(player, number = 1) @@ -482,7 +483,7 @@ class AutoRepairTowerIntegrationTest extends FreedContextActorTest { override def VehicleEvents = catchall override def Activity = catchall } - val building = Building.Structure(StructureType.Tower)(name = "integ-twr-test-building", guid = 6, map_id = 0, zone, context) + val building = Building.Structure(StructureType.Facility, Vector3.Zero, Vector3.Zero, GlobalDefinitions.building, MajorFacilityLogic)(name = "integ-fac-test-building", guid = 6, map_id = 0, zone, context) building.Invalidate() val player = Player(Avatar(0, "TestCharacter", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) diff --git a/src/main/scala/net/psforever/actors/zone/BuildingActor.scala b/src/main/scala/net/psforever/actors/zone/BuildingActor.scala index 2e97ad9d82..c47f632a5a 100644 --- a/src/main/scala/net/psforever/actors/zone/BuildingActor.scala +++ b/src/main/scala/net/psforever/actors/zone/BuildingActor.scala @@ -6,7 +6,7 @@ import akka.actor.typed.scaladsl.{ActorContext, Behaviors, StashBuffer} import akka.actor.typed.{ActorRef, Behavior, SupervisorStrategy} import net.psforever.actors.commands.NtuCommand import net.psforever.actors.zone.building._ -import net.psforever.objects.serverobject.structures.{Amenity, Building, StructureType, WarpGate} +import net.psforever.objects.serverobject.structures.{Amenity, Building} import net.psforever.objects.zones.Zone import net.psforever.packet.PlanetSideGamePacket import net.psforever.packet.game.packets.ContinentalLockUpdateMessage @@ -27,20 +27,10 @@ final case class BuildingControlDetails( ) object BuildingActor { - def apply(zone: Zone, building: Building): Behavior[Command] = + def apply(zone: Zone, building: Building, logic: BuildingLogic): Behavior[Command] = Behaviors .supervise[Command] { Behaviors.withStash(capacity = 100) { buffer => - val logic: BuildingLogic = building match { - case _: WarpGate => - WarpGateLogic - case _ if zone.map.cavern => - CavernFacilityLogic - case _ if building.BuildingType == StructureType.Facility => - MajorFacilityLogic - case _ => - FacilityLogic - } Behaviors.setup(context => new BuildingActor(context, buffer, zone, building, logic).start()) } } diff --git a/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala b/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala index f3ec0046d8..226b2616d1 100644 --- a/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala +++ b/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala @@ -14,6 +14,7 @@ import net.psforever.objects.zones.blockmap.BlockMapEntity import net.psforever.types._ import scalax.collection.{Graph, GraphEdge} import akka.actor.typed.scaladsl.adapter._ +import net.psforever.actors.zone.building.BuildingLogic import net.psforever.objects.serverobject.dome.ForceDomePhysics import net.psforever.objects.serverobject.llu.{CaptureFlag, CaptureFlagSocket} import net.psforever.objects.serverobject.structures.participation.{MajorFacilityHackParticipation, NoParticipation, ParticipationLogic, TowerHackParticipation} @@ -444,41 +445,13 @@ object Building { buildingType: StructureType, location: Vector3, rotation: Vector3, - definition: BuildingDefinition + definition: BuildingDefinition, + buildingLogic: BuildingLogic )(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): Building = { val obj = new Building(name, guid, map_id, zone, buildingType, definition) obj.Position = location obj.Orientation = rotation - obj.Actor = context.spawn(BuildingActor(zone, obj), s"$map_id-$buildingType-building").toClassic - obj - } - - def Structure( - buildingType: StructureType, - location: Vector3 - )(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): Building = { - val obj = new Building(name, guid, map_id, zone, buildingType, GlobalDefinitions.building) - obj.Position = location - obj.Actor = context.spawn(BuildingActor(zone, obj), s"$map_id-$buildingType-building").toClassic - obj - } - - def Structure( - buildingType: StructureType - )(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): Building = { - val obj = new Building(name, guid, map_id, zone, buildingType, GlobalDefinitions.building) - obj.Actor = context.spawn(BuildingActor(zone, obj), s"$map_id-$buildingType-building").toClassic - obj - } - - def Structure( - buildingType: StructureType, - buildingDefinition: BuildingDefinition, - location: Vector3 - )(name: String, guid: Int, id: Int, zone: Zone, context: ActorContext): Building = { - val obj = new Building(name, guid, id, zone, buildingType, buildingDefinition) - obj.Position = location - obj.Actor = context.spawn(BuildingActor(zone, obj), s"$id-$buildingType-building").toClassic + obj.Actor = context.spawn(BuildingActor(zone, obj, buildingLogic), s"$map_id-$buildingType-building").toClassic obj } } diff --git a/src/main/scala/net/psforever/objects/serverobject/structures/WarpGate.scala b/src/main/scala/net/psforever/objects/serverobject/structures/WarpGate.scala index 4bdfb5f43f..d04522a0e6 100644 --- a/src/main/scala/net/psforever/objects/serverobject/structures/WarpGate.scala +++ b/src/main/scala/net/psforever/objects/serverobject/structures/WarpGate.scala @@ -3,11 +3,12 @@ package net.psforever.objects.serverobject.structures import akka.actor.ActorContext import net.psforever.objects.serverobject.PlanetSideServerObject -import net.psforever.objects.{GlobalDefinitions, NtuContainer, SpawnPoint} +import net.psforever.objects.{NtuContainer, SpawnPoint} import net.psforever.objects.zones.Zone import net.psforever.types._ import akka.actor.typed.scaladsl.adapter._ import net.psforever.actors.zone.BuildingActor +import net.psforever.actors.zone.building.BuildingLogic import net.psforever.packet.game.packets.BuildingInfoUpdateMessage class WarpGate(name: String, building_guid: Int, map_id: Int, zone: Zone, buildingDefinition: WarpGateDefinition) @@ -138,28 +139,14 @@ object WarpGate { new WarpGate(name, guid, map_id, zone, buildingDefinition) } - def Structure(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): WarpGate = { - val obj = new WarpGate(name, guid, map_id, zone, GlobalDefinitions.warpgate) - obj.Actor = context.spawn(BuildingActor(zone, obj), name = s"$map_id-$guid-gate").toClassic - obj - } - - def Structure( - location: Vector3 - )(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): WarpGate = { - val obj = new WarpGate(name, guid, map_id, zone, GlobalDefinitions.warpgate) - obj.Position = location - obj.Actor = context.spawn(BuildingActor(zone, obj), name = s"$map_id-$guid-gate").toClassic - obj - } - def Structure( - location: Vector3, - buildingDefinition: WarpGateDefinition - )(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): WarpGate = { + location: Vector3, + buildingDefinition: WarpGateDefinition, + logic: BuildingLogic + )(name: String, guid: Int, map_id: Int, zone: Zone, context: ActorContext): WarpGate = { val obj = new WarpGate(name, guid, map_id, zone, buildingDefinition) obj.Position = location - obj.Actor = context.spawn(BuildingActor(zone, obj), name = s"$map_id-$guid-gate").toClassic + obj.Actor = context.spawn(BuildingActor(zone, obj, logic), name = s"$map_id-$guid-gate").toClassic obj } } diff --git a/src/main/scala/net/psforever/zones/Zones.scala b/src/main/scala/net/psforever/zones/Zones.scala index 0cb52956b4..2ec4693675 100644 --- a/src/main/scala/net/psforever/zones/Zones.scala +++ b/src/main/scala/net/psforever/zones/Zones.scala @@ -8,6 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger import akka.actor.ActorContext import io.circe._ import io.circe.parser._ +import net.psforever.actors.zone.building.{BuildingLogic, CavernFacilityLogic, FacilityLogic, MajorFacilityLogic, WarpGateLogic} import net.psforever.objects.{GlobalDefinitions, LocalLockerItem, LocalProjectile} import net.psforever.objects.definition.BasicDefinition import net.psforever.objects.guid.selector.{NumberSelector, RandomSelector, SpecificSelector} @@ -258,6 +259,7 @@ object Zones { zoneMap.environment = info.environment zoneMap.zipLinePaths = zplData.toList + zoneMap.cavern = info.value.startsWith("ugd") // This keeps track of the last used turret weapon guid, as they seem to be arbitrarily assigned at 5000+ val turretWeaponGuid = new AtomicInteger(5000) @@ -294,7 +296,7 @@ object Zones { structure.guid, structure.mapId.get, FoundationBuilder( - WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.hst) + WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.hst, WarpGateLogic) ) ) case objectType @ "warpgate_cavern" if warpGateTypes.contains(objectType) => @@ -303,7 +305,7 @@ object Zones { structure.guid, structure.mapId.get, FoundationBuilder( - WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.warpgate_cavern) + WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.warpgate_cavern, WarpGateLogic) ) ) case objectType @ "warpgate_small" if warpGateTypes.contains(objectType) => @@ -312,7 +314,7 @@ object Zones { structure.guid, structure.mapId.get, FoundationBuilder( - WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.warpgate_small) + WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.warpgate_small, WarpGateLogic) ) ) case objectType @ "warpgate" if warpGateTypes.contains(objectType) => @@ -320,9 +322,16 @@ object Zones { structure.objectName, structure.guid, structure.mapId.get, - FoundationBuilder(WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ))) + FoundationBuilder(WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.warpgate, WarpGateLogic)) ) case _ => + val logic: BuildingLogic = if (zoneMap.cavern) { + CavernFacilityLogic + } else if (structureType == StructureType.Facility) { + MajorFacilityLogic + } else { + FacilityLogic + } zoneMap.addLocalBuilding( structure.objectName, structure.guid, @@ -332,7 +341,8 @@ object Zones { structureType, Vector3(structure.absX, structure.absY, structure.absZ), Vector3(0f, 0f, structure.yaw), - structure.objectDefinition.asInstanceOf[BuildingDefinition] + structure.objectDefinition.asInstanceOf[BuildingDefinition], + logic ) ) ) @@ -852,7 +862,6 @@ object Zones { case gate: WarpGate => gate.Active = false } case zoneId if zoneId.startsWith("c") => - map.cavern = true deactivateGeoWarpGateOnContinent(bldgs) case _ => ; } diff --git a/src/test/scala/objects/BuildingTest.scala b/src/test/scala/objects/BuildingTest.scala index 194e324eb2..8af4aad2bb 100644 --- a/src/test/scala/objects/BuildingTest.scala +++ b/src/test/scala/objects/BuildingTest.scala @@ -10,6 +10,7 @@ import net.psforever.objects.zones.Zone import net.psforever.types.PlanetSideEmpire import org.specs2.mutable.Specification import akka.actor.typed.scaladsl.adapter._ +import net.psforever.actors.zone.building.FacilityLogic import net.psforever.services.{InterstellarClusterService, ServiceManager} class AmenityTest extends Specification { @@ -118,7 +119,7 @@ class BuildingActor1Test extends ActorTest { ServiceManager.boot(system) system.spawn(InterstellarClusterService(Seq(Zone.Nowhere)), InterstellarClusterService.InterstellarClusterServiceKey.id) val bldg = Building("Building", 0, 10, Zone.Nowhere, StructureType.Building) - bldg.Actor = system.spawn(BuildingActor(Zone.Nowhere, bldg), "test").toClassic + bldg.Actor = system.spawn(BuildingActor(Zone.Nowhere, bldg, FacilityLogic), "test").toClassic assert(bldg.Actor != Default.Actor) } } diff --git a/src/test/scala/objects/OrbitalShuttlePadTest.scala b/src/test/scala/objects/OrbitalShuttlePadTest.scala index 170316a628..ef23bd610e 100644 --- a/src/test/scala/objects/OrbitalShuttlePadTest.scala +++ b/src/test/scala/objects/OrbitalShuttlePadTest.scala @@ -4,6 +4,7 @@ package objects import akka.actor.{ActorRef, Props} import akka.testkit.TestProbe import base.FreedContextActorTest +import net.psforever.actors.zone.building.FacilityLogic import net.psforever.actors.zone.{BuildingActor, ZoneActor} import net.psforever.objects.{GlobalDefinitions, Vehicle} import net.psforever.objects.guid.{NumberPoolHub, UniqueNumberOps, UniqueNumberSetup} @@ -62,7 +63,7 @@ class OrbitalShuttlePadControlTest extends FreedContextActorTest { buildingMap += 1 -> building system.spawn(InterstellarClusterService(Seq(zone)), InterstellarClusterService.InterstellarClusterServiceKey.id) building.Faction = PlanetSideEmpire.TR - building.Actor = context.spawn(BuildingActor(zone, building), "test-orbital-building-tr-control").toClassic + building.Actor = context.spawn(BuildingActor(zone, building, FacilityLogic), "test-orbital-building-tr-control").toClassic building.Invalidate() guid.register(building, number = 1) diff --git a/src/test/scala/objects/ResourceSiloTest.scala b/src/test/scala/objects/ResourceSiloTest.scala index 7e771314bf..894614625c 100644 --- a/src/test/scala/objects/ResourceSiloTest.scala +++ b/src/test/scala/objects/ResourceSiloTest.scala @@ -5,6 +5,7 @@ import akka.actor.{ActorRef, Props} import akka.testkit.TestProbe import base.{ActorTest, FreedContextActorTest} import net.psforever.actors.zone.BuildingActor +import net.psforever.actors.zone.building.MajorFacilityLogic import net.psforever.objects.guid.NumberPoolHub import net.psforever.objects.guid.source.MaxNumberSource import net.psforever.objects.serverobject.CommonMessages @@ -16,6 +17,7 @@ import net.psforever.objects.zones.{Zone, ZoneMap} import net.psforever.types._ import org.specs2.mutable.Specification import net.psforever.objects.avatar.Avatar +import net.psforever.objects.serverobject.structures.participation.MajorFacilityHackParticipation import net.psforever.packet.game.packets.UseItemMessage import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.PlanetsideAttribute @@ -179,7 +181,7 @@ class ResourceSiloControlUseTest extends FreedContextActorTest { ) buildingMap += 6 -> building system.spawn(InterstellarClusterService(Seq(zone)), InterstellarClusterService.InterstellarClusterServiceKey.id) - building.Actor = context.spawn(BuildingActor(zone, building), "integ-fac-test-building-control").toClassic + building.Actor = context.spawn(BuildingActor(zone, building, MajorFacilityLogic), "integ-fac-test-building-control").toClassic building.Invalidate() guid.register(player, number = 1) diff --git a/src/test/scala/objects/ServerObjectBuilderTest.scala b/src/test/scala/objects/ServerObjectBuilderTest.scala index 448633d0d7..a932e69941 100644 --- a/src/test/scala/objects/ServerObjectBuilderTest.scala +++ b/src/test/scala/objects/ServerObjectBuilderTest.scala @@ -3,6 +3,7 @@ package objects import akka.actor.ActorContext import base.FreedContextActorTest +import net.psforever.actors.zone.building.{MajorFacilityLogic, WarpGateLogic} import net.psforever.objects.GlobalDefinitions import net.psforever.objects.guid.NumberPoolHub import net.psforever.objects.serverobject.ServerObjectBuilder @@ -14,7 +15,7 @@ import net.psforever.types.{PlanetSideGUID, Vector3} class BuildingBuilderTest extends FreedContextActorTest { "Building object" should { "build" in { - val structure: (String, Int, Int, Zone, ActorContext) => Building = Building.Structure(StructureType.Building) + val structure: (String, Int, Int, Zone, ActorContext) => Building = Building.Structure(StructureType.Facility, Vector3.Zero, Vector3.Zero, GlobalDefinitions.building, MajorFacilityLogic) val building = FoundationBuilder(structure).Build("building", 10, 10, Zone.Nowhere)(context) assert(building ne null) assert(building.isInstanceOf[Building]) @@ -27,7 +28,7 @@ class BuildingBuilderTest extends FreedContextActorTest { class WarpGateBuilderTest extends FreedContextActorTest { "WarpGate object" should { "build" in { - val structure: (String, Int, Int, Zone, ActorContext) => Building = WarpGate.Structure + val structure: (String, Int, Int, Zone, ActorContext) => Building = WarpGate.Structure(Vector3.Zero, GlobalDefinitions.warpgate, WarpGateLogic) val building = FoundationBuilder(structure).Build("wgate", 10, 10, Zone.Nowhere)(context) assert(building ne null) assert(building.isInstanceOf[WarpGate]) diff --git a/src/test/scala/objects/ZoneTest.scala b/src/test/scala/objects/ZoneTest.scala index 5e4a8a506c..15de44b561 100644 --- a/src/test/scala/objects/ZoneTest.scala +++ b/src/test/scala/objects/ZoneTest.scala @@ -2,7 +2,6 @@ package objects import java.util.concurrent.atomic.AtomicInteger - import akka.actor.ActorContext import base.ActorTest import net.psforever.objects.entity.IdentifiableEntity @@ -19,6 +18,7 @@ import net.psforever.objects.Vehicle import org.specs2.mutable.Specification import akka.actor.typed.scaladsl.adapter._ import net.psforever.actors.zone.ZoneActor +import net.psforever.actors.zone.building.FacilityLogic import net.psforever.objects.avatar.Avatar import net.psforever.services.ServiceManager @@ -150,7 +150,7 @@ class ZoneActorTest extends ActorTest { "Building", buildingGuid = 1, mapId = 1, - FoundationBuilder(Building.Structure(StructureType.Building, Vector3(1, 1, 1))) + FoundationBuilder(Building.Structure(StructureType.Building, Vector3(1, 1, 1), Vector3.Zero, GlobalDefinitions.building, FacilityLogic)) ) addLocalObject(2, SpawnTube.Constructor(Vector3(1, 0, 0), Vector3.Zero)) addLocalObject(3, Terminal.Constructor(Vector3.Zero, GlobalDefinitions.dropship_vehicle_terminal)) @@ -163,7 +163,7 @@ class ZoneActorTest extends ActorTest { "Building", buildingGuid = 5, mapId = 2, - FoundationBuilder(Building.Structure(StructureType.Building)) + FoundationBuilder(Building.Structure(StructureType.Building, Vector3.Zero, Vector3.Zero, GlobalDefinitions.building, FacilityLogic)) ) addLocalObject(6, SpawnTube.Constructor(Vector3.Zero, Vector3.Zero)) linkObjectToBuilding(6, 5) @@ -172,7 +172,7 @@ class ZoneActorTest extends ActorTest { "Building", buildingGuid = 7, mapId = 3, - FoundationBuilder(Building.Structure(StructureType.Building, Vector3(1, 1, 1))) + FoundationBuilder(Building.Structure(StructureType.Building, Vector3(1, 1, 1), Vector3.Zero, GlobalDefinitions.building, FacilityLogic)) ) addLocalObject(8, Terminal.Constructor(Vector3.Zero, GlobalDefinitions.dropship_vehicle_terminal)) addLocalObject(9, SpawnTube.Constructor(Vector3(1, 0, 0), Vector3.Zero)) @@ -248,7 +248,7 @@ class ZonePopulationTest extends ActorTest { assert(zone.Players.size == 1) assert(zone.Players.head == avatar) - zone.Population ! Zone.Population.Leave(avatar, _) + zone.Population ! Zone.Population.Leave(avatar, null) val reply = receiveOne(Duration.create(100, "ms")) assert(reply.isInstanceOf[Zone.Population.PlayerHasLeft]) assert(zone.Players.isEmpty) From 10d8df11dc69b1392b8cdc6f41f7e9947a38426b Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Mon, 14 Sep 2026 17:28:34 -0400 Subject: [PATCH 2/2] zone info is retained by zone entities upon construction; clarification of a zone being a cavern zone or a virtual reality zone, or other --- .../actors/session/AvatarActor.scala | 2 +- .../session/support/ChatOperations.scala | 2 +- .../actors/session/support/SessionData.scala | 8 +- .../WeaponAndProjectileOperations.scala | 8 +- .../session/support/ZoningOperations.scala | 10 +- .../net/psforever/actors/zone/ZoneActor.scala | 4 +- .../scala/net/psforever/objects/Players.scala | 2 +- .../objects/avatar/PlayerControl.scala | 2 +- .../InteractWithRadiationClouds.scala | 2 +- .../serverobject/PlanetSideServerObject.scala | 2 - .../terminals/tabs/EquipmentPage.scala | 2 +- .../terminals/tabs/ExclusionRule.scala | 4 +- .../serverobject/turret/FacilityTurret.scala | 2 +- .../net/psforever/objects/zones/MapInfo.scala | 2 +- .../net/psforever/objects/zones/Zone.scala | 52 +++++++--- .../psforever/objects/zones/ZoneInfo.scala | 98 +++++++++++++++---- .../net/psforever/objects/zones/ZoneMap.scala | 1 - .../services/CavernRotationService.scala | 2 +- .../services/InterstellarClusterService.scala | 2 +- .../scala/net/psforever/zones/Zones.scala | 6 +- .../objects/DeployableBehaviorTest.scala | 11 +-- src/test/scala/objects/DoorTest.scala | 2 +- .../InteractsWithZoneEnvironmentTest.scala | 2 +- .../scala/objects/PlayerControlTest.scala | 5 +- .../scala/objects/TelepadRouterTest.scala | 9 +- .../scala/objects/VehicleControlTest.scala | 15 ++- src/test/scala/service/HartServiceTest.scala | 2 +- .../service/avatar/AvatarActionTest.scala | 2 +- .../service/vehicle/VehicleActionTest.scala | 2 +- 29 files changed, 169 insertions(+), 94 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/AvatarActor.scala b/src/main/scala/net/psforever/actors/session/AvatarActor.scala index 7c74270c25..a0fac489df 100644 --- a/src/main/scala/net/psforever/actors/session/AvatarActor.scala +++ b/src/main/scala/net/psforever/actors/session/AvatarActor.scala @@ -1569,7 +1569,7 @@ class AvatarActor( .foreach { case (item, name) => Avatar.purchaseCooldowns.get(item) match { - case Some(cooldown) if session.get.player.IsInVRZone => () + case Some(cooldown) if session.get.player.Zone.isVR => () //don't update purchase timers for players in VR training zones case Some(cooldown) => //only send for items with cooldowns diff --git a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala index 73c91550bb..804cc36d0c 100644 --- a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala @@ -257,7 +257,7 @@ class ChatOperations( (None, None) } (zoneOpt, lockVal) match { - case (Some(zone), Some(lock)) if zone.map.cavern => + case (Some(zone), Some(lock)) if zone.isACavern => //caverns must be rotated in an order if (lock == 0) { cluster ! InterstellarClusterService.CavernRotation(CavernRotationService.HurryRotationToZoneUnlock(zone.id)) 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 958cd0ed0b..dee6a78318 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionData.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionData.scala @@ -425,7 +425,7 @@ class SessionData( if (obj.spectator && obj != player) { administrativeKick(player) } else { - if (obj.IsInVRZone && obj.Faction == player.Faction) { + if (obj.Zone.isVR && obj.Faction == player.Faction) { //disable self-damage and friendly-fire in VR zones if (obj.CharId != player.CharId) { general.trainingGriefWarning() @@ -437,7 +437,7 @@ class SessionData( case obj: AvatarBot if obj.CanDamage && obj.Actor != Default.Actor => log.info(s"${player.Name} is attacking ${obj.Name}") - if (obj.IsInVRZone && obj.Faction == player.Faction) { + if (obj.Zone.isVR && obj.Faction == player.Faction) { //disable friendly-fire in VR zones general.trainingGriefWarning() } else { @@ -452,7 +452,7 @@ class SessionData( } else { log.info(s"$name is attacking $ownerName's ${obj.Definition.Name}") } - if (obj.IsInVRZone && obj.Faction == player.Faction) { + if (obj.Zone.isVR && obj.Faction == player.Faction) { //disable self-damage and friendly-fire in VR zones if (!ownerName.equals(name)) { general.trainingGriefWarning() @@ -462,7 +462,7 @@ class SessionData( } case obj: Amenity if obj.CanDamage => - if (obj.IsInVRZone && obj.Faction == player.Faction) { + if (obj.Zone.isVR && obj.Faction == player.Faction) { //disable friendly-fire in VR zones } else { obj.Actor ! Vitality.Damage(func) diff --git a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala index 405efe4bba..3eedb3f21e 100644 --- a/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/WeaponAndProjectileOperations.scala @@ -423,7 +423,7 @@ class WeaponAndProjectileOperations( } else { equipment foreach { case obj: ConstructionItem => - val certifications = if (player.IsInVRZone) GlobalDefinitions.vrZoneTempEngineeringCerts() else player.avatar.certifications + val certifications = if (player.Zone.isVR) GlobalDefinitions.vrZoneTempEngineeringCerts() else player.avatar.certifications if (Deployables.performConstructionItemAmmoChange(certifications, obj, obj.AmmoTypeIndex)) { log.info( s"${player.Name} switched ${player.Sex.possessive} ${obj.Definition.Name} to construct ${obj.AmmoType} (option #${obj.FireModeIndex})" @@ -452,7 +452,7 @@ class WeaponAndProjectileOperations( val originalModeIndex = obj.FireModeIndex if (obj match { case citem: ConstructionItem => - val certifications = if (player.IsInVRZone) GlobalDefinitions.vrZoneTempEngineeringCerts() else player.avatar.certifications + val certifications = if (player.Zone.isVR) GlobalDefinitions.vrZoneTempEngineeringCerts() else player.avatar.certifications val modeChanged = Deployables.performConstructionItemFireModeChange( certifications, citem, @@ -1095,7 +1095,7 @@ class WeaponAndProjectileOperations( def fireStateStartMountedMessages(itemGuid: PlanetSideGUID): Unit = { sessionLogic.findContainedEquipment()._1.collect { - case turret: FacilityTurret if continent.map.cavern => + case turret: FacilityTurret if continent.isACavern => turret.Actor ! VanuSentry.ChangeFireStart } continent.VehicleEvents ! MessageEnvelope( @@ -1136,7 +1136,7 @@ class WeaponAndProjectileOperations( def fireStateStopMountedMessages(itemGuid: PlanetSideGUID): Unit = { sessionLogic.findContainedEquipment()._1.collect { - case turret: FacilityTurret if continent.map.cavern => + case turret: FacilityTurret if continent.isACavern => turret.Actor ! VanuSentry.ChangeFireStop } continent.VehicleEvents ! MessageEnvelope( 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 1cd0584021..a6aed01132 100644 --- a/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ZoningOperations.scala @@ -625,7 +625,7 @@ class ZoningOperations( //CaptureFlagUpdateMessage() //VanuModuleUpdateMessage() //ModuleLimitsMessage() - val isCavern = zone.map.cavern + val isCavern = zone.isACavern if (!isCavern) { sendResponse(ZoneInfoMessage(continentNumber, empire_status = true, 0L)) } @@ -1043,7 +1043,7 @@ class ZoningOperations( def ZoningStartInitialMessageAndTimer(): (Int, String) = { val location = if (Zones.sanctuaryZoneNumber(player.Faction) == continent.Number) { Zoning.Time.Sanctuary - } else if (player.IsInVRZone) { + } else if (player.Zone.isVR) { continent.id match { case "tzshtr" | "tzdrtr" | "tzcotr" => if (player.Faction == PlanetSideEmpire.TR) Zoning.Time.Friendly else Zoning.Time.None @@ -1347,7 +1347,7 @@ class ZoningOperations( ICS.FindZone(_.id.equals(zoneId), context.self) )) } else if (player.HasGUID) { - if (zoneId.startsWith("tz") || player.IsInVRZone) { + if (zoneId.startsWith("tz") || player.Zone.isVR) { // reset the players loadout when entering or exiting any VR Training zone // this is to prevent both entering the VR Driving Area with an ExoSuit too heavy to drive, // or smuggling special equipment out of the VR Shooting Range @@ -2188,7 +2188,7 @@ class ZoningOperations( _.faction == pfaction } val noFriendlyPlayersInZone = friendlyPlayersInZone == 0 - if (inZone.map.cavern) { + if (inZone.isACavern) { enqueueNewActivity(ActivityQueuedTask( SpawnOperations.sendEventMessage(ChatMsg(ChatMessageType.CMT_QUIT, "@reset_sanctuary_locked")), 20) ) //You have been returned to the sanctuary because the location you logged out is not available. @@ -3276,7 +3276,7 @@ class ZoningOperations( case _ if player.HasGUID => // player is deconstructing self or instant action val player_guid = player.GUID // entering or exiting VR zones uses a fade-out effect for the player instead of the usual green cloud deconstruction effect - val effect = if (player.IsInVRZone || zoneId.startsWith("tz")) 2 else 1 + val effect = if (player.Zone.isVR || zoneId.startsWith("tz")) 2 else 1 sendResponse(ObjectDeleteMessage(player_guid, unk1=effect)) continent.AvatarEvents ! MessageEnvelope( continent.id, diff --git a/src/main/scala/net/psforever/actors/zone/ZoneActor.scala b/src/main/scala/net/psforever/actors/zone/ZoneActor.scala index eff0823437..5f464df430 100644 --- a/src/main/scala/net/psforever/actors/zone/ZoneActor.scala +++ b/src/main/scala/net/psforever/actors/zone/ZoneActor.scala @@ -241,7 +241,7 @@ class ZoneActor( ) } msg.is_hacked match { - case true if building.BuildingType == StructureType.Facility && !zone.map.cavern => + case true if building.BuildingType == StructureType.Facility && !zone.isACavern => zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0)) @@ -251,7 +251,7 @@ class ZoneActor( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 1)) ) - case false if building.BuildingType == StructureType.Facility && !zone.map.cavern && !building.hasCavernLockBenefit => + case false if building.BuildingType == StructureType.Facility && !zone.isACavern && !building.hasCavernLockBenefit => zone.LocalEvents ! MessageEnvelope( zone.id, SendResponse(PlanetsideAttributeMessage(building.GUID, 67, 0)) diff --git a/src/main/scala/net/psforever/objects/Players.scala b/src/main/scala/net/psforever/objects/Players.scala index e703ba5e30..86dac031b0 100644 --- a/src/main/scala/net/psforever/objects/Players.scala +++ b/src/main/scala/net/psforever/objects/Players.scala @@ -163,7 +163,7 @@ object Players { ExoSuitDefinition.Select(exosuit, player.Faction).Permissions match { case Nil => true - case _ if player.IsInVRZone => + case _ if player.Zone.isVR => true case permissions if subtype != 0 => val certs = player.avatar.certifications diff --git a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala index b57ca44575..9749a3584b 100644 --- a/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala +++ b/src/main/scala/net/psforever/objects/avatar/PlayerControl.scala @@ -416,7 +416,7 @@ class PlayerControl(player: Player, avatarActor: typed.ActorRef[AvatarActor.Comm } val hasCavernEquipmentBenefit: Boolean = terminalOpt.exists { terminal => - if (terminal.IsInVRZone) { + if (terminal.Zone.isVR) { true } else { terminal.Owner match { diff --git a/src/main/scala/net/psforever/objects/ballistics/InteractWithRadiationClouds.scala b/src/main/scala/net/psforever/objects/ballistics/InteractWithRadiationClouds.scala index 6a9365de79..8f34d4a233 100644 --- a/src/main/scala/net/psforever/objects/ballistics/InteractWithRadiationClouds.scala +++ b/src/main/scala/net/psforever/objects/ballistics/InteractWithRadiationClouds.scala @@ -28,7 +28,7 @@ class InteractWithRadiationClouds( projectiles .foreach { projectile => val shouldDamage = user match { - case Some(player) if (player.IsInVRZone && target.Faction == player.Faction) => + case Some(player) if (player.Zone.isVR && target.Faction == player.Faction) => //disable self-damage and friendly-fire in VR zones false case Some(player) => diff --git a/src/main/scala/net/psforever/objects/serverobject/PlanetSideServerObject.scala b/src/main/scala/net/psforever/objects/serverobject/PlanetSideServerObject.scala index 494deb6ac6..4373dd9da0 100644 --- a/src/main/scala/net/psforever/objects/serverobject/PlanetSideServerObject.scala +++ b/src/main/scala/net/psforever/objects/serverobject/PlanetSideServerObject.scala @@ -45,8 +45,6 @@ abstract class PlanetSideServerObject actor = ActorRef.noSender out } - - def IsInVRZone: Boolean = Zone.id.startsWith("tz") } object PlanetSideServerObject { diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/EquipmentPage.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/EquipmentPage.scala index db56b0efd0..6f8b68cd6b 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/EquipmentPage.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/EquipmentPage.scala @@ -18,7 +18,7 @@ final case class EquipmentPage(stock: Map[String, () => Equipment]) extends Scru stock.get(msg.item_name) match { case Some(item) => val createdItem = item() - if (!Exclude.exists(_.checkRule(player, msg, createdItem)) || player.IsInVRZone) { + if (!Exclude.exists(_.checkRule(player, msg, createdItem)) || player.Zone.isVR) { Terminal.BuyEquipment(createdItem) } else { Terminal.NoDeal() diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/ExclusionRule.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/ExclusionRule.scala index 4f620e6132..1a0c7a4ba5 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/ExclusionRule.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/tabs/ExclusionRule.scala @@ -74,7 +74,7 @@ case object CavernEquipmentQuestion extends ExclusionRule { obj match { case equipment: Equipment => import net.psforever.objects.serverobject.structures.Building - if(GlobalDefinitions.isCavernWeapon(equipment.Definition) && !player.IsInVRZone) { + if(GlobalDefinitions.isCavernWeapon(equipment.Definition) && !player.Zone.isVR) { (player.Zone.GUID(msg.terminal_guid) match { case Some(term: Amenity) => Some(term.Owner) case _ => None @@ -115,7 +115,7 @@ case object CavernVehicleQuestion extends ExclusionRule { case vehicle: Vehicle => import net.psforever.objects.serverobject.structures.Building val definition = vehicle.Definition - if ((definition == GlobalDefinitions.flail || definition == GlobalDefinitions.switchblade) && !player.IsInVRZone) { + if ((definition == GlobalDefinitions.flail || definition == GlobalDefinitions.switchblade) && !player.Zone.isVR) { (player.Zone.GUID(msg.terminal_guid) match { case Some(term: Amenity) => Some(term.Owner) case _ => None diff --git a/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala b/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala index 4c2537b18b..c3012e048f 100644 --- a/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala +++ b/src/main/scala/net/psforever/objects/serverobject/turret/FacilityTurret.scala @@ -66,7 +66,7 @@ class FacilityTurret(tDef: FacilityTurretDefinition) } override def Owner: AmenityOwner = { - if (Zone.map.cavern) { + if (Zone.isACavern) { Building.NoBuilding } else { super.Owner diff --git a/src/main/scala/net/psforever/objects/zones/MapInfo.scala b/src/main/scala/net/psforever/objects/zones/MapInfo.scala index 303762fc6b..6eb0e6152f 100644 --- a/src/main/scala/net/psforever/objects/zones/MapInfo.scala +++ b/src/main/scala/net/psforever/objects/zones/MapInfo.scala @@ -14,7 +14,7 @@ sealed abstract class MapInfo( val scale: MapScale, val hotSpotSpan: Int, val environment: List[PieceOfEnvironment] -) extends StringEnumEntry {} +) extends StringEnumEntry case object MapInfo extends StringEnum[MapInfo] { diff --git a/src/main/scala/net/psforever/objects/zones/Zone.scala b/src/main/scala/net/psforever/objects/zones/Zone.scala index 5d66a6c9b7..1bcfc6b09b 100644 --- a/src/main/scala/net/psforever/objects/zones/Zone.scala +++ b/src/main/scala/net/psforever/objects/zones/Zone.scala @@ -78,15 +78,39 @@ import scala.concurrent.{Future, Promise} * Dynamic game objects originate from player characters. * (Write more later.) * - * @param id the privileged name that can be used as the second parameter in the packet `LoadMapMessage` - * @param map the map of server objects upon which this `Zone` is based - * @param zoneNumber the numerical index of the `Zone` as it is recognized in a variety of packets; - * also used by `LivePlayerList` to indicate a specific `Zone` - * @see `ZoneMap`
- * `LoadMapMessage`
- * `LivePlayerList` + * @param info predefined information pertaining to the zone + * @param map map of server objects upon which this `Zone` is based + * @see `ZoneMap` + * @see `LoadMapMessage` + * @see `LivePlayerList` */ -class Zone(val id: String, val map: ZoneMap, zoneNumber: Int) { +class Zone(info: DefinedZoneInfo, val map: ZoneMap) { + /** + * Overloaded constructor. + * The zone info does not officially exist so an anonymous info ojbect is constructed specifically for this zone. + * @param zoneId privileged name that can be used as the second parameter in the packet `LoadMapMessage` + * @param map map of server objects upon which this `Zone` is based + * @param zoneNumber numerical index of the `Zone` as it is recognized in a variety of packets + * @return a `Zone` object + */ + def this(zoneId: String, map: ZoneMap, zoneNumber: Int) = { + this( + new DefinedZoneInfo { + def value: Int = zoneNumber + def name: String = zoneId + def id: String = zoneId + def mood: ZoneType = ZoneType.Continent + def map: MapInfo = null + def aliases: AliasLookup = ZoneInfo.defaultAliases + }, + map + ) + } + + val id: String = info.id + lazy val isACavern: Boolean = info.mood == ZoneType.Cavern + lazy val isVR: Boolean = info.mood.isInstanceOf[VirtualReality] + /** Governs general synchronized external requests. */ var actor: typed.ActorRef[ZoneActor.Command] = Default.typed.Actor @@ -305,7 +329,7 @@ class Zone(val id: String, val map: ZoneMap, zoneNumber: Int) { * * @return the abstract index position of this `Zone` */ - def Number: Int = zoneNumber + def Number: Int = info.value /** * The globally unique identifier system ensures that concurrent requests do not clash. @@ -885,7 +909,7 @@ object Zone { private def AssignOutwardSideToDoors(zone: Zone): Unit = { //let ZoneActor's sanity check catch any missing entities //todo there are no doors in the training zones so we may skip that - if (zone.map.cavern) { + if (zone.isACavern) { //todo what do? //almost all are type ancient_door and don't have many hints to determine outward-ness; there are no IFF locks } else if ( @@ -1044,7 +1068,7 @@ object Zone { private def AssignSidednessToAmenities(zone: Zone): Unit = { //let ZoneActor's sanity check catch any missing entities //todo training zones, where everything is outside - if (zone.map.cavern) { + if (zone.isACavern) { //todo what do? /* quite a few amenities are disconnected from buildings @@ -1482,7 +1506,7 @@ object Zone { * @return the discovered faction-aligned cavern facility */ def findConnectedCavernFacility(building: Building): Option[Building] = { - if (building.Zone.map.cavern) { + if (building.Zone.isACavern) { None } else { val neighbors = building.AllNeighbours.getOrElse(Set.empty[Building]).toList @@ -1564,7 +1588,7 @@ object Zone { target: WarpGate ): Option[Building] = { WarpGateLogic.findNeighborhoodWarpGate(target.Neighbours.getOrElse(Nil)) match { - case Some(gate) if gate.Zone.map.cavern => + case Some(gate) if gate.Zone.isACavern => WarpGateLogic.findNeighborhoodNormalBuilding(gate.Neighbours(faction).getOrElse(Nil)) case _ => None @@ -1987,7 +2011,7 @@ object Zone { //inform remaining targets that they have suffered damage allAffectedTargets .foreach { target => - if (target.IsInVRZone) { + if (target.Zone.isVR) { //disable all server-side damage in VR zones, unless the target is a bot in the VR Shooting Range target match { case bot: AvatarBot => diff --git a/src/main/scala/net/psforever/objects/zones/ZoneInfo.scala b/src/main/scala/net/psforever/objects/zones/ZoneInfo.scala index f9e289d5d5..15f191623c 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneInfo.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneInfo.scala @@ -7,23 +7,50 @@ final case class AliasLookup( facilities: Map[String, String] = Map() ) +trait ZoneType + +trait Mainland extends ZoneType + +trait VirtualReality extends ZoneType + +object ZoneType { + case object Sanctuary extends ZoneType + case object VirtualRealityForShooting extends VirtualReality + case object VirtualRealityForDriving extends VirtualReality + case object VirtualRealityForCoop extends VirtualReality + case object Continent extends Mainland + case object BattleIsland extends Mainland + case object Cavern extends ZoneType +} + +trait DefinedZoneInfo { + def value: Int + def name: String + def id: String + def map: MapInfo + def mood: ZoneType + def aliases: AliasLookup +} + sealed abstract class ZoneInfo( val value: Int, val name: String, val id: String, val map: MapInfo, - val aliases: AliasLookup = ZoneInfo.defaultAliases, -) extends IntEnumEntry {} + val mood: ZoneType, + val aliases: AliasLookup = ZoneInfo.defaultAliases +) extends IntEnumEntry with DefinedZoneInfo case object ZoneInfo extends IntEnum[ZoneInfo] { - private val defaultAliases = AliasLookup(Nil, Map.empty[String, String]) + final val defaultAliases = AliasLookup(Nil, Map.empty[String, String]) case object Solsar extends ZoneInfo( value = 1, name = "Solsar", id = "z1", - map = MapInfo.Map01 + map = MapInfo.Map01, + mood = ZoneType.Continent ) case object Hossin @@ -31,7 +58,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 2, name = "Hossin", id = "z2", - map = MapInfo.Map02 + map = MapInfo.Map02, + mood = ZoneType.Continent ) case object Cyssor @@ -39,7 +67,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 3, name = "Cyssor", id = "z3", - map = MapInfo.Map03 + map = MapInfo.Map03, + mood = ZoneType.Continent ) case object Ishundar @@ -47,7 +76,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 4, name = "Ishundar", id = "z4", - map = MapInfo.Map04 + map = MapInfo.Map04, + mood = ZoneType.Continent ) case object Forseral @@ -55,7 +85,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 5, name = "Forseral", id = "z5", - map = MapInfo.Map05 + map = MapInfo.Map05, + mood = ZoneType.Continent ) case object Ceryshen @@ -63,7 +94,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 6, name = "Ceryshen", id = "z6", - map = MapInfo.Map06 + map = MapInfo.Map06, + mood = ZoneType.Continent ) case object Esamir @@ -71,7 +103,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 7, name = "Esamir", id = "z7", - map = MapInfo.Map07 + map = MapInfo.Map07, + mood = ZoneType.Continent ) case object Oshur @@ -79,7 +112,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 8, name = "Oshur", id = "z8", - map = MapInfo.Map08 + map = MapInfo.Map08, + mood = ZoneType.Continent ) case object Searhus @@ -87,7 +121,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 9, name = "Searhus", id = "z9", - map = MapInfo.Map09 + map = MapInfo.Map09, + mood = ZoneType.Continent ) case object Amerish @@ -95,7 +130,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 10, name = "Amerish", id = "z10", - map = MapInfo.Map10 + map = MapInfo.Map10, + mood = ZoneType.Continent ) case object NcSanctuary @@ -104,6 +140,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "NC Sanctuary", id = "home1", map = MapInfo.Map11, + mood = ZoneType.Sanctuary, aliases = AliasLookup(zone = Seq("nc-sanctuary")) ) @@ -113,6 +150,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "TR Sanctuary", id = "home2", map = MapInfo.Map12, + mood = ZoneType.Sanctuary, aliases = AliasLookup(zone = Seq("tr-sanctuary")) ) @@ -122,6 +160,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "VS Sanctuary", id = "home3", map = MapInfo.Map13, + mood = ZoneType.Sanctuary, aliases = AliasLookup(zone = Seq("vs-sanctuary")) ) @@ -131,6 +170,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "tzshtr", id = "tzshtr", map = MapInfo.Map14, + mood = ZoneType.VirtualRealityForShooting, aliases = AliasLookup(zone = Seq("tr-shooting")) ) @@ -140,6 +180,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "tzdrtr", id = "tzdrtr", map = MapInfo.Map15, + mood = ZoneType.VirtualRealityForDriving, aliases = AliasLookup(zone = Seq("tr-driving")) ) @@ -148,7 +189,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 16, name = "tzcotr", id = "tzcotr", - map = MapInfo.Map16 + map = MapInfo.Map16, + mood = ZoneType.VirtualRealityForCoop ) case object tzshnc @@ -157,6 +199,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "tzshnc", id = "tzshnc", map = MapInfo.Map14, + mood = ZoneType.VirtualRealityForShooting, aliases = AliasLookup(zone = Seq("nc-shooting")) ) @@ -166,6 +209,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "tzdrnc", id = "tzdrnc", map = MapInfo.Map15, + mood = ZoneType.VirtualRealityForDriving, aliases = AliasLookup(zone = Seq("nc-driving")) ) @@ -174,6 +218,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 19, name = "tzconc", id = "tzconc", + mood = ZoneType.VirtualRealityForCoop, map = MapInfo.Map16 ) @@ -183,6 +228,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "tzshvs", id = "tzshvs", map = MapInfo.Map14, + mood = ZoneType.VirtualRealityForShooting, aliases = AliasLookup(zone = Seq("vs-shooting")) ) @@ -192,6 +238,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "tzdrvs", id = "tzdrvs", map = MapInfo.Map15, + mood = ZoneType.VirtualRealityForDriving, aliases = AliasLookup(zone = Seq("vs-driving")) ) @@ -200,6 +247,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 22, name = "tzcovs", id = "tzcovs", + mood = ZoneType.VirtualRealityForCoop, map = MapInfo.Map16 ) @@ -208,7 +256,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 23, name = "Supai", id = "c1", - map = MapInfo.Ugd01 + map = MapInfo.Ugd01, + mood = ZoneType.Cavern ) case object Hunhau @@ -216,7 +265,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 24, name = "Hunhau", id = "c2", - map = MapInfo.Ugd02 + map = MapInfo.Ugd02, + mood = ZoneType.Cavern ) case object Adlivun @@ -224,7 +274,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 25, name = "Adlivun", id = "c3", - map = MapInfo.Ugd03 + map = MapInfo.Ugd03, + mood = ZoneType.Cavern ) case object Byblos @@ -232,7 +283,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 26, name = "Byblos", id = "c4", - map = MapInfo.Ugd04 + map = MapInfo.Ugd04, + mood = ZoneType.Cavern ) case object Annwn @@ -240,7 +292,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 27, name = "Annwn", id = "c5", - map = MapInfo.Ugd05 + map = MapInfo.Ugd05, + mood = ZoneType.Cavern ) case object Drugaskan @@ -248,7 +301,8 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { value = 28, name = "Drugaskan", id = "c6", - map = MapInfo.Ugd06 + map = MapInfo.Ugd06, + mood = ZoneType.Cavern ) case object Extinction @@ -257,6 +311,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "Extinction", id = "i1", map = MapInfo.Map99, + mood = ZoneType.BattleIsland, aliases = AliasLookup(facilities = Map( ("Mithra", "Blue_Base"), ("Yazata", "Red_Base"), @@ -270,6 +325,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "Ascension", id = "i2", map = MapInfo.Map98, + mood = ZoneType.BattleIsland, aliases = AliasLookup(facilities = Map( ("Zal", "Base_Alpha"), ("Rashnu", "Base_Bravo"), @@ -283,6 +339,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "Desolation", id = "i3", map = MapInfo.Map97, + mood = ZoneType.BattleIsland, aliases = AliasLookup(facilities = Map( ("Dahaka", "Red_Base_97"), ("Jamshid", "Blue_Base_97"), @@ -296,6 +353,7 @@ case object ZoneInfo extends IntEnum[ZoneInfo] { name = "Nexus", id = "i4", map = MapInfo.Map96, + mood = ZoneType.BattleIsland, aliases = AliasLookup(facilities = Map( ("Atar", "Nexus_base") )) diff --git a/src/main/scala/net/psforever/objects/zones/ZoneMap.scala b/src/main/scala/net/psforever/objects/zones/ZoneMap.scala index 573fc6f836..502cceaf69 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneMap.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneMap.scala @@ -33,7 +33,6 @@ class ZoneMap(val name: String) { var localObjects: List[ServerObjectBuilder[_]] = List() var checksum: Long = 0 var zipLinePaths: List[ZipLinePath] = List() - var cavern: Boolean = false var environment: List[PieceOfEnvironment] = List() private var linkTurretWeapon: Map[Int, Int] = Map() private var linkTerminalPad: Map[Int, Int] = Map() diff --git a/src/main/scala/net/psforever/services/CavernRotationService.scala b/src/main/scala/net/psforever/services/CavernRotationService.scala index 8f229f0265..538a1fedf6 100644 --- a/src/main/scala/net/psforever/services/CavernRotationService.scala +++ b/src/main/scala/net/psforever/services/CavernRotationService.scala @@ -423,7 +423,7 @@ class CavernRotationService( */ def manageCaverns(zones: Seq[Zone]): Boolean = { if (managedZones.isEmpty) { - val onlyCaverns = zones.filter{ z => z.map.cavern } + val onlyCaverns = zones.filter{ z => z.isACavern } val collectedZones = Config.app.game.cavernRotation.enhancedRotationOrder match { case Nil => onlyCaverns case list => list.flatMap { index => onlyCaverns.find(_.Number == index ) } diff --git a/src/main/scala/net/psforever/services/InterstellarClusterService.scala b/src/main/scala/net/psforever/services/InterstellarClusterService.scala index 6fe912cd0c..123b51fc94 100644 --- a/src/main/scala/net/psforever/services/InterstellarClusterService.scala +++ b/src/main/scala/net/psforever/services/InterstellarClusterService.scala @@ -300,7 +300,7 @@ class InterstellarClusterService(context: ActorContext[InterstellarClusterServic case DroppodLaunchRequest(zoneNumber, position, faction, replyTo) => zones.find(_.Number == zoneNumber) match { //TODO all of the checks for the specific DroppodLaunchResponseMessage excuses go here - case Some(zone) if zone.map.cavern => + case Some(zone) if zone.isACavern => //just being cautious - caverns are typically not normally selectable as drop zones replyTo ! DroppodLaunchDenial(DroppodError.ZoneNotAvailable, None) case Some(zone) if zone.Number == Zones.sanctuaryZoneNumber(faction) => diff --git a/src/main/scala/net/psforever/zones/Zones.scala b/src/main/scala/net/psforever/zones/Zones.scala index 2ec4693675..29a5170022 100644 --- a/src/main/scala/net/psforever/zones/Zones.scala +++ b/src/main/scala/net/psforever/zones/Zones.scala @@ -253,13 +253,13 @@ object Zones { case (info, data, zplData) => val mapid = info.value val zoneMap = new ZoneMap(mapid) + val expectsACavernZone = info.value.startsWith("ugd") zoneMap.checksum = info.checksum zoneMap.scale = info.scale zoneMap.environment = info.environment zoneMap.zipLinePaths = zplData.toList - zoneMap.cavern = info.value.startsWith("ugd") // This keeps track of the last used turret weapon guid, as they seem to be arbitrarily assigned at 5000+ val turretWeaponGuid = new AtomicInteger(5000) @@ -325,7 +325,7 @@ object Zones { FoundationBuilder(WarpGate.Structure(Vector3(structure.absX, structure.absY, structure.absZ), GlobalDefinitions.warpgate, WarpGateLogic)) ) case _ => - val logic: BuildingLogic = if (zoneMap.cavern) { + val logic: BuildingLogic = if (expectsACavernZone) { CavernFacilityLogic } else if (structureType == StructureType.Facility) { MajorFacilityLogic @@ -774,7 +774,7 @@ object Zones { case _: Exception => defaultGuids } - val zone = new Zone(info.id, zoneMaps.find(_.name.equals(info.map.value)).get, info.value) { + val zone = new Zone(info, zoneMaps.find(_.name.equals(info.map.value)).get) { private val addPoolsFunc: () => Unit = addPools(guids, zone = this) override def SetupNumberPools() : Unit = addPoolsFunc() diff --git a/src/test/scala/objects/DeployableBehaviorTest.scala b/src/test/scala/objects/DeployableBehaviorTest.scala index 74c4dec010..fb55399e90 100644 --- a/src/test/scala/objects/DeployableBehaviorTest.scala +++ b/src/test/scala/objects/DeployableBehaviorTest.scala @@ -12,7 +12,6 @@ import net.psforever.objects.ce.{Deployable, DeployedItem} import net.psforever.objects.guid.NumberPoolHub import net.psforever.objects.guid.source.MaxNumberSource import net.psforever.objects.zones.{Zone, ZoneDeployableActor, ZoneMap} -import net.psforever.packet.game.packets._ import net.psforever.packet.game.packets.{DeployOutcome, DeployableIcon, DeployableInfo, DeploymentAction, GenericObjectActionMessage, ObjectDeployedMessage} import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.{ObjectDelete, SendResponse} @@ -28,7 +27,7 @@ class DeployableBehaviorSetupTest extends ActorTest { val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid=1 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -78,7 +77,7 @@ class DeployableBehaviorSetupOwnedP1Test extends ActorTest { val citem = new ConstructionItem(GlobalDefinitions.ace) //guid = 2 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -124,7 +123,7 @@ class DeployableBehaviorSetupOwnedP2Test extends FreedContextActorTest { val citem = new ConstructionItem(GlobalDefinitions.ace) //guid = 2 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -222,7 +221,7 @@ class DeployableBehaviorDeconstructTest extends ActorTest { val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid = 1 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -273,7 +272,7 @@ class DeployableBehaviorDeconstructOwnedTest extends FreedContextActorTest { val citem = new ConstructionItem(GlobalDefinitions.ace) //guid = 2 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} diff --git a/src/test/scala/objects/DoorTest.scala b/src/test/scala/objects/DoorTest.scala index 48191ec59d..4177192768 100644 --- a/src/test/scala/objects/DoorTest.scala +++ b/src/test/scala/objects/DoorTest.scala @@ -132,7 +132,7 @@ object DoorControlTest { val eventsProbe = new TestProbe(system) val door = Door(GlobalDefinitions.door) val guid = new NumberPoolHub(new MaxNumberSource(5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { override def SetupNumberPools(): Unit = {} GUID(guid) override def LocalEvents: ActorRef = eventsProbe.ref diff --git a/src/test/scala/objects/InteractsWithZoneEnvironmentTest.scala b/src/test/scala/objects/InteractsWithZoneEnvironmentTest.scala index 6528684c2c..e79a0f1714 100644 --- a/src/test/scala/objects/InteractsWithZoneEnvironmentTest.scala +++ b/src/test/scala/objects/InteractsWithZoneEnvironmentTest.scala @@ -25,7 +25,7 @@ class InteractsWithZoneEnvironmentTest extends ActorTest { val testMap = new ZoneMap(name = "test-map") { environment = List(pool1, pool2, pool3) } - new Zone("test-zone", testMap, zoneNumber = 0) { + new Zone(zoneId = "test-zone", testMap, zoneNumber = 0) { override def AvatarEvents: ActorRef = zoneEvents.ref } } diff --git a/src/test/scala/objects/PlayerControlTest.scala b/src/test/scala/objects/PlayerControlTest.scala index 8fb7d9fe14..9cad5bb0fb 100644 --- a/src/test/scala/objects/PlayerControlTest.scala +++ b/src/test/scala/objects/PlayerControlTest.scala @@ -22,7 +22,6 @@ import net.psforever.objects.vital.base.DamageResolution import net.psforever.objects.vital.interaction.DamageInteraction import net.psforever.objects.vital.projectile.ProjectileReason import net.psforever.objects.vital.resolution.ResolutionCalculations.Output -import net.psforever.packet.game.packets._ import net.psforever.packet.game.packets.{DestroyMessage, InventoryStateMessage, RepairMessage} import net.psforever.types._ import net.psforever.services.avatar.AvatarAction @@ -840,7 +839,7 @@ class PlayerControlInteractWithLavaTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool: Pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0)) val zone: Zone = new Zone( - id = "test-map", + zoneId = "test-map", new ZoneMap(name = "test-map") { environment = List(pool) }, @@ -902,7 +901,7 @@ class PlayerControlInteractWithDeathTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool: Pool = Pool(EnvironmentAttribute.Death, DeepSquare(10, 10, 10, 0, 0)) val zone: Zone = new Zone( - id = "test-map", + zoneId = "test-map", new ZoneMap(name = "test-map") { environment = List(pool) }, diff --git a/src/test/scala/objects/TelepadRouterTest.scala b/src/test/scala/objects/TelepadRouterTest.scala index 5b4aadaf3f..2d8dee17b3 100644 --- a/src/test/scala/objects/TelepadRouterTest.scala +++ b/src/test/scala/objects/TelepadRouterTest.scala @@ -14,7 +14,6 @@ import net.psforever.objects.serverobject.deploy.Deployment import net.psforever.objects.vehicles.{Utility, UtilityType} import net.psforever.objects.zones.{Zone, ZoneDeployableActor, ZoneMap} import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent -import net.psforever.packet.game.packets._ import net.psforever.packet.game.packets.{DeployableIcon, DeployableInfo, DeploymentAction, GenericObjectActionMessage, ObjectCreateMessage} import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.message.SendResponse @@ -30,7 +29,7 @@ class TelepadDeployableNoRouterTest extends ActorTest { val telepad = Deployables.Make(DeployedItem.router_telepad_deployable)() //guid=1 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -94,7 +93,7 @@ class TelepadDeployableNoActivationTest extends ActorTest { val internal = router.Utility(UtilityType.internal_router_telepad_deployable).get //guid=3 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -165,7 +164,7 @@ class TelepadDeployableAttemptTest extends ActorTest { val internal = router.Utility(UtilityType.internal_router_telepad_deployable).get //guid=3 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} @@ -227,7 +226,7 @@ class TelepadDeployableResponseFromRouterTest extends FreedContextActorTest { .asInstanceOf[Utility.InternalTelepad] //guid=3 val deployableList = new ListBuffer() val guid = new NumberPoolHub(new MaxNumberSource(max = 5)) - val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap(name = "test"), zoneNumber = 0) { private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList, mutable.HashMap[Int, Int]()), name = "test-zone-deployables") override def SetupNumberPools(): Unit = {} diff --git a/src/test/scala/objects/VehicleControlTest.scala b/src/test/scala/objects/VehicleControlTest.scala index 46c9d2b1ae..f64efddc56 100644 --- a/src/test/scala/objects/VehicleControlTest.scala +++ b/src/test/scala/objects/VehicleControlTest.scala @@ -23,7 +23,6 @@ import net.psforever.objects.vehicles.control.VehicleControl import net.psforever.objects.vehicles.interaction.WithWater import net.psforever.objects.vital.{ShieldCharge, SpawningActivity, Vitality} import net.psforever.objects.zones.{Zone, ZoneMap} -import net.psforever.packet.game.packets._ import net.psforever.packet.game.packets.{CargoMountPointStatusMessage, ObjectDetachMessage, PlanetsideAttributeMessage, TriggerEffectMessage, TriggeredEffectLocation} import net.psforever.services.ServiceManager import net.psforever.services.base.envelope.MessageEnvelope @@ -596,7 +595,7 @@ class VehicleControlInteractWithWaterWadingTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(5, 2, 2, 0, 0)) val zone = new Zone( - id = "test-zone", + zoneId = "test-zone", new ZoneMap(name = "test-map") { environment = List(pool) }, @@ -649,7 +648,7 @@ class VehicleControlInteractWithWaterStartDrowningTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(5, 2, 2, 0, 0)) val zone = new Zone( - id = "test-zone", + zoneId = "test-zone", new ZoneMap(name = "test-map") { environment = List(pool) }, @@ -809,7 +808,7 @@ class VehicleControlInteractWithWaterStopWadingTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(5, 2, 2, 0, 0)) val zone = new Zone( - id = "test-zone", + zoneId = "test-zone", new ZoneMap(name = "test-map") { environment = List(pool) }, @@ -965,7 +964,7 @@ class VehicleControlInteractWithLavaTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Lava, DeepSquare(-1, 10, 10, 0, 0)) val zone = new Zone( - id = "test-zone", + zoneId = "test-zone", new ZoneMap(name = "test-map") { environment = List(pool) }, @@ -1027,7 +1026,7 @@ class VehicleControlInteractWithDeathTest extends ActorTest { val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Death, DeepSquare(5, 10, 10, 0, 0)) val zone = new Zone( - id = "test-zone", + zoneId = "test-zone", new ZoneMap(name = "test-map") { environment = List(pool) }, @@ -1080,7 +1079,7 @@ class ApcControlCanChargeCapacitor extends FreedContextActorTest { val localProbe = TestProbe() val vehicleProbe = TestProbe() val catchall = TestProbe() - val zone = new Zone(id = "test-zone", new ZoneMap(name = "test-map"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test-zone", new ZoneMap(name = "test-map"), zoneNumber = 0) { override def SetupNumberPools(): Unit = {} GUID(guid) override def Vehicles = List(apc) @@ -1128,7 +1127,7 @@ class ApcControlCanEmp extends FreedContextActorTest { val localProbe = TestProbe() val vehicleProbe = TestProbe() val catchall = TestProbe() - val zone = new Zone(id = "test-zone", new ZoneMap(name = "test-map"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test-zone", new ZoneMap(name = "test-map"), zoneNumber = 0) { override def SetupNumberPools(): Unit = {} GUID(guid) override def Vehicles = List(apc, fury) diff --git a/src/test/scala/service/HartServiceTest.scala b/src/test/scala/service/HartServiceTest.scala index c0a4a33c3d..237660fcfd 100644 --- a/src/test/scala/service/HartServiceTest.scala +++ b/src/test/scala/service/HartServiceTest.scala @@ -14,7 +14,7 @@ class HartServiceTest extends ActorTest { "HartService" should { val hart = system.actorOf(Props[HartService](), name = "hart") val catchall = new TestProbe(system).ref - val zone = new Zone("test", new ZoneMap("test"), zoneNumber = 0) { + val zone = new Zone(zoneId = "test", new ZoneMap("test"), zoneNumber = 0) { override def SetupNumberPools(): Unit = {} override def AvatarEvents: ActorRef = catchall override def LocalEvents: ActorRef = catchall diff --git a/src/test/scala/service/avatar/AvatarActionTest.scala b/src/test/scala/service/avatar/AvatarActionTest.scala index 5155e979b2..03bc3f598c 100644 --- a/src/test/scala/service/avatar/AvatarActionTest.scala +++ b/src/test/scala/service/avatar/AvatarActionTest.scala @@ -199,7 +199,7 @@ class AvatarActionTest extends Specification { } "Release" should { - val testZone: Zone = new Zone(id = "test", new ZoneMap( name = "test"), zoneNumber = 1) + val testZone: Zone = new Zone(zoneId = "test", new ZoneMap( name = "test"), zoneNumber = 1) "respond" in { val obj = testPlayer diff --git a/src/test/scala/service/vehicle/VehicleActionTest.scala b/src/test/scala/service/vehicle/VehicleActionTest.scala index 0ee49faf8f..a5d5ad8134 100644 --- a/src/test/scala/service/vehicle/VehicleActionTest.scala +++ b/src/test/scala/service/vehicle/VehicleActionTest.scala @@ -29,7 +29,7 @@ object VehicleActionTest { i += 1 } ams.DeploymentState = DriveState.Deployed - new Zone(id = "test", new ZoneMap( name = "test"), zoneNumber = 1) { + new Zone(zoneId = "test", new ZoneMap( name = "test"), zoneNumber = 1) { override def Vehicles: List[Vehicle] = List(notAms, ams) } }