From b81ada265b5bb64b2d1b68b34df630b630234601 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Thu, 1 May 2025 17:49:37 +0100 Subject: [PATCH] Better support for RedM's RSG Core Nothing public uses this yet, but its very similar to QBCore which makes it very for me to support Nothing special to note, just improves the integration for future ventures into RedM --- _versioncheck.lua | 4 +- shared/coreloader.lua | 30 +++++-------- shared/itemcontrol.lua | 13 ++++-- shared/jobfunctions.lua | 2 + shared/metaHandlers.lua | 11 ++++- shared/playerfunctions.lua | 88 +++++++++++++++++++++++++++++++++++-- shared/vehicles.lua | 2 + shared/wrapperfunctions.lua | 10 +++++ 8 files changed, 132 insertions(+), 28 deletions(-) diff --git a/_versioncheck.lua b/_versioncheck.lua index 0a17ebc..4a05452 100644 --- a/_versioncheck.lua +++ b/_versioncheck.lua @@ -1,4 +1,4 @@ -function parseVersion(version) +local function parseVersion(version) local parts = {} for num in version:gmatch("%d+") do table.insert(parts, tonumber(num)) @@ -6,7 +6,7 @@ function parseVersion(version) return parts end -function compareVersions(current, newest) +local function compareVersions(current, newest) local currentParts = parseVersion(current) local newestParts = parseVersion(newest) for i = 1, math.max(#currentParts, #newestParts) do diff --git a/shared/coreloader.lua b/shared/coreloader.lua index 6d38f05..934a9ef 100644 --- a/shared/coreloader.lua +++ b/shared/coreloader.lua @@ -120,12 +120,10 @@ elseif isStarted(RSGExport) then itemResource = RSGExport Core = Core or exports[RSGExport]:GetCoreObject() Items = Core and Core.Shared.Items or nil - if isStarted(RSGExport) and not isStarted(QBXExport) then - RegisterNetEvent('QBCore:Client:UpdateObject', function() - Core = Core or exports[RSGExport]:GetCoreObject() - Items = Core and Core.Shared.Items or nil - end) - end + RegisterNetEvent('RSGCore:Client:UpdateObject', function() + Core = Core or exports[RSGExport]:GetCoreObject() + Items = Core and Core.Shared.Items or nil + end) end @@ -190,12 +188,10 @@ elseif isStarted(ESXExport) then elseif isStarted(RSGExport) then Core = Core or exports[RSGExport]:GetCoreObject() Vehicles = Core and Core.Shared.Vehicles - if isStarted(RSGExport) then - RegisterNetEvent('RSGExport:Client:UpdateObject', function() - Core = Core or exports[RSGExport]:GetCoreObject() - Vehicles = Core and Core.Shared.Vehicles - end) - end + RegisterNetEvent('RSGCore:Client:UpdateObject', function() + Core = Core or exports[RSGExport]:GetCoreObject() + Vehicles = Core and Core.Shared.Vehicles + end) vehResource = RSGExport end if vehResource == nil then @@ -276,12 +272,10 @@ elseif isStarted(RSGExport) then jobResource = RSGExport Core = Core or exports[RSGExport]:GetCoreObject() Jobs, Gangs = Core.Shared.Jobs, Core.Shared.Gangs - if isStarted(RSGExport) and not isStarted(QBXExport) then - RegisterNetEvent('QBCore:Client:UpdateObject', function() - Core = exports[RSGExport]:GetCoreObject() - Jobs, Gangs = Core.Shared.Jobs, Core.Shared.Gangs - end) - end + RegisterNetEvent('RSGCore:Client:UpdateObject', function() + Core = exports[RSGExport]:GetCoreObject() + Jobs, Gangs = Core.Shared.Jobs, Core.Shared.Gangs + end) end if jobResource == nil then diff --git a/shared/itemcontrol.lua b/shared/itemcontrol.lua index 8496696..e978b59 100644 --- a/shared/itemcontrol.lua +++ b/shared/itemcontrol.lua @@ -31,15 +31,22 @@ validTokens = {} --- ``` function createUseableItem(item, funct) if isStarted(ESXExport) then - debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^7es_extended", item) + debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^7es_extended^7", item) while not ESX do Wait(0) end ESX.RegisterUsableItem(item, funct) + elseif isStarted(QBExport) and not isStarted(QBXExport) then - debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^7qb-core", item) + debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^7qb-core^7", item) Core.Functions.CreateUseableItem(item, funct) + elseif isStarted(QBXExport) then - debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^7qbx_core", item) + debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^7qbx_core^7", item) exports[QBXExport]:CreateUseableItem(item, funct) + + elseif isStarted(RSGExport) then + debugPrint("^6Bridge^7: ^2Registering item as ^3Usable^2 with ^1rsg-core^7", item) + Core.Functions.CreateUseableItem(item, funct) + else print("^4ERROR^7: No supported framework detected for registering usable item: ^3"..item.."^7") end diff --git a/shared/jobfunctions.lua b/shared/jobfunctions.lua index 36cbb58..4cc9722 100644 --- a/shared/jobfunctions.lua +++ b/shared/jobfunctions.lua @@ -95,6 +95,8 @@ function toggleDuty() onDuty = not onDuty if isStarted(QBExport) or isStarted(QBXExport) then TriggerServerEvent("QBCore:ToggleDuty") + elseif isStarted(RSGExport) then + TriggerServerEvent("RSGCore:ToggleDuty") else if onDuty then triggerNotify(nil, "Now on duty", "success") diff --git a/shared/metaHandlers.lua b/shared/metaHandlers.lua index 8a19766..56273f1 100644 --- a/shared/metaHandlers.lua +++ b/shared/metaHandlers.lua @@ -32,6 +32,9 @@ function GetPlayer(source) elseif isStarted(OXCoreExport) then debugPrint("^6Bridge^7: ^3GetPlayer^7() OXCoreExport") return exports[OXCoreExport]:GetPlayer(source) + elseif isStarted(RSGExport) then + debugPrint("^6Bridge^7: ^3GetPlayer^7() RSGExport") + return exports[RSGExport]:GetCoreObject().Functions.GetPlayer(source) end return nil end @@ -58,7 +61,7 @@ function GetMetadata(player, key) return triggerCallback(getScript()..":server:GetMetadata", key) else if isStarted(QBExport) or isStarted(QBXExport) then - debugPrint("^6Bridge^7: ^3GetMetadata^7() QBExport or QBXExport", key) + debugPrint("^6Bridge^7: ^3GetMetadata^7() QBExport/QBXExport", key) return player.PlayerData.metadata[key] elseif isStarted(ESXExport) then debugPrint("^6Bridge^7: ^3GetMetadata^7() ESXExport", key) @@ -66,6 +69,9 @@ function GetMetadata(player, key) elseif isStarted(OXCoreExport) then debugPrint("^6Bridge^7: ^3GetMetadata^7() OXCoreExport", key) return player.get(key) + elseif isStarted(RSGExport) then + debugPrint("^6Bridge^7: ^3GetMetadata^7() RSGExport", key) + return player.PlayerData.metadata[key] end end return nil @@ -118,6 +124,9 @@ function SetMetadata(player, key, value) elseif isStarted(OXCoreExport) then debugPrint("^6Bridge^7: ^3SetMetadata^7() using OXCoreExport") player.set(key, value) + elseif isStarted(RSGExport) then + debugPrint("^6Bridge^7: ^3SetMetadata^7() using RSGExport") + player.Functions.SetMetaData(key, value) end end diff --git a/shared/playerfunctions.lua b/shared/playerfunctions.lua index 46eed39..5574c6d 100644 --- a/shared/playerfunctions.lua +++ b/shared/playerfunctions.lua @@ -111,10 +111,16 @@ end) function setThirst(src, thirst) if isStarted(ESXExport) then TriggerClientEvent('esx_status:add', src, 'thirst', thirst) + elseif isStarted(QBExport) or isStarted(QBXExport) then local Player = Core.Functions.GetPlayer(src) Player.Functions.SetMetaData('thirst', thirst) TriggerClientEvent("hud:client:UpdateNeeds", src, thirst, Player.PlayerData.metadata.thirst) + + elseif isStarted(RSGExport) then + local Player = Core.Functions.GetPlayer(src) + Player.Functions.SetMetaData('thirst', thirst) + TriggerClientEvent("hud:client:UpdateNeeds", src, thirst, Player.PlayerData.metadata.thirst) end end @@ -130,10 +136,16 @@ end function setHunger(src, hunger) if isStarted(ESXExport) then TriggerClientEvent('esx_status:add', src, 'hunger', hunger) + elseif isStarted(QBExport) or isStarted(QBXExport) then local Player = Core.Functions.GetPlayer(src) Player.Functions.SetMetaData('hunger', hunger) TriggerClientEvent("hud:client:UpdateNeeds", src, hunger, Player.PlayerData.metadata.hunger) + + elseif isStarted(RSGExport) then + local Player = Core.Functions.GetPlayer(src) + Player.Functions.SetMetaData('hunger', hunger) + TriggerClientEvent("hud:client:UpdateNeeds", src, hunger, Player.PlayerData.metadata.hunger) end end @@ -161,20 +173,31 @@ function chargePlayer(cost, moneyType, newsrc) if moneyType == "cash" then if isStarted(OXInv) then fundResource = OXInv exports[OXInv]:RemoveItem(src, "money", cost) + elseif isStarted(QBExport) or isStarted(QBXExport) then fundResource = QBExport Core.Functions.GetPlayer(src).Functions.RemoveMoney("cash", cost) + elseif isStarted(RSGExport) then - fundResource = QBExport + fundResource = RSGExport Core.Functions.GetPlayer(src).Functions.RemoveMoney("cash", cost) + elseif isStarted(ESXExport) then fundResource = ESXExport ESX.GetPlayerFromId(src).removeMoney(cost, "") + end elseif moneyType == "bank" then - if isStarted(QBExport) or isStarted(QBXExport) then fundResource = QBExport + if isStarted(QBExport) or isStarted(QBXExport) then + fundResource = QBExport Core.Functions.GetPlayer(src).Functions.RemoveMoney("bank", cost) - elseif isStarted(ESXExport) then fundResource = ESXExport + + elseif isStarted(RSGExport) then + fundResource = RSGExport + Core.Functions.GetPlayer(src).Functions.RemoveMoney("bank", cost) + + elseif isStarted(ESXExport) then + fundResource = ESXExport ESX.GetPlayerFromId(src).removeMoney(cost, "") end end @@ -212,17 +235,29 @@ function fundPlayer(fund, moneyType, newsrc) if isStarted(OXInv) then fundResource = OXInv exports[OXInv]:AddItem(src, "money", fund) + elseif isStarted(QBExport) or isStarted(QBXExport) then fundResource = QBExport Core.Functions.GetPlayer(src).Functions.AddMoney("cash", fund) + + elseif isStarted(RSGExport) then + fundResource = RSGExport + Core.Functions.GetPlayer(src).Functions.AddMoney("cash", fund) + elseif isStarted(ESXExport) then fundResource = ESXExport - PlayESX.GetPlayerFromId(src).addMoney(fund, "") + ESX.GetPlayerFromId(src).addMoney(fund, "") + end elseif moneyType == "bank" then if isStarted(QBExport) or isStarted(QBXExport) then fundResource = QBExport Core.Functions.GetPlayer(src).Functions.AddMoney("bank", fund) + + elseif isStarted(RSGExport) then + fundResource = RSGExport + Core.Functions.GetPlayer(src).Functions.AddMoney("bank", fund) + elseif isStarted(ESXExport) then fundResource = ESXExport ESX.GetPlayerFromId(src).addMoney(fund, "") @@ -380,6 +415,35 @@ function hasJob(job, source, grade) if grade and not (grade <= ganginfo.grade.level) then hasJobFlag = false end end end + + elseif isStarted(RSGExport) then + if Core.Functions.GetPlayer then + local player = Core.Functions.GetPlayer(src) + if not player then print("Player not found for src: "..src) end + local jobinfo = player.PlayerData.job + if jobinfo.name == job then + hasJobFlag = true + duty = player.PlayerData.job.onduty + if grade and not (grade <= jobinfo.grade.level) then hasJobFlag = false end + end + local ganginfo = player.PlayerData.gang + if ganginfo.name == job then + hasJobFlag = true + if grade and not (grade <= ganginfo.grade.level) then hasJobFlag = false end + end + else + local jobinfo = exports[RSGExport]:GetPlayer(src).PlayerData.job + if jobinfo.name == job then + hasJobFlag = true + duty = exports[RSGExport]:GetPlayer(src).PlayerData.job.onduty + if grade and not (grade <= jobinfo.grade.level) then hasJobFlag = false end + end + local ganginfo = exports[RSGExport]:GetPlayer(src).PlayerData.gang + if ganginfo.name == job then + hasJobFlag = true + if grade and not (grade <= ganginfo.grade.level) then hasJobFlag = false end + end + end else print("^4ERROR^7: ^2No Core detected for hasJob ^7- ^2Check ^3starter^1.^2lua^7") end @@ -425,6 +489,22 @@ function hasJob(job, source, grade) hasJobFlag = true if grade and not (grade <= ganginfo.grade.level) then hasJobFlag = false end end + + elseif isStarted(RSGExport) then + local info = nil + Core.Functions.GetPlayerData(function(PlayerData) info = PlayerData end) + local jobinfo = info.job + if jobinfo.name == job then + hasJobFlag = true + duty = jobinfo.onduty + if grade and not (grade <= jobinfo.grade.level) then hasJobFlag = false end + end + local ganginfo = info.gang + if ganginfo.name == job then + hasJobFlag = true + if grade and not (grade <= ganginfo.grade.level) then hasJobFlag = false end + end + else print("^4ERROR^7: ^2No Core detected for hasJob() ^7- ^2Check ^3starter^1.^2lua^7") end diff --git a/shared/vehicles.lua b/shared/vehicles.lua index 7430e01..3be6640 100644 --- a/shared/vehicles.lua +++ b/shared/vehicles.lua @@ -108,6 +108,7 @@ function getVehicleProperties(vehicle) if isStarted(QBExport) and not isStarted(QBXExport) then properties = Core.Functions.GetVehicleProperties(vehicle) debugPrint("^6Bridge^7: ^2Getting Vehicle Properties ^7[^6"..QBExport.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..properties.model.."^7] - [^3"..properties.plate.."^7]") + elseif isStarted(OXLibExport) then properties = lib.getVehicleProperties(vehicle) debugPrint("^6Bridge^7: ^2Getting Vehicle Properties ^7[^6"..OXLibExport.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..properties.model.."^7] - [^3"..properties.plate.."^7]") @@ -134,6 +135,7 @@ function setVehicleProperties(vehicle, props) if isStarted(QBExport) and not isStarted(QBXExport) then Core.Functions.SetVehicleProperties(vehicle, props) debugPrint("^6Bridge^7: ^2Setting Vehicle Properties ^7[^6"..QBExport.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..props.model.."^7] - [^3"..props.plate.."^7]") + elseif isStarted(OXLibExport) then lib.setVehicleProperties(vehicle, props, false) debugPrint("^6Bridge^7: ^2Setting Vehicle Properties ^7[^6"..OXLibExport.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..props.model.."^7] - [^3"..props.plate.."^7]") diff --git a/shared/wrapperfunctions.lua b/shared/wrapperfunctions.lua index 57685ec..bd57309 100644 --- a/shared/wrapperfunctions.lua +++ b/shared/wrapperfunctions.lua @@ -21,17 +21,25 @@ --- }) --- ``` function registerCommand(command, options) + if isStarted(OXLibExport) then debugPrint("^6Bridge^7: ^2Registering ^3Command^2 with ^7"..OXLibExport, command) lib.addCommand(command, { help = options[1], restricted = options[5] and "group."..options[5] or nil }, options[4]) + elseif isStarted(QBExport) and not isStarted(QBXExport) then debugPrint("^6Bridge^7: ^2Registering ^3Command^2 with ^7"..QBExport, command) Core.Commands.Add(command, options[1], options[2], options[3], options[4], options[5] or nil) + + elseif isStarted(RSGExport) then + debugPrint("^6Bridge^7: ^2Registering ^3Command^2 with ^7"..RSGExport, command) + Core.Commands.Add(command, options[1], options[2], options[3], options[4], options[5] or nil) + elseif isStarted(ESXExport) then debugPrint("^6Bridge^7: ^2Registering ^3Command^2 with ^7ESX Legacy", command) ESX.RegisterCommand(command, options[5] or 'admin', function(xPlayer, args, showError) options[4](xPlayer.source, args, showError) end, false, { help = options[1] }) + end end @@ -59,6 +67,7 @@ function registerStash(name, label, slots, weight, owner, coords) if isStarted(OXInv) then debugPrint("^6Bridge^7: ^2Registering ^3OX ^2Stash^7:", name, label, owner or nil) exports[OXInv]:RegisterStash(name, label, slots or 50, weight or 4000000, owner or nil) + elseif isStarted(QSInv) then debugPrint("^6Bridge^7: ^2Registering ^3QS ^2Stash^7:", name, label) exports[QSInv]:RegisterStash(name, label, slots or 50, weight or 4000000) @@ -74,6 +83,7 @@ function registerStash(name, label, slots, weight, owner, coords) elseif isStarted(TgiannInv) then debugPrint("^6Bridge^7: ^2Registering ^3TgiannInv ^2Stash^7:", name, label) exports[TgiannInv]:RegisterStash(name, label, slots or 50, weight or 4000000) + end end