refactor(esx_identity): fix formatting

This commit is contained in:
Kenshin13
2025-08-31 15:41:41 +02:00
parent 63b76adf16
commit 5382f50f8e
+161 -161
View File
@@ -38,7 +38,7 @@ local function deleteIdentity(xPlayer)
return return
end end
SetPlayerData(xPlayer, {firstName = nil, lastName = nil, dateOfBirth = nil, sex = nil, height = nil}) SetPlayerData(xPlayer, { firstName = nil, lastName = nil, dateOfBirth = nil, sex = nil, height = nil })
deleteIdentityFromDatabase(xPlayer) deleteIdentityFromDatabase(xPlayer)
end end
@@ -72,7 +72,7 @@ local function checkDOBFormat(dob)
local minYear = currentYear - Config.MaxAge local minYear = currentYear - Config.MaxAge
local maxYear = currentYear - 18 local maxYear = currentYear - 18
if year < minYear or year > maxYear then return false end if year < minYear or year > maxYear then return false end
if month < 1 or month > 12 then return false end if month < 1 or month > 12 then return false end
-- Days in each month (starting from January.) -- Days in each month (starting from January.)
@@ -128,32 +128,71 @@ local function formatName(name)
end end
local function setIdentity(xPlayer) local function setIdentity(xPlayer)
if not alreadyRegistered[xPlayer.identifier] then if not alreadyRegistered[xPlayer.identifier] then
return return
end end
local currentIdentity = playerIdentity[xPlayer.identifier] local currentIdentity = playerIdentity[xPlayer.identifier]
SetPlayerData(xPlayer, currentIdentity) SetPlayerData(xPlayer, currentIdentity)
TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity)
if currentIdentity.saveToDatabase then if currentIdentity.saveToDatabase then
saveIdentityToDatabase(xPlayer.identifier, currentIdentity) saveIdentityToDatabase(xPlayer.identifier, currentIdentity)
end end
playerIdentity[xPlayer.identifier] = nil playerIdentity[xPlayer.identifier] = nil
end end
local function checkIdentity(xPlayer) local function checkIdentity(xPlayer)
MySQL.single("SELECT firstname, lastname, dateofbirth, sex, height FROM users WHERE identifier = ?", { xPlayer.identifier }, function(result) 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
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
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 if not result then
return TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source) playerIdentity[identifier] = nil
alreadyRegistered[identifier] = false
return deferrals.done()
end end
if not result.firstname then if not result.firstname then
playerIdentity[xPlayer.identifier] = nil playerIdentity[identifier] = nil
alreadyRegistered[xPlayer.identifier] = false alreadyRegistered[identifier] = false
return TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source) return deferrals.done()
end end
playerIdentity[xPlayer.identifier] = { playerIdentity[identifier] = {
firstName = result.firstname, firstName = result.firstname,
lastName = result.lastname, lastName = result.lastname,
dateOfBirth = result.dateofbirth, dateOfBirth = result.dateofbirth,
@@ -161,166 +200,127 @@ end
height = result.height, height = result.height,
} }
alreadyRegistered[xPlayer.identifier] = true alreadyRegistered[identifier] = true
setIdentity(xPlayer)
deferrals.done()
end) end)
end end)
if not multichar then AddEventHandler("onResourceStart", function(resource)
AddEventHandler("playerConnecting", function(_, _, deferrals) if resource ~= GetCurrentResourceName() then
deferrals.defer() return
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)
end)
AddEventHandler("onResourceStart", function(resource)
if resource ~= GetCurrentResourceName() then
return
end
Wait(300)
while not ESX do
Wait(0)
end
local xPlayers = ESX.GetExtendedPlayers()
for i = 1, #xPlayers do
if xPlayers[i] then
checkIdentity(xPlayers[i])
end
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
Wait(0)
TriggerClientEvent("esx_identity:alreadyRegistered", xPlayer.source)
playerIdentity[xPlayer.identifier] = nil
else
TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source)
end
end)
end
ESX.RegisterServerCallback("esx_identity:registerIdentity", function(source, cb, data)
local xPlayer = ESX.Player(source)
if not checkNameFormat(data.firstname) then
TriggerClientEvent("esx:showNotification", source, TranslateCap("invalid_firstname_format"), "error")
return cb(false)
end end
if not checkNameFormat(data.lastname) then Wait(300)
TriggerClientEvent("esx:showNotification", source, TranslateCap("invalid_lastname_format"), "error")
return cb(false) while not ESX do
end Wait(0)
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 end
if xPlayer then local xPlayers = ESX.GetExtendedPlayers()
local identifier = xPlayer.getIdentifier()
if alreadyRegistered[identifier] then for i = 1, #xPlayers do
xPlayer.showNotification(TranslateCap("already_registered"), "error") if xPlayers[i] then
return cb(false) checkIdentity(xPlayers[i])
end end
end
end)
playerIdentity[identifier] = { RegisterNetEvent("esx:playerLoaded", function(_, xPlayer)
firstName = formatName(data.firstname), local currentIdentity = playerIdentity[xPlayer.identifier]
lastName = formatName(data.lastname),
dateOfBirth = formatDate(data.dateofbirth),
sex = data.sex,
height = data.height,
}
local currentIdentity = playerIdentity[identifier]
if currentIdentity and alreadyRegistered[xPlayer.identifier] then
SetPlayerData(xPlayer, currentIdentity) SetPlayerData(xPlayer, currentIdentity)
TriggerClientEvent("esx_identity:setPlayerData", xPlayer.src, currentIdentity) TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity)
saveIdentityToDatabase(identifier, currentIdentity) if currentIdentity.saveToDatabase then
alreadyRegistered[identifier] = true saveIdentityToDatabase(xPlayer.identifier, currentIdentity)
playerIdentity[identifier] = nil end
return cb(true)
end
if not multichar then Wait(0)
TriggerClientEvent("esx:showNotification", source, TranslateCap("data_incorrect"), "error")
TriggerClientEvent("esx_identity:alreadyRegistered", xPlayer.source)
playerIdentity[xPlayer.identifier] = nil
else
TriggerClientEvent("esx_identity:showRegisterIdentity", xPlayer.source)
end
end)
end
ESX.RegisterServerCallback("esx_identity:registerIdentity", function(source, cb, data)
local xPlayer = ESX.Player(source)
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) return cb(false)
end end
local formattedFirstName = formatName(data.firstname) playerIdentity[identifier] = {
local formattedLastName = formatName(data.lastname) firstName = formatName(data.firstname),
local formattedDate = formatDate(data.dateofbirth) lastName = formatName(data.lastname),
dateOfBirth = formatDate(data.dateofbirth),
data.firstname = formattedFirstName
data.lastname = formattedLastName
data.dateofbirth = formattedDate
local Identity = {
firstName = formattedFirstName,
lastName = formattedLastName,
dateOfBirth = formattedDate,
sex = data.sex, sex = data.sex,
height = data.height, height = data.height,
} }
TriggerEvent("esx_identity:completedRegistration", source, data) local currentIdentity = playerIdentity[identifier]
TriggerClientEvent("esx_identity:setPlayerData", source, Identity)
cb(true) SetPlayerData(xPlayer, currentIdentity)
end)
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 if Config.EnableCommands then
ESX.RegisterCommand("char", "user", function(xPlayer) ESX.RegisterCommand("char", "user", function(xPlayer)