forked from Simnation/Main
604 lines
No EOL
20 KiB
Lua
604 lines
No EOL
20 KiB
Lua
CoreName = nil
|
||
|
||
local function GetPlayer(source)
|
||
if CoreName == 'qb-core' then
|
||
return QBCore.Functions.GetPlayer(source)
|
||
elseif CoreName == 'qbx_core' then
|
||
return QBX:GetPlayer(source)
|
||
elseif CoreName == 'es_extended' then
|
||
return ESX.GetPlayerFromId(source)
|
||
end
|
||
end
|
||
|
||
function GetIdentifier(source)
|
||
local Player = GetPlayer(source)
|
||
local Identifier = nil
|
||
|
||
if CoreName == 'qb-core' then
|
||
Identifier = Player.PlayerData.citizenid
|
||
elseif CoreName == 'qbx_core' then
|
||
Identifier = Player.PlayerData.citizenid
|
||
elseif CoreName == 'es_extended' then
|
||
Identifier = Player.getIdentifier()
|
||
end
|
||
|
||
return Identifier
|
||
end
|
||
|
||
local function GetBatteryLevel(serie)
|
||
local battery = 0
|
||
|
||
local result = ExecuteSql("SELECT battery FROM 0r_rccar WHERE serieNumber = '"..serie.."'")
|
||
|
||
if result[1] then
|
||
battery = result[1].battery
|
||
end
|
||
|
||
return battery
|
||
end
|
||
|
||
if GetResourceState('qb-core') == 'started' and Config.Framework == 'qb-core' then
|
||
QBCore = exports['qb-core']:GetCoreObject()
|
||
CoreName = 'qb-core'
|
||
elseif GetResourceState('qbx_core') == 'started' and Config.Framework == 'qbx_core' then
|
||
QBX = exports['qbx_core']
|
||
CoreName = 'qbx_core'
|
||
elseif GetResourceState('es_extended') == 'started' and Config.Framework == 'es_extended' then
|
||
ESX = exports['es_extended']:getSharedObject()
|
||
CoreName = 'es_extended'
|
||
end
|
||
|
||
Citizen.CreateThread(function()
|
||
if CoreName == 'qb-core' then
|
||
for k, v in pairs(Config.RCCars) do
|
||
QBCore.Functions.CreateUseableItem(v.item.name, function(source, item)
|
||
local metadata = Config.Inventory == 'ox_inventory' and item.metadata or item.info
|
||
if GetBatteryLevel(metadata.serie) > Config.MinimumBattery then
|
||
local data = {
|
||
item = {
|
||
type = v.item.type,
|
||
price = v.item.price,
|
||
prop = v.item.prop,
|
||
label = v.item.label,
|
||
name = v.item.name,
|
||
category = v.item.category,
|
||
description = v.item.description,
|
||
},
|
||
vehicle = {
|
||
prop = v.vehicle.prop,
|
||
istatistics = v.vehicle.istatistics,
|
||
},
|
||
jobs = v.jobs,
|
||
info = metadata,
|
||
}
|
||
|
||
if v.jobs ~= 'all' then
|
||
local Player = QBCore.Functions.GetPlayer(source)
|
||
if Player ~= nil then
|
||
local PlayerJob = Player.PlayerData.job.name
|
||
if v.jobs[PlayerJob] then
|
||
TriggerClientEvent('0r-rccar:client:useRcCar', source, data)
|
||
else
|
||
TriggerClientEvent('QBCore:Notify', source, Locales[Config.Locale].LUA['no_authorization'], 'error')
|
||
end
|
||
end
|
||
else
|
||
TriggerClientEvent('0r-rccar:client:useRcCar', source, data)
|
||
end
|
||
else
|
||
TriggerClientEvent('QBCore:Notify', source, Locales[Config.Locale].LUA['no_battery'], 'error')
|
||
end
|
||
end)
|
||
end
|
||
elseif CoreName == 'qbx_core' then
|
||
for k, v in pairs(Config.RCCars) do
|
||
QBX:CreateUseableItem(v.item.name, function(source, item)
|
||
if GetBatteryLevel(item.metadata.serie) > Config.MinimumBattery then
|
||
local data = {
|
||
item = {
|
||
type = v.item.type,
|
||
price = v.item.price,
|
||
prop = v.item.prop,
|
||
label = v.item.label,
|
||
name = v.item.name,
|
||
category = v.item.category,
|
||
description = v.item.description,
|
||
},
|
||
vehicle = {
|
||
prop = v.vehicle.prop,
|
||
istatistics = v.vehicle.istatistics,
|
||
},
|
||
jobs = v.jobs,
|
||
info = item.metadata,
|
||
}
|
||
|
||
if v.jobs ~= 'all' then
|
||
local Player = QBX:GetPlayer(source)
|
||
if Player ~= nil then
|
||
local PlayerJob = Player.PlayerData.job.name
|
||
if v.jobs[PlayerJob] then
|
||
TriggerClientEvent('0r-rccar:client:useRcCar', source, data)
|
||
else
|
||
QBX:Notify(source, Locales[Config.Locale].LUA['no_authorization'], 'error')
|
||
end
|
||
end
|
||
else
|
||
TriggerClientEvent('0r-rccar:client:useRcCar', source, data)
|
||
end
|
||
else
|
||
QBX:Notify(source, Locales[Config.Locale].LUA['no_battery'], 'error')
|
||
end
|
||
end)
|
||
end
|
||
elseif CoreName == 'es_extended' then
|
||
for k, v in pairs(Config.RCCars) do
|
||
ESX.RegisterUsableItem(v.item.name, function(source, item, itemData)
|
||
if GetBatteryLevel(itemData.metadata.serie) > Config.MinimumBattery then
|
||
local data = {
|
||
item = {
|
||
type = v.item.type,
|
||
price = v.item.price,
|
||
prop = v.item.prop,
|
||
label = v.item.label,
|
||
name = v.item.name,
|
||
category = v.item.category,
|
||
description = v.item.description,
|
||
},
|
||
vehicle = {
|
||
prop = v.vehicle.prop,
|
||
istatistics = v.vehicle.istatistics,
|
||
},
|
||
jobs = v.jobs,
|
||
info = itemData.metadata,
|
||
}
|
||
|
||
if v.jobs ~= 'all' then
|
||
local Player = ESX.GetPlayerFromId(source)
|
||
if Player ~= nil then
|
||
local PlayerJob = Player.job.name
|
||
if v.jobs[PlayerJob] then
|
||
TriggerClientEvent('0r-rccar:client:useRcCar', source, data)
|
||
else
|
||
TriggerClientEvent("esx:showNotification", source, Locales[Config.Locale].LUA['no_authorization'], "error")
|
||
end
|
||
end
|
||
else
|
||
TriggerClientEvent('0r-rccar:client:useRcCar', source, data)
|
||
end
|
||
else
|
||
TriggerClientEvent("esx:showNotification", source, Locales[Config.Locale].LUA['no_battery'], "error")
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:scanPlayer', function(source, netId)
|
||
local ped = NetworkGetEntityFromNetworkId(netId)
|
||
local src = NetworkGetEntityOwner(ped)
|
||
local Player = GetPlayer(src)
|
||
|
||
if CoreName == 'qb-core' then
|
||
if Player then
|
||
local Data = {
|
||
name = Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||
birthDate = Player.PlayerData.charinfo.birthdate,
|
||
}
|
||
|
||
return Data
|
||
end
|
||
elseif CoreName == 'qbx_core' then
|
||
if Player then
|
||
local Data = {
|
||
name = Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||
birthDate = Player.PlayerData.charinfo.birthdate,
|
||
}
|
||
|
||
return Data
|
||
end
|
||
elseif CoreName == 'es_extended' then
|
||
if Player then
|
||
local Data = {
|
||
name = Player.getName(),
|
||
birthDate = Player.variables.dateofbirth,
|
||
}
|
||
|
||
return Data
|
||
end
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:buyCar', function(source, data)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local Job = nil
|
||
|
||
if Player then
|
||
if CoreName == 'qb-core' then
|
||
Job = Player.PlayerData.job.name
|
||
elseif CoreName == 'qbx_core' then
|
||
Job = Player.PlayerData.job.name
|
||
elseif CoreName == 'es_extended' then
|
||
Job = Player.getJob().name
|
||
end
|
||
|
||
local car = nil
|
||
|
||
for k, v in pairs(Config.RCCars) do
|
||
if v.item.name == data.item.name then
|
||
car = v
|
||
break
|
||
end
|
||
end
|
||
|
||
if car.jobs ~= 'all' and Job then
|
||
for job, allowed in pairs(car.jobs) do
|
||
if allowed and job == Job then
|
||
if car.item.price then
|
||
if CheckMoney(Player, car.item.price) then
|
||
if CreateNewVehicle(src, car.item.name, 1) then
|
||
RemoveMoney(Player, car.item.price)
|
||
end
|
||
else
|
||
if CoreName == 'qb-core' then
|
||
TriggerClientEvent('QBCore:Notify', src, Locales[Config.Locale].LUA['not_enough_money'], 'error')
|
||
elseif CoreName == 'qbx_core' then
|
||
QBX:Notify(src, Locales[Config.Locale].LUA['not_enough_money'], 'error')
|
||
elseif CoreName == 'es_extended' then
|
||
TriggerClientEvent("esx:showNotification", src, Locales[Config.Locale].LUA['not_enough_money'], "error")
|
||
end
|
||
end
|
||
end
|
||
break
|
||
end
|
||
end
|
||
else
|
||
if car.item.price then
|
||
if CheckMoney(Player, car.item.price) then
|
||
if CreateNewVehicle(src, car.item.name, 1) then
|
||
RemoveMoney(Player, car.item.price)
|
||
end
|
||
else
|
||
if CoreName == 'qb-core' then
|
||
TriggerClientEvent('QBCore:Notify', src, Locales[Config.Locale].LUA['not_enough_money'], 'error')
|
||
elseif CoreName == 'qbx_core' then
|
||
QBX:Notify(src, Locales[Config.Locale].LUA['not_enough_money'], 'error')
|
||
elseif CoreName == 'es_extended' then
|
||
TriggerClientEvent("esx:showNotification", src, Locales[Config.Locale].LUA['not_enough_money'], "error")
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:crafting', function(source, data)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local Job = nil
|
||
|
||
if Player then
|
||
if CoreName == 'qb-core' then
|
||
Job = Player.PlayerData.job.name
|
||
elseif CoreName == 'qbx_core' then
|
||
Job = Player.PlayerData.job.name
|
||
elseif CoreName == 'es_extended' then
|
||
Job = Player.getJob().name
|
||
end
|
||
|
||
local craft = nil
|
||
|
||
for k, v in pairs(Config.RCCrafts) do
|
||
if v.item.name == data.item.name then
|
||
craft = v
|
||
break
|
||
end
|
||
end
|
||
|
||
if craft.jobs ~= 'all' and Job then
|
||
for job, allowed in pairs(craft.jobs) do
|
||
if allowed and job == Job then
|
||
if GetItemsCount(src, craft.resources) then
|
||
if not RemoveItem(src, k, v) then
|
||
return false
|
||
end
|
||
end
|
||
break
|
||
end
|
||
end
|
||
else
|
||
if GetItemsCount(src, craft.resources) then
|
||
if not RemoveItem(src, craft.resources) then
|
||
return false
|
||
end
|
||
end
|
||
end
|
||
|
||
return true
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:getItemCount', function(source, resources)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
local resourcesCount = {}
|
||
|
||
for k, v in pairs(resources) do
|
||
local itemData = GetItemByName(src, k)
|
||
|
||
if itemData and itemData ~= '[]' then
|
||
table.insert(resourcesCount, { name = itemData.name, count = itemData.count or itemData.amount or 0 })
|
||
end
|
||
end
|
||
|
||
return resourcesCount
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:craftingFinish', function(source, data)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local Job = nil
|
||
|
||
if Player then
|
||
if CoreName == 'qb-core' then
|
||
Job = Player.PlayerData.job.name
|
||
elseif CoreName == 'qbx_core' then
|
||
Job = Player.PlayerData.job.name
|
||
elseif CoreName == 'es_extended' then
|
||
Job = Player.getJob().name
|
||
end
|
||
|
||
local craft = nil
|
||
|
||
for k, v in pairs(Config.RCCrafts) do
|
||
if v.item.name == data.item.name then
|
||
craft = v
|
||
break
|
||
end
|
||
end
|
||
|
||
if craft.jobs ~= 'all' and Job then
|
||
for job, allowed in pairs(craft.jobs) do
|
||
if allowed and job == Job then
|
||
if AddItem(src, craft.item.name, 1, false, nil, false) then
|
||
return true
|
||
end
|
||
break
|
||
end
|
||
end
|
||
else
|
||
if AddItem(src, craft.item.name, 1, false, nil, false) then
|
||
return true
|
||
end
|
||
end
|
||
|
||
return false
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:getBatteryLevel', function(source, data)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
return GetBatteryLevel(data.info.serie)
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:getActivePlugins', function(source, data)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local extensions = {}
|
||
|
||
if Player then
|
||
local result = ExecuteSql("SELECT extensions FROM 0r_rccar WHERE serieNumber = '"..data.info.serie.."'")
|
||
|
||
if result[1] then
|
||
extensions = result[1].extensions
|
||
end
|
||
|
||
return extensions
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:getNewExtensions', function(source, data)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local extensions = {}
|
||
|
||
if Player then
|
||
for k, v in pairs(Config.RCCrafts) do
|
||
if GetItemCount(src, v.item.name, 1) then
|
||
if v.jobs == 'all' then
|
||
table.insert(extensions, v)
|
||
else
|
||
if v.jobs[Player.PlayerData.job.name] then
|
||
table.insert(extensions, v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
return extensions
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:addExtension', function(source, data, target)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local newTarget = {
|
||
name = target.item.name,
|
||
label = target.item.label,
|
||
description = target.item.description,
|
||
}
|
||
|
||
if Player then
|
||
local result = ExecuteSql("SELECT extensions FROM 0r_rccar WHERE serieNumber = '"..data.info.serie.."'")
|
||
|
||
if result[1] and GetItemCount(src, newTarget.name, 1) then
|
||
local extensions = json.decode(result[1].extensions)
|
||
local newExtensions = {}
|
||
|
||
local alreadyExists = false
|
||
if extensions then
|
||
for k, v in pairs(extensions) do
|
||
if v.name == newTarget.name then
|
||
alreadyExists = true
|
||
break
|
||
end
|
||
table.insert(newExtensions, v)
|
||
end
|
||
end
|
||
|
||
if alreadyExists then
|
||
TriggerClientEvent('QBCore:Notify', src, "Bu uzantı zaten eklenmiş!", "error")
|
||
return false
|
||
end
|
||
|
||
table.insert(newExtensions, newTarget)
|
||
|
||
ExecuteSql("UPDATE 0r_rccar SET extensions = '"..json.encode(newExtensions).."' WHERE serieNumber = '"..data.info.serie.."'")
|
||
|
||
RemoveItem(src, target.item.name, 1)
|
||
|
||
TriggerClientEvent('0r-rccar:client:refreshExtension', src, newExtensions)
|
||
|
||
return true
|
||
end
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:removeExtension', function(source, data, target)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
local result = ExecuteSql("SELECT extensions FROM 0r_rccar WHERE serieNumber = '"..data.info.serie.."'")
|
||
|
||
if result[1] then
|
||
local extensions = json.decode(result[1].extensions)
|
||
local newExtensions = {}
|
||
|
||
for k, v in pairs(extensions) do
|
||
if v.name ~= target.name then
|
||
table.insert(newExtensions, v)
|
||
end
|
||
end
|
||
|
||
ExecuteSql("UPDATE 0r_rccar SET extensions = '"..json.encode(newExtensions).."' WHERE serieNumber = '"..data.info.serie.."'")
|
||
|
||
AddItem(src, target.name, 1, false, nil)
|
||
|
||
TriggerClientEvent('0r-rccar:client:refreshExtension', src, newExtensions)
|
||
|
||
return true
|
||
end
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:getVehicleForCharge', function(source)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
local vehicles = {}
|
||
|
||
if Player then
|
||
if Config.Inventory == 'ox_inventory' then
|
||
local playerItems = exports.ox_inventory:GetInventoryItems(source)
|
||
|
||
if playerItems and playerItems[1] then
|
||
for k, v in pairs(playerItems) do
|
||
for x, y in pairs(Config.RCCars) do
|
||
if v.name == y.item.name then
|
||
table.insert(vehicles, { name = v.name, label = v.label, serie = v.metadata.serie, battery = GetBatteryLevel(v.metadata.serie) })
|
||
end
|
||
end
|
||
end
|
||
end
|
||
else
|
||
for k, v in pairs(Config.RCCars) do
|
||
local itemData = GetItem(src, v.item.name)
|
||
|
||
if itemData and itemData ~= '[]' then
|
||
for x, y in pairs(itemData) do
|
||
table.insert(vehicles, { name = y.name, label = y.label, serie = y.info.serie, battery = GetBatteryLevel(y.info.serie) })
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return vehicles
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:undoChargeVehicle', function(source, serie, item, battery)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
ExecuteSql("UPDATE 0r_rccar SET battery = '"..battery.."' WHERE serieNumber = '"..serie.."'")
|
||
AddItem(src, item, 1, false, { serie = serie })
|
||
end
|
||
end)
|
||
|
||
lib.callback.register('0r-rccar:server:checkMoney', function(source, price)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
if CheckMoney(Player, price) then
|
||
return RemoveMoney(Player, price)
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
end)
|
||
|
||
RegisterNetEvent('0r-rccar:server:saveVehicle')
|
||
AddEventHandler('0r-rccar:server:saveVehicle', function(vehicleData, batteryLevel)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
local serie = vehicleData.info.serie
|
||
|
||
if Config.ChargeSystem then
|
||
ExecuteSql("UPDATE 0r_rccar SET battery = '"..batteryLevel.."' WHERE serieNumber = '"..serie.."'")
|
||
end
|
||
end
|
||
end)
|
||
|
||
RegisterNetEvent('0r-rccar:server:bombVehicle')
|
||
AddEventHandler('0r-rccar:server:bombVehicle', function(vehicleData)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
local serie = vehicleData.info.serie
|
||
|
||
ExecuteSql("DELETE FROM 0r_rccar WHERE serieNumber = '"..serie.."'")
|
||
RemoveItem(src, vehicleData.item.name, 1)
|
||
end
|
||
end)
|
||
|
||
RegisterNetEvent('0r-rccar:server:chargeVehicle')
|
||
AddEventHandler('0r-rccar:server:chargeVehicle', function(serie, item)
|
||
local src = source
|
||
local Player = GetPlayer(source)
|
||
|
||
if Player then
|
||
local itemData = GetItemByName(src, item, { serie = serie })
|
||
|
||
if Config.Inventory == 'ox_inventory' then
|
||
RemoveItem(src, item, 1)
|
||
else
|
||
if itemData.info.serie == serie then
|
||
RemoveItem(src, item, 1)
|
||
end
|
||
end
|
||
|
||
end
|
||
end) |