Skip to content

Commit 3ec9b5c

Browse files
authored
Fix network desync when removePedFromVehicle called during vehicle enter (#1519) (#4450)
Add vehicle action handling
1 parent 0787b59 commit 3ec9b5c

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
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

Comments
 (0)