From 0986bb8a3c3dd2141c29e6ba5710b0d9cfa6097c Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Thu, 12 Jun 2025 15:31:23 +0200 Subject: [PATCH 1/2] l --- .../[weapons]/force-sling/fxmanifest.lua | 4 +- .../[weapons]/force-sling/server/main.lua | 91 ++++++++++++++++++- 2 files changed, 91 insertions(+), 4 deletions(-) diff --git a/resources/[jobs]/[weapons]/force-sling/fxmanifest.lua b/resources/[jobs]/[weapons]/force-sling/fxmanifest.lua index 40e591114..659dba278 100644 --- a/resources/[jobs]/[weapons]/force-sling/fxmanifest.lua +++ b/resources/[jobs]/[weapons]/force-sling/fxmanifest.lua @@ -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 { diff --git a/resources/[jobs]/[weapons]/force-sling/server/main.lua b/resources/[jobs]/[weapons]/force-sling/server/main.lua index dc7bbf6df..073eda6b5 100644 --- a/resources/[jobs]/[weapons]/force-sling/server/main.lua +++ b/resources/[jobs]/[weapons]/force-sling/server/main.lua @@ -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 From 06308a7b254720672ff63223e22c55b21710caab Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Thu, 12 Jun 2025 15:40:19 +0200 Subject: [PATCH 2/2] fuel info --- .../nordi_fuelinfo/fxmanifest.lua | 9 ++++++++ .../nordi_fuelinfo/server/server.lua | 21 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 resources/[carscripts]/nordi_fuelinfo/fxmanifest.lua create mode 100644 resources/[carscripts]/nordi_fuelinfo/server/server.lua diff --git a/resources/[carscripts]/nordi_fuelinfo/fxmanifest.lua b/resources/[carscripts]/nordi_fuelinfo/fxmanifest.lua new file mode 100644 index 000000000..6cec24893 --- /dev/null +++ b/resources/[carscripts]/nordi_fuelinfo/fxmanifest.lua @@ -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 diff --git a/resources/[carscripts]/nordi_fuelinfo/server/server.lua b/resources/[carscripts]/nordi_fuelinfo/server/server.lua new file mode 100644 index 000000000..2ab1d14fc --- /dev/null +++ b/resources/[carscripts]/nordi_fuelinfo/server/server.lua @@ -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") +