diff --git a/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala b/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala
index 14c8fbfe..fd0f8f87 100644
--- a/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala
+++ b/common/src/main/scala/net/psforever/objects/GlobalDefinitions.scala
@@ -509,6 +509,8 @@ object GlobalDefinitions {
val vehicle_terminal_combined = new VehicleTerminalCombinedDefinition
+ val spawn_terminal = new SpawnTerminalDefinition
+
val spawn_pad = new VehicleSpawnPadDefinition
val mb_locker = new LockerDefinition
@@ -643,7 +645,7 @@ object GlobalDefinitions {
* @param faction the faction
* @return the `ToolDefinition` for the launcher
*/
- def AntiVehicular(faction : PlanetSideEmpire.Value) : ToolDefinition = {
+ def AntiVehicularLauncher(faction : PlanetSideEmpire.Value) : ToolDefinition = {
faction match {
case PlanetSideEmpire.TR => striker
case PlanetSideEmpire.NC => hunterseeker
diff --git a/common/src/main/scala/net/psforever/objects/Player.scala b/common/src/main/scala/net/psforever/objects/Player.scala
index 6da1a64c..f2a01282 100644
--- a/common/src/main/scala/net/psforever/objects/Player.scala
+++ b/common/src/main/scala/net/psforever/objects/Player.scala
@@ -62,7 +62,6 @@ class Player(private val name : String,
private var backpackAccess : Option[PlanetSideGUID] = None
private var admin : Boolean = false
- private var spectator : Boolean = false
private var vehicleSeated : Option[PlanetSideGUID] = None
private var vehicleOwned : Option[PlanetSideGUID] = None
@@ -526,8 +525,6 @@ class Player(private val name : String,
def Admin : Boolean = admin
- def Spectator : Boolean = spectator
-
def VehicleSeated : Option[PlanetSideGUID] = vehicleSeated
def VehicleSeated_=(guid : PlanetSideGUID) : Option[PlanetSideGUID] = VehicleSeated_=(Some(guid))
@@ -616,11 +613,6 @@ object Player {
player
}
- def Spectate(player : Player, isSpectator : Boolean) : Player = {
- player.spectator = isSpectator
- player
- }
-
def Release(player : Player) : Player = {
if(player.Release) {
val obj = new Player(player.Name, player.Faction, player.Sex, player.Voice, player.Head)
diff --git a/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala b/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala
index abc00e16..de9d15c8 100644
--- a/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala
+++ b/common/src/main/scala/net/psforever/objects/serverobject/ServerObjectBuilder.scala
@@ -18,7 +18,7 @@ import net.psforever.objects.guid.NumberPoolHub
* 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: `ServerObjectBuilder(n, function)`
* Example: `new ServerBuilderObject[A](n, function)`, where `function` is a `(Int,Context)=>A`
* @see `ZoneMap`
* @see `Zone.Init`
@@ -28,7 +28,7 @@ import net.psforever.objects.guid.NumberPoolHub
* can be inferred from the output of `constructor`
*/
class ServerObjectBuilder[A <: PlanetSideServerObject](private val id : Int,
- private val constructor : (Int, ActorContext) => A
+ private val constructor : ServerObjectBuilder.ConstructorType[A]
) {
/**
* Instantiate and configure the given server object.
@@ -49,6 +49,8 @@ class ServerObjectBuilder[A <: PlanetSideServerObject](private val id : Int,
}
object ServerObjectBuilder {
+ type ConstructorType[A <: PlanetSideServerObject] = (Int, ActorContext)=>A
+
/**
* Overloaded constructor.
* @param id the unqiue id that will be assigned to this entity
@@ -56,7 +58,7 @@ object ServerObjectBuilder {
* @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] = {
+ def apply[A <: PlanetSideServerObject](id : Int, constructor : ConstructorType[A]) : ServerObjectBuilder[A] = {
new ServerObjectBuilder[A](id, constructor)
}
}
diff --git a/common/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala b/common/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala
index 84a14c2c..7b078dc9 100644
--- a/common/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala
+++ b/common/src/main/scala/net/psforever/objects/serverobject/structures/Building.scala
@@ -8,12 +8,17 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game.PlanetSideGUID
import net.psforever.types.PlanetSideEmpire
-class Building(private val id : Int, private val zone : Zone) extends PlanetSideServerObject {
+class Building(private val mapId : Int, private val zone : Zone) extends PlanetSideServerObject {
+ /**
+ * The mapId is the identifier number used in BuildingInfoUpdateMessage.
+ * The modelId is the identifier number used in SetEmpireMessage.
+ */
+ private var modelId : Option[Int] = None
private var faction : PlanetSideEmpire.Value = PlanetSideEmpire.NEUTRAL
private var amenities : List[Amenity] = List.empty
GUID = PlanetSideGUID(0)
- def Id : Int = id
+ def Id : Int = mapId
def Faction : PlanetSideEmpire.Value = faction
@@ -32,6 +37,15 @@ class Building(private val id : Int, private val zone : Zone) extends PlanetSide
def Zone : Zone = zone
+ def ModelId : Int = modelId.getOrElse(Id)
+
+ def ModelId_=(id : Int) : Int = ModelId_=(Some(id))
+
+ def ModelId_=(id : Option[Int]) : Int = {
+ modelId = id
+ ModelId
+ }
+
def Definition: ObjectDefinition = Building.BuildingDefinition
}
diff --git a/common/src/main/scala/net/psforever/objects/serverobject/terminals/SpawnTerminalDefinition.scala b/common/src/main/scala/net/psforever/objects/serverobject/terminals/SpawnTerminalDefinition.scala
new file mode 100644
index 00000000..8483a2c3
--- /dev/null
+++ b/common/src/main/scala/net/psforever/objects/serverobject/terminals/SpawnTerminalDefinition.scala
@@ -0,0 +1,15 @@
+// Copyright (c) 2017 PSForever
+package net.psforever.objects.serverobject.terminals
+
+import net.psforever.objects.Player
+import net.psforever.packet.game.ItemTransactionMessage
+
+/**
+ * The definition for any `Terminal` that is of a type "spawn_terminal."
+ * A "spawn_terminal" is somewhat like the `matrix_terminalc` of an advanced mobile spawn unit, but inside of facilities.
+ */
+class SpawnTerminalDefinition extends TerminalDefinition(812) {
+ Name = "spawn_terminal"
+
+ override def Buy(player : Player, msg : ItemTransactionMessage) : Terminal.Exchange = Terminal.NoDeal()
+}
diff --git a/common/src/main/scala/net/psforever/objects/serverobject/tube/SpawnTube.scala b/common/src/main/scala/net/psforever/objects/serverobject/tube/SpawnTube.scala
index 9d9baac9..4bc80f06 100644
--- a/common/src/main/scala/net/psforever/objects/serverobject/tube/SpawnTube.scala
+++ b/common/src/main/scala/net/psforever/objects/serverobject/tube/SpawnTube.scala
@@ -13,22 +13,24 @@ object SpawnTube {
new SpawnTube(tubeDef)
}
-// import akka.actor.ActorContext
-// import net.psforever.types.Vector3
-// /**
-// * Instantiate an configure a `SpawnTube` 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 `SpawnTube` object
-// */
-// def Constructor(pos : Vector3, orient : Vector3)(id : Int, context : ActorContext) : SpawnTube = {
-// import net.psforever.objects.GlobalDefinitions
-//
-// val obj = SpawnTube(GlobalDefinitions.ams_respawn_tube)
-// obj.Position = pos
-// obj.Orientation = orient
-// obj
-// }
+ import akka.actor.ActorContext
+ import net.psforever.types.Vector3
+ /**
+ * Instantiate an configure a `SpawnTube` 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 `SpawnTube` object
+ */
+ def Constructor(pos : Vector3, orient : Vector3)(id : Int, context : ActorContext) : SpawnTube = {
+ import akka.actor.Props
+ import net.psforever.objects.GlobalDefinitions
+
+ val obj = SpawnTube(GlobalDefinitions.ams_respawn_tube)
+ obj.Position = pos
+ obj.Orientation = orient
+ obj.Actor = context.actorOf(Props(classOf[SpawnTubeControl], obj), s"${GlobalDefinitions.ams_respawn_tube.Name}_$id")
+ obj
+ }
}
diff --git a/common/src/main/scala/net/psforever/objects/zones/Zone.scala b/common/src/main/scala/net/psforever/objects/zones/Zone.scala
index f084443d..859aafa2 100644
--- a/common/src/main/scala/net/psforever/objects/zones/Zone.scala
+++ b/common/src/main/scala/net/psforever/objects/zones/Zone.scala
@@ -44,8 +44,8 @@ class Zone(private val zoneId : String, zoneMap : ZoneMap, zoneNumber : Int) {
private var accessor : ActorRef = ActorRef.noSender
/** The basic support structure for the globally unique number system used by this `Zone`. */
private var guid : NumberPoolHub = new NumberPoolHub(new LimitedNumberSource(65536))
- guid.AddPool("environment", (0 to 2000).toList)
- guid.AddPool("dynamic", (2001 to 10000).toList).Selector = new RandomSelector //TODO unlump pools later; do not make too big
+ guid.AddPool("environment", (0 to 3000).toList) //TODO tailer ro suit requirements of zone
+ guid.AddPool("dynamic", (3001 to 10000).toList).Selector = new RandomSelector //TODO unlump pools later; do not make too big
/** A synchronized `List` of items (`Equipment`) dropped by players on the ground and can be collected again. */
private val equipmentOnGround : ListBuffer[Equipment] = ListBuffer[Equipment]()
/** Used by the `Zone` to coordinate `Equipment` dropping and collection requests. */
@@ -66,7 +66,12 @@ class Zone(private val zoneId : String, zoneMap : ZoneMap, zoneNumber : Int) {
* First, the `Actor`-driven aspect of the globally unique identifier system for this `Zone` is finalized.
* Second, all supporting `Actor` agents are created, e.g., `ground`.
* Third, the `ZoneMap` server objects are loaded and constructed within that aforementioned system.
- * To avoid being called more than once, there is a test whether the `accessor` for the globally unique identifier system has been changed.
+ * To avoid being called more than once, there is a test whether the `accessor` for the globally unique identifier system has been changed.
+ *
+ * Execution of this operation should be fail-safe.
+ * The chances of failure should be mitigated or skipped.
+ * An testing routine should be run after the fact on the results of the process.
+ * @see `ZoneActor.ZoneSetupCheck`
* @param context a reference to an `ActorContext` necessary for `Props`
*/
def Init(implicit context : ActorContext) : Unit = {
@@ -76,9 +81,7 @@ class Zone(private val zoneId : String, zoneMap : ZoneMap, zoneNumber : Int) {
ground = context.actorOf(Props(classOf[ZoneGroundActor], equipmentOnGround), s"$Id-ground")
transport = context.actorOf(Props(classOf[ZoneVehicleActor], this), s"$Id-vehicles")
- Map.LocalObjects.foreach({ builderObject =>
- builderObject.Build
- })
+ Map.LocalObjects.foreach({ builderObject => builderObject.Build })
MakeBuildings(context)
AssignAmenities()
}
diff --git a/common/src/main/scala/net/psforever/objects/zones/ZoneActor.scala b/common/src/main/scala/net/psforever/objects/zones/ZoneActor.scala
index af5c06ea..92d36827 100644
--- a/common/src/main/scala/net/psforever/objects/zones/ZoneActor.scala
+++ b/common/src/main/scala/net/psforever/objects/zones/ZoneActor.scala
@@ -29,9 +29,9 @@ class ZoneActor(zone : Zone) extends Actor {
val validateObject : (Int, (PlanetSideGameObject)=>Boolean, String) => Boolean = ValidateObject(guid, slog)
//check base to object associations
- map.ObjectToBuilding.foreach({ case((object_guid, base_id)) =>
- if(zone.Building(base_id).isEmpty) {
- slog.error(s"expected a building at id #$base_id")
+ map.ObjectToBuilding.foreach({ case((object_guid, building_id)) =>
+ if(zone.Building(building_id).isEmpty) {
+ slog.error(s"expected a building at id #$building_id")
}
if(guid(object_guid).isEmpty) {
slog.error(s"expected object id $object_guid to exist, but it did not")
@@ -85,8 +85,8 @@ object ZoneActor {
}
}
catch {
- case _ : Exception =>
- elog.error(s"expected a $description at id $object_guid but no object is initialized")
+ case e : Exception =>
+ elog.error(s"expected a $description at id $object_guid but no object is initialized - $e")
false
}
}
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 d8019274..51ebeafa 100644
--- a/common/src/main/scala/net/psforever/objects/zones/ZoneMap.scala
+++ b/common/src/main/scala/net/psforever/objects/zones/ZoneMap.scala
@@ -2,7 +2,7 @@
package net.psforever.objects.zones
import net.psforever.objects.serverobject.structures.FoundationBuilder
-import net.psforever.objects.serverobject.ServerObjectBuilder
+import net.psforever.objects.serverobject.{PlanetSideServerObject, ServerObjectBuilder}
/**
* The fixed instantiation and relation of a series of server objects.
@@ -44,10 +44,15 @@ class ZoneMap(private val name : String) {
/**
* Append the builder for a server object to the list of builders known to this `ZoneMap`.
- * @param obj the builder for a server object
+ * @param id the unique id that will be assigned to this entity
+ * @param constructor the logic that initializes the emitted entity
+ * @return the current number of builders
*/
- def LocalObject(obj : ServerObjectBuilder[_]) : Unit = {
- localObjects = localObjects :+ obj
+ def LocalObject[A <: PlanetSideServerObject](id : Int, constructor : ServerObjectBuilder.ConstructorType[A]) : Int = {
+ if(id > 0) {
+ localObjects = localObjects :+ ServerObjectBuilder[A](id, constructor)
+ }
+ localObjects.size
}
def LocalBuildings : Map[Int, FoundationBuilder] = buildings
diff --git a/common/src/test/scala/objects/PlayerTest.scala b/common/src/test/scala/objects/PlayerTest.scala
index d082fe2f..facf231c 100644
--- a/common/src/test/scala/objects/PlayerTest.scala
+++ b/common/src/test/scala/objects/PlayerTest.scala
@@ -247,13 +247,4 @@ class PlayerTest extends Specification {
Player.Administrate(obj, false)
obj.Admin mustEqual false
}
-
- "spectate" in {
- val obj = new Player("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, 5)
- obj.Spectator mustEqual false
- Player.Spectate(obj, true)
- obj.Spectator mustEqual true
- Player.Spectate(obj, false)
- obj.Spectator mustEqual false
- }
}
diff --git a/pslogin/src/main/scala/Maps.scala b/pslogin/src/main/scala/Maps.scala
index ab19d2db..72a17cc7 100644
--- a/pslogin/src/main/scala/Maps.scala
+++ b/pslogin/src/main/scala/Maps.scala
@@ -1,7 +1,6 @@
// 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
@@ -9,6 +8,7 @@ import net.psforever.objects.serverobject.mblocker.Locker
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
import net.psforever.objects.serverobject.structures.{Building, FoundationBuilder, WarpGate}
import net.psforever.objects.serverobject.terminals.Terminal
+import net.psforever.objects.serverobject.tube.SpawnTube
import net.psforever.types.Vector3
object Maps {
@@ -23,16 +23,247 @@ object Maps {
val map5 = new ZoneMap("map05")
val map6 = new ZoneMap("map06") {
- //TODO TEST ceryshen
- LocalObject(ServerObjectBuilder(3353, Terminal.Constructor(ground_vehicle_terminal)))
- LocalObject(ServerObjectBuilder(500,
+ LocalBuilding(2, FoundationBuilder(Building.Structure)) //Anguta
+ LocalObject(222, Door.Constructor) //air term building, bay door
+ LocalObject(370, Door.Constructor) //courtyard
+ LocalObject(371, Door.Constructor) //courtyard
+ LocalObject(372, Door.Constructor) //courtyard
+ LocalObject(373, Door.Constructor) //courtyard
+ LocalObject(375, Door.Constructor) //2nd level door
+ LocalObject(376, Door.Constructor) //2nd level door
+ LocalObject(383, Door.Constructor) //courtyard
+ LocalObject(384, Door.Constructor) //3rd floor door
+ LocalObject(385, Door.Constructor) //courtyard
+ LocalObject(387, Door.Constructor) //2nd level door
+ LocalObject(391, Door.Constructor) //courtyard
+ LocalObject(393, Door.Constructor) //air term building, upstairs door
+ LocalObject(394, Door.Constructor) //air term building, f.door
+ LocalObject(396, Door.Constructor) //courtyard
+ LocalObject(398, Door.Constructor) //courtyard
+ LocalObject(399, Door.Constructor) //courtyard
+ LocalObject(402, Door.Constructor) //courtyard
+ LocalObject(403, Door.Constructor) //courtyard
+ LocalObject(404, Door.Constructor) //b.door
+ LocalObject(603, Door.Constructor)
+ LocalObject(604, Door.Constructor)
+ LocalObject(605, Door.Constructor)
+ LocalObject(606, Door.Constructor)
+ LocalObject(607, Door.Constructor)
+ LocalObject(610, Door.Constructor)
+ LocalObject(611, Door.Constructor)
+ LocalObject(614, Door.Constructor)
+ LocalObject(619, Door.Constructor)
+ LocalObject(620, Door.Constructor) //generator room door
+ LocalObject(621, Door.Constructor)
+ LocalObject(622, Door.Constructor) //spawn room door
+ LocalObject(623, Door.Constructor) //spawn room door
+ LocalObject(630, Door.Constructor) //spawn room door
+ LocalObject(631, Door.Constructor) //spawn room door, kitchen
+ LocalObject(634, Door.Constructor) //air term building, interior
+ LocalObject(638, Door.Constructor) //cc door
+ LocalObject(642, Door.Constructor) //cc door, interior
+ LocalObject(643, Door.Constructor) //cc door
+ LocalObject(645, Door.Constructor) //b.door interior
+ LocalObject(646, Door.Constructor) //b.door interior
+ LocalObject(715, Door.Constructor) //f.door
+ LocalObject(1177, Locker.Constructor)
+ LocalObject(1178, Locker.Constructor)
+ LocalObject(1179, Locker.Constructor)
+ LocalObject(1180, Locker.Constructor)
+ LocalObject(1181, Locker.Constructor)
+ LocalObject(1182, Locker.Constructor)
+ LocalObject(1183, Locker.Constructor)
+ LocalObject(1184, Locker.Constructor)
+ LocalObject(1185, Locker.Constructor)
+ LocalObject(1186, Locker.Constructor)
+ LocalObject(1187, Locker.Constructor)
+ LocalObject(1188, Locker.Constructor)
+ LocalObject(1564, Terminal.Constructor(order_terminal))
+ LocalObject(1568, Terminal.Constructor(order_terminal))
+ LocalObject(1569, Terminal.Constructor(order_terminal))
+ LocalObject(1570, Terminal.Constructor(order_terminal))
+ LocalObject(1571, Terminal.Constructor(order_terminal))
+ LocalObject(1576, Terminal.Constructor(order_terminal))
+ LocalObject(1577, Terminal.Constructor(order_terminal))
+ LocalObject(1578, Terminal.Constructor(order_terminal))
+ LocalObject(2145, SpawnTube.Constructor(Vector3(3980.4062f, 4252.7656f, 257.5625f), Vector3(0, 0, 90)))
+ LocalObject(2146, SpawnTube.Constructor(Vector3(3980.4062f, 4259.992f, 257.5625f), Vector3(0, 0, 90)))
+ LocalObject(2147, SpawnTube.Constructor(Vector3(3980.4062f, 4267.3047f, 257.5625f), Vector3(0, 0, 90)))
+ LocalObject(2239, Terminal.Constructor(spawn_terminal))
+ LocalObject(2244, Terminal.Constructor(spawn_terminal))
+ LocalObject(2245, Terminal.Constructor(spawn_terminal))
+ LocalObject(2246, Terminal.Constructor(spawn_terminal))
+ LocalObject(2248, Terminal.Constructor(spawn_terminal))
+ LocalObject(2250, Terminal.Constructor(spawn_terminal))
+ LocalObject(2251, Terminal.Constructor(spawn_terminal))
+ LocalObject(2253, Terminal.Constructor(spawn_terminal))
+ LocalObject(2254, Terminal.Constructor(spawn_terminal))
+ LocalObject(2322, Door.Constructor) //spawn tube door
+ LocalObject(2323, Door.Constructor) //spawn tube door
+ LocalObject(2324, Door.Constructor) //spawn tube door
+ LocalObject(2419, Terminal.Constructor(ground_vehicle_terminal))
+ LocalObject(500,
VehicleSpawnPad.Constructor(Vector3(3962.0f, 4334.0f, 268.0f), Vector3(0f, 0f, 180.0f))
- )) //TODO guid not correct
-
- LocalBuilding(2, FoundationBuilder(Building.Structure))
- ObjectToBuilding(3353, 2)
+ ) //TODO guid not correct
+ LocalObject(224, Terminal.Constructor(dropship_vehicle_terminal))
+ LocalObject(501,
+ VehicleSpawnPad.Constructor(Vector3(4012.3594f, 4364.8047f, 271.90625f), Vector3(0f, 0f, 180.0f))
+ ) //TODO guid not correct
+ ObjectToBuilding(222, 2)
+ ObjectToBuilding(224, 2)
+ ObjectToBuilding(370, 2)
+ ObjectToBuilding(371, 2)
+ ObjectToBuilding(372, 2)
+ ObjectToBuilding(373, 2)
+ ObjectToBuilding(375, 2)
+ ObjectToBuilding(376, 2)
+ ObjectToBuilding(383, 2)
+ ObjectToBuilding(384, 2)
+ ObjectToBuilding(385, 2)
+ ObjectToBuilding(387, 2)
+ ObjectToBuilding(391, 2)
+ ObjectToBuilding(393, 2)
+ ObjectToBuilding(394, 2)
+ ObjectToBuilding(396, 2)
+ ObjectToBuilding(398, 2)
+ ObjectToBuilding(399, 2)
+ ObjectToBuilding(402, 2)
+ ObjectToBuilding(403, 2)
+ ObjectToBuilding(404, 2)
+ ObjectToBuilding(603, 2)
+ ObjectToBuilding(604, 2)
+ ObjectToBuilding(605, 2)
+ ObjectToBuilding(606, 2)
+ ObjectToBuilding(607, 2)
+ ObjectToBuilding(610, 2)
+ ObjectToBuilding(611, 2)
+ ObjectToBuilding(614, 2)
+ ObjectToBuilding(619, 2)
+ ObjectToBuilding(620, 2)
+ ObjectToBuilding(621, 2)
+ ObjectToBuilding(622, 2)
+ ObjectToBuilding(623, 2)
+ ObjectToBuilding(630, 2)
+ ObjectToBuilding(631, 2)
+ ObjectToBuilding(634, 2)
+ ObjectToBuilding(638, 2)
+ ObjectToBuilding(642, 2)
+ ObjectToBuilding(643, 2)
+ ObjectToBuilding(645, 2)
+ ObjectToBuilding(646, 2)
+ ObjectToBuilding(715, 2)
+ ObjectToBuilding(1177, 2)
+ ObjectToBuilding(1178, 2)
+ ObjectToBuilding(1179, 2)
+ ObjectToBuilding(1180, 2)
+ ObjectToBuilding(1181, 2)
+ ObjectToBuilding(1182, 2)
+ ObjectToBuilding(1183, 2)
+ ObjectToBuilding(1184, 2)
+ ObjectToBuilding(1185, 2)
+ ObjectToBuilding(1186, 2)
+ ObjectToBuilding(1187, 2)
+ ObjectToBuilding(1188, 2)
+ ObjectToBuilding(1564, 2)
+ ObjectToBuilding(1568, 2)
+ ObjectToBuilding(1569, 2)
+ ObjectToBuilding(1570, 2)
+ ObjectToBuilding(1571, 2)
+ ObjectToBuilding(1576, 2)
+ ObjectToBuilding(1577, 2)
+ ObjectToBuilding(1578, 2)
+ ObjectToBuilding(2145, 2)
+ ObjectToBuilding(2146, 2)
+ ObjectToBuilding(2147, 2)
+ ObjectToBuilding(2239, 2)
+ ObjectToBuilding(2244, 2)
+ ObjectToBuilding(2245, 2)
+ ObjectToBuilding(2246, 2)
+ ObjectToBuilding(2248, 2)
+ ObjectToBuilding(2250, 2)
+ ObjectToBuilding(2251, 2)
+ ObjectToBuilding(2253, 2)
+ ObjectToBuilding(2254, 2)
+ ObjectToBuilding(2322, 2)
+ ObjectToBuilding(2323, 2)
+ ObjectToBuilding(2324, 2)
+ ObjectToBuilding(2419, 2)
ObjectToBuilding(500, 2)
- TerminalToSpawnPad(3353, 500)
+ ObjectToBuilding(501, 2)
+ TerminalToSpawnPad(224, 501)
+ TerminalToSpawnPad(2419, 500)
+
+ LocalBuilding(38, FoundationBuilder(Building.Structure)) //Anguta, West Bunker
+ LocalObject(362, Door.Constructor)
+ ObjectToBuilding(362, 38)
+
+ LocalBuilding(42, FoundationBuilder(Building.Structure)) //Anguta, East Bunker(s)
+ LocalObject(407, Door.Constructor)
+ LocalObject(408, Door.Constructor)
+ ObjectToBuilding(407, 42)
+ ObjectToBuilding(408, 42)
+
+ LocalBuilding(48, FoundationBuilder(Building.Structure)) //North Anguta Watchtower
+ LocalObject(364, Door.Constructor(Vector3(3871.9688f, 4509.992f, 269.65625f), Vector3(0f, 0f, 180f))) //s1
+ LocalObject(365, Door.Constructor(Vector3(3871.9688f, 4509.992f, 279.57812f), Vector3(0f, 0f, 180f))) //s2
+ LocalObject(366, Door.Constructor(Vector3(3871.9688f, 4509.992f, 299.57812f), Vector3(0f, 0f, 180f))) //s3
+ LocalObject(367, Door.Constructor(Vector3(3871.9688f, 4525.9844f, 269.65625f), Vector3(0f, 0f, 0f))) //n1
+ LocalObject(368, Door.Constructor(Vector3(3871.9688f, 4525.9844f, 279.57812f), Vector3(0f, 0f, 0f))) //n2
+ LocalObject(369, Door.Constructor(Vector3(3871.9688f, 4525.9844f, 299.57812f), Vector3(0f, 0f, 0f))) //n3
+ LocalObject(854, IFFLock.Constructor)
+ LocalObject(855, IFFLock.Constructor)
+ LocalObject(856, IFFLock.Constructor)
+ LocalObject(857, IFFLock.Constructor)
+ LocalObject(858, IFFLock.Constructor)
+ LocalObject(859, IFFLock.Constructor)
+ LocalObject(1140, Locker.Constructor)
+ LocalObject(1141, Locker.Constructor)
+ LocalObject(1142, Locker.Constructor)
+ LocalObject(1143, Locker.Constructor)
+ LocalObject(1144, Locker.Constructor)
+ LocalObject(1145, Locker.Constructor)
+ LocalObject(1146, Locker.Constructor)
+ LocalObject(1147, Locker.Constructor)
+ LocalObject(1561, Terminal.Constructor(order_terminal))
+ LocalObject(1562, Terminal.Constructor(order_terminal))
+ LocalObject(1563, Terminal.Constructor(order_terminal))
+ LocalObject(2138, SpawnTube.Constructor(Vector3(3870.9688f, 4505.7266f, 259.875f), Vector3(0, 0, 90)))
+ LocalObject(2139, SpawnTube.Constructor(Vector3(3870.9688f, 4522.1562f, 259.875f), Vector3(0, 0, 90)))
+ LocalObject(2315, Door.Constructor) //spawn tube door
+ LocalObject(2316, Door.Constructor) //spawn tube door
+ ObjectToBuilding(364, 48)
+ ObjectToBuilding(365, 48)
+ ObjectToBuilding(366, 48)
+ ObjectToBuilding(367, 48)
+ ObjectToBuilding(368, 48)
+ ObjectToBuilding(369, 48)
+ ObjectToBuilding(854, 48)
+ ObjectToBuilding(855, 48)
+ ObjectToBuilding(856, 48)
+ ObjectToBuilding(857, 48)
+ ObjectToBuilding(858, 48)
+ ObjectToBuilding(859, 48)
+ ObjectToBuilding(1140, 48)
+ ObjectToBuilding(1141, 48)
+ ObjectToBuilding(1142, 48)
+ ObjectToBuilding(1143, 48)
+ ObjectToBuilding(1144, 48)
+ ObjectToBuilding(1145, 48)
+ ObjectToBuilding(1146, 48)
+ ObjectToBuilding(1147, 48)
+ ObjectToBuilding(1561, 48)
+ ObjectToBuilding(1562, 48)
+ ObjectToBuilding(1563, 48)
+ ObjectToBuilding(2138, 48)
+ ObjectToBuilding(2139, 48)
+ ObjectToBuilding(2315, 48)
+ ObjectToBuilding(2316, 48)
+ DoorToLock(364, 857)
+ DoorToLock(365, 858)
+ DoorToLock(366, 859)
+ DoorToLock(367, 854)
+ DoorToLock(368, 855)
+ DoorToLock(369, 856)
}
val map7 = new ZoneMap("map07")
@@ -52,63 +283,69 @@ object Maps {
LocalBuilding(2, FoundationBuilder(WarpGate.Structure))
LocalBuilding(3, FoundationBuilder(WarpGate.Structure))
- LocalObject(ServerObjectBuilder(372, Door.Constructor))
- LocalObject(ServerObjectBuilder(373, Door.Constructor))
-
- LocalObject(ServerObjectBuilder(520, ImplantTerminalMech.Constructor)) //Hart B
- 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(520, ImplantTerminalMech.Constructor) //Hart B
+ LocalObject(1081, Terminal.Constructor(implant_terminal_interface)) //tube 520
TerminalToInterface(520, 1081)
LocalBuilding(2, FoundationBuilder(Building.Structure)) //HART building C
- LocalObject(ServerObjectBuilder(186, Terminal.Constructor(cert_terminal)))
- LocalObject(ServerObjectBuilder(187, Terminal.Constructor(cert_terminal)))
- LocalObject(ServerObjectBuilder(188, Terminal.Constructor(cert_terminal)))
- LocalObject(ServerObjectBuilder(362, Door.Constructor))
- LocalObject(ServerObjectBuilder(370, Door.Constructor))
- LocalObject(ServerObjectBuilder(371, 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(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(686, Locker.Constructor))
- LocalObject(ServerObjectBuilder(687, Locker.Constructor))
- LocalObject(ServerObjectBuilder(688, Locker.Constructor))
- LocalObject(ServerObjectBuilder(689, Locker.Constructor))
- LocalObject(ServerObjectBuilder(690, Locker.Constructor))
- LocalObject(ServerObjectBuilder(691, Locker.Constructor))
- LocalObject(ServerObjectBuilder(692, Locker.Constructor))
- LocalObject(ServerObjectBuilder(693, Locker.Constructor))
- LocalObject(ServerObjectBuilder(842, Terminal.Constructor(order_terminal)))
- LocalObject(ServerObjectBuilder(843, Terminal.Constructor(order_terminal)))
- LocalObject(ServerObjectBuilder(844, Terminal.Constructor(order_terminal)))
- LocalObject(ServerObjectBuilder(845, Terminal.Constructor(order_terminal)))
- 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(186, Terminal.Constructor(cert_terminal))
+ LocalObject(187, Terminal.Constructor(cert_terminal))
+ LocalObject(188, Terminal.Constructor(cert_terminal))
+ LocalObject(362, Door.Constructor)
+ LocalObject(370, Door.Constructor)
+ LocalObject(371, Door.Constructor)
+ LocalObject(372, Door.Constructor)
+ LocalObject(373, Door.Constructor)
+ LocalObject(374, Door.Constructor)
+ LocalObject(375, Door.Constructor)
+ LocalObject(394, Door.Constructor)
+ LocalObject(395, Door.Constructor)
+ LocalObject(396, Door.Constructor)
+ LocalObject(397, Door.Constructor)
+ LocalObject(398, Door.Constructor)
+ LocalObject(522, ImplantTerminalMech.Constructor)
+ LocalObject(523, ImplantTerminalMech.Constructor)
+ LocalObject(524, ImplantTerminalMech.Constructor)
+ LocalObject(525, ImplantTerminalMech.Constructor)
+ LocalObject(526, ImplantTerminalMech.Constructor)
+ LocalObject(527, ImplantTerminalMech.Constructor)
+ LocalObject(528, ImplantTerminalMech.Constructor)
+ LocalObject(529, ImplantTerminalMech.Constructor)
+ LocalObject(686, Locker.Constructor)
+ LocalObject(687, Locker.Constructor)
+ LocalObject(688, Locker.Constructor)
+ LocalObject(689, Locker.Constructor)
+ LocalObject(690, Locker.Constructor)
+ LocalObject(691, Locker.Constructor)
+ LocalObject(692, Locker.Constructor)
+ LocalObject(693, Locker.Constructor)
+ LocalObject(842, Terminal.Constructor(order_terminal))
+ LocalObject(843, Terminal.Constructor(order_terminal))
+ LocalObject(844, Terminal.Constructor(order_terminal))
+ LocalObject(845, Terminal.Constructor(order_terminal))
+ LocalObject(1082, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1083, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1084, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1085, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1086, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1087, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1088, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
+ LocalObject(1089, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
ObjectToBuilding(186, 2)
ObjectToBuilding(187, 2)
ObjectToBuilding(188, 2)
+ ObjectToBuilding(362, 2)
+ ObjectToBuilding(370, 2)
+ ObjectToBuilding(371, 2)
+ ObjectToBuilding(372, 2)
+ ObjectToBuilding(373, 2)
+ ObjectToBuilding(374, 2)
+ ObjectToBuilding(375, 2)
+ ObjectToBuilding(394, 2)
+ ObjectToBuilding(395, 2)
+ ObjectToBuilding(396, 2)
+ ObjectToBuilding(397, 2)
+ ObjectToBuilding(398, 2)
ObjectToBuilding(522, 2)
ObjectToBuilding(523, 2)
ObjectToBuilding(524, 2)
@@ -147,14 +384,14 @@ object Maps {
TerminalToInterface(529, 1089)
LocalBuilding(29, FoundationBuilder(Building.Structure)) //South Villa Gun Tower
- LocalObject(ServerObjectBuilder(330, Door.Constructor(Vector3(3979.9219f, 2592.0547f, 91.140625f), Vector3(0, 0, 180))))
- LocalObject(ServerObjectBuilder(331, Door.Constructor(Vector3(3979.9219f, 2592.0547f, 111.140625f), Vector3(0, 0, 180))))
- LocalObject(ServerObjectBuilder(332, Door.Constructor(Vector3(3979.9688f, 2608.0625f, 91.140625f), Vector3(0, 0, 0))))
- LocalObject(ServerObjectBuilder(333, Door.Constructor(Vector3(3979.9688f, 2608.0625f, 111.140625f), Vector3(0, 0, 0))))
- LocalObject(ServerObjectBuilder(556, IFFLock.Constructor))
- LocalObject(ServerObjectBuilder(557, IFFLock.Constructor))
- LocalObject(ServerObjectBuilder(558, IFFLock.Constructor))
- LocalObject(ServerObjectBuilder(559, IFFLock.Constructor))
+ LocalObject(330, Door.Constructor(Vector3(3979.9219f, 2592.0547f, 91.140625f), Vector3(0, 0, 180)))
+ LocalObject(331, Door.Constructor(Vector3(3979.9219f, 2592.0547f, 111.140625f), Vector3(0, 0, 180)))
+ LocalObject(332, Door.Constructor(Vector3(3979.9688f, 2608.0625f, 91.140625f), Vector3(0, 0, 0)))
+ LocalObject(333, Door.Constructor(Vector3(3979.9688f, 2608.0625f, 111.140625f), Vector3(0, 0, 0)))
+ LocalObject(556, IFFLock.Constructor)
+ LocalObject(557, IFFLock.Constructor)
+ LocalObject(558, IFFLock.Constructor)
+ LocalObject(559, IFFLock.Constructor)
ObjectToBuilding(330, 29)
ObjectToBuilding(331, 29)
ObjectToBuilding(332, 29)
@@ -169,26 +406,34 @@ object Maps {
DoorToLock(333, 557)
LocalBuilding(51, FoundationBuilder(Building.Structure))
- LocalObject(ServerObjectBuilder(304, Terminal.Constructor(dropship_vehicle_terminal)))
- LocalObject(ServerObjectBuilder(292,
+ LocalObject(304, Terminal.Constructor(dropship_vehicle_terminal))
+ LocalObject(292,
VehicleSpawnPad.Constructor(Vector3(3508.9844f, 2895.961f, 92.296875f), Vector3(0f, 0f, 270.0f))
- ))
+ )
ObjectToBuilding(304, 51)
ObjectToBuilding(292, 51)
TerminalToSpawnPad(304, 292)
LocalBuilding(77, FoundationBuilder(Building.Structure))
- LocalObject(ServerObjectBuilder(1063, Terminal.Constructor(ground_vehicle_terminal)))
- LocalObject(ServerObjectBuilder(706,
+ LocalObject(1063, Terminal.Constructor(ground_vehicle_terminal))
+ LocalObject(706,
VehicleSpawnPad.Constructor(Vector3(3506.0f, 2820.0f, 92.0f), Vector3(0f, 0f, 270.0f))
- ))
+ )
ObjectToBuilding(1063, 77)
ObjectToBuilding(706, 77)
TerminalToSpawnPad(1063, 706)
- ObjectToBuilding(853, 2) //TODO check building_id
- ObjectToBuilding(855, 2) //TODO check building_id
- ObjectToBuilding(860, 2) //TODO check building_id
+ //TODO check building id: these belong to a spawn building in HART C campus
+ LocalObject(462, Door.Constructor)
+ LocalObject(463, Door.Constructor)
+ LocalObject(853, Terminal.Constructor(order_terminal))
+ LocalObject(855, Terminal.Constructor(order_terminal))
+ LocalObject(860, Terminal.Constructor(order_terminal))
+ ObjectToBuilding(462, 2)
+ ObjectToBuilding(463, 2)
+ ObjectToBuilding(853, 2)
+ ObjectToBuilding(855, 2)
+ ObjectToBuilding(860, 2)
}
val map14 = new ZoneMap("map13")
diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala
index cbd3698d..41405724 100644
--- a/pslogin/src/main/scala/WorldSessionActor.scala
+++ b/pslogin/src/main/scala/WorldSessionActor.scala
@@ -23,7 +23,7 @@ import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
import net.psforever.objects.serverobject.locks.IFFLock
import net.psforever.objects.serverobject.mblocker.Locker
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
-import net.psforever.objects.serverobject.terminals.{MatrixTerminalDefinition, Terminal}
+import net.psforever.objects.serverobject.terminals.{MatrixTerminalDefinition, SpawnTerminalDefinition, Terminal}
import net.psforever.objects.serverobject.terminals.Terminal.TerminalMessage
import net.psforever.objects.vehicles.{AccessPermissionGroup, Utility, VehicleLockState}
import net.psforever.objects.serverobject.structures.{Building, WarpGate}
@@ -56,6 +56,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
var progressBarValue : Option[Float] = None
var shooting : Option[PlanetSideGUID] = None
var accessedContainer : Option[PlanetSideGameObject with Container] = None
+ var flying : Boolean = false
+ var speed : Float = 1.0f
+ var spectator : Boolean = false
var clientKeepAlive : Cancellable = DefaultCancellable.obj
var progressBarUpdate : Cancellable = DefaultCancellable.obj
@@ -1182,39 +1185,39 @@ class WorldSessionActor extends Actor with MDCContextAware {
log.info(s"New world login to $server with Token:$token. $clientVersion")
//TODO begin temp player character auto-loading; remove later
import net.psforever.objects.GlobalDefinitions._
+ import net.psforever.types.CertificationType._
player = Player("TestCharacter"+sessionId.toString, PlanetSideEmpire.VS, CharacterGender.Female, 41, 1)
- //player.Position = Vector3(3674.8438f, 2726.789f, 91.15625f)
- //player.Position = Vector3(3523.039f, 2855.5078f, 90.859375f)
- player.Position = Vector3(3561.0f, 2854.0f, 90.859375f)
+ //player.Position = Vector3(3561.0f, 2854.0f, 90.859375f) //home3, HART C
+ player.Position = Vector3(3881.9688f, 4432.008f, 267.0f) //z6, Anguta / n.tower
player.Orientation = Vector3(0f, 0f, 90f)
- player.Certifications += CertificationType.StandardAssault
- player.Certifications += CertificationType.MediumAssault
- player.Certifications += CertificationType.StandardExoSuit
- player.Certifications += CertificationType.AgileExoSuit
- player.Certifications += CertificationType.ReinforcedExoSuit
- player.Certifications += CertificationType.ATV
- player.Certifications += CertificationType.Harasser
+ player.Certifications += StandardAssault
+ player.Certifications += MediumAssault
+ player.Certifications += StandardExoSuit
+ player.Certifications += AgileExoSuit
+ player.Certifications += ReinforcedExoSuit
+ player.Certifications += ATV
+ player.Certifications += Harasser
//
- player.Certifications += CertificationType.InfiltrationSuit
- player.Certifications += CertificationType.Sniping
- player.Certifications += CertificationType.AntiVehicular
- player.Certifications += CertificationType.HeavyAssault
- player.Certifications += CertificationType.SpecialAssault
- player.Certifications += CertificationType.EliteAssault
- player.Certifications += CertificationType.GroundSupport
- player.Certifications += CertificationType.GroundTransport
- player.Certifications += CertificationType.Flail
- player.Certifications += CertificationType.Switchblade
- player.Certifications += CertificationType.AssaultBuggy
- player.Certifications += CertificationType.ArmoredAssault1
- player.Certifications += CertificationType.ArmoredAssault2
- player.Certifications += CertificationType.AirCavalryScout
- player.Certifications += CertificationType.AirCavalryAssault
- player.Certifications += CertificationType.AirCavalryInterceptor
- player.Certifications += CertificationType.AirSupport
- player.Certifications += CertificationType.GalaxyGunship
- player.Certifications += CertificationType.Phantasm
- player.Certifications += CertificationType.UniMAX
+ player.Certifications += InfiltrationSuit
+ player.Certifications += Sniping
+ player.Certifications += AntiVehicular
+ player.Certifications += HeavyAssault
+ player.Certifications += SpecialAssault
+ player.Certifications += EliteAssault
+ player.Certifications += GroundSupport
+ player.Certifications += GroundTransport
+ player.Certifications += Flail
+ player.Certifications += Switchblade
+ player.Certifications += AssaultBuggy
+ player.Certifications += ArmoredAssault1
+ player.Certifications += ArmoredAssault2
+ player.Certifications += AirCavalryScout
+ player.Certifications += AirCavalryAssault
+ player.Certifications += AirCavalryInterceptor
+ player.Certifications += AirSupport
+ player.Certifications += GalaxyGunship
+ player.Certifications += Phantasm
+ player.Certifications += UniMAX
AwardBattleExperiencePoints(player, 1000000L)
// player.ExoSuit = ExoSuitType.MAX //TODO strange issue; divide number above by 10 when uncommenting
player.Slot(0).Equipment = SimpleItem(remote_electronics_kit) //Tool(GlobalDefinitions.StandardPistol(player.Faction))
@@ -1226,7 +1229,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
player.Slot(33).Equipment = AmmoBox(bullet_9mm_AP)
player.Slot(36).Equipment = AmmoBox(GlobalDefinitions.StandardPistolAmmo(player.Faction))
player.Slot(39).Equipment = AmmoBox(plasma_cartridge) //SimpleItem(remote_electronics_kit)
- player.Slot(5).Equipment.get.asInstanceOf[LockerContainer].Inventory += 0 -> SimpleItem(remote_electronics_kit)
+ player.Locker.Inventory += 0 -> SimpleItem(remote_electronics_kit)
//TODO end temp player character auto-loading
self ! ListAccountCharacters
import scala.concurrent.duration._
@@ -1249,7 +1252,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
//TODO check if can spawn on last continent/location from player?
//TODO if yes, get continent guid accessors
//TODO if no, get sanctuary guid accessors and reset the player's expectations
- galaxy ! InterstellarCluster.GetWorld("home3")
+ galaxy ! InterstellarCluster.GetWorld("z6")
case default =>
log.error("Unsupported " + default + " in " + msg)
}
@@ -1259,12 +1262,12 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ BeginZoningMessage() =>
log.info("Reticulating splines ...")
- //map-specific initializations
configZone(continent) //todo density
sendResponse(TimeOfDayMessage(1191182336))
//custom
sendResponse(ContinentalLockUpdateMessage(13, PlanetSideEmpire.VS)) // "The VS have captured the VS Sanctuary."
- (1 to 255).foreach(i => { sendResponse(SetEmpireMessage(PlanetSideGUID(i), PlanetSideEmpire.VS)) })
+ sendResponse(ReplicationStreamMessage(5, Some(6), Vector(SquadListing()))) //clear squad list
+ sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 1))
//render Equipment that was dropped into zone before the player arrived
continent.EquipmentOnGround.foreach(item => {
@@ -1355,7 +1358,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
case Some(item) => item.Definition == GlobalDefinitions.bolt_driver
case None => false
}
- avatarService ! AvatarServiceMessage(continent.Id, AvatarAction.PlayerState(avatar_guid, msg, player.Spectator, wepInHand))
+ avatarService ! AvatarServiceMessage(continent.Id, AvatarAction.PlayerState(avatar_guid, msg, spectator, wepInHand))
case msg @ ChildObjectStateMessage(object_guid, pitch, yaw) =>
//the majority of the following check retrieves information to determine if we are in control of the child
@@ -1425,6 +1428,37 @@ class WorldSessionActor extends Actor with MDCContextAware {
log.info("SetChatFilters: " + msg)
case msg @ ChatMsg(messagetype, has_wide_contents, recipient, contents, note_contents) =>
+ var echoContents : String = contents
+ //TODO messy on/off strings may work
+ if(messagetype == ChatMessageType.CMT_FLY) {
+ if(contents.trim.equals("on")) {
+ flying = true
+ }
+ else if(contents.trim.equals("off")) {
+ flying = false
+ }
+ }
+ else if(messagetype == ChatMessageType.CMT_SPEED) {
+ speed = {
+ try {
+ contents.trim.toFloat
+ }
+ catch {
+ case _ : Exception =>
+ echoContents = "1.000"
+ 1f
+ }
+ }
+ }
+ else if(messagetype == ChatMessageType.CMT_TOGGLESPECTATORMODE) {
+ if(contents.trim.equals("on")) {
+ spectator = true
+ }
+ else if(contents.trim.equals("off")) {
+ spectator = false
+ }
+ }
+
// TODO: Prevents log spam, but should be handled correctly
if (messagetype != ChatMessageType.CMT_TOGGLE_GM) {
log.info("Chat: " + msg)
@@ -1449,9 +1483,14 @@ class WorldSessionActor extends Actor with MDCContextAware {
sendResponse(DropSession(sessionId, "user quit"))
}
+ if(contents.trim.equals("!loc")) { //dev hack; consider bang-commands to complement slash-commands
+ echoContents = s"pos=${player.Position.x}, ${player.Position.y}, ${player.Position.z}; ori=${player.Orientation.x}, ${player.Orientation.y}, ${player.Orientation.z}"
+ log.info(echoContents)
+ }
+
// TODO: Depending on messagetype, may need to prepend sender's name to contents with proper spacing
// TODO: Just replays the packet straight back to sender; actually needs to be routed to recipients!
- sendResponse(ChatMsg(messagetype, has_wide_contents, recipient, contents, note_contents))
+ sendResponse(ChatMsg(messagetype, has_wide_contents, recipient, echoContents, note_contents))
case msg @ VoiceHostRequest(unk, PlanetSideGUID(player_guid), data) =>
log.info("Player "+player_guid+" requested in-game voice chat.")
@@ -1991,7 +2030,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
}
case Some(obj : Terminal) =>
- if(obj.Definition.isInstanceOf[MatrixTerminalDefinition]) {
+ if(obj.Definition.isInstanceOf[MatrixTerminalDefinition] || obj.Definition.isInstanceOf[SpawnTerminalDefinition]) {
//TODO matrix spawn point; for now, just blindly bind to show work (and hope nothing breaks)
sendResponse(BindPlayerMessage(1, "@ams", true, true, 0, 0, 0, obj.Position))
}
@@ -3161,14 +3200,14 @@ class WorldSessionActor extends Actor with MDCContextAware {
}
def configZone(zone : Zone) : Unit = {
- zone.Buildings.foreach({case (id, building) =>
- sendResponse(SetEmpireMessage(PlanetSideGUID(id), building.Faction))
+ zone.Buildings.values.foreach(building => {
+ sendResponse(SetEmpireMessage(PlanetSideGUID(building.ModelId), building.Faction))
building.Amenities.foreach(amenity => {
val amenityId = amenity.GUID
sendResponse(PlanetsideAttributeMessage(amenityId, 50, 0))
sendResponse(PlanetsideAttributeMessage(amenityId, 51, 0))
})
- sendResponse(HackMessage(3, PlanetSideGUID(id), PlanetSideGUID(0), 0, 3212836864L, HackState.HackCleared, 8))
+ sendResponse(HackMessage(3, PlanetSideGUID(building.ModelId), PlanetSideGUID(0), 0, 3212836864L, HackState.HackCleared, 8))
})
}
diff --git a/pslogin/src/main/scala/Zones.scala b/pslogin/src/main/scala/Zones.scala
index 352c2729..051fcf5a 100644
--- a/pslogin/src/main/scala/Zones.scala
+++ b/pslogin/src/main/scala/Zones.scala
@@ -19,6 +19,11 @@ object Zones {
import net.psforever.types.PlanetSideEmpire
Building(2).get.Faction = PlanetSideEmpire.VS
+ Building(2).get.ModelId = 20
+ Building(38).get.ModelId = 0
+ Building(42).get.ModelId = 0
+ Building(48).get.Faction = PlanetSideEmpire.VS
+ Building(48).get.ModelId = 59
}
}
@@ -39,7 +44,7 @@ object Zones {
super.Init(context)
import net.psforever.types.PlanetSideEmpire
- Buildings.values.foreach(building => { building.Faction = PlanetSideEmpire.VS })
+ Buildings.values.foreach { _.Faction = PlanetSideEmpire.VS }
Building(29).get.Faction = PlanetSideEmpire.NC //South Villa Gun Tower
}
}