154 lines
5.5 KiB
Lua
154 lines
5.5 KiB
Lua
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
local passengers = {}
|
||
|
|
||
|
local function GetUsername(id)
|
||
|
return QBCore.Functions.GetPlayer(id).PlayerData.charinfo.firstname ..' '.. QBCore.Functions.GetPlayer(id).PlayerData.charinfo.lastname
|
||
|
end
|
||
|
|
||
|
local function comma_value(amount)
|
||
|
local formatted = tostring(amount)
|
||
|
while true do
|
||
|
formatted, k = string.gsub(formatted, '^(-?%d+)(%d%d%d)', '%1,%2')
|
||
|
if (k==0) then
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
return formatted
|
||
|
end
|
||
|
|
||
|
local function isEMSService(id)
|
||
|
local isAllowed = false
|
||
|
local Player = QBCore.Functions.GetPlayer(id)
|
||
|
if Player then
|
||
|
if Player.PlayerData.job.name == "police" or Player.PlayerData.job.name == "ambulance" or Player.PlayerData.job.name == "mechanic" or Player.PlayerData.job.name == "taxi" and Player.PlayerData.job.onduty then
|
||
|
isAllowed = true
|
||
|
end
|
||
|
end
|
||
|
return isAllowed
|
||
|
end
|
||
|
|
||
|
local function GetOnlinePlayers()
|
||
|
local sources = {}
|
||
|
for k, id in pairs(QBCore.Functions.GetPlayers()) do
|
||
|
local target = QBCore.Functions.GetPlayer(id)
|
||
|
if target then
|
||
|
sources[#sources + 1] = {
|
||
|
source = target.PlayerData.source,
|
||
|
fullname = target.PlayerData.charinfo.firstname.." "..target.PlayerData.charinfo.lastname
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
return sources
|
||
|
end
|
||
|
|
||
|
local function CanIPayTheBill(id, company, price)
|
||
|
local Player = QBCore.Functions.GetPlayer(id)
|
||
|
local topay = math.floor(price)
|
||
|
if Player then
|
||
|
if Player.PlayerData.money["cash"] >= topay then
|
||
|
return true
|
||
|
else
|
||
|
if Player.PlayerData.money["bank"] >= topay then
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-npcservices:server:isEMSServices', function(source, cb)
|
||
|
local src = source
|
||
|
cb(isEMSService(src))
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-npcservices:server:emsOnline', function(source, cb, job)
|
||
|
local count = QBCore.Functions.GetDutyCount(job)
|
||
|
cb(count)
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback("qb-npcservices:server:GetOnlinePlayers", function(source, cb)
|
||
|
cb(GetOnlinePlayers())
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback("qb-npcservices:server:CanIPayTheBill", function(source, cb, company, price)
|
||
|
local src = source
|
||
|
cb(CanIPayTheBill(src, company, price))
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-npcservices:server:IsVehicleOwner', function(source, cb, plate)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
local citizenid = Player.PlayerData.citizenid
|
||
|
MySQL.Async.fetchAll('SELECT * FROM player_vehicles WHERE plate = ? AND citizenid = ?', {plate, citizenid}, function(result)
|
||
|
if result[1] ~= nil then
|
||
|
cb(true)
|
||
|
else
|
||
|
cb(false)
|
||
|
end
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
RegisterServerEvent('qb-npcservices:server:sendService', function(callData)
|
||
|
local src = source
|
||
|
local num = nil
|
||
|
if not id then id = src end
|
||
|
if src == callData.targetId then num = src else num = callData.targetId end
|
||
|
local caller = QBCore.Functions.GetPlayer(callData.callerId)
|
||
|
if isEMSService(callData.callerId) then
|
||
|
if callData.targetId == callData.callerId then
|
||
|
if Config.UseServicesForJobs then
|
||
|
TriggerClientEvent("qb-npcservices:client:sendService", callData.targetId, callData)
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', num, Lang:t('notify.can_not_use_services_on_your_seld'), "error", 10000)
|
||
|
end
|
||
|
else
|
||
|
TriggerClientEvent("qb-npcservices:client:sendService", callData.targetId, callData)
|
||
|
end
|
||
|
else
|
||
|
local count = QBCore.Functions.GetDutyCount(callData.job)
|
||
|
if count >= Config.MinOnlineEMS then
|
||
|
TriggerClientEvent('QBCore:Notify', num, Lang:t('notify.can_not_use_services'), "error", 10000)
|
||
|
else
|
||
|
if CanIPayTheBill(num, callData.job, callData.price) then
|
||
|
TriggerClientEvent("qb-npcservices:client:sendService", num, callData)
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', num, Lang:t('notify.cant_pay',{price = callData.price}), "error", 10000)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterServerEvent('qb-npcservices:server:getin', function(job, vehicle)
|
||
|
local src = source
|
||
|
passengers[#passengers + 1] = {company = job, vehicle = vehicle, passenger = src}
|
||
|
TriggerClientEvent('qb-npcservices:client:getinvehicle', src, vehicle)
|
||
|
end)
|
||
|
|
||
|
RegisterServerEvent('qb-npcservices:server:leavevehicle', function(vehicle)
|
||
|
for i = 0, #passengers do
|
||
|
if passengers[i] then
|
||
|
if passengers[i].passenger ~= nil then
|
||
|
local Player = QBCore.Functions.GetPlayer(passengers[i].passenger)
|
||
|
if Player then
|
||
|
local fullname = Player.PlayerData.charinfo.firstname ..' '.. Player.PlayerData.charinfo.lastname
|
||
|
TriggerClientEvent('qb-npcservices:client:leavevehicle', passengers[i].passenger)
|
||
|
TriggerClientEvent('QBCore:Notify', passengers[i].passenger, Lang:t('notify.left_vehicle'), "success")
|
||
|
passengers[i].passenger = nil
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterServerEvent('qb-npcservices:server:pay', function(company, price)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
if Player.PlayerData.money["cash"] >= price then
|
||
|
Player.Functions.RemoveMoney("cash", price, "pay-"..company)
|
||
|
else
|
||
|
if Player.PlayerData.money["bank"] >= price then
|
||
|
Player.Functions.RemoveMoney("bank", price, "pay-"..company)
|
||
|
end
|
||
|
end
|
||
|
end)
|