local config = require 'config' local state = require 'client.state' local utils = require 'client.utils' local fuel = {} ---@param vehState StateBag ---@param vehicle integer ---@param amount number ---@param replicate? boolean function fuel.setFuel(vehState, vehicle, amount, replicate) if DoesEntityExist(vehicle) then amount = math.clamp(amount, 0, 100) SetVehicleFuelLevel(vehicle, amount) vehState:set('fuel', amount, replicate) end end function fuel.getPetrolCan(coords, refuel) TaskTurnPedToFaceCoord(cache.ped, coords.x, coords.y, coords.z, config.petrolCan.duration) Wait(500) if lib.progressCircle({ duration = config.petrolCan.duration, useWhileDead = false, canCancel = true, disable = { move = true, car = true, combat = true, }, anim = { dict = 'timetable@gardener@filling_can', clip = 'gar_ig_5_filling_can', flags = 49, } }) then if refuel and exports.ox_inventory:GetItemCount('WEAPON_PETROLCAN') then return TriggerServerEvent('ox_fuel:fuelCan', true, config.petrolCan.refillPrice) end TriggerServerEvent('ox_fuel:fuelCan', false, config.petrolCan.price) end ClearPedTasks(cache.ped) end function fuel.startFueling(vehicle, isPump) local vehState = Entity(vehicle).state local fuelAmount = vehState.fuel or GetVehicleFuelLevel(vehicle) local duration = math.ceil((100 - fuelAmount) / config.refillValue) * config.refillTick local price, moneyAmount local durability = 0 if 100 - fuelAmount < config.refillValue then return lib.notify({ type = 'error', description = locale('tank_full') }) end if isPump then price = 0 moneyAmount = utils.getMoney() if config.priceTick > moneyAmount then return lib.notify({ type = 'error', description = locale('not_enough_money', config.priceTick) }) end elseif not state.petrolCan then return lib.notify({ type = 'error', description = locale('petrolcan_not_equipped') }) elseif state.petrolCan.metadata.ammo <= config.durabilityTick then return lib.notify({ type = 'error', description = locale('petrolcan_not_enough_fuel') }) end state.isFueling = true TaskTurnPedToFaceEntity(cache.ped, vehicle, duration) Wait(500) CreateThread(function() lib.progressCircle({ duration = duration, useWhileDead = false, canCancel = true, disable = { move = true, car = true, combat = true, }, anim = { dict = isPump and 'timetable@gardener@filling_can' or 'weapon@w_sp_jerrycan', clip = isPump and 'gar_ig_5_filling_can' or 'fire', }, }) state.isFueling = false end) while state.isFueling do if isPump then price += config.priceTick if price + config.priceTick >= moneyAmount and lib.progressActive() then lib.cancelProgress() end elseif state.petrolCan then durability += config.durabilityTick if durability >= state.petrolCan.metadata.ammo then lib.cancelProgress() durability = state.petrolCan.metadata.ammo break end else break end fuelAmount += config.refillValue if fuelAmount >= 100 then state.isFueling = false fuelAmount = 100.0 end Wait(config.refillTick) end ClearPedTasks(cache.ped) if isPump then TriggerServerEvent('ox_fuel:pay', price, fuelAmount, NetworkGetNetworkIdFromEntity(vehicle)) else TriggerServerEvent('ox_fuel:updateFuelCan', durability, NetworkGetNetworkIdFromEntity(vehicle), fuelAmount) end end return fuel