Scripts/resources/[qb]/[qb_extras]/qb-store3/Server/Configurate.lua

275 lines
10 KiB
Lua
Raw Normal View History

2024-12-29 20:07:10 +00:00
QBCore = exports['qb-core']:GetCoreObject()
CreateThread(function()
exports.oxmysql:execute('CREATE TABLE IF NOT EXISTS stores (id int AUTO_INCREMENT, name varchar(100), coordinate text, owner varchar(120), stock longtext, products longtext, request longtext, balance varchar(20), PRIMARY KEY(id))', {}, function()
exports.oxmysql:execute('SELECT * FROM stores', {}, function(result)
for i,k in pairs(result) do
local coordinate = json.decode(k.coordinate)
k.coordinate = vector3(coordinate.x, coordinate.y, coordinate.z)
k.stock = json.decode(k.stock)
k.products = json.decode(k.products)
k.request = json.decode(k.request)
k.balance = tonumber(k.balance)
server_stores[k.id] = k
end
for i,k in pairs(stores) do
for j,c in pairs(k.coordinates) do
local found = false
for l,m in pairs(server_stores) do
local x = tonumber(string.format("%.2f", tonumber(m.coordinate.x)))*1.0
local y = tonumber(string.format("%.2f", tonumber(m.coordinate.y)))*1.0
local z = tonumber(string.format("%.2f", tonumber(m.coordinate.z)))*1.0
local pos = vector3(x,y,z)
local x2 = tonumber(string.format("%.2f", tonumber(c.buy_items.x)))*1.0
local y2 = tonumber(string.format("%.2f", tonumber(c.buy_items.y)))*1.0
local z2 = tonumber(string.format("%.2f", tonumber(c.buy_items.z)))*1.0
local pos2 = vector3(x2,y2,z2)
if pos == pos2 then
found = true
if m.name ~= i then
exports.oxmysql:update('UPDATE stores SET name = @name WHERE id = @id', {
['@id'] = l,
['@name'] = i
})
m.name = i
end
break
end
end
if not found then
local stock_aux = json.decode(json.encode(k.items))
for _, m in pairs(stock_aux) do
m.amount = 0
end
local name = i
local coordinate = json.encode({x = c.buy_items.x, y = c.buy_items.y, z = c.buy_items.z})
local owner = "none"
local stock = json.encode(stock_aux)
local products = json.encode(k.items)
local request = json.encode({})
local balance = 0
exports.oxmysql:insert('INSERT INTO stores (name, coordinate, owner, stock, products, request, balance) VALUES (@name, @coordinate, @owner, @stock, @products, @request, @balance)', {
['@name'] = name,
['@coordinate'] = coordinate,
['@owner'] = owner,
['@stock'] = stock,
['@products'] = products,
['@request'] = request,
['@balance'] = balance,
}, function(insertId)
server_stores[insertId] = {
['name'] = name,
['coordinate'] = c.buy_items,
['owner'] = owner,
['stock'] = stock_aux,
['products'] = k.items,
['request'] = {},
['balance'] = 0,
}
end)
end
end
end
for i,k in pairs(server_stores) do
local changed = false
for l,m in pairs(stores[k.name].items) do
local found = false
for j,c in pairs(k.products) do
if m.name == c.name then
found = true
break
end
end
if not found then
local stock_aux = json.decode(json.encode(m))
table.insert(k.products, m)
table.insert(k.stock, stock_aux)
k.stock[#k.stock].amount = 0
changed = true
end
end
for j,c in pairs(k.products) do
local found = false
for l,m in pairs(stores[k.name].items) do
if m.name == c.name then
found = true
break
end
end
if not found then
for g,h in pairs(k.stock) do
if h.name == c.name then
table.remove(k.stock, g)
break
end
end
table.remove(k.products, j)
changed = true
end
end
if changed then
exports.oxmysql:update('UPDATE stores SET products = @products, stock = @stock WHERE id = @id', {
['@id'] = i,
['@products'] = json.encode(k.products),
['@stock'] = json.encode(k.stock)
})
end
if k.owner == "none" then
for j,c in pairs(k.products) do
for l,m in pairs(stores[k.name].items) do
if c.name == m.name then
c.amount = m.amount
break
end
end
end
end
end
end)
end)
end)
function showNotification(source, message)
TriggerClientEvent('esx:showNotification', source, message)
TriggerClientEvent('chat:addMessage', source, { args = { message }})
end
-- This function will return the amount of money in the player's bank account
function getBankMoney(source)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
return xPlayer.PlayerData.money["bank"]
end
end
-- This function will return the amount of money in the player's wallet account
function getWalletMoney(source)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
return xPlayer.PlayerData.money["cash"]
end
end
-- This function will remove money from the player's bank account
function removeBankMoney(source, value)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
xPlayer.Functions.RemoveMoney('bank', value)
end
end
-- This function will remove money from the player's Wallet account
function removeWalletMoney(source, value)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
xPlayer.Functions.RemoveMoney('cash', value)
end
end
-- This function will add money to the player's bank account
function addBankMoney(source, value)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
xPlayer.Functions.AddMoney('bank', value)
end
end
-- This function will add money from the player's Wallet account
function addWalletMoney(source, value)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
xPlayer.Functions.AddMoney('cash', value)
end
end
if use_weight_system then
-- This function will return TRUE if the player has enough space in his inventory
function canCarryItem(source, weight)
local xPlayer = QBCore.Functions.GetPlayer(source)
--убрал проверку на заполниность инвеноря, не смог решить по другому (ВРЕМЕННОЕ РЕШЕНИЕ)
-- if xPlayer then
-- local maxWeight = QBCore.Config.Player.MaxWeight
-- local totalWeight = QBCore.Player.GetTotalWeight(xPlayer.PlayerData.items)
-- return ( (totalWeight + weight) <= maxWeight )
-- end
return true --false
end
else
-- This function will return TRUE if the player has enough space in his inventory
function canCarryItem(source, item, _amount)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
local itemInfo = QBCore.Shared.Items[item:lower()]
local maxWeight = QBCore.Config.Player.MaxWeight
local totalWeight = QBCore.Player.GetTotalWeight(xPlayer.PlayerData.items)
local itemWeight = itemInfo.weight * _amount
return ( (totalWeight + itemWeight) <= maxWeight )
end
return false
end
end
-- This function will return the player's inventory
function getInventory(source)
local Player = QBCore.Functions.GetPlayer(source)
local Inventory = Player.PlayerData.items
if Player then
return Inventory
end
end
-- This function will add an item to the player's inventory
function addInventoryItem(source, item, amount)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
xPlayer.Functions.AddItem(item, amount)
end
end
-- This function will return the player's weigth
function getWeight(source)
local xPlayer = QBCore.Functions.GetPlayer(source)
return QBCore.Player.GetTotalWeight(xPlayer.PlayerData.items)
end
-- This function will return the player's identifier (identifier or id)
function getIdentifier(source)
local xPlayer = QBCore.Functions.GetPlayer(source)
if xPlayer then
return xPlayer.PlayerData.citizenid
end
end