Scripts/resources/[qb]/[qb_extras]/qb-store3/Server/Configurate.lua
2024-12-29 21:07:10 +01:00

275 lines
10 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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