1
0
Fork 0
forked from Simnation/Main
Main/resources/[inventory]/tgiann-inventory/server/convert.lua

340 lines
16 KiB
Lua
Raw Normal View History

2025-07-09 14:25:50 +02:00
-- with this command you can integrate your qb inventories into the new system
-- if you write a code for different inventories please share it with us
-- Commands only available from cmd/live consol
local function convertItemsFile()
local addedAnyItems = false
if config.framework == "qb" then
local QBCore = exports['qb-core']:GetCoreObject({ "Shared" })
local items = QBCore.Shared.Items
if items and table.type(items) ~= 'empty' then
for k, item in pairs(items) do
if type(item) == 'table' then
item.name = tgiCore.trim(string.lower(item.name or k))
if not string.find(item.name, "weapon_") and not itemsData[item.name] then
item.type = item.type or 'item'
item.image = item.image or item.name .. ".webp"
item.unique = item.unique or false
item.useable = item.useable or false
item.shouldClose = item.shouldClose or false
item.description = item.description or ""
itemsData[item.name] = item
addedAnyItems = true
end
end
end
end
elseif config.framework == "esx" then
local items = MySQL.query.await("SELECT * FROM items")
if items and table.type(items) ~= 'empty' then
for _, item in pairs(items) do
item.name = tgiCore.trim(string.lower(item.name))
if not string.find(item.name, "weapon_") and not itemsData[item.name] then
itemsData[item.name] = {
name = item.name, label = item.label, weight = item.weight, type = 'item', image = item.name .. '.webp', unique = false, useable = true, shouldClose = true, description = ''
}
addedAnyItems = true
end
end
end
end
if not addedAnyItems then
return tgiCore.DebugLog('No items added to items.lua file! Your tgiann-inventory items file already converted!')
end
local fileContent = "itemsData = " .. tgiCore.SerializeTable(itemsData)
SaveResourceFile("tgiann-inventory", 'items/items.lua', fileContent, -1)
if config.framework == "qb" then
tgiCore.DebugLog('Your items have been copied from the QBCore.Shared.Items! You should restart the resource to load the new items! You can edit your items from items/items.lua file.')
else
tgiCore.DebugLog('Your items have been copied from the items database! You should restart the resource to load the new items! You can edit your items from items/items.lua file.')
end
end
local function convertItems(items)
if not items then return "[]" end
items = json.decode(items)
if not items then return "[]" end
for _, itemData in pairs(items) do
if itemData then
itemData.info = itemData.metadata or itemData.info
itemData.amount = itemData.count or itemData.amount
if string.find(itemData.name, "weapon_") then itemData.info = nil end
end
end
return json.encode(items)
end
local function checkTableExist(table)
return MySQL.single.await("SHOW TABLES LIKE ?", { table })
end
RegisterCommand(config.commands.convert.convertItemsFile, function(source)
if source > 0 then return tgiCore.DebugErrorLog("Pls use on server cmd") end
convertItemsFile()
end)
-- Qb Inventory
RegisterCommand(config.commands.convert.convertqb, function(source)
if source > 0 then return tgiCore.DebugErrorLog("Pls use on server cmd") end
local newQb = checkTableExist("inventories")
if newQb then
local result = MySQL.query.await('SELECT * FROM inventories')
if result and #result > 0 then
for i = 1, #result do
local inventory = result[i]
local items = inventory.items
local identifier = inventory.identifier
if identifier:find('trunk-') then
MySQL.query.await('INSERT INTO `tgiann_inventory_trunkitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
string.gsub(identifier, "trunk-", ""), items
})
elseif identifier:find('glovebox-') then
MySQL.query.await('INSERT INTO `tgiann_inventory_gloveboxitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
string.gsub(identifier, "glovebox-", ""), items
})
else
MySQL.query.await('INSERT INTO `tgiann_inventory_stashitems` (stash, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
identifier, items
})
end
end
end
tgiCore.DebugLog("New Qb inventories converted")
else
local response = MySQL.query.await('SELECT * FROM `stashitems`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_stashitems` (stash, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].stash, response[i].items
})
end
tgiCore.DebugLog("stashitems converted")
end
local response = MySQL.query.await('SELECT * FROM `trunkitems`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_trunkitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, response[i].items
})
end
tgiCore.DebugLog("trunkitems converted")
end
local response = MySQL.query.await('SELECT * FROM `gloveboxitems`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_gloveboxitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, response[i].items
})
end
tgiCore.DebugLog("gloveboxitems converted")
end
end
if checkTableExist("players") then
local response = MySQL.query.await('SELECT citizenid, inventory FROM `players`')
if response and next(response) then
for i = 1, #response do
if response[i].inventory then
MySQL.query.await('INSERT INTO `tgiann_inventory_player` (citizenid, inventory, clotheinventory) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE inventory = VALUES(inventory), clotheinventory = VALUES(clotheinventory)', {
response[i].citizenid, response[i].inventory, "[]"
})
end
end
tgiCore.DebugLog("Player inventorys converted")
end
end
convertItemsFile()
tgiCore.DebugLog("Finished")
end)
-- Ox Inventory
RegisterCommand(config.commands.convert.convertox, function(source)
if source > 0 then return tgiCore.DebugErrorLog("Pls use on server cmd") end
if not checkTableExist("ox_inventory") then
return tgiCore.DebugErrorLog("Ox Inventory not found")
end
local response = MySQL.query.await('SELECT name, data FROM `ox_inventory`')
if response and next(response) then
for i = 1, #response do
local owner = response[i].owner or ""
MySQL.query.await('INSERT INTO `tgiann_inventory_stashitems` (stash, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].name .. "_" .. owner, convertItems(response[i].data)
})
if response[i].owner then
tgiCore.DebugWarningLog(string.format("%s Converted but u need the edit open event! When opening the stash you need to send the player id in the stash name! Example: TriggerServerEvent('inventory:server:OpenInventory', 'stash', %s_PlayerData.citizenid)", response[i].name, response[i].name))
end
end
tgiCore.DebugLog("stashitems converted")
end
if config.framework == "qb" then
local response = MySQL.query.await('SELECT glovebox, trunk, plate FROM `player_vehicles`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_gloveboxitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, convertItems(response[i].glovebox)
})
MySQL.query.await('INSERT INTO `tgiann_inventory_trunkitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, convertItems(response[i].trunk)
})
end
tgiCore.DebugLog("gloveboxitems and trunkitems converted")
end
else
local response = MySQL.query.await('SELECT glovebox, trunk, plate FROM `owned_vehicles`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_gloveboxitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, convertItems(response[i].glovebox)
})
MySQL.query.await('INSERT INTO `tgiann_inventory_trunkitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, convertItems(response[i].trunk)
})
end
tgiCore.DebugLog("gloveboxitems and trunkitems converted")
end
end
if config.framework == "qb" then
local response = MySQL.query.await('SELECT citizenid, inventory FROM `players`')
if response and next(response) then
for i = 1, #response do
if response[i].inventory then
MySQL.query.await('INSERT INTO `tgiann_inventory_player` (citizenid, inventory, clotheinventory) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE inventory = VALUES(inventory), clotheinventory = VALUES(clotheinventory)', {
response[i].citizenid, convertItems(response[i].inventory), "[]"
})
end
end
tgiCore.DebugLog("Player inventorys converted")
end
else
local response = MySQL.query.await('SELECT identifier, inventory FROM `users`')
if response and next(response) then
for i = 1, #response do
if response[i].inventory then
MySQL.query.await('INSERT INTO `tgiann_inventory_player` (citizenid, inventory, clotheinventory) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE inventory = VALUES(inventory), clotheinventory = VALUES(clotheinventory)', {
response[i].identifier, convertItems(response[i].inventory), "[]"
})
end
end
tgiCore.DebugLog("Player inventorys converted")
end
end
tgiCore.DebugLog("Finished")
end)
-- qs_inventory
RegisterCommand(config.commands.convert.convertqsinv, function(source)
if source > 0 then return tgiCore.DebugErrorLog("Pls use on server cmd") end
local response = MySQL.query.await('SELECT * FROM `inventory_stash`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_stashitems` (stash, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].stash, response[i].items
})
end
tgiCore.DebugLog("inventory_stash converted")
end
local response = MySQL.query.await('SELECT * FROM `inventory_trunk`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_trunkitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, response[i].items
})
end
tgiCore.DebugLog("inventory_trunk converted")
end
local response = MySQL.query.await('SELECT * FROM `inventory_glovebox`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_gloveboxitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, response[i].items
})
end
tgiCore.DebugLog("inventory_glovebox converted")
end
if config.framework == "qb" then
local response = MySQL.query.await('SELECT citizenid, inventory FROM `players`')
if response and next(response) then
for i = 1, #response do
if response[i].inventory then
MySQL.query.await('INSERT INTO `tgiann_inventory_player` (citizenid, inventory, clotheinventory) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE inventory = VALUES(inventory), clotheinventory = VALUES(clotheinventory)', {
response[i].citizenid, convertItems(response[i].inventory), "[]"
})
end
end
tgiCore.DebugLog("Player inventorys converted")
end
else
local response = MySQL.query.await('SELECT identifier, inventory FROM `users`')
if response and next(response) then
for i = 1, #response do
if response[i].inventory then
MySQL.query.await('INSERT INTO `tgiann_inventory_player` (citizenid, inventory, clotheinventory) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE inventory = VALUES(inventory), clotheinventory = VALUES(clotheinventory)', {
response[i].identifier, convertItems(response[i].inventory), "[]"
})
end
end
tgiCore.DebugLog("Player inventorys converted")
end
end
tgiCore.DebugLog("Finished")
end)
-- codem-inventory
RegisterCommand(config.commands.convert.convertcodeminv, function(source)
if source > 0 then return tgiCore.DebugErrorLog("Pls use on server cmd") end
local response = MySQL.query.await('SELECT * FROM `codem_new_stash`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_stashitems` (stash, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].stashname, response[i].items
})
end
tgiCore.DebugLog("codem_new_stash converted")
end
local response = MySQL.query.await('SELECT * FROM `codem_new_vehicleandglovebox`')
if response and next(response) then
for i = 1, #response do
MySQL.query.await('INSERT INTO `tgiann_inventory_gloveboxitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, response[i].glovebox
})
MySQL.query.await('INSERT INTO `tgiann_inventory_trunkitems` (plate, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = VALUES(items)', {
response[i].plate, response[i].trunk
})
end
tgiCore.DebugLog("codem_new_vehicleandglovebox converted")
end
local response = MySQL.query.await('SELECT identifier, inventory FROM `codem_new_inventory`')
if response and next(response) then
for i = 1, #response do
if response[i].inventory then
MySQL.query.await('INSERT INTO `tgiann_inventory_player` (citizenid, inventory, clotheinventory) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE inventory = VALUES(inventory), clotheinventory = VALUES(clotheinventory)', {
response[i].identifier, convertItems(response[i].inventory), "[]"
})
end
end
tgiCore.DebugLog("Player inventorys converted")
end
tgiCore.DebugLog("Finished")
end)