diff --git a/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala index 905d2ca01..7f5004529 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionMountHandlers.scala @@ -7,7 +7,8 @@ import net.psforever.objects.serverobject.interior.Sidedness.OutsideOf 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, InventoryStateMessage, MountVehicleCargoMsg, MountVehicleMsg, ObjectAttachMessage} +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} // @@ -197,8 +198,23 @@ class SessionMountHandlers( * @param seatNum the mount out of which which the player is disembarking */ def DismountVehicleAction(tplayer: Player, obj: PlanetSideGameObject with FactionAffinity with InGameHistory, seatNum: Int): Unit = { - DismountAction(tplayer, obj, seatNum) tplayer.WhichSide = OutsideOf + if (tplayer.BailProtection) { + tplayer.ContributionFrom(obj) + sessionLogic.keepAliveFunc = sessionLogic.zoning.NormalKeepAlive + continent.VehicleEvents ! VehicleServiceMessage( + continent.id, + VehicleAction.SendResponse(Service.defaultPlayerGUID, PlanetsideAttributeMessage(obj.GUID, 81, 1)) + ) + continent.VehicleEvents ! VehicleServiceMessage( + continent.id, + VehicleAction.SendResponse(Service.defaultPlayerGUID, ObjectDetachMessage(obj.GUID, tplayer.GUID, tplayer.Position, obj.Orientation)) + ) + } + else { + sendResponse(GenericObjectActionMessage(obj.GUID, 24)) + DismountAction(tplayer, obj, seatNum) + } //until vehicles maintain synchronized momentum without a driver obj match { case v: Vehicle diff --git a/src/main/scala/net/psforever/objects/zones/Zone.scala b/src/main/scala/net/psforever/objects/zones/Zone.scala index b01b2604b..1caf87d72 100644 --- a/src/main/scala/net/psforever/objects/zones/Zone.scala +++ b/src/main/scala/net/psforever/objects/zones/Zone.scala @@ -664,9 +664,9 @@ class Zone(val id: String, val map: ZoneMap, zoneNumber: Int) { PlanetSideEmpire.NC -> Set(7, 10) ) val homePerks: Map[PlanetSideEmpire.Value, String] = Map( - PlanetSideEmpire.TR -> "battlewagon prowler threemanheavybuggy", - PlanetSideEmpire.VS -> "magrider twomanhoverbuggy aurora", - PlanetSideEmpire.NC -> "thunderer twomanheavybuggy vanguard" + PlanetSideEmpire.TR -> "battlewagon 15mmbullet prowler 105mmbullet threemanheavybuggy heavy_grenade_mortar apc_tr", + PlanetSideEmpire.VS -> "magrider pulse_battery heavy_rail_beam_battery twomanhoverbuggy flux_cannon_thresher_battery aurora fluxpod_ammo apc_vs", + PlanetSideEmpire.NC -> "thunderer gauss_cannon_ammo twomanheavybuggy firebird_missile vanguard 150mmbullet apc_nc" ) def isLockedBy(homeSet: Set[Int], empire: PlanetSideEmpire.Value): Boolean = @@ -702,9 +702,9 @@ class Zone(val id: String, val map: ZoneMap, zoneNumber: Int) { PlanetSideEmpire.NC -> Set(7, 10) ) val homePerks: Map[PlanetSideEmpire.Value, String] = Map( - PlanetSideEmpire.TR -> "battlewagon prowler threemanheavybuggy", - PlanetSideEmpire.VS -> "magrider twomanhoverbuggy aurora", - PlanetSideEmpire.NC -> "thunderer twomanheavybuggy vanguard" + PlanetSideEmpire.TR -> "battlewagon 15mmbullet prowler 105mmbullet threemanheavybuggy heavy_grenade_mortar apc_tr", + PlanetSideEmpire.VS -> "magrider pulse_battery heavy_rail_beam_battery twomanhoverbuggy flux_cannon_thresher_battery aurora fluxpod_ammo apc_vs", + PlanetSideEmpire.NC -> "thunderer gauss_cannon_ammo twomanheavybuggy firebird_missile vanguard 150mmbullet apc_nc" ) def isLockedBy(homeSet: Set[Int], empire: PlanetSideEmpire.Value): Boolean = diff --git a/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala b/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala index 87f94fb5f..5a6a64231 100644 --- a/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala +++ b/src/main/scala/net/psforever/packet/game/PlanetsideAttributeMessage.scala @@ -201,7 +201,7 @@ import scodec.codecs._ * `68 - Vehicle shield health`
* `79 - ???`
* `80 - Damage vehicle (unknown value)`
- * `81 - ???`
+ * `81 - Player bailed from vehicle, causes bail animation `
* `113 - Vehicle capacitor - e.g. Leviathan EMP charge` * @param guid the object * @param attribute_type the field