void CRemotePlayer::UpdateSurfing() { if ( m_ofSync.wSurfInfo > MAX_VEHICLES ) { // its an object m_ofSync.wSurfInfo -= MAX_VEHICLES; // derive proper object id CObjectPool* pObjectPool = pNetGame->GetObjectPool(); CObject* pObject = pObjectPool->GetAt((BYTE)m_ofSync.wSurfInfo); if (pObject) { MATRIX4X4 objMat; pObject->GetMatrix(&objMat); objMat.pos.X += m_ofSync.vecSurfOffsets.X; objMat.pos.Y += m_ofSync.vecSurfOffsets.Y; objMat.pos.Z += m_ofSync.vecSurfOffsets.Z; m_pPlayerPed->SetMatrix(objMat); } } else { // must be a vehicle CVehiclePool* pVehiclePool = pNetGame->GetVehiclePool(); CVehicle* pVehicle = pVehiclePool->GetAt(m_ofSync.wSurfInfo); if (pVehicle) { MATRIX4X4 matPlayer, matVehicle; VECTOR vecMoveSpeed,vecTurnSpeed; pVehicle->GetMatrix(&matVehicle); pVehicle->GetMoveSpeedVector(&vecMoveSpeed); pVehicle->GetTurnSpeedVector(&vecTurnSpeed); m_pPlayerPed->GetMatrix(&matPlayer); matPlayer.pos.X = matVehicle.pos.X + m_ofSync.vecSurfOffsets.X; matPlayer.pos.Y = matVehicle.pos.Y + m_ofSync.vecSurfOffsets.Y; matPlayer.pos.Z = matVehicle.pos.Z + m_ofSync.vecSurfOffsets.Z; m_pPlayerPed->SetMatrix(matPlayer); m_pPlayerPed->SetMoveSpeedVector(vecMoveSpeed); //m_pPlayerPed->SetTurnSpeedVector(vecTurnSpeed); } } }