Files
community_bridge/modules/inventory/qs-inventory/server.lua
T
MrNewb 343af95794 Remove example scripts and update core logic
Deleted all files in the examples directory to clean up unused or test scripts. Updated fxmanifest.lua to enable ox_lib initialization. Improved error handling and entity tracking in utility functions, added prop removal, and made minor localization and code style adjustments throughout the codebase. Significant reword of inventory module, notification module, and framework module. Added support for wasabi_uikit, added support for keep-progressbars,
2025-12-14 16:22:35 -05:00

195 lines
7.1 KiB
Lua

---@diagnostic disable: duplicate-set-field
if GetResourceState('qs-inventory') == 'missing' then return end
local quasar = exports['qs-inventory']
Inventory = Inventory or {}
Inventory.Stashes = Inventory.Stashes or {}
---@description This will get the name of the in use resource.
---@return string
Inventory.GetResourceName = function()
return "qs-inventory"
end
---@description This will add an item, and return true or false based on success
---@param src number
---@param item string
---@param count number
---@param slot number
---@param metadata table
---@return boolean
Inventory.AddItem = function(src, item, count, slot, metadata)
if not quasar:CanCarryItem(src, item, count) then return false end
local success = quasar:AddItem(src, item, count, slot, metadata)
if not success then return false end
TriggerClientEvent("community_bridge:client:inventory:updateInventory", src, {action = "add", item = item, count = count, slot = slot, metadata = metadata})
return success
end
---@description This will remove an item, and return true or false based on success
---@param src number
---@param item string
---@param count number
---@param slot number
---@param metadata table
---@return boolean
Inventory.RemoveItem = function(src, item, count, slot, metadata)
local success = quasar:RemoveItem(src, item, count, slot, metadata)
if not success then return false end
TriggerClientEvent("community_bridge:client:inventory:updateInventory", src, {action = "remove", item = item, count = count, slot = slot, metadata = metadata})
return success
end
---@description This will clear the specified inventory, will always return true unless a value isnt passed correctly.
---@param id string
---@return boolean
Inventory.ClearStash = function(id, _type)
if type(id) ~= "string" then return false end
quasar:ClearOtherInventory(_type, id)
return true
end
---@description This will return a table with the item info, {name, label, stack, weight, description, image}
---@param item string
---@return table
Inventory.GetItemInfo = function(item)
local itemsData = quasar:GetItemList()
if not itemsData then return {} end
local itemData = itemsData[item]
if not itemData then return {} end
return {
name = itemData.name or "Missing Name",
label = itemData.label or "Missing Label",
stack = itemData.unique or "false",
weight = itemData.weight or "0",
description = itemData.description or "none",
image = itemData.image or Inventory.GetImagePath(item),
}
end
---@description This will return the entire items table from the inventory.
---@return table
Inventory.Items = function()
return quasar:GetItemList()
end
---@description This will return the count of the item in the players inventory, if not found will return 0.
---@param src number
---@param item string
---@param metadata table
---@return number
Inventory.GetItemCount = function(src, item, metadata)
if metadata then print("qs-inventory does not support metadata searching for item counts, you will need to get the inventory and parse it manually.") end
return quasar:GetItemTotalAmount(src, item) or 0
end
---@description This wil return the players inventory.
---@param src number
---@return table
Inventory.GetPlayerInventory = function(src)
local playerItems = quasar:GetInventory(src)
local repackedTable = {}
for _, v in pairs(playerItems) do
table.insert(repackedTable, {
name = v.name,
count = v.amount or v.count,
metadata = v.info or v.metadata or {},
slot = v.slot,
})
end
return repackedTable
end
---@description Returns the specified slot data as a table.
---@param src number
---@param slot number
---@return table {weight, name, metadata, slot, label, count}
Inventory.GetItemBySlot = function(src, slot)
local playerItems = quasar:GetInventory(src)
for _, item in pairs(playerItems) do
if item.slot == slot then
return {
name = item.name,
label = item.label,
weight = item.weight,
slot = slot,
count = item.amount or item.count,
metadata = item.info or item.metadata or {},
stack = item.unique or item.stack or false,
description = item.description
}
end
end
return {}
end
---@description This will set the metadata of an item in the inventory.
---@param src number
---@param item string
---@param slot number
---@param metadata table
---@return nil
Inventory.SetMetadata = function(src, item, slot, metadata)
return quasar:SetItemMetadata(src, slot, metadata)
end
---@description This will open the specified stash for the src passed.
---@param src number
---@param _type string
---@param id number||string
---@return nil
Inventory.OpenStash = function(src, _type, id)
_type = _type or "stash"
if not Inventory.Stashes[id] then return end
local tbl = Inventory.Stashes[id]
TriggerEvent("inventory:server:OpenInventory", _type, id, tbl and { maxweight = tbl.weight or 5000, slots = tbl.slots or 20 })
TriggerClientEvent("inventory:client:SetCurrentStash",src, id)
end
---@description This will return a boolean if the player has the item.
---@param src number
---@param item string
---@param requiredCount number (optional)
---@return boolean
Inventory.HasItem = function(src, item, requiredCount)
local count = quasar:GetItemTotalAmount(src, item)
if not count then return false end
return count >= (requiredCount or 1)
end
---@description This is to get if there is available space in the inventory, will return boolean.
---@param src number
---@param item string
---@param count number
---@return boolean
Inventory.CanCarryItem = function(src, item, count)
return quasar:CanCarryItem(src, item, count) or false
end
---@description This will update the plate to the vehicle inside the inventory. (It will also update with jg-mechanic if using it)
---@param oldplate string
---@param newplate string
---@return boolean
Inventory.UpdatePlate = function(oldplate, newplate)
local queries = {
'UPDATE inventory_trunk SET plate = @newplate WHERE plate = @oldplate',
'UPDATE inventory_glovebox SET plate = @newplate WHERE plate = @oldplate',
}
local values = { newplate = newplate, oldplate = oldplate }
MySQL.transaction.await(queries, values)
if GetResourceState('jg-mechanic') ~= 'started' then return true end
return true, exports["jg-mechanic"]:vehiclePlateUpdated(oldplate, newplate)
end
---@description This will get the image path for an item, it is an alternate option to GetItemInfo. If a image isnt found will revert to community_bridge logo (useful for menus)
---@param item string
---@return string
Inventory.GetImagePath = function(item)
item = Inventory.StripPNG(item)
local file = LoadResourceFile("qs-inventory", string.format("html/images/%s.png", item))
local imagePath = file and string.format("nui://qs-inventory/html/images/%s.png", item)
return imagePath or "https://avatars.githubusercontent.com/u/47620135"
end
return Inventory