ESX = nil -- local PhoneNumbers = {} local PhoneNumbers = { ['912'] = { type = "ambulance", sources = {} }, ['911'] = { type = "police", sources = {} }, ['555-5555'] = { type = "taxi", sources = {} } } TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) function notifyAlertSMS (number, alert, listSrc) if PhoneNumbers[number] ~= nil then local mess = '#' .. alert.numero .. ' : ' .. alert.message if alert.coords ~= nil then mess = mess .. ' ' .. alert.coords.x .. ', ' .. alert.coords.y end for k, _ in pairs(listSrc) do getPhoneNumber(tonumber(k), function (n) if n ~= nil then TriggerEvent('gcPhone:_internalAddMessage', number, n, mess, 0, function (smsMess) TriggerClientEvent("gcPhone:receiveMessage", tonumber(k), smsMess, alert.numero) end) end end) end end end AddEventHandler('esx_phone:registerNumber', function(number, type, sharePos, hasDispatch, hideNumber, hidePosIfAnon) print('= INFO = Enregistrement du telephone ' .. number .. ' => ' .. type) local hideNumber = hideNumber or false local hidePosIfAnon = hidePosIfAnon or false PhoneNumbers[number] = { type = type, sources = {}, alerts = {} } end) function checkJob(current) if current == 'ambulance' then current = '912' end if current == 'police' then current = '911' end if current == 'taxi' then current = '555-5555' end return current; end AddEventHandler('esx:setJob', function(source, job, lastJob) local current = checkJob(job.name); local last = checkJob(lastJob.name); if PhoneNumbers[last] ~= nil then TriggerEvent('esx_addons_gcphone:removeSource', last, source) end if PhoneNumbers[current] ~= nil then TriggerEvent('esx_addons_gcphone:addSource', current, source) end end) AddEventHandler('esx_addons_gcphone:addSource', function(number, source) PhoneNumbers[number].sources[tostring(source)] = true end) AddEventHandler('esx_addons_gcphone:removeSource', function(number, source) PhoneNumbers[number].sources[tostring(source)] = nil end) RegisterServerEvent('gcPhone:sendMessage') AddEventHandler('gcPhone:sendMessage', function(number, message) local sourcePlayer = tonumber(source) if PhoneNumbers[number] ~= nil then getPhoneNumber(source, function (phone) notifyAlertSMS(number, { message = message, numero = phone, }, PhoneNumbers[number].sources) end) end end) RegisterServerEvent('esx_addons_gcphone:startCall') AddEventHandler('esx_addons_gcphone:startCall', function (number, message, coords) local source = source if PhoneNumbers[number] ~= nil then getPhoneNumber(source, function (phone) notifyAlertSMS(number, { message = message, coords = coords, numero = phone, }, PhoneNumbers[number].sources) end) else print('= WARNING = Appels sur un service non enregistre => numero : ' .. number) end end) AddEventHandler('esx:playerLoaded', function(source) local xPlayer = ESX.GetPlayerFromId(source) MySQL.Async.fetchAll('SELECT * FROM users WHERE identifier = @identifier',{ ['@identifier'] = xPlayer.identifier }, function(result) local phoneNumber = result[1].phone_number xPlayer.set('phoneNumber', phoneNumber) local job = checkJob(xPlayer.job.name); if PhoneNumbers[job] ~= nil then TriggerEvent('esx_addons_gcphone:addSource', job, source) end end) end) AddEventHandler('esx:playerDropped', function(source) local source = source local xPlayer = ESX.GetPlayerFromId(source) if PhoneNumbers[xPlayer.job.name] ~= nil then TriggerEvent('esx_addons_gcphone:removeSource', xPlayer.job.name, source) end end) function getPhoneNumber (source, callback) local xPlayer = ESX.GetPlayerFromId(source) if xPlayer == nil then callback(nil) end MySQL.Async.fetchAll('SELECT * FROM users WHERE identifier = @identifier',{ ['@identifier'] = xPlayer.identifier }, function(result) callback(result[1].phone_number) end) end RegisterServerEvent('esx_phone:send') AddEventHandler('esx_phone:send', function(number, message, _, coords) local source = source if PhoneNumbers[number] ~= nil then getPhoneNumber(source, function (phone) notifyAlertSMS(number, { message = message, coords = coords, numero = phone, }, PhoneNumbers[number].sources) end) else -- print('esx_phone:send | Appels sur un service non enregistre => numero : ' .. number) end end)