Files
Elite-Gaming-FiveM/resources/Car-Nitro/client/boost.lua
T
2021-12-03 01:19:31 +00:00

75 lines
2.0 KiB
Lua

local vehicles = {}
function SetNitroBoostScreenEffectsEnabled(enabled)
if enabled then
StopScreenEffect('RaceTurbo')
StartScreenEffect('RaceTurbo', 0, false)
SetTimecycleModifier('rply_motionblur')
ShakeGameplayCam('SKY_DIVING_SHAKE', 0.25)
else
StopGameplayCamShaking(true)
SetTransitionTimecycleModifier('default', 0.35)
end
end
function IsVehicleNitroBoostEnabled(vehicle)
return vehicles[vehicle] == true
end
function SetVehicleNitroBoostEnabled(vehicle, enabled)
if IsVehicleNitroBoostEnabled(vehicle) == enabled then
return
end
if IsPedInVehicle(PlayerPedId(), vehicle) then
SetNitroBoostScreenEffectsEnabled(enabled)
end
SetVehicleBoostActive(vehicle, enabled)
vehicles[vehicle] = enabled or nil
end
Citizen.CreateThread(function ()
local function BackfireLoop()
-- TODO: Only do this for nearby vehicles.
for vehicle in pairs(vehicles) do
CreateVehicleExhaustBackfire(vehicle, 1.25)
end
end
while true do
Citizen.Wait(0)
BackfireLoop()
end
end)
Citizen.CreateThread(function ()
local function BoostLoop()
local player = PlayerPedId()
local vehicle = GetVehiclePedIsIn(player)
local driver = GetPedInVehicleSeat(vehicle, -1)
local enabled = IsVehicleNitroBoostEnabled(vehicle)
if vehicle == 0 or driver ~= player or not enabled then
return
end
-- TODO: Use better math. The effect of nitro is quite extreme for cars with
-- custom handling, while slow cars have almost no effect from this at all.
-- Also, maybe torque is not the correct setting to change.
if not IsVehicleStopped(vehicle) then
local vehicleModel = GetEntityModel(vehicle)
local currentSpeed = GetEntitySpeed(vehicle)
local maximumSpeed = GetVehicleModelMaxSpeed(vehicleModel)
local multiplier = 2.0 * maximumSpeed / currentSpeed
SetVehicleEngineTorqueMultiplier(vehicle, multiplier)
end
end
while true do
Citizen.Wait(0)
BoostLoop()
end
end)