ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) RegisterServerEvent('esx_skin:save') AddEventHandler('esx_skin:save', function(skin) local xPlayer = ESX.GetPlayerFromId(source) MySQL.Async.execute('UPDATE users SET skin = @skin WHERE identifier = @identifier', { ['@skin'] = json.encode(skin), ['@identifier'] = xPlayer.identifier }) end) RegisterServerEvent('esx_skin:responseSaveSkin') AddEventHandler('esx_skin:responseSaveSkin', function(skin) TriggerEvent('es:getPlayerFromId', source, function(user) TriggerEvent('es:canGroupTarget', user.getGroup(), "admin", function(available) if available then local file = io.open('resources/[esx]/esx_skin/skins.txt', "a") file:write(json.encode(skin) .. "\n\n") file:flush() file:close() else print(('esx_skin: %s attempted saving skin to file'):format(user.getIdentifier())) end end) end) end) ESX.RegisterServerCallback('esx_skin:getPlayerSkin', function(source, cb) local xPlayer = ESX.GetPlayerFromId(source) MySQL.Async.fetchAll('SELECT skin FROM users WHERE identifier = @identifier', { ['@identifier'] = xPlayer.identifier }, function(users) local user, skin = users[1] local jobSkin = { skin_male = xPlayer.job.skin_male, skin_female = xPlayer.job.skin_female } if user.skin then skin = json.decode(user.skin) end cb(skin, jobSkin) end) end) -- Commands TriggerEvent('es:addGroupCommand', 'skin', 'admin', function(source, args, user) TriggerClientEvent('esx_skin:openSaveableMenu', source) end, function(source, args, user) TriggerClientEvent('chat:addMessage', source, { args = { '^1SYSTEM', 'Insufficient Permissions.' } }) end, {help = _U('skin')}) TriggerEvent('es:addGroupCommand', 'skinsave', 'admin', function(source, args, user) TriggerClientEvent('esx_skin:requestSaveSkin', source) end, function(source, args, user) TriggerClientEvent('chat:addMessage', source, { args = { '^1SYSTEM', 'Insufficient Permissions.' } }) end, {help = _U('saveskin')})