1
0
Fork 0
forked from Simnation/Main
Main/resources/[carscripts]/lc_fuel/client/client_gas.lua
2025-06-17 17:17:59 +02:00

140 lines
No EOL
5.1 KiB
Lua

local customGasPumps = {}
-----------------------------------------------------------------------------------------------------------------------------------------
-- Threads
-----------------------------------------------------------------------------------------------------------------------------------------
-- Thread to detect near fuel pumps
function createGasMarkersThread()
CreateThread(function()
while true do
local ped = PlayerPedId()
local playerCoords = GetEntityCoords(ped)
local pump, pumpModel = GetClosestPump(playerCoords, false)
while pump and pump > 0 and #(playerCoords - GetEntityCoords(pump)) < 2.0 do
playerCoords = GetEntityCoords(ped)
if not mainUiOpen and not DoesEntityExist(fuelNozzle) then
Utils.Markers.showHelpNotification(cachedTranslations.open_refuel, true)
if IsControlJustPressed(0,38) then
clientOpenUI(pump, pumpModel, false)
end
end
Wait(2)
end
Wait(1000)
end
end)
end
function createGasTargetsThread()
local pumpModels = {}
for _, v in pairs(Config.GasPumpProps) do
table.insert(pumpModels, v.prop)
end
Utils.Target.createTargetForModel(pumpModels,openFuelUICallback,Utils.translate('target.open_refuel'),"fas fa-gas-pump","#a42100",nil,nil,canOpenPumpUiTargetCallback)
Utils.Target.createTargetForModel(pumpModels,returnNozzle,Utils.translate('target.return_nozzle'),"fas fa-gas-pump","#a42100",nil,nil,canReturnNozzleTargetCallback)
end
function openFuelUICallback()
local ped = PlayerPedId()
local playerCoords = GetEntityCoords(ped)
local pump, pumpModel = GetClosestPump(playerCoords, false)
if pump then
clientOpenUI(pump, pumpModel, false)
else
exports['lc_utils']:notify("error", Utils.translate("pump_not_found"))
end
end
function createCustomPumpModelsThread()
for _, pumpConfig in pairs(Config.CustomGasPumpLocations) do
RequestModel(pumpConfig.prop)
while not HasModelLoaded(pumpConfig.prop) do
Wait(50)
end
local heading = pumpConfig.location.w + 180.0
local gasPump = CreateObject(pumpConfig.prop, pumpConfig.location.x, pumpConfig.location.y, pumpConfig.location.z, false, true, true)
SetEntityHeading(gasPump, heading)
FreezeEntityPosition(gasPump, true)
table.insert(customGasPumps, gasPump)
end
end
AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
deleteAllCustomGasPumps()
end)
function deleteAllCustomGasPumps()
for k, v in ipairs(customGasPumps) do
DeleteEntity(v)
end
end
-----------------------------------------------------------------------------------------------------------------------------------------
-- Jerry Cans
-----------------------------------------------------------------------------------------------------------------------------------------
-- Thread to handle the fuel consumption
function createJerryCanThread()
CreateThread(function()
while true do
Wait(1000)
local ped = PlayerPedId()
if not IsPedInAnyVehicle(ped, false) and GetSelectedPedWeapon(ped) == JERRY_CAN_HASH then
refuelLoop(true)
end
end
end)
end
-- Code to save jerry can ammo in any inventory
local currentWeaponData
function updateWeaponAmmo(ammo)
ammo = math.floor(ammo) -- This is needed or some inventories will break
if currentWeaponData and currentWeaponData.info and currentWeaponData.info.ammo then
currentWeaponData.info.ammo = ammo
end
TriggerServerEvent('ox_inventory:updateWeapon', "ammo", ammo)
TriggerServerEvent("weapons:server:UpdateWeaponAmmo", currentWeaponData, ammo)
TriggerServerEvent("qb-weapons:server:UpdateWeaponAmmo", currentWeaponData, ammo)
if Config.Debug then print("updateWeaponAmmo:ammo",ammo) end
if Config.Debug then Utils.Debug.printTable("updateWeaponAmmo:currentWeaponData",currentWeaponData) end
local ped = PlayerPedId()
SetPedAmmo(ped, JERRY_CAN_HASH, ammo)
end
AddEventHandler('weapons:client:SetCurrentWeapon', function(data, bool)
if bool ~= false then
currentWeaponData = data
else
currentWeaponData = {}
end
end)
AddEventHandler('qb-weapons:client:SetCurrentWeapon', function(data, bool)
if bool ~= false then
currentWeaponData = data
else
currentWeaponData = {}
end
end)
-- Get jerry can ammo by metadata
function getJerryCanAmmo()
if currentWeaponData and currentWeaponData.info and currentWeaponData.info.ammo then
if Config.Debug then print("getJerryCanAmmo:currentWeaponData.info.ammo", currentWeaponData.info.ammo) end
return currentWeaponData.info.ammo
end
local ped = PlayerPedId()
if Config.Debug then print("getJerryCanAmmo:GetAmmoInPedWeapon", GetAmmoInPedWeapon(ped, JERRY_CAN_HASH)) end
return GetAmmoInPedWeapon(ped, JERRY_CAN_HASH)
end