mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 15:06:02 +01:00
Hello, I’d like to propose a small improvement to vehicle properties handling. This change adds support for the vehicle door lock state (lockState) by: - Including lockState in the VehicleProperties type - Reading the value using GetVehicleDoorLockStatus in getVehicleProperties - Applying the value using SetVehicleDoorsLocked in setVehicleProperties This allows vehicle lock status to be properly saved and restored alongside other vehicle properties. Let me know if this fits the project direction or if any adjustments are needed. This allows the vehicle lock status to be properly saved and restored alongside other vehicle properties. Note: Two additional commits and pull requests were accidentally opened during this process and have already been closed. Sorry for the noise. Thank you! Signed-off-by: Angelo Rodrigues De Morais Barroso <115129101+Angelo90810@users.noreply.github.com>
663 lines
21 KiB
Lua
663 lines
21 KiB
Lua
--[[
|
|
https://github.com/overextended/ox_lib
|
|
|
|
This file is licensed under LGPL-3.0 or higher <https://www.gnu.org/licenses/lgpl-3.0.en.html>
|
|
|
|
Copyright © 2025 Linden <https://github.com/thelindat>
|
|
]]
|
|
|
|
if cache.game == 'redm' then return end
|
|
|
|
---@class VehicleProperties
|
|
---@field model? number
|
|
---@field plate? string
|
|
---@field plateIndex? number
|
|
---@field lockState? number
|
|
---@field bodyHealth? number
|
|
---@field engineHealth? number
|
|
---@field tankHealth? number
|
|
---@field fuelLevel? number
|
|
---@field oilLevel? number
|
|
---@field dirtLevel? number
|
|
---@field paintType1? number
|
|
---@field paintType2? number
|
|
---@field color1? number | number[]
|
|
---@field color2? number | number[]
|
|
---@field pearlescentColor? number
|
|
---@field interiorColor? number
|
|
---@field dashboardColor? number
|
|
---@field wheelColor? number
|
|
---@field wheelWidth? number
|
|
---@field wheelSize? number
|
|
---@field wheels? number
|
|
---@field windowTint? number
|
|
---@field xenonColor? number
|
|
---@field neonEnabled? boolean[]
|
|
---@field neonColor? number | number[]
|
|
---@field extras? table<number | string, 0 | 1>
|
|
---@field tyreSmokeColor? number | number[]
|
|
---@field modSpoilers? number
|
|
---@field modFrontBumper? number
|
|
---@field modRearBumper? number
|
|
---@field modSideSkirt? number
|
|
---@field modExhaust? number
|
|
---@field modFrame? number
|
|
---@field modGrille? number
|
|
---@field modHood? number
|
|
---@field modFender? number
|
|
---@field modRightFender? number
|
|
---@field modRoof? number
|
|
---@field modEngine? number
|
|
---@field modBrakes? number
|
|
---@field modTransmission? number
|
|
---@field modHorns? number
|
|
---@field modSuspension? number
|
|
---@field modArmor? number
|
|
---@field modNitrous? number
|
|
---@field modTurbo? boolean
|
|
---@field modSubwoofer? boolean
|
|
---@field modSmokeEnabled? boolean
|
|
---@field modHydraulics? boolean
|
|
---@field modXenon? boolean
|
|
---@field modFrontWheels? number
|
|
---@field modBackWheels? number
|
|
---@field modCustomTiresF? boolean
|
|
---@field modCustomTiresR? boolean
|
|
---@field modPlateHolder? number
|
|
---@field modVanityPlate? number
|
|
---@field modTrimA? number
|
|
---@field modOrnaments? number
|
|
---@field modDashboard? number
|
|
---@field modDial? number
|
|
---@field modDoorSpeaker? number
|
|
---@field modSeats? number
|
|
---@field modSteeringWheel? number
|
|
---@field modShifterLeavers? number
|
|
---@field modAPlate? number
|
|
---@field modSpeakers? number
|
|
---@field modTrunk? number
|
|
---@field modHydrolic? number
|
|
---@field modEngineBlock? number
|
|
---@field modAirFilter? number
|
|
---@field modStruts? number
|
|
---@field modArchCover? number
|
|
---@field modAerials? number
|
|
---@field modTrimB? number
|
|
---@field modTank? number
|
|
---@field modWindows? number
|
|
---@field modDoorR? number
|
|
---@field modLivery? number
|
|
---@field modRoofLivery? number
|
|
---@field modLightbar? number
|
|
---@field livery? number
|
|
---@field windows? number[]
|
|
---@field doors? number[]
|
|
---@field tyres? table<number | string, 1 | 2>
|
|
---@field bulletProofTyres? boolean
|
|
---@field driftTyres? boolean
|
|
|
|
---@deprecated
|
|
---Not recommended. Entity owners can change rapidly and sporadically.
|
|
RegisterNetEvent('ox_lib:setVehicleProperties', function(netid, data)
|
|
local timeout = 100
|
|
while not NetworkDoesEntityExistWithNetworkId(netid) and timeout > 0 do
|
|
Wait(0)
|
|
timeout -= 1
|
|
end
|
|
if timeout > 0 then
|
|
lib.setVehicleProperties(NetToVeh(netid), data)
|
|
end
|
|
end)
|
|
|
|
AddStateBagChangeHandler('ox_lib:setVehicleProperties', '', function(bagName, _, value)
|
|
if not value or not GetEntityFromStateBagName then return end
|
|
|
|
while NetworkIsInTutorialSession() do Wait(0) end
|
|
|
|
local entityExists, entity = pcall(lib.waitFor, function()
|
|
local entity = GetEntityFromStateBagName(bagName)
|
|
|
|
if entity > 0 then return entity end
|
|
end, '', 10000)
|
|
|
|
if not entityExists then return end
|
|
|
|
lib.setVehicleProperties(entity, value)
|
|
Wait(200)
|
|
|
|
-- this delay and second-setting of vehicle properties hopefully counters the
|
|
-- weird sync/ownership/shitfuckery when setting props on server-side vehicles
|
|
if NetworkGetEntityOwner(entity) == cache.playerId then
|
|
lib.setVehicleProperties(entity, value)
|
|
Entity(entity).state:set('ox_lib:setVehicleProperties', nil, true)
|
|
end
|
|
end)
|
|
|
|
local gameBuild = GetGameBuildNumber()
|
|
|
|
---@param vehicle number
|
|
---@return VehicleProperties?
|
|
function lib.getVehicleProperties(vehicle)
|
|
if DoesEntityExist(vehicle) then
|
|
---@type number | number[], number | number[]
|
|
local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
|
|
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
|
|
local paintType1 = GetVehicleModColor_1(vehicle)
|
|
local paintType2 = GetVehicleModColor_2(vehicle)
|
|
|
|
if GetIsVehiclePrimaryColourCustom(vehicle) then
|
|
colorPrimary = { GetVehicleCustomPrimaryColour(vehicle) }
|
|
end
|
|
|
|
if GetIsVehicleSecondaryColourCustom(vehicle) then
|
|
colorSecondary = { GetVehicleCustomSecondaryColour(vehicle) }
|
|
end
|
|
|
|
local extras = {}
|
|
|
|
for i = 1, 15 do
|
|
if DoesExtraExist(vehicle, i) then
|
|
extras[i] = IsVehicleExtraTurnedOn(vehicle, i) and 0 or 1
|
|
end
|
|
end
|
|
|
|
local damage = {
|
|
windows = {},
|
|
doors = {},
|
|
tyres = {},
|
|
}
|
|
|
|
local windows = 0
|
|
|
|
for i = 0, 7 do
|
|
RollUpWindow(vehicle, i)
|
|
|
|
if not IsVehicleWindowIntact(vehicle, i) then
|
|
windows += 1
|
|
damage.windows[windows] = i
|
|
end
|
|
end
|
|
|
|
local doors = 0
|
|
|
|
for i = 0, 5 do
|
|
if IsVehicleDoorDamaged(vehicle, i) then
|
|
doors += 1
|
|
damage.doors[doors] = i
|
|
end
|
|
end
|
|
|
|
for i = 0, 7 do
|
|
if IsVehicleTyreBurst(vehicle, i, false) then
|
|
damage.tyres[i] = IsVehicleTyreBurst(vehicle, i, true) and 2 or 1
|
|
end
|
|
end
|
|
|
|
local neons = {}
|
|
|
|
for i = 0, 3 do
|
|
neons[i + 1] = IsVehicleNeonLightEnabled(vehicle, i)
|
|
end
|
|
|
|
return {
|
|
model = GetEntityModel(vehicle),
|
|
plate = GetVehicleNumberPlateText(vehicle),
|
|
plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
|
|
lockState = GetVehicleDoorLockStatus(vehicle),
|
|
bodyHealth = math.floor(GetVehicleBodyHealth(vehicle) + 0.5),
|
|
engineHealth = math.floor(GetVehicleEngineHealth(vehicle) + 0.5),
|
|
tankHealth = math.floor(GetVehiclePetrolTankHealth(vehicle) + 0.5),
|
|
fuelLevel = math.floor(GetVehicleFuelLevel(vehicle) + 0.5),
|
|
oilLevel = math.floor(GetVehicleOilLevel(vehicle) + 0.5),
|
|
dirtLevel = math.floor(GetVehicleDirtLevel(vehicle) + 0.5),
|
|
paintType1 = paintType1,
|
|
paintType2 = paintType2,
|
|
color1 = colorPrimary,
|
|
color2 = colorSecondary,
|
|
pearlescentColor = pearlescentColor,
|
|
interiorColor = GetVehicleInteriorColor(vehicle),
|
|
dashboardColor = GetVehicleDashboardColour(vehicle),
|
|
wheelColor = wheelColor,
|
|
wheelWidth = GetVehicleWheelWidth(vehicle),
|
|
wheelSize = GetVehicleWheelSize(vehicle),
|
|
wheels = GetVehicleWheelType(vehicle),
|
|
windowTint = GetVehicleWindowTint(vehicle),
|
|
xenonColor = GetVehicleXenonLightsColor(vehicle),
|
|
neonEnabled = neons,
|
|
neonColor = { GetVehicleNeonLightsColour(vehicle) },
|
|
extras = extras,
|
|
tyreSmokeColor = { GetVehicleTyreSmokeColor(vehicle) },
|
|
modSpoilers = GetVehicleMod(vehicle, 0),
|
|
modFrontBumper = GetVehicleMod(vehicle, 1),
|
|
modRearBumper = GetVehicleMod(vehicle, 2),
|
|
modSideSkirt = GetVehicleMod(vehicle, 3),
|
|
modExhaust = GetVehicleMod(vehicle, 4),
|
|
modFrame = GetVehicleMod(vehicle, 5),
|
|
modGrille = GetVehicleMod(vehicle, 6),
|
|
modHood = GetVehicleMod(vehicle, 7),
|
|
modFender = GetVehicleMod(vehicle, 8),
|
|
modRightFender = GetVehicleMod(vehicle, 9),
|
|
modRoof = GetVehicleMod(vehicle, 10),
|
|
modEngine = GetVehicleMod(vehicle, 11),
|
|
modBrakes = GetVehicleMod(vehicle, 12),
|
|
modTransmission = GetVehicleMod(vehicle, 13),
|
|
modHorns = GetVehicleMod(vehicle, 14),
|
|
modSuspension = GetVehicleMod(vehicle, 15),
|
|
modArmor = GetVehicleMod(vehicle, 16),
|
|
modNitrous = GetVehicleMod(vehicle, 17),
|
|
modTurbo = IsToggleModOn(vehicle, 18),
|
|
modSubwoofer = GetVehicleMod(vehicle, 19),
|
|
modSmokeEnabled = IsToggleModOn(vehicle, 20),
|
|
modHydraulics = IsToggleModOn(vehicle, 21),
|
|
modXenon = IsToggleModOn(vehicle, 22),
|
|
modFrontWheels = GetVehicleMod(vehicle, 23),
|
|
modBackWheels = GetVehicleMod(vehicle, 24),
|
|
modCustomTiresF = GetVehicleModVariation(vehicle, 23),
|
|
modCustomTiresR = GetVehicleModVariation(vehicle, 24),
|
|
modPlateHolder = GetVehicleMod(vehicle, 25),
|
|
modVanityPlate = GetVehicleMod(vehicle, 26),
|
|
modTrimA = GetVehicleMod(vehicle, 27),
|
|
modOrnaments = GetVehicleMod(vehicle, 28),
|
|
modDashboard = GetVehicleMod(vehicle, 29),
|
|
modDial = GetVehicleMod(vehicle, 30),
|
|
modDoorSpeaker = GetVehicleMod(vehicle, 31),
|
|
modSeats = GetVehicleMod(vehicle, 32),
|
|
modSteeringWheel = GetVehicleMod(vehicle, 33),
|
|
modShifterLeavers = GetVehicleMod(vehicle, 34),
|
|
modAPlate = GetVehicleMod(vehicle, 35),
|
|
modSpeakers = GetVehicleMod(vehicle, 36),
|
|
modTrunk = GetVehicleMod(vehicle, 37),
|
|
modHydrolic = GetVehicleMod(vehicle, 38),
|
|
modEngineBlock = GetVehicleMod(vehicle, 39),
|
|
modAirFilter = GetVehicleMod(vehicle, 40),
|
|
modStruts = GetVehicleMod(vehicle, 41),
|
|
modArchCover = GetVehicleMod(vehicle, 42),
|
|
modAerials = GetVehicleMod(vehicle, 43),
|
|
modTrimB = GetVehicleMod(vehicle, 44),
|
|
modTank = GetVehicleMod(vehicle, 45),
|
|
modWindows = GetVehicleMod(vehicle, 46),
|
|
modDoorR = GetVehicleMod(vehicle, 47),
|
|
modLivery = GetVehicleMod(vehicle, 48),
|
|
modRoofLivery = GetVehicleRoofLivery(vehicle),
|
|
modLightbar = GetVehicleMod(vehicle, 49),
|
|
livery = GetVehicleLivery(vehicle),
|
|
windows = damage.windows,
|
|
doors = damage.doors,
|
|
tyres = damage.tyres,
|
|
bulletProofTyres = GetVehicleTyresCanBurst(vehicle),
|
|
driftTyres = gameBuild >= 2372 and GetDriftTyresEnabled(vehicle),
|
|
-- no setters?
|
|
-- leftHeadlight = GetIsLeftVehicleHeadlightDamaged(vehicle),
|
|
-- rightHeadlight = GetIsRightVehicleHeadlightDamaged(vehicle),
|
|
-- frontBumper = IsVehicleBumperBrokenOff(vehicle, true),
|
|
-- rearBumper = IsVehicleBumperBrokenOff(vehicle, false),
|
|
}
|
|
end
|
|
end
|
|
|
|
---@param vehicle number
|
|
---@param props VehicleProperties
|
|
---@param fixVehicle? boolean Fix the vehicle after props have been set. Usually required when adding extras.
|
|
---@return boolean isEntityOwner True if the entity is networked and the client is the current entity owner.
|
|
function lib.setVehicleProperties(vehicle, props, fixVehicle)
|
|
if not DoesEntityExist(vehicle) then
|
|
error(("Unable to set vehicle properties for '%s' (entity does not exist)"):format(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.lockState ~= nil then
|
|
SetVehicleDoorsLocked(vehicle, props.lockState)
|
|
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, 0, props.pearlescentColor or 0) 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, 0) 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)
|
|
end
|
|
|
|
if props.modRoofLivery then
|
|
SetVehicleRoofLivery(vehicle, props.modRoofLivery)
|
|
end
|
|
|
|
if props.modLightbar then
|
|
SetVehicleMod(vehicle, 49, props.modLightbar, false)
|
|
end
|
|
|
|
if props.livery then
|
|
SetVehicleLivery(vehicle, props.livery)
|
|
end
|
|
|
|
if props.bulletProofTyres ~= nil then
|
|
SetVehicleTyresCanBurst(vehicle, props.bulletProofTyres)
|
|
end
|
|
|
|
if gameBuild >= 2372 and props.driftTyres then
|
|
SetDriftTyresEnabled(vehicle, true)
|
|
end
|
|
|
|
if fixVehicle then
|
|
SetVehicleFixed(vehicle)
|
|
end
|
|
|
|
return not NetworkGetEntityIsNetworked(vehicle) or NetworkGetEntityOwner(vehicle) == cache.playerId
|
|
end
|