82 lines
1.9 KiB
Lua
82 lines
1.9 KiB
Lua
local vehicles = {}
|
|
local lastNitro = 0
|
|
local nitroCooldown = 2500 -- TODO: per-vehicle cooldown?
|
|
|
|
local nitroFuelSize = 2000
|
|
local nitroFuelDrainRate = 10
|
|
local nitroPurgeFuelDrainRate = nitroFuelDrainRate * 2
|
|
local nitroRechargeRate = nitroFuelDrainRate / 2
|
|
|
|
function InitNitroFuel(vehicle)
|
|
if not vehicles[vehicle] then
|
|
vehicles[vehicle] = nitroFuelSize
|
|
end
|
|
end
|
|
|
|
function DrainNitroFuel(vehicle, purge)
|
|
if not purge then
|
|
purge = false
|
|
end
|
|
|
|
if not vehicles[vehicle] then
|
|
vehicles[vehicle] = nitroFuelSize
|
|
end
|
|
|
|
if vehicles[vehicle] > 0 then
|
|
if purge then
|
|
vehicles[vehicle] = vehicles[vehicle] - nitroFuelDrainRate * 2
|
|
else
|
|
vehicles[vehicle] = vehicles[vehicle] - nitroFuelDrainRate
|
|
end
|
|
lastNitro = GetGameTimer()
|
|
end
|
|
end
|
|
|
|
function RechargeNitroFuel(vehicle)
|
|
if not vehicles[vehicle] then
|
|
vehicles[vehicle] = nitroFuelSize
|
|
end
|
|
|
|
if vehicles[vehicle] and vehicles[vehicle] < nitroFuelSize then
|
|
vehicles[vehicle] = vehicles[vehicle] + nitroRechargeRate
|
|
end
|
|
end
|
|
|
|
function GetNitroFuelLevel(vehicle)
|
|
if vehicles[vehicle] then
|
|
return math.max(0, vehicles[vehicle])
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
function SetNitroFuelLevel(vehicle, level)
|
|
vehicles[vehicle] = level
|
|
end
|
|
|
|
Citizen.CreateThread(function ()
|
|
local function FuelLoop()
|
|
local player = PlayerPedId()
|
|
local vehicle = GetVehiclePedIsIn(player)
|
|
local driver = GetPedInVehicleSeat(vehicle, -1)
|
|
local isRunning = GetIsVehicleEngineRunning(vehicle)
|
|
local isBoosting = IsVehicleNitroBoostEnabled(vehicle)
|
|
local isPurging = IsVehicleNitroPurgeEnabled(vehicle)
|
|
|
|
if vehicle == 0 or driver ~= player or not isRunning then
|
|
return
|
|
end
|
|
|
|
if isRunning then
|
|
if isBoosting == false and isPurging == false and GetGameTimer() > lastNitro + nitroCooldown then
|
|
RechargeNitroFuel(vehicle)
|
|
end
|
|
end
|
|
end
|
|
|
|
while true do
|
|
Citizen.Wait(0)
|
|
FuelLoop()
|
|
end
|
|
end)
|