forked from Simnation/Main
673 lines
19 KiB
Lua
673 lines
19 KiB
Lua
![]() |
-- ==================================================================================== --
|
||
|
-- RoadToSix ( orignal Creator )
|
||
|
-- Dachlatti ( ESX to QBCore )
|
||
|
-- ==================================================================================== --
|
||
|
QBCore.Functions.CreateCallback('roadphone:getItemAmount', function(source, cb)
|
||
|
|
||
|
local hasItem = nil
|
||
|
|
||
|
if Config.NeedItem then
|
||
|
if #Config.Items == 0 then
|
||
|
cb(nil)
|
||
|
return
|
||
|
end
|
||
|
local xPlayer = QBCore.Functions.GetPlayer(source)
|
||
|
if not xPlayer then
|
||
|
return;
|
||
|
end
|
||
|
for i = 1, #Config.Items, 1 do
|
||
|
if Config.codeMInventory then
|
||
|
|
||
|
local hasItem = exports['codem-inventory']:HasItem(source, Config.Items[i], 1)
|
||
|
|
||
|
if hasItem then
|
||
|
cb(Config.Items[i])
|
||
|
return
|
||
|
end
|
||
|
|
||
|
else
|
||
|
|
||
|
local items = xPlayer.Functions.GetItemByName(Config.Items[i])
|
||
|
|
||
|
if items and items.count ~= 0 then
|
||
|
hasItem = items.name
|
||
|
cb(hasItem)
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
cb(nil)
|
||
|
else
|
||
|
cb(true)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback('roadphone:getRadioAmount', function(source, cb)
|
||
|
if Config.RadioNeedItem then
|
||
|
if #Config.RadioItems == 0 then
|
||
|
cb(nil)
|
||
|
return
|
||
|
end
|
||
|
local xPlayer = QBCore.Functions.GetPlayer(source)
|
||
|
if not xPlayer then
|
||
|
return;
|
||
|
end
|
||
|
for i = 1, #Config.RadioItems, 1 do
|
||
|
if Config.codeMInventory then
|
||
|
|
||
|
local hasItem = exports['codem-inventory']:HasItem(source, Config.RadioItems[i], 1)
|
||
|
|
||
|
if hasItem then
|
||
|
cb(true)
|
||
|
return
|
||
|
end
|
||
|
|
||
|
else
|
||
|
|
||
|
local items = xPlayer.Functions.GetItemByName(Config.RadioItems[i])
|
||
|
if not items then
|
||
|
print("Error: Item " .. Config.RadioItems[i] ..
|
||
|
" not found in database. Please add this item in your database.")
|
||
|
cb(nil)
|
||
|
return
|
||
|
end
|
||
|
if items.count ~= 0 then
|
||
|
cb(true)
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
cb(nil)
|
||
|
else
|
||
|
cb(true)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
function getPhoneRandomNumber()
|
||
|
local numBase = math.random(1000000, 9999999)
|
||
|
return string.format("%07d", numBase)
|
||
|
end
|
||
|
|
||
|
CreateThread(function()
|
||
|
for i = 1, #Config.Items do
|
||
|
QBCore.Functions.CreateUseableItem(Config.Items[i], function(source)
|
||
|
TriggerClientEvent('roadphone:use', source)
|
||
|
end)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterCommand('fixphone', function(source)
|
||
|
TriggerEvent('roadphone:playerLoad', source)
|
||
|
end)
|
||
|
|
||
|
function GetPlayerFromPhone(number)
|
||
|
local identifier = MySQL.Sync.fetchScalar('SELECT citizenid FROM ' .. Config.UserTable ..
|
||
|
' WHERE phone_number = @phone_number', {
|
||
|
['@phone_number'] = number
|
||
|
})
|
||
|
|
||
|
return QBCore.Functions.GetPlayerByCitizenId(identifier)
|
||
|
end
|
||
|
|
||
|
function getJobName(identifier)
|
||
|
|
||
|
local xPlayer = QBCore.Functions.GetPlayerByCitizenId(identifier)
|
||
|
|
||
|
if xPlayer then
|
||
|
return xPlayer.job.name
|
||
|
end
|
||
|
|
||
|
return nil
|
||
|
|
||
|
end
|
||
|
|
||
|
function getNumberFromIdentifier(identifier)
|
||
|
|
||
|
local phone_number = MySQL.Sync.fetchScalar('SELECT phone_number FROM ' .. Config.UserTable ..
|
||
|
' WHERE citizenid = @identifier', {
|
||
|
['@identifier'] = identifier
|
||
|
})
|
||
|
|
||
|
return phone_number
|
||
|
|
||
|
end
|
||
|
|
||
|
function getIdentifierFromNumber(number)
|
||
|
|
||
|
local identifier = MySQL.Sync.fetchScalar('SELECT citizenid FROM ' .. Config.UserTable ..
|
||
|
' WHERE phone_number = @phone_number', {
|
||
|
['@phone_number'] = number
|
||
|
})
|
||
|
|
||
|
return identifier
|
||
|
|
||
|
end
|
||
|
|
||
|
function getNameFromIdentifier(identifier)
|
||
|
|
||
|
local xPlayer = QBCore.Functions.GetPlayerByCitizenId(identifier)
|
||
|
|
||
|
if xPlayer then
|
||
|
return xPlayer.PlayerData.charinfo.firstname .. ' ' .. xPlayer.PlayerData.charinfo.lastname
|
||
|
end
|
||
|
|
||
|
return nil
|
||
|
|
||
|
end
|
||
|
|
||
|
function getPlayersByJob(job)
|
||
|
|
||
|
local players = {}
|
||
|
|
||
|
for k, playerId in pairs(QBCore.Functions.GetPlayers()) do
|
||
|
local Player = QBCore.Functions.GetPlayer(playerId)
|
||
|
|
||
|
if Player and Player.PlayerData.job.name == job then
|
||
|
table.insert(players, {
|
||
|
id = Player.PlayerData.source
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return players
|
||
|
end
|
||
|
|
||
|
RegisterNetEvent('roadphone:sendDispatch')
|
||
|
AddEventHandler('roadphone:sendDispatch', function(source, message, job, coords, anonym, image)
|
||
|
|
||
|
local _source = tonumber(source)
|
||
|
local xPlayer = QBCore.Functions.GetPlayer(_source)
|
||
|
|
||
|
if not job or not message then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if xPlayer then
|
||
|
local myPhone = getNumberFromIdentifier(xPlayer.PlayerData.citizenid)
|
||
|
|
||
|
local targets = getPlayersByJob(job)
|
||
|
|
||
|
if #targets == 0 then
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', _source, Lang:t('info.no_dispatchers'))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if not coords then
|
||
|
coords = GetEntityCoords(GetPlayerPed(_source))
|
||
|
end
|
||
|
|
||
|
local targetmessage = addServiceDispatch(myPhone, job, message, 0, 0, image, coords)
|
||
|
local mymessage = addServiceDispatch(job, myPhone, message, 1, 1, image, coords)
|
||
|
|
||
|
for _, target in ipairs(targets) do
|
||
|
TriggerClientEvent("roadphone:service:receiveMessage:job", target.id, targetmessage, 0)
|
||
|
end
|
||
|
|
||
|
TriggerClientEvent("roadphone:service:receiveMessage", _source, mymessage, 1)
|
||
|
|
||
|
discordLog("15158332", "Service", 'Number: ' .. myPhone .. '\n' .. 'Message: ' .. message .. '\n' .. 'Received Job: ' .. job, "RoadPhone", nil, Cfg.ServiceWebhook, "Service")
|
||
|
|
||
|
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
|
||
|
RegisterCommand("waveverify", function(source, args)
|
||
|
local src = source
|
||
|
|
||
|
if #args < 2 then
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', src, Lang:t('info.command_required_information'))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local auth = args[1]
|
||
|
table.remove(args, 1)
|
||
|
|
||
|
local label = table.concat(args, ' ')
|
||
|
|
||
|
local verifyValue = auth == "true" and 1 or 0
|
||
|
local query =
|
||
|
"UPDATE `roadshop_tweetwave_accounts` SET `verify`= @verifyValue WHERE roadshop_tweetwave_accounts.username = @username"
|
||
|
|
||
|
MySQL.Async.execute(query, {
|
||
|
['@verifyValue'] = verifyValue,
|
||
|
['@username'] = label
|
||
|
}, function(result)
|
||
|
if (result == 1) then
|
||
|
local message = verifyValue == 1 and Lang:t('info.wave_verify') or Lang:t('info.wave_remove_verify')
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', src, message)
|
||
|
else
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', src, Lang:t('info.command_required_information'))
|
||
|
end
|
||
|
end)
|
||
|
end, true)
|
||
|
|
||
|
RegisterCommand("connectverify", function(source, args)
|
||
|
local src = source
|
||
|
|
||
|
if #args < 2 then
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', src, Lang:t('info.command_required_information'))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local auth = args[1]
|
||
|
table.remove(args, 1)
|
||
|
|
||
|
local label = table.concat(args, ' ')
|
||
|
|
||
|
local verifyValue = auth == "true" and 1 or 0
|
||
|
|
||
|
MySQL.Async.execute(
|
||
|
"UPDATE `roadshop_connect_accounts` SET `verify`= @verifyValue WHERE roadshop_connect_accounts.username = @username",
|
||
|
{
|
||
|
['@verifyValue'] = verifyValue,
|
||
|
['@username'] = label
|
||
|
}, function(result)
|
||
|
if (result == 1) then
|
||
|
local message = verifyValue == 1 and Lang:t('info.connect_verify') or
|
||
|
Lang:t('info.connect_remove_verify')
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', src, message)
|
||
|
else
|
||
|
TriggerClientEvent('roadphone:sendOffNotification', src, Lang:t('info.command_required_information'))
|
||
|
end
|
||
|
end)
|
||
|
end, true)
|
||
|
|
||
|
RegisterServerEvent("roadphone:server:call:eventnumber")
|
||
|
AddEventHandler("roadphone:server:call:eventnumber", function(number)
|
||
|
|
||
|
if tostring(number) == "77777" then -- CHECK WHICH NUMBER IS CALLED
|
||
|
|
||
|
-- YOUR CODE
|
||
|
|
||
|
end
|
||
|
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback('roadphone:server:getEmployees', function(source, cb, society)
|
||
|
|
||
|
local users = QBCore.Functions.GetQBPlayers()
|
||
|
local newusers = {}
|
||
|
|
||
|
if society == "unemployed" or society == "arbeitslos" then
|
||
|
cb(newusers)
|
||
|
print("[RoadPhone] Unemployed society is not allowed, please change the society name.")
|
||
|
return
|
||
|
end
|
||
|
|
||
|
for k, v in pairs(users) do
|
||
|
if v.PlayerData.job.name == society then
|
||
|
table.insert(newusers, {
|
||
|
firstname = v.PlayerData.charinfo.firstname,
|
||
|
lastname = v.PlayerData.charinfo.lastname,
|
||
|
job_grade = v.PlayerData.job.grade.level,
|
||
|
phone_number = v.PlayerData.phone_number,
|
||
|
online = true
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
cb(newusers)
|
||
|
|
||
|
end)
|
||
|
|
||
|
function getPlayerFromIban(iban) -- okokBanking support
|
||
|
|
||
|
local players = QBCore.Functions.GetQBPlayers()
|
||
|
local player = nil
|
||
|
|
||
|
for k, v in pairs(players) do
|
||
|
local playerIban = v.PlayerData.charinfo.account
|
||
|
|
||
|
if playerIban == iban then
|
||
|
player = v
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return player
|
||
|
|
||
|
end
|
||
|
|
||
|
function getIbanFromPlayer(identifier) --okokBanking support
|
||
|
|
||
|
local Player = QBCore.Functions.GetPlayerByCitizenId(identifier)
|
||
|
|
||
|
if not Player then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
return Player.PlayerData.charinfo.account
|
||
|
|
||
|
end
|
||
|
|
||
|
QBCore.Functions.CreateCallback('roadphone:okokBanking:getIban', function(source, cb)
|
||
|
|
||
|
local xPlayer = QBCore.Functions.GetPlayer(source)
|
||
|
|
||
|
if not xPlayer then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local iban = getIbanFromPlayer(xPlayer.PlayerData.citizenid)
|
||
|
|
||
|
cb(iban)
|
||
|
|
||
|
end)
|
||
|
|
||
|
|
||
|
-- WEBHOOKS
|
||
|
|
||
|
function discordLog(color, name, message, footer, image, webhook, username)
|
||
|
|
||
|
if not message then
|
||
|
message = ''
|
||
|
end
|
||
|
|
||
|
if not username then
|
||
|
username = 'RoadPhone'
|
||
|
end
|
||
|
|
||
|
local embed;
|
||
|
|
||
|
if image then
|
||
|
embed = {{
|
||
|
["color"] = color,
|
||
|
["title"] = "**" .. name .. "**",
|
||
|
["description"] = message,
|
||
|
["image"] = {
|
||
|
url = image
|
||
|
},
|
||
|
["footer"] = {
|
||
|
["text"] = footer
|
||
|
}
|
||
|
}}
|
||
|
else
|
||
|
embed = {{
|
||
|
["color"] = color,
|
||
|
["title"] = "**" .. name .. "**",
|
||
|
["description"] = message,
|
||
|
["footer"] = {
|
||
|
["text"] = footer
|
||
|
}
|
||
|
}}
|
||
|
end
|
||
|
|
||
|
if webhook == 'DISCORD WEBHOOK' then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
PerformHttpRequest(webhook, function(err, text, headers)
|
||
|
end, 'POST', json.encode({
|
||
|
username = username,
|
||
|
embeds = embed
|
||
|
}), {
|
||
|
['Content-Type'] = 'application/json'
|
||
|
})
|
||
|
|
||
|
end
|
||
|
|
||
|
function addServiceMessage(sender, receiver, message, isRead, isOwner)
|
||
|
|
||
|
local id = MySQL.Sync.insert(
|
||
|
'INSERT INTO roadshop_service_messages (sender, receiver, message, isRead, isOwner) VALUES (@sender, @receiver, @message, @isRead, @isOwner)',
|
||
|
{
|
||
|
['@sender'] = sender,
|
||
|
['@receiver'] = receiver,
|
||
|
['@message'] = message,
|
||
|
['@isRead'] = isRead,
|
||
|
['@isOwner'] = isOwner
|
||
|
})
|
||
|
|
||
|
local data = {
|
||
|
id = id,
|
||
|
sender = sender,
|
||
|
receiver = receiver,
|
||
|
message = message,
|
||
|
isRead = isRead,
|
||
|
isOwner = isOwner,
|
||
|
date = tonumber(os.time() .. "000.0")
|
||
|
}
|
||
|
|
||
|
return data
|
||
|
|
||
|
end
|
||
|
|
||
|
function addServiceDispatch(sender, receiver, message, isRead, isOwner, image, coords) --You can add your own dispatch system for the service app.
|
||
|
|
||
|
local id = MySQL.Sync.insert(
|
||
|
'INSERT INTO roadshop_service_messages (sender, receiver, message, isRead, isOwner, isDispatch, image, coords) VALUES (@sender, @receiver, @message, @isRead, @isOwner, @isDispatch, @image, @coords)',
|
||
|
{
|
||
|
['@sender'] = sender,
|
||
|
['@receiver'] = receiver,
|
||
|
['@message'] = message,
|
||
|
['@isRead'] = isRead,
|
||
|
['@isOwner'] = isOwner,
|
||
|
['@isDispatch'] = 1,
|
||
|
['@image'] = image,
|
||
|
['@coords'] = json.encode(coords)
|
||
|
})
|
||
|
|
||
|
local data = {
|
||
|
id = id,
|
||
|
sender = sender,
|
||
|
receiver = receiver,
|
||
|
message = message,
|
||
|
isRead = isRead,
|
||
|
isOwner = isOwner,
|
||
|
date = tonumber(os.time() .. "000.0"),
|
||
|
image = image,
|
||
|
isDispatch = 1,
|
||
|
isAccepted = 0,
|
||
|
isFinished = 0,
|
||
|
isDeclined = 0,
|
||
|
isAnonym = 0,
|
||
|
coords = coords
|
||
|
}
|
||
|
|
||
|
return data
|
||
|
|
||
|
end
|
||
|
|
||
|
function testMailServer(identifier)
|
||
|
local data = {
|
||
|
sender = 'RoadShop',
|
||
|
subject = "RoadShop TEST",
|
||
|
message = "Mails from scripts come back even better than before now even with <span style='color: red'>Color</span> support. <br> <br> + Support for line breaks and button support ^^",
|
||
|
button = {
|
||
|
buttonEvent = "qb-drugs:client:setLocation",
|
||
|
buttonData = "test",
|
||
|
buttonname = "test"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exports['roadphone']:sendMailOffline(identifier, data)
|
||
|
end
|
||
|
|
||
|
function isAbleToTweet(identifier)
|
||
|
|
||
|
return true
|
||
|
|
||
|
end
|
||
|
|
||
|
function isAbleToPostConnect(identifier)
|
||
|
|
||
|
return true
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
function getBlockedNumbers(identifier)
|
||
|
local numbers = MySQL.Sync.fetchScalar("SELECT numbers FROM roadshop_blocked_numbers WHERE identifier = @identifier", {
|
||
|
["@identifier"] = identifier
|
||
|
})
|
||
|
|
||
|
if numbers then
|
||
|
return json.decode(numbers)
|
||
|
end
|
||
|
|
||
|
return nil
|
||
|
|
||
|
end
|
||
|
|
||
|
RegisterServerEvent('roadphone:server:blocknumber')
|
||
|
AddEventHandler("roadphone:server:blocknumber", function(number)
|
||
|
|
||
|
local _source = source
|
||
|
local xPlayer = QBCore.Functions.GetPlayer(_source)
|
||
|
|
||
|
|
||
|
if xPlayer then
|
||
|
local identifier = xPlayer.PlayerData.citizenid
|
||
|
|
||
|
local numbers = MySQL.Sync.fetchScalar("SELECT numbers FROM roadshop_blocked_numbers WHERE identifier = @identifier", {
|
||
|
["@identifier"] = identifier
|
||
|
})
|
||
|
|
||
|
if numbers then
|
||
|
numbers = json.decode(numbers)
|
||
|
|
||
|
if numbers == nil then
|
||
|
numbers = {}
|
||
|
end
|
||
|
|
||
|
for i = 1, #numbers do
|
||
|
if tostring(numbers[i]) == tostring(number) then
|
||
|
TriggerClientEvent("roadphone:sendNotification", _source, {
|
||
|
apptitle = 'APP_CALL_NAME',
|
||
|
title = _U('call_already_blocked'),
|
||
|
img = "/public/img/Apps/light_mode/call.webp"
|
||
|
})
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
|
||
|
table.insert(numbers, number)
|
||
|
|
||
|
TriggerClientEvent("roadphone:blocked:numbers", _source, 'add', number)
|
||
|
|
||
|
MySQL.Async.execute("UPDATE roadshop_blocked_numbers SET numbers = @numbers WHERE identifier = @identifier", {
|
||
|
["@identifier"] = identifier,
|
||
|
["@numbers"] = json.encode(numbers)
|
||
|
})
|
||
|
return
|
||
|
end
|
||
|
|
||
|
numbers = {}
|
||
|
|
||
|
table.insert(numbers, number)
|
||
|
|
||
|
MySQL.Async.execute("INSERT INTO roadshop_blocked_numbers (identifier, numbers) VALUES (@identifier, @number)", {
|
||
|
["@identifier"] = identifier,
|
||
|
["@number"] = json.encode(numbers)
|
||
|
})
|
||
|
|
||
|
TriggerClientEvent("roadphone:blocked:numbers", _source, 'add', number)
|
||
|
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterServerEvent('roadphone:server:unblocknumber')
|
||
|
AddEventHandler("roadphone:server:unblocknumber", function(number)
|
||
|
|
||
|
local _source = source
|
||
|
local xPlayer = QBCore.Functions.GetPlayer(_source)
|
||
|
|
||
|
if xPlayer then
|
||
|
local identifier = xPlayer.PlayerData.citizenid
|
||
|
|
||
|
local numbers = MySQL.Sync.fetchScalar("SELECT numbers FROM roadshop_blocked_numbers WHERE identifier = @identifier", {
|
||
|
["@identifier"] = identifier
|
||
|
})
|
||
|
|
||
|
if numbers then
|
||
|
numbers = json.decode(numbers)
|
||
|
|
||
|
if numbers == nil then
|
||
|
numbers = {}
|
||
|
end
|
||
|
|
||
|
for i = 1, #numbers do
|
||
|
if tostring(numbers[i]) == tostring(number) then
|
||
|
table.remove(numbers, i)
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
|
||
|
MySQL.Async.execute("UPDATE roadshop_blocked_numbers SET numbers = @numbers WHERE identifier = @identifier", {
|
||
|
["@identifier"] = identifier,
|
||
|
["@numbers"] = json.encode(numbers)
|
||
|
})
|
||
|
|
||
|
TriggerClientEvent("roadphone:blocked:numbers", _source, 'remove', number)
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
|
||
|
function addServiceDispatchAnonym(sender, receiver, message, isRead, isOwner, image, coords) -- You can add your own dispatch system for the service app.
|
||
|
|
||
|
local id = MySQL.Sync.insert(
|
||
|
'INSERT INTO roadshop_service_messages (sender, receiver, message, isRead, isOwner, isDispatch, isAnonym, image, coords) VALUES (@sender, @receiver, @message, @isRead, @isOwner, @isDispatch, @isAnonym, @image, @coords)',
|
||
|
{
|
||
|
['@sender'] = sender,
|
||
|
['@receiver'] = receiver,
|
||
|
['@message'] = message,
|
||
|
['@isRead'] = isRead,
|
||
|
['@isOwner'] = isOwner,
|
||
|
['@isDispatch'] = 1,
|
||
|
['@isAnonym'] = 1,
|
||
|
['@image'] = image,
|
||
|
['@coords'] = json.encode(coords)
|
||
|
})
|
||
|
|
||
|
local data = {
|
||
|
id = id,
|
||
|
sender = sender,
|
||
|
receiver = receiver,
|
||
|
message = message,
|
||
|
isRead = isRead,
|
||
|
isOwner = isOwner,
|
||
|
date = tonumber(os.time() .. "000.0"),
|
||
|
image = image,
|
||
|
isDispatch = 1,
|
||
|
isAccepted = 0,
|
||
|
isFinished = 0,
|
||
|
isDeclined = 0,
|
||
|
isAnonym = 1,
|
||
|
coords = coords
|
||
|
}
|
||
|
|
||
|
return data
|
||
|
|
||
|
end
|
||
|
|
||
|
exports('sendDispatchAnonym', function (job, title, message, coords, image)
|
||
|
|
||
|
if not job or not message or not title or not coords then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local targets = getPlayersByJob(job)
|
||
|
|
||
|
local targetmessage = addServiceDispatchAnonym(title, job, message, 0, 0, image, coords)
|
||
|
|
||
|
for _, target in ipairs(targets) do
|
||
|
TriggerClientEvent("roadphone:service:receiveMessage:job", target.id, targetmessage, 0)
|
||
|
end
|
||
|
|
||
|
discordLog("15158332", "Service",'ServerSide triggered Dispatch \n' .. 'Title: ' .. title .. '\n' .. 'Message: ' .. message .. '\n' .. 'Received Job: ' .. job, "RoadPhone", nil, Cfg.ServiceWebhook, "Service")
|
||
|
|
||
|
end)
|
||
|
|
||
|
RegisterCommand('anonymDispatch', function ()
|
||
|
|
||
|
exports['roadphone']:sendDispatchAnonym('police', 'Robbery', 'Robbery infos: xyz', {x = -1851.1, y = -1248.8, z = 8.6}, nil)
|
||
|
|
||
|
end)
|
||
|
|
||
|
function addTaxiMoneySociety(payment)
|
||
|
|
||
|
exports['qb-banking']:AddMoney(Config.TaxiSociety, payment, 'Customer payment')
|
||
|
|
||
|
end
|