66
66
#include " packets/CConsoleEchoPacket.h"
67
67
#include " packets/CChatClearPacket.h"
68
68
#include " packets/CElementRPCPacket.h"
69
+ #include " packets/CVehicleInOutPacket.h"
69
70
#include " version.h"
70
71
#include < net/rpc_enums.h>
71
72
@@ -4352,6 +4353,28 @@ bool CStaticFunctionDefinitions::RemovePedFromVehicle(CElement* pElement)
4352
4353
auto ucOccupiedSeat = static_cast <unsigned char >(pPed->GetOccupiedVehicleSeat ());
4353
4354
if (pVehicle)
4354
4355
{
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
+
4355
4378
CLuaArguments Arguments;
4356
4379
Arguments.PushElement (pVehicle); // vehicle
4357
4380
Arguments.PushNumber (ucOccupiedSeat); // seat
@@ -4371,8 +4394,8 @@ bool CStaticFunctionDefinitions::RemovePedFromVehicle(CElement* pElement)
4371
4394
pVehicle->CallEvent (" onVehicleExit" , Arguments2);
4372
4395
4373
4396
// 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 );
4376
4399
pPed->SetVehicleAction (CPed::VEHICLEACTION_NONE);
4377
4400
4378
4401
// Tell the players
0 commit comments