mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-04-26 06:15:21 +00:00
Merge pull request #196 from Fate-JH/spawn-tube
The Real Resurrection Update
This commit is contained in:
commit
d8fe6bab28
70 changed files with 4562 additions and 1410 deletions
|
|
@ -1,14 +1,14 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
import net.psforever.objects.zones.ZoneMap
|
||||
import net.psforever.objects.GlobalDefinitions._
|
||||
import net.psforever.objects.serverobject.ServerObjectBuilder
|
||||
import net.psforever.objects.serverobject.doors.Door
|
||||
import net.psforever.objects.serverobject.implantmech.ImplantTerminalMech
|
||||
import net.psforever.objects.serverobject.locks.IFFLock
|
||||
import net.psforever.objects.serverobject.mblocker.Locker
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
||||
import net.psforever.objects.serverobject.structures.{Building, FoundationBuilder, WarpGate}
|
||||
import net.psforever.objects.serverobject.structures.{Building, FoundationBuilder, StructureType, 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,362 @@ 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,
|
||||
VehicleSpawnPad.Constructor(Vector3(3962.0f, 4334.0f, 268.0f), Vector3(0f, 0f, 180.0f))
|
||||
)) //TODO guid not correct
|
||||
Building2()
|
||||
Building38()
|
||||
Building42()
|
||||
Building48()
|
||||
Building49()
|
||||
|
||||
LocalBuilding(2, FoundationBuilder(Building.Structure))
|
||||
ObjectToBuilding(3353, 2)
|
||||
ObjectToBuilding(500, 2)
|
||||
TerminalToSpawnPad(3353, 500)
|
||||
def Building2() : Unit = {
|
||||
//Anguta
|
||||
LocalBuilding(2, FoundationBuilder(Building.Structure(StructureType.Facility, Vector3(3974.2344f, 4287.914f, 0))))
|
||||
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(Vector3(3924.0f, 4231.2656f, 271.82812f), Vector3(0, 0, 180))) //2nd level door, south
|
||||
LocalObject(376, Door.Constructor(Vector3(3924.0f, 4240.2656f, 271.82812f), Vector3(0, 0, 0))) //2nd level door, north
|
||||
LocalObject(383, Door.Constructor) //courtyard
|
||||
LocalObject(384, Door.Constructor(Vector3(3939.6328f, 4232.547f, 279.26562f), Vector3(0, 0, 270))) //3rd floor door
|
||||
LocalObject(385, Door.Constructor) //courtyard
|
||||
LocalObject(387, Door.Constructor(Vector3(3951.9531f, 4260.008f, 271.82812f), Vector3(0, 0, 270))) //2nd level door, stairwell
|
||||
LocalObject(391, Door.Constructor) //courtyard
|
||||
LocalObject(393, Door.Constructor(Vector3(3997.8984f, 4344.3203f, 271.8125f), Vector3(0, 0, 0))) //air term building, upstairs door
|
||||
LocalObject(394, Door.Constructor(Vector3(3999.9766f, 4314.3203f, 266.82812f), Vector3(0, 0, 270))) //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(Vector3(4060.0078f, 4319.9766f, 266.8125f), Vector3(0, 0, 0))) //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(Vector3(3983.9531f, 4299.992f, 249.29688f), Vector3(0, 0, 90))) //generator room door
|
||||
LocalObject(621, Door.Constructor)
|
||||
LocalObject(622, Door.Constructor(Vector3(3988.0078f, 4248.0156f, 256.82812f), Vector3(0, 0, 180))) //spawn room door
|
||||
LocalObject(623, Door.Constructor(Vector3(3988.0078f, 4271.9766f, 256.79688f), Vector3(0, 0, 0))) //spawn room door
|
||||
LocalObject(630, Door.Constructor(Vector3(4000.0078f, 4252.0f, 249.29688f), Vector3(0, 0, 270))) //spawn room door
|
||||
LocalObject(631, Door.Constructor) //spawn room door, kitchen
|
||||
LocalObject(634, Door.Constructor) //air term building, interior
|
||||
LocalObject(638, Door.Constructor(Vector3(4016.0078f, 4212.008f, 249.29688f), Vector3(0, 0, 270))) //cc door
|
||||
LocalObject(642, Door.Constructor(Vector3(4023.9844f, 4212.008f, 249.32812f), Vector3(0, 0, 90))) //cc door, interior
|
||||
LocalObject(643, Door.Constructor) //cc door, exterior
|
||||
LocalObject(645, Door.Constructor) //b.door, interior
|
||||
LocalObject(646, Door.Constructor) //b.door, interior
|
||||
LocalObject(715, Door.Constructor(Vector3(3961.5938f ,4235.8125f, 266.84375f), Vector3(0, 0, 90))) //f.door
|
||||
LocalObject(751, IFFLock.Constructor)
|
||||
LocalObject(860, IFFLock.Constructor)
|
||||
LocalObject(863, IFFLock.Constructor)
|
||||
LocalObject(866, IFFLock.Constructor)
|
||||
LocalObject(868, IFFLock.Constructor)
|
||||
LocalObject(873, IFFLock.Constructor)
|
||||
LocalObject(874, IFFLock.Constructor)
|
||||
LocalObject(875, IFFLock.Constructor)
|
||||
LocalObject(876, IFFLock.Constructor)
|
||||
LocalObject(878, IFFLock.Constructor)
|
||||
LocalObject(879, IFFLock.Constructor)
|
||||
LocalObject(882, IFFLock.Constructor)
|
||||
LocalObject(884, IFFLock.Constructor)
|
||||
LocalObject(885, IFFLock.Constructor)
|
||||
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, 267.75f), Vector3(0f, 0f, 180.0f))
|
||||
) //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(751, 2)
|
||||
ObjectToBuilding(860, 2)
|
||||
ObjectToBuilding(863, 2)
|
||||
ObjectToBuilding(866, 2)
|
||||
ObjectToBuilding(868, 2)
|
||||
ObjectToBuilding(873, 2)
|
||||
ObjectToBuilding(874, 2)
|
||||
ObjectToBuilding(875, 2)
|
||||
ObjectToBuilding(876, 2)
|
||||
ObjectToBuilding(878, 2)
|
||||
ObjectToBuilding(879, 2)
|
||||
ObjectToBuilding(882, 2)
|
||||
ObjectToBuilding(884, 2)
|
||||
ObjectToBuilding(885, 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(501, 2)
|
||||
DoorToLock(375, 863)
|
||||
DoorToLock(376, 860)
|
||||
DoorToLock(384, 866)
|
||||
DoorToLock(387, 868)
|
||||
DoorToLock(393, 876)
|
||||
DoorToLock(394, 879)
|
||||
DoorToLock(404, 885)
|
||||
DoorToLock(620, 873)
|
||||
DoorToLock(622, 876)
|
||||
DoorToLock(623, 874)
|
||||
DoorToLock(630, 878)
|
||||
DoorToLock(638, 882)
|
||||
DoorToLock(642, 884)
|
||||
DoorToLock(715, 751)
|
||||
TerminalToSpawnPad(224, 501)
|
||||
TerminalToSpawnPad(2419, 500)
|
||||
}
|
||||
|
||||
def Building38() : Unit = {
|
||||
//Anguta, West Bunker
|
||||
LocalBuilding(38, FoundationBuilder(Building.Structure(StructureType.Bunker)))
|
||||
LocalObject(362, Door.Constructor)
|
||||
ObjectToBuilding(362, 38)
|
||||
}
|
||||
|
||||
def Building42() : Unit = {
|
||||
//Anguta, East Bunker(s)
|
||||
LocalBuilding(42, FoundationBuilder(Building.Structure(StructureType.Bunker)))
|
||||
LocalObject(407, Door.Constructor)
|
||||
LocalObject(408, Door.Constructor)
|
||||
ObjectToBuilding(407, 42)
|
||||
ObjectToBuilding(408, 42)
|
||||
}
|
||||
|
||||
def Building48() : Unit = {
|
||||
//North Anguta Watchtower
|
||||
LocalBuilding(48, FoundationBuilder(Building.Structure(StructureType.Tower, Vector3(3864.2266f, 4518.0234f, 0))))
|
||||
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(respawn_tube_tower, Vector3(3870.9688f, 4505.7266f, 259.875f), Vector3(0, 0, 90)))
|
||||
LocalObject(2139, SpawnTube.Constructor(respawn_tube_tower, 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)
|
||||
}
|
||||
|
||||
def Building49() : Unit = {
|
||||
//North Akna Air Tower
|
||||
LocalBuilding(49, FoundationBuilder(Building.Structure(StructureType.Tower, Vector3(4358.3203f, 3989.5625f, 0))))
|
||||
LocalObject(430, Door.Constructor(Vector3(4366.0156f, 3981.9922f, 237.96875f), Vector3(0f, 0f, 180f))) //s1
|
||||
LocalObject(431, Door.Constructor(Vector3(4366.0156f, 3981.9922f, 257.89062f), Vector3(0f, 0f, 180f))) //s2
|
||||
LocalObject(432, Door.Constructor(Vector3(4366.0156f, 3997.9297f, 237.96875f), Vector3(0f, 0f, 0f))) //n1
|
||||
LocalObject(433, Door.Constructor(Vector3(4366.0156f, 3997.9297f, 257.89062f), Vector3(0f, 0f, 0f))) //n2
|
||||
LocalObject(902, IFFLock.Constructor)
|
||||
LocalObject(903, IFFLock.Constructor)
|
||||
LocalObject(906, IFFLock.Constructor)
|
||||
LocalObject(907, IFFLock.Constructor)
|
||||
LocalObject(1217, Locker.Constructor)
|
||||
LocalObject(1218, Locker.Constructor)
|
||||
LocalObject(1219, Locker.Constructor)
|
||||
LocalObject(1220, Locker.Constructor)
|
||||
LocalObject(1225, Locker.Constructor)
|
||||
LocalObject(1226, Locker.Constructor)
|
||||
LocalObject(1227, Locker.Constructor)
|
||||
LocalObject(1228, Locker.Constructor)
|
||||
LocalObject(1591, Terminal.Constructor(order_terminal))
|
||||
LocalObject(1592, Terminal.Constructor(order_terminal))
|
||||
LocalObject(1593, Terminal.Constructor(order_terminal))
|
||||
LocalObject(2156, SpawnTube.Constructor(respawn_tube_tower, Vector3(4364.633f, 3994.125f, 228.1875f), Vector3(0, 0, 90)))
|
||||
LocalObject(2157, SpawnTube.Constructor(respawn_tube_tower, Vector3(4364.633f, 3977.7266f, 228.1875f), Vector3(0, 0, 90)))
|
||||
LocalObject(2333, Door.Constructor) //spawn tube door
|
||||
LocalObject(2334, Door.Constructor) //spawn tube door
|
||||
ObjectToBuilding(430, 49)
|
||||
ObjectToBuilding(431, 49)
|
||||
ObjectToBuilding(432, 49)
|
||||
ObjectToBuilding(433, 49)
|
||||
ObjectToBuilding(902, 49)
|
||||
ObjectToBuilding(903, 49)
|
||||
ObjectToBuilding(906, 49)
|
||||
ObjectToBuilding(907, 49)
|
||||
ObjectToBuilding(1217, 49)
|
||||
ObjectToBuilding(1218, 49)
|
||||
ObjectToBuilding(1219, 49)
|
||||
ObjectToBuilding(1220, 49)
|
||||
ObjectToBuilding(1225, 49)
|
||||
ObjectToBuilding(1226, 49)
|
||||
ObjectToBuilding(1227, 49)
|
||||
ObjectToBuilding(1228, 49)
|
||||
ObjectToBuilding(1591, 49)
|
||||
ObjectToBuilding(1592, 49)
|
||||
ObjectToBuilding(1593, 49)
|
||||
ObjectToBuilding(2156, 49)
|
||||
ObjectToBuilding(2157, 49)
|
||||
ObjectToBuilding(2333, 49)
|
||||
ObjectToBuilding(2334, 49)
|
||||
DoorToLock(430, 906)
|
||||
DoorToLock(431, 907)
|
||||
DoorToLock(432, 902)
|
||||
DoorToLock(433, 903)
|
||||
}
|
||||
}
|
||||
|
||||
val map7 = new ZoneMap("map07")
|
||||
|
|
@ -48,154 +394,241 @@ object Maps {
|
|||
val map12 = new ZoneMap("map12")
|
||||
|
||||
val map13 = new ZoneMap("map13") {
|
||||
LocalBuilding(1, FoundationBuilder(WarpGate.Structure))
|
||||
LocalBuilding(2, FoundationBuilder(WarpGate.Structure))
|
||||
LocalBuilding(3, FoundationBuilder(WarpGate.Structure))
|
||||
Building1()
|
||||
Building2()
|
||||
Building3()
|
||||
Building29()
|
||||
Building42()
|
||||
Building51()
|
||||
Building77()
|
||||
|
||||
LocalObject(ServerObjectBuilder(372, Door.Constructor))
|
||||
LocalObject(ServerObjectBuilder(373, Door.Constructor))
|
||||
def Building1() : Unit = {
|
||||
//warpgate?
|
||||
LocalBuilding(1, FoundationBuilder(WarpGate.Structure))
|
||||
}
|
||||
|
||||
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)
|
||||
def Building3() : Unit = {
|
||||
//warpgate?
|
||||
LocalBuilding(3, FoundationBuilder(WarpGate.Structure))
|
||||
}
|
||||
|
||||
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
|
||||
ObjectToBuilding(186, 2)
|
||||
ObjectToBuilding(187, 2)
|
||||
ObjectToBuilding(188, 2)
|
||||
ObjectToBuilding(522, 2)
|
||||
ObjectToBuilding(523, 2)
|
||||
ObjectToBuilding(524, 2)
|
||||
ObjectToBuilding(525, 2)
|
||||
ObjectToBuilding(526, 2)
|
||||
ObjectToBuilding(527, 2)
|
||||
ObjectToBuilding(528, 2)
|
||||
ObjectToBuilding(529, 2)
|
||||
ObjectToBuilding(686, 2)
|
||||
ObjectToBuilding(687, 2)
|
||||
ObjectToBuilding(688, 2)
|
||||
ObjectToBuilding(689, 2)
|
||||
ObjectToBuilding(690, 2)
|
||||
ObjectToBuilding(691, 2)
|
||||
ObjectToBuilding(692, 2)
|
||||
ObjectToBuilding(693, 2)
|
||||
ObjectToBuilding(842, 2)
|
||||
ObjectToBuilding(843, 2)
|
||||
ObjectToBuilding(844, 2)
|
||||
ObjectToBuilding(845, 2)
|
||||
ObjectToBuilding(1082, 2)
|
||||
ObjectToBuilding(1083, 2)
|
||||
ObjectToBuilding(1084, 2)
|
||||
ObjectToBuilding(1085, 2)
|
||||
ObjectToBuilding(1086, 2)
|
||||
ObjectToBuilding(1087, 2)
|
||||
ObjectToBuilding(1088, 2)
|
||||
ObjectToBuilding(1089, 2)
|
||||
TerminalToInterface(522, 1082)
|
||||
TerminalToInterface(523, 1083)
|
||||
TerminalToInterface(524, 1084)
|
||||
TerminalToInterface(525, 1085)
|
||||
TerminalToInterface(526, 1086)
|
||||
TerminalToInterface(527, 1087)
|
||||
TerminalToInterface(528, 1088)
|
||||
TerminalToInterface(529, 1089)
|
||||
// LocalBuilding(2, FoundationBuilder(WarpGate.Structure)) //TODO might be wrong?
|
||||
|
||||
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))
|
||||
ObjectToBuilding(330, 29)
|
||||
ObjectToBuilding(331, 29)
|
||||
ObjectToBuilding(332, 29)
|
||||
ObjectToBuilding(333, 29)
|
||||
ObjectToBuilding(556, 29)
|
||||
ObjectToBuilding(557, 29)
|
||||
ObjectToBuilding(558, 29)
|
||||
ObjectToBuilding(559, 29)
|
||||
DoorToLock(330, 558)
|
||||
DoorToLock(331, 559)
|
||||
DoorToLock(332, 556)
|
||||
DoorToLock(333, 557)
|
||||
// LocalObject(520, ImplantTerminalMech.Constructor) //Hart B
|
||||
// LocalObject(1081, Terminal.Constructor(implant_terminal_interface)) //tube 520
|
||||
// TerminalToInterface(520, 1081)
|
||||
|
||||
LocalBuilding(51, FoundationBuilder(Building.Structure))
|
||||
LocalObject(ServerObjectBuilder(304, Terminal.Constructor(dropship_vehicle_terminal)))
|
||||
LocalObject(ServerObjectBuilder(292,
|
||||
VehicleSpawnPad.Constructor(Vector3(3508.9844f, 2895.961f, 92.296875f), Vector3(0f, 0f, 270.0f))
|
||||
))
|
||||
ObjectToBuilding(304, 51)
|
||||
ObjectToBuilding(292, 51)
|
||||
TerminalToSpawnPad(304, 292)
|
||||
def Building2() : Unit = {
|
||||
//HART building C
|
||||
LocalBuilding(2, FoundationBuilder(Building.Structure(StructureType.Building)))
|
||||
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(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(462, Door.Constructor)
|
||||
LocalObject(463, 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(374, 2)
|
||||
ObjectToBuilding(375, 2)
|
||||
ObjectToBuilding(394, 2)
|
||||
ObjectToBuilding(395, 2)
|
||||
ObjectToBuilding(396, 2)
|
||||
ObjectToBuilding(397, 2)
|
||||
ObjectToBuilding(398, 2)
|
||||
ObjectToBuilding(462, 2)
|
||||
ObjectToBuilding(463, 2)
|
||||
ObjectToBuilding(522, 2)
|
||||
ObjectToBuilding(523, 2)
|
||||
ObjectToBuilding(524, 2)
|
||||
ObjectToBuilding(525, 2)
|
||||
ObjectToBuilding(526, 2)
|
||||
ObjectToBuilding(527, 2)
|
||||
ObjectToBuilding(528, 2)
|
||||
ObjectToBuilding(529, 2)
|
||||
ObjectToBuilding(686, 2)
|
||||
ObjectToBuilding(687, 2)
|
||||
ObjectToBuilding(688, 2)
|
||||
ObjectToBuilding(689, 2)
|
||||
ObjectToBuilding(690, 2)
|
||||
ObjectToBuilding(691, 2)
|
||||
ObjectToBuilding(692, 2)
|
||||
ObjectToBuilding(693, 2)
|
||||
ObjectToBuilding(842, 2)
|
||||
ObjectToBuilding(843, 2)
|
||||
ObjectToBuilding(844, 2)
|
||||
ObjectToBuilding(845, 2)
|
||||
ObjectToBuilding(1082, 2)
|
||||
ObjectToBuilding(1083, 2)
|
||||
ObjectToBuilding(1084, 2)
|
||||
ObjectToBuilding(1085, 2)
|
||||
ObjectToBuilding(1086, 2)
|
||||
ObjectToBuilding(1087, 2)
|
||||
ObjectToBuilding(1088, 2)
|
||||
ObjectToBuilding(1089, 2)
|
||||
TerminalToInterface(522, 1082)
|
||||
TerminalToInterface(523, 1083)
|
||||
TerminalToInterface(524, 1084)
|
||||
TerminalToInterface(525, 1085)
|
||||
TerminalToInterface(526, 1086)
|
||||
TerminalToInterface(527, 1087)
|
||||
TerminalToInterface(528, 1088)
|
||||
TerminalToInterface(529, 1089)
|
||||
}
|
||||
|
||||
LocalBuilding(77, FoundationBuilder(Building.Structure))
|
||||
LocalObject(ServerObjectBuilder(1063, Terminal.Constructor(ground_vehicle_terminal)))
|
||||
LocalObject(ServerObjectBuilder(706,
|
||||
VehicleSpawnPad.Constructor(Vector3(3506.0f, 2820.0f, 92.0f), Vector3(0f, 0f, 270.0f))
|
||||
))
|
||||
ObjectToBuilding(1063, 77)
|
||||
ObjectToBuilding(706, 77)
|
||||
TerminalToSpawnPad(1063, 706)
|
||||
def Building29() : Unit = {
|
||||
//South Villa Gun Tower
|
||||
LocalBuilding(29, FoundationBuilder(Building.Structure(StructureType.Tower)))
|
||||
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)
|
||||
ObjectToBuilding(333, 29)
|
||||
ObjectToBuilding(556, 29)
|
||||
ObjectToBuilding(557, 29)
|
||||
ObjectToBuilding(558, 29)
|
||||
ObjectToBuilding(559, 29)
|
||||
DoorToLock(330, 558)
|
||||
DoorToLock(331, 559)
|
||||
DoorToLock(332, 556)
|
||||
DoorToLock(333, 557)
|
||||
}
|
||||
|
||||
ObjectToBuilding(853, 2) //TODO check building_id
|
||||
ObjectToBuilding(855, 2) //TODO check building_id
|
||||
ObjectToBuilding(860, 2) //TODO check building_id
|
||||
def Building42() : Unit = {
|
||||
//spawn building south of HART C
|
||||
LocalBuilding(42, FoundationBuilder(Building.Structure(StructureType.Building, Vector3(1, 0, 0))))
|
||||
LocalObject(258, Door.Constructor) //spawn tube door
|
||||
LocalObject(259, Door.Constructor) //spawn tube door
|
||||
LocalObject(260, Door.Constructor) //spawn tube door
|
||||
LocalObject(261, Door.Constructor) //spawn tube door
|
||||
LocalObject(262, Door.Constructor) //spawn tube door
|
||||
LocalObject(263, Door.Constructor) //spawn tube door
|
||||
LocalObject(372, Door.Constructor) //entrance
|
||||
LocalObject(373, Door.Constructor) //entrance
|
||||
LocalObject(430, Door.Constructor) //vr door
|
||||
LocalObject(431, Door.Constructor) //vr door
|
||||
LocalObject(432, Door.Constructor) //vr door
|
||||
LocalObject(433, Door.Constructor) //vr door
|
||||
LocalObject(434, Door.Constructor) //vr door
|
||||
LocalObject(435, Door.Constructor) //vr door
|
||||
LocalObject(744, SpawnTube.Constructor(Vector3(3684.336f, 2709.0469f, 91.9f), Vector3(0, 0, 180)))
|
||||
LocalObject(745, SpawnTube.Constructor(Vector3(3684.336f, 2713.75f, 91.9f), Vector3(0, 0, 0)))
|
||||
LocalObject(746, SpawnTube.Constructor(Vector3(3690.9062f, 2708.4219f, 91.9f), Vector3(0, 0, 180)))
|
||||
LocalObject(747, SpawnTube.Constructor(Vector3(3691.0703f, 2713.8672f, 91.9f), Vector3(0, 0, 0)))
|
||||
LocalObject(748, SpawnTube.Constructor(Vector3(3697.664f, 2708.3984f, 91.9f), Vector3(0, 0, 180)))
|
||||
LocalObject(749, SpawnTube.Constructor(Vector3(3697.711f, 2713.2344f, 91.9f), Vector3(0, 0, 0)))
|
||||
LocalObject(852, Terminal.Constructor(order_terminal)) //s. wall
|
||||
LocalObject(853, Terminal.Constructor(order_terminal)) //n. wall
|
||||
LocalObject(854, Terminal.Constructor(order_terminal)) //s. wall
|
||||
LocalObject(855, Terminal.Constructor(order_terminal)) //n. wall
|
||||
LocalObject(859, Terminal.Constructor(order_terminal)) //s. wall
|
||||
LocalObject(860, Terminal.Constructor(order_terminal)) //n. wall
|
||||
ObjectToBuilding(258, 42)
|
||||
ObjectToBuilding(259, 42)
|
||||
ObjectToBuilding(260, 42)
|
||||
ObjectToBuilding(261, 42)
|
||||
ObjectToBuilding(262, 42)
|
||||
ObjectToBuilding(263, 42)
|
||||
ObjectToBuilding(372, 42)
|
||||
ObjectToBuilding(373, 42)
|
||||
ObjectToBuilding(430, 42)
|
||||
ObjectToBuilding(431, 42)
|
||||
ObjectToBuilding(432, 42)
|
||||
ObjectToBuilding(433, 42)
|
||||
ObjectToBuilding(434, 42)
|
||||
ObjectToBuilding(435, 42)
|
||||
ObjectToBuilding(744, 42)
|
||||
ObjectToBuilding(745, 42)
|
||||
ObjectToBuilding(746, 42)
|
||||
ObjectToBuilding(747, 42)
|
||||
ObjectToBuilding(748, 42)
|
||||
ObjectToBuilding(749, 42)
|
||||
ObjectToBuilding(852, 42)
|
||||
ObjectToBuilding(853, 42)
|
||||
ObjectToBuilding(854, 42)
|
||||
ObjectToBuilding(855, 42)
|
||||
ObjectToBuilding(859, 42)
|
||||
ObjectToBuilding(860, 42)
|
||||
}
|
||||
|
||||
def Building51() : Unit = {
|
||||
//air terminal west of HART C
|
||||
LocalBuilding(51, FoundationBuilder(Building.Structure(StructureType.Platform)))
|
||||
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)
|
||||
}
|
||||
|
||||
def Building77() : Unit = {
|
||||
//ground terminal west of HART C
|
||||
LocalBuilding(77, FoundationBuilder(Building.Structure(StructureType.Platform)))
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
val map14 = new ZoneMap("map13")
|
||||
val map14 = new ZoneMap("map14")
|
||||
|
||||
val map15 = new ZoneMap("map13")
|
||||
val map15 = new ZoneMap("map15")
|
||||
|
||||
val map16 = new ZoneMap("map13")
|
||||
val map16 = new ZoneMap("map16")
|
||||
|
||||
val ugd01 = new ZoneMap("ugd01")
|
||||
|
||||
|
|
@ -209,7 +642,7 @@ object Maps {
|
|||
|
||||
val ugd06 = new ZoneMap("ugd06")
|
||||
|
||||
val map96 = new ZoneMap("ugd06")
|
||||
val map96 = new ZoneMap("map96")
|
||||
|
||||
val map97 = new ZoneMap("map97")
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
import akka.actor.ActorContext
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.types.PlanetSideEmpire
|
||||
|
||||
object Zones {
|
||||
val z1 = new Zone("z1", Maps.map1, 1)
|
||||
|
|
@ -19,6 +20,13 @@ 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
|
||||
Building(49).get.Faction = PlanetSideEmpire.VS
|
||||
Building(49).get.ModelId = 69
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +47,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
|
||||
}
|
||||
}
|
||||
|
|
@ -81,4 +89,32 @@ object Zones {
|
|||
val i3 = new Zone("i3", Maps.map98, 31)
|
||||
|
||||
val i4 = new Zone("i4", Maps.map99, 32)
|
||||
|
||||
/**
|
||||
* Get the zone identifier name for the sanctuary continent of a given empire.
|
||||
* @param faction the empire
|
||||
* @return the zone id, with a blank string as an invalidating result
|
||||
*/
|
||||
def SanctuaryZoneId(faction : PlanetSideEmpire.Value) : String = {
|
||||
faction match {
|
||||
case PlanetSideEmpire.NC => "home1"
|
||||
case PlanetSideEmpire.TR => "home2"
|
||||
case PlanetSideEmpire.VS => "home3"
|
||||
case PlanetSideEmpire.NEUTRAL => "" //invalid, not black ops
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the zone number for the sanctuary continent of a given empire.
|
||||
* @param faction the empire
|
||||
* @return the zone number, within the sequence 1-32, and with 0 as an invalidating result
|
||||
*/
|
||||
def SanctuaryZoneNumber(faction : PlanetSideEmpire.Value) : Int = {
|
||||
faction match {
|
||||
case PlanetSideEmpire.NC => 11
|
||||
case PlanetSideEmpire.TR => 12
|
||||
case PlanetSideEmpire.VS => 13
|
||||
case PlanetSideEmpire.NEUTRAL => 0 //invalid, not black ops
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package services.avatar
|
||||
|
||||
import net.psforever.objects.Player
|
||||
import net.psforever.objects.equipment.Equipment
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.game.{PlanetSideGUID, PlayerStateMessageUpstream}
|
||||
import net.psforever.packet.game.objectcreate.ConstructorData
|
||||
import net.psforever.types.{ExoSuitType, Vector3}
|
||||
|
|
@ -24,6 +26,7 @@ object AvatarAction {
|
|||
final case class ObjectHeld(player_guid : PlanetSideGUID, slot : Int) extends Action
|
||||
final case class PlanetsideAttribute(player_guid : PlanetSideGUID, attribute_type : Int, attribute_value : Long) extends Action
|
||||
final case class PlayerState(player_guid : PlanetSideGUID, msg : PlayerStateMessageUpstream, spectator : Boolean, weaponInHand : Boolean) extends Action
|
||||
final case class Release(player : Player, zone : Zone, time : Option[Long] = None) extends Action
|
||||
final case class Reload(player_guid : PlanetSideGUID, weapon_guid : PlanetSideGUID) extends Action
|
||||
final case class WeaponDryFire(player_guid : PlanetSideGUID, weapon_guid : PlanetSideGUID) extends Action
|
||||
// final case class PlayerStateShift(killer : PlanetSideGUID, victim : PlanetSideGUID) extends Action
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package services.avatar
|
||||
|
||||
import net.psforever.objects.Player
|
||||
import net.psforever.objects.equipment.Equipment
|
||||
import net.psforever.packet.game.{PlanetSideGUID, PlayerStateMessageUpstream}
|
||||
import net.psforever.packet.game.objectcreate.ConstructorData
|
||||
|
|
@ -24,6 +25,7 @@ object AvatarResponse {
|
|||
final case class ObjectHeld(slot : Int) extends Response
|
||||
final case class PlanetsideAttribute(attribute_type : Int, attribute_value : Long) extends Response
|
||||
final case class PlayerState(msg : PlayerStateMessageUpstream, spectator : Boolean, weaponInHand : Boolean) extends Response
|
||||
final case class Release(player : Player) extends Response
|
||||
final case class Reload(weapon_guid : PlanetSideGUID) extends Response
|
||||
final case class WeaponDryFire(weapon_guid : PlanetSideGUID) extends Response
|
||||
// final case class PlayerStateShift(itemID : PlanetSideGUID) extends Response
|
||||
|
|
|
|||
|
|
@ -1,11 +1,14 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package services.avatar
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.actor.{Actor, ActorRef, Props}
|
||||
import services.avatar.support.CorpseRemovalActor
|
||||
import services.{GenericEventBus, Service}
|
||||
|
||||
class AvatarService extends Actor {
|
||||
//import AvatarServiceResponse._
|
||||
private val undertaker : ActorRef = context.actorOf(Props[CorpseRemovalActor], "corpse-removal-agent")
|
||||
undertaker ! "startup"
|
||||
|
||||
private [this] val log = org.log4s.getLogger
|
||||
|
||||
override def preStart = {
|
||||
|
|
@ -87,6 +90,14 @@ class AvatarService extends Actor {
|
|||
AvatarEvents.publish(
|
||||
AvatarServiceResponse(s"/$forChannel/Avatar", guid, AvatarResponse.PlayerState(msg, spectator, weapon))
|
||||
)
|
||||
case AvatarAction.Release(player, zone, time) =>
|
||||
undertaker ! (time match {
|
||||
case Some(t) => CorpseRemovalActor.AddCorpse(player, zone, t)
|
||||
case None => CorpseRemovalActor.AddCorpse(player, zone)
|
||||
})
|
||||
AvatarEvents.publish(
|
||||
AvatarServiceResponse(s"/$forChannel/Avatar", player.GUID, AvatarResponse.Release(player))
|
||||
)
|
||||
case AvatarAction.Reload(player_guid, weapon_guid) =>
|
||||
AvatarEvents.publish(
|
||||
AvatarServiceResponse(s"/$forChannel/Avatar", player_guid, AvatarResponse.Reload(weapon_guid))
|
||||
|
|
@ -95,9 +106,14 @@ class AvatarService extends Actor {
|
|||
AvatarEvents.publish(
|
||||
AvatarServiceResponse(s"/$forChannel/Avatar", player_guid, AvatarResponse.WeaponDryFire(weapon_guid))
|
||||
)
|
||||
|
||||
case _ => ;
|
||||
}
|
||||
|
||||
//message to Undertaker
|
||||
case AvatarServiceMessage.RemoveSpecificCorpse(corpses) =>
|
||||
undertaker ! AvatarServiceMessage.RemoveSpecificCorpse( corpses.filter(corpse => {corpse.HasGUID && corpse.isBackpack}) )
|
||||
|
||||
/*
|
||||
case AvatarService.PlayerStateMessage(msg) =>
|
||||
// log.info(s"NEW: ${m}")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,10 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package services.avatar
|
||||
|
||||
import net.psforever.objects.Player
|
||||
|
||||
final case class AvatarServiceMessage(forChannel : String, actionMessage : AvatarAction.Action)
|
||||
|
||||
object AvatarServiceMessage {
|
||||
final case class RemoveSpecificCorpse(corpse : List[Player])
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,199 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package services.avatar.support
|
||||
|
||||
import akka.actor.{Actor, ActorRef, Cancellable}
|
||||
import net.psforever.objects.guid.TaskResolver
|
||||
import net.psforever.objects.{DefaultCancellable, Player}
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.types.Vector3
|
||||
import services.{Service, ServiceManager}
|
||||
import services.ServiceManager.Lookup
|
||||
import services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
|
||||
import scala.annotation.tailrec
|
||||
import scala.concurrent.duration._
|
||||
|
||||
class CorpseRemovalActor extends Actor {
|
||||
private var burial : Cancellable = DefaultCancellable.obj
|
||||
|
||||
private var corpses : List[CorpseRemovalActor.Entry] = List()
|
||||
|
||||
private var taskResolver : ActorRef = Actor.noSender
|
||||
|
||||
private[this] val log = org.log4s.getLogger
|
||||
|
||||
override def postStop() = {
|
||||
//Cart Master: See you on Thursday.
|
||||
corpses.foreach { BurialTask }
|
||||
corpses = Nil
|
||||
}
|
||||
|
||||
def receive : Receive = {
|
||||
case "startup" =>
|
||||
ServiceManager.serviceManager ! Lookup("taskResolver") //ask for a resolver to deal with the GUID system
|
||||
|
||||
case ServiceManager.LookupResult("taskResolver", endpoint) =>
|
||||
//Cart Master: Bring out your dead!
|
||||
taskResolver = endpoint
|
||||
context.become(Processing)
|
||||
|
||||
case _ => ;
|
||||
}
|
||||
|
||||
def Processing : Receive = {
|
||||
case CorpseRemovalActor.AddCorpse(corpse, zone, time) =>
|
||||
if(corpse.isBackpack) {
|
||||
if(corpses.isEmpty) {
|
||||
//we were the only entry so the event must be started from scratch
|
||||
corpses = List(CorpseRemovalActor.Entry(corpse, zone, time))
|
||||
RetimeFirstTask()
|
||||
}
|
||||
else {
|
||||
//unknown number of entries; append, sort, then re-time tasking
|
||||
val oldHead = corpses.head
|
||||
corpses = (corpses :+ CorpseRemovalActor.Entry(corpse, zone, time)).sortBy(_.timeAlive)
|
||||
if(oldHead != corpses.head) {
|
||||
RetimeFirstTask()
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
//Cart Master: 'Ere. He says he's not dead!
|
||||
log.warn(s"$corpse does not qualify as a corpse; ignored queueing request")
|
||||
}
|
||||
|
||||
case AvatarServiceMessage.RemoveSpecificCorpse(targets) =>
|
||||
if(targets.nonEmpty) {
|
||||
//Cart Master: No, I've got to go to the Robinsons'. They've lost nine today.
|
||||
burial.cancel
|
||||
if(targets.size == 1) {
|
||||
log.debug(s"a target corpse submitted for early cleanup: ${targets.head}")
|
||||
//simple selection
|
||||
CorpseRemovalActor.recursiveFindCorpse(corpses.iterator, targets.head) match {
|
||||
case None => ;
|
||||
case Some(index) =>
|
||||
BurialTask(corpses(index))
|
||||
corpses = corpses.take(index) ++ corpses.drop(index+1)
|
||||
}
|
||||
}
|
||||
else {
|
||||
log.debug(s"multiple target corpses submitted for early cleanup: $targets")
|
||||
//cumbersome partition
|
||||
//a - find targets from corpses
|
||||
(for {
|
||||
a <- targets
|
||||
b <- corpses
|
||||
if b.corpse == a &&
|
||||
b.corpse.Continent.equals(a.Continent) &&
|
||||
b.corpse.HasGUID && a.HasGUID && b.corpse.GUID == a.GUID
|
||||
} yield b).foreach { BurialTask }
|
||||
//b - corpses after the found targets are
|
||||
//removed (note: cull any non-GUID entries while at it)
|
||||
corpses = (for {
|
||||
a <- targets
|
||||
b <- corpses
|
||||
if b.corpse.HasGUID && a.HasGUID &&
|
||||
(b.corpse != a ||
|
||||
!b.corpse.Continent.equals(a.Continent) ||
|
||||
!b.corpse.HasGUID || !a.HasGUID || b.corpse.GUID != a.GUID)
|
||||
} yield b).sortBy(_.timeAlive)
|
||||
}
|
||||
RetimeFirstTask()
|
||||
}
|
||||
|
||||
case CorpseRemovalActor.Dispose() =>
|
||||
burial.cancel
|
||||
val now : Long = System.nanoTime
|
||||
val (buried, rotting) = corpses.partition(entry => { now - entry.time >= entry.timeAlive })
|
||||
corpses = rotting
|
||||
buried.foreach { BurialTask }
|
||||
RetimeFirstTask()
|
||||
|
||||
case CorpseRemovalActor.FailureToWork(target, zone, ex) =>
|
||||
//Cart Master: Oh, I can't take him like that. It's against regulations.
|
||||
log.error(s"corpse $target from $zone not properly unregistered - $ex")
|
||||
|
||||
case _ => ;
|
||||
}
|
||||
|
||||
def RetimeFirstTask(now : Long = System.nanoTime) : Unit = {
|
||||
//Cart Master: Thursday.
|
||||
burial.cancel
|
||||
if(corpses.nonEmpty) {
|
||||
val short_timeout : FiniteDuration = math.max(1, corpses.head.timeAlive - (now - corpses.head.time)) nanoseconds
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
burial = context.system.scheduler.scheduleOnce(short_timeout, self, CorpseRemovalActor.Dispose())
|
||||
}
|
||||
}
|
||||
|
||||
def BurialTask(entry : CorpseRemovalActor.Entry) : Unit = {
|
||||
//Cart master: Nine pence.
|
||||
val target = entry.corpse
|
||||
val zone = entry.zone
|
||||
target.Position = Vector3.Zero //somewhere it will not disturb anything
|
||||
entry.zone.Population ! Zone.Corpse.Remove(target)
|
||||
context.parent ! AvatarServiceMessage(zone.Id, AvatarAction.ObjectDelete(Service.defaultPlayerGUID, target.GUID))
|
||||
taskResolver ! BurialTask(target, zone)
|
||||
}
|
||||
|
||||
def BurialTask(corpse : Player, zone : Zone) : TaskResolver.GiveTask = {
|
||||
import net.psforever.objects.guid.{GUIDTask, Task}
|
||||
TaskResolver.GiveTask (
|
||||
new Task() {
|
||||
private val localCorpse = corpse
|
||||
private val localZone = zone
|
||||
private val localAnnounce = self
|
||||
|
||||
override def isComplete : Task.Resolution.Value = if(!localCorpse.HasGUID) {
|
||||
Task.Resolution.Success
|
||||
}
|
||||
else {
|
||||
Task.Resolution.Incomplete
|
||||
}
|
||||
|
||||
def Execute(resolver : ActorRef) : Unit = {
|
||||
resolver ! scala.util.Success(this)
|
||||
}
|
||||
|
||||
override def onFailure(ex : Throwable): Unit = {
|
||||
localAnnounce ! CorpseRemovalActor.FailureToWork(localCorpse, localZone, ex)
|
||||
}
|
||||
}, List(GUIDTask.UnregisterPlayer(corpse)(zone.GUID))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
object CorpseRemovalActor {
|
||||
final val time : Long = 180000000000L //3 min (180s)
|
||||
|
||||
final case class AddCorpse(corpse : Player, zone : Zone, time : Long = CorpseRemovalActor.time)
|
||||
|
||||
final case class Entry(corpse : Player, zone : Zone, timeAlive : Long = CorpseRemovalActor.time, time : Long = System.nanoTime())
|
||||
|
||||
final case class FailureToWork(corpse : Player, zone : Zone, ex : Throwable)
|
||||
|
||||
final case class Dispose()
|
||||
|
||||
/**
|
||||
* A recursive function that finds and removes a specific player from a list of players.
|
||||
* @param iter an `Iterator` of `CorpseRemovalActor.Entry` objects
|
||||
* @param player the target `Player`
|
||||
* @param index the index of the discovered `Player` object
|
||||
* @return the index of the `Player` object in the list to be removed;
|
||||
* `None`, otherwise
|
||||
*/
|
||||
@tailrec final def recursiveFindCorpse(iter : Iterator[CorpseRemovalActor.Entry], player : Player, index : Int = 0) : Option[Int] = {
|
||||
if(!iter.hasNext) {
|
||||
None
|
||||
}
|
||||
else {
|
||||
val corpse = iter.next.corpse
|
||||
if(corpse == player && corpse.Continent.equals(player.Continent) && corpse.GUID == player.GUID) {
|
||||
Some(index)
|
||||
}
|
||||
else {
|
||||
recursiveFindCorpse(iter, player, index + 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ import net.psforever.objects.guid.TaskResolver
|
|||
import net.psforever.objects.vehicles.Seat
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.game.PlanetSideGUID
|
||||
import net.psforever.types.Vector3
|
||||
import services.ServiceManager
|
||||
import services.ServiceManager.Lookup
|
||||
import services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
|
@ -80,6 +81,7 @@ class DeconstructionActor extends Actor {
|
|||
vehiclesToScrap.foreach(entry => {
|
||||
val vehicle = entry.vehicle
|
||||
val zone = entry.zone
|
||||
vehicle.Position = Vector3.Zero //somewhere it will not disturb anything
|
||||
entry.zone.Transport ! Zone.DespawnVehicle(vehicle)
|
||||
context.parent ! DeconstructionActor.DeleteVehicle(vehicle.GUID, zone.Id) //call up to the main event system
|
||||
context.parent ! VehicleServiceMessage.RevokeActorControl(vehicle) //call up to a sibling manager
|
||||
|
|
|
|||
|
|
@ -1,15 +1,21 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
import akka.actor.Props
|
||||
import akka.routing.RandomPool
|
||||
import net.psforever.objects._
|
||||
import net.psforever.objects.guid.{GUIDTask, TaskResolver}
|
||||
import net.psforever.objects.zones.{Zone, ZoneActor, ZoneMap}
|
||||
import net.psforever.packet.game.{PlanetSideGUID, PlayerStateMessageUpstream}
|
||||
import net.psforever.types.{CharacterGender, ExoSuitType, PlanetSideEmpire, Vector3}
|
||||
import services.Service
|
||||
import services.{Service, ServiceManager}
|
||||
import services.avatar._
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
class AvatarService1Test extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"construct" in {
|
||||
system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
assert(true)
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +24,8 @@ class AvatarService1Test extends ActorTest {
|
|||
class AvatarService2Test extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"subscribe" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
assert(true)
|
||||
}
|
||||
|
|
@ -27,8 +34,9 @@ class AvatarService2Test extends ActorTest {
|
|||
|
||||
class AvatarService3Test extends ActorTest {
|
||||
"AvatarService" should {
|
||||
ServiceManager.boot(system)
|
||||
"subscribe to a specific channel" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! Service.Leave()
|
||||
assert(true)
|
||||
|
|
@ -39,7 +47,8 @@ class AvatarService3Test extends ActorTest {
|
|||
class AvatarService4Test extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"subscribe" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! Service.LeaveAll()
|
||||
assert(true)
|
||||
|
|
@ -50,7 +59,8 @@ class AvatarService4Test extends ActorTest {
|
|||
class AvatarService5Test extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass an unhandled message" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! "hello"
|
||||
expectNoMsg()
|
||||
|
|
@ -61,7 +71,8 @@ class AvatarService5Test extends ActorTest {
|
|||
class ArmorChangedTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass ArmorChanged" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ArmorChanged(PlanetSideGUID(10), ExoSuitType.Reinforced, 0))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ArmorChanged(ExoSuitType.Reinforced, 0)))
|
||||
|
|
@ -72,7 +83,8 @@ class ArmorChangedTest extends ActorTest {
|
|||
class ConcealPlayerTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass ConcealPlayer" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ConcealPlayer(PlanetSideGUID(10)))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ConcealPlayer()))
|
||||
|
|
@ -85,7 +97,8 @@ class EquipmentInHandTest extends ActorTest {
|
|||
|
||||
"AvatarService" should {
|
||||
"pass EquipmentInHand" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.EquipmentInHand(PlanetSideGUID(10), 2, tool))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.EquipmentInHand(2, tool)))
|
||||
|
|
@ -101,7 +114,8 @@ class EquipmentOnGroundTest extends ActorTest {
|
|||
|
||||
"AvatarService" should {
|
||||
"pass EquipmentOnGround" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.EquipmentOnGround(PlanetSideGUID(10), Vector3(300f, 200f, 100f), Vector3(450f, 300f, 150f), toolDef.ObjectId, PlanetSideGUID(11), cdata))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.EquipmentOnGround(Vector3(300f, 200f, 100f), Vector3(450f, 300f, 150f), toolDef.ObjectId, PlanetSideGUID(11), cdata)))
|
||||
|
|
@ -110,14 +124,15 @@ class EquipmentOnGroundTest extends ActorTest {
|
|||
}
|
||||
|
||||
class LoadPlayerTest extends ActorTest {
|
||||
val obj = Player("TestCharacter1", PlanetSideEmpire.VS, CharacterGender.Female, 1, 1)
|
||||
val obj = Player(Avatar("TestCharacter1", PlanetSideEmpire.VS, CharacterGender.Female, 1, 1))
|
||||
obj.GUID = PlanetSideGUID(10)
|
||||
obj.Slot(5).Equipment.get.GUID = PlanetSideGUID(11)
|
||||
val pdata = obj.Definition.Packet.DetailedConstructorData(obj).get
|
||||
|
||||
"AvatarService" should {
|
||||
"pass LoadPlayer" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.LoadPlayer(PlanetSideGUID(10), pdata))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.LoadPlayer(pdata)))
|
||||
|
|
@ -128,7 +143,8 @@ class LoadPlayerTest extends ActorTest {
|
|||
class ObjectDeleteTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass ObjectDelete" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ObjectDelete(PlanetSideGUID(10), PlanetSideGUID(11)))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ObjectDelete(PlanetSideGUID(11), 0)))
|
||||
|
|
@ -142,7 +158,8 @@ class ObjectDeleteTest extends ActorTest {
|
|||
class ObjectHeldTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass ObjectHeld" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ObjectHeld(PlanetSideGUID(10), 1))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ObjectHeld(1)))
|
||||
|
|
@ -153,7 +170,8 @@ class ObjectHeldTest extends ActorTest {
|
|||
class PlanetsideAttributeTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass PlanetsideAttribute" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.PlanetsideAttribute(PlanetSideGUID(10), 5, 1200L))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.PlanetsideAttribute(5, 1200L)))
|
||||
|
|
@ -166,7 +184,8 @@ class PlayerStateTest extends ActorTest {
|
|||
|
||||
"AvatarService" should {
|
||||
"pass PlayerState" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.PlayerState(PlanetSideGUID(10), msg, false, false))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.PlayerState(msg, false, false)))
|
||||
|
|
@ -177,7 +196,8 @@ class PlayerStateTest extends ActorTest {
|
|||
class ReloadTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass Reload" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.Reload(PlanetSideGUID(10), PlanetSideGUID(40)))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.Reload(PlanetSideGUID(40))))
|
||||
|
|
@ -191,7 +211,8 @@ class ChangeAmmoTest extends ActorTest {
|
|||
|
||||
"AvatarService" should {
|
||||
"pass ChangeAmmo" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ChangeAmmo(PlanetSideGUID(10), PlanetSideGUID(40), 0, PlanetSideGUID(40), ammoDef.ObjectId, PlanetSideGUID(41), ammoDef.Packet.ConstructorData(ammoBox).get))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ChangeAmmo(PlanetSideGUID(40), 0, PlanetSideGUID(40), ammoDef.ObjectId, PlanetSideGUID(41), ammoDef.Packet.ConstructorData(ammoBox).get)))
|
||||
|
|
@ -205,7 +226,8 @@ class ChangeFireModeTest extends ActorTest {
|
|||
|
||||
"AvatarService" should {
|
||||
"pass ChangeFireMode" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ChangeFireMode(PlanetSideGUID(10), PlanetSideGUID(40), 0))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ChangeFireMode(PlanetSideGUID(40), 0)))
|
||||
|
|
@ -216,7 +238,8 @@ class ChangeFireModeTest extends ActorTest {
|
|||
class ChangeFireStateStartTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass ChangeFireState_Start" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ChangeFireState_Start(PlanetSideGUID(10), PlanetSideGUID(40)))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ChangeFireState_Start(PlanetSideGUID(40))))
|
||||
|
|
@ -227,7 +250,8 @@ class ChangeFireStateStartTest extends ActorTest {
|
|||
class ChangeFireStateStopTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass ChangeFireState_Stop" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.ChangeFireState_Stop(PlanetSideGUID(10), PlanetSideGUID(40)))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.ChangeFireState_Stop(PlanetSideGUID(40))))
|
||||
|
|
@ -238,7 +262,8 @@ class ChangeFireStateStopTest extends ActorTest {
|
|||
class WeaponDryFireTest extends ActorTest {
|
||||
"AvatarService" should {
|
||||
"pass WeaponDryFire" in {
|
||||
val service = system.actorOf(Props[AvatarService], "service")
|
||||
ServiceManager.boot(system)
|
||||
val service = system.actorOf(Props[AvatarService], AvatarServiceTest.TestName)
|
||||
service ! Service.Join("test")
|
||||
service ! AvatarServiceMessage("test", AvatarAction.WeaponDryFire(PlanetSideGUID(10), PlanetSideGUID(40)))
|
||||
expectMsg(AvatarServiceResponse("/test/Avatar", PlanetSideGUID(10), AvatarResponse.WeaponDryFire(PlanetSideGUID(40))))
|
||||
|
|
@ -246,6 +271,177 @@ class WeaponDryFireTest extends ActorTest {
|
|||
}
|
||||
}
|
||||
|
||||
object AvatarServiceTest {
|
||||
//decoy
|
||||
/*
|
||||
Preparation for these three Release tests is involved.
|
||||
The ServiceManager must not only be set up correctly, but must be given a TaskResolver.
|
||||
The AvatarService is started and that starts CorpseRemovalActor, an essential part of this test.
|
||||
The CorpseRemovalActor needs that TaskResolver created by the ServiceManager;
|
||||
but, another independent TaskResolver will be needed for manual parts of the test.
|
||||
(The ServiceManager's TaskResolver can be "borrowed" but that requires writing code to intercept it.)
|
||||
The Zone needs to be set up and initialized properly with a ZoneActor.
|
||||
The ZoneActor builds the GUID Actor and the ZonePopulationActor.
|
||||
|
||||
ALL of these Actors will talk to each other.
|
||||
The lines of communication can short circuit if the next Actor does not have the correct information.
|
||||
Putting Actor startup in the main class, outside of the body of the test, helps.
|
||||
Frequent pauses to allow everything to sort their messages also helps.
|
||||
Even with all this work, the tests have a high chance of failure just due to being asynchronous.
|
||||
*/
|
||||
class AvatarReleaseTest extends ActorTest {
|
||||
ServiceManager.boot(system) ! ServiceManager.Register(RandomPool(1).props(Props[TaskResolver]), "taskResolver")
|
||||
val service = system.actorOf(Props[AvatarService], "release-test-service")
|
||||
val zone = new Zone("test", new ZoneMap("test-map"), 0)
|
||||
val taskResolver = system.actorOf(Props[TaskResolver], "release-test-resolver")
|
||||
zone.Actor = system.actorOf(Props(classOf[ZoneActor], zone), "release-test-zone")
|
||||
zone.Actor ! Zone.Init()
|
||||
val obj = Player(Avatar("TestCharacter", PlanetSideEmpire.VS, CharacterGender.Female, 1, 1))
|
||||
obj.Continent = "test"
|
||||
obj.Release
|
||||
|
||||
"AvatarService" should {
|
||||
"pass Release" in {
|
||||
expectNoMsg(100 milliseconds) //spacer
|
||||
|
||||
service ! Service.Join("test")
|
||||
taskResolver ! GUIDTask.RegisterObjectTask(obj)(zone.GUID)
|
||||
assert(zone.Corpses.isEmpty)
|
||||
zone.Population ! Zone.Corpse.Add(obj)
|
||||
expectNoMsg(100 milliseconds) //spacer
|
||||
|
||||
assert(zone.Corpses.size == 1)
|
||||
assert(obj.HasGUID)
|
||||
val guid = obj.GUID
|
||||
service ! AvatarServiceMessage("test", AvatarAction.Release(obj, zone, Some(1000000000))) //alive for one second
|
||||
|
||||
val reply1 = receiveOne(100 milliseconds)
|
||||
assert(reply1.isInstanceOf[AvatarServiceResponse])
|
||||
val reply1msg = reply1.asInstanceOf[AvatarServiceResponse]
|
||||
assert(reply1msg.toChannel == "/test/Avatar")
|
||||
assert(reply1msg.avatar_guid == guid)
|
||||
assert(reply1msg.replyMessage.isInstanceOf[AvatarResponse.Release])
|
||||
assert(reply1msg.replyMessage.asInstanceOf[AvatarResponse.Release].player == obj)
|
||||
|
||||
val reply2 = receiveOne(2 seconds)
|
||||
assert(reply2.isInstanceOf[AvatarServiceResponse])
|
||||
val reply2msg = reply2.asInstanceOf[AvatarServiceResponse]
|
||||
assert(reply2msg.toChannel.equals("/test/Avatar"))
|
||||
assert(reply2msg.avatar_guid == Service.defaultPlayerGUID)
|
||||
assert(reply2msg.replyMessage.isInstanceOf[AvatarResponse.ObjectDelete])
|
||||
assert(reply2msg.replyMessage.asInstanceOf[AvatarResponse.ObjectDelete].item_guid == guid)
|
||||
|
||||
expectNoMsg(200 milliseconds)
|
||||
assert(zone.Corpses.isEmpty)
|
||||
assert(!obj.HasGUID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AvatarReleaseEarly1Test extends ActorTest {
|
||||
ServiceManager.boot(system) ! ServiceManager.Register(RandomPool(1).props(Props[TaskResolver]), "taskResolver")
|
||||
val service = system.actorOf(Props[AvatarService], "release-test-service")
|
||||
val zone = new Zone("test", new ZoneMap("test-map"), 0)
|
||||
val taskResolver = system.actorOf(Props[TaskResolver], "release-test-resolver")
|
||||
zone.Actor = system.actorOf(Props(classOf[ZoneActor], zone), "release-test-zone")
|
||||
zone.Actor ! Zone.Init()
|
||||
val obj = Player(Avatar("TestCharacter1", PlanetSideEmpire.VS, CharacterGender.Female, 1, 1))
|
||||
obj.Continent = "test"
|
||||
obj.Release
|
||||
|
||||
"AvatarService" should {
|
||||
"pass Release" in {
|
||||
expectNoMsg(100 milliseconds) //spacer
|
||||
|
||||
service ! Service.Join("test")
|
||||
taskResolver ! GUIDTask.RegisterObjectTask(obj)(zone.GUID)
|
||||
assert(zone.Corpses.isEmpty)
|
||||
zone.Population ! Zone.Corpse.Add(obj)
|
||||
expectNoMsg(100 milliseconds) //spacer
|
||||
|
||||
assert(zone.Corpses.size == 1)
|
||||
assert(obj.HasGUID)
|
||||
val guid = obj.GUID
|
||||
service ! AvatarServiceMessage("test", AvatarAction.Release(obj, zone)) //3+ minutes!
|
||||
|
||||
val reply1 = receiveOne(100 milliseconds)
|
||||
assert(reply1.isInstanceOf[AvatarServiceResponse])
|
||||
val reply1msg = reply1.asInstanceOf[AvatarServiceResponse]
|
||||
assert(reply1msg.toChannel == "/test/Avatar")
|
||||
assert(reply1msg.avatar_guid == guid)
|
||||
assert(reply1msg.replyMessage.isInstanceOf[AvatarResponse.Release])
|
||||
assert(reply1msg.replyMessage.asInstanceOf[AvatarResponse.Release].player == obj)
|
||||
|
||||
service ! AvatarServiceMessage.RemoveSpecificCorpse(List(obj)) //IMPORTANT: ONE ENTRY
|
||||
val reply2 = receiveOne(100 milliseconds)
|
||||
assert(reply2.isInstanceOf[AvatarServiceResponse])
|
||||
val reply2msg = reply2.asInstanceOf[AvatarServiceResponse]
|
||||
assert(reply2msg.toChannel.equals("/test/Avatar"))
|
||||
assert(reply2msg.avatar_guid == Service.defaultPlayerGUID)
|
||||
assert(reply2msg.replyMessage.isInstanceOf[AvatarResponse.ObjectDelete])
|
||||
assert(reply2msg.replyMessage.asInstanceOf[AvatarResponse.ObjectDelete].item_guid == guid)
|
||||
|
||||
expectNoMsg(200 milliseconds)
|
||||
assert(zone.Corpses.isEmpty)
|
||||
assert(!obj.HasGUID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AvatarReleaseEarly2Test extends ActorTest {
|
||||
ServiceManager.boot(system) ! ServiceManager.Register(RandomPool(1).props(Props[TaskResolver]), "taskResolver")
|
||||
val service = system.actorOf(Props[AvatarService], "release-test-service")
|
||||
val zone = new Zone("test", new ZoneMap("test-map"), 0)
|
||||
val taskResolver = system.actorOf(Props[TaskResolver], "release-test-resolver")
|
||||
zone.Actor = system.actorOf(Props(classOf[ZoneActor], zone), "release-test-zone")
|
||||
zone.Actor ! Zone.Init()
|
||||
val objAlt = Player(Avatar("TestCharacter2", PlanetSideEmpire.NC, CharacterGender.Male, 1, 1)) //necessary clutter
|
||||
val obj = Player(Avatar("TestCharacter1", PlanetSideEmpire.VS, CharacterGender.Female, 1, 1))
|
||||
obj.Continent = "test"
|
||||
obj.Release
|
||||
|
||||
"AvatarService" should {
|
||||
"pass Release" in {
|
||||
expectNoMsg(100 milliseconds) //spacer
|
||||
|
||||
service ! Service.Join("test")
|
||||
taskResolver ! GUIDTask.RegisterObjectTask(obj)(zone.GUID)
|
||||
assert(zone.Corpses.isEmpty)
|
||||
zone.Population ! Zone.Corpse.Add(obj)
|
||||
expectNoMsg(100 milliseconds) //spacer
|
||||
|
||||
assert(zone.Corpses.size == 1)
|
||||
assert(obj.HasGUID)
|
||||
val guid = obj.GUID
|
||||
service ! AvatarServiceMessage("test", AvatarAction.Release(obj, zone)) //3+ minutes!
|
||||
|
||||
val reply1 = receiveOne(100 milliseconds)
|
||||
assert(reply1.isInstanceOf[AvatarServiceResponse])
|
||||
val reply1msg = reply1.asInstanceOf[AvatarServiceResponse]
|
||||
assert(reply1msg.toChannel == "/test/Avatar")
|
||||
assert(reply1msg.avatar_guid == guid)
|
||||
assert(reply1msg.replyMessage.isInstanceOf[AvatarResponse.Release])
|
||||
assert(reply1msg.replyMessage.asInstanceOf[AvatarResponse.Release].player == obj)
|
||||
|
||||
service ! AvatarServiceMessage.RemoveSpecificCorpse(List(objAlt, obj)) //IMPORTANT: TWO ENTRIES
|
||||
val reply2 = receiveOne(100 milliseconds)
|
||||
assert(reply2.isInstanceOf[AvatarServiceResponse])
|
||||
val reply2msg = reply2.asInstanceOf[AvatarServiceResponse]
|
||||
assert(reply2msg.toChannel.equals("/test/Avatar"))
|
||||
assert(reply2msg.avatar_guid == Service.defaultPlayerGUID)
|
||||
assert(reply2msg.replyMessage.isInstanceOf[AvatarResponse.ObjectDelete])
|
||||
assert(reply2msg.replyMessage.asInstanceOf[AvatarResponse.ObjectDelete].item_guid == guid)
|
||||
|
||||
expectNoMsg(200 milliseconds)
|
||||
assert(zone.Corpses.isEmpty)
|
||||
assert(!obj.HasGUID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object AvatarServiceTest {
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
private val number = new AtomicInteger(1)
|
||||
|
||||
def TestName : String = {
|
||||
s"service${number.getAndIncrement()}"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue