6666#include " packets/CConsoleEchoPacket.h"
6767#include " packets/CChatClearPacket.h"
6868#include " packets/CElementRPCPacket.h"
69+ #include " packets/CVehicleInOutPacket.h"
6970#include " version.h"
7071#include < net/rpc_enums.h>
7172
@@ -4352,6 +4353,28 @@ bool CStaticFunctionDefinitions::RemovePedFromVehicle(CElement* pElement)
43524353 auto ucOccupiedSeat = static_cast <unsigned char >(pPed->GetOccupiedVehicleSeat ());
43534354 if (pVehicle)
43544355 {
4356+ unsigned int uiVehicleAction = pPed->GetVehicleAction ();
4357+
4358+ // Handle mid-enter/exit states
4359+ if (uiVehicleAction == CPed::VEHICLEACTION_ENTERING || uiVehicleAction == CPed::VEHICLEACTION_JACKING)
4360+ {
4361+ pVehicle->SetOccupant (nullptr , ucOccupiedSeat);
4362+ pPed->SetOccupiedVehicle (nullptr , 0 );
4363+ pPed->SetVehicleAction (CPed::VEHICLEACTION_NONE);
4364+
4365+ if (uiVehicleAction == CPed::VEHICLEACTION_JACKING)
4366+ pPed->SetJackingVehicle (nullptr );
4367+
4368+ // Clean up client handshake
4369+ if (IS_PLAYER (pPed))
4370+ {
4371+ CVehicleInOutPacket Reply (pPed->GetID (), pVehicle->GetID (), ucOccupiedSeat, CGame::VEHICLE_NOTIFY_IN_ABORT_RETURN);
4372+ m_pPlayerManager->BroadcastOnlyJoined (Reply);
4373+ }
4374+
4375+ return true ;
4376+ }
4377+
43554378 CLuaArguments Arguments;
43564379 Arguments.PushElement (pVehicle); // vehicle
43574380 Arguments.PushNumber (ucOccupiedSeat); // seat
@@ -4371,8 +4394,8 @@ bool CStaticFunctionDefinitions::RemovePedFromVehicle(CElement* pElement)
43714394 pVehicle->CallEvent (" onVehicleExit" , Arguments2);
43724395
43734396 // Remove him from the vehicle
4374- pVehicle->SetOccupant (NULL , ucOccupiedSeat);
4375- pPed->SetOccupiedVehicle (NULL , 0 );
4397+ pVehicle->SetOccupant (nullptr , ucOccupiedSeat);
4398+ pPed->SetOccupiedVehicle (nullptr , 0 );
43764399 pPed->SetVehicleAction (CPed::VEHICLEACTION_NONE);
43774400
43784401 // Tell the players
0 commit comments