From 3b9973fa9acfee8b977785aa7ce72f31bf22bbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20N=27gadi?= Date: Sat, 2 Sep 2017 00:35:35 +0200 Subject: [PATCH] Rewrite phone => No more server lags --- client/main.lua | 26 ++++- html/scripts/app.js | 6 ++ html/scripts/app_de.js | 104 ++++++++++---------- html/scripts/app_en.js | 104 ++++++++++---------- locales/br.lua | 2 +- locales/en.lua | 2 +- locales/fr.lua | 2 +- server/main.lua | 215 ++++++++++++++++++++++++----------------- 8 files changed, 266 insertions(+), 195 deletions(-) diff --git a/client/main.lua b/client/main.lua index 5ba395b5..ed69f73c 100644 --- a/client/main.lua +++ b/client/main.lua @@ -23,6 +23,7 @@ local CurrentAction = nil local CurrentActionMsg = '' local CurrentActionData = {} local CurrentDispatchRequestId = -1 +local PhoneNumberSources = {} Citizen.CreateThread(function() @@ -71,6 +72,7 @@ AddEventHandler('esx_phone:loaded', function(phoneNumber, contacts) PhoneData.contacts = {} for i=1, #contacts, 1 do + contacts[i].online = (PhoneNumberSources[contacts[i].number] == nil and false or NetworkIsPlayerActive(GetPlayerFromServerId(PhoneNumberSources[contacts[i].number]))), table.insert(PhoneData.contacts, contacts[i]) end @@ -82,12 +84,12 @@ AddEventHandler('esx_phone:loaded', function(phoneNumber, contacts) end) RegisterNetEvent('esx_phone:addContact') -AddEventHandler('esx_phone:addContact', function(name, phoneNumber, isOnline) +AddEventHandler('esx_phone:addContact', function(name, phoneNumber) table.insert(PhoneData.contacts, { name = name, number = phoneNumber, - online = isOnline + online = (PhoneNumberSources[contacts[i].number] == nil and false or NetworkIsPlayerActive(GetPlayerFromServerId(PhoneNumberSources[contacts[i].number]))), }) -- CALL HERE RELOADCONTACT SendNUIMessage({ @@ -133,7 +135,7 @@ end) RegisterNetEvent('esx_phone:onMessage') AddEventHandler('esx_phone:onMessage', function(phoneNumber, message, position, anon, job, dispatchRequestId) - ESX.ShowNotification(_U('new_message')) + ESX.ShowNotification(_U('new_message', message)) SendNUIMessage({ newMessage = true, @@ -177,6 +179,16 @@ AddEventHandler('esx_phone:stopDispatch', function(dispatchRequestId, playerName end) +RegisterNetEvent('esx_phone:setPhoneNumberSource') +AddEventHandler('esx_phone:setPhoneNumberSource', function(phoneNumber, source) + + if source == -1 then + PhoneNumberSources[phoneNumber] = nil + else + PhoneNumberSources[phoneNumber] = source + end +end) + RegisterNUICallback('setGPS', function(data) SetNewWaypoint(data.x, data.y) ESX.ShowNotification(_U('gps_position')) @@ -185,12 +197,18 @@ end) RegisterNUICallback('send', function(data) local phoneNumber = data.number + local playerPed = GetPlayerPed(-1) + local coords = GetEntityCoords(playerPed) if tonumber(phoneNumber) ~= nil then phoneNumber = tonumber(phoneNumber) end - TriggerServerEvent('esx_phone:send', phoneNumber, data.message, data.anonyme) + TriggerServerEvent('esx_phone:send', phoneNumber, data.message, data.anonyme, { + x = coords.x, + y = coords.y, + z = coords.z + }) SendNUIMessage({ showMessageEditor = false diff --git a/html/scripts/app.js b/html/scripts/app.js index a4f64f5a..3afebe53 100644 --- a/html/scripts/app.js +++ b/html/scripts/app.js @@ -36,6 +36,7 @@ let showMain = function() { $('.screen').removeClass('active'); + $('.screen *').attr('disabled', 'disabled'); } let showRepertoire = function() { @@ -58,6 +59,8 @@ let showAddContact = function() { $('#contact').addClass('active'); + $('.screen *').attr('disabled', 'disabled'); + $('.screen.active *').removeAttr('disabled'); } let hideAddContact = function() { @@ -70,6 +73,8 @@ $('#writer').addClass('active'); $('#writer_number').val(cnum); $('#writer .header-title').html(cname); + $('.screen *').attr('disabled', 'disabled'); + $('.screen.active *').removeAttr('disabled'); } let hideNewMessage = function() { @@ -145,6 +150,7 @@ let showPhone = function(phoneData){ reloadPhone(phoneData); $('#phone').show(); + showMain(); isPhoneShowed = true; } diff --git a/html/scripts/app_de.js b/html/scripts/app_de.js index bdc0e71f..fa6bb6a7 100644 --- a/html/scripts/app_de.js +++ b/html/scripts/app_de.js @@ -1,6 +1,6 @@ (function(){ - - let ContactTpl = + + let ContactTpl = '
' + '
' + '
' + @@ -10,15 +10,15 @@ '
' + '
' ; - - let MessageTpl = + + let MessageTpl = '
' + '
' + '
' + '{{sender}}
#{{phoneNumber}}' + - '
' + - '
' + - '
{{message}}
' + + '
' + + '
' + + '
{{message}}
' + '
' + '
' ; @@ -33,52 +33,57 @@ let isMessageEditorOpen = false; let isMessagesOpen = false; let isPhoneShowed = false; - + let showMain = function() { $('.screen').removeClass('active'); + $('.screen *').attr('disabled', 'disabled'); } - + let showRepertoire = function() { $('#repertoire').addClass('active'); } - + let hideRepertoire = function() { $('#repertoire').removeClass('active'); } - - let showMessages = function(){ + + let showMessages = function(){ $('#messages').addClass('active'); isMessagesOpen = true; } - let hideMessages = function(){ + let hideMessages = function(){ $('#messages').removeClass('active'); isMessagesOpen = false; } - + let showAddContact = function() { $('#contact').addClass('active'); + $('.screen *').attr('disabled', 'disabled'); + $('.screen.active *').removeAttr('disabled'); } - + let hideAddContact = function() { $('#contact').removeClass('active'); $('#contact_name').val(''); $('#contact_number').val(''); } - + let showNewMessage = function(cnum, cname) { $('#writer').addClass('active'); $('#writer_number').val(cnum); $('#writer .header-title').html(cname); + $('.screen *').attr('disabled', 'disabled'); + $('.screen.active *').removeAttr('disabled'); } - let hideNewMessage = function() { + let hideNewMessage = function() { $('#writer').removeClass('active'); $('#writer_number').val(''); $('#writer_message').val(''); $('#writer .header-title').html(''); } - + let showGPS = function(xPos, yPos) { $.post('http://esx_phone/setGPS', JSON.stringify({ x: parseFloat(xPos), @@ -88,13 +93,13 @@ } let renderContacts = function(){ - + let contactHTML = ''; - + if(contacts.length > 0) { for(let i=0; i 0) { - + for(let i=0; i' + '
' + @@ -10,15 +10,15 @@ '
' + '
' ; - - let MessageTpl = + + let MessageTpl = '
' + '
' + '
' + '{{sender}}
#{{phoneNumber}}' + - '
' + - '
' + - '
{{message}}
' + + '
' + + '' + + '
{{message}}
' + '
' + '' ; @@ -33,52 +33,57 @@ let isMessageEditorOpen = false; let isMessagesOpen = false; let isPhoneShowed = false; - + let showMain = function() { $('.screen').removeClass('active'); + $('.screen *').attr('disabled', 'disabled'); } - + let showRepertoire = function() { $('#repertoire').addClass('active'); } - + let hideRepertoire = function() { $('#repertoire').removeClass('active'); } - - let showMessages = function(){ + + let showMessages = function(){ $('#messages').addClass('active'); isMessagesOpen = true; } - let hideMessages = function(){ + let hideMessages = function(){ $('#messages').removeClass('active'); isMessagesOpen = false; } - + let showAddContact = function() { $('#contact').addClass('active'); + $('.screen *').attr('disabled', 'disabled'); + $('.screen.active *').removeAttr('disabled'); } - + let hideAddContact = function() { $('#contact').removeClass('active'); $('#contact_name').val(''); $('#contact_number').val(''); } - + let showNewMessage = function(cnum, cname) { $('#writer').addClass('active'); $('#writer_number').val(cnum); $('#writer .header-title').html(cname); + $('.screen *').attr('disabled', 'disabled'); + $('.screen.active *').removeAttr('disabled'); } - let hideNewMessage = function() { + let hideNewMessage = function() { $('#writer').removeClass('active'); $('#writer_number').val(''); $('#writer_message').val(''); $('#writer .header-title').html(''); } - + let showGPS = function(xPos, yPos) { $.post('http://esx_phone/setGPS', JSON.stringify({ x: parseFloat(xPos), @@ -88,13 +93,13 @@ } let renderContacts = function(){ - + let contactHTML = ''; - + if(contacts.length > 0) { for(let i=0; i 0) { - + for(let i=0; i ' .. xPlayer.name .. '@' .. phoneNumber .. ' : ' .. message) - local xPlayer2 = ESX.GetPlayerFromId(xPlayers[j]) - - if xPlayer2.get('phoneNumber') == contacts[i].number then - contacts[i].online = true - end + if PhoneNumbers[phoneNumber] ~= nil then + + for i=1, #PhoneNumbers[phoneNumber].sources, 1 do + + if PhoneNumbers[phoneNumber].sources[i] ~= nil then + + local numType = PhoneNumbers[phoneNumber].type + local numHasDispatch = PhoneNumbers[phoneNumber].hasDispatch + local numHide = PhoneNumbers[phoneNumber].hideNumber + local numHidePosIfAnon = PhoneNumbers[phoneNumber].hidePosIfAnon + local numPosition = (PhoneNumbers[phoneNumber].sharePos and position or false) + local numSource = PhoneNumbers[phoneNumber].sources[i] + + if numHidePosIfAnon and anon then + numPosition = false + end + + if numHasDispatch then + TriggerClientEvent('esx_phone:onMessage', numSource, xPlayer.get('phoneNumber'), message, numPosition, (numHide and true or anon), numType, GetDistpatchRequestId()) + else + TriggerClientEvent('esx_phone:onMessage', numSource, xPlayer.get('phoneNumber'), message, numPosition, (numHide and true or anon), numType, false) end end - xPlayer.set('contacts', contacts) - - TriggerClientEvent('esx_phone:loaded', _source, phoneNumber, contacts) - end - ) -end) - -RegisterServerEvent('esx_phone:registerCallback') -AddEventHandler('esx_phone:registerCallback', function(cb) - table.insert(RegisteredCallbacks, cb) -end) - -RegisterServerEvent('esx_phone:send') -AddEventHandler('esx_phone:send', function(phoneNumber, message, anon) - - local _source = source - - for i=1, #RegisteredCallbacks, 1 do - RegisteredCallbacks[i](_source, phoneNumber, message, anon) end + +end) + +AddEventHandler('esx_phone:registerNumber', function(number, type, sharePos, hasDispatch, hideNumber, hidePosIfAnon) + + local hideNumber = hideNumber or false + local hidePosIfAnon = hidePosIfAnon or false + + PhoneNumbers[number] = { + type = type, + sharePos = sharePos, + hasDispatch = (hasDispatch or false), + hideNumber = hideNumber, + hidePosIfAnon = hidePosIfAnon, + sources = {} + } + +end) + +AddEventHandler('esx_phone:addSource', function(number, source) + + local found = false + + for i=1, #PhoneNumbers[number].sources, 1 do + if PhoneNumbers[number].sources[i] == source then + found = true + break + end + end + + if not found then + table.insert(PhoneNumbers[number].sources, source) + end + +end) + +AddEventHandler('esx_phone:removeSource', function(number, source) + + for i=1, #PhoneNumbers[number].sources, 1 do + if PhoneNumbers[number].sources[i] == source then + PhoneNumbers[number].sources[i] = nil + end + end + end) RegisterServerEvent('esx_phone:addPlayerContact') @@ -244,20 +312,7 @@ AddEventHandler('esx_phone:addPlayerContact', function(phoneNumber, contactName) TriggerClientEvent('esx:showNotification', _source, _U('contact_added')) - local xPlayers = ESX.GetPlayers() - local isOnline = false - - for i=1, #xPlayers, 1 do - - local xPlayer2 = ESX.GetPlayerFromId(xPlayers[i]) - - if xPlayer2.get('phoneNumber') == phoneNumber then - isOnline = true - break - end - end - - TriggerClientEvent('esx_phone:addContact', _source, contactName, phoneNumber, isOnline) + TriggerClientEvent('esx_phone:addContact', _source, contactName, phoneNumber) end ) @@ -273,26 +328,6 @@ AddEventHandler('esx_phone:addPlayerContact', function(phoneNumber, contactName) end) -AddEventHandler('esx_phone:ready', function() - TriggerEvent('esx_phone:registerCallback', function(source, phoneNumber, message, anon) - - local xPlayer = ESX.GetPlayerFromId(source) - local xPlayers = ESX.GetPlayers() - - print('MESSAGE => ' .. xPlayer.name .. '@' .. phoneNumber .. ' : ' .. message) - - for i=1, #xPlayers, 1 do - - local xPlayer2 = ESX.GetPlayerFromId(xPlayers[i]) - - if xPlayer2.get('phoneNumber') == phoneNumber then - TriggerClientEvent('esx_phone:onMessage', xPlayer2.source, xPlayer.get('phoneNumber'), message, false, anon, 'player', false) - end - end - - end) -end) - RegisterServerEvent('esx_phone:stopDispatch') AddEventHandler('esx_phone:stopDispatch', function(dispatchRequestId) TriggerClientEvent('esx_phone:stopDispatch', -1, dispatchRequestId, GetPlayerName(source))