75 lines
2.0 KiB
Lua
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)
|