mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 01:08:54 +00:00
Merge pull request #702 from fivemland/identity-refactor
refactor(esx_identity) refactor and fix #575
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -39,58 +39,31 @@ if not Config.UseDeferrals then
|
||||
ClearTimecycleModifier()
|
||||
end
|
||||
|
||||
SendNUIMessage({type = "enableui",enable = state})
|
||||
SendNUIMessage({type = "enableui", enable = state})
|
||||
end
|
||||
|
||||
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)
|
||||
ESX.TriggerServerCallback('esx_identity:registerIdentity', function(callback)
|
||||
if callback then
|
||||
ESX.ShowNotification(TranslateCap('thank_you_for_registering'))
|
||||
EnableGui(false)
|
||||
if not guiEnabled then
|
||||
return
|
||||
end
|
||||
|
||||
if not ESX.GetConfig().Multichar then
|
||||
TriggerEvent('esx_skin:playerRegistered')
|
||||
end
|
||||
ESX.TriggerServerCallback('esx_identity:registerIdentity', function(callback)
|
||||
if not callback then
|
||||
return
|
||||
end
|
||||
|
||||
ESX.ShowNotification(TranslateCap('thank_you_for_registering'))
|
||||
setGuiState(false)
|
||||
|
||||
if not ESX.GetConfig().Multichar then
|
||||
TriggerEvent('esx_skin:playerRegistered')
|
||||
end
|
||||
end, data)
|
||||
end)
|
||||
|
||||
CreateThread(function()
|
||||
while true do
|
||||
local sleep = 1500
|
||||
|
||||
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)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
@@ -1,38 +1,37 @@
|
||||
$(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(),
|
||||
})
|
||||
);
|
||||
|
||||
$('#register').trigger('reset');
|
||||
});
|
||||
});
|
||||
|
||||
+230
-310
@@ -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)
|
||||
@@ -34,45 +36,30 @@ local function saveIdentityToDatabase(identifier, identity)
|
||||
{identity.firstName, identity.lastName, identity.dateOfBirth, identity.sex, identity.height, identifier})
|
||||
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+)')
|
||||
local function checkDOBFormat(str)
|
||||
str = tostring(str)
|
||||
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 +85,24 @@ 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
|
||||
end
|
||||
|
||||
local function checkDOBFormat(dob)
|
||||
local date = tostring(dob)
|
||||
|
||||
if checkDate(date) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function checkSexFormat(sex)
|
||||
if sex == "m" or sex == "M" or sex == "f" or sex == "F" then
|
||||
return true
|
||||
else
|
||||
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)
|
||||
if numHeight < Config.MinHeight and numHeight > Config.MaxHeight then
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
local numHeight = tonumber(height) or 0
|
||||
return numHeight >= Config.MinHeight and numHeight <= Config.MaxHeight
|
||||
end
|
||||
|
||||
local function convertToLowerCase(str)
|
||||
@@ -151,8 +115,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 +150,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 +185,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 +225,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 +298,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 +348,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)
|
||||
@@ -421,112 +374,79 @@ 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 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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -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',
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user