Skip to content

Commit

Permalink
fix(bridge/qb/client/functions): best effort vehicle property setter
Browse files Browse the repository at this point in the history
* feat(bridge/qb/client/functions): make best effort to set vehicle properties and warn if not entity owner

* gameBuild
  • Loading branch information
Manason authored Nov 16, 2023
1 parent b1307ff commit e40ad54
Showing 1 changed file with 357 additions and 1 deletion.
358 changes: 357 additions & 1 deletion bridge/qb/client/functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ function functions.GetVehicleProperties(vehicle)
return props
end

local gameBuild = GetGameBuildNumber()

---@deprecated use lib.setVehicleProperties from ox_lib
function functions.SetVehicleProperties(vehicle, props)
if props.tireHealth and not props.tyres then
Expand Down Expand Up @@ -255,7 +257,361 @@ function functions.SetVehicleProperties(vehicle, props)
props.modLightbar = props.modLightbar or props.modKit49
props.modRoofLivery = props.modRoofLivery or props.liveryRoof

return lib.setVehicleProperties(vehicle, props)

--- lib.setVehicleProperties copied and pasted from Overextended below so that we can remove the error so that setting properties is best effort
if not DoesEntityExist(vehicle) then
error(("Unable to set vehicle properties for '%s' (entity does not exist)"):
format(vehicle))
end

if NetworkGetEntityIsNetworked(vehicle) and NetworkGetEntityOwner(vehicle) ~= cache.playerId then
lib.print.warn('setting vehicle properties on non entity owner client. This may cause certain properties to fail to set. entity:', vehicle)
end

local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)

SetVehicleModKit(vehicle, 0)
-- SetVehicleAutoRepairDisabled(vehicle, true)

if props.extras then
for id, disable in pairs(props.extras) do
SetVehicleExtra(vehicle, tonumber(id) --[[@as number]], disable == 1)
end
end

if props.plate then
SetVehicleNumberPlateText(vehicle, props.plate)
end

if props.plateIndex then
SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
end

if props.bodyHealth then
SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
end

if props.engineHealth then
SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
end

if props.tankHealth then
SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0)
end

if props.fuelLevel then
SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
end

if props.oilLevel then
SetVehicleOilLevel(vehicle, props.oilLevel + 0.0)
end

if props.dirtLevel then
SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
end

if props.color1 then
if type(props.color1) == 'number' then
ClearVehicleCustomPrimaryColour(vehicle)
SetVehicleColours(vehicle, props.color1 --[[@as number]], colorSecondary --[[@as number]])
else
if props.paintType1 then SetVehicleModColor_1(vehicle, props.paintType1, colorPrimary, pearlescentColor) end

SetVehicleCustomPrimaryColour(vehicle, props.color1[1], props.color1[2], props.color1[3])
end
end

if props.color2 then
if type(props.color2) == 'number' then
ClearVehicleCustomSecondaryColour(vehicle)
SetVehicleColours(vehicle, props.color1 or colorPrimary --[[@as number]], props.color2 --[[@as number]])
else
if props.paintType2 then SetVehicleModColor_2(vehicle, props.paintType2, colorSecondary) end

SetVehicleCustomSecondaryColour(vehicle, props.color2[1], props.color2[2], props.color2[3])
end
end

if props.pearlescentColor or props.wheelColor then
SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor or wheelColor)
end

if props.interiorColor then
SetVehicleInteriorColor(vehicle, props.interiorColor)
end

if props.dashboardColor then
SetVehicleDashboardColor(vehicle, props.dashboardColor)
end

if props.wheels then
SetVehicleWheelType(vehicle, props.wheels)
end

if props.wheelSize then
SetVehicleWheelSize(vehicle, props.wheelSize)
end

if props.wheelWidth then
SetVehicleWheelWidth(vehicle, props.wheelWidth)
end

if props.windowTint then
SetVehicleWindowTint(vehicle, props.windowTint)
end

if props.neonEnabled then
for i = 1, #props.neonEnabled do
SetVehicleNeonLightEnabled(vehicle, i - 1, props.neonEnabled[i])
end
end

if props.windows then
for i = 1, #props.windows do
RemoveVehicleWindow(vehicle, props.windows[i])
end
end

if props.doors then
for i = 1, #props.doors do
SetVehicleDoorBroken(vehicle, props.doors[i], true)
end
end

if props.tyres then
for tyre, state in pairs(props.tyres) do
SetVehicleTyreBurst(vehicle, tonumber(tyre) --[[@as number]], state == 2, 1000.0)
end
end

if props.neonColor then
SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
end

if props.modSmokeEnabled ~= nil then
ToggleVehicleMod(vehicle, 20, props.modSmokeEnabled)
end

if props.tyreSmokeColor then
SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
end

if props.modSpoilers then
SetVehicleMod(vehicle, 0, props.modSpoilers, false)
end

if props.modFrontBumper then
SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
end

