1
0
Fork 0
forked from Simnation/Main
Main/resources/[Developer]/[Nordi]/0r-rccar/server/functions.lua
2025-06-07 08:51:21 +02:00

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