1
0
Fork 0
forked from Simnation/Main
Main/resources/[carscripts]/lc_fuel/client/client_electric.lua

153 lines
5.7 KiB
Lua
Raw Normal View History

2025-06-17 17:17:59 +02:00
-- Do not load anything here if electric is disabled
if not Config.Electric.enabled then
return
end
local electricChargers = {}
-----------------------------------------------------------------------------------------------------------------------------------------
-- Threads
-----------------------------------------------------------------------------------------------------------------------------------------
-- Create sphere zones for each station, hooking up onEnter/onExit
function createElectricZones()
assert(Utils.Zones, "You are using an outdated version of lc_utils. Please update your 'lc_utils' script to the latest version: https://github.com/LeonardoSoares98/lc_utils/releases/latest/download/lc_utils.zip")
local stations = groupChargersByStation()
for _, station in pairs(stations) do
Utils.Zones.createZone({
coords = station.center,
radius = 50.0,
onEnter = function()
for _, charger in pairs(station.chargers) do
loadElectricCharger(charger)
end
end,
onExit = function()
for _, charger in pairs(station.chargers) do
unloadElectricCharger(charger)
end
end
})
end
end
-- Thread to detect near electric chargers
function createElectricMarkersThread()
CreateThread(function()
while true do
local ped = PlayerPedId()
local playerCoords = GetEntityCoords(ped)
local pump, pumpModel = GetClosestPump(playerCoords, true)
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_recharge, true)
if IsControlJustPressed(0,38) then
clientOpenUI(pump, pumpModel, true)
end
end
Wait(2)
end
Wait(1000)
end
end)
end
function createElectricTargetsThread()
local pumpModels = {} -- This will be the final list without duplicates
local seenModels = {} -- This acts as a set to track unique values
for _, chargerData in pairs(Config.Electric.chargersLocation) do
local model = chargerData.prop
if not seenModels[model] then
seenModels[model] = true -- Mark model as seen
table.insert(pumpModels, model) -- Insert only if it's not a duplicate
end
end
-- Pass unique models to the target creation function
Utils.Target.createTargetForModel(pumpModels, openElectricUICallback, Utils.translate('target.open_recharge'), "fas fa-plug", "#00a413",nil,nil,canOpenPumpUiTargetCallback)
Utils.Target.createTargetForModel(pumpModels,returnNozzle,Utils.translate('target.return_nozzle'),"fas fa-plug","#a42100",nil,nil,canReturnNozzleTargetCallback)
end
function openElectricUICallback()
local ped = PlayerPedId()
local playerCoords = GetEntityCoords(ped)
local pump, pumpModel = GetClosestPump(playerCoords, true)
if pump then
clientOpenUI(pump, pumpModel, true)
else
exports['lc_utils']:notify("error", Utils.translate("pump_not_found"))
end
end
-----------------------------------------------------------------------------------------------------------------------------------------
-- Utils
-----------------------------------------------------------------------------------------------------------------------------------------
function loadElectricCharger(chargerData)
if not electricChargers[chargerData.location] then
RequestModel(chargerData.prop)
while not HasModelLoaded(chargerData.prop) do
Wait(10)
end
local heading = chargerData.location.w + 180.0
local electricCharger = CreateObject(chargerData.prop, chargerData.location.x, chargerData.location.y, chargerData.location.z, false, true, true)
SetEntityHeading(electricCharger, heading)
FreezeEntityPosition(electricCharger, true)
electricChargers[chargerData.location] = electricCharger
end
end
function unloadElectricCharger(chargerData)
local charger = electricChargers[chargerData.location]
if charger and DoesEntityExist(charger) then
DeleteEntity(charger)
electricChargers[chargerData.location] = nil
end
end
-- Utility to group chargers by their station
function groupChargersByStation()
local stations = {}
for _, charger in pairs(Config.Electric.chargersLocation) do
local assigned = false
for _, station in pairs(stations) do
local dist = #(station.center - vector3(charger.location.x, charger.location.y, charger.location.z))
if dist < 20.0 then
table.insert(station.chargers, charger)
station.center = (station.center + vector3(charger.location.x, charger.location.y, charger.location.z)) / 2
assigned = true
break
end
end
if not assigned then
table.insert(stations, {
center = vector3(charger.location.x, charger.location.y, charger.location.z),
chargers = { charger }
})
end
end
return stations
end
AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
deleteAllElectricChargers()
end)
function deleteAllElectricChargers()
for _, charger in pairs(electricChargers) do
if DoesEntityExist(charger) then
DeleteEntity(charger)
end
end
electricChargers = {}
2025-06-07 08:51:21 +02:00
end