130 lines
3.7 KiB
Lua
130 lines
3.7 KiB
Lua
local config = require 'config'
|
|
|
|
if not config then return end
|
|
|
|
SetFuelConsumptionState(true)
|
|
SetFuelConsumptionRateMultiplier(config.globalFuelConsumptionRate)
|
|
|
|
AddTextEntry('fuelHelpText', locale('fuel_help'))
|
|
AddTextEntry('petrolcanHelpText', locale('petrolcan_help'))
|
|
AddTextEntry('fuelLeaveVehicleText', locale('leave_vehicle'))
|
|
AddTextEntry('ox_fuel_station', locale('fuel_station_blip'))
|
|
|
|
local utils = require 'client.utils'
|
|
local state = require 'client.state'
|
|
local fuel = require 'client.fuel'
|
|
|
|
require 'client.stations'
|
|
|
|
local function startDrivingVehicle()
|
|
local vehicle = cache.vehicle
|
|
|
|
if not DoesVehicleUseFuel(vehicle) then return end
|
|
|
|
local vehState = Entity(vehicle).state
|
|
|
|
if not vehState.fuel then
|
|
vehState:set('fuel', GetVehicleFuelLevel(vehicle), true)
|
|
while not vehState.fuel do Wait(0) end
|
|
end
|
|
|
|
SetVehicleFuelLevel(vehicle, vehState.fuel)
|
|
|
|
local fuelTick = 0
|
|
|
|
while cache.seat == -1 do
|
|
if GetIsVehicleEngineRunning(vehicle) then
|
|
if not DoesEntityExist(vehicle) then return end
|
|
SetFuelConsumptionRateMultiplier(config.globalFuelConsumptionRate)
|
|
|
|
local fuelAmount = tonumber(vehState.fuel)
|
|
local newFuel = GetVehicleFuelLevel(vehicle)
|
|
if fuelAmount > 0 then
|
|
if GetVehiclePetrolTankHealth(vehicle) < 700 then
|
|
newFuel -= math.random(10, 20) * 0.01
|
|
end
|
|
|
|
if fuelAmount ~= newFuel then
|
|
if fuelTick == 15 then
|
|
fuelTick = 0
|
|
end
|
|
|
|
fuel.setFuel(vehState, vehicle, newFuel, fuelTick == 0)
|
|
fuelTick += 1
|
|
end
|
|
end
|
|
else
|
|
if not DoesEntityExist(vehicle) then return end
|
|
SetFuelConsumptionRateMultiplier(0.0)
|
|
end
|
|
Wait(1000)
|
|
end
|
|
|
|
fuel.setFuel(vehState, vehicle, vehState.fuel, true)
|
|
end
|
|
|
|
if cache.seat == -1 then CreateThread(startDrivingVehicle) end
|
|
|
|
lib.onCache('seat', function(seat)
|
|
if cache.vehicle then
|
|
state.lastVehicle = cache.vehicle
|
|
end
|
|
|
|
if seat == -1 then
|
|
SetTimeout(0, startDrivingVehicle)
|
|
end
|
|
end)
|
|
|
|
if config.ox_target then return require 'client.target' end
|
|
|
|
RegisterCommand('startfueling', function()
|
|
if state.isFueling or cache.vehicle or lib.progressActive() then return end
|
|
|
|
local petrolCan = config.petrolCan.enabled and GetSelectedPedWeapon(cache.ped) == `WEAPON_PETROLCAN`
|
|
local playerCoords = GetEntityCoords(cache.ped)
|
|
local nearestPump = state.nearestPump
|
|
|
|
if nearestPump then
|
|
local moneyAmount = utils.getMoney()
|
|
|
|
if petrolCan and moneyAmount >= config.petrolCan.refillPrice then
|
|
return fuel.getPetrolCan(nearestPump, true)
|
|
end
|
|
|
|
local vehicleInRange = state.lastVehicle and #(GetEntityCoords(state.lastVehicle) - playerCoords) <= 3
|
|
|
|
if not vehicleInRange then
|
|
if not config.petrolCan.enabled then return end
|
|
|
|
if moneyAmount >= config.petrolCan.price then
|
|
return fuel.getPetrolCan(nearestPump)
|
|
end
|
|
|
|
return lib.notify({ type = 'error', description = locale('petrolcan_cannot_afford') })
|
|
elseif moneyAmount >= config.priceTick then
|
|
return fuel.startFueling(state.lastVehicle, true)
|
|
else
|
|
return lib.notify({ type = 'error', description = locale('refuel_cannot_afford') })
|
|
end
|
|
|
|
return lib.notify({ type = 'error', description = locale('vehicle_far') })
|
|
elseif petrolCan then
|
|
local vehicle = utils.getVehicleInFront()
|
|
|
|
if vehicle and DoesVehicleUseFuel(vehicle) then
|
|
|
|
local boneIndex = utils.getVehiclePetrolCapBoneIndex(vehicle)
|
|
local fuelcapPosition = boneIndex and GetWorldPositionOfEntityBone(vehicle, boneIndex)
|
|
|
|
if fuelcapPosition and #(playerCoords - fuelcapPosition) < 1.8 then
|
|
return fuel.startFueling(vehicle, false)
|
|
end
|
|
|
|
return lib.notify({ type = 'error', description = locale('vehicle_far') })
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterKeyMapping('startfueling', 'Fuel vehicle', 'keyboard', 'e')
|
|
TriggerEvent('chat:removeSuggestion', '/startfueling')
|