Skip to content

Commit

Permalink
Fix a desync state after aborted carjacking (PR #3112)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zangomangu committed Aug 1, 2023
1 parent cee32d7 commit 3f510fc
Showing 1 changed file with 26 additions and 3 deletions.
29 changes: 26 additions & 3 deletions Client/mods/deathmatch/logic/CPacketHandler.cpp
Expand Up @@ -1777,9 +1777,32 @@ void CPacketHandler::Packet_Vehicle_InOut(NetBitStreamInterface& bitStream)
CClientPed* pJacked = pVehicle->GetOccupant(ucSeat);

// If it's the local player or syncing ped getting jacked, reset some stuff
if (pJacked && (pJacked->IsLocalPlayer() || pJacked->IsSyncing()))
{
pJacked->ResetVehicleInOut();
if (pJacked) {
if (pJacked->IsLocalPlayer() || pJacked->IsSyncing()) {
pJacked->ResetVehicleInOut();
}
else {
// Desynced? Outside but supposed to be in
// For local player or synced peds this is taken care of in CClientPed::UpdateVehicleInOut()
if (pJacked->GetOccupiedVehicle() && !pJacked->GetRealOccupiedVehicle()) {
// Warp him back in
pJacked->WarpIntoVehicle(pJacked->GetOccupiedVehicle(), pJacked->GetOccupiedVehicleSeat());

// For bikes and cars where jacked through passenger door, warp the passenger back in if desynced
if (ucSeat == 0) {
CClientPed* pPassenger = pJacked->GetOccupiedVehicle()->GetOccupant(1);
// Is the passenger a remote player or ped and is he physically outside but supposed to be in
if (pPassenger &&
!pPassenger->IsLocalPlayer() &&
!pPassenger->IsSyncing() &&
pPassenger->GetOccupiedVehicle() &&
!pPassenger->GetRealOccupiedVehicle())
{
pPassenger->WarpIntoVehicle(pPassenger->GetOccupiedVehicle(), pPassenger->GetOccupiedVehicleSeat());
}
}
}
}
}
}

Expand Down

0 comments on commit 3f510fc

Please sign in to comment.