Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 10 additions & 11 deletions [esx_addons]/esx_addoninventory/fxmanifest.lua
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
fx_version 'adamant'

fx_version 'cerulean'
game 'gta5'

description 'Adds a way for resources to store items for players'
lua54 'yes'
use_fxv2_oal 'yes'

version '1.0'
author 'ESX-Framework'
description 'Adds a way for resources to store items for players.'
version '1.1'
legacyversion '1.13.4'

server_scripts {
'@es_extended/imports.lua',
'@oxmysql/lib/MySQL.lua',
'server/classes/addoninventory.lua',
'server/database.lua',
'server/main.lua'
}

server_exports {
'GetSharedInventory',
'AddSharedInventory'
}

dependency 'es_extended'
-- server_exports {
-- 'GetSharedInventory',
-- 'AddSharedInventory'
-- }
107 changes: 45 additions & 62 deletions [esx_addons]/esx_addoninventory/server/classes/addoninventory.lua
Original file line number Diff line number Diff line change
@@ -1,85 +1,68 @@
---@alias AddonInventoryItem { name: string, count: number, label: string }

---@class AddonInventory
---@field name string
---@field owner? string
---@field items table<string, AddonInventoryItem>
---@field addItem fun(itemName: string, count: number)
---@field removeItem fun(itemName: string, count: number)
---@field setItem fun(itemName: string, count: number)
---@field getItem fun(itemName: string): AddonInventoryItem
---@field saveItem function

---@param name string
---@param owner? string
---@param items table<string, AddonInventoryItem>
---@return AddonInventory
function CreateAddonInventory(name, owner, items)
local self = {}
---@diagnostic disable-next-line: missing-fields
local self = {} --[[@type AddonInventory]]

self.name = name
self.owner = owner
self.items = items
self.items = {}

function self.addItem(name, count)
local item = self.getItem(name)
item.count = item.count + count
for _, item in ipairs(items) do
local itemName = item.name
self.items[itemName] = {
name = itemName,
count = item.count,
label = ESX.GetItemLabel(itemName),
}
end

self.saveItem(name, item.count)
function self.addItem(itemName, count)
local item = self.getItem(itemName)
item.count += count
end

function self.removeItem(name, count)
if count > 0 then
local item = self.getItem(name)
item.count = item.count - count

self.saveItem(name, item.count)
end
function self.removeItem(itemName, count)
if count <= 0 then return end

local item = self.getItem(itemName)
item.count = math.max(0, item.count - count)
end

function self.setItem(name, count)
local item = self.getItem(name)
function self.setItem(itemName, count)
local item = self.getItem(itemName)
item.count = count

self.saveItem(name, item.count)
end

function self.getItem(name)
for i=1, #self.items, 1 do
if self.items[i].name == name then
return self.items[i]
end
end
function self.getItem(itemName)
local existingItem = self.items[itemName]
if existingItem then return existingItem end

item = {
name = name,
self.items[itemName] = {
name = itemName,
count = 0,
label = Items[name]
label = ESX.GetItemLabel(itemName)
}

table.insert(self.items, item)

if self.owner == nil then
MySQL.update('INSERT INTO addon_inventory_items (inventory_name, name, count) VALUES (@inventory_name, @item_name, @count)',
{
['@inventory_name'] = self.name,
['@item_name'] = name,
['@count'] = 0
})
else
MySQL.update('INSERT INTO addon_inventory_items (inventory_name, name, count, owner) VALUES (@inventory_name, @item_name, @count, @owner)',
{
['@inventory_name'] = self.name,
['@item_name'] = name,
['@count'] = 0,
['@owner'] = self.owner
})
end

return item
return self.items[itemName]
end

function self.saveItem(name, count)
if self.owner == nil then
MySQL.update('UPDATE addon_inventory_items SET count = @count WHERE inventory_name = @inventory_name AND name = @item_name', {
['@inventory_name'] = self.name,
['@item_name'] = name,
['@count'] = count
})
else
MySQL.update('UPDATE addon_inventory_items SET count = @count WHERE inventory_name = @inventory_name AND name = @item_name AND owner = @owner', {
['@inventory_name'] = self.name,
['@item_name'] = name,
['@count'] = count,
['@owner'] = self.owner
})
end
function self.saveItem(itemName, count)
end

return self
end

35 changes: 35 additions & 0 deletions [esx_addons]/esx_addoninventory/server/database.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
Database = {}

---@class DatabaseInventoryRow
---@field name string
---@field label string
---@field shared number

---@class DatabaseInventoryItemRow
---@field id number
---@field inventory_name string
---@field name string
---@field count number
---@field owner? string

---@param name string
---@param shared? boolean
---@return DatabaseInventoryRow?
function Database.fetchInventory(name, shared)
return MySQL.single.await('SELECT * FROM addon_inventory WHERE name = ? AND shared = ?', { name, shared and 1 or 0 })
end

---@param name string
---@param owner? string
---@return DatabaseInventoryItemRow[]
function Database.fetchInventoryItems(name, owner)
if owner then
return MySQL.query.await('SELECT * FROM addon_inventory_items WHERE inventory_name = ? AND owner = ?', { name, owner })
end

return MySQL.query.await('SELECT * FROM addon_inventory_items WHERE inventory_name = ?', { name })
end

function Database.saveInventories()
warn('Not implemented yet.')
end
Loading