141 lines
3.4 KiB
Lua
141 lines
3.4 KiB
Lua
|
|
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
|