mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-08 13:04:41 +00:00
working VehicleService based on GenericServiceEvent(WithSupport); manually corrected almost every message to VehicleService to ensure channel and filters are preserved
This commit is contained in:
parent
5ece864bfd
commit
4838c991b3
70 changed files with 793 additions and 1406 deletions
|
|
@ -77,4 +77,3 @@ ignore:
|
|||
- "src/main/scala/net/psforever/services/hart/HartTimerActions.scala"
|
||||
- "src/main/scala/net/psforever/services/local/LocalAction.scala"
|
||||
- "src/main/scala/net/psforever/services/vehicle/VehicleAction.scala"
|
||||
- "src/main/scala/net/psforever/services/vehicle/VehicleResponse.scala"
|
||||
|
|
|
|||
|
|
@ -82,11 +82,11 @@ class VehicleSpawnControl3Test extends ActorTest {
|
|||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.ServerVehicleOverrideStart])
|
||||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.ServerVehicleOverrideEnd])
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
case VehicleSpawnPad.PeriodicReminder(_, VehicleSpawnPad.Reminders.Blocked, _) => true
|
||||
case VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, _) => true
|
||||
case _ => false
|
||||
})
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
case VehicleSpawnPad.PeriodicReminder(_, VehicleSpawnPad.Reminders.Blocked, _) => true
|
||||
case VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, _) => true
|
||||
case _ => false
|
||||
})
|
||||
|
||||
|
|
@ -139,7 +139,7 @@ class VehicleSpawnControl5Test extends ActorTest() {
|
|||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.DetachFromRails])
|
||||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.RevealPlayer])
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
case VehicleServiceMessage(_, VehicleAction.LoadVehicle(_, _, _, _, _)) => true
|
||||
case VehicleServiceMessage(_, _, VehicleAction.LoadVehicle(_, _, _, _, _)) => true
|
||||
case _ => false
|
||||
})
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
|
|
@ -166,7 +166,7 @@ class VehicleSpawnControl6Test extends ActorTest() {
|
|||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.DetachFromRails])
|
||||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.RevealPlayer])
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
case VehicleServiceMessage(_, VehicleAction.LoadVehicle(_, _, _, _, _)) => true
|
||||
case VehicleServiceMessage(_, _, VehicleAction.LoadVehicle(_, _, _, _, _)) => true
|
||||
case _ => false
|
||||
})
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
|
|
@ -194,7 +194,7 @@ class VehicleSpawnControl7Test extends ActorTest {
|
|||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.DetachFromRails])
|
||||
probe.expectMsgClass(1 minute, classOf[VehicleSpawnPad.RevealPlayer])
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
case VehicleServiceMessage(_, VehicleAction.LoadVehicle(_, _, _, _, _)) => true
|
||||
case VehicleServiceMessage(_, _, VehicleAction.LoadVehicle(_, _, _, _, _)) => true
|
||||
case _ => false
|
||||
})
|
||||
assert(probe.receiveOne(1 minute) match {
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode {
|
|||
data.sendResponse(PlanetsideAttributeMessage(guid, shieldsUi, maxShieldsOfVehicle))
|
||||
data.continent.VehicleEvents ! VehicleServiceMessage(
|
||||
data.continent.id,
|
||||
VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), guid, shieldsUi, maxShieldsOfVehicle)
|
||||
VehicleAction.PlanetsideAttribute(guid, shieldsUi, maxShieldsOfVehicle)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -217,7 +217,7 @@ case object CustomerServiceRepresentativeMode extends PlayerMode {
|
|||
data.sendResponse(PlanetsideAttributeMessage(guid, 0, maxHealthOf))
|
||||
data.continent.VehicleEvents ! VehicleServiceMessage(
|
||||
data.continent.id,
|
||||
VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), guid, 0, maxHealthOf)
|
||||
VehicleAction.PlanetsideAttribute(guid, 0, maxHealthOf)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
|
|||
import net.psforever.objects.vehicles.AccessPermissionGroup
|
||||
import net.psforever.objects.vital.InGameHistory
|
||||
import net.psforever.packet.game.{ChatMsg, DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlanetsideAttributeMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3}
|
||||
|
|
@ -215,7 +214,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
//DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages
|
||||
events ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, PlayerStasisMessage(pguid)) //the stasis message
|
||||
VehicleAction.SendResponse(PlayerStasisMessage(pguid)) //the stasis message
|
||||
)
|
||||
//when the player dismounts, they will be positioned where the shuttle was when it disappeared in the sky
|
||||
//the player will fall to the ground and is perfectly vulnerable in this state
|
||||
|
|
@ -223,14 +222,12 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
||||
events ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)) //cower in the shuttle bay
|
||||
)
|
||||
VehicleAction.SendResponse(PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)))
|
||||
)
|
||||
events ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.SendResponse(pguid, GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||
pguid,
|
||||
VehicleAction.SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||
)
|
||||
sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive
|
||||
|
||||
|
|
@ -258,7 +255,8 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, seat_num, unk2=true, obj.GUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
||||
)
|
||||
|
||||
case Mountable.CanDismount(obj: PlanetSideGameObject with PlanetSideGameObject with Mountable with FactionAffinity with InGameHistory, seatNum, _) =>
|
||||
|
|
|
|||
|
|
@ -78,8 +78,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
//
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
player.GUID,
|
||||
VehicleAction.VehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
position,
|
||||
|
|
@ -166,23 +166,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.FrameVehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
position,
|
||||
angle,
|
||||
velocity,
|
||||
unk2,
|
||||
unk3,
|
||||
unk4,
|
||||
is_crouched,
|
||||
is_airborne,
|
||||
ascending_flight,
|
||||
flight_time,
|
||||
unk9,
|
||||
unkA
|
||||
)
|
||||
player.GUID,
|
||||
VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA)
|
||||
)
|
||||
sessionLogic.squad.updateSquad()
|
||||
case (None, _) =>
|
||||
|
|
@ -236,7 +221,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
player.Orientation = angle
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.ChildObjectState(player.GUID, object_guid, pitch, yaw)
|
||||
player.GUID,
|
||||
VehicleAction.ChildObjectState(object_guid, pitch, yaw)
|
||||
)
|
||||
}
|
||||
//TODO status condition of "playing getting out of vehicle to allow for late packets without warning
|
||||
|
|
@ -258,20 +244,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
obj.zoneInteractions()
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.VehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
ang,
|
||||
obj.Velocity,
|
||||
obj.Flying,
|
||||
0,
|
||||
0,
|
||||
15,
|
||||
unk5 = false,
|
||||
obj.Cloaked
|
||||
)
|
||||
player.GUID,
|
||||
VehicleAction.VehicleState(vehicle_guid, unk1, pos, ang, obj.Velocity, obj.Flying, 0, 0, 15, unk5 = false, obj.Cloaked)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -330,7 +304,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.DeployRequest(player.GUID, obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||
player.GUID,
|
||||
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
|
|||
import net.psforever.objects.vehicles.AccessPermissionGroup
|
||||
import net.psforever.objects.vital.InGameHistory
|
||||
import net.psforever.packet.game.{ChatMsg, DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlanetsideAttributeMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.{BailType, ChatMessageType, DriveState, PlanetSideGUID, Vector3}
|
||||
|
|
@ -251,7 +250,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
//DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages
|
||||
events ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, PlayerStasisMessage(pguid)) //the stasis message
|
||||
VehicleAction.SendResponse(PlayerStasisMessage(pguid)) //the stasis message
|
||||
)
|
||||
//when the player dismounts, they will be positioned where the shuttle was when it disappeared in the sky
|
||||
//the player will fall to the ground and is perfectly vulnerable in this state
|
||||
|
|
@ -259,14 +258,12 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
||||
events ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)) //cower in the shuttle bay
|
||||
)
|
||||
VehicleAction.SendResponse(PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)))
|
||||
)
|
||||
events ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.SendResponse(pguid, GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||
pguid,
|
||||
VehicleAction.SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||
)
|
||||
sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive
|
||||
|
||||
|
|
@ -295,7 +292,8 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, seat_num, unk2=true, obj.GUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
||||
)
|
||||
|
||||
case Mountable.CanDismount(obj: PlanetSideGameObject with Mountable with FactionAffinity with InGameHistory, seatNum, _) =>
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
|||
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
|
||||
import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChatMsg, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, HitHint, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.base.EventResponse
|
||||
import net.psforever.services.local.support.CaptureFlagManager
|
||||
import net.psforever.services.vehicle.{VehicleResponse, VehicleServiceResponse}
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceResponse}
|
||||
import net.psforever.types.{BailType, ChatMessageType, PlanetSideGUID, Vector3}
|
||||
|
||||
object VehicleHandlerLogic {
|
||||
|
|
@ -38,7 +39,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
* @param guid na
|
||||
* @param reply na
|
||||
*/
|
||||
def handle(toChannel: String, guid: PlanetSideGUID, reply: VehicleResponse.Response): Unit = {
|
||||
def handle(toChannel: String, guid: PlanetSideGUID, reply: EventResponse): Unit = {
|
||||
val resolvedPlayerGuid = if (player.HasGUID) {
|
||||
player.GUID
|
||||
} else {
|
||||
|
|
@ -46,7 +47,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
}
|
||||
val isNotSameTarget = resolvedPlayerGuid != guid
|
||||
reply match {
|
||||
case VehicleResponse.VehicleState(
|
||||
case VehicleAction.VehicleState(
|
||||
vehicleGuid,
|
||||
unk1,
|
||||
pos,
|
||||
|
|
@ -74,7 +75,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
}
|
||||
}
|
||||
|
||||
case VehicleResponse.VehicleState(
|
||||
case VehicleAction.VehicleState(
|
||||
vehicleGuid,
|
||||
unk1,
|
||||
pos,
|
||||
|
|
@ -90,23 +91,23 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
//player who is watching the vehicle from the outside
|
||||
sendResponse(VehicleStateMessage(vehicleGuid, unk1, pos, ang, vel, unk2, unk3, unk4, wheelDirection, unk5, unk6))
|
||||
|
||||
case VehicleResponse.ChildObjectState(objectGuid, pitch, yaw) if isNotSameTarget =>
|
||||
case VehicleAction.ChildObjectState(objectGuid, pitch, yaw) if isNotSameTarget =>
|
||||
sendResponse(ChildObjectStateMessage(objectGuid, pitch, yaw))
|
||||
|
||||
case VehicleResponse.FrameVehicleState(vguid, u1, pos, oient, vel, u2, u3, u4, is_crouched, u6, u7, u8, u9, uA)
|
||||
case VehicleAction.FrameVehicleState(vguid, u1, pos, oient, vel, u2, u3, u4, is_crouched, u6, u7, u8, u9, uA)
|
||||
if isNotSameTarget =>
|
||||
sendResponse(FrameVehicleStateMessage(vguid, u1, pos, oient, vel, u2, u3, u4, is_crouched, u6, u7, u8, u9, uA))
|
||||
|
||||
case VehicleResponse.ChangeFireState_Start(weaponGuid) if isNotSameTarget =>
|
||||
case VehicleAction.ChangeFireState_Start(weaponGuid) if isNotSameTarget =>
|
||||
sendResponse(ChangeFireStateMessage_Start(weaponGuid))
|
||||
|
||||
case VehicleResponse.ChangeFireState_Stop(weaponGuid) if isNotSameTarget =>
|
||||
case VehicleAction.ChangeFireState_Stop(weaponGuid) if isNotSameTarget =>
|
||||
sendResponse(ChangeFireStateMessage_Stop(weaponGuid))
|
||||
|
||||
case VehicleResponse.Reload(itemGuid) if isNotSameTarget =>
|
||||
case VehicleAction.Reload(itemGuid) if isNotSameTarget =>
|
||||
sendResponse(ReloadMessage(itemGuid, ammo_clip=1, unk1=0))
|
||||
|
||||
case VehicleResponse.ChangeAmmo(weapon_guid, weapon_slot, previous_guid, ammo_id, ammo_guid, ammo_data) if isNotSameTarget =>
|
||||
case VehicleAction.ChangeAmmo(weapon_guid, weapon_slot, previous_guid, ammo_id, ammo_guid, ammo_data) if isNotSameTarget =>
|
||||
sendResponse(ObjectDetachMessage(weapon_guid, previous_guid, Vector3.Zero, 0))
|
||||
//TODO? sendResponse(ObjectDeleteMessage(previousAmmoGuid, 0))
|
||||
sendResponse(
|
||||
|
|
@ -119,7 +120,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
)
|
||||
sendResponse(ChangeAmmoMessage(weapon_guid, 1))
|
||||
|
||||
case VehicleResponse.WeaponDryFire(weaponGuid) if isNotSameTarget =>
|
||||
case VehicleAction.WeaponDryFire(weaponGuid) if isNotSameTarget =>
|
||||
continent.GUID(weaponGuid).collect {
|
||||
case tool: Tool if tool.Magazine == 0 =>
|
||||
// check that the magazine is still empty before sending WeaponDryFireMessage
|
||||
|
|
@ -127,45 +128,28 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
sendResponse(WeaponDryFireMessage(weaponGuid))
|
||||
}
|
||||
|
||||
case VehicleResponse.DismountVehicle(bailType, wasKickedByDriver) if isNotSameTarget =>
|
||||
case VehicleAction.DismountVehicle(bailType, wasKickedByDriver) if isNotSameTarget =>
|
||||
sendResponse(DismountVehicleMsg(guid, bailType, wasKickedByDriver))
|
||||
|
||||
case VehicleResponse.MountVehicle(vehicleGuid, seat) if isNotSameTarget =>
|
||||
case VehicleAction.MountVehicle(vehicleGuid, seat) if isNotSameTarget =>
|
||||
sendResponse(ObjectAttachMessage(vehicleGuid, guid, seat))
|
||||
|
||||
case VehicleResponse.DeployRequest(objectGuid, state, unk1, unk2, pos) if isNotSameTarget =>
|
||||
case VehicleAction.DeployRequest(objectGuid, state, unk1, unk2, pos) if isNotSameTarget =>
|
||||
sendResponse(DeployRequestMessage(guid, objectGuid, state, unk1, unk2, pos))
|
||||
|
||||
case VehicleResponse.SendResponse(msg) =>
|
||||
case VehicleAction.SendResponse(msg) =>
|
||||
sendResponse(msg)
|
||||
|
||||
case VehicleResponse.AttachToRails(vehicleGuid, padGuid) =>
|
||||
sendResponse(ObjectAttachMessage(padGuid, vehicleGuid, slot=3))
|
||||
|
||||
case VehicleResponse.ConcealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=9))
|
||||
|
||||
case VehicleResponse.DetachFromRails(vehicleGuid, padGuid, padPosition, padOrientationZ) =>
|
||||
val pad = continent.GUID(padGuid).get.asInstanceOf[VehicleSpawnPad].Definition
|
||||
sendResponse(
|
||||
ObjectDetachMessage(
|
||||
padGuid,
|
||||
vehicleGuid,
|
||||
padPosition + Vector3.z(pad.VehicleCreationZOffset),
|
||||
padOrientationZ + pad.VehicleCreationZOrientOffset
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleResponse.EquipmentInSlot(pkt) if isNotSameTarget =>
|
||||
case VehicleAction.EquipmentCreatedInSlot(pkt) if isNotSameTarget =>
|
||||
sendResponse(pkt)
|
||||
|
||||
case VehicleResponse.GenericObjectAction(objectGuid, action) if isNotSameTarget =>
|
||||
case VehicleAction.GenericObjectAction(objectGuid, action) if isNotSameTarget =>
|
||||
sendResponse(GenericObjectActionMessage(objectGuid, action))
|
||||
|
||||
case VehicleResponse.HitHint(sourceGuid) if player.isAlive =>
|
||||
case VehicleAction.HitHint(sourceGuid) if player.isAlive =>
|
||||
sendResponse(HitHint(sourceGuid, player.GUID))
|
||||
|
||||
case VehicleResponse.InventoryState(obj, parentGuid, start, conData) if isNotSameTarget =>
|
||||
case VehicleAction.InventoryState(obj, parentGuid, start, conData) if isNotSameTarget =>
|
||||
//TODO prefer ObjectDetachMessage, but how to force ammo pools to update properly?
|
||||
val objGuid = obj.GUID
|
||||
sendResponse(ObjectDeleteMessage(objGuid, unk1=0))
|
||||
|
|
@ -176,7 +160,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
conData
|
||||
))
|
||||
|
||||
case VehicleResponse.KickPassenger(_, wasKickedByDriver, vehicleGuid) if resolvedPlayerGuid == guid =>
|
||||
case VehicleAction.KickPassenger(_, wasKickedByDriver, vehicleGuid) if resolvedPlayerGuid == guid =>
|
||||
//seat number (first field) seems to be correct if passenger is kicked manually by driver
|
||||
//but always seems to return 4 if user is kicked by mount permissions changing
|
||||
sendResponse(DismountVehicleMsg(guid, BailType.Kicked, wasKickedByDriver))
|
||||
|
|
@ -190,47 +174,41 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
log.info(s"${player.Name} has been kicked from $typeOfRide!")
|
||||
player.WhichSide = OutsideOf
|
||||
|
||||
case VehicleResponse.KickPassenger(_, wasKickedByDriver, _) =>
|
||||
case VehicleAction.KickPassenger(_, wasKickedByDriver, _) =>
|
||||
//seat number (first field) seems to be correct if passenger is kicked manually by driver
|
||||
//but always seems to return 4 if user is kicked by mount permissions changing
|
||||
sendResponse(DismountVehicleMsg(guid, BailType.Kicked, wasKickedByDriver))
|
||||
|
||||
case VehicleResponse.InventoryState2(objGuid, parentGuid, value) if isNotSameTarget =>
|
||||
case VehicleAction.InventoryState2(objGuid, parentGuid, value) if isNotSameTarget =>
|
||||
sendResponse(InventoryStateMessage(objGuid, unk=0, parentGuid, value))
|
||||
|
||||
case VehicleResponse.LoadVehicle(vehicle, vtype, vguid, vdata) if isNotSameTarget =>
|
||||
case VehicleAction.LoadVehicle(vehicle, vtype, vguid, vdata) if isNotSameTarget =>
|
||||
//this is not be suitable for vehicles with people who are seated in it before it spawns (if that is possible)
|
||||
sendResponse(ObjectCreateMessage(vtype, vguid, vdata))
|
||||
Vehicles.ReloadAccessPermissions(vehicle, player.Name)
|
||||
|
||||
case VehicleResponse.ObjectDelete(itemGuid) if isNotSameTarget =>
|
||||
case VehicleAction.ObjectDelete(itemGuid) if isNotSameTarget =>
|
||||
sendResponse(ObjectDeleteMessage(itemGuid, unk1=0))
|
||||
|
||||
case VehicleResponse.Ownership(vehicleGuid) if resolvedPlayerGuid == guid =>
|
||||
case VehicleAction.Ownership(vehicleGuid) if resolvedPlayerGuid == guid =>
|
||||
//Only the player that owns this vehicle needs the ownership packet
|
||||
avatarActor ! AvatarActor.SetVehicle(Some(vehicleGuid))
|
||||
sendResponse(PlanetsideAttributeMessage(resolvedPlayerGuid, attribute_type=21, vehicleGuid))
|
||||
|
||||
case VehicleResponse.LoseOwnership(_, vehicleGuid) =>
|
||||
case VehicleAction.LoseOwnership(_, vehicleGuid) =>
|
||||
ops.announceAmsDecay(vehicleGuid,msg = "@ams_decaystarted")
|
||||
|
||||
case VehicleResponse.PlanetsideAttribute(vehicleGuid, attributeType, attributeValue) if isNotSameTarget =>
|
||||
case VehicleAction.PlanetsideAttribute(vehicleGuid, attributeType, attributeValue) if isNotSameTarget =>
|
||||
sendResponse(PlanetsideAttributeMessage(vehicleGuid, attributeType, attributeValue))
|
||||
|
||||
case VehicleResponse.ResetSpawnPad(padGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(padGuid, code=23))
|
||||
|
||||
case VehicleResponse.RevealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=10))
|
||||
|
||||
case VehicleResponse.SeatPermissions(vehicleGuid, seatGroup, permission) if isNotSameTarget =>
|
||||
case VehicleAction.SeatPermissions(vehicleGuid, seatGroup, permission) if isNotSameTarget =>
|
||||
sendResponse(PlanetsideAttributeMessage(vehicleGuid, seatGroup, permission))
|
||||
|
||||
case VehicleResponse.StowEquipment(vehicleGuid, slot, itemType, itemGuid, itemData) if isNotSameTarget =>
|
||||
case VehicleAction.StowCreatedEquipment(vehicleGuid, slot, itemType, itemGuid, itemData) if isNotSameTarget =>
|
||||
//TODO prefer ObjectAttachMessage, but how to force ammo pools to update properly?
|
||||
sendResponse(ObjectCreateDetailedMessage(itemType, itemGuid, ObjectCreateMessageParent(vehicleGuid, slot), itemData))
|
||||
|
||||
case VehicleResponse.UnloadVehicle(_, vehicleGuid) =>
|
||||
case VehicleAction.UnloadVehicle(_, vehicleGuid) =>
|
||||
sendResponse(ObjectDeleteMessage(vehicleGuid, unk1=1))
|
||||
if (sessionLogic.zoning.spawn.prevSpawnPoint.map(_.Owner).exists {
|
||||
case ams: Vehicle =>
|
||||
|
|
@ -243,22 +221,22 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
sendResponse(ChatMsg(ChatMessageType.UNK_229, "@ams_decayed"))
|
||||
}
|
||||
|
||||
case VehicleResponse.UnstowEquipment(itemGuid) if isNotSameTarget =>
|
||||
case VehicleAction.UnstowEquipment(itemGuid) if isNotSameTarget =>
|
||||
//TODO prefer ObjectDetachMessage, but how to force ammo pools to update properly?
|
||||
sendResponse(ObjectDeleteMessage(itemGuid, unk1=0))
|
||||
|
||||
case VehicleResponse.UpdateAmsSpawnPoint(list) =>
|
||||
case VehicleAction.UpdateAmsSpawnList(list) =>
|
||||
sessionLogic.zoning.spawn.amsSpawnPoints = list.filter(tube => tube.Faction == player.Faction)
|
||||
sessionLogic.zoning.spawn.DrawCurrentAmsSpawnPoint()
|
||||
|
||||
case VehicleResponse.TransferPassengerChannel(oldChannel, tempChannel, vehicle, vehicleToDelete) if isNotSameTarget =>
|
||||
case VehicleAction.TransferPassengerChannel(oldChannel, tempChannel, vehicle, vehicleToDelete) if isNotSameTarget =>
|
||||
sessionLogic.zoning.interstellarFerry = Some(vehicle)
|
||||
sessionLogic.zoning.interstellarFerryTopLevelGUID = Some(vehicleToDelete)
|
||||
continent.VehicleEvents ! Service.Leave(Some(oldChannel)) //old vehicle-specific channel (was s"${vehicle.Actor}")
|
||||
galaxyService ! Service.Join(tempChannel) //temporary vehicle-specific channel
|
||||
log.debug(s"TransferPassengerChannel: ${player.Name} now subscribed to $tempChannel for vehicle gating")
|
||||
|
||||
case VehicleResponse.KickCargo(vehicle, speed, delay)
|
||||
case VehicleAction.KickCargo(vehicle, speed, delay)
|
||||
if player.VehicleSeated.nonEmpty && sessionLogic.zoning.spawn.deadState == DeadState.Alive && speed > 0 =>
|
||||
val strafe = 1 + Vehicles.CargoOrientation(vehicle)
|
||||
val reverseSpeed = if (strafe > 1) { 0 } else { speed }
|
||||
|
|
@ -281,75 +259,14 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
context.system.scheduler.scheduleOnce(
|
||||
delay milliseconds,
|
||||
context.self,
|
||||
VehicleServiceResponse(toChannel, PlanetSideGUID(0), VehicleResponse.KickCargo(vehicle, speed=0, delay))
|
||||
VehicleServiceResponse(toChannel, PlanetSideGUID(0), VehicleAction.KickCargo(vehicle, speed=0, delay))
|
||||
)
|
||||
|
||||
case VehicleResponse.KickCargo(cargo, _, _)
|
||||
case VehicleAction.KickCargo(cargo, _, _)
|
||||
if player.VehicleSeated.nonEmpty && sessionLogic.zoning.spawn.deadState == DeadState.Alive =>
|
||||
sessionLogic.vehicles.TotalDriverVehicleControl(cargo)
|
||||
|
||||
case VehicleResponse.StartPlayerSeatedInVehicle(vehicle, _)
|
||||
if player.VisibleSlots.contains(player.DrawnSlot) =>
|
||||
player.DrawnSlot = Player.HandsDownSlot
|
||||
startPlayerSeatedInVehicle(vehicle)
|
||||
|
||||
case VehicleResponse.StartPlayerSeatedInVehicle(vehicle, _) =>
|
||||
startPlayerSeatedInVehicle(vehicle)
|
||||
|
||||
case VehicleResponse.PlayerSeatedInVehicle(vehicle, _) =>
|
||||
Vehicles.ReloadAccessPermissions(vehicle, player.Name)
|
||||
sessionLogic.vehicles.ServerVehicleOverrideWithPacket(
|
||||
vehicle,
|
||||
ServerVehicleOverrideMsg(
|
||||
lock_accelerator=true,
|
||||
lock_wheel=true,
|
||||
reverse=true,
|
||||
unk4=false,
|
||||
lock_vthrust=1,
|
||||
lock_strafe=0,
|
||||
movement_speed=0,
|
||||
unk8=Some(0)
|
||||
)
|
||||
)
|
||||
sessionLogic.vehicles.serverVehicleControlVelocity = Some(0)
|
||||
|
||||
case VehicleResponse.ServerVehicleOverrideStart(vehicle, _) =>
|
||||
val vdef = vehicle.Definition
|
||||
sessionLogic.vehicles.ServerVehicleOverrideWithPacket(
|
||||
vehicle,
|
||||
ServerVehicleOverrideMsg(
|
||||
lock_accelerator=true,
|
||||
lock_wheel=true,
|
||||
reverse=false,
|
||||
unk4=false,
|
||||
lock_vthrust=if (GlobalDefinitions.isFlightVehicle(vdef)) { 1 } else { 0 },
|
||||
lock_strafe=0,
|
||||
movement_speed=vdef.AutoPilotSpeed1,
|
||||
unk8=Some(0)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleResponse.ServerVehicleOverrideEnd(vehicle, _) =>
|
||||
sessionLogic.vehicles.ServerVehicleOverrideStop(vehicle)
|
||||
|
||||
case VehicleResponse.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, data) =>
|
||||
val str = s"${data.getOrElse("The vehicle spawn pad where you placed your order is blocked.")}"
|
||||
val msg = if (str.contains("@")) {
|
||||
ChatMsg(ChatMessageType.UNK_229, str)
|
||||
} else {
|
||||
ChatMsg(ChatMessageType.CMT_OPEN, wideContents = true, recipient = "", str, note = None)
|
||||
}
|
||||
sendResponse(msg)
|
||||
|
||||
case VehicleResponse.PeriodicReminder(_, data) =>
|
||||
val (isType, flag, msg): (ChatMessageType, Boolean, String) = data match {
|
||||
case Some(msg: String) if msg.startsWith("@") => (ChatMessageType.UNK_227, false, msg)
|
||||
case Some(msg: String) => (ChatMessageType.CMT_OPEN, true, msg)
|
||||
case _ => (ChatMessageType.CMT_OPEN, true, "Your vehicle order has been cancelled.")
|
||||
}
|
||||
sendResponse(ChatMsg(isType, flag, recipient="", msg, None))
|
||||
|
||||
case VehicleResponse.ChangeLoadout(target, oldWeapons, addedWeapons, oldInventory, newInventory)
|
||||
case VehicleAction.ChangeLoadout(target, oldWeapons, addedWeapons, oldInventory, newInventory)
|
||||
if player.avatar.vehicle.contains(target) =>
|
||||
//TODO when vehicle weapons can be changed without visual glitches, rewrite this
|
||||
continent.GUID(target).collect { case vehicle: Vehicle =>
|
||||
|
|
@ -373,7 +290,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
changeLoadoutDeleteOldEquipment(vehicle, oldWeapons, oldInventory)
|
||||
}
|
||||
|
||||
case VehicleResponse.ChangeLoadout(target, oldWeapons, _, oldInventory, _)
|
||||
case VehicleAction.ChangeLoadout(target, oldWeapons, _, oldInventory, _)
|
||||
if sessionLogic.general.accessedContainer.map(_.GUID).contains(target) =>
|
||||
//TODO when vehicle weapons can be changed without visual glitches, rewrite this
|
||||
continent.GUID(target).collect { case vehicle: Vehicle =>
|
||||
|
|
@ -382,12 +299,96 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
changeLoadoutDeleteOldEquipment(vehicle, oldWeapons, oldInventory)
|
||||
}
|
||||
|
||||
case VehicleResponse.ChangeLoadout(target, oldWeapons, _, oldInventory, _) =>
|
||||
case VehicleAction.ChangeLoadout(target, oldWeapons, _, oldInventory, _) =>
|
||||
//TODO when vehicle weapons can be changed without visual glitches, rewrite this
|
||||
continent.GUID(target).collect { case vehicle: Vehicle =>
|
||||
changeLoadoutDeleteOldEquipment(vehicle, oldWeapons, oldInventory)
|
||||
}
|
||||
|
||||
case VehicleSpawnPad.AttachToRails(vehicle, pad) =>
|
||||
sendResponse(ObjectAttachMessage(pad.GUID, vehicle.GUID, slot=3))
|
||||
|
||||
case VehicleSpawnPad.ConcealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=9))
|
||||
|
||||
case VehicleSpawnPad.DetachFromRails(vehicle, pad) =>
|
||||
val padDefinition = pad.Definition
|
||||
sendResponse(
|
||||
ObjectDetachMessage(
|
||||
pad.GUID,
|
||||
vehicle.GUID,
|
||||
pad.Position + Vector3.z(padDefinition.VehicleCreationZOffset),
|
||||
pad.Orientation.z + padDefinition.VehicleCreationZOrientOffset
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.ResetSpawnPad(pad) =>
|
||||
sendResponse(GenericObjectActionMessage(pad.GUID, code=23))
|
||||
|
||||
case VehicleSpawnPad.RevealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=10))
|
||||
|
||||
case VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, _)
|
||||
if player.VisibleSlots.contains(player.DrawnSlot) =>
|
||||
player.DrawnSlot = Player.HandsDownSlot
|
||||
startPlayerSeatedInVehicle(vehicle)
|
||||
|
||||
case VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, _) =>
|
||||
startPlayerSeatedInVehicle(vehicle)
|
||||
|
||||
case VehicleSpawnPad.PlayerSeatedInVehicle(vehicle, _) =>
|
||||
Vehicles.ReloadAccessPermissions(vehicle, player.Name)
|
||||
sessionLogic.vehicles.ServerVehicleOverrideWithPacket(
|
||||
vehicle,
|
||||
ServerVehicleOverrideMsg(
|
||||
lock_accelerator=true,
|
||||
lock_wheel=true,
|
||||
reverse=true,
|
||||
unk4=false,
|
||||
lock_vthrust=1,
|
||||
lock_strafe=0,
|
||||
movement_speed=0,
|
||||
unk8=Some(0)
|
||||
)
|
||||
)
|
||||
sessionLogic.vehicles.serverVehicleControlVelocity = Some(0)
|
||||
|
||||
case VehicleSpawnPad.ServerVehicleOverrideStart(vehicle, _) =>
|
||||
val vdef = vehicle.Definition
|
||||
sessionLogic.vehicles.ServerVehicleOverrideWithPacket(
|
||||
vehicle,
|
||||
ServerVehicleOverrideMsg(
|
||||
lock_accelerator=true,
|
||||
lock_wheel=true,
|
||||
reverse=false,
|
||||
unk4=false,
|
||||
lock_vthrust=if (GlobalDefinitions.isFlightVehicle(vdef)) { 1 } else { 0 },
|
||||
lock_strafe=0,
|
||||
movement_speed=vdef.AutoPilotSpeed1,
|
||||
unk8=Some(0)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, _) =>
|
||||
sessionLogic.vehicles.ServerVehicleOverrideStop(vehicle)
|
||||
|
||||
case VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, data) =>
|
||||
val str = s"${data.getOrElse("The vehicle spawn pad where you placed your order is blocked.")}"
|
||||
val msg = if (str.contains("@")) {
|
||||
ChatMsg(ChatMessageType.UNK_229, str)
|
||||
} else {
|
||||
ChatMsg(ChatMessageType.CMT_OPEN, wideContents = true, recipient = "", str, note = None)
|
||||
}
|
||||
sendResponse(msg)
|
||||
|
||||
case VehicleSpawnPad.PeriodicReminder(_, data) =>
|
||||
val (isType, flag, msg): (ChatMessageType, Boolean, String) = data match {
|
||||
case Some(msg: String) if msg.startsWith("@") => (ChatMessageType.UNK_227, false, msg)
|
||||
case Some(msg: String) => (ChatMessageType.CMT_OPEN, true, msg)
|
||||
case _ => (ChatMessageType.CMT_OPEN, true, "Your vehicle order has been cancelled.")
|
||||
}
|
||||
sendResponse(ChatMsg(isType, flag, recipient="", msg, None))
|
||||
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
//
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
player.GUID,
|
||||
VehicleAction.VehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
position,
|
||||
|
|
@ -164,23 +164,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.FrameVehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
position,
|
||||
angle,
|
||||
velocity,
|
||||
unk2,
|
||||
unk3,
|
||||
unk4,
|
||||
is_crouched,
|
||||
is_airborne,
|
||||
ascending_flight,
|
||||
flight_time,
|
||||
unk9,
|
||||
unkA
|
||||
)
|
||||
player.GUID,
|
||||
VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA)
|
||||
)
|
||||
sessionLogic.squad.updateSquad()
|
||||
case (None, _) =>
|
||||
|
|
@ -232,7 +217,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
player.Orientation = angle
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.ChildObjectState(player.GUID, object_guid, pitch, yaw)
|
||||
player.GUID,
|
||||
VehicleAction.ChildObjectState(object_guid, pitch, yaw)
|
||||
)
|
||||
}
|
||||
//TODO status condition of "playing getting out of vehicle to allow for late packets without warning
|
||||
|
|
@ -254,20 +240,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
obj.zoneInteractions()
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.VehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
ang,
|
||||
obj.Velocity,
|
||||
obj.Flying,
|
||||
0,
|
||||
0,
|
||||
15,
|
||||
unk5 = false,
|
||||
obj.Cloaked
|
||||
)
|
||||
player.GUID,
|
||||
VehicleAction.VehicleState(vehicle_guid, unk1, pos, ang, obj.Velocity, obj.Flying, 0, 0, 15, unk5 = false, obj.Cloaked)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -348,7 +322,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.DeployRequest(player.GUID, obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||
player.GUID,
|
||||
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
"; enforcing Mobile deployment state"
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import net.psforever.objects.serverobject.mount.Mountable
|
|||
import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech
|
||||
import net.psforever.objects.vital.InGameHistory
|
||||
import net.psforever.packet.game.{DelayedPathMountMsg, DismountVehicleCargoMsg, DismountVehicleMsg, GenericObjectActionMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectDetachMessage, PlayerStasisMessage, PlayerStateShiftMessage, ShiftState}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
||||
|
|
@ -78,7 +77,7 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
//DismountAction(...) uses vehicle service, so use that service to coordinate the remainder of the messages
|
||||
events ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, PlayerStasisMessage(pguid)) //the stasis message
|
||||
VehicleAction.SendResponse(PlayerStasisMessage(pguid)) //the stasis message
|
||||
)
|
||||
//when the player dismounts, they will be positioned where the shuttle was when it disappeared in the sky
|
||||
//the player will fall to the ground and is perfectly vulnerable in this state
|
||||
|
|
@ -86,14 +85,12 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
//having no in-game avatar target will throw us out of the map screen when deploying and cause softlock
|
||||
events ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)) //cower in the shuttle bay
|
||||
)
|
||||
VehicleAction.SendResponse(PlayerStateShiftMessage(ShiftState(unk=0, obj.Position, obj.Orientation.z, vel=None)))
|
||||
)
|
||||
events ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.SendResponse(pguid, GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||
pguid,
|
||||
VehicleAction.SendResponse(GenericObjectActionMessage(pguid, code=9)) //conceal the player
|
||||
)
|
||||
context.self ! SessionActor.SetMode(NormalMode)
|
||||
sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive
|
||||
|
|
@ -113,7 +110,8 @@ class MountHandlerLogic(val ops: SessionMountHandlers, implicit val context: Act
|
|||
case Mountable.CanDismount(obj: Vehicle, seat_num, _) =>
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, seat_num, unk2=true, obj.GUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(seat_num, unk2=true, obj.GUID)
|
||||
)
|
||||
|
||||
case Mountable.CanDismount(obj: PlanetSideGameObject with PlanetSideGameObject with Mountable with FactionAffinity with InGameHistory, seatNum, _) =>
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ import net.psforever.objects.{Tool, Vehicle, Vehicles}
|
|||
import net.psforever.objects.equipment.Equipment
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
||||
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
|
||||
import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, HitHint, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage}
|
||||
import net.psforever.services.vehicle.{VehicleResponse, VehicleServiceResponse}
|
||||
import net.psforever.packet.game.{ChangeAmmoMessage, ChangeFireStateMessage_Start, ChangeFireStateMessage_Stop, ChildObjectStateMessage, DeadState, DeployRequestMessage, DismountVehicleMsg, FrameVehicleStateMessage, GenericObjectActionMessage, InventoryStateMessage, ObjectAttachMessage, ObjectCreateDetailedMessage, ObjectCreateMessage, ObjectDeleteMessage, ObjectDetachMessage, PlanetsideAttributeMessage, ReloadMessage, ServerVehicleOverrideMsg, VehicleStateMessage, WeaponDryFireMessage}
|
||||
import net.psforever.services.base.EventResponse
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceResponse}
|
||||
import net.psforever.types.{BailType, PlanetSideGUID, Vector3}
|
||||
|
||||
object VehicleHandlerLogic {
|
||||
|
|
@ -31,7 +32,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
* @param guid na
|
||||
* @param reply na
|
||||
*/
|
||||
def handle(toChannel: String, guid: PlanetSideGUID, reply: VehicleResponse.Response): Unit = {
|
||||
def handle(toChannel: String, guid: PlanetSideGUID, reply: EventResponse): Unit = {
|
||||
val resolvedPlayerGuid = if (player.HasGUID) {
|
||||
player.GUID
|
||||
} else {
|
||||
|
|
@ -39,7 +40,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
}
|
||||
val isNotSameTarget = resolvedPlayerGuid != guid
|
||||
reply match {
|
||||
case VehicleResponse.VehicleState(
|
||||
case VehicleAction.VehicleState(
|
||||
vehicleGuid,
|
||||
unk1,
|
||||
pos,
|
||||
|
|
@ -59,7 +60,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
player.Velocity = vel
|
||||
sessionLogic.updateLocalBlockMap(pos)
|
||||
|
||||
case VehicleResponse.VehicleState(
|
||||
case VehicleAction.VehicleState(
|
||||
vehicleGuid,
|
||||
unk1,
|
||||
pos,
|
||||
|
|
@ -75,23 +76,23 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
//player who is watching the vehicle from the outside
|
||||
sendResponse(VehicleStateMessage(vehicleGuid, unk1, pos, ang, vel, unk2, unk3, unk4, wheelDirection, unk5, unk6))
|
||||
|
||||
case VehicleResponse.ChildObjectState(objectGuid, pitch, yaw) if isNotSameTarget =>
|
||||
case VehicleAction.ChildObjectState(objectGuid, pitch, yaw) if isNotSameTarget =>
|
||||
sendResponse(ChildObjectStateMessage(objectGuid, pitch, yaw))
|
||||
|
||||
case VehicleResponse.FrameVehicleState(vguid, u1, pos, oient, vel, u2, u3, u4, is_crouched, u6, u7, u8, u9, uA)
|
||||
case VehicleAction.FrameVehicleState(vguid, u1, pos, oient, vel, u2, u3, u4, is_crouched, u6, u7, u8, u9, uA)
|
||||
if isNotSameTarget =>
|
||||
sendResponse(FrameVehicleStateMessage(vguid, u1, pos, oient, vel, u2, u3, u4, is_crouched, u6, u7, u8, u9, uA))
|
||||
|
||||
case VehicleResponse.ChangeFireState_Start(weaponGuid) if isNotSameTarget =>
|
||||
case VehicleAction.ChangeFireState_Start(weaponGuid) if isNotSameTarget =>
|
||||
sendResponse(ChangeFireStateMessage_Start(weaponGuid))
|
||||
|
||||
case VehicleResponse.ChangeFireState_Stop(weaponGuid) if isNotSameTarget =>
|
||||
case VehicleAction.ChangeFireState_Stop(weaponGuid) if isNotSameTarget =>
|
||||
sendResponse(ChangeFireStateMessage_Stop(weaponGuid))
|
||||
|
||||
case VehicleResponse.Reload(itemGuid) if isNotSameTarget =>
|
||||
case VehicleAction.Reload(itemGuid) if isNotSameTarget =>
|
||||
sendResponse(ReloadMessage(itemGuid, ammo_clip=1, unk1=0))
|
||||
|
||||
case VehicleResponse.ChangeAmmo(weapon_guid, weapon_slot, previous_guid, ammo_id, ammo_guid, ammo_data) if isNotSameTarget =>
|
||||
case VehicleAction.ChangeAmmo(weapon_guid, weapon_slot, previous_guid, ammo_id, ammo_guid, ammo_data) if isNotSameTarget =>
|
||||
sendResponse(ObjectDetachMessage(weapon_guid, previous_guid, Vector3.Zero, 0))
|
||||
//TODO? sendResponse(ObjectDeleteMessage(previousAmmoGuid, 0))
|
||||
sendResponse(
|
||||
|
|
@ -104,7 +105,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
)
|
||||
sendResponse(ChangeAmmoMessage(weapon_guid, 1))
|
||||
|
||||
case VehicleResponse.WeaponDryFire(weaponGuid) if isNotSameTarget =>
|
||||
case VehicleAction.WeaponDryFire(weaponGuid) if isNotSameTarget =>
|
||||
continent.GUID(weaponGuid).collect {
|
||||
case tool: Tool if tool.Magazine == 0 =>
|
||||
// check that the magazine is still empty before sending WeaponDryFireMessage
|
||||
|
|
@ -112,42 +113,25 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
sendResponse(WeaponDryFireMessage(weaponGuid))
|
||||
}
|
||||
|
||||
case VehicleResponse.DismountVehicle(bailType, wasKickedByDriver) if isNotSameTarget =>
|
||||
case VehicleAction.DismountVehicle(bailType, wasKickedByDriver) if isNotSameTarget =>
|
||||
sendResponse(DismountVehicleMsg(guid, bailType, wasKickedByDriver))
|
||||
|
||||
case VehicleResponse.MountVehicle(vehicleGuid, seat) if isNotSameTarget =>
|
||||
case VehicleAction.MountVehicle(vehicleGuid, seat) if isNotSameTarget =>
|
||||
sendResponse(ObjectAttachMessage(vehicleGuid, guid, seat))
|
||||
|
||||
case VehicleResponse.DeployRequest(objectGuid, state, unk1, unk2, pos) if isNotSameTarget =>
|
||||
case VehicleAction.DeployRequest(objectGuid, state, unk1, unk2, pos) if isNotSameTarget =>
|
||||
sendResponse(DeployRequestMessage(guid, objectGuid, state, unk1, unk2, pos))
|
||||
|
||||
case VehicleResponse.SendResponse(msg) =>
|
||||
case VehicleAction.SendResponse(msg) =>
|
||||
sendResponse(msg)
|
||||
|
||||
case VehicleResponse.AttachToRails(vehicleGuid, padGuid) =>
|
||||
sendResponse(ObjectAttachMessage(padGuid, vehicleGuid, slot=3))
|
||||
|
||||
case VehicleResponse.ConcealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=9))
|
||||
|
||||
case VehicleResponse.DetachFromRails(vehicleGuid, padGuid, padPosition, padOrientationZ) =>
|
||||
val pad = continent.GUID(padGuid).get.asInstanceOf[VehicleSpawnPad].Definition
|
||||
sendResponse(
|
||||
ObjectDetachMessage(
|
||||
padGuid,
|
||||
vehicleGuid,
|
||||
padPosition + Vector3.z(pad.VehicleCreationZOffset),
|
||||
padOrientationZ + pad.VehicleCreationZOrientOffset
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleResponse.EquipmentInSlot(pkt) if isNotSameTarget =>
|
||||
case VehicleAction.EquipmentCreatedInSlot(pkt) if isNotSameTarget =>
|
||||
sendResponse(pkt)
|
||||
|
||||
case VehicleResponse.GenericObjectAction(objectGuid, action) if isNotSameTarget =>
|
||||
case VehicleAction.GenericObjectAction(objectGuid, action) if isNotSameTarget =>
|
||||
sendResponse(GenericObjectActionMessage(objectGuid, action))
|
||||
|
||||
case VehicleResponse.InventoryState(obj, parentGuid, start, conData) if isNotSameTarget =>
|
||||
case VehicleAction.InventoryState(obj, parentGuid, start, conData) if isNotSameTarget =>
|
||||
//TODO prefer ObjectDetachMessage, but how to force ammo pools to update properly?
|
||||
val objGuid = obj.GUID
|
||||
sendResponse(ObjectDeleteMessage(objGuid, unk1=0))
|
||||
|
|
@ -158,7 +142,7 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
conData
|
||||
))
|
||||
|
||||
case VehicleResponse.KickPassenger(_, wasKickedByDriver, vehicleGuid) if resolvedPlayerGuid == guid =>
|
||||
case VehicleAction.KickPassenger(_, wasKickedByDriver, vehicleGuid) if resolvedPlayerGuid == guid =>
|
||||
//seat number (first field) seems to be correct if passenger is kicked manually by driver
|
||||
//but always seems to return 4 if user is kicked by mount permissions changing
|
||||
sendResponse(DismountVehicleMsg(guid, BailType.Kicked, wasKickedByDriver))
|
||||
|
|
@ -168,46 +152,40 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
case _ => ()
|
||||
}
|
||||
|
||||
case VehicleResponse.KickPassenger(_, wasKickedByDriver, _) =>
|
||||
case VehicleAction.KickPassenger(_, wasKickedByDriver, _) =>
|
||||
//seat number (first field) seems to be correct if passenger is kicked manually by driver
|
||||
//but always seems to return 4 if user is kicked by mount permissions changing
|
||||
sendResponse(DismountVehicleMsg(guid, BailType.Kicked, wasKickedByDriver))
|
||||
|
||||
case VehicleResponse.InventoryState2(objGuid, parentGuid, value) if isNotSameTarget =>
|
||||
case VehicleAction.InventoryState2(objGuid, parentGuid, value) if isNotSameTarget =>
|
||||
sendResponse(InventoryStateMessage(objGuid, unk=0, parentGuid, value))
|
||||
|
||||
case VehicleResponse.LoadVehicle(vehicle, vtype, vguid, vdata) if isNotSameTarget =>
|
||||
case VehicleAction.LoadVehicle(vehicle, vtype, vguid, vdata) if isNotSameTarget =>
|
||||
//this is not be suitable for vehicles with people who are seated in it before it spawns (if that is possible)
|
||||
sendResponse(ObjectCreateMessage(vtype, vguid, vdata))
|
||||
Vehicles.ReloadAccessPermissions(vehicle, player.Name)
|
||||
|
||||
case VehicleResponse.ObjectDelete(itemGuid) if isNotSameTarget =>
|
||||
case VehicleAction.ObjectDelete(itemGuid) if isNotSameTarget =>
|
||||
sendResponse(ObjectDeleteMessage(itemGuid, unk1=0))
|
||||
|
||||
case VehicleResponse.PlanetsideAttribute(vehicleGuid, attributeType, attributeValue) if isNotSameTarget =>
|
||||
case VehicleAction.PlanetsideAttribute(vehicleGuid, attributeType, attributeValue) if isNotSameTarget =>
|
||||
sendResponse(PlanetsideAttributeMessage(vehicleGuid, attributeType, attributeValue))
|
||||
|
||||
case VehicleResponse.ResetSpawnPad(padGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(padGuid, code=23))
|
||||
|
||||
case VehicleResponse.RevealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=10))
|
||||
|
||||
case VehicleResponse.SeatPermissions(vehicleGuid, seatGroup, permission) if isNotSameTarget =>
|
||||
case VehicleAction.SeatPermissions(vehicleGuid, seatGroup, permission) if isNotSameTarget =>
|
||||
sendResponse(PlanetsideAttributeMessage(vehicleGuid, seatGroup, permission))
|
||||
|
||||
case VehicleResponse.UnloadVehicle(_, vehicleGuid) =>
|
||||
case VehicleAction.UnloadVehicle(_, vehicleGuid) =>
|
||||
sendResponse(ObjectDeleteMessage(vehicleGuid, unk1=1))
|
||||
|
||||
case VehicleResponse.UnstowEquipment(itemGuid) if isNotSameTarget =>
|
||||
case VehicleAction.UnstowEquipment(itemGuid) if isNotSameTarget =>
|
||||
//TODO prefer ObjectDetachMessage, but how to force ammo pools to update properly?
|
||||
sendResponse(ObjectDeleteMessage(itemGuid, unk1=0))
|
||||
|
||||
case VehicleResponse.UpdateAmsSpawnPoint(list) =>
|
||||
case VehicleAction.UpdateAmsSpawnList(list) =>
|
||||
sessionLogic.zoning.spawn.amsSpawnPoints = list.filter(tube => tube.Faction == player.Faction)
|
||||
sessionLogic.zoning.spawn.DrawCurrentAmsSpawnPoint()
|
||||
|
||||
case VehicleResponse.KickCargo(vehicle, speed, delay)
|
||||
case VehicleAction.KickCargo(vehicle, speed, delay)
|
||||
if player.VehicleSeated.nonEmpty && sessionLogic.zoning.spawn.deadState == DeadState.Alive && speed > 0 =>
|
||||
val strafe = 1 + Vehicles.CargoOrientation(vehicle)
|
||||
val reverseSpeed = if (strafe > 1) { 0 } else { speed }
|
||||
|
|
@ -230,17 +208,40 @@ class VehicleHandlerLogic(val ops: SessionVehicleHandlers, implicit val context:
|
|||
context.system.scheduler.scheduleOnce(
|
||||
delay milliseconds,
|
||||
context.self,
|
||||
VehicleServiceResponse(toChannel, PlanetSideGUID(0), VehicleResponse.KickCargo(vehicle, speed=0, delay))
|
||||
VehicleServiceResponse(toChannel, PlanetSideGUID(0), VehicleAction.KickCargo(vehicle, speed=0, delay))
|
||||
)
|
||||
|
||||
case VehicleResponse.KickCargo(cargo, _, _)
|
||||
case VehicleAction.KickCargo(cargo, _, _)
|
||||
if player.VehicleSeated.nonEmpty && sessionLogic.zoning.spawn.deadState == DeadState.Alive =>
|
||||
sessionLogic.vehicles.TotalDriverVehicleControl(cargo)
|
||||
|
||||
case VehicleResponse.ServerVehicleOverrideEnd(vehicle, _) =>
|
||||
case VehicleSpawnPad.AttachToRails(vehicle, pad) =>
|
||||
sendResponse(ObjectAttachMessage(pad.GUID, vehicle.GUID, slot=3))
|
||||
|
||||
case VehicleSpawnPad.ConcealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=9))
|
||||
|
||||
case VehicleSpawnPad.DetachFromRails(vehicle, pad) =>
|
||||
val padDefinition = pad.Definition
|
||||
sendResponse(
|
||||
ObjectDetachMessage(
|
||||
pad.GUID,
|
||||
vehicle.GUID,
|
||||
pad.Position + Vector3.z(padDefinition.VehicleCreationZOffset),
|
||||
pad.Orientation.z + padDefinition.VehicleCreationZOrientOffset
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.ResetSpawnPad(pad) =>
|
||||
sendResponse(GenericObjectActionMessage(pad.GUID, code=23))
|
||||
|
||||
case VehicleSpawnPad.RevealPlayer(playerGuid) =>
|
||||
sendResponse(GenericObjectActionMessage(playerGuid, code=10))
|
||||
|
||||
case VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, _) =>
|
||||
sessionLogic.vehicles.ServerVehicleOverrideStop(vehicle)
|
||||
|
||||
case VehicleResponse.ChangeLoadout(target, oldWeapons, _, oldInventory, _) =>
|
||||
case VehicleAction.ChangeLoadout(target, oldWeapons, _, oldInventory, _) =>
|
||||
//TODO when vehicle weapons can be changed without visual glitches, rewrite this
|
||||
continent.GUID(target).collect { case vehicle: Vehicle =>
|
||||
changeLoadoutDeleteOldEquipment(vehicle, oldWeapons, oldInventory)
|
||||
|
|
|
|||
|
|
@ -41,20 +41,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
obj.zoneInteractions()
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.VehicleState(
|
||||
player.GUID,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
ang,
|
||||
obj.Velocity,
|
||||
obj.Flying,
|
||||
0,
|
||||
0,
|
||||
15,
|
||||
unk5 = false,
|
||||
obj.Cloaked
|
||||
)
|
||||
player.GUID,
|
||||
VehicleAction.VehicleState(vehicle_guid, unk1, pos, ang, obj.Velocity, obj.Flying, 0, 0, 15, unk5 = false, obj.Cloaked)
|
||||
)
|
||||
case _ => ()
|
||||
}
|
||||
|
|
@ -94,7 +82,8 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
|
|||
sendResponse(DeployRequestMessage(player.GUID, obj.GUID, DriveState.Mobile, 0, unk3=false, Vector3.Zero))
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.DeployRequest(player.GUID, obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||
player.GUID,
|
||||
VehicleAction.DeployRequest(obj.GUID, DriveState.Mobile, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
"; enforcing Mobile deployment state"
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1016,7 +1016,8 @@ class GeneralOperations(
|
|||
obj.Seats(seatNum).unmount(tplayer)
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, seatNum, unk2=false, obj.GUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID)
|
||||
)
|
||||
case _ => ()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -569,7 +569,8 @@ class SessionData(
|
|||
obj.Seats(seatNum).unmount(tplayer)
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, seatNum, unk2=false, obj.GUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(seatNum, unk2=false, obj.GUID)
|
||||
)
|
||||
case _ => ()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import net.psforever.objects.{PlanetSideGameObject, Tool, Vehicle}
|
|||
import net.psforever.objects.vehicles.{CargoBehavior, MountableWeapons}
|
||||
import net.psforever.objects.vital.InGameHistory
|
||||
import net.psforever.packet.game.{DismountVehicleCargoMsg, GenericObjectActionMessage, InventoryStateMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectAttachMessage, ObjectDetachMessage, PlanetsideAttributeMessage}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.{BailType, PlanetSideGUID, Vector3}
|
||||
//
|
||||
|
|
@ -187,7 +186,8 @@ class SessionMountHandlers(
|
|||
sendResponse(ObjectAttachMessage(objGuid, playerGuid, seatNum))
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.MountVehicle(playerGuid, objGuid, seatNum)
|
||||
playerGuid,
|
||||
VehicleAction.MountVehicle(objGuid, seatNum)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -204,11 +204,11 @@ class SessionMountHandlers(
|
|||
sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, PlanetsideAttributeMessage(obj.GUID, 81, 1))
|
||||
VehicleAction.SendResponse(PlanetsideAttributeMessage(obj.GUID, 81, 1))
|
||||
)
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation))
|
||||
VehicleAction.SendResponse(ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation))
|
||||
)
|
||||
}
|
||||
else {
|
||||
|
|
@ -225,20 +225,8 @@ class SessionMountHandlers(
|
|||
v.Velocity = Vector3.Zero
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.VehicleState(
|
||||
tplayer.GUID,
|
||||
v.GUID,
|
||||
unk1 = 0,
|
||||
tplayer.Position,
|
||||
v.Orientation,
|
||||
v.Velocity,
|
||||
v.Flying,
|
||||
unk3 = 0,
|
||||
unk4 = 0,
|
||||
wheel_direction = 15,
|
||||
unk5 = false,
|
||||
unk6 = v.Cloaked
|
||||
)
|
||||
tplayer.GUID,
|
||||
VehicleAction.VehicleState(v.GUID, unk1 = 0, tplayer.Position, v.Orientation, v.Velocity, v.Flying, unk3 = 0, unk4 = 0, wheel_direction = 15, unk5 = false, unk6 = v.Cloaked)
|
||||
)
|
||||
case _ => ()
|
||||
}
|
||||
|
|
@ -262,7 +250,8 @@ class SessionMountHandlers(
|
|||
sendResponse(DismountVehicleMsg(playerGuid, bailType, wasKickedByDriver = false))
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.DismountVehicle(playerGuid, bailType, unk2 = false)
|
||||
playerGuid,
|
||||
VehicleAction.DismountVehicle(bailType, unk2 = false)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ import akka.actor.{ActorContext, ActorRef, typed}
|
|||
import net.psforever.actors.session.AvatarActor
|
||||
import net.psforever.objects.Vehicle
|
||||
import net.psforever.packet.game.ChatMsg
|
||||
import net.psforever.services.vehicle.VehicleResponse
|
||||
import net.psforever.services.base.EventResponse
|
||||
import net.psforever.types.{ChatMessageType, DriveState, PlanetSideGUID}
|
||||
|
||||
trait VehicleHandlerFunctions extends CommonSessionInterfacingFunctionality {
|
||||
def ops: SessionVehicleHandlers
|
||||
|
||||
def handle(toChannel: String, guid: PlanetSideGUID, reply: VehicleResponse.Response): Unit
|
||||
def handle(toChannel: String, guid: PlanetSideGUID, reply: EventResponse): Unit
|
||||
}
|
||||
|
||||
class SessionVehicleHandlers(
|
||||
|
|
|
|||
|
|
@ -286,7 +286,8 @@ class WeaponAndProjectileOperations(
|
|||
case _: Equipment =>
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.WeaponDryFire(player.GUID, weapon_guid)
|
||||
player.GUID,
|
||||
VehicleAction.WeaponDryFire(weapon_guid)
|
||||
)
|
||||
}
|
||||
.orElse {
|
||||
|
|
@ -1098,7 +1099,8 @@ class WeaponAndProjectileOperations(
|
|||
}
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.ChangeFireState_Start(player.GUID, itemGuid)
|
||||
player.GUID,
|
||||
VehicleAction.ChangeFireState_Start(itemGuid)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -1138,7 +1140,8 @@ class WeaponAndProjectileOperations(
|
|||
}
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.ChangeFireState_Stop(player.GUID, itemGuid)
|
||||
player.GUID,
|
||||
VehicleAction.ChangeFireState_Stop(itemGuid)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -1201,7 +1204,8 @@ class WeaponAndProjectileOperations(
|
|||
def reloadVehicleMessages(itemGuid: PlanetSideGUID): Unit = {
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.Reload(player.GUID, itemGuid)
|
||||
player.GUID,
|
||||
VehicleAction.Reload(itemGuid)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -1478,13 +1482,8 @@ class WeaponAndProjectileOperations(
|
|||
obj.Find(box).collect { index =>
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${obj.Actor}",
|
||||
VehicleAction.InventoryState(
|
||||
player.GUID,
|
||||
box,
|
||||
obj.GUID,
|
||||
index,
|
||||
box.Definition.Packet.DetailedConstructorData(box).get
|
||||
)
|
||||
player.GUID,
|
||||
VehicleAction.InventoryState(box, obj.GUID, index, box.Definition.Packet.DetailedConstructorData(box).get)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -549,7 +549,7 @@ class ZoningOperations(
|
|||
}
|
||||
//spawn point update request
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
player.Name,
|
||||
VehicleAction.UpdateAmsSpawnPoint(continent)
|
||||
)
|
||||
spawn.upstreamMessageCount = 0
|
||||
|
|
@ -1353,7 +1353,8 @@ class ZoningOperations(
|
|||
val topLevel = interstellarFerryTopLevelGUID.getOrElse(vehicle.GUID)
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${vehicle.Actor}",
|
||||
VehicleAction.TransferPassengerChannel(pguid, s"${vehicle.Actor}", toChannel, vehicle, topLevel)
|
||||
pguid,
|
||||
VehicleAction.TransferPassengerChannel(s"${vehicle.Actor}", toChannel, vehicle, topLevel)
|
||||
)
|
||||
manifest.cargo.foreach {
|
||||
case ManifestPassengerEntry("MISSING_DRIVER", index) =>
|
||||
|
|
@ -1366,7 +1367,8 @@ class ZoningOperations(
|
|||
val cargo = vehicle.CargoHolds(entry.mount).occupant.get
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
entry.name,
|
||||
VehicleAction.TransferPassengerChannel(pguid, s"${cargo.Actor}", toChannel, cargo, topLevel)
|
||||
pguid,
|
||||
VehicleAction.TransferPassengerChannel(s"${cargo.Actor}", toChannel, cargo, topLevel)
|
||||
)
|
||||
}
|
||||
//
|
||||
|
|
@ -1397,7 +1399,8 @@ class ZoningOperations(
|
|||
//do not delete if vehicle has passengers or cargo
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
continent.id,
|
||||
VehicleAction.UnloadVehicle(pguid, vehicle, topLevel)
|
||||
pguid,
|
||||
VehicleAction.UnloadVehicle(vehicle, topLevel)
|
||||
)
|
||||
None
|
||||
} else {
|
||||
|
|
@ -2595,7 +2598,8 @@ class ZoningOperations(
|
|||
.foreach { _.MountedIn = vguid }
|
||||
events ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.LoadVehicle(player.GUID, vehicle, vObjectId, vguid, data)
|
||||
player.GUID,
|
||||
VehicleAction.LoadVehicle(vehicle, vObjectId, vguid, data)
|
||||
)
|
||||
carrierInfo match {
|
||||
case (Some(carrier), Some((index, _))) =>
|
||||
|
|
@ -2622,7 +2626,8 @@ class ZoningOperations(
|
|||
val zone = vehicle.PreviousGatingManifest().get.origin
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.UnloadVehicle(player.GUID, vehicle, vehicleToDelete)
|
||||
player.GUID,
|
||||
VehicleAction.UnloadVehicle(vehicle, vehicleToDelete)
|
||||
)
|
||||
log.debug(
|
||||
s"AvatarCreate: cleaning up ghost of transitioning vehicle ${vehicle.Definition.Name}@${vehicleToDelete.guid} in zone ${zone.id}"
|
||||
|
|
@ -3392,7 +3397,8 @@ class ZoningOperations(
|
|||
vehicle.OwnerGuid = guid
|
||||
continent.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${tplayer.Faction}",
|
||||
VehicleAction.Ownership(guid, vehicle.GUID)
|
||||
guid,
|
||||
VehicleAction.Ownership(vehicle.GUID)
|
||||
)
|
||||
case _ =>
|
||||
avatarActor ! AvatarActor.SetVehicle(None)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import net.psforever.objects.sourcing.{PlayerSource, SourceEntry, TurretSource}
|
|||
import net.psforever.objects.vital.{DismountingActivity, InGameActivity, MountingActivity, ShieldCharge}
|
||||
import net.psforever.packet.game.HackState1
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
|
||||
import scala.annotation.unused
|
||||
|
||||
|
|
@ -100,7 +99,7 @@ class FieldTurretControl(turret: TurretDeployable)
|
|||
turret.Shields = turret.Shields + amount
|
||||
turret.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${turret.Actor}",
|
||||
VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), turret.GUID, turret.Definition.shieldUiAttribute, turret.Shields)
|
||||
VehicleAction.PlanetsideAttribute(turret.GUID, turret.Definition.shieldUiAttribute, turret.Shields)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
|||
case obj: PlanetSideServerObject if !jammedSound =>
|
||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 54, 1)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 54, 1)
|
||||
)
|
||||
super.StartJammeredSound(obj, dur)
|
||||
case _ => ;
|
||||
|
|
@ -101,7 +101,7 @@ class SensorDeployableControl(sensor: SensorDeployable)
|
|||
val zone = obj.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 54, 0)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 54, 0)
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import net.psforever.objects.serverobject.repair.RepairableEntity
|
|||
import net.psforever.objects.vital.interaction.DamageResult
|
||||
import net.psforever.objects.vital.resolution.ResolutionCalculations
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
||||
class ShieldGeneratorDeployable(cdef: ShieldGeneratorDefinition)
|
||||
|
|
@ -22,12 +21,12 @@ class ShieldGeneratorDeployable(cdef: ShieldGeneratorDefinition)
|
|||
with Hackable
|
||||
with JammableUnit
|
||||
|
||||
class ShieldGeneratorDefinition extends DeployableDefinition(240)
|
||||
class ShieldGeneratorDefinition extends DeployableDefinition(objectId = 240)
|
||||
with WithShields {
|
||||
Packet = new ShieldGeneratorConverter
|
||||
DeployCategory = DeployableCategory.ShieldGenerators
|
||||
|
||||
override def Initialize(obj: Deployable, context: ActorContext) = {
|
||||
override def Initialize(obj: Deployable, context: ActorContext): Unit = {
|
||||
obj.Actor =
|
||||
context.actorOf(Props(classOf[ShieldGeneratorControl], obj), PlanetSideServerObject.UniqueActorName(obj))
|
||||
}
|
||||
|
|
@ -39,10 +38,10 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable)
|
|||
with JammableBehavior
|
||||
with DamageableEntity
|
||||
with RepairableEntity {
|
||||
def DeployableObject = gen
|
||||
def JammableObject = gen
|
||||
def DamageableObject = gen
|
||||
def RepairableObject = gen
|
||||
def DeployableObject: ShieldGeneratorDeployable = gen
|
||||
def JammableObject: ShieldGeneratorDeployable = gen
|
||||
def DamageableObject: ShieldGeneratorDeployable = gen
|
||||
def RepairableObject: ShieldGeneratorDeployable = gen
|
||||
deletionType = 1 //from DeployableBehavior
|
||||
|
||||
override def postStop(): Unit = {
|
||||
|
|
@ -127,7 +126,7 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable)
|
|||
case obj: PlanetSideServerObject with JammableUnit =>
|
||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 27, 1)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 27, 1)
|
||||
)
|
||||
super.StartJammeredStatus(obj, dur)
|
||||
case _ => ;
|
||||
|
|
@ -140,7 +139,7 @@ class ShieldGeneratorControl(gen: ShieldGeneratorDeployable)
|
|||
case obj: PlanetSideServerObject with JammableUnit if obj.Jammed =>
|
||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 27, 0)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 27, 0)
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
|
@ -162,7 +161,7 @@ object ShieldGeneratorControl {
|
|||
val zone = target.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, target.GUID, 68, target.Shields)
|
||||
VehicleAction.PlanetsideAttribute(target.GUID, 68, target.Shields)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,8 @@ abstract class TurretDeployableControl
|
|||
player.VehicleSeated = None
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.KickPassenger(player.GUID, 4, wasKickedByDriver, TurretObject.GUID)
|
||||
player.GUID,
|
||||
VehicleAction.KickPassenger(4, wasKickedByDriver, TurretObject.GUID)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,8 @@ object Vehicles {
|
|||
Vehicles.ReloadAccessPermissions(vehicle, tplayer.Faction.toString)
|
||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
vehicle.Zone.id,
|
||||
VehicleAction.Ownership(tplayer.GUID, vehicle.GUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.Ownership(vehicle.GUID)
|
||||
)
|
||||
Some(vehicle)
|
||||
case None =>
|
||||
|
|
@ -138,13 +139,14 @@ object Vehicles {
|
|||
val pguid = player.GUID
|
||||
if (vehicle.OwnerGuid.contains(pguid)) {
|
||||
vehicle.AssignOwnership(None)
|
||||
//vehicle.Zone.VehicleEvents ! VehicleServiceMessage(player.Name, VehicleAction.Ownership(pguid, PlanetSideGUID(0)))
|
||||
//vehicle.Zone.VehicleEvents ! VehicleServiceMessage(player.Name, pguid, VehicleAction.Ownership(pguid, PlanetSideGUID(0)))
|
||||
//val vguid = vehicle.GUID
|
||||
val empire = VehicleLockState.Empire.id
|
||||
(0 to 2).foreach(group => {
|
||||
vehicle.PermissionGroup(group, empire)
|
||||
/*vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${vehicle.Faction}",
|
||||
pguid,
|
||||
VehicleAction.SeatPermissions(pguid, vguid, group, empire)
|
||||
)*/
|
||||
})
|
||||
|
|
@ -252,10 +254,7 @@ object Vehicles {
|
|||
val previousOwnerName = target.OwnerName.getOrElse("")
|
||||
vehicleEvents ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
HackMessage(HackState1.Unk2, tGuid, hGuid, 100, 0f, HackState.Hacked, HackState7.Unk8)
|
||||
)
|
||||
VehicleAction.SendResponse(HackMessage(HackState1.Unk2, tGuid, hGuid, 100, 0f, HackState.Hacked, HackState7.Unk8))
|
||||
)
|
||||
target.Actor ! CommonMessages.Hack(hacker, target)
|
||||
// Forcefully dismount any cargo
|
||||
|
|
@ -272,7 +271,8 @@ object Vehicles {
|
|||
player.VehicleSeated = None
|
||||
vehicleEvents ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.KickPassenger(player.GUID, 4, unk2 = false, tGuid)
|
||||
player.GUID,
|
||||
VehicleAction.KickPassenger(4, unk2 = false, tGuid)
|
||||
)
|
||||
}
|
||||
// In case BFR is occupied and may or may not be crouched
|
||||
|
|
@ -345,15 +345,12 @@ object Vehicles {
|
|||
util.Actor ! TelepadLike.Activate(util)
|
||||
}
|
||||
case GlobalDefinitions.ams if target.DeploymentState == DriveState.Deployed =>
|
||||
vehicleEvents ! VehicleServiceMessage.AMSDeploymentChange(zone)
|
||||
vehicleEvents ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
||||
case _ => ()
|
||||
}
|
||||
vehicleEvents ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
HackMessage(HackState1.Unk2, tGuid, tGuid, 0, 1L, HackState.HackCleared, HackState7.Unk8)
|
||||
)
|
||||
VehicleAction.SendResponse(HackMessage(HackState1.Unk2, tGuid, tGuid, 0, 1L, HackState.HackCleared, HackState7.Unk8))
|
||||
)
|
||||
target.Actor ! CommonMessages.ClearHack()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import net.psforever.objects.vital.RepairFromArmorSiphon
|
|||
import net.psforever.objects.vital.etc.{ArmorSiphonModifiers, ArmorSiphonReason}
|
||||
import net.psforever.objects.vital.interaction.DamageInteraction
|
||||
import net.psforever.packet.game.QuantityUpdateMessage
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
|
||||
|
|
@ -80,7 +79,7 @@ object ArmorSiphonBehavior {
|
|||
val zone = obj.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 0, after)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 0, after)
|
||||
)
|
||||
}
|
||||
case _ => ;
|
||||
|
|
@ -99,7 +98,7 @@ object ArmorSiphonBehavior {
|
|||
//update current charge level
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Actor.toString,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, siphon.Magazine))
|
||||
VehicleAction.SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, siphon.Magazine))
|
||||
)
|
||||
siphonRecharge.put(guid, context.system.scheduler.scheduleWithFixedDelay(
|
||||
initialDelay = 3000 milliseconds,
|
||||
|
|
@ -121,7 +120,7 @@ object ArmorSiphonBehavior {
|
|||
if (after > before) {
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Actor.toString,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, after))
|
||||
VehicleAction.SendResponse(QuantityUpdateMessage(siphon.AmmoSlot.Box.GUID, after))
|
||||
)
|
||||
if (after == siphon.MaxMagazine) {
|
||||
endSiphonRecharge(guid)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import net.psforever.objects.vital.interaction.DamageResult
|
|||
import net.psforever.objects.vital.projectile.ProjectileReason
|
||||
import net.psforever.objects.zones.{Zone, ZoneAware}
|
||||
import net.psforever.types.Vector3
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
||||
import scala.collection.mutable
|
||||
|
|
@ -245,7 +244,7 @@ trait JammableMountedWeapons extends JammableBehavior {
|
|||
case obj: PlanetSideServerObject with MountedWeapons with JammableUnit if !jammedSound =>
|
||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 27, 1)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 27, 1)
|
||||
)
|
||||
super.StartJammeredSound(target, dur)
|
||||
case _ => ;
|
||||
|
|
@ -266,7 +265,7 @@ trait JammableMountedWeapons extends JammableBehavior {
|
|||
case obj: PlanetSideServerObject if jammedSound =>
|
||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
obj.Zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 27, 0)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 27, 0)
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
|
@ -310,7 +309,7 @@ object JammableMountedWeapons {
|
|||
target.Jammed = statusCode == 1
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, target.GUID, 27, statusCode)
|
||||
VehicleAction.PlanetsideAttribute(target.GUID, 27, statusCode)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -144,21 +144,21 @@ trait DamageableVehicle
|
|||
if (damageToShields > 0) {
|
||||
events ! VehicleServiceMessage(
|
||||
shieldChannel,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, targetGUID, obj.Definition.shieldUiAttribute, obj.Shields)
|
||||
VehicleAction.PlanetsideAttribute(targetGUID, obj.Definition.shieldUiAttribute, obj.Shields)
|
||||
)
|
||||
announceConfrontation = true
|
||||
}
|
||||
if (damageToHealth > 0) {
|
||||
events ! VehicleServiceMessage(
|
||||
healthChannel,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, targetGUID, 0, obj.Health)
|
||||
VehicleAction.PlanetsideAttribute(targetGUID, 0, obj.Health)
|
||||
)
|
||||
announceConfrontation = true
|
||||
}
|
||||
}
|
||||
if (announceConfrontation) {
|
||||
if (showAsAggravated) {
|
||||
val msg = VehicleAction.SendResponse(Service.defaultPlayerGUID, DamageWithPositionMessage(totalDamage, Vector3.Zero))
|
||||
val msg = VehicleAction.SendResponse(DamageWithPositionMessage(totalDamage, Vector3.Zero))
|
||||
obj.Seats.values
|
||||
.collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name }
|
||||
.foreach { channel =>
|
||||
|
|
@ -219,7 +219,7 @@ trait DamageableVehicle
|
|||
obj.Shields = 0
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, target.GUID, obj.Definition.shieldUiAttribute, 0)
|
||||
VehicleAction.PlanetsideAttribute(target.GUID, obj.Definition.shieldUiAttribute, 0)
|
||||
)
|
||||
}
|
||||
//database entry
|
||||
|
|
@ -252,13 +252,13 @@ trait DamageableVehicle
|
|||
val guid = obj.GUID
|
||||
events ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.PlanetsideAttribute(guid0, guid, 0, 1)
|
||||
VehicleAction.PlanetsideAttribute(guid, 0, 1)
|
||||
)
|
||||
if (obj.Shields > 0) {
|
||||
obj.Shields = 0
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, obj.Definition.shieldUiAttribute, 0)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, obj.Definition.shieldUiAttribute, 0)
|
||||
)
|
||||
}
|
||||
//aggravation cancel
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import net.psforever.objects.vital.interaction.DamageResult
|
|||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.game.DamageWithPositionMessage
|
||||
import net.psforever.types.Vector3
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.base.support.SupportActor
|
||||
import net.psforever.services.vehicle.support.TurretUpgrader
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.services.vehicle.{TurretMessage, VehicleAction, VehicleServiceMessage}
|
||||
|
||||
/**
|
||||
* The "control" `Actor` mixin for damage-handling code for `WeaponTurret` objects.
|
||||
|
|
@ -64,14 +64,14 @@ trait DamageableWeaponTurret
|
|||
DamageableMountable.DamageAwareness(DamageableObject, cause, damageToHealth)
|
||||
events ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, targetGUID, 0, obj.Health)
|
||||
VehicleAction.PlanetsideAttribute(targetGUID, 0, obj.Health)
|
||||
)
|
||||
announceConfrontation = true
|
||||
}
|
||||
}
|
||||
if (announceConfrontation) {
|
||||
if (aggravated) {
|
||||
val msg = VehicleAction.SendResponse(Service.defaultPlayerGUID, DamageWithPositionMessage(damageToHealth, Vector3.Zero))
|
||||
val msg = VehicleAction.SendResponse(DamageWithPositionMessage(damageToHealth, Vector3.Zero))
|
||||
obj.Seats.values
|
||||
.collect { case seat if seat.occupant.nonEmpty => seat.occupant.get.Name }
|
||||
.foreach { channel =>
|
||||
|
|
@ -112,7 +112,7 @@ object DamageableWeaponTurret {
|
|||
* @see `TurretUpgrader.AddTask`
|
||||
* @see `TurretUpgrader.ClearSpecific`
|
||||
* @see `WeaponTurret`
|
||||
* @see `VehicleServiceMessage.TurretUpgrade`
|
||||
* @see `TurretMessage`
|
||||
* @see `Zone.AvatarEvents`
|
||||
* @see `Zone.VehicleEvents`
|
||||
* @param target the entity being destroyed;
|
||||
|
|
@ -137,8 +137,8 @@ object DamageableWeaponTurret {
|
|||
case turret: WeaponTurret =>
|
||||
if (turret.Upgrade != TurretUpgrade.None) {
|
||||
val vehicleEvents = zone.VehicleEvents
|
||||
vehicleEvents ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.ClearSpecific(List(turret), zone))
|
||||
vehicleEvents ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.AddTask(turret, zone, TurretUpgrade.None))
|
||||
vehicleEvents ! TurretMessage(SupportActor.ClearSpecific(List(turret), zone))
|
||||
vehicleEvents ! TurretMessage(TurretUpgrader.AddTask(turret, zone, TurretUpgrade.None))
|
||||
}
|
||||
case _ =>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ trait DeploymentBehavior {
|
|||
obj.Velocity = Some(Vector3.Zero) //no velocity
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zoneChannel,
|
||||
VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero)
|
||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
deploymentTimer.cancel()
|
||||
deploymentTimer = context.system.scheduler.scheduleOnce(obj.DeployTime.milliseconds)({
|
||||
|
|
@ -117,7 +117,7 @@ trait DeploymentBehavior {
|
|||
obj.Velocity = Some(Vector3.Zero) //no velocity
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zoneChannel,
|
||||
VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero)
|
||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
state
|
||||
} else {
|
||||
|
|
@ -138,7 +138,7 @@ trait DeploymentBehavior {
|
|||
if (state == DriveState.Undeploying) {
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zoneChannel,
|
||||
VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero)
|
||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
deploymentTimer.cancel()
|
||||
|
|
@ -149,7 +149,7 @@ trait DeploymentBehavior {
|
|||
} else if (state == DriveState.Mobile) {
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zoneChannel,
|
||||
VehicleAction.DeployRequest(GUID0, guid, state, 0, unk2=false, Vector3.Zero)
|
||||
VehicleAction.DeployRequest(guid, state, 0, unk2=false, Vector3.Zero)
|
||||
)
|
||||
state
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import net.psforever.objects.sourcing.AmenitySource
|
|||
import net.psforever.objects.vital.TerminalUsedActivity
|
||||
import net.psforever.objects.zones.{Zone, ZoneAware, Zoning}
|
||||
import net.psforever.objects.{Default, PlanetSideGameObject, Player, Vehicle}
|
||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
||||
import net.psforever.types.{PlanetSideGUID, TransactionType, Vector3}
|
||||
|
||||
import scala.annotation.tailrec
|
||||
|
|
@ -128,7 +129,7 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
}
|
||||
trackedOrder = None
|
||||
handleOrderFunc = NewTasking
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.ResetSpawnPad(pad) //cautious animation reset
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad)) //cautious animation reset
|
||||
self ! akka.actor.Kill //should cause the actor to restart, which will abort any trapped messages
|
||||
|
||||
case _ => ()
|
||||
|
|
@ -164,19 +165,17 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
//first queued order
|
||||
orders = List(order)
|
||||
queueManagementTask()
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
name,
|
||||
VehicleSpawnPad.Reminders.Queue,
|
||||
Some(s"@SVCP_PositionInQueue^2~^2~")
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^2~^2~"))
|
||||
)
|
||||
case -1 =>
|
||||
//new order
|
||||
orders = orders :+ order
|
||||
val size = orders.size + 1
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
name,
|
||||
VehicleSpawnPad.Reminders.Queue,
|
||||
Some(s"@SVCP_PositionInQueue^$size~^$size~")
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$size~^$size~"))
|
||||
)
|
||||
case n if orders(n).vehicle.Definition ne order.vehicle.Definition =>
|
||||
//replace existing order with new order
|
||||
|
|
@ -185,10 +184,9 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
val originalVehicle = originalOrder.vehicle.Definition.Name
|
||||
orders = (orders.take(n) :+ order) ++ orders.drop(n+1)
|
||||
VehicleSpawnControl.DisposeVehicle(originalOrder.vehicle, zone)
|
||||
zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
name,
|
||||
VehicleSpawnPad.Reminders.Queue,
|
||||
Some(s"@SVCP_ReplacedVehicleWithVehicle^@$originalVehicle~^@${order.vehicle.Definition.Name}~")
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_ReplacedVehicleWithVehicle^@$originalVehicle~^@${order.vehicle.Definition.Name}~"))
|
||||
)
|
||||
case _ =>
|
||||
//order is the duplicate of an existing order; do nothing to the queue
|
||||
|
|
@ -245,10 +243,9 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
val newOrder = VehicleSpawnControl.Order(driver, vehicle)
|
||||
recursiveOrderReminder(orders.iterator, size)
|
||||
trace(s"processing next order - a ${vehicle.Definition.Name} for $name")
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
name,
|
||||
VehicleSpawnPad.Reminders.Queue,
|
||||
Some(s"@SVCP_PositionInQueue^1~^$size~")
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^1~^$size~"))
|
||||
)
|
||||
trackedOrder = Some(newOrder) //guard on
|
||||
context.system.scheduler.scheduleOnce(2000 milliseconds, concealPlayer, newOrder)
|
||||
|
|
@ -324,7 +321,10 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
private def CancelOrder(vehicle: Vehicle, player: Player, msg: Option[String]): Unit = {
|
||||
if (vehicle.Seats.values.count(_.isOccupied) == 0) {
|
||||
VehicleSpawnControl.DisposeSpawnedVehicle(vehicle, player, pad.Zone)
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(player.Name, VehicleSpawnPad.Reminders.Cancelled, msg)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
player.Name,
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Cancelled, msg)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -451,10 +451,9 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
entry: VehicleSpawnPad.VehicleOrder,
|
||||
cause: Option[Any]
|
||||
): Unit = {
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
entry.player.Name,
|
||||
VehicleSpawnPad.Reminders.Blocked,
|
||||
cause
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Blocked, cause)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -465,10 +464,9 @@ class VehicleSpawnControl(pad: VehicleSpawnPad)
|
|||
): Unit = {
|
||||
if (iter.hasNext) {
|
||||
val recipient = iter.next()
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PeriodicReminder(
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
recipient.player.Name,
|
||||
VehicleSpawnPad.Reminders.Queue,
|
||||
Some(s"@SVCP_PositionInQueue^$position~^$size~")
|
||||
VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Queue, Some(s"@SVCP_PositionInQueue^$position~^$size~"))
|
||||
)
|
||||
recursiveOrderReminder(iter, size, position + 1)
|
||||
}
|
||||
|
|
@ -564,7 +562,7 @@ object VehicleSpawnControl {
|
|||
*/
|
||||
private def DisposeSpawnedVehicle(vehicle: Vehicle, player: Player, zone: Zone): Unit = {
|
||||
DisposeVehicle(vehicle, zone)
|
||||
zone.VehicleEvents ! VehicleSpawnPad.RevealPlayer(player.GUID)
|
||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, VehicleSpawnPad.RevealPlayer(player.GUID))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import net.psforever.objects.serverobject.interior.Sidedness
|
|||
import net.psforever.objects.{Player, Vehicle}
|
||||
import net.psforever.objects.serverobject.structures.Amenity
|
||||
import net.psforever.objects.serverobject.terminals.Terminal
|
||||
import net.psforever.services.base.SelfResponseMessage
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
|
||||
/**
|
||||
|
|
@ -25,7 +26,6 @@ class VehicleSpawnPad(spDef: VehicleSpawnPadDefinition) extends Amenity {
|
|||
}
|
||||
|
||||
object VehicleSpawnPad {
|
||||
|
||||
/**
|
||||
* Message to the spawn pad to enqueue the following vehicle order.
|
||||
* This is the entry point to vehicle spawn pad functionality.
|
||||
|
|
@ -39,14 +39,14 @@ object VehicleSpawnPad {
|
|||
* @see `GenericObjectActionMessage`
|
||||
* @param player_guid the player
|
||||
*/
|
||||
final case class ConcealPlayer(player_guid: PlanetSideGUID)
|
||||
final case class ConcealPlayer(player_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message is intended to undo the effects of the above message, `ConcealPlayer`.
|
||||
* @see `ConcealPlayer`
|
||||
* @param player_guid the player
|
||||
*/
|
||||
final case class RevealPlayer(player_guid: PlanetSideGUID)
|
||||
final case class RevealPlayer(player_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message to attach the vehicle to the spawn pad's lifting platform ("put on rails").
|
||||
|
|
@ -55,7 +55,7 @@ object VehicleSpawnPad {
|
|||
* @param vehicle the vehicle being spawned
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class AttachToRails(vehicle: Vehicle, pad: VehicleSpawnPad)
|
||||
final case class AttachToRails(vehicle: Vehicle, pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message to detach the vehicle from the spawn pad's lifting platform ("put on rails").
|
||||
|
|
@ -63,72 +63,64 @@ object VehicleSpawnPad {
|
|||
* @param vehicle the vehicle being spawned
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class DetachFromRails(vehicle: Vehicle, pad: VehicleSpawnPad)
|
||||
final case class DetachFromRails(vehicle: Vehicle, pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message that resets the spawn pad for its next order fulfillment operation by lowering the lifting platform.
|
||||
* @see `GenericObjectActionMessage`
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class ResetSpawnPad(pad: VehicleSpawnPad)
|
||||
final case class ResetSpawnPad(pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message that acts as callback to the driver that the process of sitting in the driver mount will be initiated soon.
|
||||
* This information should only be communicated to the driver's client only.
|
||||
* @param driver_name the person who will drive the vehicle
|
||||
* @param vehicle the vehicle being spawned
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class StartPlayerSeatedInVehicle(driver_name: String, vehicle: Vehicle, pad: VehicleSpawnPad)
|
||||
final case class StartPlayerSeatedInVehicle(vehicle: Vehicle, pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message that acts as callback to the driver that the process of sitting in the driver mount should be finished.
|
||||
* This information should only be communicated to the driver's client only.
|
||||
* @param driver_name the person who will drive the vehicle
|
||||
* @param vehicle the vehicle being spawned
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class PlayerSeatedInVehicle(
|
||||
driver_name: String,
|
||||
vehicle: Vehicle,
|
||||
pad: VehicleSpawnPad
|
||||
) //TODO while using fake rails
|
||||
//TODO while using fake rails (later edit: what does this mean?)
|
||||
final case class PlayerSeatedInVehicle(vehicle: Vehicle, pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message that starts the newly-spawned vehicle to begin driving away from the spawn pad.
|
||||
* Information about the driving process is available on the vehicle itself.
|
||||
* This information should only be communicated to the driver's client only.
|
||||
* @see `VehicleDefinition`
|
||||
* @param driver_name the person who will drive the vehicle
|
||||
* @param vehicle the vehicle
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class ServerVehicleOverrideStart(driver_name: String, vehicle: Vehicle, pad: VehicleSpawnPad)
|
||||
final case class ServerVehicleOverrideStart(vehicle: Vehicle, pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message that transitions the newly-spawned vehicle into a cancellable auto-drive state.
|
||||
* Information about the driving process is available on the vehicle itself.
|
||||
* This information should only be communicated to the driver's client only.
|
||||
* @see `VehicleDefinition`
|
||||
* @param driver_name the person who will drive the vehicle
|
||||
* @param vehicle the vehicle
|
||||
* @param pad the spawn pad
|
||||
*/
|
||||
final case class ServerVehicleOverrideEnd(driver_name: String, vehicle: Vehicle, pad: VehicleSpawnPad)
|
||||
final case class ServerVehicleOverrideEnd(vehicle: Vehicle, pad: VehicleSpawnPad) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message to initiate the process of properly disposing of the vehicle that may have been or was spawned into the game world.
|
||||
* @param vehicle the vehicle
|
||||
*/
|
||||
final case class DisposeVehicle(vehicle: Vehicle)
|
||||
final case class DisposeVehicle(vehicle: Vehicle) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* Message to send targeted messages to the clients of specific users.
|
||||
* @param driver_name the person who will drive the vehicle
|
||||
* @param reason the nature of the message
|
||||
* @param data optional information for rendering the message to the client
|
||||
*/
|
||||
final case class PeriodicReminder(driver_name: String, reason: Reminders.Value, data: Option[Any] = None)
|
||||
final case class PeriodicReminder(reason: Reminders.Value, data: Option[Any] = None) extends SelfResponseMessage
|
||||
|
||||
/**
|
||||
* An `Enumeration` of reasons for sending a periodic reminder to the user.
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package net.psforever.objects.serverobject.pad.process
|
|||
|
||||
import akka.actor.Props
|
||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
||||
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.duration._
|
||||
|
|
@ -28,7 +29,7 @@ class VehicleSpawnControlConcealPlayer(pad: VehicleSpawnPad) extends VehicleSpaw
|
|||
case order @ VehicleSpawnControl.Order(driver, vehicle) =>
|
||||
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) {
|
||||
trace(s"hiding ${driver.Name}")
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.ConcealPlayer(driver.GUID)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ConcealPlayer(driver.GUID))
|
||||
context.system.scheduler.scheduleOnce(2000 milliseconds, loadVehicle, order)
|
||||
} else {
|
||||
trace(s"integral component lost; abort order fulfillment")
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package net.psforever.objects.serverobject.pad.process
|
|||
|
||||
import akka.actor.Props
|
||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
||||
|
||||
/**
|
||||
* An `Actor` that handles vehicle spawning orders for a `VehicleSpawnPad`.
|
||||
|
|
@ -24,7 +25,7 @@ class VehicleSpawnControlDriverControl(pad: VehicleSpawnPad) extends VehicleSpaw
|
|||
case order @ VehicleSpawnControl.Order(driver, vehicle) =>
|
||||
trace(s"returning control of ${vehicle.Definition.Name} to its current driver")
|
||||
if (vehicle.PassengerInSeat(driver).nonEmpty) {
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.ServerVehicleOverrideEnd(driver.Name, vehicle, pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.ServerVehicleOverrideEnd(vehicle, pad))
|
||||
}
|
||||
finalClear ! order
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package net.psforever.objects.serverobject.pad.process
|
|||
import akka.actor.Cancellable
|
||||
import net.psforever.objects.Default
|
||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||
import net.psforever.types.{PlanetSideGUID, Vector3}
|
||||
import net.psforever.types.Vector3
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
|
|
@ -37,13 +37,7 @@ class VehicleSpawnControlFinalClearance(pad: VehicleSpawnPad) extends VehicleSpa
|
|||
val definition = vehicle.Definition
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${pad.Continent}",
|
||||
VehicleAction.LoadVehicle(
|
||||
PlanetSideGUID(0),
|
||||
vehicle,
|
||||
definition.ObjectId,
|
||||
vehicle.GUID,
|
||||
definition.Packet.ConstructorData(vehicle).get
|
||||
)
|
||||
VehicleAction.LoadVehicle(vehicle, definition.ObjectId, vehicle.GUID, definition.Packet.ConstructorData(vehicle).get)
|
||||
)
|
||||
}
|
||||
context.parent ! VehicleSpawnControl.ProcessControl.Reminder
|
||||
|
|
@ -70,7 +64,7 @@ class VehicleSpawnControlFinalClearance(pad: VehicleSpawnPad) extends VehicleSpa
|
|||
}
|
||||
|
||||
case VehicleSpawnControlFinalClearance.NextOrder =>
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.ResetSpawnPad(pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.ResetSpawnPad(pad))
|
||||
context.parent ! VehicleSpawnControl.ProcessControl.GetNewOrder
|
||||
|
||||
case _ => ()
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import akka.util.Timeout
|
|||
import net.psforever.objects.GlobalDefinitions
|
||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.Vector3
|
||||
import net.psforever.zones.Zones
|
||||
|
|
@ -70,7 +69,7 @@ class VehicleSpawnControlLoadVehicle(pad: VehicleSpawnPad) extends VehicleSpawnC
|
|||
val vdata = definition.Packet.ConstructorData(v).get
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.LoadVehicle(Service.defaultPlayerGUID, v, vtype, vguid, vdata)
|
||||
VehicleAction.LoadVehicle(v, vtype, vguid, vdata)
|
||||
)
|
||||
railJack ! temp.get
|
||||
temp = None
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult}
|
|||
import net.psforever.objects.vital.prop.DamageProperties
|
||||
import net.psforever.objects.vital.Vitality
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
||||
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.duration._
|
||||
|
|
@ -40,7 +41,7 @@ class VehicleSpawnControlRailJack(pad: VehicleSpawnPad) extends VehicleSpawnCont
|
|||
pad.Definition.killBox(pad, vehicle.Definition.CanFly),
|
||||
Zone.findAllTargets
|
||||
)
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.AttachToRails(vehicle, pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.AttachToRails(vehicle, pad))
|
||||
context.system.scheduler.scheduleOnce(10 milliseconds, seatDriver, order)
|
||||
|
||||
case msg @ (VehicleSpawnControl.ProcessControl.Reminder | VehicleSpawnControl.ProcessControl.GetNewOrder) =>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ package net.psforever.objects.serverobject.pad.process
|
|||
import akka.actor.{ActorRef, Props}
|
||||
import net.psforever.objects.{Default, Vehicle}
|
||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
||||
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.duration._
|
||||
|
|
@ -46,7 +47,7 @@ class VehicleSpawnControlSeatDriver(pad: VehicleSpawnPad) extends VehicleSpawnCo
|
|||
vehicle.Actor ! Vehicle.Deconstruct(Some(pad.Definition.VehicleCreationDeconstructTime.seconds))
|
||||
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty) {
|
||||
trace("driver to be made seated in vehicle")
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.StartPlayerSeatedInVehicle(driver.Name, vehicle, pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.StartPlayerSeatedInVehicle(vehicle, pad))
|
||||
} else {
|
||||
trace("driver lost; vehicle stranded on pad")
|
||||
}
|
||||
|
|
@ -58,7 +59,7 @@ class VehicleSpawnControlSeatDriver(pad: VehicleSpawnPad) extends VehicleSpawnCo
|
|||
if (VehicleSpawnControl.validateOrderCredentials(pad, driver, vehicle).isEmpty &&
|
||||
entry.vehicle.PassengerInSeat(entry.driver).contains(0)) {
|
||||
trace(s"driver ${entry.driver.Name} has taken the wheel")
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.PlayerSeatedInVehicle(entry.driver.Name, entry.vehicle, pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(entry.driver.Name, VehicleSpawnPad.PlayerSeatedInVehicle(entry.vehicle, pad))
|
||||
} else {
|
||||
trace("driver lost, but operations can continue")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package net.psforever.objects.serverobject.pad.process
|
|||
|
||||
import akka.actor.Props
|
||||
import net.psforever.objects.serverobject.pad.{VehicleSpawnControl, VehicleSpawnPad}
|
||||
import net.psforever.services.vehicle.VehicleServiceMessage
|
||||
import net.psforever.types.Vector3
|
||||
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
|
|
@ -31,18 +32,18 @@ class VehicleSpawnControlServerVehicleOverride(pad: VehicleSpawnPad) extends Veh
|
|||
val driverFailState =
|
||||
!driver.isAlive || driver.Continent != pad.Continent || !vehicle.PassengerInSeat(driver).contains(0)
|
||||
vehicle.MountedIn = None
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.DetachFromRails(vehicle, pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.DetachFromRails(vehicle, pad))
|
||||
if (vehicleFailState || driverFailState) {
|
||||
if (vehicleFailState) {
|
||||
trace(s"vehicle was already destroyed")
|
||||
} else {
|
||||
trace(s"driver is not ready")
|
||||
}
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.RevealPlayer(order.DriverGUID)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(pad.Zone.id, VehicleSpawnPad.RevealPlayer(order.DriverGUID))
|
||||
driverControl ! order
|
||||
} else {
|
||||
trace(s"telling ${driver.Name} that the server is assuming control of the ${vehicle.Definition.Name}")
|
||||
pad.Zone.VehicleEvents ! VehicleSpawnPad.ServerVehicleOverrideStart(driver.Name, vehicle, pad)
|
||||
pad.Zone.VehicleEvents ! VehicleServiceMessage(driver.Name, VehicleSpawnPad.ServerVehicleOverrideStart(vehicle, pad))
|
||||
context.system.scheduler.scheduleOnce(4000 milliseconds, driverControl, order)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import net.psforever.objects.Tool
|
|||
import net.psforever.objects.equipment.EquipmentSlot
|
||||
import net.psforever.objects.serverobject.turret.WeaponTurret
|
||||
import net.psforever.objects.vehicles.MountedWeapons
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
||||
/**
|
||||
|
|
@ -48,7 +47,7 @@ object RepairableWeaponTurret {
|
|||
case (index: Int, Some(tool: Tool)) =>
|
||||
events ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.EquipmentInSlot(Service.defaultPlayerGUID, tguid, index, tool)
|
||||
VehicleAction.EquipmentInSlot(tguid, index, tool)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
|||
val zone = resourceSilo.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, resourceSilo.GUID, 49, 1)
|
||||
VehicleAction.PlanetsideAttribute(resourceSilo.GUID, 49, 1)
|
||||
)
|
||||
math.min(resourceSilo.MaxNtuCapacitor - currentlyHas, trigger)
|
||||
} else if (trigger < 0) {
|
||||
|
|
@ -244,7 +244,7 @@ class ResourceSiloControl(resourceSilo: ResourceSilo)
|
|||
val zone = resourceSilo.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, resourceSilo.GUID, 49, 0)
|
||||
VehicleAction.PlanetsideAttribute(resourceSilo.GUID, 49, 0)
|
||||
)
|
||||
0
|
||||
}) * 0.9f
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ import net.psforever.objects.serverobject.structures.{Building, PoweredAmenityCo
|
|||
import net.psforever.objects.vital.{HealFromTerminal, RepairFromTerminal, Vitality}
|
||||
import net.psforever.objects.zones.ZoneAware
|
||||
import net.psforever.packet.game.InventoryStateMessage
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
|
@ -379,7 +378,7 @@ object ProximityTerminalControl {
|
|||
val zone = target.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, target.GUID, 0, target.Health)
|
||||
VehicleAction.PlanetsideAttribute(target.GUID, 0, target.Health)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -466,7 +465,7 @@ object ProximityTerminalControl {
|
|||
slots.foreach { slot =>
|
||||
events ! VehicleServiceMessage(
|
||||
channel,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity))
|
||||
VehicleAction.SendResponse(InventoryStateMessage(slot.Box.GUID, weapon.GUID, slot.Box.Capacity))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
|||
case player =>
|
||||
seat.unmount(player)
|
||||
player.VehicleSeated = None
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.KickPassenger(player.GUID, 4, unk2=false, guid))
|
||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
@ -277,7 +277,7 @@ class ImplantTerminalMechControl(mech: ImplantTerminalMech)
|
|||
case player if test(player.Faction) =>
|
||||
seat.unmount(player)
|
||||
player.VehicleSeated = None
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.KickPassenger(player.GUID, 4, unk2 = false, guid))
|
||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = false, guid))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import net.psforever.objects.serverobject.turret.auto.AutomatedTurret.Target
|
|||
import net.psforever.objects.serverobject.turret.auto.{AffectedByAutomaticTurretFire, AutomatedTurret, AutomatedTurretBehavior}
|
||||
import net.psforever.objects.vital.interaction.DamageResult
|
||||
import net.psforever.packet.game.{ChangeFireModeMessage, HackState1}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.support.TurretUpgrader
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.{BailType, PlanetSideEmpire, PlanetSideGUID}
|
||||
|
|
@ -179,7 +178,7 @@ class FacilityTurretControl(turret: FacilityTurret)
|
|||
seat.unmount(player)
|
||||
player.VehicleSeated = None
|
||||
if (player.HasGUID) {
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.KickPassenger(player.GUID, 4, unk2=false, guid))
|
||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2=false, guid))
|
||||
}
|
||||
case None => ()
|
||||
}
|
||||
|
|
@ -239,7 +238,7 @@ class FacilityTurretControl(turret: FacilityTurret)
|
|||
weapon.FireModeIndex = 0
|
||||
events ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, ChangeFireModeMessage(weapon.GUID, 0))
|
||||
VehicleAction.SendResponse(ChangeFireModeMessage(weapon.GUID, 0))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -341,7 +340,7 @@ class FacilityTurretControl(turret: FacilityTurret)
|
|||
case player =>
|
||||
seat.unmount(player)
|
||||
player.VehicleSeated = None
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.KickPassenger(player.GUID, seat_num, unk2=true, guid))
|
||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(seat_num, unk2=true, guid))
|
||||
}
|
||||
}
|
||||
captureTerminalChanges(terminal, super.captureTerminalIsHacked, actionDelays = 3000L)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import net.psforever.objects.{Player, Tool, TurretDeployable}
|
|||
import net.psforever.packet.game.{HackMessage, HackState, HackState1, HackState7, InventoryStateMessage}
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.services.vehicle.support.TurretUpgrader
|
||||
import net.psforever.services.vehicle.{TurretMessage, VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
|
||||
object WeaponTurrets {
|
||||
|
|
@ -44,7 +44,7 @@ object WeaponTurrets {
|
|||
* @see `TurretUpgrade`
|
||||
* @see `TurretUpgrader.AddTask`
|
||||
* @see `TurretUpgrader.ClearSpecific`
|
||||
* @see `VehicleServiceMessage.TurretUpgrade`
|
||||
* @see `TurretMessage`
|
||||
* @param target the facility turret being upgraded
|
||||
* @param upgrade the upgrade being applied to the turret (usually, it's weapon system)
|
||||
*/
|
||||
|
|
@ -52,8 +52,8 @@ object WeaponTurrets {
|
|||
log.info(s"Manned wall turret weapon being converted to $upgrade")
|
||||
val zone = target.Zone
|
||||
val events = zone.VehicleEvents
|
||||
events ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.ClearSpecific(List(target), zone))
|
||||
events ! VehicleServiceMessage.TurretUpgrade(TurretUpgrader.AddTask(target, zone, upgrade))
|
||||
events ! TurretMessage(TurretUpgrader.ClearSpecific(List(target), zone))
|
||||
events ! TurretMessage(TurretUpgrader.AddTask(target, zone, upgrade))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -106,7 +106,8 @@ object WeaponTurrets {
|
|||
player.VehicleSeated = None
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.KickPassenger(player.GUID, 4, unk2 = false, target.GUID)
|
||||
player.GUID,
|
||||
VehicleAction.KickPassenger(4, unk2 = false, target.GUID)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import net.psforever.objects.serverobject.structures.WarpGate
|
|||
import net.psforever.objects.serverobject.transfer.{TransferBehavior, TransferContainer}
|
||||
import net.psforever.objects.{NtuContainer, _}
|
||||
import net.psforever.types.DriveState
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import akka.actor.typed.scaladsl.adapter._
|
||||
import net.psforever.objects.serverobject.transfer.TransferContainer.TransferMaterial
|
||||
|
|
@ -35,7 +34,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
|||
val zone = obj.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vehicle.GUID, 52, 1L)
|
||||
VehicleAction.PlanetsideAttribute(vehicle.GUID, 52, 1L)
|
||||
) // panel glow on
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +44,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
|||
val zone = obj.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vehicle.GUID, 49, 1L)
|
||||
VehicleAction.PlanetsideAttribute(vehicle.GUID, 49, 1L)
|
||||
) // orb particle effect on
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +53,7 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
|||
val display = vehicle.NtuCapacitorScaled.toLong
|
||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
vehicle.Actor.toString,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vehicle.GUID, 45, display)
|
||||
VehicleAction.PlanetsideAttribute(vehicle.GUID, 45, display)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -160,16 +159,16 @@ trait AntTransferBehavior extends TransferBehavior with NtuStorageBehavior {
|
|||
if (transferEvent == TransferBehavior.Event.Charging) {
|
||||
events ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vguid, 52, 0L)
|
||||
VehicleAction.PlanetsideAttribute(vguid, 52, 0L)
|
||||
) // panel glow off
|
||||
events ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vguid, 49, 0L)
|
||||
VehicleAction.PlanetsideAttribute(vguid, 49, 0L)
|
||||
) // orb particle effect off
|
||||
} else if (transferEvent == TransferBehavior.Event.Discharging) {
|
||||
events ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vguid, 52, 0L)
|
||||
VehicleAction.PlanetsideAttribute(vguid, 52, 0L)
|
||||
) // panel glow off
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ trait BfrTransferBehavior
|
|||
case equip: NtuSiphon =>
|
||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
vehicle.Actor.toString,
|
||||
VehicleAction.InventoryState2(PlanetSideGUID(0), equip.storageGUID, siphon.GUID, siphon.NtuCapacitor.toInt)
|
||||
VehicleAction.InventoryState2(equip.storageGUID, siphon.GUID, siphon.NtuCapacitor.toInt)
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -207,11 +207,11 @@ object CarrierBehavior {
|
|||
cargo.Velocity = None
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${cargo.Actor}",
|
||||
VehicleAction.SendResponse(PlanetSideGUID(0), PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health))
|
||||
VehicleAction.SendResponse(PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health))
|
||||
)
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${cargo.Actor}",
|
||||
VehicleAction.SendResponse(PlanetSideGUID(0), PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields))
|
||||
VehicleAction.SendResponse(PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields))
|
||||
)
|
||||
CargoMountBehaviorForAll(carrier, cargo, mountPoint)
|
||||
zone.actor ! ZoneActor.RemoveFromBlockMap(cargo)
|
||||
|
|
@ -225,9 +225,8 @@ object CarrierBehavior {
|
|||
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.SendResponse(
|
||||
cargoDriverGUID,
|
||||
CargoMountPointStatusMessage(
|
||||
cargoDriverGUID,
|
||||
VehicleAction.SendResponse(CargoMountPointStatusMessage(
|
||||
carrierGUID,
|
||||
PlanetSideGUID(0),
|
||||
PlanetSideGUID(0),
|
||||
|
|
@ -235,8 +234,7 @@ object CarrierBehavior {
|
|||
mountPoint,
|
||||
CargoStatus.Empty,
|
||||
0
|
||||
)
|
||||
)
|
||||
))
|
||||
)
|
||||
false
|
||||
//sending packet to the cargo vehicle's client results in player being lock in own vehicle
|
||||
|
|
@ -327,9 +325,8 @@ object CarrierBehavior {
|
|||
val cargoDriverGUID = cargo.Seats(0).occupant.get.GUID
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.SendResponse(
|
||||
cargoDriverGUID,
|
||||
CargoMountPointStatusMessage(
|
||||
cargoDriverGUID,
|
||||
VehicleAction.SendResponse(CargoMountPointStatusMessage(
|
||||
carrierGUID,
|
||||
PlanetSideGUID(0),
|
||||
PlanetSideGUID(0),
|
||||
|
|
@ -337,8 +334,7 @@ object CarrierBehavior {
|
|||
mountPoint,
|
||||
CargoStatus.Empty,
|
||||
0
|
||||
)
|
||||
)
|
||||
))
|
||||
)
|
||||
false
|
||||
//sending packet to the cargo vehicle's client results in player being lock in own vehicle
|
||||
|
|
@ -453,11 +449,11 @@ object CarrierBehavior {
|
|||
val cargoActor = cargo.Actor
|
||||
events ! VehicleServiceMessage(
|
||||
s"$cargoActor",
|
||||
VehicleAction.SendResponse(GUID0, PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health))
|
||||
VehicleAction.SendResponse(PlanetsideAttributeMessage(cargoGUID, 0, cargo.Health))
|
||||
)
|
||||
events ! VehicleServiceMessage(
|
||||
s"$cargoActor",
|
||||
VehicleAction.SendResponse(GUID0, PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields))
|
||||
VehicleAction.SendResponse(PlanetsideAttributeMessage(cargoGUID, cargo.Definition.shieldUiAttribute, cargo.Shields))
|
||||
)
|
||||
zone.actor ! ZoneActor.AddToBlockMap(cargo, carrier.Position)
|
||||
if (carrier.isFlying) {
|
||||
|
|
@ -467,9 +463,9 @@ object CarrierBehavior {
|
|||
val detachCargoMsg = ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition - Vector3.z(1), rotation)
|
||||
val resetCargoMsg =
|
||||
CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0)
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, ejectCargoMsg))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, detachCargoMsg))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, resetCargoMsg))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(ejectCargoMsg))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(detachCargoMsg))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(resetCargoMsg))
|
||||
log.debug(s"HandleVehicleCargoDismount: eject - $ejectCargoMsg, detach - $detachCargoMsg")
|
||||
if (driverOpt.isEmpty) {
|
||||
//TODO cargo should drop like a rock like normal; until then, deconstruct it
|
||||
|
|
@ -482,18 +478,18 @@ object CarrierBehavior {
|
|||
CargoMountPointStatusMessage(carrierGUID, GUID0, cargoGUID, GUID0, mountPoint, CargoStatus.InProgress, 0)
|
||||
val cargoDetachMessage =
|
||||
ObjectDetachMessage(carrierGUID, cargoGUID, cargoHoldPosition + Vector3.z(1f), rotation)
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, cargoStatusMessage))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, cargoDetachMessage))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(cargoStatusMessage))
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(cargoDetachMessage))
|
||||
driverOpt match {
|
||||
case Some(driver) =>
|
||||
events ! VehicleServiceMessage(
|
||||
s"${driver.Name}",
|
||||
VehicleAction.KickCargo(GUID0, cargo, cargo.Definition.AutoPilotSpeed2, 2500)
|
||||
VehicleAction.KickCargo(cargo, cargo.Definition.AutoPilotSpeed2, 2500)
|
||||
)
|
||||
case None =>
|
||||
val resetCargoMsg =
|
||||
CargoMountPointStatusMessage(carrierGUID, GUID0, GUID0, cargoGUID, mountPoint, CargoStatus.Empty, 0)
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(GUID0, resetCargoMsg)) //lazy
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.SendResponse(resetCargoMsg)) //lazy
|
||||
//TODO cargo should back out like normal; until then, deconstruct it
|
||||
cargoActor ! Vehicle.Deconstruct()
|
||||
}
|
||||
|
|
@ -609,8 +605,8 @@ object CarrierBehavior {
|
|||
attachMessage: ObjectAttachMessage,
|
||||
mountPointStatusMessage: CargoMountPointStatusMessage
|
||||
): Unit = {
|
||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, VehicleAction.SendResponse(exclude, attachMessage))
|
||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, VehicleAction.SendResponse(exclude, mountPointStatusMessage))
|
||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, exclude, VehicleAction.SendResponse(attachMessage))
|
||||
zone.VehicleEvents ! VehicleServiceMessage(zone.id, exclude, VehicleAction.SendResponse(mountPointStatusMessage))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -632,11 +628,11 @@ object CarrierBehavior {
|
|||
val msgs @ (attachMessage, mountPointStatusMessage) = CargoMountMessages(carrier, cargo, mountPoint)
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, attachMessage)
|
||||
VehicleAction.SendResponse(attachMessage)
|
||||
)
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, mountPointStatusMessage)
|
||||
VehicleAction.SendResponse(mountPointStatusMessage)
|
||||
)
|
||||
msgs
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
package net.psforever.objects.vehicles.control
|
||||
|
||||
import net.psforever.objects._
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.DriveState
|
||||
|
||||
|
|
@ -29,8 +28,8 @@ class AmsControl(vehicle: Vehicle)
|
|||
case None => ""
|
||||
}
|
||||
val events = zone.VehicleEvents
|
||||
events ! VehicleServiceMessage.AMSDeploymentChange(zone)
|
||||
events ! VehicleServiceMessage(driverChannel, VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vehicle.GUID, 81, 1))
|
||||
events ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
||||
events ! VehicleServiceMessage(driverChannel, VehicleAction.PlanetsideAttribute(vehicle.GUID, 81, 1))
|
||||
case _ => ;
|
||||
}
|
||||
}
|
||||
|
|
@ -49,8 +48,8 @@ class AmsControl(vehicle: Vehicle)
|
|||
case None => ""
|
||||
}
|
||||
val events = zone.VehicleEvents
|
||||
events ! VehicleServiceMessage.AMSDeploymentChange(zone)
|
||||
events ! VehicleServiceMessage(driverChannel, VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vehicle.GUID, 81, 0))
|
||||
events ! VehicleServiceMessage(zone.id, VehicleAction.AMSDeploymentChange(zone))
|
||||
events ! VehicleServiceMessage(driverChannel, VehicleAction.PlanetsideAttribute(vehicle.GUID, 81, 0))
|
||||
case _ => ;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,15 +54,12 @@ class ApcControl(vehicle: Vehicle)
|
|||
//cause the emp
|
||||
events ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.SendResponse(
|
||||
GUID0,
|
||||
TriggerEffectMessage(
|
||||
VehicleAction.SendResponse(TriggerEffectMessage(
|
||||
GUID0,
|
||||
s"apc_explosion_emp_${faction.toString.toLowerCase}",
|
||||
None,
|
||||
Some(TriggeredEffectLocation(pos, obj.Orientation))
|
||||
)
|
||||
)
|
||||
))
|
||||
)
|
||||
//resolve what targets are affected by the emp
|
||||
Zone.serverSideDamage(
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ class BfrControl(vehicle: Vehicle)
|
|||
val zone = vehicle.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${zone.id}",
|
||||
VehicleAction.SendResponse(PlanetSideGUID(0), GenericObjectActionMessage(vehicle.GUID, 45))
|
||||
VehicleAction.SendResponse(GenericObjectActionMessage(vehicle.GUID, 45))
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -285,7 +285,7 @@ class BfrControl(vehicle: Vehicle)
|
|||
val zone = vehicle.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${zone.id}",
|
||||
VehicleAction.SendResponse(PlanetSideGUID(0), GenericObjectActionMessage(vehicle.GUID, 44))
|
||||
VehicleAction.SendResponse(GenericObjectActionMessage(vehicle.GUID, 44))
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -336,7 +336,7 @@ class BfrControl(vehicle: Vehicle)
|
|||
val shields = vehicle.Shields
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, vguid, vehicle.Definition.shieldUiAttribute, shields)
|
||||
VehicleAction.PlanetsideAttribute(vguid, vehicle.Definition.shieldUiAttribute, shields)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -416,7 +416,8 @@ class BfrControl(vehicle: Vehicle)
|
|||
val zone = vehicle.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.GenericObjectAction(doNotSendTo, useThisGuid, action)
|
||||
doNotSendTo,
|
||||
VehicleAction.GenericObjectAction(useThisGuid, action)
|
||||
)
|
||||
case _ => ()
|
||||
}
|
||||
|
|
@ -565,15 +566,12 @@ class BfrControl(vehicle: Vehicle)
|
|||
//TODO this is the apc emp effect; is there an ntu siphon emp effect?
|
||||
events ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.SendResponse(
|
||||
GUID0,
|
||||
TriggerEffectMessage(
|
||||
VehicleAction.SendResponse(TriggerEffectMessage(
|
||||
GUID0,
|
||||
s"apc_explosion_emp_${faction.toString.toLowerCase}",
|
||||
None,
|
||||
Some(TriggeredEffectLocation(pos, obj.Orientation))
|
||||
)
|
||||
)
|
||||
))
|
||||
)
|
||||
//resolve what targets are affected by the emp
|
||||
Zone.serverSideDamage(
|
||||
|
|
@ -590,10 +588,7 @@ class BfrControl(vehicle: Vehicle)
|
|||
//it does not even dispatch the packet before that, making it rare if this precautionary message is seen
|
||||
events ! VehicleServiceMessage(
|
||||
obj.Seats(0).occupant.get.Name,
|
||||
VehicleAction.SendResponse(
|
||||
GUID0,
|
||||
ChatMsg(ChatMessageType.UNK_225, wideContents = false, "", s"@TimeUntilNextUse^${30000 - elapsedWait}", None)
|
||||
)
|
||||
VehicleAction.SendResponse(ChatMsg(ChatMessageType.UNK_225, wideContents = false, "", s"@TimeUntilNextUse^${30000 - elapsedWait}", None))
|
||||
)
|
||||
}
|
||||
case _ => ()
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package net.psforever.objects.vehicles.control
|
|||
|
||||
import akka.actor.{Actor, Cancellable}
|
||||
import net.psforever.objects._
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
|
|
@ -61,7 +60,7 @@ trait VehicleCapacitance {
|
|||
val obj = CapacitanceObject
|
||||
obj.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
self.toString(),
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, obj.GUID, 113, obj.Capacitor)
|
||||
VehicleAction.PlanetsideAttribute(obj.GUID, 113, obj.Capacitor)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
})
|
||||
.flatMap { _.getMessage(vehicle) }
|
||||
.foreach { pkt =>
|
||||
events ! VehicleServiceMessage(toChannel, VehicleAction.SendResponse(guid0, pkt))
|
||||
events ! VehicleServiceMessage(toChannel, VehicleAction.SendResponse(pkt))
|
||||
}
|
||||
|
||||
case FactionAffinity.ConvertFactionAffinity(faction) =>
|
||||
|
|
@ -332,7 +332,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
val zone = vehicle.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.UnloadVehicle(Service.defaultPlayerGUID, vehicle, vehicle.GUID)
|
||||
VehicleAction.UnloadVehicle(vehicle, vehicle.GUID)
|
||||
)
|
||||
zone.Transport.tell(Zone.Vehicle.Despawn(vehicle), zone.Transport)
|
||||
//notify target spawner that the vehicle has despawned if this is a VR Shooting Range zone
|
||||
|
|
@ -451,7 +451,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
zone.actor ! ZoneActor.AddToBlockMap(player, vehicle.Position)
|
||||
}
|
||||
if (player.HasGUID) {
|
||||
events ! VehicleServiceMessage(zoneId, VehicleAction.KickPassenger(player.GUID, 4, unk2 = true, guid))
|
||||
events ! VehicleServiceMessage(zoneId, player.GUID, VehicleAction.KickPassenger(4, unk2 = true, guid))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -535,7 +535,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
val zone = ContainerObject.Zone
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
self.toString,
|
||||
VehicleAction.UnstowEquipment(Service.defaultPlayerGUID, item.GUID)
|
||||
VehicleAction.UnstowEquipment(item.GUID)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -550,22 +550,19 @@ class VehicleControl(vehicle: Vehicle)
|
|||
events ! VehicleServiceMessage(
|
||||
//TODO when a new weapon, the equipment slot ui goes blank, but the weapon functions; remount vehicle to correct it
|
||||
if (obj.VisibleSlots.contains(slot)) zone.id else channel,
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
OCM.detailed(item, ObjectCreateMessageParent(oguid, slot))
|
||||
)
|
||||
VehicleAction.SendResponse(OCM.detailed(item, ObjectCreateMessageParent(oguid, slot)))
|
||||
)
|
||||
item match {
|
||||
case box: AmmoBox =>
|
||||
events ! VehicleServiceMessage(
|
||||
channel,
|
||||
VehicleAction.InventoryState2(Service.defaultPlayerGUID, iguid, oguid, box.Capacity)
|
||||
VehicleAction.InventoryState2(iguid, oguid, box.Capacity)
|
||||
)
|
||||
case weapon: Tool =>
|
||||
weapon.AmmoSlots.map { slot => slot.Box }.foreach { box =>
|
||||
events ! VehicleServiceMessage(
|
||||
channel,
|
||||
VehicleAction.InventoryState2(Service.defaultPlayerGUID, box.GUID, iguid, box.Capacity)
|
||||
VehicleAction.InventoryState2(box.GUID, iguid, box.Capacity)
|
||||
)
|
||||
}
|
||||
case _ => ()
|
||||
|
|
@ -641,7 +638,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
vehicle.Shields = vehicle.Shields + amount
|
||||
vehicle.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
s"${vehicle.Actor}",
|
||||
VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), vehicle.GUID, vehicle.Definition.shieldUiAttribute, vehicle.Shields)
|
||||
VehicleAction.PlanetsideAttribute(vehicle.GUID, vehicle.Definition.shieldUiAttribute, vehicle.Shields)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -696,7 +693,8 @@ class VehicleControl(vehicle: Vehicle)
|
|||
log.info(s"$dname changed ${vehicle.Definition.Name}'s access permission $group to $allow")
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.SeatPermissions(dguid, vguid, attribute, value)
|
||||
dguid,
|
||||
VehicleAction.SeatPermissions(vguid, attribute, value)
|
||||
)
|
||||
//kick players who should not be seated in the vehicle due to permission changes
|
||||
if (allow == VehicleLockState.Locked) { //TODO only important permission atm
|
||||
|
|
@ -709,7 +707,8 @@ class VehicleControl(vehicle: Vehicle)
|
|||
tplayer.VehicleSeated = None
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, 4, unk2 = false, vguid)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(4, unk2 = false, vguid)
|
||||
)
|
||||
}
|
||||
case _ => () // No player seated
|
||||
|
|
@ -761,7 +760,7 @@ class VehicleControl(vehicle: Vehicle)
|
|||
messages.foreach { pkt =>
|
||||
events ! VehicleServiceMessage(
|
||||
zoneid,
|
||||
VehicleAction.SendResponse(guid0, pkt)
|
||||
VehicleAction.SendResponse(pkt)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -700,10 +700,7 @@ object MapEnvironment {
|
|||
case v: Vehicle =>
|
||||
v.Zone.VehicleEvents ! VehicleServiceMessage(
|
||||
v.Actor.toString(),
|
||||
VehicleAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
OffshoreVehicleMessage(v.Seats(0).occupant.get.GUID, v.GUID, msg)
|
||||
)
|
||||
VehicleAction.SendResponse(OffshoreVehicleMessage(v.Seats(0).occupant.get.GUID, v.GUID, msg))
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import net.psforever.objects.serverobject.structures.WarpGate
|
|||
import net.psforever.objects.vital.InGameHistory
|
||||
import net.psforever.objects.{Default, GlobalDefinitions, Vehicle}
|
||||
import net.psforever.packet.game.ChatMsg
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.types.{ChatMessageType, DriveState, PlanetSideEmpire, Vector3}
|
||||
|
||||
|
|
@ -206,7 +205,7 @@ object ZoneVehicleActor {
|
|||
msgOpt.foreach { msg =>
|
||||
zone.VehicleEvents ! VehicleServiceMessage(
|
||||
vehicle.Seats.headOption.flatMap(_._2.occupant).map(_.Name).getOrElse(""),
|
||||
VehicleAction.SendResponse(Service.defaultPlayerGUID, ChatMsg(ChatMessageType.UNK_227, msg))
|
||||
VehicleAction.SendResponse(ChatMsg(ChatMessageType.UNK_227, msg))
|
||||
)
|
||||
}
|
||||
msgOpt.isDefined
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class AvatarService(zone: Zone)
|
|||
busName = "Avatar",
|
||||
eventSupportServices = List(CorpseRemovalSupport, ItemRemoverSupport)
|
||||
) {
|
||||
protected def compose(msg: GenericMessageEnvelope): AvatarServiceResponse = {
|
||||
protected def composeResponseEnvelope(msg: GenericMessageEnvelope): AvatarServiceResponse = {
|
||||
AvatarServiceResponse(formatChannelOnBusName(msg.channel), msg.filter, msg.msg.response())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,18 +22,18 @@ abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: Stri
|
|||
extends Actor {
|
||||
protected lazy val log: Logger = org.log4s.getLogger(getClass.getSimpleName)
|
||||
|
||||
protected val eventBus: GenericEventBus[OUT] = setupEventBus()
|
||||
protected val eventBus: GenericEventBus[OUT] = new GenericEventBus[OUT]
|
||||
|
||||
def BusName: String = busName
|
||||
|
||||
def commonJoinBehavior: Receive = {
|
||||
private def commonJoinBehavior: Receive = {
|
||||
case Service.Join(channel) =>
|
||||
val path = formatChannelOnBusName(channel)
|
||||
val who = sender()
|
||||
eventBus.subscribe(who, path)
|
||||
}
|
||||
|
||||
def commonLeaveBehavior: Receive = {
|
||||
private def commonLeaveBehavior: Receive = {
|
||||
case Service.Leave(None) =>
|
||||
eventBus.unsubscribe(sender())
|
||||
|
||||
|
|
@ -54,25 +54,11 @@ abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: Stri
|
|||
log.warn(s"Unhandled message $msg from ${sender()}")
|
||||
}
|
||||
|
||||
private def handleMessage(msg: GenericMessageEnvelope): Unit = {
|
||||
eventBus.publish(compose(msg))
|
||||
protected def handleMessage(msg: GenericMessageEnvelope): Unit = {
|
||||
eventBus.publish(composeResponseEnvelope(msg))
|
||||
}
|
||||
|
||||
protected def setupEventBus(): GenericEventBus[OUT] = {
|
||||
new GenericEventBus[OUT]
|
||||
}
|
||||
protected def composeResponseEnvelope(@unused msg: GenericMessageEnvelope): OUT
|
||||
|
||||
protected def compose(@unused msg: GenericMessageEnvelope): OUT
|
||||
|
||||
def formatChannelOnBusName(channel: String): String = GenericEventService.BusOnChannelFormat(busName)(channel)
|
||||
}
|
||||
|
||||
object GenericEventService {
|
||||
final def BusOnChannelFormat(busName: String)(channel: String): String = {
|
||||
if (channel.trim.isEmpty) {
|
||||
s"/$busName"
|
||||
} else {
|
||||
s"/$channel/$busName"
|
||||
}
|
||||
}
|
||||
protected def formatChannelOnBusName(channel: String): String = s"/$channel/$busName"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package net.psforever.services.base
|
|||
|
||||
import akka.actor.{ActorContext, ActorRef}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.base.bus.{GenericEventBus, GenericEventBusResponseToSupport, GenericEventBusWithSupport}
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
|
||||
import scala.annotation.unused
|
||||
|
|
@ -49,20 +48,15 @@ abstract class GenericEventServiceWithSupport[OUT <: GenericResponseEnvelope]
|
|||
}
|
||||
}
|
||||
|
||||
override protected def setupEventBus(): GenericEventBus[OUT] = {
|
||||
new GenericEventBus[OUT] with GenericEventBusWithSupport[OUT] {
|
||||
override def publish(event: OUT): Unit = publishingWithSupport(event)
|
||||
|
||||
override def forwardToExternalSupport(msg: GenericEventBusResponseToSupport): Unit = {
|
||||
msg match {
|
||||
case supportMessage: GenericMessageToSupportEnvelope => forwardToExternal(supportMessage)
|
||||
case _ => ()
|
||||
}
|
||||
}
|
||||
|
||||
private def forwardToExternal(msg: GenericMessageToSupportEnvelope): Unit = {
|
||||
override protected def handleMessage(event: GenericMessageEnvelope): Unit = {
|
||||
event match {
|
||||
case msg: GenericMessageToSupportEnvelopeOnly =>
|
||||
forwardToSupport(msg)
|
||||
}
|
||||
case msg: GenericMessageToSupportEnvelope =>
|
||||
forwardToSupport(msg)
|
||||
eventBus.publish(composeResponseEnvelope(event))
|
||||
case _ =>
|
||||
eventBus.publish(composeResponseEnvelope(event))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,10 @@ class GenericEventBus[A <: GenericEventBusResponse]
|
|||
subscriber ! event
|
||||
}
|
||||
|
||||
override def publish(event: Event): Unit = {
|
||||
truePublish(event)
|
||||
}
|
||||
|
||||
def truePublish(event: Event): Unit = {
|
||||
super[SubchannelClassification].publish(event)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ trait GenericEventBusResponseToSupportOnly
|
|||
|
||||
trait GenericEventBusWithSupport[T <: GenericEventBusResponse] {
|
||||
bus: GenericEventBus[T] =>
|
||||
def publishingWithSupport(event: T): Unit = {
|
||||
def handleMessageWithSupport(event: T): Unit = {
|
||||
event match {
|
||||
case msg: GenericEventBusResponseToSupportOnly =>
|
||||
forwardToExternalSupport(msg)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,15 @@ import net.psforever.services.base.{GenericEventService, GenericMessageEnvelope}
|
|||
|
||||
class GalaxyService
|
||||
extends GenericEventService[GalaxyServiceResponse](busName = "Galaxy") {
|
||||
protected def compose(msg: GenericMessageEnvelope): GalaxyServiceResponse = {
|
||||
protected def composeResponseEnvelope(msg: GenericMessageEnvelope): GalaxyServiceResponse = {
|
||||
GalaxyServiceResponse(formatChannelOnBusName(msg.channel), msg.msg.response())
|
||||
}
|
||||
|
||||
override protected def formatChannelOnBusName(channel: String): String = {
|
||||
if (channel.trim.isEmpty) {
|
||||
s"/$BusName"
|
||||
} else {
|
||||
s"/$channel/$BusName"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ class LocalService(zone: Zone)
|
|||
busName = "Local",
|
||||
eventSupportServices = List(DoorCloserSupport, HackClearSupport, HackCaptureSupport, CaptureFlagSupport(zone))
|
||||
) {
|
||||
protected def compose(msg: GenericMessageEnvelope): LocalServiceResponse = {
|
||||
protected def composeResponseEnvelope(msg: GenericMessageEnvelope): LocalServiceResponse = {
|
||||
LocalServiceResponse(formatChannelOnBusName(msg.channel), msg.filter, msg.msg.response())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,196 @@
|
|||
// Copyright (c) 2017-2026 PSForever
|
||||
package net.psforever.services.vehicle
|
||||
|
||||
import net.psforever.objects.{PlanetSideGameObject, Vehicle}
|
||||
import net.psforever.objects.equipment.Equipment
|
||||
import net.psforever.objects.inventory.InventoryItem
|
||||
import net.psforever.objects.serverobject.tube.SpawnTube
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.PlanetSideGamePacket
|
||||
import net.psforever.packet.game.ObjectCreateMessage
|
||||
import net.psforever.packet.game.objectcreate.{ConstructorData, ObjectCreateMessageParent}
|
||||
import net.psforever.services.base.{EventMessage, EventResponse, SelfResponseMessage}
|
||||
import net.psforever.types.{BailType, DriveState, PlanetSideGUID, Vector3}
|
||||
|
||||
object VehicleAction {
|
||||
trait Action extends EventMessage {
|
||||
def response(): EventResponse = null
|
||||
}
|
||||
|
||||
final case class ChangeAmmo(
|
||||
weapon_guid: PlanetSideGUID,
|
||||
weapon_slot: Int,
|
||||
old_ammo_guid: PlanetSideGUID,
|
||||
ammo_id: Int,
|
||||
ammo_guid: PlanetSideGUID,
|
||||
ammo_data: ConstructorData
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class ChangeFireState_Start(weapon_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class ChangeFireState_Stop(weapon_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class ChildObjectState(object_guid: PlanetSideGUID, pitch: Float, yaw: Float) extends SelfResponseMessage
|
||||
|
||||
final case class ConcealPlayer(player_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class DeployRequest(
|
||||
object_guid: PlanetSideGUID,
|
||||
state: DriveState.Value,
|
||||
unk1: Int,
|
||||
unk2: Boolean,
|
||||
pos: Vector3
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class DismountVehicle(bailType: BailType.Value, unk2: Boolean) extends SelfResponseMessage
|
||||
|
||||
final case class EquipmentCreatedInSlot(pkt: ObjectCreateMessage) extends EventResponse
|
||||
|
||||
final case class EquipmentInSlot(target_guid: PlanetSideGUID, slot: Int, equipment: Equipment) extends EventMessage {
|
||||
override def response(): EventResponse = {
|
||||
val definition = equipment.Definition
|
||||
val pkt = ObjectCreateMessage(
|
||||
definition.ObjectId,
|
||||
equipment.GUID,
|
||||
ObjectCreateMessageParent(target_guid, slot),
|
||||
definition.Packet.ConstructorData(equipment).get
|
||||
)
|
||||
ObjectCreateMessageParent(target_guid, slot)
|
||||
VehicleAction.EquipmentCreatedInSlot(pkt)
|
||||
}
|
||||
}
|
||||
|
||||
final case class FrameVehicleState(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
unk1: Int,
|
||||
pos: Vector3,
|
||||
orient: Vector3,
|
||||
vel: Option[Vector3],
|
||||
unk2: Boolean,
|
||||
unk3: Int,
|
||||
unk4: Int,
|
||||
is_crouched: Boolean,
|
||||
unk6: Boolean,
|
||||
unk7: Boolean,
|
||||
unk8: Int,
|
||||
unk9: Long,
|
||||
unkA: Long
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class GenericObjectAction(guid: PlanetSideGUID, action: Int) extends SelfResponseMessage
|
||||
|
||||
final case class HitHint(source_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class InventoryState(
|
||||
obj: PlanetSideGameObject,
|
||||
parent_guid: PlanetSideGUID,
|
||||
start: Int,
|
||||
con_data: ConstructorData
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class InventoryState2(obj_guid: PlanetSideGUID, parent_guid: PlanetSideGUID, value: Int) extends SelfResponseMessage
|
||||
|
||||
final case class KickPassenger(unk1: Int, unk2: Boolean, vehicle_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class LoadVehicle(
|
||||
vehicle: Vehicle,
|
||||
vtype: Int,
|
||||
vguid: PlanetSideGUID,
|
||||
vdata: ConstructorData
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class MountVehicle(object_guid: PlanetSideGUID, seat: Int) extends SelfResponseMessage
|
||||
|
||||
final case class ObjectDelete(guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class Ownership(vehicle_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class LoseOwnership(owner_guid: PlanetSideGUID, vehicle_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class PlanetsideAttribute(
|
||||
target_guid: PlanetSideGUID,
|
||||
attribute_type: Int,
|
||||
attribute_value: Long
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class Reload(weapon_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class RevealPlayer(player_guid: PlanetSideGUID) extends EventResponse
|
||||
|
||||
final case class SeatPermissions(vehicle_guid: PlanetSideGUID, seat_group: Int, permission: Long) extends SelfResponseMessage
|
||||
|
||||
final case class StowCreatedEquipment(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
slot: Int,
|
||||
itype: Int,
|
||||
iguid: PlanetSideGUID,
|
||||
idata: ConstructorData
|
||||
) extends EventResponse
|
||||
|
||||
final case class StowEquipment(vehicle_guid: PlanetSideGUID, slot: Int, item: Equipment) extends SelfResponseMessage
|
||||
|
||||
final case class UnloadVehicle(vehicle: Vehicle, vehicle_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class UnstowEquipment(item_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class WeaponDryFire(weapon_guid: PlanetSideGUID) extends SelfResponseMessage
|
||||
|
||||
final case class VehicleState(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
unk1: Int,
|
||||
pos: Vector3,
|
||||
ang: Vector3,
|
||||
vel: Option[Vector3],
|
||||
unk2: Option[Int],
|
||||
unk3: Int,
|
||||
unk4: Int,
|
||||
wheel_direction: Int,
|
||||
unk5: Boolean,
|
||||
unk6: Boolean
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class SendResponse(msg: PlanetSideGamePacket) extends SelfResponseMessage
|
||||
|
||||
final case class UpdateAmsSpawnList(list: List[SpawnTube]) extends EventResponse
|
||||
|
||||
final case class UpdateAmsSpawnPoint(zone: Zone) extends EventMessage {
|
||||
override def response(): EventResponse = {
|
||||
VehicleAction.UpdateAmsSpawnList(AmsSpawnPoints(zone))
|
||||
}
|
||||
}
|
||||
|
||||
final case class AMSDeploymentChange(zone: Zone) extends EventMessage {
|
||||
override def response(): EventResponse = {
|
||||
VehicleAction.UpdateAmsSpawnList(AmsSpawnPoints(zone))
|
||||
}
|
||||
}
|
||||
|
||||
final case class TransferPassengerChannel(
|
||||
temp_channel: String,
|
||||
new_channel: String,
|
||||
vehicle: Vehicle,
|
||||
vehicle_to_delete: PlanetSideGUID
|
||||
) extends SelfResponseMessage
|
||||
|
||||
final case class KickCargo(cargo: Vehicle, speed: Int, delay: Long) extends SelfResponseMessage
|
||||
|
||||
final case class ChangeLoadout(
|
||||
target_guid: PlanetSideGUID,
|
||||
removed_weapons: List[(Equipment, PlanetSideGUID)],
|
||||
new_weapons: List[InventoryItem],
|
||||
old_inventory: List[(Equipment, PlanetSideGUID)],
|
||||
new_inventory: List[InventoryItem]
|
||||
) extends SelfResponseMessage
|
||||
|
||||
import net.psforever.objects.serverobject.tube.SpawnTube
|
||||
private def AmsSpawnPoints(zone: Zone): List[SpawnTube] = {
|
||||
import net.psforever.objects.vehicles.UtilityType
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
zone.Vehicles
|
||||
.filter(veh =>
|
||||
veh.Health > 0 && veh.Definition == GlobalDefinitions.ams && veh.DeploymentState == DriveState.Deployed
|
||||
)
|
||||
.flatMap(veh => veh.Utilities.values.filter(util => util.UtilType == UtilityType.ams_respawn_tube))
|
||||
.map(util => util().asInstanceOf[SpawnTube])
|
||||
}
|
||||
}
|
||||
|
|
@ -1,443 +1,25 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package net.psforever.services.vehicle
|
||||
|
||||
import akka.actor.{Actor, ActorRef, Props}
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
||||
import akka.actor.{ActorContext, ActorRef, Props}
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.game.ObjectCreateMessage
|
||||
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
|
||||
import net.psforever.services.base.{EventServiceSupport, GenericEventServiceWithSupport, GenericMessageEnvelope}
|
||||
import net.psforever.services.vehicle.support.TurretUpgrader
|
||||
import net.psforever.types.DriveState
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.base.bus.GenericEventBus
|
||||
|
||||
class VehicleService(zone: Zone) extends Actor {
|
||||
private val turretUpgrade: ActorRef = context.actorOf(Props[TurretUpgrader](), s"${zone.id}-turret-upgrade-agent")
|
||||
private[this] val log = org.log4s.getLogger
|
||||
|
||||
val VehicleEvents = new GenericEventBus[VehicleServiceResponse]
|
||||
|
||||
def receive: Receive = {
|
||||
case Service.Join(channel) =>
|
||||
val path = s"/$channel/Vehicle"
|
||||
VehicleEvents.subscribe(sender(), path)
|
||||
|
||||
case Service.Leave(None) =>
|
||||
VehicleEvents.unsubscribe(sender())
|
||||
|
||||
case Service.Leave(Some(channel)) =>
|
||||
val path = s"/$channel/Vehicle"
|
||||
VehicleEvents.unsubscribe(sender(), path)
|
||||
|
||||
case Service.LeaveAll() =>
|
||||
VehicleEvents.unsubscribe(sender())
|
||||
|
||||
case VehicleServiceMessage(forChannel, action) =>
|
||||
action match {
|
||||
case VehicleAction.ChangeAmmo(player_guid, weapon_guid, weapon_slot, old_ammo_guid, ammo_id, ammo_guid, ammo_data) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.ChangeAmmo(weapon_guid, weapon_slot, old_ammo_guid, ammo_id, ammo_guid, ammo_data)
|
||||
)
|
||||
)
|
||||
case VehicleAction.ChangeFireState_Start(player_guid, weapon_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.ChangeFireState_Start(weapon_guid)
|
||||
)
|
||||
)
|
||||
case VehicleAction.ChangeFireState_Stop(player_guid, weapon_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.ChangeFireState_Stop(weapon_guid))
|
||||
)
|
||||
case VehicleAction.ChildObjectState(player_guid, object_guid, pitch, yaw) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.ChildObjectState(object_guid, pitch, yaw)
|
||||
)
|
||||
)
|
||||
case VehicleAction.DeployRequest(player_guid, object_guid, state, unk1, unk2, pos) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.DeployRequest(object_guid, state, unk1, unk2, pos)
|
||||
)
|
||||
)
|
||||
case VehicleAction.DismountVehicle(player_guid, bailType, unk2) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.DismountVehicle(bailType, unk2)
|
||||
)
|
||||
)
|
||||
case VehicleAction.EquipmentInSlot(player_guid, target_guid, slot, equipment) =>
|
||||
val definition = equipment.Definition
|
||||
val pkt = ObjectCreateMessage(
|
||||
definition.ObjectId,
|
||||
equipment.GUID,
|
||||
ObjectCreateMessageParent(target_guid, slot),
|
||||
definition.Packet.ConstructorData(equipment).get
|
||||
)
|
||||
ObjectCreateMessageParent(target_guid, slot)
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.EquipmentInSlot(pkt))
|
||||
)
|
||||
case VehicleAction.FrameVehicleState(
|
||||
player_guid,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
orient,
|
||||
vel,
|
||||
unk2,
|
||||
unk3,
|
||||
unk4,
|
||||
is_crouched,
|
||||
unk6,
|
||||
unk7,
|
||||
unk8,
|
||||
unk9,
|
||||
unkA
|
||||
) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.FrameVehicleState(
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
orient,
|
||||
vel,
|
||||
unk2,
|
||||
unk3,
|
||||
unk4,
|
||||
is_crouched,
|
||||
unk6,
|
||||
unk7,
|
||||
unk8,
|
||||
unk9,
|
||||
unkA
|
||||
)
|
||||
)
|
||||
)
|
||||
case VehicleAction.GenericObjectAction(player_guid, guid, code) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.GenericObjectAction(guid, code)
|
||||
)
|
||||
)
|
||||
case VehicleAction.InventoryState(player_guid, obj, parent_guid, start, con_data) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.InventoryState(obj, parent_guid, start, con_data)
|
||||
)
|
||||
)
|
||||
case VehicleAction.InventoryState2(player_guid, obj_guid, parent_guid, value) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.InventoryState2(obj_guid, parent_guid, value)
|
||||
)
|
||||
)
|
||||
case VehicleAction.KickPassenger(player_guid, seat_num, kickedByDriver, vehicle_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.KickPassenger(seat_num, kickedByDriver, vehicle_guid)
|
||||
)
|
||||
)
|
||||
case VehicleAction.ObjectDelete(guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.ObjectDelete(guid)
|
||||
)
|
||||
)
|
||||
case VehicleAction.LoadVehicle(player_guid, vehicle, vtype, vguid, vdata) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.LoadVehicle(vehicle, vtype, vguid, vdata)
|
||||
)
|
||||
)
|
||||
case VehicleAction.MountVehicle(player_guid, vehicle_guid, seat) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.MountVehicle(vehicle_guid, seat)
|
||||
)
|
||||
)
|
||||
case VehicleAction.LoseOwnership(owner_guid, vehicle_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", Service.defaultPlayerGUID, VehicleResponse.LoseOwnership(owner_guid, vehicle_guid))
|
||||
)
|
||||
case VehicleAction.Ownership(player_guid, vehicle_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.Ownership(vehicle_guid))
|
||||
)
|
||||
case VehicleAction.PlanetsideAttribute(exclude_guid, target_guid, attribute_type, attribute_value) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
exclude_guid,
|
||||
VehicleResponse.PlanetsideAttribute(target_guid, attribute_type, attribute_value)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleAction.Reload(player_guid, weapon_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.Reload(weapon_guid))
|
||||
)
|
||||
case VehicleAction.SeatPermissions(player_guid, vehicle_guid, seat_group, permission) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.SeatPermissions(vehicle_guid, seat_group, permission)
|
||||
)
|
||||
)
|
||||
case VehicleAction.StowEquipment(player_guid, vehicle_guid, slot, item) =>
|
||||
val definition = item.Definition
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.StowEquipment(
|
||||
vehicle_guid,
|
||||
slot,
|
||||
definition.ObjectId,
|
||||
item.GUID,
|
||||
definition.Packet.DetailedConstructorData(item).get
|
||||
)
|
||||
)
|
||||
)
|
||||
case VehicleAction.WeaponDryFire(player_guid, weapon_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.WeaponDryFire(weapon_guid))
|
||||
)
|
||||
case VehicleAction.UnloadVehicle(player_guid, vehicle, vehicle_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.UnloadVehicle(vehicle, vehicle_guid)
|
||||
)
|
||||
)
|
||||
case VehicleAction.UnstowEquipment(player_guid, item_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.UnstowEquipment(item_guid))
|
||||
)
|
||||
case VehicleAction.VehicleState(
|
||||
player_guid,
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
ang,
|
||||
vel,
|
||||
unk2,
|
||||
unk3,
|
||||
unk4,
|
||||
wheel_direction,
|
||||
unk5,
|
||||
unk6
|
||||
) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.VehicleState(
|
||||
vehicle_guid,
|
||||
unk1,
|
||||
pos,
|
||||
ang,
|
||||
vel,
|
||||
unk2,
|
||||
unk3,
|
||||
unk4,
|
||||
wheel_direction,
|
||||
unk5,
|
||||
unk6
|
||||
)
|
||||
)
|
||||
)
|
||||
case VehicleAction.SendResponse(player_guid, msg) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.SendResponse(msg))
|
||||
)
|
||||
|
||||
//unlike other messages, just return to sender, don't publish
|
||||
case VehicleAction.UpdateAmsSpawnPoint(zone: Zone) =>
|
||||
sender() ! VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.UpdateAmsSpawnPoint(AmsSpawnPoints(zone))
|
||||
)
|
||||
|
||||
case VehicleAction.TransferPassengerChannel(
|
||||
player_guid,
|
||||
old_channel,
|
||||
temp_channel,
|
||||
vehicle,
|
||||
vehicle_to_delete
|
||||
) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
player_guid,
|
||||
VehicleResponse.TransferPassengerChannel(old_channel, temp_channel, vehicle, vehicle_to_delete)
|
||||
)
|
||||
)
|
||||
case VehicleAction.KickCargo(player_guid, cargo, speed, delay) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(s"/$forChannel/Vehicle", player_guid, VehicleResponse.KickCargo(cargo, speed, delay))
|
||||
)
|
||||
|
||||
case VehicleAction.ChangeLoadout(target_guid, removed_weapons, new_weapons, old_inventory, new_inventory) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$forChannel/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.ChangeLoadout(target_guid, removed_weapons, new_weapons, old_inventory, new_inventory)
|
||||
)
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
||||
//message to TurretUpgrader
|
||||
case VehicleServiceMessage.TurretUpgrade(msg) =>
|
||||
turretUpgrade forward msg
|
||||
|
||||
//from VehicleSpawnControl, etc.
|
||||
case VehicleSpawnPad.ConcealPlayer(player_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/${zone.id}/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.ConcealPlayer(player_guid)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.AttachToRails(vehicle, pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/${zone.id}/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.AttachToRails(vehicle.GUID, pad.GUID)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.StartPlayerSeatedInVehicle(driver_name, vehicle, pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$driver_name/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.StartPlayerSeatedInVehicle(vehicle, pad)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.PlayerSeatedInVehicle(driver_name, vehicle, pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$driver_name/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.PlayerSeatedInVehicle(vehicle, pad)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.ServerVehicleOverrideStart(driver_name, vehicle, pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$driver_name/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.ServerVehicleOverrideStart(vehicle, pad)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.ServerVehicleOverrideEnd(driver_name, vehicle, pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$driver_name/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.ServerVehicleOverrideEnd(vehicle, pad)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.DetachFromRails(vehicle, pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/${zone.id}/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.DetachFromRails(vehicle.GUID, pad.GUID, pad.Position, pad.Orientation.z)
|
||||
)
|
||||
)
|
||||
case VehicleSpawnPad.ResetSpawnPad(pad) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/${zone.id}/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.ResetSpawnPad(pad.GUID)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.RevealPlayer(player_guid) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/${zone.id}/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.RevealPlayer(player_guid)
|
||||
)
|
||||
)
|
||||
|
||||
case VehicleSpawnPad.PeriodicReminder(to, reason, data) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/$to/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.PeriodicReminder(reason, data)
|
||||
)
|
||||
)
|
||||
|
||||
//correspondence from WorldSessionActor
|
||||
case VehicleServiceMessage.AMSDeploymentChange(_) =>
|
||||
VehicleEvents.publish(
|
||||
VehicleServiceResponse(
|
||||
s"/${zone.id}/Vehicle",
|
||||
Service.defaultPlayerGUID,
|
||||
VehicleResponse.UpdateAmsSpawnPoint(AmsSpawnPoints(zone))
|
||||
)
|
||||
)
|
||||
|
||||
case msg =>
|
||||
log.warn(s"Unhandled message $msg from ${sender()}")
|
||||
}
|
||||
|
||||
import net.psforever.objects.serverobject.tube.SpawnTube
|
||||
def AmsSpawnPoints(zone: Zone): List[SpawnTube] = {
|
||||
import net.psforever.objects.vehicles.UtilityType
|
||||
import net.psforever.objects.GlobalDefinitions
|
||||
zone.Vehicles
|
||||
.filter(veh =>
|
||||
veh.Health > 0 && veh.Definition == GlobalDefinitions.ams && veh.DeploymentState == DriveState.Deployed
|
||||
)
|
||||
.flatMap(veh => veh.Utilities.values.filter(util => util.UtilType == UtilityType.ams_respawn_tube))
|
||||
.map(util => util().asInstanceOf[SpawnTube])
|
||||
case object TurretUpgradeSupport
|
||||
extends EventServiceSupport {
|
||||
def label: String = "turretUpgrader"
|
||||
def constructor(context: ActorContext): ActorRef = {
|
||||
context.actorOf(Props[TurretUpgrader](), name = "TurretUpgrader")
|
||||
}
|
||||
}
|
||||
|
||||
class VehicleService(zone: Zone)
|
||||
extends GenericEventServiceWithSupport[VehicleServiceResponse](
|
||||
busName = "Vehicle",
|
||||
eventSupportServices = List(TurretUpgradeSupport)
|
||||
) {
|
||||
protected def composeResponseEnvelope(msg: GenericMessageEnvelope): VehicleServiceResponse = {
|
||||
VehicleServiceResponse(formatChannelOnBusName(msg.channel), msg.filter, msg.msg.response())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,157 +1,19 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package net.psforever.services.vehicle
|
||||
|
||||
import net.psforever.objects.{PlanetSideGameObject, Vehicle}
|
||||
import net.psforever.objects.equipment.Equipment
|
||||
import net.psforever.objects.inventory.InventoryItem
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.PlanetSideGamePacket
|
||||
import net.psforever.packet.game.objectcreate.ConstructorData
|
||||
import net.psforever.services.base.{EventMessage, EventResponse}
|
||||
import net.psforever.types.{BailType, DriveState, PlanetSideGUID, Vector3}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.base.{EventMessage, GenericMessageEnvelope, GenericMessageToSupportEnvelopeOnly}
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
|
||||
final case class VehicleServiceMessage(forChannel: String, actionMessage: VehicleAction.Action)
|
||||
final case class VehicleServiceMessage(channel: String, filter: PlanetSideGUID, msg: EventMessage)
|
||||
extends GenericMessageEnvelope
|
||||
|
||||
final case class TurretMessage(supportMessage: Any)
|
||||
extends GenericMessageToSupportEnvelopeOnly {
|
||||
def supportLabel: String = "turretUpgrader"
|
||||
}
|
||||
|
||||
object VehicleServiceMessage {
|
||||
final case class GiveActorControl(vehicle: Vehicle, actorName: String)
|
||||
final case class RevokeActorControl(vehicle: Vehicle)
|
||||
|
||||
final case class TurretUpgrade(msg: Any)
|
||||
|
||||
final case class AMSDeploymentChange(zone: Zone)
|
||||
}
|
||||
|
||||
object VehicleAction {
|
||||
trait Action extends EventMessage {
|
||||
def response(): EventResponse = null
|
||||
}
|
||||
|
||||
final case class ChangeAmmo(
|
||||
player_guid: PlanetSideGUID,
|
||||
weapon_guid: PlanetSideGUID,
|
||||
weapon_slot: Int,
|
||||
old_ammo_guid: PlanetSideGUID,
|
||||
ammo_id: Int,
|
||||
ammo_guid: PlanetSideGUID,
|
||||
ammo_data: ConstructorData
|
||||
) extends Action
|
||||
final case class ChangeFireState_Start(player_guid: PlanetSideGUID, weapon_guid: PlanetSideGUID) extends Action
|
||||
final case class ChangeFireState_Stop(player_guid: PlanetSideGUID, weapon_guid: PlanetSideGUID) extends Action
|
||||
final case class ChildObjectState(player_guid: PlanetSideGUID, object_guid: PlanetSideGUID, pitch: Float, yaw: Float)
|
||||
extends Action
|
||||
final case class DeployRequest(
|
||||
player_guid: PlanetSideGUID,
|
||||
object_guid: PlanetSideGUID,
|
||||
state: DriveState.Value,
|
||||
unk1: Int,
|
||||
unk2: Boolean,
|
||||
pos: Vector3
|
||||
) extends Action
|
||||
final case class DismountVehicle(player_guid: PlanetSideGUID, bailType: BailType.Value, unk2: Boolean) extends Action
|
||||
final case class EquipmentInSlot(
|
||||
player_guid: PlanetSideGUID,
|
||||
target_guid: PlanetSideGUID,
|
||||
slot: Int,
|
||||
equipment: Equipment
|
||||
) extends Action
|
||||
final case class FrameVehicleState(
|
||||
player_guid: PlanetSideGUID,
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
unk1: Int,
|
||||
pos: Vector3,
|
||||
orient: Vector3,
|
||||
vel: Option[Vector3],
|
||||
unk2: Boolean,
|
||||
unk3: Int,
|
||||
unk4: Int,
|
||||
is_crouched: Boolean,
|
||||
unk6: Boolean,
|
||||
unk7: Boolean,
|
||||
unk8: Int,
|
||||
unk9: Long,
|
||||
unkA: Long
|
||||
) extends Action
|
||||
final case class GenericObjectAction(player_guid: PlanetSideGUID, guid: PlanetSideGUID, action: Int) extends Action
|
||||
final case class InventoryState(
|
||||
player_guid: PlanetSideGUID,
|
||||
obj: PlanetSideGameObject,
|
||||
parent_guid: PlanetSideGUID,
|
||||
start: Int,
|
||||
con_data: ConstructorData
|
||||
) extends Action
|
||||
final case class InventoryState2(
|
||||
player_guid: PlanetSideGUID,
|
||||
obj_guid: PlanetSideGUID,
|
||||
parent_guid: PlanetSideGUID,
|
||||
value: Int
|
||||
) extends Action
|
||||
final case class KickPassenger(player_guid: PlanetSideGUID, unk1: Int, unk2: Boolean, vehicle_guid: PlanetSideGUID)
|
||||
extends Action
|
||||
final case class LoadVehicle(
|
||||
player_guid: PlanetSideGUID,
|
||||
vehicle: Vehicle,
|
||||
vtype: Int,
|
||||
vguid: PlanetSideGUID,
|
||||
vdata: ConstructorData
|
||||
) extends Action
|
||||
final case class MountVehicle(player_guid: PlanetSideGUID, object_guid: PlanetSideGUID, seat: Int) extends Action
|
||||
final case class ObjectDelete(guid: PlanetSideGUID) extends Action
|
||||
final case class LoseOwnership(owner_guid: PlanetSideGUID, vehicle_guid: PlanetSideGUID) extends Action
|
||||
final case class Ownership(player_guid: PlanetSideGUID, vehicle_guid: PlanetSideGUID) extends Action
|
||||
final case class PlanetsideAttribute(
|
||||
player_guid: PlanetSideGUID,
|
||||
target_guid: PlanetSideGUID,
|
||||
attribute_type: Int,
|
||||
attribute_value: Long
|
||||
) extends Action
|
||||
final case class Reload(player_guid: PlanetSideGUID, weapon_guid: PlanetSideGUID) extends Action
|
||||
final case class SeatPermissions(
|
||||
player_guid: PlanetSideGUID,
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
seat_group: Int,
|
||||
permission: Long
|
||||
) extends Action
|
||||
final case class StowEquipment(player_guid: PlanetSideGUID, vehicle_guid: PlanetSideGUID, slot: Int, item: Equipment)
|
||||
extends Action
|
||||
final case class UnloadVehicle(
|
||||
player_guid: PlanetSideGUID,
|
||||
vehicle: Vehicle,
|
||||
vehicle_guid: PlanetSideGUID
|
||||
) extends Action
|
||||
final case class UnstowEquipment(player_guid: PlanetSideGUID, item_guid: PlanetSideGUID) extends Action
|
||||
final case class VehicleState(
|
||||
player_guid: PlanetSideGUID,
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
unk1: Int,
|
||||
pos: Vector3,
|
||||
ang: Vector3,
|
||||
vel: Option[Vector3],
|
||||
unk2: Option[Int],
|
||||
unk3: Int,
|
||||
unk4: Int,
|
||||
wheel_direction: Int,
|
||||
unk5: Boolean,
|
||||
unk6: Boolean
|
||||
) extends Action
|
||||
final case class SendResponse(player_guid: PlanetSideGUID, msg: PlanetSideGamePacket) extends Action
|
||||
final case class WeaponDryFire(player_guid: PlanetSideGUID, weapon_guid: PlanetSideGUID) extends Action
|
||||
final case class UpdateAmsSpawnPoint(zone: Zone) extends Action
|
||||
|
||||
final case class TransferPassengerChannel(
|
||||
player_guid: PlanetSideGUID,
|
||||
temp_channel: String,
|
||||
new_channel: String,
|
||||
vehicle: Vehicle,
|
||||
vehicle_to_delete: PlanetSideGUID
|
||||
) extends Action
|
||||
|
||||
final case class KickCargo(player_guid: PlanetSideGUID, cargo: Vehicle, speed: Int, delay: Long) extends Action
|
||||
|
||||
final case class ChangeLoadout(
|
||||
target_guid: PlanetSideGUID,
|
||||
removed_weapons: List[(Equipment, PlanetSideGUID)],
|
||||
new_weapons: List[InventoryItem],
|
||||
old_inventory: List[(Equipment, PlanetSideGUID)],
|
||||
new_inventory: List[InventoryItem]
|
||||
) extends Action
|
||||
def apply(channel: String, actionMessage: EventMessage): VehicleServiceMessage =
|
||||
VehicleServiceMessage(channel, Service.defaultPlayerGUID, actionMessage)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,141 +1,11 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package net.psforever.services.vehicle
|
||||
|
||||
import net.psforever.objects.equipment.Equipment
|
||||
import net.psforever.objects.inventory.InventoryItem
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad
|
||||
import net.psforever.objects.serverobject.pad.VehicleSpawnPad.Reminders
|
||||
import net.psforever.objects.{PlanetSideGameObject, Vehicle}
|
||||
import net.psforever.objects.serverobject.tube.SpawnTube
|
||||
import net.psforever.packet.PlanetSideGamePacket
|
||||
import net.psforever.packet.game.objectcreate.ConstructorData
|
||||
import net.psforever.packet.game.ObjectCreateMessage
|
||||
import net.psforever.types.{BailType, DriveState, PlanetSideGUID, Vector3}
|
||||
import net.psforever.services.base.EventResponse
|
||||
import net.psforever.services.base.bus.GenericEventBusResponse
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
import net.psforever.services.base.{EventResponse, GenericResponseEnvelope}
|
||||
|
||||
final case class VehicleServiceResponse(
|
||||
channel: String,
|
||||
filter: PlanetSideGUID,
|
||||
reply: VehicleResponse.Response
|
||||
) extends GenericEventBusResponse
|
||||
|
||||
object VehicleResponse {
|
||||
trait Response extends EventResponse
|
||||
|
||||
final case class ChangeAmmo(
|
||||
weapon_guid: PlanetSideGUID,
|
||||
weapon_slot: Int,
|
||||
old_ammo_guid: PlanetSideGUID,
|
||||
ammo_id: Int,
|
||||
ammo_guid: PlanetSideGUID,
|
||||
ammo_data: ConstructorData
|
||||
) extends Response
|
||||
final case class ChangeFireState_Start(weapon_guid: PlanetSideGUID) extends Response
|
||||
final case class ChangeFireState_Stop(weapon_guid: PlanetSideGUID) extends Response
|
||||
final case class ChildObjectState(object_guid: PlanetSideGUID, pitch: Float, yaw: Float) extends Response
|
||||
final case class ConcealPlayer(player_guid: PlanetSideGUID) extends Response
|
||||
final case class DeployRequest(
|
||||
object_guid: PlanetSideGUID,
|
||||
state: DriveState.Value,
|
||||
unk1: Int,
|
||||
unk2: Boolean,
|
||||
pos: Vector3
|
||||
) extends Response
|
||||
final case class DismountVehicle(bailType: BailType.Value, unk2: Boolean) extends Response
|
||||
final case class EquipmentInSlot(pkt: ObjectCreateMessage) extends Response
|
||||
final case class FrameVehicleState(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
unk1: Int,
|
||||
pos: Vector3,
|
||||
orient: Vector3,
|
||||
vel: Option[Vector3],
|
||||
unk2: Boolean,
|
||||
unk3: Int,
|
||||
unk4: Int,
|
||||
is_crouched: Boolean,
|
||||
unk6: Boolean,
|
||||
unk7: Boolean,
|
||||
unk8: Int,
|
||||
unk9: Long,
|
||||
unkA: Long
|
||||
) extends Response
|
||||
final case class GenericObjectAction(guid: PlanetSideGUID, action: Int) extends Response
|
||||
final case class HitHint(source_guid: PlanetSideGUID) extends Response
|
||||
final case class InventoryState(
|
||||
obj: PlanetSideGameObject,
|
||||
parent_guid: PlanetSideGUID,
|
||||
start: Int,
|
||||
con_data: ConstructorData
|
||||
) extends Response
|
||||
final case class InventoryState2(obj_guid: PlanetSideGUID, parent_guid: PlanetSideGUID, value: Int) extends Response
|
||||
final case class KickPassenger(seat_num: Int, kickedByDriver: Boolean, vehicle_guid: PlanetSideGUID) extends Response
|
||||
final case class LoadVehicle(vehicle: Vehicle, vtype: Int, vguid: PlanetSideGUID, vdata: ConstructorData)
|
||||
extends Response
|
||||
final case class MountVehicle(object_guid: PlanetSideGUID, seat: Int) extends Response
|
||||
final case class ObjectDelete(guid: PlanetSideGUID) extends Response
|
||||
final case class Ownership(vehicle_guid: PlanetSideGUID) extends Response
|
||||
final case class LoseOwnership(owner_guid: PlanetSideGUID, vehicle_guid: PlanetSideGUID)
|
||||
extends Response
|
||||
final case class PlanetsideAttribute(vehicle_guid: PlanetSideGUID, attribute_type: Int, attribute_value: Long)
|
||||
extends Response
|
||||
final case class Reload(weapon_guid: PlanetSideGUID) extends Response
|
||||
final case class RevealPlayer(player_guid: PlanetSideGUID) extends Response
|
||||
final case class SeatPermissions(vehicle_guid: PlanetSideGUID, seat_group: Int, permission: Long) extends Response
|
||||
final case class StowEquipment(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
slot: Int,
|
||||
itype: Int,
|
||||
iguid: PlanetSideGUID,
|
||||
idata: ConstructorData
|
||||
) extends Response
|
||||
final case class WeaponDryFire(weapon_guid: PlanetSideGUID) extends Response
|
||||
final case class UnloadVehicle(vehicle: Vehicle, vehicle_guid: PlanetSideGUID) extends Response
|
||||
final case class UnstowEquipment(item_guid: PlanetSideGUID) extends Response
|
||||
final case class VehicleState(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
unk1: Int,
|
||||
pos: Vector3,
|
||||
ang: Vector3,
|
||||
vel: Option[Vector3],
|
||||
unk2: Option[Int],
|
||||
unk3: Int,
|
||||
unk4: Int,
|
||||
wheel_direction: Int,
|
||||
unk5: Boolean,
|
||||
unk6: Boolean
|
||||
) extends Response
|
||||
final case class SendResponse(msg: PlanetSideGamePacket) extends Response
|
||||
final case class UpdateAmsSpawnPoint(list: List[SpawnTube]) extends Response
|
||||
|
||||
final case class AttachToRails(vehicle_guid: PlanetSideGUID, rails_guid: PlanetSideGUID) extends Response
|
||||
final case class StartPlayerSeatedInVehicle(vehicle: Vehicle, pad: VehicleSpawnPad) extends Response
|
||||
final case class PlayerSeatedInVehicle(vehicle: Vehicle, pad: VehicleSpawnPad) extends Response
|
||||
final case class DetachFromRails(
|
||||
vehicle_guid: PlanetSideGUID,
|
||||
rails_guid: PlanetSideGUID,
|
||||
rails_pos: Vector3,
|
||||
rails_rot: Float
|
||||
) extends Response
|
||||
final case class ServerVehicleOverrideStart(vehicle: Vehicle, pad: VehicleSpawnPad) extends Response
|
||||
final case class ServerVehicleOverrideEnd(vehicle: Vehicle, pad: VehicleSpawnPad) extends Response
|
||||
final case class ResetSpawnPad(pad_guid: PlanetSideGUID) extends Response
|
||||
final case class PeriodicReminder(reason: Reminders.Value, data: Option[Any] = None) extends Response
|
||||
|
||||
final case class TransferPassengerChannel(
|
||||
old_channel: String,
|
||||
temp_channel: String,
|
||||
vehicle: Vehicle,
|
||||
vehicle_to_delete: PlanetSideGUID
|
||||
) extends Response
|
||||
|
||||
final case class KickCargo(cargo: Vehicle, speed: Int, delay: Long) extends Response
|
||||
|
||||
final case class ChangeLoadout(
|
||||
target_guid: PlanetSideGUID,
|
||||
removed_weapons: List[(Equipment, PlanetSideGUID)],
|
||||
new_weapons: List[InventoryItem],
|
||||
old_inventory: List[(Equipment, PlanetSideGUID)],
|
||||
new_inventory: List[InventoryItem]
|
||||
) extends Response
|
||||
}
|
||||
reply: EventResponse
|
||||
) extends GenericResponseEnvelope
|
||||
|
|
|
|||
|
|
@ -161,7 +161,8 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
|
|||
if (tplayer.HasGUID) {
|
||||
context.parent ! VehicleServiceMessage(
|
||||
zoneId,
|
||||
VehicleAction.KickPassenger(tplayer.GUID, 4, unk2=false, turretGUID)
|
||||
tplayer.GUID,
|
||||
VehicleAction.KickPassenger(4, unk2=false, turretGUID)
|
||||
)
|
||||
}
|
||||
})
|
||||
|
|
@ -235,7 +236,7 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
|
|||
case (index, Some(tool: Tool)) =>
|
||||
context.parent ! VehicleServiceMessage(
|
||||
zone.id,
|
||||
VehicleAction.EquipmentInSlot(PlanetSideGUID(0), targetGUID, index, tool)
|
||||
VehicleAction.EquipmentInSlot(targetGUID, index, tool)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,9 +24,8 @@ import net.psforever.packet.game.DamageWithPositionMessage
|
|||
import net.psforever.types._
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.support.SupportActor
|
||||
import net.psforever.services.vehicle.support.TurretUpgrader
|
||||
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage}
|
||||
import net.psforever.services.base.support.SupportActor
|
||||
import net.psforever.services.vehicle.{TurretMessage, VehicleAction, VehicleServiceMessage}
|
||||
import org.specs2.mutable.Specification
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
|
@ -831,7 +830,7 @@ class DamageableWeaponTurretDamageTest extends ActorTest {
|
|||
val msg4 = avatarProbe.receiveOne(500 milliseconds)
|
||||
assert(
|
||||
msg12 match {
|
||||
case VehicleServiceMessage("test", VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(2), 0, _)) => true
|
||||
case VehicleServiceMessage("test", _, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(2), 0, _)) => true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
|
|
@ -933,6 +932,7 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
|
|||
msg12.head match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(2), 27, 1)
|
||||
) =>
|
||||
true
|
||||
|
|
@ -943,6 +943,7 @@ class DamageableWeaponTurretJammerTest extends ActorTest {
|
|||
msg12(1) match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(5), 27, 1)
|
||||
) =>
|
||||
true
|
||||
|
|
@ -1085,17 +1086,17 @@ class DamageableWeaponTurretDestructionTest extends ActorTest {
|
|||
assert(false, s"DamageableWeaponTurretDestructionTest-3: player not dead - $msg3")
|
||||
}
|
||||
msg12_4(2) match {
|
||||
case AvatarServiceMessage("test", AvatarAction.ObjectDelete(PlanetSideGUID(0), PlanetSideGUID(5), _)) => ;
|
||||
case AvatarServiceMessage("test", _, AvatarAction.ObjectDelete(PlanetSideGUID(5), _)) => ;
|
||||
case _ =>
|
||||
assert(false, s"DamageableWeaponTurretDestructionTest-4: ${msg12_4(2)}")
|
||||
}
|
||||
msg56.head match {
|
||||
case VehicleServiceMessage.TurretUpgrade(SupportActor.ClearSpecific(List(t), _)) if turret eq t => ;
|
||||
case TurretMessage(SupportActor.ClearSpecific(List(t), _)) if turret eq t => ;
|
||||
case _ =>
|
||||
assert(false, s"DamageableWeaponTurretDestructionTest-5: ${msg56.head}")
|
||||
}
|
||||
msg56(1) match {
|
||||
case VehicleServiceMessage.TurretUpgrade(TurretUpgrader.AddTask(t, _, TurretUpgrade.None, _)) if t eq turret => ()
|
||||
case TurretMessage(TurretUpgrader.AddTask(t, _, TurretUpgrade.None, _)) if t eq turret => ()
|
||||
case _ => assert(false, s"DamageableWeaponTurretDestructionTest-6: ${msg56(1)}")
|
||||
}
|
||||
assert(turret.Health <= turret.Definition.DamageDestroysAt)
|
||||
|
|
@ -1180,13 +1181,13 @@ class DamageableVehicleDamageTest extends ActorTest {
|
|||
val msg4 = avatarProbe.receiveOne(200 milliseconds)
|
||||
assert(
|
||||
msg12.head match {
|
||||
case VehicleServiceMessage(_, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 68, _)) => true
|
||||
case VehicleServiceMessage(_, _, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 68, _)) => true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg12(1) match {
|
||||
case VehicleServiceMessage("test", VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 0, _)) => true
|
||||
case VehicleServiceMessage("test", _, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 0, _)) => true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
|
|
@ -1316,11 +1317,11 @@ class DamageableVehicleDamageMountedTest extends FreedContextActorTest {
|
|||
val msg3 = activityProbe.receiveOne(500 milliseconds)
|
||||
val msg45 = avatarProbe.receiveN(2,500 milliseconds)
|
||||
msg12.head match {
|
||||
case VehicleServiceMessage(_, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 68, _)) => ;
|
||||
case VehicleServiceMessage(_, _, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 68, _)) => ;
|
||||
case _ => assert(false)
|
||||
}
|
||||
msg12(1) match {
|
||||
case VehicleServiceMessage("test", VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 0, _)) => ;
|
||||
case VehicleServiceMessage("test", _, VehicleAction.PlanetsideAttribute(PlanetSideGUID(0), PlanetSideGUID(1), 0, _)) => ;
|
||||
case _ => assert(false)
|
||||
}
|
||||
msg3 match {
|
||||
|
|
@ -1453,6 +1454,7 @@ class DamageableVehicleJammeringMountedTest extends FreedContextActorTest {
|
|||
msg12 match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(4), 27, 1)
|
||||
) =>
|
||||
true
|
||||
|
|
@ -1754,6 +1756,7 @@ class DamageableVehicleDestroyTest extends ActorTest {
|
|||
// msg_vehicle.exists({
|
||||
// case VehicleServiceMessage(
|
||||
// "test",
|
||||
// _,
|
||||
// VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(4), 27, 0)
|
||||
// ) =>
|
||||
// true
|
||||
|
|
@ -1764,6 +1767,7 @@ class DamageableVehicleDestroyTest extends ActorTest {
|
|||
// msg_vehicle.exists({
|
||||
// case VehicleServiceMessage(
|
||||
// "test",
|
||||
// _,
|
||||
// VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(1), 68, 0)
|
||||
// ) =>
|
||||
// true
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ class DeploymentBehavior2Test extends ActorTest {
|
|||
reply2.head match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deploying, 0, false, Vector3.Zero)
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deploying, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
|
|
@ -86,6 +87,7 @@ class DeploymentBehavior2Test extends ActorTest {
|
|||
reply2(1) match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deployed, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
|
|
@ -102,6 +104,7 @@ class DeploymentBehavior2Test extends ActorTest {
|
|||
reply4.head match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Undeploying, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
|
|
@ -114,6 +117,7 @@ class DeploymentBehavior2Test extends ActorTest {
|
|||
reply4(1) match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Mobile, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
|
|
@ -141,8 +145,9 @@ class DeploymentBehavior3Test extends ActorTest {
|
|||
}
|
||||
reply2.head match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deploying, 0, false, Vector3.Zero)
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deploying, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
|
|
@ -153,8 +158,9 @@ class DeploymentBehavior3Test extends ActorTest {
|
|||
}
|
||||
reply2(1) match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deployed, 0, false, Vector3.Zero)
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Deployed, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
|
|
@ -169,8 +175,9 @@ class DeploymentBehavior3Test extends ActorTest {
|
|||
}
|
||||
reply4.head match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Undeploying, 0, false, Vector3.Zero)
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Undeploying, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
|
|
@ -181,8 +188,9 @@ class DeploymentBehavior3Test extends ActorTest {
|
|||
}
|
||||
reply4(1) match {
|
||||
case VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Mobile, 0, false, Vector3.Zero)
|
||||
"test",
|
||||
_,
|
||||
VehicleAction.DeployRequest(_, PlanetSideGUID(1), DriveState.Mobile, 0, false, Vector3.Zero)
|
||||
) => ()
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -298,7 +298,7 @@ class FacilityTurretControlRestorationTest extends ActorTest {
|
|||
)
|
||||
assert(
|
||||
msg4 match {
|
||||
case VehicleServiceMessage("test", VehicleAction.EquipmentInSlot(_, PlanetSideGUID(2), 1, t))
|
||||
case VehicleServiceMessage("test", _, VehicleAction.EquipmentInSlot(_, PlanetSideGUID(2), 1, t))
|
||||
if t eq turretWeapon =>
|
||||
true
|
||||
case _ => false
|
||||
|
|
|
|||
|
|
@ -313,7 +313,7 @@ class RepairableTurretWeapon extends ActorTest {
|
|||
)
|
||||
assert(
|
||||
msg4 match {
|
||||
case VehicleServiceMessage("test", VehicleAction.EquipmentInSlot(_, PlanetSideGUID(2), 1, t))
|
||||
case VehicleServiceMessage("test", _, VehicleAction.EquipmentInSlot(_, PlanetSideGUID(2), 1, t))
|
||||
if t eq turretWeapon =>
|
||||
true
|
||||
case _ => false
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ class VehicleControlPrepareForDeletionPassengerTest extends ActorTest {
|
|||
|
||||
val vehicle_msg = vehicleProbe.receiveN(1, 500 milliseconds)
|
||||
vehicle_msg.head match {
|
||||
case VehicleServiceMessage("test", VehicleAction.KickPassenger(PlanetSideGUID(2), 4, true, PlanetSideGUID(1))) => ;
|
||||
case VehicleServiceMessage("test", _, VehicleAction.KickPassenger(PlanetSideGUID(2), 4, true, PlanetSideGUID(1))) => ;
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionPassengerTest: ${vehicle_msg.head}")
|
||||
}
|
||||
|
|
@ -136,32 +136,32 @@ class VehicleControlPrepareForDeletionPassengerTest extends ActorTest {
|
|||
// val vehicle_msg = vehicleProbe.receiveN(6, 1 minute)
|
||||
// //dismounting as cargo messages
|
||||
// vehicle_msg.head match {
|
||||
// case VehicleServiceMessage("test", VehicleAction.KickPassenger(PlanetSideGUID(3), 4, true, PlanetSideGUID(1))) => ;
|
||||
// case VehicleServiceMessage("test", _, VehicleAction.KickPassenger(PlanetSideGUID(3), 4, true, PlanetSideGUID(1))) => ;
|
||||
// case _ =>
|
||||
// assert(false, s"VehicleControlPrepareForDeletionMountedInTest-1: ${vehicle_msg.head}")
|
||||
// }
|
||||
// vehicle_msg(1) match {
|
||||
// case VehicleServiceMessage(_, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 0, _))) => ;
|
||||
// case VehicleServiceMessage(_, _, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 0, _))) => ;
|
||||
// case _ =>
|
||||
// assert(false, s"VehicleControlPrepareForDeletionMountedInTest-2: ${vehicle_msg(1)}")
|
||||
// }
|
||||
// vehicle_msg(2) match {
|
||||
// case VehicleServiceMessage(_, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 68, _))) => ;
|
||||
// case VehicleServiceMessage(_, _, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 68, _))) => ;
|
||||
// case _ =>
|
||||
// assert(false, s"VehicleControlPrepareForDeletionMountedInTest-3: ${vehicle_msg(2)}")
|
||||
// }
|
||||
// vehicle_msg(3) match {
|
||||
// case VehicleServiceMessage("test", VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, PlanetSideGUID(1), _, 1, CargoStatus.InProgress, 0))) => ;
|
||||
// case VehicleServiceMessage("test", _, VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, PlanetSideGUID(1), _, 1, CargoStatus.InProgress, 0))) => ;
|
||||
// case _ =>
|
||||
// assert(false, s"VehicleControlPrepareForDeletionMountedInTest-4: ${vehicle_msg(3)}")
|
||||
// }
|
||||
// vehicle_msg(4) match {
|
||||
// case VehicleServiceMessage("test", VehicleAction.SendResponse(_, ObjectDetachMessage(PlanetSideGUID(2), PlanetSideGUID(1), _, _, _, _))) => ;
|
||||
// case VehicleServiceMessage("test", _, VehicleAction.SendResponse(_, ObjectDetachMessage(PlanetSideGUID(2), PlanetSideGUID(1), _, _, _, _))) => ;
|
||||
// case _ =>
|
||||
// assert(false, s"VehicleControlPrepareForDeletionMountedInTest-5: ${vehicle_msg(4)}")
|
||||
// }
|
||||
// vehicle_msg(5) match {
|
||||
// case VehicleServiceMessage("test", VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, _, PlanetSideGUID(1), 1, CargoStatus.Empty, 0))) => ;
|
||||
// case VehicleServiceMessage("test", _, VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, _, PlanetSideGUID(1), 1, CargoStatus.Empty, 0))) => ;
|
||||
// case _ =>
|
||||
// assert(false, s"VehicleControlPrepareForDeletionMountedInTest-6: ${vehicle_msg(5)}")
|
||||
// }
|
||||
|
|
@ -224,7 +224,7 @@ class VehicleControlPrepareForDeletionMountedCargoTest extends FreedContextActor
|
|||
val vehicleMsgs = eventsProbe.receiveN(6, 10.seconds)
|
||||
val cargoMsgs = cargoProbe.receiveN(1, 1.seconds)
|
||||
vehicleMsgs.head match {
|
||||
case VehicleServiceMessage("test", VehicleAction.KickPassenger(PlanetSideGUID(4), 4, true, PlanetSideGUID(2))) => ()
|
||||
case VehicleServiceMessage("test", _, VehicleAction.KickPassenger(PlanetSideGUID(4), 4, true, PlanetSideGUID(2))) => ()
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionMountedCargoTest-1: ${vehicleMsgs.head}")
|
||||
}
|
||||
|
|
@ -232,27 +232,27 @@ class VehicleControlPrepareForDeletionMountedCargoTest extends FreedContextActor
|
|||
assert(lodestar.Seats(0).occupant.isEmpty)
|
||||
//cargo dismounting messages
|
||||
vehicleMsgs(1) match {
|
||||
case VehicleServiceMessage(_, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 0, _))) => ()
|
||||
case VehicleServiceMessage(_, _, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 0, _))) => ()
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionMountedCargoTest-2: ${vehicleMsgs(1)}")
|
||||
}
|
||||
vehicleMsgs(2) match {
|
||||
case VehicleServiceMessage(_, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 68, _))) => ()
|
||||
case VehicleServiceMessage(_, _, VehicleAction.SendResponse(_, PlanetsideAttributeMessage(PlanetSideGUID(1), 68, _))) => ()
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionMountedCargoTest-3: ${vehicleMsgs(2)}")
|
||||
}
|
||||
vehicleMsgs(3) match {
|
||||
case VehicleServiceMessage("test", VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, PlanetSideGUID(1), _, 1, CargoStatus.InProgress, 0))) => ;
|
||||
case VehicleServiceMessage("test", _, VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, PlanetSideGUID(1), _, 1, CargoStatus.InProgress, 0))) => ;
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionMountedCargoTest-4: ${vehicleMsgs(3)}")
|
||||
}
|
||||
vehicleMsgs(4) match {
|
||||
case VehicleServiceMessage("test", VehicleAction.SendResponse(_, ObjectDetachMessage(PlanetSideGUID(2), PlanetSideGUID(1), _, _, _, _))) => ()
|
||||
case VehicleServiceMessage("test", _, VehicleAction.SendResponse(_, ObjectDetachMessage(PlanetSideGUID(2), PlanetSideGUID(1), _, _, _, _))) => ()
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionMountedCargoTest-5: ${vehicleMsgs(4)}")
|
||||
}
|
||||
vehicleMsgs(5) match {
|
||||
case VehicleServiceMessage("test", VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, _, PlanetSideGUID(1), 1, CargoStatus.Empty, 0))) => ()
|
||||
case VehicleServiceMessage("test", _, VehicleAction.SendResponse(_, CargoMountPointStatusMessage(PlanetSideGUID(2), _, _, PlanetSideGUID(1), 1, CargoStatus.Empty, 0))) => ()
|
||||
case _ =>
|
||||
assert(false, s"VehicleControlPrepareForDeletionMountedCargoTest-6: ${vehicleMsgs(5)}")
|
||||
}
|
||||
|
|
@ -476,7 +476,7 @@ class VehicleControlShieldsChargingTest extends ActorTest {
|
|||
vehicle.Actor ! CommonMessages.ChargeShields(15, None)
|
||||
val msg = probe.receiveOne(500 milliseconds)
|
||||
assert(msg match {
|
||||
case VehicleServiceMessage(_, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(10), 68, 15)) => true
|
||||
case VehicleServiceMessage(_, _, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(10), 68, 15)) => true
|
||||
case _ => false
|
||||
})
|
||||
assert(vehicle.Shields == 15)
|
||||
|
|
@ -544,7 +544,7 @@ class VehicleControlShieldsNotChargingTooEarlyTest extends ActorTest {
|
|||
val msg = probe.receiveOne(200 milliseconds)
|
||||
//assert(msg.isInstanceOf[Vehicle.UpdateShieldsCharge])
|
||||
assert(msg match {
|
||||
case VehicleServiceMessage(_, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(10), 68, 15)) => true
|
||||
case VehicleServiceMessage(_, _, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(10), 68, 15)) => true
|
||||
case _ => false
|
||||
})
|
||||
assert(vehicle.Shields == 15)
|
||||
|
|
@ -1004,7 +1004,7 @@ class VehicleControlInteractWithLavaTest extends ActorTest {
|
|||
msg_burn.foreach { msg =>
|
||||
assert(
|
||||
msg match {
|
||||
case VehicleServiceMessage("test-zone", VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(2), 0, _)) => true
|
||||
case VehicleServiceMessage("test-zone", _, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(2), 0, _)) => true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
|
|
@ -1102,7 +1102,7 @@ class ApcControlCanChargeCapacitor extends FreedContextActorTest {
|
|||
do {
|
||||
val msg = vehicleProbe.receiveOne(3.seconds)
|
||||
msg match {
|
||||
case VehicleServiceMessage(_, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(1), 113, capacitance)) =>
|
||||
case VehicleServiceMessage(_, _, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(1), 113, capacitance)) =>
|
||||
assert(capacitance > 0)
|
||||
case _ =>
|
||||
assert(false)
|
||||
|
|
@ -1176,17 +1176,17 @@ class ApcControlCanEmp extends FreedContextActorTest {
|
|||
apc.Actor ! SpecialEmp.Burst()
|
||||
val vehicleMsgs = vehicleProbe.receiveN(2, 500.milliseconds)
|
||||
vehicleMsgs.head match {
|
||||
case VehicleServiceMessage(_, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(1), 113, 0)) => ;
|
||||
case VehicleServiceMessage(_, _, VehicleAction.PlanetsideAttribute(_, PlanetSideGUID(1), 113, 0)) => ;
|
||||
case _ => assert(false)
|
||||
}
|
||||
vehicleMsgs(1) match {
|
||||
case VehicleServiceMessage(
|
||||
"test-zone",
|
||||
VehicleAction.SendResponse(
|
||||
_,
|
||||
TriggerEffectMessage(_, "apc_explosion_emp_vs", None, Some(TriggeredEffectLocation(Vector3.Zero, Vector3.Zero)))
|
||||
)
|
||||
) => ;
|
||||
"test-zone",
|
||||
_,
|
||||
VehicleAction.SendResponse(_,
|
||||
TriggerEffectMessage(_, "apc_explosion_emp_vs", None, Some(TriggeredEffectLocation(Vector3.Zero, Vector3.Zero)))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false)
|
||||
}
|
||||
assert(apc.Capacitor == 0)
|
||||
|
|
|
|||
|
|
@ -79,9 +79,9 @@ class OwnershipTest extends ActorTest {
|
|||
"pass Awareness" in {
|
||||
val service = system.actorOf(Props(classOf[VehicleService], Zone.Nowhere), "v-service")
|
||||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage("test", VehicleAction.Ownership(PlanetSideGUID(10), PlanetSideGUID(11)))
|
||||
service ! VehicleServiceMessage("test", PlanetSideGUID(10), VehicleAction.Ownership(PlanetSideGUID(11)))
|
||||
expectMsg(
|
||||
VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleResponse.Ownership(PlanetSideGUID(11)))
|
||||
VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleAction.Ownership(PlanetSideGUID(11)))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -96,13 +96,14 @@ class ChildObjectStateTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.ChildObjectState(PlanetSideGUID(10), PlanetSideGUID(11), 1.2f, 3.4f)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.ChildObjectState(PlanetSideGUID(11), 1.2f, 3.4f)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.ChildObjectState(PlanetSideGUID(11), 1.2f, 3.4f)
|
||||
VehicleAction.ChildObjectState(PlanetSideGUID(11), 1.2f, 3.4f)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -118,20 +119,14 @@ class DeployRequestTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.DeployRequest(
|
||||
PlanetSideGUID(10),
|
||||
PlanetSideGUID(11),
|
||||
DriveState.Mobile,
|
||||
0,
|
||||
false,
|
||||
Vector3(1.2f, 3.4f, 5.6f)
|
||||
)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.DeployRequest(PlanetSideGUID(11), DriveState.Mobile, 0, false, Vector3(1.2f, 3.4f, 5.6f))
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.DeployRequest(PlanetSideGUID(11), DriveState.Mobile, 0, false, Vector3(1.2f, 3.4f, 5.6f))
|
||||
VehicleAction.DeployRequest(PlanetSideGUID(11), DriveState.Mobile, 0, false, Vector3(1.2f, 3.4f, 5.6f))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -145,12 +140,12 @@ class DismountVehicleTest extends ActorTest {
|
|||
"pass DismountVehicle" in {
|
||||
val service = system.actorOf(Props(classOf[VehicleService], Zone.Nowhere), "v-service")
|
||||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage("test", VehicleAction.DismountVehicle(PlanetSideGUID(10), BailType.Normal, false))
|
||||
service ! VehicleServiceMessage("test", PlanetSideGUID(10), VehicleAction.DismountVehicle(BailType.Normal, false))
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.DismountVehicle(BailType.Normal, false)
|
||||
VehicleAction.DismountVehicle(BailType.Normal, false)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -169,13 +164,14 @@ class InventoryStateTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.InventoryState(PlanetSideGUID(10), tool, PlanetSideGUID(11), 0, cdata)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.InventoryState(tool, PlanetSideGUID(11), 0, cdata)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.InventoryState(tool, PlanetSideGUID(11), 0, cdata)
|
||||
VehicleAction.InventoryState(tool, PlanetSideGUID(11), 0, cdata)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -194,13 +190,14 @@ class InventoryState2Test extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.InventoryState2(PlanetSideGUID(10), PlanetSideGUID(11), PlanetSideGUID(12), 13)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.InventoryState2(PlanetSideGUID(11), PlanetSideGUID(12), 13)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.InventoryState2(PlanetSideGUID(11), PlanetSideGUID(12), 13)
|
||||
VehicleAction.InventoryState2(PlanetSideGUID(11), PlanetSideGUID(12), 13)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -216,13 +213,14 @@ class KickPassengerTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.KickPassenger(PlanetSideGUID(10), 0, false, PlanetSideGUID(11))
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.KickPassenger(0, false, PlanetSideGUID(11))
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.KickPassenger(0, false, PlanetSideGUID(11))
|
||||
VehicleAction.KickPassenger(0, false, PlanetSideGUID(11))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -241,13 +239,14 @@ class LoadVehicleTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.LoadVehicle(PlanetSideGUID(10), vehicle, 12, PlanetSideGUID(11), cdata)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.LoadVehicle(vehicle, 12, PlanetSideGUID(11), cdata)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.LoadVehicle(vehicle, 12, PlanetSideGUID(11), cdata)
|
||||
VehicleAction.LoadVehicle(vehicle, 12, PlanetSideGUID(11), cdata)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -261,9 +260,9 @@ class MountVehicleTest extends ActorTest {
|
|||
"pass MountVehicle" in {
|
||||
val service = system.actorOf(Props(classOf[VehicleService], Zone.Nowhere), "v-service")
|
||||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage("test", VehicleAction.MountVehicle(PlanetSideGUID(10), PlanetSideGUID(11), 0))
|
||||
service ! VehicleServiceMessage("test", VehicleAction.MountVehicle(PlanetSideGUID(11), 0))
|
||||
expectMsg(
|
||||
VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleResponse.MountVehicle(PlanetSideGUID(11), 0))
|
||||
VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleAction.MountVehicle(PlanetSideGUID(11), 0))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -278,13 +277,13 @@ class SeatPermissionsTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.SeatPermissions(PlanetSideGUID(10), PlanetSideGUID(11), 0, 12L)
|
||||
VehicleAction.SeatPermissions(PlanetSideGUID(11), 0, 12L)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.SeatPermissions(PlanetSideGUID(11), 0, 12L)
|
||||
VehicleAction.SeatPermissions(PlanetSideGUID(11), 0, 12L)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -305,13 +304,14 @@ class StowEquipmentTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.StowEquipment(PlanetSideGUID(10), PlanetSideGUID(11), 0, tool)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.StowEquipment(PlanetSideGUID(11), 0, tool)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.StowEquipment(PlanetSideGUID(11), 0, toolDef.ObjectId, tool.GUID, cdata)
|
||||
VehicleAction.StowEquipment(PlanetSideGUID(11), 0, toolDef.ObjectId, tool.GUID, cdata)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -325,9 +325,9 @@ class UnstowEquipmentTest extends ActorTest {
|
|||
"pass UnstowEquipment" in {
|
||||
val service = system.actorOf(Props(classOf[VehicleService], Zone.Nowhere), "v-service")
|
||||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage("test", VehicleAction.UnstowEquipment(PlanetSideGUID(10), PlanetSideGUID(11)))
|
||||
service ! VehicleServiceMessage("test", PlanetSideGUID(10), VehicleAction.UnstowEquipment(PlanetSideGUID(11)))
|
||||
expectMsg(
|
||||
VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleResponse.UnstowEquipment(PlanetSideGUID(11)))
|
||||
VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleAction.UnstowEquipment(PlanetSideGUID(11)))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -342,26 +342,13 @@ class VehicleStateTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.VehicleState(
|
||||
PlanetSideGUID(10),
|
||||
PlanetSideGUID(11),
|
||||
0,
|
||||
Vector3(1.2f, 3.4f, 5.6f),
|
||||
Vector3(7.8f, 9.1f, 2.3f),
|
||||
Some(Vector3(4.5f, 6.7f, 8.9f)),
|
||||
Option(1),
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
false,
|
||||
true
|
||||
)
|
||||
VehicleAction.VehicleState(PlanetSideGUID(11), 0, Vector3(1.2f, 3.4f, 5.6f), Vector3(7.8f, 9.1f, 2.3f), Some(Vector3(4.5f, 6.7f, 8.9f)), Option(1), 2, 3, 4, false, true)
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.VehicleState(
|
||||
VehicleAction.VehicleState(
|
||||
PlanetSideGUID(11),
|
||||
0,
|
||||
Vector3(1.2f, 3.4f, 5.6f),
|
||||
|
|
@ -391,19 +378,14 @@ class TransferPassengerChannelTest extends ActorTest {
|
|||
service ! Service.Join("test")
|
||||
service ! VehicleServiceMessage(
|
||||
"test",
|
||||
VehicleAction.TransferPassengerChannel(
|
||||
PlanetSideGUID(10),
|
||||
"old_channel",
|
||||
"new_channel",
|
||||
fury,
|
||||
PlanetSideGUID(11)
|
||||
)
|
||||
PlanetSideGUID(10),
|
||||
VehicleAction.TransferPassengerChannel("old_channel", "new_channel", fury, PlanetSideGUID(11))
|
||||
)
|
||||
expectMsg(
|
||||
VehicleServiceResponse(
|
||||
"/test/Vehicle",
|
||||
PlanetSideGUID(10),
|
||||
VehicleResponse.TransferPassengerChannel("old_channel", "new_channel", fury, PlanetSideGUID(11))
|
||||
VehicleAction.TransferPassengerChannel("old_channel", "new_channel", fury, PlanetSideGUID(11))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -418,7 +400,7 @@ class TransferPassengerChannelTest extends ActorTest {
|
|||
// val service = system.actorOf(Props[VehicleService], "v-service")
|
||||
// service ! Service.Join("test")
|
||||
// service ! VehicleServiceMessage("test", VehicleAction.TransferPassenger(PlanetSideGUID(10), "temp_channel", fury, PlanetSideGUID(11)))
|
||||
// expectMsg(VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleResponse.TransferPassenger("temp_channel", fury, PlanetSideGUID(11))))
|
||||
// expectMsg(VehicleServiceResponse("/test/Vehicle", PlanetSideGUID(10), VehicleAction.TransferPassenger("temp_channel", fury, PlanetSideGUID(11))))
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue