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