mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 05:56:02 +01:00
refactor + attempt better support for other inventories
This commit is contained in:
@@ -1,32 +1,63 @@
|
||||
-- Create empty Variables --
|
||||
--[[
|
||||
Resource Initialization Module
|
||||
--------------------------------
|
||||
This module initializes and loads shared data (Items, Vehicles, Jobs, Gangs) from the
|
||||
various frameworks/inventory systems (OX, QB, ESX, etc.). It also corrects export names,
|
||||
caches framework exports into simple variables, and prints debug information if enabled.
|
||||
]]
|
||||
|
||||
-------------------------------------------------------------
|
||||
-- Global Variable Initialization
|
||||
-------------------------------------------------------------
|
||||
Items, Vehicles, Jobs, Gangs, Core, ESX = {}, nil, nil, nil, nil, nil
|
||||
|
||||
-- Correct QB inventory export (if needed) from 'qb-inventory' to 'ps-inventory' or 'lj-inventory' --
|
||||
-------------------------------------------------------------
|
||||
-- Correct QB Inventory Export
|
||||
-------------------------------------------------------------
|
||||
-- Ensure that the QB inventory export is corrected from 'qb-inventory' to 'ps-inventory' or 'lj-inventory' if needed.
|
||||
Exports.QBInv = (isStarted("ps-inventory") and "ps-inventory") or (isStarted("lj-inventory") and "lj-inventory") or Exports.QBInv
|
||||
|
||||
-- Create simple variables based on the corresponding framework exports --
|
||||
OXLibExport, QBXExport, QBExport, ESXExport, OXCoreExport = Exports.OXLibExport or "", Exports.QBXExport or "", Exports.QBExport or "", Exports.ESXExport or "", Exports.OXCoreExport or ""
|
||||
-------------------------------------------------------------
|
||||
-- Framework Exports and Inventory Identifiers
|
||||
-------------------------------------------------------------
|
||||
OXLibExport, QBXExport, QBExport, ESXExport, OXCoreExport =
|
||||
Exports.OXLibExport or "",
|
||||
Exports.QBXExport or "",
|
||||
Exports.QBExport or "",
|
||||
Exports.ESXExport or "",
|
||||
Exports.OXCoreExport or ""
|
||||
|
||||
-- Create simple variables based on the corresponding inventory names --
|
||||
OXInv, QBInv, PSInv, QSInv, CoreInv, CodeMInv, OrigenInv = Exports.OXInv or "", Exports.QBInv or "", Exports.PSInv or "", Exports.QSInv or "", Exports.CoreInv or "", Exports.CodeMInv or "", Exports.OrigenInv or ""
|
||||
OXInv, QBInv, PSInv, QSInv, CoreInv, CodeMInv, OrigenInv =
|
||||
Exports.OXInv or "",
|
||||
Exports.QBInv or "",
|
||||
Exports.PSInv or "",
|
||||
Exports.QSInv or "",
|
||||
Exports.CoreInv or "",
|
||||
Exports.CodeMInv or "",
|
||||
Exports.OrigenInv or ""
|
||||
|
||||
-- QB-Menu export name grabbed from exports.lua --
|
||||
QBMenuExport = Exports.QBMenuExport or ""
|
||||
|
||||
-- Target exports based on what is loaded --
|
||||
QBTargetExport, OXTargetExport = Exports.QBTargetExport or "", Exports.OXTargetExport or ""
|
||||
|
||||
-- If Debug mode is on in the loading script, print the list of found exports --
|
||||
-- Some may "lie", 'ox_target' attempts to use 'qb-target' exports and this print will say its loaded (which is technically true) --
|
||||
-------------------------------------------------------------
|
||||
-- Debug: Print Found Exports
|
||||
-------------------------------------------------------------
|
||||
-- Print a list of all exports that are currently started (if debugMode is enabled).
|
||||
for _, v in pairs(Exports) do
|
||||
if isStarted(v) then debugPrint("^6Bridge^7: '^3"..v.."^7' ^2export found ^7") end
|
||||
if isStarted(v) then
|
||||
debugPrint("^6Bridge^7: '^3"..v.."^7' export found")
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------
|
||||
-- Resource Variables for Items, Jobs, and Vehicles
|
||||
-------------------------------------------------------------
|
||||
local itemResource, jobResource, vehResource = "", "", ""
|
||||
|
||||
-- Load item lists --
|
||||
-- Complies the items from ox_inventory, qb-core or esx into 'Items' and loads them in a layout similar to qb-core's Shared items.lua --
|
||||
-- For example this makes it so instead of QBCore.Shared.Items[item], you can load 'Item[item]' in the script --
|
||||
-------------------------------------------------------------
|
||||
-- Loading Items
|
||||
-------------------------------------------------------------
|
||||
-- Load and compile shared items from the detected inventory system.
|
||||
if isStarted(OXInv) then
|
||||
itemResource = OXInv
|
||||
Items = exports[OXInv]:Items()
|
||||
@@ -54,14 +85,13 @@ elseif isStarted(QBExport) then
|
||||
elseif isStarted(ESXExport) then
|
||||
itemResource = ESXExport
|
||||
ESX = exports[ESXExport]:getSharedObject()
|
||||
--Items = ESX and ESX.Items or nil
|
||||
while ESX == nil do
|
||||
print("Waiting for ESX")
|
||||
Wait(0)
|
||||
end
|
||||
if isServer() then
|
||||
Items = ESX.GetItems()
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Items).." ^3Items^2 from ^7" .. itemResource)
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Items).." ^3Items^2 from ^7"..itemResource)
|
||||
end
|
||||
CreateThread(function()
|
||||
while not ESX do Wait(0) end
|
||||
@@ -72,25 +102,23 @@ elseif isStarted(ESXExport) then
|
||||
end
|
||||
if not isServer() then
|
||||
Items = triggerCallback(getScript()..":getItems")
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Items).." ^3Items^2 from ^7" .. itemResource)
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Items).." ^3Items^2 from ^7"..itemResource)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
end
|
||||
-- If it fails to load items, then it will print the error below --
|
||||
-- If it loads them and debug is on, print how many items and where from --
|
||||
|
||||
if not isStarted(ESXExport) then
|
||||
if not Items then
|
||||
print("^4ERROR^7: ^2No Core Items detected ^7- ^2Check ^3exports^1.^2lua^7")
|
||||
print("^4ERROR^7: ^2No Core Items detected ^7- ^2Check ^3starter^1.^2lua^7")
|
||||
else
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Items).." ^3Items^2 from ^7" .. itemResource)
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Items).." ^3Items^2 from ^7"..itemResource)
|
||||
end
|
||||
end
|
||||
|
||||
-- Load Vehicles --
|
||||
-- Complies the vehicles from the detected frameworks into a table in the style of qb-cores shared vehicles.lua --
|
||||
-- For example, instead of using QBCore.Shared.Vehicles[vehicle] you can load 'Vehicles[vehicle]' in the script --
|
||||
-------------------------------------------------------------
|
||||
-- Loading Vehicles
|
||||
-------------------------------------------------------------
|
||||
-- Compile vehicles from the detected frameworks into a unified table.
|
||||
if isStarted(QBXExport) or isStarted(QBExport) then
|
||||
Core = Core or exports[QBExport]:GetCoreObject()
|
||||
Vehicles = Core and Core.Shared.Vehicles
|
||||
@@ -101,15 +129,15 @@ if isStarted(QBXExport) or isStarted(QBExport) then
|
||||
end)
|
||||
end
|
||||
vehResource = QBExport
|
||||
|
||||
elseif isStarted(OXCoreExport) then
|
||||
Vehicles = {}
|
||||
for k, v in pairs(Ox.GetVehicleData()) do
|
||||
Vehicles[k] = { model = k, price = v.price, name = v.name, brand = v.make }
|
||||
end
|
||||
vehResource = OXCoreExport
|
||||
|
||||
elseif isStarted(ESXExport) then
|
||||
-- print("^6Bridge^7: ^2Loading ^3Vehicles^2 from ^7"..ESXExport)
|
||||
-- print("^6Bridge^7: ^2Loading ^6"..countTable(Vehicles).." ^3Vehicles^2 from ^7"..ESXExport)
|
||||
CreateThread(function()
|
||||
if isServer() then
|
||||
createCallback(getScript()..":getVehiclesPrices", function(source)
|
||||
@@ -122,43 +150,56 @@ elseif isStarted(ESXExport) then
|
||||
local TempVehicles = triggerCallback(getScript()..":getVehiclesPrices")
|
||||
for _, v in pairs(TempVehicles) do
|
||||
Vehicles = Vehicles or {}
|
||||
Vehicles[v.model] = { model = v.model, price = v.price, name = v.name, brand = GetMakeNameFromVehicleModel(v.model):lower():gsub("^%l", string.upper) }
|
||||
Vehicles[v.model] = {
|
||||
model = v.model,
|
||||
price = v.price,
|
||||
name = v.name,
|
||||
brand = GetMakeNameFromVehicleModel(v.model):lower():gsub("^%l", string.upper)
|
||||
}
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
if vehResource == nil then
|
||||
print("^4ERROR^7: ^2No Vehicle info detected ^7- ^2Check ^3exports^1.^2lua^7")
|
||||
print("^4ERROR^7: ^2No Vehicle info detected ^7- ^2Check ^3starter^1.^2lua^7")
|
||||
else
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Vehicles).." ^3Vehicles^2 from ^7"..vehResource)
|
||||
end
|
||||
|
||||
-- Load Jobs --
|
||||
-- Attempts to load the details of jobs and gangs and compile into tables --
|
||||
-- For example, instead of using QBCore.Shared.Jobs[job] you can load 'Jobs[job]' in the script --
|
||||
if isStarted(QBXExport) then jobResource = QBXExport
|
||||
-------------------------------------------------------------
|
||||
-- Loading Jobs and Gangs
|
||||
-------------------------------------------------------------
|
||||
-- Compile jobs and gangs from the detected framework.
|
||||
if isStarted(QBXExport) then
|
||||
jobResource = QBXExport
|
||||
Core = Core or exports[QBExport]:GetCoreObject()
|
||||
Jobs, Gangs = exports[QBXExport]:GetJobs(), exports[QBXExport]:GetGangs()
|
||||
|
||||
elseif isStarted(OXCoreExport) then jobResource = OXExport
|
||||
elseif isStarted(OXCoreExport) then
|
||||
jobResource = OXExport
|
||||
CreateThread(function()
|
||||
if isServer() then
|
||||
createCallback(getScript()..":getOxGroups", function(source)
|
||||
Jobs = MySQL.query.await('SELECT * FROM `ox_groups`') return Jobs
|
||||
Jobs = MySQL.query.await('SELECT * FROM `ox_groups`')
|
||||
return Jobs
|
||||
end)
|
||||
else
|
||||
local TempJobs = triggerCallback(getScript()..":getOxGroups")
|
||||
Jobs = TempJobs or {}
|
||||
for k, v in pairs(TempJobs) do
|
||||
local grades = {}
|
||||
for i = 1, #v.grades do grades[i] = { name = v.grades[i], isboss = (i == #v.grades)} end
|
||||
for i = 1, #v.grades do
|
||||
grades[i] = { name = v.grades[i], isboss = (i == #v.grades) }
|
||||
end
|
||||
Jobs[v.name] = { label = v.label, grades = grades }
|
||||
end
|
||||
Gangs = Jobs
|
||||
end
|
||||
end)
|
||||
|
||||
elseif isStarted(QBExport) then jobResource = QBExport
|
||||
elseif isStarted(QBExport) then
|
||||
jobResource = QBExport
|
||||
Core = Core or exports[QBExport]:GetCoreObject()
|
||||
Jobs, Gangs = Core.Shared.Jobs, Core.Shared.Gangs
|
||||
if isStarted(QBExport) and not isStarted(QBXExport) then
|
||||
@@ -169,12 +210,11 @@ elseif isStarted(QBExport) then jobResource = QBExport
|
||||
end
|
||||
|
||||
elseif isStarted(ESXExport) then
|
||||
--print("^6Bridge^7: ^2Loading ^3Jobs^7/^3Gangs^2 from ^7"..ESXExport)
|
||||
ESX = exports[ESXExport]:getSharedObject()
|
||||
if isServer() then
|
||||
Jobs = ESX.GetJobs()
|
||||
for k, v in pairs(Jobs) do
|
||||
local count = countTable(Jobs[k].grades)-1
|
||||
local count = countTable(Jobs[k].grades) - 1
|
||||
Jobs[k].grades[tostring(count)].isBoss = true
|
||||
end
|
||||
Gangs = Jobs
|
||||
@@ -192,6 +232,8 @@ elseif isStarted(ESXExport) then
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
if not isStarted(ESXExport) and Jobs then
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Jobs).." ^3Jobs^2 from ^7"..jobResource, "^6Bridge^7: ^2Loading ^6"..countTable(Gangs).." ^3Gangs^2 from ^7"..jobResource)
|
||||
end
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Jobs).." ^3Jobs^2 from ^7"..jobResource)
|
||||
debugPrint("^6Bridge^7: ^2Loading ^6"..countTable(Gangs).." ^3Gangs^2 from ^7"..jobResource)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user