Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions Server/mods/deathmatch/logic/CUnoccupiedVehicleSync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -485,21 +485,22 @@ void CUnoccupiedVehicleSync::Packet_UnoccupiedVehiclePushSync(CUnoccupiedVehicle
{
// Convert to a CVehicle
CVehicle* pVehicle = static_cast<CVehicle*>(pVehicleElement);
// Is the player syncing this vehicle and there is no driver? Also only process
// this packet if the time context matches.
if (pVehicle->GetSyncer() != pPlayer && pVehicle->GetTimeSinceLastPush() >= MIN_PUSH_ANTISPAM_RATE &&

CPlayer* pSyncer = pVehicle->GetSyncer();
const bool bCanClaimSync = !pSyncer || (!IsSyncerPersistent() && pPlayer->GetContactElement() == pVehicle);

// Push sync is collision-driven, but the packet only carries a vehicle ID.
// Require server-accepted contact before replacing an existing syncer.
if (pVehicle->IsUnoccupiedSyncable() && pSyncer != pPlayer && bCanClaimSync && pVehicle->GetTimeSinceLastPush() >= MIN_PUSH_ANTISPAM_RATE &&
IsPointNearPoint3D(pVehicle->GetPosition(), pPlayer->GetPosition(), static_cast<float>(g_TickRateSettings.iVehicleContactSyncRadius)) &&
pVehicle->GetDimension() == pPlayer->GetDimension())
{
// Is there no player driver?
CPed* pOccupant = pVehicle->GetOccupant(0);
if (!pOccupant || !IS_PLAYER(pOccupant))
{
// Change our syncer
if (!pVehicle->GetSyncer() || !IsSyncerPersistent())
{
OverrideSyncer(pVehicle, pPlayer);
}
// Assign the pusher as syncer.
OverrideSyncer(pVehicle, pPlayer);

// Reset our push time
pVehicle->ResetLastPushTime();
Expand Down
Loading