From 57084948a95bf5de50a72423b8a3dc5b7a5446fc Mon Sep 17 00:00:00 2001 From: Rafael Antunes <147253092+Fellow1990@users.noreply.github.com> Date: Thu, 21 Aug 2025 07:49:42 +0100 Subject: [PATCH 1/3] Identity Add static ESX.ExtendedPlayers Update main.lua --- [core]/esx_identity/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index c7c8de765..adce04b06 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -213,7 +213,7 @@ end Wait(0) end - local xPlayers = ESX.GetExtendedPlayers() + local xPlayers = ESX.ExtendedPlayers() for i = 1, #xPlayers do if xPlayers[i] then From 6c195d389030aede72dd5780bd5cfd6d9904a960 Mon Sep 17 00:00:00 2001 From: Rafael Antunes <147253092+Fellow1990@users.noreply.github.com> Date: Sat, 23 Aug 2025 21:58:12 +0100 Subject: [PATCH 2/3] Update main.lua Static player object --- [core]/esx_identity/server/main.lua | 308 ++++++++++++++-------------- 1 file changed, 156 insertions(+), 152 deletions(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index adce04b06..acb857292 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -125,32 +125,75 @@ local function formatName(name) end local function setIdentity(xPlayer) - if not alreadyRegistered[xPlayer.identifier] then - return - end - local currentIdentity = playerIdentity[xPlayer.identifier] - SetPlayerData(xPlayer, currentIdentity) + local identifier = xPlayer.getIdentifier() + local source = xPlayer.getSource() + if not alreadyRegistered[identifier] then + return + end + local currentIdentity = playerIdentity[identifier] + SetPlayerData(xPlayer, currentIdentity) - TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) - if currentIdentity.saveToDatabase then - saveIdentityToDatabase(xPlayer.identifier, currentIdentity) + TriggerClientEvent("esx_identity:setPlayerData", source, currentIdentity) + if currentIdentity.saveToDatabase then + saveIdentityToDatabase(identifier, currentIdentity) + end + + playerIdentity[identifier] = nil +end + +local function checkIdentity(xPlayer) + local identifier = xPlayer.getIdentifier() + local source = xPlayer.getSource() + MySQL.single("SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?", { identifier }, function(result) + if not result then + return TriggerClientEvent("esx_identity:showRegisterIdentity", source) + end + if not result.firstname then + playerIdentity[identifier] = nil + alreadyRegistered[identifier] = false + return TriggerClientEvent("esx_identity:showRegisterIdentity", source) end - playerIdentity[xPlayer.identifier] = nil + playerIdentity[identifier] = { + firstName = result.firstname, + lastName = result.lastname, + dateOfBirth = result.dateofbirth, + sex = result.sex, + height = result.height, + } + + alreadyRegistered[identifier] = true + setIdentity(source) + end) end - local function checkIdentity(xPlayer) - MySQL.single("SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?", { xPlayer.identifier }, function(result) +if not multichar then + AddEventHandler("playerConnecting", function(_, _, deferrals) + deferrals.defer() + local _, identifier = source, nil + + local correctLicense, _ = pcall(function() + identifier = ESX.GetIdentifier(source) + end) + + Wait(40) + + if not identifier or not correctLicense 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 - return TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source) + playerIdentity[identifier] = nil + alreadyRegistered[identifier] = false + return deferrals.done() end if not result.firstname then - playerIdentity[xPlayer.identifier] = nil - alreadyRegistered[xPlayer.identifier] = false - return TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source) + playerIdentity[identifier] = nil + alreadyRegistered[identifier] = false + return deferrals.done() end - playerIdentity[xPlayer.identifier] = { + playerIdentity[identifier] = { firstName = result.firstname, lastName = result.lastname, dateOfBirth = result.dateofbirth, @@ -158,166 +201,127 @@ end height = result.height, } - alreadyRegistered[xPlayer.identifier] = true - setIdentity(xPlayer) - end) - end + alreadyRegistered[identifier] = true - if not multichar then - AddEventHandler("playerConnecting", function(_, _, deferrals) - deferrals.defer() - local _, identifier = source, nil - - local correctLicense, _ = pcall(function() - identifier = ESX.GetIdentifier(source) - end) - - Wait(40) - - if not identifier or not correctLicense 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 - - playerIdentity[identifier] = { - firstName = result.firstname, - lastName = result.lastname, - dateOfBirth = result.dateofbirth, - sex = result.sex, - height = result.height, - } - - alreadyRegistered[identifier] = true - - deferrals.done() - end) + deferrals.done() end) + end) - AddEventHandler("onResourceStart", function(resource) - if resource ~= GetCurrentResourceName() then - return - end - Wait(300) + AddEventHandler("onResourceStart", function(resource) + 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.ExtendedPlayers() + local xPlayers = ESX.ExtendedPlayers() - 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) - - RegisterNetEvent("esx:playerLoaded", function(_, xPlayer) - local currentIdentity = playerIdentity[xPlayer.identifier] - - if currentIdentity and alreadyRegistered[xPlayer.identifier] then - SetPlayerData(xPlayer, currentIdentity) - - TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) - if currentIdentity.saveToDatabase then - saveIdentityToDatabase(xPlayer.identifier, currentIdentity) - end + end + end) - Wait(0) + RegisterNetEvent("esx:playerLoaded", function(_, xPlayer) + local currentIdentity = playerIdentity[xPlayer.identifier] - TriggerClientEvent("esx_identity:alreadyRegistered", xPlayer.source) + if currentIdentity and alreadyRegistered[xPlayer.identifier] then + SetPlayerData(xPlayer, currentIdentity) - playerIdentity[xPlayer.identifier] = nil - else - TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source) + TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) + if currentIdentity.saveToDatabase then + saveIdentityToDatabase(xPlayer.identifier, currentIdentity) end - end) - end - ESX.RegisterServerCallback("esx_identity:registerIdentity", function(source, cb, data) - local xPlayer = ESX.Player(source) + Wait(0) - 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 - - if xPlayer then - local identifier = xPlayer.getIdentifier() - if alreadyRegistered[identifier] then - xPlayer.showNotification(TranslateCap("already_registered"), "error") - return cb(false) - end + TriggerClientEvent("esx_identity:alreadyRegistered", xPlayer.source) - playerIdentity[identifier] = { - firstName = formatName(data.firstname), - lastName = formatName(data.lastname), - dateOfBirth = formatDate(data.dateofbirth), - sex = data.sex, - height = data.height, - } - - local currentIdentity = playerIdentity[identifier] + playerIdentity[xPlayer.identifier] = nil + else + TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source) + end + end) +end - SetPlayerData(xPlayer, currentIdentity) +ESX.RegisterServerCallback("esx_identity:registerIdentity", function(source, cb, data) + local xPlayer = ESX.Player(source) - TriggerClientEvent("esx_identity:setPlayerData", xPlayer.src, currentIdentity) - saveIdentityToDatabase(identifier, currentIdentity) - alreadyRegistered[identifier] = true - playerIdentity[identifier] = nil - return cb(true) - 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 - if not multichar then - TriggerClientEvent("esx:showNotification", source, TranslateCap("data_incorrect"), "error") + if xPlayer then + local identifier = xPlayer.getIdentifier() + if alreadyRegistered[identifier] then + xPlayer.showNotification(TranslateCap("already_registered"), "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, + playerIdentity[identifier] = { + firstName = formatName(data.firstname), + lastName = formatName(data.lastname), + dateOfBirth = formatDate(data.dateofbirth), sex = data.sex, height = data.height, } - TriggerEvent("esx_identity:completedRegistration", source, data) - TriggerClientEvent("esx_identity:setPlayerData", source, Identity) - cb(true) - end) + local currentIdentity = playerIdentity[identifier] + + SetPlayerData(xPlayer, currentIdentity) + + TriggerClientEvent("esx_identity:setPlayerData", xPlayer.src, currentIdentity) + saveIdentityToDatabase(identifier, currentIdentity) + alreadyRegistered[identifier] = true + playerIdentity[identifier] = nil + return cb(true) + end + + if not multichar then + TriggerClientEvent("esx:showNotification", source, TranslateCap("data_incorrect"), "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) if Config.EnableCommands then ESX.RegisterCommand("char", "user", function(xPlayer) From fc485809aafdaa2ab69113b514591608d1b64f62 Mon Sep 17 00:00:00 2001 From: Rafael Antunes <147253092+Fellow1990@users.noreply.github.com> Date: Thu, 28 Aug 2025 16:54:33 +0100 Subject: [PATCH 3/3] Update main.lua xPlayer.getSource() to xPlayer.src --- [core]/esx_identity/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index acb857292..b144a34d3 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -142,8 +142,8 @@ local function setIdentity(xPlayer) end local function checkIdentity(xPlayer) + local source = xPlayer.src local identifier = xPlayer.getIdentifier() - local source = xPlayer.getSource() MySQL.single("SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?", { identifier }, function(result) if not result then return TriggerClientEvent("esx_identity:showRegisterIdentity", source)