mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-04-22 04:15:19 +00:00
Another revamp to vehicle spawn process. Wrote tests.
This commit is contained in:
parent
5d5c609a2f
commit
68422401e5
22 changed files with 1267 additions and 340 deletions
|
|
@ -126,14 +126,15 @@ object Maps {
|
|||
LocalObject(2323, Door.Constructor) //spawn tube door
|
||||
LocalObject(2324, Door.Constructor) //spawn tube door
|
||||
LocalObject(2419, Terminal.Constructor(ground_vehicle_terminal))
|
||||
LocalObject(500,
|
||||
LocalObject(1479,
|
||||
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
|
||||
LocalObject(223,
|
||||
VehicleSpawnPad.Constructor(Vector3(4012.3594f, 4364.8047f, 271.90625f), Vector3(0f, 0f, 0f))
|
||||
)
|
||||
ObjectToBuilding(222, 2)
|
||||
ObjectToBuilding(223, 2)
|
||||
ObjectToBuilding(224, 2)
|
||||
ObjectToBuilding(370, 2)
|
||||
ObjectToBuilding(371, 2)
|
||||
|
|
@ -204,6 +205,7 @@ object Maps {
|
|||
ObjectToBuilding(1188, 2)
|
||||
ObjectToBuilding(1492, 2)
|
||||
ObjectToBuilding(1494, 2)
|
||||
ObjectToBuilding(1479, 2)
|
||||
ObjectToBuilding(1564, 2)
|
||||
ObjectToBuilding(1568, 2)
|
||||
ObjectToBuilding(1569, 2)
|
||||
|
|
@ -228,8 +230,6 @@ object Maps {
|
|||
ObjectToBuilding(2323, 2)
|
||||
ObjectToBuilding(2324, 2)
|
||||
ObjectToBuilding(2419, 2)
|
||||
ObjectToBuilding(500, 2)
|
||||
ObjectToBuilding(501, 2)
|
||||
DoorToLock(375, 863)
|
||||
DoorToLock(376, 860)
|
||||
DoorToLock(384, 866)
|
||||
|
|
@ -244,8 +244,8 @@ object Maps {
|
|||
DoorToLock(638, 882)
|
||||
DoorToLock(642, 884)
|
||||
DoorToLock(715, 751)
|
||||
TerminalToSpawnPad(224, 501)
|
||||
TerminalToSpawnPad(2419, 500)
|
||||
TerminalToSpawnPad(224, 223)
|
||||
TerminalToSpawnPad(2419, 1479)
|
||||
}
|
||||
|
||||
def Building38() : Unit = {
|
||||
|
|
@ -404,20 +404,23 @@ object Maps {
|
|||
Building29()
|
||||
Building42()
|
||||
Building51()
|
||||
Building52()
|
||||
Building77()
|
||||
Building79()
|
||||
Building81()
|
||||
|
||||
def Building1() : Unit = {
|
||||
//warpgate?
|
||||
LocalBuilding(1, FoundationBuilder(WarpGate.Structure))
|
||||
}
|
||||
|
||||
// LocalBuilding(2, FoundationBuilder(WarpGate.Structure)) //TODO might be wrong?
|
||||
|
||||
def Building3() : Unit = {
|
||||
//warpgate?
|
||||
LocalBuilding(3, FoundationBuilder(WarpGate.Structure))
|
||||
}
|
||||
|
||||
// LocalBuilding(2, FoundationBuilder(WarpGate.Structure)) //TODO might be wrong?
|
||||
|
||||
// LocalObject(520, ImplantTerminalMech.Constructor) //Hart B
|
||||
// LocalObject(1081, Terminal.Constructor(implant_terminal_interface)) //tube 520
|
||||
// TerminalToInterface(520, 1081)
|
||||
|
|
@ -623,17 +626,53 @@ object Maps {
|
|||
TerminalToSpawnPad(304, 292)
|
||||
}
|
||||
|
||||
def Building52() : Unit = {
|
||||
//air terminal southwest of HART C
|
||||
LocalBuilding(52, FoundationBuilder(Building.Structure(StructureType.Platform)))
|
||||
LocalObject(305, Terminal.Constructor(dropship_vehicle_terminal))
|
||||
LocalObject(293,
|
||||
VehicleSpawnPad.Constructor(Vector3(3575.0781f, 2654.9766f, 92.296875f), Vector3(0f, 0f, 225.0f))
|
||||
)
|
||||
ObjectToBuilding(305, 52)
|
||||
ObjectToBuilding(293, 52)
|
||||
TerminalToSpawnPad(305, 293)
|
||||
}
|
||||
|
||||
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))
|
||||
VehicleSpawnPad.Constructor(Vector3(3506.0f, 2820.0f, 92.0625f), Vector3(0f, 0f, 270.0f))
|
||||
)
|
||||
ObjectToBuilding(1063, 77)
|
||||
ObjectToBuilding(706, 77)
|
||||
TerminalToSpawnPad(1063, 706)
|
||||
}
|
||||
|
||||
def Building79() : Unit = {
|
||||
//ground terminal south of HART C
|
||||
LocalBuilding(79, FoundationBuilder(Building.Structure(StructureType.Platform)))
|
||||
LocalObject(1065, Terminal.Constructor(ground_vehicle_terminal))
|
||||
LocalObject(710,
|
||||
VehicleSpawnPad.Constructor(Vector3(3659.836f, 2589.875f, 92.0625f), Vector3(0f, 0f, 180.0f))
|
||||
)
|
||||
ObjectToBuilding(1065, 79)
|
||||
ObjectToBuilding(710, 79)
|
||||
TerminalToSpawnPad(1065, 710)
|
||||
}
|
||||
|
||||
def Building81() : Unit = {
|
||||
//ground terminal south of HART C
|
||||
LocalBuilding(81, FoundationBuilder(Building.Structure(StructureType.Platform)))
|
||||
LocalObject(1067, Terminal.Constructor(ground_vehicle_terminal))
|
||||
LocalObject(712,
|
||||
VehicleSpawnPad.Constructor(Vector3(3659.836f, 2589.875f, 92.0625f), Vector3(0f, 0f, 270.0f))
|
||||
)
|
||||
ObjectToBuilding(1067, 81)
|
||||
ObjectToBuilding(712, 81)
|
||||
TerminalToSpawnPad(1067, 712)
|
||||
}
|
||||
}
|
||||
|
||||
val map14 = new ZoneMap("map14")
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ import net.psforever.objects.serverobject.locks.IFFLock
|
|||
import net.psforever.objects.serverobject.mblocker.Locker
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
||||
import net.psforever.objects.serverobject.terminals.{MatrixTerminalDefinition, ProximityTerminal, Terminal}
|
||||
import net.psforever.objects.serverobject.pad.process.{AutoDriveControls, VehicleSpawnControlGuided}
|
||||
import net.psforever.objects.serverobject.terminals.{MatrixTerminalDefinition, Terminal}
|
||||
import net.psforever.objects.serverobject.terminals.Terminal.TerminalMessage
|
||||
import net.psforever.objects.vehicles.{AccessPermissionGroup, Utility, VehicleLockState}
|
||||
import net.psforever.objects.serverobject.structures.{Building, StructureType, WarpGate}
|
||||
|
|
@ -478,6 +480,10 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
|||
|
||||
case VehicleResponse.RevealPlayer(player_guid) =>
|
||||
//TODO any action will cause the player to appear after the effects of ConcealPlayer
|
||||
if(player.GUID == player_guid) {
|
||||
sendResponse(ChatMsg(ChatMessageType.CMT_OPEN, true, "", "You are in a strange situation.", None))
|
||||
KillPlayer(player)
|
||||
}
|
||||
|
||||
case VehicleResponse.SeatPermissions(vehicle_guid, seat_group, permission) =>
|
||||
if(tplayer_guid != guid) {
|
||||
|
|
@ -637,6 +643,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
|||
if(player_guid == player.GUID) {
|
||||
//disembarking self
|
||||
log.info(s"DismountVehicleMsg: $player_guid dismounts $obj @ $seat_num")
|
||||
TotalDriverVehicleControl(obj)
|
||||
sendResponse(DismountVehicleMsg(player_guid, seat_num, false))
|
||||
vehicleService ! VehicleServiceMessage(continent.Id, VehicleAction.DismountVehicle(player_guid, seat_num, false))
|
||||
UnAccessContents(obj)
|
||||
|
|
@ -1044,11 +1051,32 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
|||
if(vehicle.Seats(0).isOccupied) {
|
||||
sendResponse(ObjectDetachMessage(pad.GUID, vehicle.GUID, pad.Position + Vector3(0, 0, 0.5f), 0, 0, pad.Orientation.z))
|
||||
}
|
||||
sendResponse(ServerVehicleOverrideMsg.Lock(GlobalDefinitions.isFlightVehicle(vdef):Int, vdef.AutoPilotSpeed1))
|
||||
ServerVehicleOverride(vehicle, vdef.AutoPilotSpeed1, GlobalDefinitions.isFlightVehicle(vdef):Int)
|
||||
|
||||
case VehicleSpawnControlGuided.GuidedControl(cmd, vehicle, data) =>
|
||||
cmd match {
|
||||
case AutoDriveControls.State.Drive =>
|
||||
val speed : Int = data.getOrElse({ vehicle.Definition.AutoPilotSpeed1 }).asInstanceOf[Int]
|
||||
ServerVehicleOverride(vehicle, speed)
|
||||
|
||||
case AutoDriveControls.State.Climb =>
|
||||
ServerVehicleOverride(vehicle, vehicle.Controlled.getOrElse(0), GlobalDefinitions.isFlightVehicle(vehicle.Definition):Int)
|
||||
|
||||
case AutoDriveControls.State.Turn =>
|
||||
//TODO how to turn hovering/flying vehicle?
|
||||
val direction = data.getOrElse(15).asInstanceOf[Int]
|
||||
sendResponse(VehicleStateMessage(vehicle.GUID, 0, vehicle.Position, vehicle.Orientation, vehicle.Velocity, None, 0, 0, direction, false, false))
|
||||
|
||||
|
||||
case AutoDriveControls.State.Stop =>
|
||||
ServerVehicleOverride(vehicle, 0)
|
||||
|
||||
case _ => ;
|
||||
}
|
||||
|
||||
case VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, pad) =>
|
||||
sendResponse(GenericObjectActionMessage(pad.GUID, 92)) //reset spawn pad
|
||||
sendResponse(ServerVehicleOverrideMsg.Auto(vehicle.Definition.AutoPilotSpeed2))
|
||||
DriverVehicleControl(vehicle, vehicle.Definition.AutoPilotSpeed2)
|
||||
|
||||
case VehicleSpawnPad.PeriodicReminder(cause, data) =>
|
||||
val msg : String = (cause match {
|
||||
|
|
@ -1557,7 +1585,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
|||
case _ =>
|
||||
log.warn(s"VehicleState: no vehicle $vehicle_guid found in zone")
|
||||
}
|
||||
//log.info("VehicleState: " + msg)
|
||||
//log.info(s"VehicleState: $msg")
|
||||
|
||||
case msg @ VehicleSubStateMessage(vehicle_guid, player_guid, vehicle_pos, vehicle_ang, vel, unk1, unk2) =>
|
||||
//log.info(s"VehicleSubState: $vehicle_guid, $player_guid, $vehicle_pos, $vehicle_ang, $vel, $unk1, $unk2")
|
||||
|
|
@ -3511,6 +3539,7 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
|||
sendResponse(AvatarDeadStateMessage(DeadState.Dead, respawnTimer, respawnTimer, pos, player.Faction, true))
|
||||
if(tplayer.VehicleSeated.nonEmpty) {
|
||||
//make player invisible (if not, the cadaver sticks out the side in a seated position)
|
||||
TotalDriverVehicleControl(continent.GUID(tplayer.VehicleSeated.get).get.asInstanceOf[Vehicle])
|
||||
sendResponse(PlanetsideAttributeMessage(player_guid, 29, 1))
|
||||
avatarService ! AvatarServiceMessage(continent.Id, AvatarAction.PlanetsideAttribute(player_guid, 29, 1))
|
||||
}
|
||||
|
|
@ -3867,6 +3896,25 @@ class WorldSessionActor extends Actor with MDCContextAware {
|
|||
tplayer.Armor == tplayer.MaxArmor
|
||||
}
|
||||
|
||||
def ServerVehicleOverride(vehicle : Vehicle, speed : Int = 0, flight : Int = 0) : Unit = {
|
||||
vehicle.Controlled = Some(speed)
|
||||
sendResponse(ServerVehicleOverrideMsg(true, true, false, false, flight, 0, speed, Some(0)))
|
||||
}
|
||||
|
||||
def DriverVehicleControl(vehicle : Vehicle, speed : Int = 0, flight : Int = 0) : Unit = {
|
||||
if(vehicle.Controlled.nonEmpty) {
|
||||
vehicle.Controlled = None
|
||||
sendResponse(ServerVehicleOverrideMsg(false, false, false, true, flight, 0, speed, None))
|
||||
}
|
||||
}
|
||||
|
||||
def TotalDriverVehicleControl(vehicle : Vehicle) : Unit = {
|
||||
if(vehicle.Controlled.nonEmpty) {
|
||||
vehicle.Controlled = None
|
||||
sendResponse(ServerVehicleOverrideMsg(false, false, false, false, 0, 0, 0, None))
|
||||
}
|
||||
}
|
||||
|
||||
def failWithError(error : String) = {
|
||||
log.error(error)
|
||||
sendResponse(ConnectionClose())
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
import akka.actor.ActorContext
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
||||
import net.psforever.objects.serverobject.pad.process._
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.types.PlanetSideEmpire
|
||||
|
||||
|
|
@ -51,6 +52,7 @@ object Zones {
|
|||
Buildings.values.foreach { _.Faction = PlanetSideEmpire.VS }
|
||||
Building(29).get.Faction = PlanetSideEmpire.NC //South Villa Gun Tower
|
||||
GUID(293).get.asInstanceOf[VehicleSpawnPad].Railed = false //building 52
|
||||
GUID(706).get.asInstanceOf[VehicleSpawnPad].Guide = List(AutoDriveControls.DistanceFromHere(50f)) //building 77
|
||||
GUID(710).get.asInstanceOf[VehicleSpawnPad].Railed = false //building 79
|
||||
GUID(712).get.asInstanceOf[VehicleSpawnPad].Railed = false //building 81
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue