Anguta, Ceryshen, the Anguta Watchower, and Anguta's two bunkers have had their amenities wired together, excluding the door locks being connected to doors. Modified how things like spectator status, fly status and speed persist.

This commit is contained in:
FateJH 2018-03-10 21:18:27 -05:00
parent bd76d28564
commit 001f9a40e9
13 changed files with 490 additions and 175 deletions

View file

@ -509,6 +509,8 @@ object GlobalDefinitions {
val vehicle_terminal_combined = new VehicleTerminalCombinedDefinition val vehicle_terminal_combined = new VehicleTerminalCombinedDefinition
val spawn_terminal = new SpawnTerminalDefinition
val spawn_pad = new VehicleSpawnPadDefinition val spawn_pad = new VehicleSpawnPadDefinition
val mb_locker = new LockerDefinition val mb_locker = new LockerDefinition
@ -643,7 +645,7 @@ object GlobalDefinitions {
* @param faction the faction * @param faction the faction
* @return the `ToolDefinition` for the launcher * @return the `ToolDefinition` for the launcher
*/ */
def AntiVehicular(faction : PlanetSideEmpire.Value) : ToolDefinition = { def AntiVehicularLauncher(faction : PlanetSideEmpire.Value) : ToolDefinition = {
faction match { faction match {
case PlanetSideEmpire.TR => striker case PlanetSideEmpire.TR => striker
case PlanetSideEmpire.NC => hunterseeker case PlanetSideEmpire.NC => hunterseeker

View file

@ -62,7 +62,6 @@ class Player(private val name : String,
private var backpackAccess : Option[PlanetSideGUID] = None private var backpackAccess : Option[PlanetSideGUID] = None
private var admin : Boolean = false private var admin : Boolean = false
private var spectator : Boolean = false
private var vehicleSeated : Option[PlanetSideGUID] = None private var vehicleSeated : Option[PlanetSideGUID] = None
private var vehicleOwned : Option[PlanetSideGUID] = None private var vehicleOwned : Option[PlanetSideGUID] = None
@ -526,8 +525,6 @@ class Player(private val name : String,
def Admin : Boolean = admin def Admin : Boolean = admin
def Spectator : Boolean = spectator
def VehicleSeated : Option[PlanetSideGUID] = vehicleSeated def VehicleSeated : Option[PlanetSideGUID] = vehicleSeated
def VehicleSeated_=(guid : PlanetSideGUID) : Option[PlanetSideGUID] = VehicleSeated_=(Some(guid)) def VehicleSeated_=(guid : PlanetSideGUID) : Option[PlanetSideGUID] = VehicleSeated_=(Some(guid))
@ -616,11 +613,6 @@ object Player {
player player
} }
def Spectate(player : Player, isSpectator : Boolean) : Player = {
player.spectator = isSpectator
player
}
def Release(player : Player) : Player = { def Release(player : Player) : Player = {
if(player.Release) { if(player.Release) {
val obj = new Player(player.Name, player.Faction, player.Sex, player.Voice, player.Head) val obj = new Player(player.Name, player.Faction, player.Sex, player.Voice, player.Head)

View file

@ -18,7 +18,7 @@ import net.psforever.objects.guid.NumberPoolHub
* a closed number space, which is also the `Zone`. * a closed number space, which is also the `Zone`.
* It utilizes those qualities of the enclosing region to construct the entity within that region.<br> * It utilizes those qualities of the enclosing region to construct the entity within that region.<br>
* <br> * <br>
* Example: `ServerObjectBuilder(n, function)` * Example: `ServerObjectBuilder(n, function)`<br>
* Example: `new ServerBuilderObject[A](n, function)`, where `function` is a `(Int,Context)=>A` * Example: `new ServerBuilderObject[A](n, function)`, where `function` is a `(Int,Context)=>A`
* @see `ZoneMap` * @see `ZoneMap`
* @see `Zone.Init` * @see `Zone.Init`
@ -28,7 +28,7 @@ import net.psforever.objects.guid.NumberPoolHub
* can be inferred from the output of `constructor` * can be inferred from the output of `constructor`
*/ */
class ServerObjectBuilder[A <: PlanetSideServerObject](private val id : Int, 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. * Instantiate and configure the given server object.
@ -49,6 +49,8 @@ class ServerObjectBuilder[A <: PlanetSideServerObject](private val id : Int,
} }
object ServerObjectBuilder { object ServerObjectBuilder {
type ConstructorType[A <: PlanetSideServerObject] = (Int, ActorContext)=>A
/** /**
* Overloaded constructor. * Overloaded constructor.
* @param id the unqiue id that will be assigned to this entity * @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 * @tparam A any object that extends from PlanetSideServerObject that will be produced by this class
* @return a `ServerObjectBuilder` object * @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) new ServerObjectBuilder[A](id, constructor)
} }
} }

View file

@ -8,12 +8,17 @@ import net.psforever.objects.zones.Zone
import net.psforever.packet.game.PlanetSideGUID import net.psforever.packet.game.PlanetSideGUID
import net.psforever.types.PlanetSideEmpire 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 faction : PlanetSideEmpire.Value = PlanetSideEmpire.NEUTRAL
private var amenities : List[Amenity] = List.empty private var amenities : List[Amenity] = List.empty
GUID = PlanetSideGUID(0) GUID = PlanetSideGUID(0)
def Id : Int = id def Id : Int = mapId
def Faction : PlanetSideEmpire.Value = faction 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 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 def Definition: ObjectDefinition = Building.BuildingDefinition
} }

View file

@ -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()
}

View file

@ -13,22 +13,24 @@ object SpawnTube {
new SpawnTube(tubeDef) new SpawnTube(tubeDef)
} }
// import akka.actor.ActorContext import akka.actor.ActorContext
// import net.psforever.types.Vector3 import net.psforever.types.Vector3
// /** /**
// * Instantiate an configure a `SpawnTube` object * Instantiate an configure a `SpawnTube` object
// * @param pos the position (used to determine spawn point) * @param pos the position (used to determine spawn point)
// * @param orient the orientation (used to indicate spawn direction) * @param orient the orientation (used to indicate spawn direction)
// * @param id the unique id that will be assigned to this entity * @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 * @param context a context to allow the object to properly set up `ActorSystem` functionality
// * @return the `SpawnTube` object * @return the `SpawnTube` object
// */ */
// def Constructor(pos : Vector3, orient : Vector3)(id : Int, context : ActorContext) : SpawnTube = { def Constructor(pos : Vector3, orient : Vector3)(id : Int, context : ActorContext) : SpawnTube = {
// import net.psforever.objects.GlobalDefinitions import akka.actor.Props
// import net.psforever.objects.GlobalDefinitions
// val obj = SpawnTube(GlobalDefinitions.ams_respawn_tube)
// obj.Position = pos val obj = SpawnTube(GlobalDefinitions.ams_respawn_tube)
// obj.Orientation = orient obj.Position = pos
// obj obj.Orientation = orient
// } obj.Actor = context.actorOf(Props(classOf[SpawnTubeControl], obj), s"${GlobalDefinitions.ams_respawn_tube.Name}_$id")
obj
}
} }

View file

@ -44,8 +44,8 @@ class Zone(private val zoneId : String, zoneMap : ZoneMap, zoneNumber : Int) {
private var accessor : ActorRef = ActorRef.noSender private var accessor : ActorRef = ActorRef.noSender
/** The basic support structure for the globally unique number system used by this `Zone`. */ /** The basic support structure for the globally unique number system used by this `Zone`. */
private var guid : NumberPoolHub = new NumberPoolHub(new LimitedNumberSource(65536)) private var guid : NumberPoolHub = new NumberPoolHub(new LimitedNumberSource(65536))
guid.AddPool("environment", (0 to 2000).toList) guid.AddPool("environment", (0 to 3000).toList) //TODO tailer ro suit requirements of zone
guid.AddPool("dynamic", (2001 to 10000).toList).Selector = new RandomSelector //TODO unlump pools later; do not make too big 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. */ /** A synchronized `List` of items (`Equipment`) dropped by players on the ground and can be collected again. */
private val equipmentOnGround : ListBuffer[Equipment] = ListBuffer[Equipment]() private val equipmentOnGround : ListBuffer[Equipment] = ListBuffer[Equipment]()
/** Used by the `Zone` to coordinate `Equipment` dropping and collection requests. */ /** 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. * 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`. * Second, all supporting `Actor` agents are created, e.g., `ground`.
* Third, the `ZoneMap` server objects are loaded and constructed within that aforementioned system. * 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.<br>
* <br>
* 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` * @param context a reference to an `ActorContext` necessary for `Props`
*/ */
def Init(implicit context : ActorContext) : Unit = { 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") ground = context.actorOf(Props(classOf[ZoneGroundActor], equipmentOnGround), s"$Id-ground")
transport = context.actorOf(Props(classOf[ZoneVehicleActor], this), s"$Id-vehicles") transport = context.actorOf(Props(classOf[ZoneVehicleActor], this), s"$Id-vehicles")
Map.LocalObjects.foreach({ builderObject => Map.LocalObjects.foreach({ builderObject => builderObject.Build })
builderObject.Build
})
MakeBuildings(context) MakeBuildings(context)
AssignAmenities() AssignAmenities()
} }

View file

@ -29,9 +29,9 @@ class ZoneActor(zone : Zone) extends Actor {
val validateObject : (Int, (PlanetSideGameObject)=>Boolean, String) => Boolean = ValidateObject(guid, slog) val validateObject : (Int, (PlanetSideGameObject)=>Boolean, String) => Boolean = ValidateObject(guid, slog)
//check base to object associations //check base to object associations
map.ObjectToBuilding.foreach({ case((object_guid, base_id)) => map.ObjectToBuilding.foreach({ case((object_guid, building_id)) =>
if(zone.Building(base_id).isEmpty) { if(zone.Building(building_id).isEmpty) {
slog.error(s"expected a building at id #$base_id") slog.error(s"expected a building at id #$building_id")
} }
if(guid(object_guid).isEmpty) { if(guid(object_guid).isEmpty) {
slog.error(s"expected object id $object_guid to exist, but it did not") slog.error(s"expected object id $object_guid to exist, but it did not")
@ -85,8 +85,8 @@ object ZoneActor {
} }
} }
catch { catch {
case _ : Exception => case e : Exception =>
elog.error(s"expected a $description at id $object_guid but no object is initialized") elog.error(s"expected a $description at id $object_guid but no object is initialized - $e")
false false
} }
} }

View file

@ -2,7 +2,7 @@
package net.psforever.objects.zones package net.psforever.objects.zones
import net.psforever.objects.serverobject.structures.FoundationBuilder 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.<br> * The fixed instantiation and relation of a series of server objects.<br>
@ -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`. * 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 = { def LocalObject[A <: PlanetSideServerObject](id : Int, constructor : ServerObjectBuilder.ConstructorType[A]) : Int = {
localObjects = localObjects :+ obj if(id > 0) {
localObjects = localObjects :+ ServerObjectBuilder[A](id, constructor)
}
localObjects.size
} }
def LocalBuildings : Map[Int, FoundationBuilder] = buildings def LocalBuildings : Map[Int, FoundationBuilder] = buildings

View file

@ -247,13 +247,4 @@ class PlayerTest extends Specification {
Player.Administrate(obj, false) Player.Administrate(obj, false)
obj.Admin mustEqual 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
}
} }

View file

@ -1,7 +1,6 @@
// Copyright (c) 2017 PSForever // Copyright (c) 2017 PSForever
import net.psforever.objects.zones.ZoneMap import net.psforever.objects.zones.ZoneMap
import net.psforever.objects.GlobalDefinitions._ import net.psforever.objects.GlobalDefinitions._
import net.psforever.objects.serverobject.ServerObjectBuilder
import net.psforever.objects.serverobject.doors.Door import net.psforever.objects.serverobject.doors.Door
import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
import net.psforever.objects.serverobject.locks.IFFLock 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.pad.VehicleSpawnPad
import net.psforever.objects.serverobject.structures.{Building, FoundationBuilder, WarpGate} import net.psforever.objects.serverobject.structures.{Building, FoundationBuilder, WarpGate}
import net.psforever.objects.serverobject.terminals.Terminal import net.psforever.objects.serverobject.terminals.Terminal
import net.psforever.objects.serverobject.tube.SpawnTube
import net.psforever.types.Vector3 import net.psforever.types.Vector3
object Maps { object Maps {
@ -23,16 +23,247 @@ object Maps {
val map5 = new ZoneMap("map05") val map5 = new ZoneMap("map05")
val map6 = new ZoneMap("map06") { val map6 = new ZoneMap("map06") {
//TODO TEST ceryshen LocalBuilding(2, FoundationBuilder(Building.Structure)) //Anguta
LocalObject(ServerObjectBuilder(3353, Terminal.Constructor(ground_vehicle_terminal))) LocalObject(222, Door.Constructor) //air term building, bay door
LocalObject(ServerObjectBuilder(500, 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)) VehicleSpawnPad.Constructor(Vector3(3962.0f, 4334.0f, 268.0f), Vector3(0f, 0f, 180.0f))
)) //TODO guid not correct ) //TODO guid not correct
LocalObject(224, Terminal.Constructor(dropship_vehicle_terminal))
LocalBuilding(2, FoundationBuilder(Building.Structure)) LocalObject(501,
ObjectToBuilding(3353, 2) 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) 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") val map7 = new ZoneMap("map07")
@ -52,63 +283,69 @@ object Maps {
LocalBuilding(2, FoundationBuilder(WarpGate.Structure)) LocalBuilding(2, FoundationBuilder(WarpGate.Structure))
LocalBuilding(3, FoundationBuilder(WarpGate.Structure)) LocalBuilding(3, FoundationBuilder(WarpGate.Structure))
LocalObject(ServerObjectBuilder(372, Door.Constructor)) LocalObject(520, ImplantTerminalMech.Constructor) //Hart B
LocalObject(ServerObjectBuilder(373, Door.Constructor)) LocalObject(1081, Terminal.Constructor(implant_terminal_interface)) //tube 520
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
TerminalToInterface(520, 1081) TerminalToInterface(520, 1081)
LocalBuilding(2, FoundationBuilder(Building.Structure)) //HART building C LocalBuilding(2, FoundationBuilder(Building.Structure)) //HART building C
LocalObject(ServerObjectBuilder(186, Terminal.Constructor(cert_terminal))) LocalObject(186, Terminal.Constructor(cert_terminal))
LocalObject(ServerObjectBuilder(187, Terminal.Constructor(cert_terminal))) LocalObject(187, Terminal.Constructor(cert_terminal))
LocalObject(ServerObjectBuilder(188, Terminal.Constructor(cert_terminal))) LocalObject(188, Terminal.Constructor(cert_terminal))
LocalObject(ServerObjectBuilder(362, Door.Constructor)) LocalObject(362, Door.Constructor)
LocalObject(ServerObjectBuilder(370, Door.Constructor)) LocalObject(370, Door.Constructor)
LocalObject(ServerObjectBuilder(371, Door.Constructor)) LocalObject(371, Door.Constructor)
LocalObject(ServerObjectBuilder(374, Door.Constructor)) LocalObject(372, Door.Constructor)
LocalObject(ServerObjectBuilder(375, Door.Constructor)) LocalObject(373, Door.Constructor)
LocalObject(ServerObjectBuilder(394, Door.Constructor)) LocalObject(374, Door.Constructor)
LocalObject(ServerObjectBuilder(395, Door.Constructor)) LocalObject(375, Door.Constructor)
LocalObject(ServerObjectBuilder(396, Door.Constructor)) LocalObject(394, Door.Constructor)
LocalObject(ServerObjectBuilder(397, Door.Constructor)) LocalObject(395, Door.Constructor)
LocalObject(ServerObjectBuilder(398, Door.Constructor)) LocalObject(396, Door.Constructor)
LocalObject(ServerObjectBuilder(462, Door.Constructor)) LocalObject(397, Door.Constructor)
LocalObject(ServerObjectBuilder(463, Door.Constructor)) LocalObject(398, Door.Constructor)
LocalObject(ServerObjectBuilder(522, ImplantTerminalMech.Constructor)) //Hart C LocalObject(522, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(523, ImplantTerminalMech.Constructor)) //Hart C LocalObject(523, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(524, ImplantTerminalMech.Constructor)) //Hart C LocalObject(524, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(525, ImplantTerminalMech.Constructor)) //Hart C LocalObject(525, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(526, ImplantTerminalMech.Constructor)) //Hart C LocalObject(526, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(527, ImplantTerminalMech.Constructor)) //Hart C LocalObject(527, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(528, ImplantTerminalMech.Constructor)) //Hart C LocalObject(528, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(529, ImplantTerminalMech.Constructor)) //Hart C LocalObject(529, ImplantTerminalMech.Constructor)
LocalObject(ServerObjectBuilder(686, Locker.Constructor)) LocalObject(686, Locker.Constructor)
LocalObject(ServerObjectBuilder(687, Locker.Constructor)) LocalObject(687, Locker.Constructor)
LocalObject(ServerObjectBuilder(688, Locker.Constructor)) LocalObject(688, Locker.Constructor)
LocalObject(ServerObjectBuilder(689, Locker.Constructor)) LocalObject(689, Locker.Constructor)
LocalObject(ServerObjectBuilder(690, Locker.Constructor)) LocalObject(690, Locker.Constructor)
LocalObject(ServerObjectBuilder(691, Locker.Constructor)) LocalObject(691, Locker.Constructor)
LocalObject(ServerObjectBuilder(692, Locker.Constructor)) LocalObject(692, Locker.Constructor)
LocalObject(ServerObjectBuilder(693, Locker.Constructor)) LocalObject(693, Locker.Constructor)
LocalObject(ServerObjectBuilder(842, Terminal.Constructor(order_terminal))) LocalObject(842, Terminal.Constructor(order_terminal))
LocalObject(ServerObjectBuilder(843, Terminal.Constructor(order_terminal))) LocalObject(843, Terminal.Constructor(order_terminal))
LocalObject(ServerObjectBuilder(844, Terminal.Constructor(order_terminal))) LocalObject(844, Terminal.Constructor(order_terminal))
LocalObject(ServerObjectBuilder(845, Terminal.Constructor(order_terminal))) LocalObject(845, Terminal.Constructor(order_terminal))
LocalObject(ServerObjectBuilder(1082, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1082, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1083, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1083, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1084, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1084, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1085, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1085, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1086, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1086, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1087, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1087, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1088, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1088, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
LocalObject(ServerObjectBuilder(1089, Terminal.Constructor(implant_terminal_interface))) //TODO guid not correct LocalObject(1089, Terminal.Constructor(implant_terminal_interface)) //TODO guid not correct
ObjectToBuilding(186, 2) ObjectToBuilding(186, 2)
ObjectToBuilding(187, 2) ObjectToBuilding(187, 2)
ObjectToBuilding(188, 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(522, 2)
ObjectToBuilding(523, 2) ObjectToBuilding(523, 2)
ObjectToBuilding(524, 2) ObjectToBuilding(524, 2)
@ -147,14 +384,14 @@ object Maps {
TerminalToInterface(529, 1089) TerminalToInterface(529, 1089)
LocalBuilding(29, FoundationBuilder(Building.Structure)) //South Villa Gun Tower 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(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(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(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(333, Door.Constructor(Vector3(3979.9688f, 2608.0625f, 111.140625f), Vector3(0, 0, 0)))
LocalObject(ServerObjectBuilder(556, IFFLock.Constructor)) LocalObject(556, IFFLock.Constructor)
LocalObject(ServerObjectBuilder(557, IFFLock.Constructor)) LocalObject(557, IFFLock.Constructor)
LocalObject(ServerObjectBuilder(558, IFFLock.Constructor)) LocalObject(558, IFFLock.Constructor)
LocalObject(ServerObjectBuilder(559, IFFLock.Constructor)) LocalObject(559, IFFLock.Constructor)
ObjectToBuilding(330, 29) ObjectToBuilding(330, 29)
ObjectToBuilding(331, 29) ObjectToBuilding(331, 29)
ObjectToBuilding(332, 29) ObjectToBuilding(332, 29)
@ -169,26 +406,34 @@ object Maps {
DoorToLock(333, 557) DoorToLock(333, 557)
LocalBuilding(51, FoundationBuilder(Building.Structure)) LocalBuilding(51, FoundationBuilder(Building.Structure))
LocalObject(ServerObjectBuilder(304, Terminal.Constructor(dropship_vehicle_terminal))) LocalObject(304, Terminal.Constructor(dropship_vehicle_terminal))
LocalObject(ServerObjectBuilder(292, LocalObject(292,
VehicleSpawnPad.Constructor(Vector3(3508.9844f, 2895.961f, 92.296875f), Vector3(0f, 0f, 270.0f)) VehicleSpawnPad.Constructor(Vector3(3508.9844f, 2895.961f, 92.296875f), Vector3(0f, 0f, 270.0f))
)) )
ObjectToBuilding(304, 51) ObjectToBuilding(304, 51)
ObjectToBuilding(292, 51) ObjectToBuilding(292, 51)
TerminalToSpawnPad(304, 292) TerminalToSpawnPad(304, 292)
LocalBuilding(77, FoundationBuilder(Building.Structure)) LocalBuilding(77, FoundationBuilder(Building.Structure))
LocalObject(ServerObjectBuilder(1063, Terminal.Constructor(ground_vehicle_terminal))) LocalObject(1063, Terminal.Constructor(ground_vehicle_terminal))
LocalObject(ServerObjectBuilder(706, LocalObject(706,
VehicleSpawnPad.Constructor(Vector3(3506.0f, 2820.0f, 92.0f), Vector3(0f, 0f, 270.0f)) VehicleSpawnPad.Constructor(Vector3(3506.0f, 2820.0f, 92.0f), Vector3(0f, 0f, 270.0f))
)) )
ObjectToBuilding(1063, 77) ObjectToBuilding(1063, 77)
ObjectToBuilding(706, 77) ObjectToBuilding(706, 77)
TerminalToSpawnPad(1063, 706) TerminalToSpawnPad(1063, 706)
ObjectToBuilding(853, 2) //TODO check building_id //TODO check building id: these belong to a spawn building in HART C campus
ObjectToBuilding(855, 2) //TODO check building_id LocalObject(462, Door.Constructor)
ObjectToBuilding(860, 2) //TODO check building_id 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") val map14 = new ZoneMap("map13")

View file

@ -23,7 +23,7 @@ import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
import net.psforever.objects.serverobject.locks.IFFLock import net.psforever.objects.serverobject.locks.IFFLock
import net.psforever.objects.serverobject.mblocker.Locker import net.psforever.objects.serverobject.mblocker.Locker
import net.psforever.objects.serverobject.pad.VehicleSpawnPad 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.serverobject.terminals.Terminal.TerminalMessage
import net.psforever.objects.vehicles.{AccessPermissionGroup, Utility, VehicleLockState} import net.psforever.objects.vehicles.{AccessPermissionGroup, Utility, VehicleLockState}
import net.psforever.objects.serverobject.structures.{Building, WarpGate} import net.psforever.objects.serverobject.structures.{Building, WarpGate}
@ -56,6 +56,9 @@ class WorldSessionActor extends Actor with MDCContextAware {
var progressBarValue : Option[Float] = None var progressBarValue : Option[Float] = None
var shooting : Option[PlanetSideGUID] = None var shooting : Option[PlanetSideGUID] = None
var accessedContainer : Option[PlanetSideGameObject with Container] = 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 clientKeepAlive : Cancellable = DefaultCancellable.obj
var progressBarUpdate : 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") log.info(s"New world login to $server with Token:$token. $clientVersion")
//TODO begin temp player character auto-loading; remove later //TODO begin temp player character auto-loading; remove later
import net.psforever.objects.GlobalDefinitions._ import net.psforever.objects.GlobalDefinitions._
import net.psforever.types.CertificationType._
player = Player("TestCharacter"+sessionId.toString, PlanetSideEmpire.VS, CharacterGender.Female, 41, 1) player = Player("TestCharacter"+sessionId.toString, PlanetSideEmpire.VS, CharacterGender.Female, 41, 1)
//player.Position = Vector3(3674.8438f, 2726.789f, 91.15625f) //player.Position = Vector3(3561.0f, 2854.0f, 90.859375f) //home3, HART C
//player.Position = Vector3(3523.039f, 2855.5078f, 90.859375f) player.Position = Vector3(3881.9688f, 4432.008f, 267.0f) //z6, Anguta / n.tower
player.Position = Vector3(3561.0f, 2854.0f, 90.859375f)
player.Orientation = Vector3(0f, 0f, 90f) player.Orientation = Vector3(0f, 0f, 90f)
player.Certifications += CertificationType.StandardAssault player.Certifications += StandardAssault
player.Certifications += CertificationType.MediumAssault player.Certifications += MediumAssault
player.Certifications += CertificationType.StandardExoSuit player.Certifications += StandardExoSuit
player.Certifications += CertificationType.AgileExoSuit player.Certifications += AgileExoSuit
player.Certifications += CertificationType.ReinforcedExoSuit player.Certifications += ReinforcedExoSuit
player.Certifications += CertificationType.ATV player.Certifications += ATV
player.Certifications += CertificationType.Harasser player.Certifications += Harasser
// //
player.Certifications += CertificationType.InfiltrationSuit player.Certifications += InfiltrationSuit
player.Certifications += CertificationType.Sniping player.Certifications += Sniping
player.Certifications += CertificationType.AntiVehicular player.Certifications += AntiVehicular
player.Certifications += CertificationType.HeavyAssault player.Certifications += HeavyAssault
player.Certifications += CertificationType.SpecialAssault player.Certifications += SpecialAssault
player.Certifications += CertificationType.EliteAssault player.Certifications += EliteAssault
player.Certifications += CertificationType.GroundSupport player.Certifications += GroundSupport
player.Certifications += CertificationType.GroundTransport player.Certifications += GroundTransport
player.Certifications += CertificationType.Flail player.Certifications += Flail
player.Certifications += CertificationType.Switchblade player.Certifications += Switchblade
player.Certifications += CertificationType.AssaultBuggy player.Certifications += AssaultBuggy
player.Certifications += CertificationType.ArmoredAssault1 player.Certifications += ArmoredAssault1
player.Certifications += CertificationType.ArmoredAssault2 player.Certifications += ArmoredAssault2
player.Certifications += CertificationType.AirCavalryScout player.Certifications += AirCavalryScout
player.Certifications += CertificationType.AirCavalryAssault player.Certifications += AirCavalryAssault
player.Certifications += CertificationType.AirCavalryInterceptor player.Certifications += AirCavalryInterceptor
player.Certifications += CertificationType.AirSupport player.Certifications += AirSupport
player.Certifications += CertificationType.GalaxyGunship player.Certifications += GalaxyGunship
player.Certifications += CertificationType.Phantasm player.Certifications += Phantasm
player.Certifications += CertificationType.UniMAX player.Certifications += UniMAX
AwardBattleExperiencePoints(player, 1000000L) AwardBattleExperiencePoints(player, 1000000L)
// player.ExoSuit = ExoSuitType.MAX //TODO strange issue; divide number above by 10 when uncommenting // 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)) 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(33).Equipment = AmmoBox(bullet_9mm_AP)
player.Slot(36).Equipment = AmmoBox(GlobalDefinitions.StandardPistolAmmo(player.Faction)) player.Slot(36).Equipment = AmmoBox(GlobalDefinitions.StandardPistolAmmo(player.Faction))
player.Slot(39).Equipment = AmmoBox(plasma_cartridge) //SimpleItem(remote_electronics_kit) 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 //TODO end temp player character auto-loading
self ! ListAccountCharacters self ! ListAccountCharacters
import scala.concurrent.duration._ 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 check if can spawn on last continent/location from player?
//TODO if yes, get continent guid accessors //TODO if yes, get continent guid accessors
//TODO if no, get sanctuary guid accessors and reset the player's expectations //TODO if no, get sanctuary guid accessors and reset the player's expectations
galaxy ! InterstellarCluster.GetWorld("home3") galaxy ! InterstellarCluster.GetWorld("z6")
case default => case default =>
log.error("Unsupported " + default + " in " + msg) log.error("Unsupported " + default + " in " + msg)
} }
@ -1259,12 +1262,12 @@ class WorldSessionActor extends Actor with MDCContextAware {
case msg @ BeginZoningMessage() => case msg @ BeginZoningMessage() =>
log.info("Reticulating splines ...") log.info("Reticulating splines ...")
//map-specific initializations
configZone(continent) //todo density configZone(continent) //todo density
sendResponse(TimeOfDayMessage(1191182336)) sendResponse(TimeOfDayMessage(1191182336))
//custom //custom
sendResponse(ContinentalLockUpdateMessage(13, PlanetSideEmpire.VS)) // "The VS have captured the VS Sanctuary." 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 //render Equipment that was dropped into zone before the player arrived
continent.EquipmentOnGround.foreach(item => { continent.EquipmentOnGround.foreach(item => {
@ -1355,7 +1358,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
case Some(item) => item.Definition == GlobalDefinitions.bolt_driver case Some(item) => item.Definition == GlobalDefinitions.bolt_driver
case None => false 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) => 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 //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) log.info("SetChatFilters: " + msg)
case msg @ ChatMsg(messagetype, has_wide_contents, recipient, contents, note_contents) => 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 // TODO: Prevents log spam, but should be handled correctly
if (messagetype != ChatMessageType.CMT_TOGGLE_GM) { if (messagetype != ChatMessageType.CMT_TOGGLE_GM) {
log.info("Chat: " + msg) log.info("Chat: " + msg)
@ -1449,9 +1483,14 @@ class WorldSessionActor extends Actor with MDCContextAware {
sendResponse(DropSession(sessionId, "user quit")) 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: 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! // 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) => case msg @ VoiceHostRequest(unk, PlanetSideGUID(player_guid), data) =>
log.info("Player "+player_guid+" requested in-game voice chat.") log.info("Player "+player_guid+" requested in-game voice chat.")
@ -1991,7 +2030,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
} }
case Some(obj : Terminal) => 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) //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)) 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 = { def configZone(zone : Zone) : Unit = {
zone.Buildings.foreach({case (id, building) => zone.Buildings.values.foreach(building => {
sendResponse(SetEmpireMessage(PlanetSideGUID(id), building.Faction)) sendResponse(SetEmpireMessage(PlanetSideGUID(building.ModelId), building.Faction))
building.Amenities.foreach(amenity => { building.Amenities.foreach(amenity => {
val amenityId = amenity.GUID val amenityId = amenity.GUID
sendResponse(PlanetsideAttributeMessage(amenityId, 50, 0)) sendResponse(PlanetsideAttributeMessage(amenityId, 50, 0))
sendResponse(PlanetsideAttributeMessage(amenityId, 51, 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))
}) })
} }

View file

@ -19,6 +19,11 @@ object Zones {
import net.psforever.types.PlanetSideEmpire import net.psforever.types.PlanetSideEmpire
Building(2).get.Faction = PlanetSideEmpire.VS 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) super.Init(context)
import net.psforever.types.PlanetSideEmpire 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 Building(29).get.Faction = PlanetSideEmpire.NC //South Villa Gun Tower
} }
} }