From 24d5227c09a4f29564bffe2df27c3cf35a7557a0 Mon Sep 17 00:00:00 2001 From: drake Date: Sun, 26 Jul 2026 22:11:02 +0200 Subject: [PATCH] fix(server/state): update last occupant for given seat index even if it was taken already --- .../src/state/ServerGameState.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/code/components/citizen-server-impl/src/state/ServerGameState.cpp b/code/components/citizen-server-impl/src/state/ServerGameState.cpp index 3052fc9c35..7ac0977c57 100644 --- a/code/components/citizen-server-impl/src/state/ServerGameState.cpp +++ b/code/components/citizen-server-impl/src/state/ServerGameState.cpp @@ -2178,14 +2178,19 @@ void ServerGameState::UpdateEntities() lastVehicleData->playerOccupants.reset(vehicleData->lastVehicleSeat); } - if (curVehicleData && curVehicleData->occupants[vehicleData->curVehicleSeat] == 0) - { - curVehicleData->occupants[vehicleData->curVehicleSeat] = pedHandle; - curVehicleData->lastOccupant[vehicleData->curVehicleSeat] = pedHandle; - - if (entity->type == sync::NetObjEntityType::Player) + if (curVehicleData) + { + //set the last occupant even if the seat was not free + //will help to check for seat ejection + curVehicleData->lastOccupant[vehicleData->curVehicleSeat] = pedHandle; + if (curVehicleData->occupants[vehicleData->curVehicleSeat] == 0) { - curVehicleData->playerOccupants.set(vehicleData->curVehicleSeat); + curVehicleData->occupants[vehicleData->curVehicleSeat] = pedHandle; + + if (entity->type == sync::NetObjEntityType::Player) + { + curVehicleData->playerOccupants.set(vehicleData->curVehicleSeat); + } } }