forked from Simnation/Main
323 lines
No EOL
11 KiB
Lua
323 lines
No EOL
11 KiB
Lua
RandomString = function(length, strType)
|
|
local characters = ""
|
|
|
|
if strType == "A" then
|
|
characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
elseif strType == "1" then
|
|
characters = "0123456789"
|
|
else
|
|
return nil
|
|
end
|
|
|
|
local result = ""
|
|
for i = 1, length do
|
|
local randomIndex = math.random(1, #characters)
|
|
result = result .. characters:sub(randomIndex, randomIndex)
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
ExecuteSql = function(query, parameters, cb)
|
|
local promise = promise:new()
|
|
while isBusy do
|
|
Citizen.Wait(0)
|
|
end
|
|
local isBusy = true
|
|
if GetResourceState("oxmysql") == 'started' then
|
|
exports.oxmysql:execute(query, parameters, function(data)
|
|
promise:resolve(data)
|
|
isBusy = false
|
|
|
|
if cb then
|
|
cb(data)
|
|
end
|
|
end)
|
|
elseif GetResourceState("ghmattimysql") == 'started' then
|
|
exports.ghmattimysql:execute(query, parameters, function(data)
|
|
promise:resolve(data)
|
|
isBusy = false
|
|
|
|
if cb then
|
|
cb(data)
|
|
end
|
|
end)
|
|
elseif GetResourceState("mysql-async") == 'started' then
|
|
MySQL.Async.fetchAll(query, parameters, function(data)
|
|
promise:resolve(data)
|
|
isBusy = false
|
|
if cb then
|
|
cb(data)
|
|
end
|
|
end)
|
|
end
|
|
return Citizen.Await(promise)
|
|
end
|
|
|
|
CheckMoney = function(xPlayer, targetPrice)
|
|
if CoreName == 'qb-core' then
|
|
if xPlayer.PlayerData.money.cash >= targetPrice then
|
|
return true
|
|
elseif xPlayer.PlayerData.money.bank >= targetPrice then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
elseif CoreName == 'qbx_core' then
|
|
if xPlayer.PlayerData.money.cash >= targetPrice then
|
|
return true
|
|
elseif xPlayer.PlayerData.money.bank >= targetPrice then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
elseif CoreName == 'es_extended' then
|
|
if xPlayer.getMoney() >= targetPrice then
|
|
return true
|
|
elseif xPlayer.getAccount('bank').money >= targetPrice then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
|
|
RemoveMoney = function(xPlayer, targetPrice)
|
|
if CoreName == 'qb-core' then
|
|
if xPlayer.PlayerData.money.cash >= targetPrice then
|
|
xPlayer.Functions.RemoveMoney('cash', targetPrice, '0r-rccar:server:buyCar')
|
|
return true
|
|
elseif xPlayer.PlayerData.money.bank >= targetPrice then
|
|
xPlayer.Functions.RemoveMoney('bank', targetPrice, '0r-rccar:server:buyCar')
|
|
return true
|
|
end
|
|
elseif CoreName == 'qbx_core' then
|
|
if xPlayer.PlayerData.money.cash >= targetPrice then
|
|
exports.qbx_core:RemoveMoney(xPlayer.PlayerData.citizenid, 'cash', targetPrice, '0r-rccar:server:buyCar')
|
|
return true
|
|
elseif xPlayer.PlayerData.money.bank >= targetPrice then
|
|
exports.qbx_core:RemoveMoney(xPlayer.PlayerData.citizenid, 'bank', targetPrice, '0r-rccar:server:buyCar')
|
|
return true
|
|
end
|
|
elseif CoreName == 'es_extended' then
|
|
if xPlayer.getMoney() >= targetPrice then
|
|
xPlayer.removeMoney(targetPrice)
|
|
return true
|
|
elseif xPlayer.getAccount('bank').money >= targetPrice then
|
|
xPlayer.removeAccountMoney('bank', targetPrice)
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
GetItem = function(source, item, metadata)
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'codem-inventory' then
|
|
local items = exports[Config.Inventory]:GetItemsByName(source, item)
|
|
|
|
local itemData = {}
|
|
|
|
if #items > 0 then
|
|
for _, item in ipairs(items) do
|
|
table.insert(itemData, item)
|
|
end
|
|
else
|
|
return nil
|
|
end
|
|
|
|
if itemData then
|
|
return itemData
|
|
else
|
|
return nil
|
|
end
|
|
elseif Config.Inventory == 'ox_inventory' then
|
|
local itemData = exports.ox_inventory:GetItem(source, item, metadata, false)
|
|
|
|
if itemData then
|
|
return itemData
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end
|
|
|
|
AddItem = function(src, item, count, slot, metadata)
|
|
if type(item) == 'table' then
|
|
for _, v in pairs(item) do
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'codem-inventory' then
|
|
exports[Config.Inventory]:AddItem(src, _, v, slot, metadata)
|
|
elseif Config.Inventory == 'ox_inventory' then
|
|
exports.ox_inventory:AddItem(src, _, v, metadata, slot)
|
|
end
|
|
end
|
|
|
|
return true
|
|
else
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'codem-inventory' then
|
|
exports[Config.Inventory]:AddItem(src, item, count, slot, metadata)
|
|
return true
|
|
elseif Config.Inventory == 'ox_inventory' then
|
|
exports.ox_inventory:AddItem(src, item, count, metadata, slot)
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
CreateNewVehicle = function(source, item, count)
|
|
local function generateSerie()
|
|
return RandomString(2, '1') .. RandomString(3, 'A') .. RandomString(1, '1') .. RandomString(2, 'A') .. RandomString(3, '1') .. RandomString(4, 'A')
|
|
end
|
|
|
|
if count > 1 then
|
|
for i = 1, count do
|
|
local info = {
|
|
serie = generateSerie()
|
|
}
|
|
local success = AddItem(source, item, count, nil, info)
|
|
|
|
if success then
|
|
ExecuteSql("INSERT INTO 0r_rccar (serieNumber, battery) VALUES ('" .. info.serie .. "', 100)")
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
else
|
|
local info = {
|
|
serie = generateSerie()
|
|
}
|
|
local success = AddItem(source, item, count, nil, info)
|
|
|
|
if success then
|
|
ExecuteSql("INSERT INTO 0r_rccar (serieNumber, battery) VALUES ('" .. info.serie .. "', 100)")
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
exports('CreateNewVehicle', CreateNewVehicle)
|
|
|
|
RemoveItem = function(src, item, count, slot)
|
|
if type(item) == 'table' then
|
|
for _, v in pairs(item) do
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' then
|
|
if not exports[Config.Inventory]:HasItem(src, _, v) then
|
|
return false
|
|
end
|
|
exports[Config.Inventory]:RemoveItem(src, _, v)
|
|
elseif Config.Inventory == 'ox_inventory' then
|
|
if not exports.ox_inventory:GetItem(src, _, v) then
|
|
return false
|
|
end
|
|
exports.ox_inventory:RemoveItem(src, _, v)
|
|
elseif Config.Inventory == 'codem-inventory' then
|
|
if not exports[Config.Inventory]:HasItem(src, _, v) then
|
|
return false
|
|
end
|
|
exports[Config.Inventory]:RemoveItem(src, _, v)
|
|
end
|
|
end
|
|
return true
|
|
else
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' then
|
|
if exports[Config.Inventory]:HasItem(src, item, count) then
|
|
exports[Config.Inventory]:RemoveItem(src, item, count, slot)
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
elseif Config.Inventory == 'ox_inventory' then
|
|
if exports.ox_inventory:GetItem(src, item, count) then
|
|
exports.ox_inventory:RemoveItem(src, item, count, nil, slot)
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
elseif Config.Inventory == 'codem-inventory' then
|
|
if exports[Config.Inventory]:GetItem(src, item) then
|
|
exports[Config.Inventory]:RemoveItem(src, item, count, slot)
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
GetItemCount = function(source, itemName, targetCount)
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'ox_inventory' then
|
|
local itemCount = exports[Config.Inventory]:GetItemCount(source, itemName)
|
|
if itemCount and itemCount > 0 and itemCount >= targetCount then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
elseif Config.Inventory == 'codem-inventory' then
|
|
local itemCount = exports['codem-inventory']:GetItemsTotalAmount(source, itemName)
|
|
|
|
if itemCount and itemCount > 0 and itemCount > targetCount then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
|
|
GetItemsCount = function(source, itemData, targetCount)
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'ox_inventory' then
|
|
for k, v in pairs(itemData) do
|
|
local itemCount = exports[Config.Inventory]:GetItemCount(source, k)
|
|
if not itemCount and not itemCount > 0 and not itemCount >= v then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
elseif Config.Inventory == 'codem-inventory' then
|
|
for k, v in pairs(itemData) do
|
|
local itemCount = exports['codem-inventory']:GetItemsTotalAmount(source, k)
|
|
if not itemCount and not itemCount > 0 and not itemCount >= v then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
end
|
|
|
|
GetItemByName = function(src, item, info)
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'codem-inventory' then
|
|
local itemData = exports[Config.Inventory]:GetItemByName(src, item)
|
|
|
|
if itemData then
|
|
return itemData
|
|
else
|
|
return nil
|
|
end
|
|
elseif Config.Inventory == 'ox_inventory' then
|
|
local itemData = exports.ox_inventory:GetItem(src, item, info)
|
|
|
|
if itemData then
|
|
return itemData
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end
|
|
|
|
GetItemsByName = function(src, name)
|
|
if Config.Inventory == 'qb-inventory' or Config.Inventory == 'lj-inventory' or Config.Inventory == 'ps-inventory' or Config.Inventory == 'tgiann-inventory' or Config.Inventory == 'codem-inventory' then
|
|
local item = exports[Config.Inventory]:GetItemsByName(src, name)
|
|
|
|
if item then
|
|
return item
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end |