108 lines
2.7 KiB
Lua
108 lines
2.7 KiB
Lua
local config = require 'config'
|
|
|
|
if not config then return end
|
|
|
|
if config.versionCheck then lib.versionCheck('overextended/ox_fuel') end
|
|
|
|
local ox_inventory = exports.ox_inventory
|
|
|
|
local function setFuelState(netId, fuel)
|
|
local vehicle = NetworkGetEntityFromNetworkId(netId)
|
|
|
|
if vehicle == 0 or GetEntityType(vehicle) ~= 2 then
|
|
return
|
|
end
|
|
|
|
local state = Entity(vehicle)?.state
|
|
fuel = math.clamp(fuel, 0, 100)
|
|
|
|
state:set('fuel', fuel, true)
|
|
end
|
|
|
|
---@param playerId number
|
|
---@param price number
|
|
---@return boolean?
|
|
local function defaultPaymentMethod(playerId, price)
|
|
local success = ox_inventory:RemoveItem(playerId, 'money', price)
|
|
|
|
if success then return true end
|
|
|
|
local money = ox_inventory:GetItemCount(source, 'money')
|
|
|
|
TriggerClientEvent('ox_lib:notify', source, {
|
|
type = 'error',
|
|
description = locale('not_enough_money', price - money)
|
|
})
|
|
end
|
|
|
|
local payMoney = defaultPaymentMethod
|
|
|
|
exports('setPaymentMethod', function(fn)
|
|
payMoney = fn or defaultPaymentMethod
|
|
end)
|
|
|
|
RegisterNetEvent('ox_fuel:pay', function(price, fuel, netid)
|
|
assert(type(price) == 'number', ('Price expected a number, received %s'):format(type(price)))
|
|
local source = source
|
|
if not payMoney(source, price) then return end
|
|
|
|
fuel = math.floor(fuel)
|
|
setFuelState(netid, fuel)
|
|
|
|
TriggerClientEvent('ox_lib:notify', source, {
|
|
type = 'success',
|
|
description = locale('fuel_success', fuel, price)
|
|
})
|
|
end)
|
|
|
|
RegisterNetEvent('ox_fuel:fuelCan', function(hasCan, price)
|
|
local source = source
|
|
if hasCan then
|
|
local item = ox_inventory:GetCurrentWeapon(source)
|
|
|
|
if not item or item.name ~= 'WEAPON_PETROLCAN' or not payMoney(source, price) then return end
|
|
|
|
item.metadata.durability = 100
|
|
item.metadata.ammo = 100
|
|
|
|
ox_inventory:SetMetadata(source, item.slot, item.metadata)
|
|
|
|
TriggerClientEvent('ox_lib:notify', source, {
|
|
type = 'success',
|
|
description = locale('petrolcan_refill', price)
|
|
})
|
|
else
|
|
if not ox_inventory:CanCarryItem(source, 'WEAPON_PETROLCAN', 1) then
|
|
return TriggerClientEvent('ox_lib:notify', source, {
|
|
type = 'error',
|
|
description = locale('petrolcan_cannot_carry')
|
|
})
|
|
end
|
|
|
|
if not payMoney(source, price) then return end
|
|
|
|
ox_inventory:AddItem(source, 'WEAPON_PETROLCAN', 1)
|
|
|
|
TriggerClientEvent('ox_lib:notify', source, {
|
|
type = 'success',
|
|
description = locale('petrolcan_buy', price)
|
|
})
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('ox_fuel:updateFuelCan', function(durability, netid, fuel)
|
|
local source = source
|
|
local item = ox_inventory:GetCurrentWeapon(source)
|
|
|
|
if item and durability > 0 then
|
|
durability = math.floor(item.metadata.durability - durability)
|
|
item.metadata.durability = durability
|
|
item.metadata.ammo = durability
|
|
|
|
ox_inventory:SetMetadata(source, item.slot, item.metadata)
|
|
setFuelState(netid, fuel)
|
|
end
|
|
|
|
-- player is sus?
|
|
end)
|