diff --git a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala index bd56e9f8f..9ab353d4c 100644 --- a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala +++ b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala @@ -119,10 +119,7 @@ object MiddlewareActor { packet.isInstanceOf[CharacterInfoMessage] } - /** - * `KeepAliveMessage` packets are bundled by themselves. - * They're special. - */ + /** `KeepAliveMessage` packets are bundled by themselves. They're special. */ def keepAliveMessageGuard(packet: PlanetSidePacket): Boolean = { packet.isInstanceOf[KeepAliveMessage] } diff --git a/src/main/scala/net/psforever/actors/session/SessionActor.scala b/src/main/scala/net/psforever/actors/session/SessionActor.scala index f29757b02..98b3a5fd1 100644 --- a/src/main/scala/net/psforever/actors/session/SessionActor.scala +++ b/src/main/scala/net/psforever/actors/session/SessionActor.scala @@ -3655,7 +3655,9 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con } } accessedContainer match { - case Some(veh: Vehicle) => + // Ensure we don't unload the contents of the vehicle trunk for players seated in the vehicle. + // This can happen if PSUM arrives during the mounting process + case Some(veh: Vehicle) if player.VehicleSeated.isEmpty || player.VehicleSeated.get != veh.GUID => if ( isMoving || veh.isMoving(1) || Vector3.DistanceSquared( player.Position, @@ -3668,7 +3670,7 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con UnaccessContainer(veh) } case Some(container) => //just in case - if (isMovingPlus) { + if (isMovingPlus && (player.VehicleSeated.isEmpty || player.VehicleSeated.get != container.GUID)) { // Ensure we don't close the container if the player is seated in it val guid = player.GUID // If the container is a corpse and gets removed just as this runs it can cause a client disconnect, so we'll check the container has a GUID first. if (container.HasGUID) {