From 17a8b8bf386ba9245b9a9f10c45bacd9e7e42dcf Mon Sep 17 00:00:00 2001 From: FateJH Date: Sat, 23 Dec 2017 21:08:28 -0500 Subject: [PATCH] Zones: Added continent stubs to InterstellarCluster init list. All Maps and Zones are defined in temporary objects that may be subdivided further as they grow. Builder: Replaced trait ServerObjectBuilder[A] with class ServerObjectBuilder[A] that allows for much greater power. In ZoneMap.Init override, LocalObject invocations that were previously 'LocalBuilder(FooObjectBuilder(ObjectDefintion, Int))` have been transformed into `LocalObject(ServerObjectBuilder(Int, (Int=>Foo))` where `Foo` is the type of object to be created by the curried function `(Int)=>Foo`. The examples with Terminals and the VehicleSpawnPad should demonstrate what kind of power this syntax possesses in isolating constant (or at least initial) configuration settings. At least five files, and some files not yet written, have been rendered obsolete and have been eliminated from the sim pertaining to these created objects. --- .codecov.yml | 2 + .../serverobject/ServerObjectBuilder.scala | 62 ++++++++ .../builders/DoorObjectBuilder.scala | 34 ---- .../builders/IFFLockObjectBuilder.scala | 34 ---- .../ImplantTerminalMechObjectBuilder.scala | 34 ---- .../builders/ServerObjectBuilder.scala | 29 ---- .../builders/TerminalObjectBuilder.scala | 34 ---- .../VehicleSpawnPadObjectBuilder.scala | 35 ---- .../objects/serverobject/doors/Door.scala | 16 ++ .../implantmech/ImplantTerminalMech.scala | 20 +++ .../objects/serverobject/locks/IFFLock.scala | 16 ++ .../serverobject/pad/VehicleSpawnPad.scala | 22 +++ .../serverobject/terminals/Terminal.scala | 30 +++- .../net/psforever/objects/zones/ZoneMap.scala | 2 +- .../objects/ServerObjectBuilderTest.scala | 34 ++-- pslogin/src/main/scala/Maps.scala | 150 ++++++++++++++++++ pslogin/src/main/scala/PsLogin.scala | 123 ++------------ pslogin/src/main/scala/Zones.scala | 77 +++++++++ 18 files changed, 417 insertions(+), 337 deletions(-) create mode 100644 common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala delete mode 100644 common/src/main/scala/net/psforever/objects/serverobject/builders/DoorObjectBuilder.scala delete mode 100644 common/src/main/scala/net/psforever/objects/serverobject/builders/IFFLockObjectBuilder.scala delete mode 100644 common/src/main/scala/net/psforever/objects/serverobject/builders/ImplantTerminalMechObjectBuilder.scala delete mode 100644 common/src/main/scala/net/psforever/objects/serverobject/builders/ServerObjectBuilder.scala delete mode 100644 common/src/main/scala/net/psforever/objects/serverobject/builders/TerminalObjectBuilder.scala delete mode 100644 common/src/main/scala/net/psforever/objects/serverobject/builders/VehicleSpawnPadObjectBuilder.scala create mode 100644 pslogin/src/main/scala/Maps.scala create mode 100644 pslogin/src/main/scala/Zones.scala diff --git a/.codecov.yml b/.codecov.yml index 67d23fb7a..c98c25cfb 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -41,5 +41,7 @@ ignore: - "pslogin/src/main/scala/CryptoSessionActor.scala" - "pslogin/src/main/scala/DatabaseConnector.scala" - "pslogin/src/main/scala/LoginConfig.scala" + - "pslogin/src/main/scala/Maps.scala" - "pslogin/src/main/scala/MDCContextAware.scala" - "pslogin/src/main/scala/MDCPropagatingExecutionContext.scala" + - "pslogin/src/main/scala/Zones.scala" diff --git a/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala new file mode 100644 index 000000000..abc00e160 --- /dev/null +++ b/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala @@ -0,0 +1,62 @@ +// Copyright (c) 2017 PSForever +package net.psforever.objects.serverobject + +import akka.actor.ActorContext +import net.psforever.objects.guid.NumberPoolHub + +/** + * Customizable native entity instantiation logic at the `ZoneMap` level. + * Produces environmental constants such as `Terminal` objects and `Door` objects.
+ *
+ * `ZoneMap` is the expected position where this class is defined. + * Within `Zone.Init` is where this class is expected to be fully executed. + * The former is a blueprint which provides as many emitted entities based on how many `Zone` objects utilize it. + * `constructor` is required to have the form `(Int, ActorContext) => A` by the point where it executes + * due to invocation of the `Build` method. + * For that reason, it must exist in an `Actor` which has an `ActorContext` to lend, hence the `Zone`'s `Actor`. + * Furthermore, the requirement of a `NumberPoolHub` means the region is accessible to and defined by + * a closed number space, which is also the `Zone`. + * It utilizes those qualities of the enclosing region to construct the entity within that region.
+ *
+ * Example: `ServerObjectBuilder(n, function)` + * Example: `new ServerBuilderObject[A](n, function)`, where `function` is a `(Int,Context)=>A` + * @see `ZoneMap` + * @see `Zone.Init` + * @param id the unique id that will be assigned to this entity + * @param constructor the logic that initializes the emitted entity + * @tparam A any object that extends from PlanetSideServerObject that will be produced by this class; + * can be inferred from the output of `constructor` + */ +class ServerObjectBuilder[A <: PlanetSideServerObject](private val id : Int, + private val constructor : (Int, ActorContext) => A + ) { + /** + * Instantiate and configure the given server object. + * Specific configuration should have been handled by curried parameters into `constructor`, i.e., + * `constructor(foo : Bar) => constructor(Int, ActorContext) => A`. + * The main activity performed locally registers the created object to the provided number space. + * @param context a context to allow the object to properly set up `ActorSystem` functionality; + * defaults to `null` + * @param guid the local globally unique identifier system to complete the process of object introduction; + * defaults to `null` + * @return the object that was created and integrated into the `Zone` + */ + def Build(implicit context : ActorContext = null, guid : NumberPoolHub = null) : A = { + val obj : A = constructor(id, context) + guid.register(obj, id) + obj + } +} + +object ServerObjectBuilder { + /** + * Overloaded constructor. + * @param id the unqiue id that will be assigned to this entity + * @param constructor the logic that initializes the emitted entity + * @tparam A any object that extends from PlanetSideServerObject that will be produced by this class + * @return a `ServerObjectBuilder` object + */ + def apply[A <: PlanetSideServerObject](id : Int, constructor : (Int, ActorContext) => A) : ServerObjectBuilder[A] = { + new ServerObjectBuilder[A](id, constructor) + } +} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/builders/DoorObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/builders/DoorObjectBuilder.scala deleted file mode 100644 index d40ff8261..000000000 --- a/common/src/main/scala/net/psforever/objects/serverobject/builders/DoorObjectBuilder.scala +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.objects.serverobject.builders - -import akka.actor.Props -import net.psforever.objects.serverobject.doors.{Door, DoorControl, DoorDefinition} - -/** - * Wrapper `Class` designed to instantiate a `Door` server object. - * @param ddef a `DoorDefinition` object, indicating the specific functionality of the resulting `Door` - * @param id the globally unique identifier to which this `Door` will be registered - */ -class DoorObjectBuilder(private val ddef : DoorDefinition, private val id : Int) extends ServerObjectBuilder[Door] { - import akka.actor.ActorContext - import net.psforever.objects.guid.NumberPoolHub - - def Build(implicit context : ActorContext, guid : NumberPoolHub) : Door = { - val obj = Door(ddef) - guid.register(obj, id) //non-Actor GUID registration - obj.Actor = context.actorOf(Props(classOf[DoorControl], obj), s"${ddef.Name}_${obj.GUID.guid}") - obj - } -} - -object DoorObjectBuilder { - /** - * Overloaded constructor for a `DoorObjectBuilder`. - * @param ddef a `DoorDefinition` object - * @param id a globally unique identifier - * @return a `DoorObjectBuilder` object - */ - def apply(ddef : DoorDefinition, id : Int) : DoorObjectBuilder = { - new DoorObjectBuilder(ddef, id) - } -} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/builders/IFFLockObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/builders/IFFLockObjectBuilder.scala deleted file mode 100644 index 26834d933..000000000 --- a/common/src/main/scala/net/psforever/objects/serverobject/builders/IFFLockObjectBuilder.scala +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.objects.serverobject.builders - -import akka.actor.Props -import net.psforever.objects.serverobject.locks.{IFFLock, IFFLockControl, IFFLockDefinition} - -/** - * Wrapper `Class` designed to instantiate a door lock server object that is sensitive to user faction affiliation. - * @param idef a `IFFLockDefinition` object, indicating the specific functionality - * @param id the globally unique identifier to which this `IFFLock` will be registered - */ -class IFFLockObjectBuilder(private val idef : IFFLockDefinition, private val id : Int) extends ServerObjectBuilder[IFFLock] { - import akka.actor.ActorContext - import net.psforever.objects.guid.NumberPoolHub - - def Build(implicit context : ActorContext, guid : NumberPoolHub) : IFFLock = { - val obj = IFFLock(idef) - guid.register(obj, id) //non-Actor GUID registration - obj.Actor = context.actorOf(Props(classOf[IFFLockControl], obj), s"${idef.Name}_${obj.GUID.guid}") - obj - } -} - -object IFFLockObjectBuilder { - /** - * Overloaded constructor for a `IFFLockObjectBuilder`. - * @param idef an `IFFLock` object - * @param id a globally unique identifier - * @return an `IFFLockObjectBuilder` object - */ - def apply(idef : IFFLockDefinition, id : Int) : IFFLockObjectBuilder = { - new IFFLockObjectBuilder(idef, id) - } -} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/builders/ImplantTerminalMechObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/builders/ImplantTerminalMechObjectBuilder.scala deleted file mode 100644 index 131629443..000000000 --- a/common/src/main/scala/net/psforever/objects/serverobject/builders/ImplantTerminalMechObjectBuilder.scala +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.objects.serverobject.builders - -import akka.actor.Props -import net.psforever.objects.serverobject.implantmech.{ImplantTerminalMech, ImplantTerminalMechControl, ImplantTerminalMechDefinition} - -/** - * Wrapper `Class` designed to instantiate a `ImplantTerminalMech` server object. - * @param idef a `ImplantTerminalMechDefinition` object, indicating the specific functionality of the resulting `Door` - * @param id the globally unique identifier to which this "tube" will be registered - */ -class ImplantTerminalMechObjectBuilder(private val idef : ImplantTerminalMechDefinition, private val id : Int) extends ServerObjectBuilder[ImplantTerminalMech] { - import akka.actor.ActorContext - import net.psforever.objects.guid.NumberPoolHub - - def Build(implicit context : ActorContext, guid : NumberPoolHub) : ImplantTerminalMech = { - val obj = ImplantTerminalMech(idef) - guid.register(obj, id) //non-Actor GUID registration - obj.Actor = context.actorOf(Props(classOf[ImplantTerminalMechControl], obj), s"${idef.Name}_${obj.GUID.guid}") - obj - } -} - -object ImplantTerminalMechObjectBuilder { - /** - * Overloaded constructor for a `DoorObjectBuilder`. - * @param idef a `DoorDefinition` object - * @param id a globally unique identifier - * @return a `DoorObjectBuilder` object - */ - def apply(idef : ImplantTerminalMechDefinition, id : Int) : ImplantTerminalMechObjectBuilder = { - new ImplantTerminalMechObjectBuilder(idef, id) - } -} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/builders/ServerObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/builders/ServerObjectBuilder.scala deleted file mode 100644 index e1bb0ce7b..000000000 --- a/common/src/main/scala/net/psforever/objects/serverobject/builders/ServerObjectBuilder.scala +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.objects.serverobject.builders - -import akka.actor.ActorContext -import net.psforever.objects.PlanetSideGameObject -import net.psforever.objects.guid.NumberPoolHub - -/** - * Wrapper `Trait` designed to be extended to implement custom object instantiation logic at the `ZoneMap` level. - * @tparam A any object that extends from PlanetSideGameObject - * @see `Zone.Init` - */ -//TODO can we changed PlanetSideGameObject -> PlanetSideServerObject? -trait ServerObjectBuilder[A <: PlanetSideGameObject] { - /** - * Instantiate and configure the given server object - * (at a later time compared to the construction of the builder class).
- *
- * Externally, it expects a `context` to properly integrate within an `ActorSystem` - * and is provided with a source for globally unique identifiers to integrate into the `Zone`. - * Neither is required of the `return` type, however. - * @param context a context to allow the object to properly set up `ActorSystem` functionality; - * defaults to `null` - * @param guid the local globally unique identifier system to complete the process of object introduction; - * defaults to `null` - * @return the object that was created and integrated into the `Zone` - */ - def Build(implicit context : ActorContext = null, guid : NumberPoolHub = null) : A -} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/builders/TerminalObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/builders/TerminalObjectBuilder.scala deleted file mode 100644 index d01022d56..000000000 --- a/common/src/main/scala/net/psforever/objects/serverobject/builders/TerminalObjectBuilder.scala +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.objects.serverobject.builders - -import akka.actor.Props -import net.psforever.objects.serverobject.terminals.{Terminal, TerminalControl, TerminalDefinition} - -/** - * Wrapper `Class` designed to instantiate a `Terminal` server object. - * @param tdef a `TerminalDefinition` object, indicating the specific functionality of the resulting `Terminal` - * @param id the globally unique identifier to which this `Terminal` will be registered - */ -class TerminalObjectBuilder(private val tdef : TerminalDefinition, private val id : Int) extends ServerObjectBuilder[Terminal] { - import akka.actor.ActorContext - import net.psforever.objects.guid.NumberPoolHub - - def Build(implicit context : ActorContext, guid : NumberPoolHub) : Terminal = { - val obj = Terminal(tdef) - guid.register(obj, id) //non-Actor GUID registration - obj.Actor = context.actorOf(Props(classOf[TerminalControl], obj), s"${tdef.Name}_${obj.GUID.guid}") - obj - } -} - -object TerminalObjectBuilder { - /** - * Overloaded constructor for a `TerminalObjectBuilder`. - * @param tdef a `TerminalDefinition` object - * @param id a globally unique identifier - * @return a `TerminalObjectBuilder` object - */ - def apply(tdef : TerminalDefinition, id : Int) : TerminalObjectBuilder = { - new TerminalObjectBuilder(tdef, id) - } -} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/builders/VehicleSpawnPadObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/builders/VehicleSpawnPadObjectBuilder.scala deleted file mode 100644 index d50ecd248..000000000 --- a/common/src/main/scala/net/psforever/objects/serverobject/builders/VehicleSpawnPadObjectBuilder.scala +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2017 PSForever -package net.psforever.objects.serverobject.builders - -import akka.actor.Props -import net.psforever.objects.definition.ObjectDefinition -import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad} - -/** - * Wrapper `Class` designed to instantiate a `VehicleSpawnPad` server object. - * @param spdef an `ObjectDefinition` object ... - * @param id the globally unique identifier to which this `VehicleSpawnPad` will be registered - */ -class VehicleSpawnPadObjectBuilder(private val spdef : ObjectDefinition, private val id : Int) extends ServerObjectBuilder[VehicleSpawnPad] { - import akka.actor.ActorContext - import net.psforever.objects.guid.NumberPoolHub - - def Build(implicit context : ActorContext, guid : NumberPoolHub) : VehicleSpawnPad = { - val obj = VehicleSpawnPad(spdef) - guid.register(obj, id) //non-Actor GUID registration - obj.Actor = context.actorOf(Props(classOf[VehicleSpawnControl], obj), s"${spdef.Name}_${obj.GUID.guid}") - obj - } -} - -object VehicleSpawnPadObjectBuilder { - /** - * Overloaded constructor for a `DoorObjectBuilder`. - * @param spdef an `ObjectDefinition` object - * @param id a globally unique identifier - * @return a `VehicleSpawnPadObjectBuilder` object - */ - def apply(spdef : ObjectDefinition, id : Int) : VehicleSpawnPadObjectBuilder = { - new VehicleSpawnPadObjectBuilder(spdef, id) - } -} diff --git a/common/src/main/scala/net/psforever/objects/serverobject/doors/Door.scala b/common/src/main/scala/net/psforever/objects/serverobject/doors/Door.scala index 6ba5abc5b..4e07fe36c 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/doors/Door.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/doors/Door.scala @@ -76,4 +76,20 @@ object Door { def apply(tdef : DoorDefinition) : Door = { new Door(tdef) } + + import akka.actor.ActorContext + /** + * Instantiate an configure a `Door` object + * @param id the unique id that will be assigned to this entity + * @param context a context to allow the object to properly set up `ActorSystem` functionality + * @return the `Door` object + */ + def Constructor(id : Int, context : ActorContext) : Door = { + import akka.actor.Props + import net.psforever.objects.GlobalDefinitions + + val obj = Door(GlobalDefinitions.door) + obj.Actor = context.actorOf(Props(classOf[DoorControl], obj), s"${GlobalDefinitions.door.Name}_$id") + obj + } } diff --git a/common/src/main/scala/net/psforever/objects/serverobject/implantmech/ImplantTerminalMech.scala b/common/src/main/scala/net/psforever/objects/serverobject/implantmech/ImplantTerminalMech.scala index 490c42d63..114a20f30 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/implantmech/ImplantTerminalMech.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/implantmech/ImplantTerminalMech.scala @@ -36,7 +36,27 @@ class ImplantTerminalMech(private val idef : ImplantTerminalMechDefinition) exte } object ImplantTerminalMech { + /** + * Overloaded constructor. + * @param idef the `ObjectDefinition` that constructs this object and maintains some of its immutable fields + */ def apply(idef : ImplantTerminalMechDefinition) : ImplantTerminalMech = { new ImplantTerminalMech(idef) } + + import akka.actor.ActorContext + /** + * Instantiate an configure a `ImplantTerminalMech` object + * @param id the unique id that will be assigned to this entity + * @param context a context to allow the object to properly set up `ActorSystem` functionality + * @return the `ImplantTerminalMech` object + */ + def Constructor(id : Int, context : ActorContext) : ImplantTerminalMech = { + import akka.actor.Props + import net.psforever.objects.GlobalDefinitions + + val obj = ImplantTerminalMech(GlobalDefinitions.implant_terminal_mech) + obj.Actor = context.actorOf(Props(classOf[ImplantTerminalMechControl], obj), s"${GlobalDefinitions.implant_terminal_mech.Name}_$id") + obj + } } diff --git a/common/src/main/scala/net/psforever/objects/serverobject/locks/IFFLock.scala b/common/src/main/scala/net/psforever/objects/serverobject/locks/IFFLock.scala index e08587e85..a1c3380db 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/locks/IFFLock.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/locks/IFFLock.scala @@ -63,4 +63,20 @@ object IFFLock { def apply(idef : IFFLockDefinition) : IFFLock = { new IFFLock(idef) } + + import akka.actor.ActorContext + /** + * Instantiate an configure a `IFFLock` object + * @param id the unique id that will be assigned to this entity + * @param context a context to allow the object to properly set up `ActorSystem` functionality + * @return the `IFFLock` object + */ + def Constructor(id : Int, context : ActorContext) : IFFLock = { + import akka.actor.Props + import net.psforever.objects.GlobalDefinitions + + val obj = IFFLock(GlobalDefinitions.lock_external) + obj.Actor = context.actorOf(Props(classOf[IFFLockControl], obj), s"${GlobalDefinitions.lock_external.Name}_$id") + obj + } } diff --git a/common/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnPad.scala b/common/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnPad.scala index f17ed5690..16c1357c3 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnPad.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/pad/VehicleSpawnPad.scala @@ -86,4 +86,26 @@ object VehicleSpawnPad { def apply(spDef : ObjectDefinition) : VehicleSpawnPad = { new VehicleSpawnPad(spDef) } + + import akka.actor.ActorContext + import net.psforever.types.Vector3 + + /** + * Instantiate an configure a `VehicleSpawnPad` object + * @param pos the position (used to determine spawn point) + * @param orient the orientation (used to indicate spawn direction) + * @param id the unique id that will be assigned to this entity + * @param context a context to allow the object to properly set up `ActorSystem` functionality + * @return the `VehicleSpawnPad` object + */ + def Constructor(pos : Vector3, orient : Vector3)(id : Int, context : ActorContext) : VehicleSpawnPad = { + import akka.actor.Props + import net.psforever.objects.GlobalDefinitions + + val obj = VehicleSpawnPad(GlobalDefinitions.spawn_pad) + obj.Position = pos + obj.Orientation = orient + obj.Actor = context.actorOf(Props(classOf[VehicleSpawnControl], obj), s"${GlobalDefinitions.spawn_pad.Name}_$id") + obj + } } diff --git a/common/src/main/scala/net/psforever/objects/serverobject/terminals/Terminal.scala b/common/src/main/scala/net/psforever/objects/serverobject/terminals/Terminal.scala index 8a03fb597..3fcea10cd 100644 --- a/common/src/main/scala/net/psforever/objects/serverobject/terminals/Terminal.scala +++ b/common/src/main/scala/net/psforever/objects/serverobject/terminals/Terminal.scala @@ -3,11 +3,9 @@ package net.psforever.objects.serverobject.terminals import net.psforever.objects.Player import net.psforever.objects.definition.ImplantDefinition -import net.psforever.objects.equipment.Equipment -import net.psforever.objects.inventory.InventoryItem import net.psforever.objects.serverobject.PlanetSideServerObject import net.psforever.packet.game.{ItemTransactionMessage, PlanetSideGUID} -import net.psforever.types.{ExoSuitType, TransactionType, Vector3} +import net.psforever.types.{TransactionType, Vector3} /** * A structure-owned server object that is a "terminal" that can be accessed for amenities and services. @@ -113,6 +111,8 @@ object Terminal { * A result of a processed request. */ final case class NoDeal() extends Exchange + + import net.psforever.types.ExoSuitType /** * The `Player` exo-suit will be changed to the prescribed one. * The subtype will be important if the user is swapping to an `ExoSuitType.MAX` exo-suit. @@ -121,6 +121,8 @@ object Terminal { * @param subtype the exo-suit subtype, if any */ final case class BuyExosuit(exosuit : ExoSuitType.Value, subtype : Int = 0) extends Exchange + + import net.psforever.objects.equipment.Equipment /** * A single piece of `Equipment` has been selected and will be given to the `Player`. * The `Player` must decide what to do with it once it is in their control. @@ -128,16 +130,15 @@ object Terminal { * @param item the `Equipment` being given to the player */ final case class BuyEquipment(item : Equipment) extends Exchange + /** * A roundabout message oft-times. * Most `Terminals` should always allow `Player`s to dispose of some piece of `Equipment`. * A result of a processed request. */ - //TODO if there are exceptions, find them - final case class SellEquipment() extends Exchange + final case class SellEquipment() extends Exchange //TODO if there are exceptions, find them import net.psforever.types.CertificationType - /** * Provide the certification type unlocked by the player. * @param cert the certification unlocked @@ -172,6 +173,7 @@ object Terminal { */ final case class BuyVehicle(vehicle : Vehicle, loadout: List[Any]) extends Exchange + import net.psforever.objects.inventory.InventoryItem /** * Recover a former exo-suit and `Equipment` configuration that the `Player` possessed. * A result of a processed request. @@ -189,4 +191,20 @@ object Terminal { def apply(tdef : TerminalDefinition) : Terminal = { new Terminal(tdef) } + + import akka.actor.ActorContext + /** + * Instantiate an configure a `Terminal` object + * @param tdef the `ObjectDefinition` that constructs this object and maintains some of its immutable fields + * @param id the unique id that will be assigned to this entity + * @param context a context to allow the object to properly set up `ActorSystem` functionality + * @return the `Terminal` object + */ + def Constructor(tdef : TerminalDefinition)(id : Int, context : ActorContext) : Terminal = { + import akka.actor.Props + + val obj = Terminal(tdef) + obj.Actor = context.actorOf(Props(classOf[TerminalControl], obj), s"${tdef.Name}_$id") + obj + } } diff --git a/common/src/main/scala/net/psforever/objects/zones/ZoneMap.scala b/common/src/main/scala/net/psforever/objects/zones/ZoneMap.scala index f5a68998b..36a5bbe5c 100644 --- a/common/src/main/scala/net/psforever/objects/zones/ZoneMap.scala +++ b/common/src/main/scala/net/psforever/objects/zones/ZoneMap.scala @@ -1,7 +1,7 @@ // Copyright (c) 2017 PSForever package net.psforever.objects.zones -import net.psforever.objects.serverobject.builders.ServerObjectBuilder +import net.psforever.objects.serverobject.ServerObjectBuilder /** * The fixed instantiation and relation of a series of server objects.
diff --git a/common/src/test/scala/objects/ServerObjectBuilderTest.scala b/common/src/test/scala/objects/ServerObjectBuilderTest.scala index a9aa75ba9..9e9a1bc31 100644 --- a/common/src/test/scala/objects/ServerObjectBuilderTest.scala +++ b/common/src/test/scala/objects/ServerObjectBuilderTest.scala @@ -2,23 +2,23 @@ package objects import akka.actor.{Actor, Props} -import net.psforever.objects.GlobalDefinitions +import net.psforever.objects.GlobalDefinitions.order_terminal import net.psforever.objects.guid.NumberPoolHub import net.psforever.packet.game.PlanetSideGUID -import net.psforever.objects.serverobject.builders.ServerObjectBuilder +import net.psforever.objects.serverobject.ServerObjectBuilder +import net.psforever.types.Vector3 import scala.concurrent.duration.Duration class DoorObjectBuilderTest extends ActorTest { import net.psforever.objects.serverobject.doors.Door - import net.psforever.objects.serverobject.builders.DoorObjectBuilder "DoorObjectBuilder" should { "build" in { val hub = ServerObjectBuilderTest.NumberPoolHub - val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], DoorObjectBuilder(GlobalDefinitions.door, 1), hub), "door") + val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, Door.Constructor), hub), "door") actor ! "!" - val reply = receiveOne(Duration.create(100, "ms")) + val reply = receiveOne(Duration.create(1000, "ms")) assert(reply.isInstanceOf[Door]) assert(reply.asInstanceOf[Door].HasGUID) assert(reply.asInstanceOf[Door].GUID == PlanetSideGUID(1)) @@ -29,14 +29,13 @@ class DoorObjectBuilderTest extends ActorTest { class IFFLockObjectBuilderTest extends ActorTest { import net.psforever.objects.serverobject.locks.IFFLock - import net.psforever.objects.serverobject.builders.IFFLockObjectBuilder "IFFLockObjectBuilder" should { "build" in { val hub = ServerObjectBuilderTest.NumberPoolHub - val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], IFFLockObjectBuilder(GlobalDefinitions.lock_external, 1), hub), "lock") + val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, IFFLock.Constructor), hub), "lock") actor ! "!" - val reply = receiveOne(Duration.create(100, "ms")) + val reply = receiveOne(Duration.create(1000, "ms")) assert(reply.isInstanceOf[IFFLock]) assert(reply.asInstanceOf[IFFLock].HasGUID) assert(reply.asInstanceOf[IFFLock].GUID == PlanetSideGUID(1)) @@ -47,14 +46,13 @@ class IFFLockObjectBuilderTest extends ActorTest { class ImplantTerminalMechObjectBuilderTest extends ActorTest { import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech - import net.psforever.objects.serverobject.builders.ImplantTerminalMechObjectBuilder "IFFLockObjectBuilder" should { "build" in { val hub = ServerObjectBuilderTest.NumberPoolHub - val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ImplantTerminalMechObjectBuilder(GlobalDefinitions.implant_terminal_mech, 1), hub), "mech") + val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, ImplantTerminalMech.Constructor), hub), "mech") actor ! "!" - val reply = receiveOne(Duration.create(100, "ms")) + val reply = receiveOne(Duration.create(1000, "ms")) assert(reply.isInstanceOf[ImplantTerminalMech]) assert(reply.asInstanceOf[ImplantTerminalMech].HasGUID) assert(reply.asInstanceOf[ImplantTerminalMech].GUID == PlanetSideGUID(1)) @@ -65,14 +63,13 @@ class ImplantTerminalMechObjectBuilderTest extends ActorTest { class TerminalObjectBuilderTest extends ActorTest { import net.psforever.objects.serverobject.terminals.Terminal - import net.psforever.objects.serverobject.builders.TerminalObjectBuilder "TerminalObjectBuilder" should { "build" in { val hub = ServerObjectBuilderTest.NumberPoolHub - val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], TerminalObjectBuilder(GlobalDefinitions.order_terminal, 1), hub), "term") + val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, Terminal.Constructor(order_terminal)), hub), "term") actor ! "!" - val reply = receiveOne(Duration.create(100, "ms")) + val reply = receiveOne(Duration.create(1000, "ms")) assert(reply.isInstanceOf[Terminal]) assert(reply.asInstanceOf[Terminal].HasGUID) assert(reply.asInstanceOf[Terminal].GUID == PlanetSideGUID(1)) @@ -83,17 +80,20 @@ class TerminalObjectBuilderTest extends ActorTest { class VehicleSpawnPadObjectBuilderTest extends ActorTest { import net.psforever.objects.serverobject.pad.VehicleSpawnPad - import net.psforever.objects.serverobject.builders.VehicleSpawnPadObjectBuilder "TerminalObjectBuilder" should { "build" in { val hub = ServerObjectBuilderTest.NumberPoolHub - val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], VehicleSpawnPadObjectBuilder(GlobalDefinitions.spawn_pad, 1), hub), "pad") + val actor = system.actorOf(Props(classOf[ServerObjectBuilderTest.BuilderTestActor], ServerObjectBuilder(1, + VehicleSpawnPad.Constructor(Vector3(1.1f, 2.2f, 3.3f), Vector3(4.4f, 5.5f, 6.6f)) + ), hub), "pad") actor ! "!" - val reply = receiveOne(Duration.create(100, "ms")) + val reply = receiveOne(Duration.create(1000, "ms")) assert(reply.isInstanceOf[VehicleSpawnPad]) assert(reply.asInstanceOf[VehicleSpawnPad].HasGUID) assert(reply.asInstanceOf[VehicleSpawnPad].GUID == PlanetSideGUID(1)) + assert(reply.asInstanceOf[VehicleSpawnPad].Position == Vector3(1.1f, 2.2f, 3.3f)) + assert(reply.asInstanceOf[VehicleSpawnPad].Orientation == Vector3(4.4f, 5.5f, 6.6f)) assert(reply == hub(1).get) } } diff --git a/pslogin/src/main/scala/Maps.scala b/pslogin/src/main/scala/Maps.scala new file mode 100644 index 000000000..aabb9dcd6 --- /dev/null +++ b/pslogin/src/main/scala/Maps.scala @@ -0,0 +1,150 @@ +// Copyright (c) 2017 PSForever +import net.psforever.objects.zones.ZoneMap +import net.psforever.objects.GlobalDefinitions._ +import net.psforever.objects.serverobject.ServerObjectBuilder +import net.psforever.objects.serverobject.doors.Door +import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech +import net.psforever.objects.serverobject.locks.IFFLock +import net.psforever.objects.serverobject.pad.VehicleSpawnPad +import net.psforever.objects.serverobject.terminals.Terminal +import net.psforever.types.Vector3 + +object Maps { + val map1 = new ZoneMap("map01") + + val map2 = new ZoneMap("map02") + + val map3 = new ZoneMap("map03") + + val map4 = new ZoneMap("map04") + + val map5 = new ZoneMap("map05") + + val map6 = new ZoneMap("map06") + + val map7 = new ZoneMap("map07") + + val map8 = new ZoneMap("map08") + + val map9 = new ZoneMap("map09") + + val map10 = new ZoneMap("map10") + + val map11 = new ZoneMap("map11") + + val map12 = new ZoneMap("map12") + + val map13 = new ZoneMap("map13") { + LocalObject(ServerObjectBuilder(330, Door.Constructor)) + LocalObject(ServerObjectBuilder(332, Door.Constructor)) + LocalObject(ServerObjectBuilder(362, Door.Constructor)) + LocalObject(ServerObjectBuilder(370, Door.Constructor)) + LocalObject(ServerObjectBuilder(371, Door.Constructor)) + LocalObject(ServerObjectBuilder(372, Door.Constructor)) + LocalObject(ServerObjectBuilder(373, Door.Constructor)) + LocalObject(ServerObjectBuilder(374, Door.Constructor)) + LocalObject(ServerObjectBuilder(375, Door.Constructor)) + LocalObject(ServerObjectBuilder(394, Door.Constructor)) + LocalObject(ServerObjectBuilder(395, Door.Constructor)) + LocalObject(ServerObjectBuilder(396, Door.Constructor)) + LocalObject(ServerObjectBuilder(397, Door.Constructor)) + LocalObject(ServerObjectBuilder(398, Door.Constructor)) + LocalObject(ServerObjectBuilder(462, Door.Constructor)) + LocalObject(ServerObjectBuilder(463, Door.Constructor)) + LocalObject(ServerObjectBuilder(520, ImplantTerminalMech.Constructor)) //Hart B + LocalObject(ServerObjectBuilder(522, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(523, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(524, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(525, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(526, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(527, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(528, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(529, ImplantTerminalMech.Constructor)) //Hart C + LocalObject(ServerObjectBuilder(556, IFFLock.Constructor)) + LocalObject(ServerObjectBuilder(558, IFFLock.Constructor)) + LocalObject(ServerObjectBuilder(186, Terminal.Constructor(cert_terminal))) + LocalObject(ServerObjectBuilder(187, Terminal.Constructor(cert_terminal))) + LocalObject(ServerObjectBuilder(188, Terminal.Constructor(cert_terminal))) + LocalObject(ServerObjectBuilder(853, Terminal.Constructor(order_terminal))) + LocalObject(ServerObjectBuilder(855, Terminal.Constructor(order_terminal))) + LocalObject(ServerObjectBuilder(860, Terminal.Constructor(order_terminal))) + LocalObject(ServerObjectBuilder(1081, Terminal.Constructor(implant_terminal_interface))) //tube 520 + LocalObject(ServerObjectBuilder(1082, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1083, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1084, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1085, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1086, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1087, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1088, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1089, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct + LocalObject(ServerObjectBuilder(1063, Terminal.Constructor(ground_vehicle_terminal))) + LocalObject(ServerObjectBuilder(500, + VehicleSpawnPad.Constructor(Vector3(3506.0f, 2820.0f, 92.0f), Vector3(0f, 0f, 270.0f)) + )) //TODO guid not correct + LocalObject(ServerObjectBuilder(304, Terminal.Constructor(dropship_vehicle_terminal))) + LocalObject(ServerObjectBuilder(501, + VehicleSpawnPad.Constructor(Vector3(3508.9844f, 2895.961f, 92.296875f), Vector3(0f, 0f, 270.0f)) + )) //TODO guid not correct + + LocalBases = 30 + + ObjectToBase(330, 29) + ObjectToBase(332, 29) + //ObjectToBase(520, 29) + ObjectToBase(522, 29) + ObjectToBase(523, 29) + ObjectToBase(524, 29) + ObjectToBase(525, 29) + ObjectToBase(526, 29) + ObjectToBase(527, 29) + ObjectToBase(528, 29) + ObjectToBase(529, 29) + ObjectToBase(556, 29) + ObjectToBase(558, 29) + ObjectToBase(1081, 29) + ObjectToBase(1063, 2) //TODO unowned courtyard terminal? + ObjectToBase(500, 2) //TODO unowned courtyard spawnpad? + ObjectToBase(304, 2) //TODO unowned courtyard terminal? + ObjectToBase(501, 2) //TODO unowned courtyard spawnpad? + + DoorToLock(330, 558) + DoorToLock(332, 556) + TerminalToSpawnPad(1063, 500) + TerminalToSpawnPad(304, 501) + TerminalToInterface(520, 1081) + TerminalToInterface(522, 1082) + TerminalToInterface(523, 1083) + TerminalToInterface(524, 1084) + TerminalToInterface(525, 1085) + TerminalToInterface(526, 1086) + TerminalToInterface(527, 1087) + TerminalToInterface(528, 1088) + TerminalToInterface(529, 1089) + } + + val map14 = new ZoneMap("map13") + + val map15 = new ZoneMap("map13") + + val map16 = new ZoneMap("map13") + + val ugd01 = new ZoneMap("ugd01") + + val ugd02 = new ZoneMap("ugd02") + + val ugd03 = new ZoneMap("ugd03") + + val ugd04 = new ZoneMap("ugd04") + + val ugd05 = new ZoneMap("ugd05") + + val ugd06 = new ZoneMap("ugd06") + + val map96 = new ZoneMap("ugd06") + + val map97 = new ZoneMap("map97") + + val map98 = new ZoneMap("map98") + + val map99 = new ZoneMap("map99") +} diff --git a/pslogin/src/main/scala/PsLogin.scala b/pslogin/src/main/scala/PsLogin.scala index 262746f48..05de16046 100644 --- a/pslogin/src/main/scala/PsLogin.scala +++ b/pslogin/src/main/scala/PsLogin.scala @@ -3,7 +3,7 @@ import java.net.InetAddress import java.io.File import java.util.Locale -import akka.actor.{ActorContext, ActorRef, ActorSystem, Props} +import akka.actor.{ActorRef, ActorSystem, Props} import akka.routing.RandomPool import ch.qos.logback.classic.LoggerContext import ch.qos.logback.classic.joran.JoranConfigurator @@ -14,8 +14,6 @@ import com.typesafe.config.ConfigFactory import net.psforever.crypto.CryptoInterface import net.psforever.objects.zones._ import net.psforever.objects.guid.TaskResolver -import net.psforever.objects.serverobject.builders._ -import net.psforever.types.Vector3 import org.slf4j import org.fusesource.jansi.Ansi._ import org.fusesource.jansi.Ansi.Color._ @@ -228,116 +226,15 @@ object PsLogin { } def createContinents() : List[Zone] = { - val map13 = new ZoneMap("map13") { - import net.psforever.objects.GlobalDefinitions._ - - LocalObject(DoorObjectBuilder(door, 330)) - LocalObject(DoorObjectBuilder(door, 332)) - LocalObject(DoorObjectBuilder(door, 362)) - LocalObject(DoorObjectBuilder(door, 370)) - LocalObject(DoorObjectBuilder(door, 371)) - LocalObject(DoorObjectBuilder(door, 372)) - LocalObject(DoorObjectBuilder(door, 373)) - LocalObject(DoorObjectBuilder(door, 374)) - LocalObject(DoorObjectBuilder(door, 375)) - LocalObject(DoorObjectBuilder(door, 394)) - LocalObject(DoorObjectBuilder(door, 395)) - LocalObject(DoorObjectBuilder(door, 396)) - LocalObject(DoorObjectBuilder(door, 397)) - LocalObject(DoorObjectBuilder(door, 398)) - LocalObject(DoorObjectBuilder(door, 462)) - LocalObject(DoorObjectBuilder(door, 463)) - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 520)) //Hart B - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 522)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 523)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 524)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 525)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 526)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 527)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 528)) //Hart C - LocalObject(ImplantTerminalMechObjectBuilder(implant_terminal_mech, 529)) //Hart C - LocalObject(IFFLockObjectBuilder(lock_external, 556)) - LocalObject(IFFLockObjectBuilder(lock_external, 558)) - LocalObject(TerminalObjectBuilder(cert_terminal, 186)) - LocalObject(TerminalObjectBuilder(cert_terminal, 187)) - LocalObject(TerminalObjectBuilder(cert_terminal, 188)) - LocalObject(TerminalObjectBuilder(order_terminal, 853)) - LocalObject(TerminalObjectBuilder(order_terminal, 855)) - LocalObject(TerminalObjectBuilder(order_terminal, 860)) - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1081)) //tube 520 - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1082)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1083)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1084)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1085)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1086)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1087)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1088)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(implant_terminal_interface, 1089)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(ground_vehicle_terminal, 1063)) - LocalObject(VehicleSpawnPadObjectBuilder(spawn_pad, 500)) //TODO guid not correct - LocalObject(TerminalObjectBuilder(dropship_vehicle_terminal, 304)) - LocalObject(VehicleSpawnPadObjectBuilder(spawn_pad, 501)) //TODO guid not correct - - LocalBases = 30 - - ObjectToBase(330, 29) - ObjectToBase(332, 29) - //ObjectToBase(520, 29) - ObjectToBase(522, 29) - ObjectToBase(523, 29) - ObjectToBase(524, 29) - ObjectToBase(525, 29) - ObjectToBase(526, 29) - ObjectToBase(527, 29) - ObjectToBase(528, 29) - ObjectToBase(529, 29) - ObjectToBase(556, 29) - ObjectToBase(558, 29) - ObjectToBase(1081, 29) - ObjectToBase(1063, 2) //TODO unowned courtyard terminal? - ObjectToBase(500, 2) //TODO unowned courtyard spawnpad? - ObjectToBase(304, 2) //TODO unowned courtyard terminal? - ObjectToBase(501, 2) //TODO unowned courtyard spawnpad? - - DoorToLock(330, 558) - DoorToLock(332, 556) - TerminalToSpawnPad(1063, 500) - TerminalToSpawnPad(304, 501) - TerminalToInterface(520, 1081) - TerminalToInterface(522, 1082) - TerminalToInterface(523, 1083) - TerminalToInterface(524, 1084) - TerminalToInterface(525, 1085) - TerminalToInterface(526, 1086) - TerminalToInterface(527, 1087) - TerminalToInterface(528, 1088) - TerminalToInterface(529, 1089) - } - val home3 = new Zone("home3", map13, 13) { - override def Init(implicit context : ActorContext) : Unit = { - super.Init(context) - - import net.psforever.types.PlanetSideEmpire - Base(2).get.Faction = PlanetSideEmpire.VS //HART building C - Base(29).get.Faction = PlanetSideEmpire.NC //South Villa Gun Tower - - GUID(500) match { - case Some(pad) => - pad.Position = Vector3(3506.0f, 2820.0f, 92.0f) - pad.Orientation = Vector3(0f, 0f, 270.0f) - case None => ; - } - GUID(501) match { - case Some(pad) => - pad.Position = Vector3(3508.9844f, 2895.961f, 92.296875f) - pad.Orientation = Vector3(0f, 0f, 270.0f) - case None => ; - } - } - } - - home3 :: - Nil + import Zones._ + List( + z1, z2, z3, z4, z5, z6, z7, z8, z9, z10, + home1, tzshtr, tzdrtr, tzcotr, + home2, tzshnc, tzdrnc, tzconc, + home3, tzshvs, tzdrvs, tzcovs, + c1, c2, c3, c4, c5, c6, + i1, i2, i3, i4 + ) } def main(args : Array[String]) : Unit = { diff --git a/pslogin/src/main/scala/Zones.scala b/pslogin/src/main/scala/Zones.scala new file mode 100644 index 000000000..786d33842 --- /dev/null +++ b/pslogin/src/main/scala/Zones.scala @@ -0,0 +1,77 @@ +// Copyright (c) 2017 PSForever +import akka.actor.ActorContext +import net.psforever.objects.zones.Zone + +object Zones { + val z1 = new Zone("z1", Maps.map1, 1) + + val z2 = new Zone("z2", Maps.map2, 2) + + val z3 = new Zone("z3", Maps.map3, 3) + + val z4 = new Zone("z4", Maps.map4, 4) + + val z5 = new Zone("z5", Maps.map5, 5) + + val z6 = new Zone("z6", Maps.map6, 6) + + val z7 = new Zone("z7", Maps.map7, 7) + + val z8 = new Zone("z8", Maps.map8, 8) + + val z9 = new Zone("z9", Maps.map9, 9) + + val z10 = new Zone("z10", Maps.map10, 10) + + val home1 = new Zone("home1", Maps.map11, 11) + + val home2 = new Zone("home2", Maps.map12, 12) + + val home3 = new Zone("home3", Maps.map13, 13) { + override def Init(implicit context : ActorContext) : Unit = { + super.Init(context) + + import net.psforever.types.PlanetSideEmpire + Base(2).get.Faction = PlanetSideEmpire.VS //HART building C + Base(29).get.Faction = PlanetSideEmpire.NC //South Villa Gun Tower + } + } + + val tzshtr = new Zone("tzshtr", Maps.map14, 14) + + val tzdrtr = new Zone("tzsdrtr", Maps.map15, 15) + + val tzcotr = new Zone("tzcotr", Maps.map16, 16) + + val tzshnc = new Zone("tzshnc", Maps.map14, 17) + + val tzdrnc = new Zone("tzdrnc", Maps.map15, 18) + + val tzconc = new Zone("tzconc", Maps.map16, 19) + + val tzshvs = new Zone("tzshvs", Maps.map14, 20) + + val tzdrvs = new Zone("tzdrvs", Maps.map15, 21) + + val tzcovs = new Zone("tzcovs", Maps.map16, 22) + + val c1 = new Zone("c1", Maps.ugd01, 23) + + val c2 = new Zone("c2", Maps.ugd02, 24) + + val c3 = new Zone("c3", Maps.ugd03, 25) + + val c4 = new Zone("c4", Maps.ugd04, 26) + + val c5 = new Zone("c5", Maps.ugd05, 27) + + val c6 = new Zone("c6", Maps.ugd06, 28) + + val i1 = new Zone("i1", Maps.map96, 29) + + val i2 = new Zone("i2", Maps.map97, 30) + + val i3 = new Zone("i3", Maps.map98, 31) + + val i4 = new Zone("i4", Maps.map99, 32) +}