function getIdentity(source, callback) local identifier = GetPlayerIdentifiers(source)[1] MySQL.Async.fetchAll("SELECT * FROM `users` WHERE `identifier` = @identifier", { ['@identifier'] = identifier }, function(result) if result[1]['firstname'] ~= nil then local data = { identifier = result[1]['identifier'], firstname = result[1]['firstname'], lastname = result[1]['lastname'], dateofbirth = result[1]['dateofbirth'], sex = result[1]['sex'], height = result[1]['height'] } callback(data) else local data = { identifier = '', firstname = '', lastname = '', dateofbirth = '', sex = '', height = '' } callback(data) end end) end function getCharacters(source, callback) local identifier = GetPlayerIdentifiers(source)[1] MySQL.Async.fetchAll("SELECT * FROM `characters` WHERE `identifier` = @identifier", { ['@identifier'] = identifier }, function(result) if result[1] and result[2] and result[3] then local data = { identifier = result[1]['identifier'], firstname1 = result[1]['firstname'], lastname1 = result[1]['lastname'], dateofbirth1 = result[1]['dateofbirth'], sex1 = result[1]['sex'], height1 = result[1]['height'], firstname2 = result[2]['firstname'], lastname2 = result[2]['lastname'], dateofbirth2 = result[2]['dateofbirth'], sex2 = result[2]['sex'], height2 = result[2]['height'], firstname3 = result[3]['firstname'], lastname3 = result[3]['lastname'], dateofbirth3 = result[3]['dateofbirth'], sex3 = result[3]['sex'], height3 = result[3]['height'] } callback(data) elseif result[1] and result[2] and not result[3] then local data = { identifier = result[1]['identifier'], firstname1 = result[1]['firstname'], lastname1 = result[1]['lastname'], dateofbirth1 = result[1]['dateofbirth'], sex1 = result[1]['sex'], height1 = result[1]['height'], firstname2 = result[2]['firstname'], lastname2 = result[2]['lastname'], dateofbirth2 = result[2]['dateofbirth'], sex2 = result[2]['sex'], height2 = result[2]['height'], firstname3 = '', lastname3 = '', dateofbirth3 = '', sex3 = '', height3 = '' } callback(data) elseif result[1] and not result[2] and not result[3] then local data = { identifier = result[1]['identifier'], firstname1 = result[1]['firstname'], lastname1 = result[1]['lastname'], dateofbirth1 = result[1]['dateofbirth'], sex1 = result[1]['sex'], height1 = result[1]['height'], firstname2 = '', lastname2 = '', dateofbirth2 = '', sex2 = '', height2 = '', firstname3 = '', lastname3 = '', dateofbirth3 = '', sex3 = '', height3 = '' } callback(data) else local data = { identifier = '', firstname1 = '', lastname1 = '', dateofbirth1 = '', sex1 = '', height1 = '', firstname2 = '', lastname2 = '', dateofbirth2 = '', sex2 = '', height2 = '', firstname3 = '', lastname3 = '', dateofbirth3 = '', sex3 = '', height3 = '' } callback(data) end end) end function setIdentity(identifier, data, callback) MySQL.Async.execute("UPDATE `users` SET `firstname` = @firstname, `lastname` = @lastname, `dateofbirth` = @dateofbirth, `sex` = @sex, `height` = @height WHERE identifier = @identifier", { ['@identifier'] = identifier, ['@firstname'] = data.firstname, ['@lastname'] = data.lastname, ['@dateofbirth'] = data.dateofbirth, ['@sex'] = data.sex, ['@height'] = data.height }, function(done) if callback then callback(true) end end) MySQL.Async.execute( 'INSERT INTO characters (identifier, firstname, lastname, dateofbirth, sex, height) VALUES (@identifier, @firstname, @lastname, @dateofbirth, @sex, @height)', { ['@identifier'] = identifier, ['@firstname'] = data.firstname, ['@lastname'] = data.lastname, ['@dateofbirth'] = data.dateofbirth, ['@sex'] = data.sex, ['@height'] = data.height }) end function updateIdentity(identifier, data, callback) MySQL.Async.execute("UPDATE `users` SET `firstname` = @firstname, `lastname` = @lastname, `dateofbirth` = @dateofbirth, `sex` = @sex, `height` = @height WHERE identifier = @identifier", { ['@identifier'] = identifier, ['@firstname'] = data.firstname, ['@lastname'] = data.lastname, ['@dateofbirth'] = data.dateofbirth, ['@sex'] = data.sex, ['@height'] = data.height }, function(done) if callback then callback(true) end end) end function deleteIdentity(identifier, data, callback) MySQL.Async.execute("DELETE FROM `characters` WHERE identifier = @identifier AND firstname = @firstname AND lastname = @lastname AND dateofbirth = @dateofbirth AND sex = @sex AND height = @height", { ['@identifier'] = identifier, ['@firstname'] = data.firstname, ['@lastname'] = data.lastname, ['@dateofbirth'] = data.dateofbirth, ['@sex'] = data.sex, ['@height'] = data.height }, function(done) if callback then callback(true) end end) end RegisterServerEvent('esx_identity:setIdentity') AddEventHandler('esx_identity:setIdentity', function(data) local identifier = GetPlayerIdentifiers(source)[1] setIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then print('Successfully Set Identity For ' .. identifier) else print('Failed To Set Identity.') end end) end) AddEventHandler('es:playerLoaded', function(source) getIdentity(source, function(data) if data.firstname == '' then print('do not register!') TriggerClientEvent('esx_identity:showRegisterIdentity', source) else print('Successfully Loaded Identity For ' .. data.firstname .. ' ' .. data.lastname) end end) end) TriggerEvent('es:addGroupCommand', 'idhelp', "user", function(source, args, user) TriggerClientEvent('chatMessage', source, 'IDHelp', {255, 0, 0}, "ESX_IDENTITY Commands") TriggerClientEvent('chatMessage', source, 'IDHelp', {255, 0, 0}, "/register - Register A New Character") TriggerClientEvent('chatMessage', source, 'IDHelp', {255, 0, 0}, "/charlist - List Your Characters") TriggerClientEvent('chatMessage', source, 'IDHelp', {255, 0, 0}, "/charselect 1,2,3 - Change Your Active Character") TriggerClientEvent('chatMessage', source, 'IDHelp', {255, 0, 0}, "/delchar 1,2,3 - Delete A Character") end, function(source, args, user) TriggerClientEvent('chatMessage', source, "IDHelp", {255, 0, 0}, "Insufficienct permissions!") end, {help = "List Your Characters"}) TriggerEvent('es:addCommand', 'register', function(source, args, user) getCharacters(source, function(data) if data.firstname3 ~= '' then TriggerClientEvent('chatMessage', source, 'REGISTER', {255, 0, 0}, "You Can Only Have 3 Characters.") else TriggerClientEvent('esx_identity:showRegisterIdentity', source) end end) end, {help = "Register a new character"}) TriggerEvent('es:addGroupCommand', 'char', "user", function(source, args, user) getIdentity(source, function(data) if data.firstname == '' then TriggerClientEvent('chatMessage', source, 'CHAR', {255, 0, 0}, "You Have No Active Character.") else TriggerClientEvent('chatMessage', source, 'CHAR', {255, 0, 0}, "Active Character: " .. data.firstname .. " " .. data.lastname) end end) end, function(source, args, user) TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficienct permissions!") end, {help = "List your current character"}) TriggerEvent('es:addGroupCommand', 'charlist', "user", function(source, args, user) getCharacters(source, function(data) if data.firstname1 ~= '' then TriggerClientEvent('chatMessage', source, 'CHARLIST', {255, 0, 0}, "Character 1: " .. data.firstname1 .. " " .. data.lastname1) if data.firstname2 ~= '' then TriggerClientEvent('chatMessage', source, 'CHARLIST', {255, 0, 0}, "Character 2: " .. data.firstname2 .. " " .. data.lastname2) if data.firstname3 ~= '' then TriggerClientEvent('chatMessage', source, 'CHARLIST', {255, 0, 0}, "Character 3: " .. data.firstname3 .. " " .. data.lastname3) end end else TriggerClientEvent('chatMessage', source, 'CHARLIST', {255, 0, 0}, "You Have No Characters. Please use the /register command.") end end) end, function(source, args, user) TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficienct permissions!") end, {help = "List Your Characters"}) TriggerEvent('es:addCommand', 'charselect', function(source, args, user) table.remove(args, 1) local charNumber = tonumber(table.concat(args, " ")) getCharacters(source, function(data) if charNumber == 1 then local data = { identifier = data.identifier, firstname = data.firstname1, lastname = data.lastname1, dateofbirth = data.dateofbirth1, sex = data.sex1, height = data.height1 } if data.firstname ~= '' then updateIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Updated your active character to " .. data.firstname .. " " .. data.lastname .. "!") else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Failed To Update Identity!") end end) else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "You don\'t have a character in slot 1!") end elseif charNumber == 2 then local data = { identifier = data.identifier, firstname = data.firstname2, lastname = data.lastname2, dateofbirth = data.dateofbirth2, sex = data.sex2, height = data.height2 } if data.firstname ~= '' then updateIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Updated your active character to " .. data.firstname .. " " .. data.lastname .. "!") else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Failed To Update Identity!") end end) else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "You don\'t have a character in slot 2!") end elseif charNumber == 3 then local data = { identifier = data.identifier, firstname = data.firstname3, lastname = data.lastname3, dateofbirth = data.dateofbirth3, sex = data.sex3, height = data.height3 } if data.firstname ~= '' then updateIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Updated your active character to " .. data.firstname .. " " .. data.lastname .. "!") else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Failed To Update Identity!") end end) else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "You don\'t have a character in slot 3!") end else TriggerClientEvent('chatMessage', source, "CHARSELECT", {255, 0, 0}, "Failed To Update Identity!") end end) end) TriggerEvent('es:addCommand', 'delchar', function(source, args, user) table.remove(args, 1) local charNumber = tonumber(table.concat(args, " ")) getCharacters(source, function(data) if charNumber == 1 then local data = { identifier = data.identifier, firstname = data.firstname1, lastname = data.lastname1, dateofbirth = data.dateofbirth1, sex = data.sex1, height = data.height1 } if data.firstname ~= '' then deleteIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "You Have Deleted " .. data.firstname .. " " .. data.lastname .. "!") else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "Failed To Delete Identity!") end end) else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "You don\'t have a character in slot 1!") end elseif charNumber == 2 then local data = { identifier = data.identifier, firstname = data.firstname2, lastname = data.lastname2, dateofbirth = data.dateofbirth2, sex = data.sex2, height = data.height2 } if data.firstname ~= '' then deleteIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "You Have Deleted " .. data.firstname .. " " .. data.lastname .. "!") else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "Failed To Delete Identity!") end end) else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "You don\'t have a character in slot 2!") end elseif charNumber == 3 then local data = { identifier = data.identifier, firstname = data.firstname3, lastname = data.lastname3, dateofbirth = data.dateofbirth3, sex = data.sex3, height = data.height3 } if data.firstname ~= '' then deleteIdentity(GetPlayerIdentifiers(source)[1], data, function(callback) if callback == true then TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "You Have Deleted " .. data.firstname .. " " .. data.lastname .. "!") else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "Failed To Delete Identity!") end end) else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "You don\'t have a character in slot 3!") end else TriggerClientEvent('chatMessage', source, "DELCHAR", {255, 0, 0}, "Failed To Delete Identity!") end end) end, {help = "Delete your character"})