if props.modRearBumper then
SetVehicleMod(vehicle, 2, props.modRearBumper, false)
end

if props.modSideSkirt then
SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
end

if props.modExhaust then
SetVehicleMod(vehicle, 4, props.modExhaust, false)
end

if props.modFrame then
SetVehicleMod(vehicle, 5, props.modFrame, false)
end

if props.modGrille then
SetVehicleMod(vehicle, 6, props.modGrille, false)
end

if props.modHood then
SetVehicleMod(vehicle, 7, props.modHood, false)
end

if props.modFender then
SetVehicleMod(vehicle, 8, props.modFender, false)
end

if props.modRightFender then
SetVehicleMod(vehicle, 9, props.modRightFender, false)
end

if props.modRoof then
SetVehicleMod(vehicle, 10, props.modRoof, false)
end

if props.modEngine then
SetVehicleMod(vehicle, 11, props.modEngine, false)
end

if props.modBrakes then
SetVehicleMod(vehicle, 12, props.modBrakes, false)
end

if props.modTransmission then
SetVehicleMod(vehicle, 13, props.modTransmission, false)
end

if props.modHorns then
SetVehicleMod(vehicle, 14, props.modHorns, false)
end

if props.modSuspension then
SetVehicleMod(vehicle, 15, props.modSuspension, false)
end

if props.modArmor then
SetVehicleMod(vehicle, 16, props.modArmor, false)
end

if props.modNitrous then
SetVehicleMod(vehicle, 17, props.modNitrous, false)
end

if props.modTurbo ~= nil then
ToggleVehicleMod(vehicle, 18, props.modTurbo)
end

if props.modSubwoofer ~= nil then
ToggleVehicleMod(vehicle, 19, props.modSubwoofer)
end

if props.modHydraulics ~= nil then
ToggleVehicleMod(vehicle, 21, props.modHydraulics)
end

if props.modXenon ~= nil then
ToggleVehicleMod(vehicle, 22, props.modXenon)
end

if props.xenonColor then
SetVehicleXenonLightsColor(vehicle, props.xenonColor)
end

if props.modFrontWheels then
SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF)
end

if props.modBackWheels then
SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR)
end

if props.modPlateHolder then
SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
end

if props.modVanityPlate then
SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
end

if props.modTrimA then
SetVehicleMod(vehicle, 27, props.modTrimA, false)
end

if props.modOrnaments then
SetVehicleMod(vehicle, 28, props.modOrnaments, false)
end

if props.modDashboard then
SetVehicleMod(vehicle, 29, props.modDashboard, false)
end

if props.modDial then
SetVehicleMod(vehicle, 30, props.modDial, false)
end

if props.modDoorSpeaker then
SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
end

if props.modSeats then
SetVehicleMod(vehicle, 32, props.modSeats, false)
end

if props.modSteeringWheel then
SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
end

if props.modShifterLeavers then
SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
end

if props.modAPlate then
SetVehicleMod(vehicle, 35, props.modAPlate, false)
end

if props.modSpeakers then
SetVehicleMod(vehicle, 36, props.modSpeakers, false)
end

if props.modTrunk then
SetVehicleMod(vehicle, 37, props.modTrunk, false)
end

if props.modHydrolic then
SetVehicleMod(vehicle, 38, props.modHydrolic, false)
end

if props.modEngineBlock then
SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
end

if props.modAirFilter then
SetVehicleMod(vehicle, 40, props.modAirFilter, false)
end

if props.modStruts then
SetVehicleMod(vehicle, 41, props.modStruts, false)
end

if props.modArchCover then
SetVehicleMod(vehicle, 42, props.modArchCover, false)
end

if props.modAerials then
SetVehicleMod(vehicle, 43, props.modAerials, false)
end

if props.modTrimB then
SetVehicleMod(vehicle, 44, props.modTrimB, false)
end

if props.modTank then
SetVehicleMod(vehicle, 45, props.modTank, false)
end

if props.modWindows then
SetVehicleMod(vehicle, 46, props.modWindows, false)
end

if props.modDoorR then
SetVehicleMod(vehicle, 47, props.modDoorR, false)
end

if props.modLivery then
SetVehicleMod(vehicle, 48, props.modLivery, false)
SetVehicleLivery(vehicle, props.modLivery)
end

if props.modRoofLivery then
SetVehicleRoofLivery(vehicle, props.modRoofLivery)
end

if props.modLightbar then
SetVehicleMod(vehicle, 49, props.modLightbar, false)
end

if props.bulletProofTyres ~= nil then
SetVehicleTyresCanBurst(vehicle, props.bulletProofTyres)
end

if gameBuild >= 2372 and props.driftTyres then
SetDriftTyresEnabled(vehicle, true)
end

return true
end

---@deprecated use lib.requestNamedPtfxAsset from ox_lib
Expand Down

0 comments on commit e40ad54

Please sign in to comment.