Files
red-valley/resources/luxu_admin/bridge/shared/inventory.lua
2026-03-29 21:41:17 +03:00

144 lines
4.5 KiB
Lua

--- Order is important, the first one that is found will be used
--- ox_inventory, esx_addoninventory and qb-inventory must be last to avoid conflicts
local images = {
{ name = "tgiann-inventory", path = "https://cfx-nui-inventory_images/images/%s.png" },
{ name = "ak47_inventory", path = "https://cfx-nui-ak47_inventory/web/build/images/%s.png" },
{ name = "ak47_qb_inventory", path = "https://cfx-nui-ak47_qb_inventory/web/build/images/%s.png" },
{ name = "qs-inventory", path = "https://cfx-nui-qs-inventory/html/images/%s.png" },
{ name = "core_inventory", path = "https://cfx-nui-core_inventory/html/img/%s.png" },
{ name = "inventory", path = "https://cfx-nui-inventory/web/dist/assets/items/%s.png" },
--[[ Standard Inventorys ]]
{ name = "ox_inventory", path = "https://cfx-nui-ox_inventory/web/images/%s.png" },
{ name = "qb-inventory", path = "https://cfx-nui-qb-inventory/html/images/%s.png" },
{ name = "esx_addoninventory", path = "https://cfx-nui-esx_addoninventory/web/images/%s.png" },
}
if Config.inventory.auto_detect then
for _, inv in ipairs(images) do
if (GetResourceState(inv.name) == 'started') then
Config.inventory.name = inv.name
Config.inventory.images_url = inv.path
break
end
end
end
exports("getInventoryConfig", function()
return Config.inventory
end)
---@class SharedInventoryUtils
local inventory = {}
---@return {name:string, label:string, image:string}[]
function inventory.getItems()
if Config.inventory.name == "ox_inventory" then
local result = exports.ox_inventory:Items()
local list = {}
for _, v in pairs(result) do
if v.name then
list[#list + 1] = {
name = v.name,
label = v.label or v.name,
image = v.client?.image or v.image or nil
}
end
end
return list
end
if Config.inventory.name == "ak47_inventory" then
local result = exports.ak47_inventory:Items()
local list = {}
for _, v in pairs(result) do
list[#list + 1] = {
name = v.name,
label = v.label or v.name,
image = v.image
}
end
return list
end
if Config.inventory.name == "ak47_qb_inventory" then
local result = exports.ak47_qb_inventory:Items()
local list = {}
for _, v in pairs(result) do
list[#list + 1] = {
name = v.name,
label = v.label,
image = v.image
}
end
return list
end
if Config.inventory.name == "tgiann-inventory" then
local result = exports["tgiann-inventory"]:Items()
local list = {}
for _, v in pairs(result) do
list[#list + 1] = {
name = v.name,
label = v.label,
image = v.image
}
end
return list
end
if Framework.name == 'qb' or Framework.name == 'qbx' then
local items = Framework.object.Shared.Items or {}
local list = {}
for _, v in pairs(items) do
list[#list + 1] = {
name = v.name,
label = v.label,
image = v.image
}
end
return list
end
if Framework.name == 'esx' then
if IsDuplicityVersion() then
return CachedESXItems
else
local result = Luxu.callbackSync("esx:getItems")
return result or {}
end
end
return {}
end
if IsDuplicityVersion() then
if Framework.name == "esx" then
CachedESXItems = {}
Luxu.registerServerCallback("esx:getItems", function()
return CachedESXItems
end)
MySQL.ready(function()
if ESX and ESX.GetItems then
local rawItems = ESX.GetItems() -- Not available in all versions
local list = {}
for name, v in pairs(rawItems) do
list[#list + 1] = {
name = v.name or name,
label = v.label
}
end
CachedESXItems = list
else
local result = MySQL.query.await("SELECT name, label FROM items")
if result then
CachedESXItems = result
end
end
end)
end
end
return inventory