From ce89ca02347e2f9bb5d3b13092df26524548784c Mon Sep 17 00:00:00 2001 From: Csoki Date: Thu, 24 Nov 2022 23:22:26 +0100 Subject: [PATCH 01/15] refactor: esx_identity server side --- [esx]/esx_identity/server/main.lua | 556 +++++++++++++---------------- 1 file changed, 250 insertions(+), 306 deletions(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index e40cdc8b..5b0f0450 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -17,15 +17,17 @@ local function deleteIdentityFromDatabase(xPlayer) end local function deleteIdentity(xPlayer) - if alreadyRegistered[xPlayer.identifier] then - xPlayer.setName(('%s %s'):format(nil, nil)) - xPlayer.set('firstName', nil) - xPlayer.set('lastName', nil) - xPlayer.set('dateofbirth', nil) - xPlayer.set('sex', nil) - xPlayer.set('height', nil) - deleteIdentityFromDatabase(xPlayer) + if not alreadyRegistered[xPlayer.identifier] then + return end + + xPlayer.setName(('%s %s'):format(nil, nil)) + xPlayer.set('firstName', nil) + xPlayer.set('lastName', nil) + xPlayer.set('dateofbirth', nil) + xPlayer.set('sex', nil) + xPlayer.set('height', nil) + deleteIdentityFromDatabase(xPlayer) end local function saveIdentityToDatabase(identifier, identity) @@ -35,44 +37,28 @@ local function saveIdentityToDatabase(identifier, identity) end local function checkDate(str) - if string.match(str, '(%d%d)/(%d%d)/(%d%d%d%d)') ~= nil then - local d, m, y = string.match(str, '(%d+)/(%d+)/(%d+)') + if not string.match(str, '(%d%d)/(%d%d)/(%d%d%d%d)') then + return false + end + + local d, m, y = string.match(str, '(%d+)/(%d+)/(%d+)') - m = tonumber(m) - d = tonumber(d) - y = tonumber(y) + m = tonumber(m) + d = tonumber(d) + y = tonumber(y) - if ((d <= 0) or (d > 31)) or ((m <= 0) or (m > 12)) or ((y <= Config.LowestYear) or (y > Config.HighestYear)) then - return false - elseif m == 4 or m == 6 or m == 9 or m == 11 then - if d > 30 then - return false - else - return true - end - elseif m == 2 then - if y % 400 == 0 or (y % 100 ~= 0 and y % 4 == 0) then - if d > 29 then - return false - else - return true - end - else - if d > 28 then - return false - else - return true - end - end + if ((d <= 0) or (d > 31)) or ((m <= 0) or (m > 12)) or ((y <= Config.LowestYear) or (y > Config.HighestYear)) then + return false + elseif m == 4 or m == 6 or m == 9 or m == 11 then + return d < 30 + elseif m == 2 then + if y % 400 == 0 or (y % 100 ~= 0 and y % 4 == 0) then + return d < 29 else - if d > 31 then - return false - else - return true - end + return d < 28 end else - return false + return d < 31 end end @@ -98,47 +84,27 @@ local function checkForNumbers(str) end local function checkNameFormat(name) - if not checkAlphanumeric(name) then - if not checkForNumbers(name) then - local stringLength = string.len(name) - if stringLength > 0 and stringLength < Config.MaxNameLength then - return true - else - return false - end - else - return false - end - else - return false + if not checkAlphanumeric(name) and not checkForNumbers(name) then + local stringLength = string.len(name) + return stringLength > 0 and stringLength < Config.MaxNameLength end + + return false end local function checkDOBFormat(dob) local date = tostring(dob) - if checkDate(date) then - return true - else - return false - end + return checkDate(date) end local function checkSexFormat(sex) - if sex == "m" or sex == "M" or sex == "f" or sex == "F" then - return true - else - return false - end + return sex == "m" or sex == "M" or sex == "f" or sex == "F" end local function checkHeightFormat(height) local numHeight = tonumber(height) - if numHeight < Config.MinHeight and numHeight > Config.MaxHeight then - return false - else - return true - end + return numHeight < Config.MinHeight and numHeight > Config.MaxHeight end local function convertToLowerCase(str) @@ -151,8 +117,7 @@ end local function formatName(name) local loweredName = convertToLowerCase(name) - local formattedName = convertFirstLetterToUpper(loweredName) - return formattedName + return convertFirstLetterToUpper(loweredName) end if Config.UseDeferrals then @@ -187,7 +152,7 @@ if Config.UseDeferrals then {"title":"Female","value":"f"}],"style":"expanded","id":"sex"}]},{"type": "ActionSet", "actions": [{"type":"Action.Submit","title":"Submit"}]}], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json","version":"1.0"}]==], - function(data, rawData) + function(data) if data.firstname == '' or data.lastname == '' or data.dateofbirth == '' or data.sex == '' or data.height == '' then deferrals.done(TranslateCap('data_incorrect')) @@ -222,46 +187,36 @@ if Config.UseDeferrals then "placeholder":"Sex","choices":[{"title":"Male","value":"m"},{"title":"Female","value":"f"}], "style":"expanded","id":"sex"}]},{"type": "ActionSet","actions": [{"type":"Action.Submit", "title":"Submit"}]}],"$schema": "http://adaptivecards.io/schemas/adaptive-card.json","version":"1.0"}]==], - function(data, rawData) - if data.firstname == '' or data.lastname == '' or data.dateofbirth == '' or data.sex == - '' or data.height == '' then - deferrals.done(TranslateCap('data_incorrect')) - else - if checkNameFormat(data.firstname) then - if checkNameFormat(data.lastname) then - if checkDOBFormat(data.dateofbirth) then - if checkSexFormat(data.sex) then - if checkHeightFormat(data.height) then - local formattedFirstName = formatName(data.firstname) - local formattedLastName = formatName(data.lastname) - local formattedDate = formatDate(data.dateofbirth) - - playerIdentity[identifier] = { - firstName = formatName(data.firstname), - lastName = formatName(data.lastname), - dateOfBirth = data.dateofbirth, - sex = data.sex, - height = tonumber(data.height), - saveToDatabase = true - } - - deferrals.done() - else - deferrals.done(TranslateCap('invalid_height_format')) - end - else - deferrals.done(TranslateCap('invalid_sex_format')) - end - else - deferrals.done(TranslateCap('invalid_dob_format')) - end - else - deferrals.done(TranslateCap('invalid_lastname_format')) - end - else - deferrals.done(TranslateCap('invalid_firstname_format')) - end + function(data) + if data.firstname == '' or data.lastname == '' or data.dateofbirth == '' or data.sex == '' or data.height == '' then + return deferrals.done(TranslateCap('data_incorrect')) end + if not checkNameFormat(data.firstname) then + return deferrals.done(TranslateCap('invalid_firstname_format')) + end + if not checkNameFormat(data.lastname) then + return deferrals.done(TranslateCap('invalid_lastname_format')) + end + if not checkDOBFormat(data.dateofbirth) then + return deferrals.done(TranslateCap('invalid_dob_format')) + end + if not checkSexFormat(data.sex) then + return deferrals.done(TranslateCap('invalid_sex_format')) + end + if not checkHeightFormat(data.height) then + return deferrals.done(TranslateCap('invalid_height_format')) + end + + playerIdentity[identifier] = { + firstName = formatName(data.firstname), + lastName = formatName(data.lastname), + dateOfBirth = formatDate(data.dateofbirth), + sex = data.sex, + height = tonumber(data.height), + saveToDatabase = true + } + + deferrals.done() end) end end) @@ -272,70 +227,71 @@ if Config.UseDeferrals then RegisterNetEvent('esx:playerLoaded') AddEventHandler('esx:playerLoaded', function(playerId, xPlayer) - if playerIdentity[xPlayer.identifier] then - local currentIdentity = playerIdentity[xPlayer.identifier] - xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set('firstName', currentIdentity.firstName) - xPlayer.set('lastName', currentIdentity.lastName) - xPlayer.set('dateofbirth', currentIdentity.dateOfBirth) - xPlayer.set('sex', currentIdentity.sex) - xPlayer.set('height', currentIdentity.height) - if currentIdentity.saveToDatabase then - saveIdentityToDatabase(xPlayer.identifier, currentIdentity) - end - - Wait(0) - alreadyRegistered[xPlayer.identifier] = true - TriggerClientEvent('esx_identity:alreadyRegistered', xPlayer.source) - playerIdentity[xPlayer.identifier] = nil - else - xPlayer.kick(_('missing_identity')) + if not playerIdentity[xPlayer.identifier] then + return xPlayer.kick(_('missing_identity')) end + + local currentIdentity = playerIdentity[xPlayer.identifier] + xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) + xPlayer.set('firstName', currentIdentity.firstName) + xPlayer.set('lastName', currentIdentity.lastName) + xPlayer.set('dateofbirth', currentIdentity.dateOfBirth) + xPlayer.set('sex', currentIdentity.sex) + xPlayer.set('height', currentIdentity.height) + if currentIdentity.saveToDatabase then + saveIdentityToDatabase(xPlayer.identifier, currentIdentity) + end + + Wait(0) + alreadyRegistered[xPlayer.identifier] = true + TriggerClientEvent('esx_identity:alreadyRegistered', xPlayer.source) + playerIdentity[xPlayer.identifier] = nil end) else local function setIdentity(xPlayer) - if alreadyRegistered[xPlayer.identifier] then - local currentIdentity = playerIdentity[xPlayer.identifier] + if not alreadyRegistered[xPlayer.identifier] then + return + end + local currentIdentity = playerIdentity[xPlayer.identifier] - xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set('firstName', currentIdentity.firstName) - xPlayer.set('lastName', currentIdentity.lastName) - xPlayer.set('dateofbirth', currentIdentity.dateOfBirth) - xPlayer.set('sex', currentIdentity.sex) - xPlayer.set('height', currentIdentity.height) - TriggerClientEvent('esx_identity:setPlayerData', xPlayer.source, currentIdentity) - if currentIdentity.saveToDatabase then - saveIdentityToDatabase(xPlayer.identifier, currentIdentity) - end + xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) + xPlayer.set('firstName', currentIdentity.firstName) + xPlayer.set('lastName', currentIdentity.lastName) + xPlayer.set('dateofbirth', currentIdentity.dateOfBirth) + xPlayer.set('sex', currentIdentity.sex) + xPlayer.set('height', currentIdentity.height) + TriggerClientEvent('esx_identity:setPlayerData', xPlayer.source, currentIdentity) + if currentIdentity.saveToDatabase then + saveIdentityToDatabase(xPlayer.identifier, currentIdentity) + end - playerIdentity[xPlayer.identifier] = nil - end + playerIdentity[xPlayer.identifier] = nil end local function checkIdentity(xPlayer) - MySQL.single('SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?', - {xPlayer.identifier}, function(result) - if result then - if result.firstname then - playerIdentity[xPlayer.identifier] = { - firstName = result.firstname, - lastName = result.lastname, - dateOfBirth = result.dateofbirth, - sex = result.sex, - height = result.height - } - - alreadyRegistered[xPlayer.identifier] = true - setIdentity(xPlayer) - else - playerIdentity[xPlayer.identifier] = nil - alreadyRegistered[xPlayer.identifier] = false - TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source) - end - else - TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source) + MySQL.single('SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?', {xPlayer.identifier}, + function(result) + if not result then + return TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source) end - end) + if not result.firstname then + playerIdentity[xPlayer.identifier] = nil + alreadyRegistered[xPlayer.identifier] = false + return TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source) + end + + playerIdentity[xPlayer.identifier] = { + firstName = result.firstname, + lastName = result.lastname, + dateOfBirth = result.dateofbirth, + sex = result.sex, + height = result.height + } + + alreadyRegistered[xPlayer.identifier] = true + setIdentity(xPlayer) + end + ) end if not multichar then @@ -344,50 +300,49 @@ else local playerId, identifier = source, ESX.GetIdentifier(source) Wait(40) - if identifier then - MySQL.single('SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?', - {identifier}, function(result) - if result then - if result.firstname then - playerIdentity[identifier] = { - firstName = result.firstname, - lastName = result.lastname, - dateOfBirth = result.dateofbirth, - sex = result.sex, - height = result.height - } + if not identifier then + return deferrals.done(TranslateCap('no_identifier')) + end + MySQL.single('SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?', {identifier}, + function(result) + if not result then + playerIdentity[identifier] = nil + alreadyRegistered[identifier] = false + return deferrals.done() + end + if not result.firstname then + playerIdentity[identifier] = nil + alreadyRegistered[identifier] = false + return deferrals.done() + end - alreadyRegistered[identifier] = true + playerIdentity[identifier] = { + firstName = result.firstname, + lastName = result.lastname, + dateOfBirth = result.dateofbirth, + sex = result.sex, + height = result.height + } - deferrals.done() - else - playerIdentity[identifier] = nil - alreadyRegistered[identifier] = false - deferrals.done() - end - else - playerIdentity[identifier] = nil - alreadyRegistered[identifier] = false - deferrals.done() - end - end) - else - deferrals.done(TranslateCap('no_identifier')) - end + alreadyRegistered[identifier] = true + + deferrals.done() + end) end) AddEventHandler('onResourceStart', function(resource) - if resource == GetCurrentResourceName() then - Wait(300) + if resource ~= GetCurrentResourceName() then + return + end + Wait(300) - while not ESX do Wait(0) end + while not ESX do Wait(0) end - local xPlayers = ESX.GetExtendedPlayers() + local xPlayers = ESX.GetExtendedPlayers() - for i=1, #(xPlayers) do - if xPlayers[i] then - checkIdentity(xPlayers[i]) - end + for i=1, #(xPlayers) do + if xPlayers[i] then + checkIdentity(xPlayers[i]) end end end) @@ -395,7 +350,7 @@ else RegisterNetEvent('esx:playerLoaded', function(playerId, xPlayer) local currentIdentity = playerIdentity[xPlayer.identifier] - if currentIdentity and alreadyRegistered[xPlayer.identifier] == true then + if currentIdentity and alreadyRegistered[xPlayer.identifier] then xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) xPlayer.set('firstName', currentIdentity.firstName) xPlayer.set('lastName', currentIdentity.lastName) @@ -422,111 +377,100 @@ else local xPlayer = ESX.GetPlayerFromId(source) if xPlayer then - if not alreadyRegistered[xPlayer.identifier] then - xPlayer.showNotification(TranslateCap('running'), "error") - if checkNameFormat(data.firstname) then - if checkNameFormat(data.lastname) then - if checkSexFormat(data.sex) then - if checkDOBFormat(data.dateofbirth) then - if checkHeightFormat(data.height) then - local formattedFirstName = formatName(data.firstname) - local formattedLastName = formatName(data.lastname) - local formattedDate = formatDate(data.dateofbirth) - - playerIdentity[xPlayer.identifier] = { - firstName = formattedFirstName, - lastName = formattedLastName, - dateOfBirth = formattedDate, - sex = data.sex, - height = data.height - } - - local currentIdentity = playerIdentity[xPlayer.identifier] - - xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set('firstName', currentIdentity.firstName) - xPlayer.set('lastName', currentIdentity.lastName) - xPlayer.set('dateofbirth', currentIdentity.dateOfBirth) - xPlayer.set('sex', currentIdentity.sex) - xPlayer.set('height', currentIdentity.height) - TriggerClientEvent('esx_identity:setPlayerData', xPlayer.source, currentIdentity) - saveIdentityToDatabase(xPlayer.identifier, currentIdentity) - alreadyRegistered[xPlayer.identifier] = true - playerIdentity[xPlayer.identifier] = nil - cb(true) - else - xPlayer.showNotification(TranslateCap('invalid_height_format'), "error") - cb(false) - end - else - xPlayer.showNotification(TranslateCap('invalid_dob_format'), "error") - cb(false) - end - else - xPlayer.showNotification(TranslateCap('invalid_sex_format'), "error") - cb(false) - end - else - xPlayer.showNotification(TranslateCap('invalid_lastname_format'), "error") - cb(false) - end - else - xPlayer.showNotification(TranslateCap('invalid_firstname_format'), "error") - cb(false) - end - else + if alreadyRegistered[xPlayer.identifier] then xPlayer.showNotification(TranslateCap('already_registered'), "error") - cb(false) - end - else - if multichar then - if checkNameFormat(data.firstname) then - if checkNameFormat(data.lastname) then - if checkSexFormat(data.sex) then - if checkDOBFormat(data.dateofbirth) then - local formattedFirstName = formatName(data.firstname) - local formattedLastName = formatName(data.lastname) - local formattedDate = formatDate(data.dateofbirth) - - data.firstname = formattedFirstName - data.lastname = formattedLastName - data.dateofbirth = formattedDate - if checkHeightFormat(data.height) then - local Identity= { - firstName = formattedFirstName, - lastName = formattedLastName, - dateOfBirth = formattedDate, - sex = data.sex, - height = data.height - } - TriggerEvent('esx_identity:completedRegistration', source, data) - TriggerClientEvent('esx_identity:setPlayerData', source, Identity) - cb(true) - else - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_height_format'), "error") - cb(false) - end - else - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_dob_format'), "error") - cb(false) - end - else - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_sex_format'), "error") - cb(false) - end - else - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_lastname_format'), "error") - cb(false) - end - else - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_firstname_format'), "error") - cb(false) - end - else - TriggerClientEvent("esx:showNotification", source, TranslateCap('data_incorrect'), "error") - cb(false) - end - end + return cb(false) + end + + xPlayer.showNotification(TranslateCap('running'), "error") + if not checkNameFormat(data.firstname) then + xPlayer.showNotification(TranslateCap('invalid_firstname_format'), "error") + return cb(false) + end + if not checkNameFormat(data.lastname) then + xPlayer.showNotification(TranslateCap('invalid_lastname_format'), "error") + return cb(false) + end + if not checkSexFormat(data.sex) then + xPlayer.showNotification(TranslateCap('invalid_sex_format'), "error") + return cb(false) + end + if checkDOBFormat(data.dateofbirth) then + xPlayer.showNotification(TranslateCap('invalid_dob_format'), "error") + return cb(false) + end + if checkHeightFormat(data.height) then + xPlayer.showNotification(TranslateCap('invalid_height_format'), "error") + return cb(false) + end + + playerIdentity[xPlayer.identifier] = { + firstName = formatName(data.firstname), + lastName = formatName(data.lastname), + dateOfBirth = formatDate(data.dateofbirth), + sex = data.sex, + height = data.height + } + + local currentIdentity = playerIdentity[xPlayer.identifier] + + xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName)) + xPlayer.set('firstName', currentIdentity.firstName) + xPlayer.set('lastName', currentIdentity.lastName) + xPlayer.set('dateofbirth', currentIdentity.dateOfBirth) + xPlayer.set('sex', currentIdentity.sex) + xPlayer.set('height', currentIdentity.height) + TriggerClientEvent('esx_identity:setPlayerData', xPlayer.source, currentIdentity) + saveIdentityToDatabase(xPlayer.identifier, currentIdentity) + alreadyRegistered[xPlayer.identifier] = true + playerIdentity[xPlayer.identifier] = nil + return cb(true) + end + + if not multichar then + TriggerClientEvent("esx:showNotification", source, TranslateCap('data_incorrect'), "error") + return cb(false) + end + if not checkNameFormat(data.firstname) then + TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_firstname_format'), "error") + return cb(false) + end + if not checkNameFormat(data.lastname) then + TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_lastname_format'), "error") + return cb(false) + end + if not checkSexFormat(data.sex) then + TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_sex_format'), "error") + return cb(false) + end + if not checkDOBFormat(data.dateofbirth) then + TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_dob_format'), "error") + return cb(false) + end + if not checkHeightFormat(data.height) then + TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_height_format'), "error") + return cb(false) + end + + + local formattedFirstName = formatName(data.firstname) + local formattedLastName = formatName(data.lastname) + local formattedDate = formatDate(data.dateofbirth) + + data.firstname = formattedFirstName + data.lastname = formattedLastName + data.dateofbirth = formattedDate + local Identity = { + firstName = formattedFirstName, + lastName = formattedLastName, + dateOfBirth = formattedDate, + sex = data.sex, + height = data.height + } + + TriggerEvent('esx_identity:completedRegistration', source, data) + TriggerClientEvent('esx_identity:setPlayerData', source, Identity) + cb(true) end) end From b808dad48fd45ad9f055dc33fe3b9c5bb6ed6197 Mon Sep 17 00:00:00 2001 From: Csoki Date: Thu, 24 Nov 2022 23:40:18 +0100 Subject: [PATCH 02/15] refactor: control disabler thread --- [esx]/esx_identity/client/main.lua | 72 ++++++++++++++---------------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/[esx]/esx_identity/client/main.lua b/[esx]/esx_identity/client/main.lua index 9b7dd31a..5c0df2c8 100644 --- a/[esx]/esx_identity/client/main.lua +++ b/[esx]/esx_identity/client/main.lua @@ -17,7 +17,7 @@ RegisterNetEvent('esx_identity:setPlayerData', function(data) ESX.SetPlayerData('sex', data.sex) ESX.SetPlayerData('height', data.height) end) - end) +end) AddEventHandler('esx:loadingScreenOff', function() loadingScreenFinished = true @@ -35,11 +35,12 @@ if not Config.UseDeferrals then if state then SetTimecycleModifier(timecycleModifier) + CreateThread(disableControls) else ClearTimecycleModifier() end - SendNUIMessage({type = "enableui",enable = state}) + SendNUIMessage({type = "enableui", enable = state}) end RegisterNetEvent('esx_identity:showRegisterIdentity', function() @@ -50,47 +51,42 @@ if not Config.UseDeferrals then RegisterNUICallback('register', function(data, cb) ESX.TriggerServerCallback('esx_identity:registerIdentity', function(callback) - if callback then - ESX.ShowNotification(TranslateCap('thank_you_for_registering')) - EnableGui(false) + if not callback then + return + end - if not ESX.GetConfig().Multichar then - TriggerEvent('esx_skin:playerRegistered') - end + ESX.ShowNotification(TranslateCap('thank_you_for_registering')) + EnableGui(false) + + if not ESX.GetConfig().Multichar then + TriggerEvent('esx_skin:playerRegistered') end end, data) end) - CreateThread(function() - while true do - local sleep = 1500 + function disableControls() + while guiEnabled do + DisableControlAction(0, 1, true) -- LookLeftRight + DisableControlAction(0, 2, true) -- LookUpDown + DisableControlAction(0, 106, true) -- VehicleMouseControlOverride + DisableControlAction(0, 142, true) -- MeleeAttackAlternate + DisableControlAction(0, 30, true) -- MoveLeftRight + DisableControlAction(0, 31, true) -- MoveUpDown + DisableControlAction(0, 21, true) -- disable sprint + DisableControlAction(0, 24, true) -- disable attack + DisableControlAction(0, 25, true) -- disable aim + DisableControlAction(0, 47, true) -- disable weapon + DisableControlAction(0, 58, true) -- disable weapon + DisableControlAction(0, 263, true) -- disable melee + DisableControlAction(0, 264, true) -- disable melee + DisableControlAction(0, 257, true) -- disable melee + DisableControlAction(0, 140, true) -- disable melee + DisableControlAction(0, 141, true) -- disable melee + DisableControlAction(0, 143, true) -- disable melee + DisableControlAction(0, 75, true) -- disable exit vehicle + DisableControlAction(27, 75, true) -- disable exit vehicle - if guiEnabled then - sleep = 0 - DisableControlAction(0, 1, true) -- LookLeftRight - DisableControlAction(0, 2, true) -- LookUpDown - DisableControlAction(0, 106, true) -- VehicleMouseControlOverride - DisableControlAction(0, 142, true) -- MeleeAttackAlternate - DisableControlAction(0, 30, true) -- MoveLeftRight - DisableControlAction(0, 31, true) -- MoveUpDown - DisableControlAction(0, 21, true) -- disable sprint - DisableControlAction(0, 24, true) -- disable attack - DisableControlAction(0, 25, true) -- disable aim - DisableControlAction(0, 47, true) -- disable weapon - DisableControlAction(0, 58, true) -- disable weapon - DisableControlAction(0, 263, true) -- disable melee - DisableControlAction(0, 264, true) -- disable melee - DisableControlAction(0, 257, true) -- disable melee - DisableControlAction(0, 140, true) -- disable melee - DisableControlAction(0, 141, true) -- disable melee - DisableControlAction(0, 143, true) -- disable melee - DisableControlAction(0, 75, true) -- disable exit vehicle - DisableControlAction(27, 75, true) -- disable exit vehicle - else - sleep = 1500 - end - - Wait(sleep) + Wait(0) end - end) + end end From 094ad4d8da4e16c476edc888c4086f80eb0ebc3c Mon Sep 17 00:00:00 2001 From: Csoki Date: Thu, 24 Nov 2022 23:41:58 +0100 Subject: [PATCH 03/15] fix: prevent nui devtools register if panel closed --- [esx]/esx_identity/client/main.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/[esx]/esx_identity/client/main.lua b/[esx]/esx_identity/client/main.lua index 5c0df2c8..016dbf2f 100644 --- a/[esx]/esx_identity/client/main.lua +++ b/[esx]/esx_identity/client/main.lua @@ -50,6 +50,10 @@ if not Config.UseDeferrals then end) RegisterNUICallback('register', function(data, cb) + if not guiEnabled then + return + end + ESX.TriggerServerCallback('esx_identity:registerIdentity', function(callback) if not callback then return From 38cfcb0a7101b94699da373ba9a29e17c8bfd73a Mon Sep 17 00:00:00 2001 From: Csoki Date: Thu, 24 Nov 2022 23:53:51 +0100 Subject: [PATCH 04/15] fix --- [esx]/esx_identity/server/main.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index 5b0f0450..dfea3ab2 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -395,11 +395,11 @@ else xPlayer.showNotification(TranslateCap('invalid_sex_format'), "error") return cb(false) end - if checkDOBFormat(data.dateofbirth) then + if not checkDOBFormat(data.dateofbirth) then xPlayer.showNotification(TranslateCap('invalid_dob_format'), "error") return cb(false) end - if checkHeightFormat(data.height) then + if not checkHeightFormat(data.height) then xPlayer.showNotification(TranslateCap('invalid_height_format'), "error") return cb(false) end From d417c928325ffd3dc1c82653981a35674f8094f3 Mon Sep 17 00:00:00 2001 From: Csoki Date: Thu, 24 Nov 2022 23:59:31 +0100 Subject: [PATCH 05/15] fix height check --- [esx]/esx_identity/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index dfea3ab2..efca013f 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -104,7 +104,7 @@ end local function checkHeightFormat(height) local numHeight = tonumber(height) - return numHeight < Config.MinHeight and numHeight > Config.MaxHeight + return numHeight >= Config.MinHeight and numHeight <= Config.MaxHeight end local function convertToLowerCase(str) From 176de7a52e07449784d6c0bd1a986b5baec9e7b9 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 19:48:31 +0100 Subject: [PATCH 06/15] format code + fix date empty error --- [esx]/esx_identity/html/js/script.js | 33 +++++++++++++--------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/[esx]/esx_identity/html/js/script.js b/[esx]/esx_identity/html/js/script.js index 936c164d..4dd4b127 100644 --- a/[esx]/esx_identity/html/js/script.js +++ b/[esx]/esx_identity/html/js/script.js @@ -1,37 +1,34 @@ $(document).ready(function () { - $.post("http://esx_identity/ready", JSON.stringify({})); + $.post('http://esx_identity/ready', JSON.stringify({})); - window.addEventListener("message", function (event) { - if (event.data.type === "enableui") { + window.addEventListener('message', function (event) { + if (event.data.type === 'enableui') { event.data.enable ? $(document.body).show() : $(document.body).hide(); } }); - $("#register").submit(function (event) { + $('#register').submit(function (event) { event.preventDefault(); - const dateCheck = new Date($("#dateofbirth").val()); + const dofVal = $('#dateofbirth').val(); + if (!dofVal) return; - const year = new Intl.DateTimeFormat("en", { year: "numeric" }).format( - dateCheck - ); - const month = new Intl.DateTimeFormat("en", { month: "2-digit" }).format( - dateCheck - ); - const day = new Intl.DateTimeFormat("en", { day: "2-digit" }).format( - dateCheck - ); + const dateCheck = new Date(dofVal); + + const year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(dateCheck); + const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(dateCheck); + const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(dateCheck); const formattedDate = `${day}/${month}/${year}`; $.post( - "http://esx_identity/register", + 'http://esx_identity/register', JSON.stringify({ - firstname: $("#firstname").val(), - lastname: $("#lastname").val(), + firstname: $('#firstname').val(), + lastname: $('#lastname').val(), dateofbirth: formattedDate, sex: $("input[type='radio'][name='sex']:checked").val(), - height: $("#height").val(), + height: $('#height').val(), }) ); }); From 2540a8a1d2eaced45531618e2b5efb48eadbcbe4 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 20:30:45 +0100 Subject: [PATCH 07/15] fix check functions --- [esx]/esx_identity/server/main.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index efca013f..2c80e517 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -99,11 +99,14 @@ local function checkDOBFormat(dob) end local function checkSexFormat(sex) + if not sex then + return false + end return sex == "m" or sex == "M" or sex == "f" or sex == "F" end local function checkHeightFormat(height) - local numHeight = tonumber(height) + local numHeight = tonumber(height) or 0 return numHeight >= Config.MinHeight and numHeight <= Config.MaxHeight end From 91dbe243ffd6aa583ffcf1e42ee72f723e8d4e0e Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 20:34:12 +0100 Subject: [PATCH 08/15] fix 'hu' locales --- [esx_addons]/esx_joblisting/locales/hu.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[esx_addons]/esx_joblisting/locales/hu.lua b/[esx_addons]/esx_joblisting/locales/hu.lua index 0c23eecd..36cb8365 100644 --- a/[esx_addons]/esx_joblisting/locales/hu.lua +++ b/[esx_addons]/esx_joblisting/locales/hu.lua @@ -1,5 +1,5 @@ Locales['hu'] = { ['new_job'] = 'Felvetted a munkát!', - ['access_job_center'] = 'Nyomj ~INPUT_PICKUP~ hogy megnézd a munkákat', + ['access_job_center'] = 'Nyomj ~b~[E]~s~ hogy megnézd a munkákat', ['job_center'] = 'Munkaügyi központ', } From 6c6dcfef6ef8f5fcdbb367232b70963c768957bc Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 20:45:23 +0100 Subject: [PATCH 09/15] esx_identity: clear form after submit --- [esx]/esx_identity/html/js/script.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/[esx]/esx_identity/html/js/script.js b/[esx]/esx_identity/html/js/script.js index 4dd4b127..5364f8c8 100644 --- a/[esx]/esx_identity/html/js/script.js +++ b/[esx]/esx_identity/html/js/script.js @@ -31,5 +31,7 @@ $(document).ready(function () { height: $('#height').val(), }) ); + + $('#register').trigger('reset'); }); }); From 60b4941f07c6a1c548f28a7992b73bcb4f213ffa Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 20:45:55 +0100 Subject: [PATCH 10/15] remove control disable thread nui focus block all controls, thread no need --- [esx]/esx_identity/client/main.lua | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/[esx]/esx_identity/client/main.lua b/[esx]/esx_identity/client/main.lua index 016dbf2f..e585a9b6 100644 --- a/[esx]/esx_identity/client/main.lua +++ b/[esx]/esx_identity/client/main.lua @@ -35,7 +35,6 @@ if not Config.UseDeferrals then if state then SetTimecycleModifier(timecycleModifier) - CreateThread(disableControls) else ClearTimecycleModifier() end @@ -67,30 +66,4 @@ if not Config.UseDeferrals then end end, data) end) - - function disableControls() - while guiEnabled do - DisableControlAction(0, 1, true) -- LookLeftRight - DisableControlAction(0, 2, true) -- LookUpDown - DisableControlAction(0, 106, true) -- VehicleMouseControlOverride - DisableControlAction(0, 142, true) -- MeleeAttackAlternate - DisableControlAction(0, 30, true) -- MoveLeftRight - DisableControlAction(0, 31, true) -- MoveUpDown - DisableControlAction(0, 21, true) -- disable sprint - DisableControlAction(0, 24, true) -- disable attack - DisableControlAction(0, 25, true) -- disable aim - DisableControlAction(0, 47, true) -- disable weapon - DisableControlAction(0, 58, true) -- disable weapon - DisableControlAction(0, 263, true) -- disable melee - DisableControlAction(0, 264, true) -- disable melee - DisableControlAction(0, 257, true) -- disable melee - DisableControlAction(0, 140, true) -- disable melee - DisableControlAction(0, 141, true) -- disable melee - DisableControlAction(0, 143, true) -- disable melee - DisableControlAction(0, 75, true) -- disable exit vehicle - DisableControlAction(27, 75, true) -- disable exit vehicle - - Wait(0) - end - end end From 375230f8347a69706d009da6da87fb2bad7f9332 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 20:52:08 +0100 Subject: [PATCH 11/15] esx_identity: rename EnableGui to setGuiState --- [esx]/esx_identity/client/main.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/[esx]/esx_identity/client/main.lua b/[esx]/esx_identity/client/main.lua index e585a9b6..e3d6becc 100644 --- a/[esx]/esx_identity/client/main.lua +++ b/[esx]/esx_identity/client/main.lua @@ -29,7 +29,7 @@ RegisterNUICallback('ready', function(data, cb) end) if not Config.UseDeferrals then - function EnableGui(state) + function setGuiState(state) SetNuiFocus(state, state) guiEnabled = state @@ -45,7 +45,7 @@ if not Config.UseDeferrals then RegisterNetEvent('esx_identity:showRegisterIdentity', function() TriggerEvent('esx_skin:resetFirstSpawn') - if not ESX.PlayerData.dead then EnableGui(true) end + if not ESX.PlayerData.dead then setGuiState(true) end end) RegisterNUICallback('register', function(data, cb) @@ -59,11 +59,11 @@ if not Config.UseDeferrals then end ESX.ShowNotification(TranslateCap('thank_you_for_registering')) - EnableGui(false) + setGuiState(false) if not ESX.GetConfig().Multichar then TriggerEvent('esx_skin:playerRegistered') end end, data) end) -end +end \ No newline at end of file From cec68f2708af0f5796ddab958fb74c520cdecfd1 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 21:02:03 +0100 Subject: [PATCH 12/15] esx_identity: rename checkDate to checkDOBFormat --- [esx]/esx_identity/server/main.lua | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index 2c80e517..4ea632d3 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -36,7 +36,8 @@ local function saveIdentityToDatabase(identifier, identity) {identity.firstName, identity.lastName, identity.dateOfBirth, identity.sex, identity.height, identifier}) end -local function checkDate(str) +local function checkDOBFormat(str) + str = tostring(str) if not string.match(str, '(%d%d)/(%d%d)/(%d%d%d%d)') then return false end @@ -92,12 +93,6 @@ local function checkNameFormat(name) return false end -local function checkDOBFormat(dob) - local date = tostring(dob) - - return checkDate(date) -end - local function checkSexFormat(sex) if not sex then return false From 4eefe972703f216ba5689bd75f6b83912e0ea1ec Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 21:05:09 +0100 Subject: [PATCH 13/15] remove unused locale --- [esx]/esx_identity/server/main.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index 4ea632d3..bc811761 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -380,7 +380,6 @@ else return cb(false) end - xPlayer.showNotification(TranslateCap('running'), "error") if not checkNameFormat(data.firstname) then xPlayer.showNotification(TranslateCap('invalid_firstname_format'), "error") return cb(false) From 30546999a8d952b49c67ea025ad83a21bbc616e0 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sat, 26 Nov 2022 21:08:30 +0100 Subject: [PATCH 14/15] remove code duplication --- [esx]/esx_identity/server/main.lua | 63 ++++++++++-------------------- 1 file changed, 21 insertions(+), 42 deletions(-) diff --git a/[esx]/esx_identity/server/main.lua b/[esx]/esx_identity/server/main.lua index bc811761..08ed89c9 100644 --- a/[esx]/esx_identity/server/main.lua +++ b/[esx]/esx_identity/server/main.lua @@ -374,33 +374,33 @@ else ESX.RegisterServerCallback('esx_identity:registerIdentity', function(source, cb, data) local xPlayer = ESX.GetPlayerFromId(source) + if not checkNameFormat(data.firstname) then + xPlayer.showNotification(TranslateCap('invalid_firstname_format'), "error") + return cb(false) + end + if not checkNameFormat(data.lastname) then + xPlayer.showNotification(TranslateCap('invalid_lastname_format'), "error") + return cb(false) + end + if not checkSexFormat(data.sex) then + xPlayer.showNotification(TranslateCap('invalid_sex_format'), "error") + return cb(false) + end + if not checkDOBFormat(data.dateofbirth) then + xPlayer.showNotification(TranslateCap('invalid_dob_format'), "error") + return cb(false) + end + if not checkHeightFormat(data.height) then + xPlayer.showNotification(TranslateCap('invalid_height_format'), "error") + return cb(false) + end + if xPlayer then if alreadyRegistered[xPlayer.identifier] then xPlayer.showNotification(TranslateCap('already_registered'), "error") return cb(false) end - if not checkNameFormat(data.firstname) then - xPlayer.showNotification(TranslateCap('invalid_firstname_format'), "error") - return cb(false) - end - if not checkNameFormat(data.lastname) then - xPlayer.showNotification(TranslateCap('invalid_lastname_format'), "error") - return cb(false) - end - if not checkSexFormat(data.sex) then - xPlayer.showNotification(TranslateCap('invalid_sex_format'), "error") - return cb(false) - end - if not checkDOBFormat(data.dateofbirth) then - xPlayer.showNotification(TranslateCap('invalid_dob_format'), "error") - return cb(false) - end - if not checkHeightFormat(data.height) then - xPlayer.showNotification(TranslateCap('invalid_height_format'), "error") - return cb(false) - end - playerIdentity[xPlayer.identifier] = { firstName = formatName(data.firstname), lastName = formatName(data.lastname), @@ -428,27 +428,6 @@ else TriggerClientEvent("esx:showNotification", source, TranslateCap('data_incorrect'), "error") return cb(false) end - if not checkNameFormat(data.firstname) then - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_firstname_format'), "error") - return cb(false) - end - if not checkNameFormat(data.lastname) then - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_lastname_format'), "error") - return cb(false) - end - if not checkSexFormat(data.sex) then - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_sex_format'), "error") - return cb(false) - end - if not checkDOBFormat(data.dateofbirth) then - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_dob_format'), "error") - return cb(false) - end - if not checkHeightFormat(data.height) then - TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_height_format'), "error") - return cb(false) - end - local formattedFirstName = formatName(data.firstname) local formattedLastName = formatName(data.lastname) From 82bfc7726efcaae41b5fa3590ea794e5c87fc70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Horv=C3=A1th=20Gell=C3=A9rt?= Date: Sat, 26 Nov 2022 21:46:15 +0100 Subject: [PATCH 15/15] #575 esx_society refactor and fix notify issues --- [esx_addons]/esx_society/server/main.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/[esx_addons]/esx_society/server/main.lua b/[esx_addons]/esx_society/server/main.lua index a88d7f2c..be5e0d3d 100644 --- a/[esx_addons]/esx_society/server/main.lua +++ b/[esx_addons]/esx_society/server/main.lua @@ -287,7 +287,7 @@ ESX.RegisterServerCallback('esx_society:getJob', function(source, cb, society) cb(job) end) -ESX.RegisterServerCallback('esx_society:setJob', function(source, cb, identifier, job, grade, type) +ESX.RegisterServerCallback('esx_society:setJob', function(source, cb, identifier, job, grade, actionType) local xPlayer = ESX.GetPlayerFromId(source) local isBoss = xPlayer.job.grade_name == 'boss' local xTarget = ESX.GetPlayerFromIdentifier(identifier) @@ -297,13 +297,13 @@ ESX.RegisterServerCallback('esx_society:setJob', function(source, cb, identifier if xTarget then xTarget.setJob(job, grade) - if type == 'hire' then + if actionType == 'hire' then xTarget.showNotification(TranslateCap('you_have_been_hired', job)) xPlayer.showNotification(TranslateCap("you_have_hired", xTarget.getName())) - elseif type == 'promote' then + elseif actionType == 'promote' then xTarget.showNotification(TranslateCap('you_have_been_promoted')) - xPlayer.showNotification(TranslateCap("you_have_promoted", xTarget.getName())) - elseif type == 'fire' then + xPlayer.showNotification(TranslateCap("you_have_promoted", xTarget.getName(), xTarget.getJob().label)) + elseif actionType == 'fire' then xTarget.showNotification(TranslateCap('you_have_been_fired', xTarget.getJob().label)) xPlayer.showNotification(TranslateCap("you_have_fired", xTarget.getName())) end