diff --git a/src/main/scala/net/psforever/objects/serverobject/mount/MountableSpace.scala b/src/main/scala/net/psforever/objects/serverobject/mount/MountableSpace.scala index 0db8cd788..3b6d7b7e8 100644 --- a/src/main/scala/net/psforever/objects/serverobject/mount/MountableSpace.scala +++ b/src/main/scala/net/psforever/objects/serverobject/mount/MountableSpace.scala @@ -1,6 +1,7 @@ // Copyright (c) 2021 PSForever package net.psforever.objects.serverobject.mount +import net.psforever.objects.Player import net.psforever.types.BailType trait MountableSpace[A <: MountableEntity] { @@ -92,6 +93,10 @@ trait MountableSpace[A <: MountableEntity] { case Some(p) if testToUnmount(p) => _occupant = None p.BailProtection = bailable && (bailType == BailType.Bailed || bailType == BailType.Kicked) + p match { + case player: Player => + player.VehicleSeated = None + } None case _ => occupant diff --git a/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminalAwareBehavior.scala b/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminalAwareBehavior.scala index 231db45f6..3d638504d 100644 --- a/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminalAwareBehavior.scala +++ b/src/main/scala/net/psforever/objects/serverobject/terminals/capture/CaptureTerminalAwareBehavior.scala @@ -18,16 +18,27 @@ trait CaptureTerminalAwareBehavior { case true => ; // CC is resecured case false => // CC is hacked // Remove seated occupants for mountables - if (CaptureTerminalAwareObject.isInstanceOf[Mountable]) { - CaptureTerminalAwareObject.asInstanceOf[Mountable].Seats.filter(x => x._2.isOccupied).foreach(x => { - val (seat_num, seat) = x - val user = seat.occupant.get - CaptureTerminalAwareObject.Zone.VehicleEvents ! VehicleServiceMessage( - CaptureTerminalAwareObject.Zone.id, - VehicleAction.KickPassenger(user.GUID, seat_num, true, CaptureTerminalAwareObject.GUID) - ) - seat.unmount(user) - }) + CaptureTerminalAwareObject match { + case mountable: Mountable => + + val guid = mountable.GUID + val zone = mountable.Zone + val zoneId = zone.id + val events = zone.VehicleEvents + + mountable.Seats.values.zipWithIndex.foreach { + case (seat, seat_num) => + seat.occupant match { + case Some(player) => + seat.unmount(player) + player.VehicleSeated = None + if (player.HasGUID) { + events ! VehicleServiceMessage(zoneId, VehicleAction.KickPassenger(player.GUID, seat_num, true, guid)) + } + case None => ; + } + } + case _ => } } }