From f7ef019d26626bb93299b87792abbf3e3ca43353 Mon Sep 17 00:00:00 2001 From: ItsANoBrainer Date: Thu, 27 Jan 2022 14:32:14 -0500 Subject: [PATCH 1/6] [Update] Missing Vehicle Properties Added proper support for missing or unfinished vehicle property saving/getting: - neons enabled/disabled - tire health - tire burst state - tire burst completely - oil level - wheel size - wheel width - headlight color - interior color - modkit 17, 19, 21, 47, 49 - livery roof - tankHealth - Set LegacyFuel on setting fuel level --- client/events.lua | 2 + client/functions.lua | 112 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 101 insertions(+), 13 deletions(-) diff --git a/client/events.lua b/client/events.lua index 82d93b4..59a5a1a 100644 --- a/client/events.lua +++ b/client/events.lua @@ -61,7 +61,9 @@ RegisterNetEvent('QBCore:Command:SpawnVehicle', function(vehName) end local vehicle = CreateVehicle(hash, GetEntityCoords(ped), GetEntityHeading(ped), true, false) TaskWarpPedIntoVehicle(ped, vehicle, -1) + exports['LegacyFuel']:SetFuel(vehicle, 100) SetModelAsNoLongerNeeded(vehicle) + TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(vehicle)) end) diff --git a/client/functions.lua b/client/functions.lua index 87a5887..422dd38 100644 --- a/client/functions.lua +++ b/client/functions.lua @@ -364,7 +364,7 @@ end -- Vehicle -function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked) +function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked, teleportInto) local model = GetHashKey(model) local ped = PlayerPedId() if coords then @@ -387,6 +387,8 @@ function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked) SetVehicleNeedsToBeHotwired(veh, false) SetVehRadioStation(veh, 'OFF') SetModelAsNoLongerNeeded(model) + exports['LegacyFuel']:SetFuel(veh, 100) + if teleportInto then TaskWarpPedIntoVehicle(PlayerPedId(), veh, -1) end if cb then cb(veh) end @@ -418,10 +420,9 @@ end function QBCore.Functions.GetVehicleProperties(vehicle) if DoesEntityExist(vehicle) then - local colorPrimary, colorSecondary = GetVehicleColours(vehicle) local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle) - local extras = {} + local colorPrimary, colorSecondary = GetVehicleColours(vehicle) if GetIsVehiclePrimaryColourCustom(vehicle) then r, g, b = GetVehicleCustomPrimaryColour(vehicle) colorPrimary = { r, g, b } @@ -432,6 +433,7 @@ function QBCore.Functions.GetVehicleProperties(vehicle) colorSecondary = { r, g, b } end + local extras = {} for extraId = 0, 12 do if DoesExtraExist(vehicle, extraId) then local state = IsVehicleExtraTurnedOn(vehicle, extraId) == 1 @@ -439,10 +441,29 @@ function QBCore.Functions.GetVehicleProperties(vehicle) end end + local modLivery = GetVehicleMod(vehicle, 48) if GetVehicleMod(vehicle, 48) == -1 and GetVehicleLivery(vehicle) ~= -1 then modLivery = GetVehicleLivery(vehicle) - else - modLivery = GetVehicleMod(vehicle, 48) + end + + local neons = {} + for i = 0,3 do + neons[i] = IsVehicleNeonLightEnabled(vehicle, i) + end + + local tireHealth = {} + for i = 0,3 do + tireHealth[i] = GetVehicleWheelHealth(vehicle, i) + end + + local tireBurstState = {} + for i = 0,5 do + tireBurstState[i] = IsVehicleTyreBurst(vehicle, i, false) + end + + local tireBurstCompletely = {} + for i = 0,5 do + tireBurstCompletely[i] = IsVehicleTyreBurst(vehicle, i, true) end return { @@ -454,6 +475,7 @@ function QBCore.Functions.GetVehicleProperties(vehicle) tankHealth = QBCore.Shared.Round(GetVehiclePetrolTankHealth(vehicle), 0.1), fuelLevel = QBCore.Shared.Round(GetVehicleFuelLevel(vehicle), 0.1), dirtLevel = QBCore.Shared.Round(GetVehicleDirtLevel(vehicle), 0.1), + oilLevel = QBCore.Shared.Round(GetVehicleOilLevel(vehicle), 0.1), color1 = colorPrimary, color2 = colorSecondary, pearlescentColor = pearlescentColor, @@ -461,15 +483,17 @@ function QBCore.Functions.GetVehicleProperties(vehicle) dashboardColor = GetVehicleDashboardColour(vehicle), wheelColor = wheelColor, wheels = GetVehicleWheelType(vehicle), + wheelSize = GetVehicleWheelSize(vehicle), + wheelWidth = GetVehicleWheelWidth(vehicle), + tireHealth = tireHealth, + tireBurstState = tireBurstState, + tireBurstCompletely = tireBurstCompletely, windowTint = GetVehicleWindowTint(vehicle), xenonColor = GetVehicleXenonLightsColour(vehicle), - neonEnabled = { - IsVehicleNeonLightEnabled(vehicle, 0), - IsVehicleNeonLightEnabled(vehicle, 1), - IsVehicleNeonLightEnabled(vehicle, 2), - IsVehicleNeonLightEnabled(vehicle, 3) - }, + neonEnabled = neons, neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)), + headlightColor = GetVehicleHeadlightsColour(vehicle), + interiorColor = GetVehicleInteriorColour(vehicle), extras = extras, tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)), modSpoilers = GetVehicleMod(vehicle, 0), @@ -489,8 +513,11 @@ function QBCore.Functions.GetVehicleProperties(vehicle) modHorns = GetVehicleMod(vehicle, 14), modSuspension = GetVehicleMod(vehicle, 15), modArmor = GetVehicleMod(vehicle, 16), + modKit17 = GetVehicleMod(vehicle, 17), modTurbo = IsToggleModOn(vehicle, 18), + modKit19 = GetVehicleMod(vehicle, 19), modSmokeEnabled = IsToggleModOn(vehicle, 20), + modKit21 = GetVehicleMod(vehicle, 21), modXenon = IsToggleModOn(vehicle, 22), modFrontWheels = GetVehicleMod(vehicle, 23), modBackWheels = GetVehicleMod(vehicle, 24), @@ -518,7 +545,10 @@ function QBCore.Functions.GetVehicleProperties(vehicle) modTrimB = GetVehicleMod(vehicle, 44), modTank = GetVehicleMod(vehicle, 45), modWindows = GetVehicleMod(vehicle, 46), + modKit47 = GetVehicleMod(vehicle, 47), modLivery = modLivery, + modKit49 = GetVehicleMod(vehicle, 49), + liveryRoof = GetVehicleRoofLivery(vehicle), } else return @@ -542,12 +572,38 @@ function QBCore.Functions.SetVehicleProperties(vehicle, props) if props.engineHealth then SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0) end + if props.tankHealth then + SetVehiclePetrolTankHealth(vehicle, props.tankHealth) + end if props.fuelLevel then SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) + exports['LegacyFuel']:SetFuel(veh, props.fuelLevel + 0.0) + end + if props.oilLevel then + SetVehicleOilLevel(vehicle, props.oilLevel) end if props.dirtLevel then SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0) end + if props.tireHealth then + for wheelIndex, health in pairs(props.tireHealth) do + SetVehicleWheelHealth(vehicle, wheelIndex, health) + end + end + if props.tireBurstState then + for wheelIndex, burstState in pairs(props.tireBurstState) do + if burstState then + SetVehicleTyreBurst(vehicle, tonumber(wheelIndex), false, 1000.0) + end + end + end + if props.tireBurstCompletely then + for wheelIndex, burstState in pairs(props.tireBurstCompletely) do + if burstState then + SetVehicleTyreBurst(vehicle, tonumber(wheelIndex), true, 1000.0) + end + end + end if props.color1 then if type(props.color1) == "number" then SetVehicleColours(vehicle, props.color1, colorSecondary) @@ -598,8 +654,17 @@ function QBCore.Functions.SetVehicleProperties(vehicle, props) if props.neonColor then SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3]) end - if props.modSmokeEnabled then - ToggleVehicleMod(vehicle, 20, true) + if props.headlightColor then + SetVehicleHeadlightsColour(vehicle, props.headlightColor) + end + if props.interiorColor then + SetVehicleInteriorColour(vehicle, props.interiorColor) + end + if props.wheelSize then + SetVehicleWheelSize(vehicle, props.wheelSize) + end + if props.wheelWidth then + SetVehicleWheelWidth(vehicle, props.wheelWidth) end if props.tyreSmokeColor then SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3]) @@ -655,9 +720,21 @@ function QBCore.Functions.SetVehicleProperties(vehicle, props) if props.modArmor then SetVehicleMod(vehicle, 16, props.modArmor, false) end + if props.modKit17 then + SetVehicleMod(vehicle, 17, props.modKit17, false) + end if props.modTurbo then ToggleVehicleMod(vehicle, 18, props.modTurbo) end + if props.modKit19 then + SetVehicleMod(vehicle, 19, props.modKit19, false) + end + if props.modSmokeEnabled then + ToggleVehicleMod(vehicle, 20, props.modSmokeEnabled) + end + if props.modKit21 then + SetVehicleMod(vehicle, 21, props.modKit21, false) + end if props.modXenon then ToggleVehicleMod(vehicle, 22, props.modXenon) end @@ -742,10 +819,19 @@ function QBCore.Functions.SetVehicleProperties(vehicle, props) if props.modWindows then SetVehicleMod(vehicle, 46, props.modWindows, false) end + if props.modKit47 then + SetVehicleMod(vehicle, 47, props.modKit47, false) + end if props.modLivery then SetVehicleMod(vehicle, 48, props.modLivery, false) SetVehicleLivery(vehicle, props.modLivery) end + if props.modKit49 then + SetVehicleMod(vehicle, 49, props.modKit49, false) + end + if props.liveryRoof then + SetVehicleRoofLivery(vehicle, props.liveryRoof) + end end end From 2c5253918b9da894306958da812a6cabe101226c Mon Sep 17 00:00:00 2001 From: ItsANoBrainer Date: Thu, 27 Jan 2022 17:58:07 -0500 Subject: [PATCH 2/6] [Update] Missing Vehicle Properties Added door state and window state. --- client/functions.lua | 46 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/client/functions.lua b/client/functions.lua index 422dd38..09a9c1b 100644 --- a/client/functions.lua +++ b/client/functions.lua @@ -466,6 +466,16 @@ function QBCore.Functions.GetVehicleProperties(vehicle) tireBurstCompletely[i] = IsVehicleTyreBurst(vehicle, i, true) end + local _windowStatus = {} + for i=0, 7 do + _windowStatus[i] = IsVehicleWindowIntact(vehicle, i) == 1 + end + + local _doorStatus = {} + for i=0, 5 do + _doorStatus[i] = IsVehicleDoorDamaged(vehicle, i) == 1 + end + return { model = GetEntityModel(vehicle), plate = QBCore.Functions.GetPlate(vehicle), @@ -489,6 +499,8 @@ function QBCore.Functions.GetVehicleProperties(vehicle) tireBurstState = tireBurstState, tireBurstCompletely = tireBurstCompletely, windowTint = GetVehicleWindowTint(vehicle), + windowStatus = _windowStatus, + doorStatus = _doorStatus, xenonColor = GetVehicleXenonLightsColour(vehicle), neonEnabled = neons, neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)), @@ -557,6 +569,16 @@ end function QBCore.Functions.SetVehicleProperties(vehicle, props) if DoesEntityExist(vehicle) then + if props.extras then + for id, enabled in pairs(props.extras) do + if enabled then + SetVehicleExtra(vehicle, tonumber(id), 0) + else + SetVehicleExtra(vehicle, tonumber(id), 1) + end + end + end + local colorPrimary, colorSecondary = GetVehicleColours(vehicle) local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle) SetVehicleModKit(vehicle, 0) @@ -636,19 +658,19 @@ function QBCore.Functions.SetVehicleProperties(vehicle, props) if props.windowTint then SetVehicleWindowTint(vehicle, props.windowTint) end - if props.neonEnabled then - SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1]) - SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2]) - SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3]) - SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4]) + if props.windowStatus then + for windowIndex, smashWindow in pairs(props.windowStatus) do + if not smashWindow then SmashVehicleWindow(vehicle, windowIndex) end + end end - if props.extras then - for id, enabled in pairs(props.extras) do - if enabled then - SetVehicleExtra(vehicle, tonumber(id), 0) - else - SetVehicleExtra(vehicle, tonumber(id), 1) - end + if props.doorStatus then + for doorIndex, breakDoor in pairs(props.doorStatus) do + if breakDoor then SetVehicleDoorBroken(vehicle, doorIndex, true) end + end + end + if props.neonEnabled then + for neonIndex, enableNeons in pairs(props.neonEnabled) do + SetVehicleNeonLightEnabled(vehicle, i, enableNeons) end end if props.neonColor then From 6ed74c6392fa742a98c1a594e1f831fb921f4bc8 Mon Sep 17 00:00:00 2001 From: ItsANoBrainer Date: Sat, 19 Feb 2022 12:56:01 -0500 Subject: [PATCH 3/6] Remove LegacyFuel usage --- client/events.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/client/events.lua b/client/events.lua index 59a5a1a..51917d3 100644 --- a/client/events.lua +++ b/client/events.lua @@ -61,7 +61,6 @@ RegisterNetEvent('QBCore:Command:SpawnVehicle', function(vehName) end local vehicle = CreateVehicle(hash, GetEntityCoords(ped), GetEntityHeading(ped), true, false) TaskWarpPedIntoVehicle(ped, vehicle, -1) - exports['LegacyFuel']:SetFuel(vehicle, 100) SetModelAsNoLongerNeeded(vehicle) TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(vehicle)) From 66ca5a7bb71e10ee573df83ee5e5a9973d646cef Mon Sep 17 00:00:00 2001 From: ItsANoBrainer Date: Sat, 19 Feb 2022 12:56:44 -0500 Subject: [PATCH 4/6] Removed Legacyfuel usage --- client/functions.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/functions.lua b/client/functions.lua index 09a9c1b..305e5c5 100644 --- a/client/functions.lua +++ b/client/functions.lua @@ -387,7 +387,7 @@ function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked, teleportI SetVehicleNeedsToBeHotwired(veh, false) SetVehRadioStation(veh, 'OFF') SetModelAsNoLongerNeeded(model) - exports['LegacyFuel']:SetFuel(veh, 100) + if teleportInto then TaskWarpPedIntoVehicle(PlayerPedId(), veh, -1) end if cb then cb(veh) @@ -599,7 +599,6 @@ function QBCore.Functions.SetVehicleProperties(vehicle, props) end if props.fuelLevel then SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) - exports['LegacyFuel']:SetFuel(veh, props.fuelLevel + 0.0) end if props.oilLevel then SetVehicleOilLevel(vehicle, props.oilLevel) From cc43734a3c312ed022472dca7d405f3f29bda0f1 Mon Sep 17 00:00:00 2001 From: ItsANoBrainer Date: Sat, 19 Feb 2022 13:11:26 -0500 Subject: [PATCH 5/6] Use SetVehicleFuelLevel Native Use SetVehicleFuelLevel on QBCore.Functions.SpawnVehicle --- client/functions.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/client/functions.lua b/client/functions.lua index 305e5c5..8d15b34 100644 --- a/client/functions.lua +++ b/client/functions.lua @@ -386,6 +386,7 @@ function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked, teleportI SetNetworkIdCanMigrate(netid, true) SetVehicleNeedsToBeHotwired(veh, false) SetVehRadioStation(veh, 'OFF') + SetVehicleFuelLevel(veh, 100.0) SetModelAsNoLongerNeeded(model) if teleportInto then TaskWarpPedIntoVehicle(PlayerPedId(), veh, -1) end From dec696a8433deecf1018160eb45652468c5801a3 Mon Sep 17 00:00:00 2001 From: ItsANoBrainer Date: Sat, 19 Feb 2022 13:11:28 -0500 Subject: [PATCH 6/6] Use SetVehicleFuelLevel Native Use SetVehicleFuelLevel on QBCore:Command:SpawnVehicle Event --- client/events.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/client/events.lua b/client/events.lua index 51917d3..174f9e1 100644 --- a/client/events.lua +++ b/client/events.lua @@ -61,6 +61,7 @@ RegisterNetEvent('QBCore:Command:SpawnVehicle', function(vehName) end local vehicle = CreateVehicle(hash, GetEntityCoords(ped), GetEntityHeading(ped), true, false) TaskWarpPedIntoVehicle(ped, vehicle, -1) + SetVehicleFuelLevel(vehicle, 100.0) SetModelAsNoLongerNeeded(vehicle) TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(vehicle))