This commit is contained in:
Max 2025-06-12 15:46:55 +02:00
commit 42eed2b920
4 changed files with 121 additions and 4 deletions

View file

@ -0,0 +1,9 @@
fx_version 'cerulean'
game 'gta5'
author 'YourName'
description 'Fuel info command for lc_fuel system'
server_script 'server/server.lua'
dependency 'lc_fuel' -- Ensures lc_fuel loads first

View file

@ -0,0 +1,21 @@
QBCore.Commands.Add("fuel", "Check current vehicle fuel level", {}, false, function(source, args)
local player = QBCore.Functions.GetPlayer(source)
if not player then return end
local ped = GetPlayerPed(source)
local vehicle = GetVehiclePedIsIn(ped, false)
if vehicle == 0 then
TriggerClientEvent('QBCore:Notify', source, "You must be in a vehicle", "error")
return
end
local plate = QBCore.Functions.GetPlate(vehicle)
-- lc_fuel stores fuel in vehicle metadata
local fuel = exports['lc_fuel']:GetFuel(vehicle) or 0
local roundedFuel = math.floor(fuel + 0.5)
TriggerClientEvent('QBCore:Notify', source, "Fuel: "..roundedFuel.."%", "success")
end, "user")

View file

@ -24,7 +24,9 @@ server_scripts {
"server/events.lua",
"server/functions.lua",
"server/main.lua",
"server/misc/*.lua"
"server/misc/*.lua",
"server/callbacks.lua"
}
client_scripts {

View file

@ -1,6 +1,43 @@
local positions = {}
local presets = {}
local positionsFile = 'positions.json'
local presetsFile = 'presets.json'
-- Load saved positions from JSON file
local function LoadPositions()
local file = LoadResourceFile(GetCurrentResourceName(), 'json/' .. positionsFile)
if file then
positions = json.decode(file) or {}
end
end
-- Load saved presets from JSON file
local function LoadPresets()
local file = LoadResourceFile(GetCurrentResourceName(), 'json/' .. presetsFile)
if file then
presets = json.decode(file) or {}
end
end
-- Save positions to JSON file
local function SavePositions()
SaveResourceFile(GetCurrentResourceName(), 'json/' .. positionsFile, json.encode(positions), -1)
end
-- Save presets to JSON file
local function SavePresets()
SaveResourceFile(GetCurrentResourceName(), 'json/' .. presetsFile, json.encode(presets), -1)
end
-- Load data when resource starts
CreateThread(function()
LoadPositions()
LoadPresets()
end)
-- Weapon sync
local attachedWeapons = {}
-- Track player weapons
RegisterNetEvent('force-sling:server:syncWeapons')
AddEventHandler('force-sling:server:syncWeapons', function(weaponData, action)
local src = source
@ -13,11 +50,59 @@ AddEventHandler('force-sling:server:syncWeapons', function(weaponData, action)
end
end
-- Broadcast to all players except source
TriggerClientEvent('force-sling:client:syncWeapons', -1, src, weaponData, action)
end)
-- Clean up when player disconnects
-- Callbacks
lib.callback.register('force-sling:callback:getCachedPositions', function(source)
return positions
end)
lib.callback.register('force-sling:callback:getCachedPresets', function(source)
return presets
end)
lib.callback.register('force-sling:callback:isPlayerAdmin', function(source)
local src = source
-- Add your admin check logic here
-- Example for QBCore:
-- local Player = QBCore.Functions.GetPlayer(src)
-- return Player.PlayerData.admin or false
-- For testing, returning true
return {isAdmin = true}
end)
lib.callback.register('force-sling:callback:resetWeaponPositions', function(source, weapon)
local src = source
if weapon then
positions[weapon] = nil
else
positions = {}
end
SavePositions()
return positions
end)
RegisterNetEvent('force-sling:server:saveWeaponPosition')
AddEventHandler('force-sling:server:saveWeaponPosition', function(position, rotation, weapon, weaponName, boneId, isPreset)
local src = source
local data = {
coords = position,
rot = rotation,
boneId = boneId
}
if isPreset then
presets[weaponName] = data
SavePresets()
else
positions[weaponName] = data
SavePositions()
end
end)
-- Cleanup on player drop
AddEventHandler('playerDropped', function()
local src = source
if attachedWeapons[src] then