673 lines
		
	
	
		
			No EOL
		
	
	
		
			19 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			673 lines
		
	
	
		
			No EOL
		
	
	
		
			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/call.png"
 | |
|                     })
 | |
|                     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 | 
