diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..4bfca33b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_size = 2 +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/__resource.lua b/__resource.lua index 76706d7b..c2ff2048 100644 --- a/__resource.lua +++ b/__resource.lua @@ -1,26 +1,24 @@ -resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937' - description 'ESX Skin' version '1.0.1' server_scripts { - '@es_extended/locale.lua', - 'config.lua', - 'locales/de.lua', - 'locales/br.lua', - 'locales/en.lua', - 'locales/fr.lua', - '@mysql-async/lib/MySQL.lua', - 'server/main.lua' + '@es_extended/locale.lua', + 'config.lua', + 'locales/de.lua', + 'locales/br.lua', + 'locales/en.lua', + 'locales/fr.lua', + '@mysql-async/lib/MySQL.lua', + 'server/main.lua', } client_scripts { - '@es_extended/locale.lua', - 'config.lua', - 'locales/de.lua', - 'locales/br.lua', - 'locales/en.lua', - 'locales/fr.lua', - 'client/main.lua' + '@es_extended/locale.lua', + 'config.lua', + 'locales/de.lua', + 'locales/br.lua', + 'locales/en.lua', + 'locales/fr.lua', + 'client/main.lua', } diff --git a/client/main.lua b/client/main.lua index 50470819..d6c88ec3 100644 --- a/client/main.lua +++ b/client/main.lua @@ -2,361 +2,361 @@ ESX = nil local FirstSpawn = true local LastSkin = nil local PlayerLoaded = false -local cam = nil +local cam = nil local isCameraActive = false -local zoomOffset = 0.0 -local camOffset = 0.0 -local heading = 90.0 +local zoomOffset = 0.0 +local camOffset = 0.0 +local heading = 90.0 Citizen.CreateThread(function() - while ESX == nil do - TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) - Citizen.Wait(0) - end + while ESX == nil do + TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) + Citizen.Wait(0) + end end) function OpenMenu(submitCb, cancelCb, restrict) - local playerPed = GetPlayerPed(-1) + local playerPed = GetPlayerPed(-1) - TriggerEvent('skinchanger:getSkin', function(skin) - LastSkin = skin - end) + TriggerEvent('skinchanger:getSkin', function(skin) + LastSkin = skin + end) - TriggerEvent('skinchanger:getData', function(components, maxVals) + TriggerEvent('skinchanger:getData', function(components, maxVals) - local elements = {} - local _components = {} + local elements = {} + local _components = {} - -- Restrict menu - if restrict == nil then - for i=1, #components, 1 do - _components[i] = components[i] - end - else - for i=1, #components, 1 do + -- Restrict menu + if restrict == nil then + for i=1, #components, 1 do + _components[i] = components[i] + end + else + for i=1, #components, 1 do - local found = false + local found = false - for j=1, #restrict, 1 do - if components[i].name == restrict[j] then - found = true - end - end + for j=1, #restrict, 1 do + if components[i].name == restrict[j] then + found = true + end + end - if found then - table.insert(_components, components[i]) - end + if found then + table.insert(_components, components[i]) + end - end - end + end + end - -- Insert elements - for i=1, #_components, 1 do + -- Insert elements + for i=1, #_components, 1 do - local value = _components[i].value - local componentId = _components[i].componentId + local value = _components[i].value + local componentId = _components[i].componentId - if componentId == 0 then - value = GetPedPropIndex(playerPed, _components[i].componentId) - end + if componentId == 0 then + value = GetPedPropIndex(playerPed, _components[i].componentId) + end - local data = { - label = _components[i].label, - name = _components[i].name, - value = value, - min = _components[i].min, - textureof = _components[i].textureof, - zoomOffset= _components[i].zoomOffset, - camOffset = _components[i].camOffset, - type = 'slider' - } + local data = { + label = _components[i].label, + name = _components[i].name, + value = value, + min = _components[i].min, + textureof = _components[i].textureof, + zoomOffset= _components[i].zoomOffset, + camOffset = _components[i].camOffset, + type = 'slider' + } - for k,v in pairs(maxVals) do - if k == _components[i].name then - data.max = v - end - end + for k,v in pairs(maxVals) do + if k == _components[i].name then + data.max = v + end + end - table.insert(elements, data) + table.insert(elements, data) - end + end - CreateSkinCam() - zoomOffset = _components[1].zoomOffset - camOffset = _components[1].camOffset + CreateSkinCam() + zoomOffset = _components[1].zoomOffset + camOffset = _components[1].camOffset - ESX.UI.Menu.Open( - 'default', GetCurrentResourceName(), 'skin', - { - title = _U('skin_menu'), - align = 'top-left', - elements = elements - }, - function(data, menu) + ESX.UI.Menu.Open( + 'default', GetCurrentResourceName(), 'skin', + { + title = _U('skin_menu'), + align = 'top-left', + elements = elements + }, + function(data, menu) - TriggerEvent('skinchanger:getSkin', function(skin) - LastSkin = skin - end) + TriggerEvent('skinchanger:getSkin', function(skin) + LastSkin = skin + end) - submitCb(data, menu) - DeleteSkinCam() - end, - function(data, menu) + submitCb(data, menu) + DeleteSkinCam() + end, + function(data, menu) - menu.close() + menu.close() - DeleteSkinCam() + DeleteSkinCam() - TriggerEvent('skinchanger:loadSkin', LastSkin) + TriggerEvent('skinchanger:loadSkin', LastSkin) - if cancelCb ~= nil then - cancelCb(data, menu) - end + if cancelCb ~= nil then + cancelCb(data, menu) + end - end, - function(data, menu) + end, + function(data, menu) - TriggerEvent('skinchanger:getSkin', function(skin) + TriggerEvent('skinchanger:getSkin', function(skin) - zoomOffset = data.current.zoomOffset - camOffset = data.current.camOffset + zoomOffset = data.current.zoomOffset + camOffset = data.current.camOffset - if skin[data.current.name] ~= data.current.value then + if skin[data.current.name] ~= data.current.value then - -- Change skin element - TriggerEvent('skinchanger:change', data.current.name, data.current.value) + -- Change skin element + TriggerEvent('skinchanger:change', data.current.name, data.current.value) - -- Update max values - TriggerEvent('skinchanger:getData', function(components, maxVals) + -- Update max values + TriggerEvent('skinchanger:getData', function(components, maxVals) - for i=1, #elements, 1 do + for i=1, #elements, 1 do - local newData = {} - - newData.max = maxVals[elements[i].name] + local newData = {} - if elements[i].textureof ~= nil and data.current.name == elements[i].textureof then - newData.value = 0 - end + newData.max = maxVals[elements[i].name] - menu.update({name = elements[i].name}, newData) + if elements[i].textureof ~= nil and data.current.name == elements[i].textureof then + newData.value = 0 + end - end + menu.update({name = elements[i].name}, newData) - menu.refresh() + end - end) + menu.refresh() - end + end) - end) + end - end, - function() - DeleteSkinCam() - end - ) + end) - end) + end, + function() + DeleteSkinCam() + end + ) + + end) end function CreateSkinCam() - if not DoesCamExist(cam) then - cam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true) - end - SetCamActive(cam, true) - RenderScriptCams(true, true, 500, true, true) - isCameraActive = true - SetCamRot(cam, 0.0, 0.0, 270.0, true) - SetEntityHeading(playerPed, 90.0) + if not DoesCamExist(cam) then + cam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true) + end + SetCamActive(cam, true) + RenderScriptCams(true, true, 500, true, true) + isCameraActive = true + SetCamRot(cam, 0.0, 0.0, 270.0, true) + SetEntityHeading(playerPed, 90.0) end function DeleteSkinCam() - isCameraActive = false - SetCamActive(cam, false) - RenderScriptCams(false, true, 500, true, true) - cam = nil + isCameraActive = false + SetCamActive(cam, false) + RenderScriptCams(false, true, 500, true, true) + cam = nil end Citizen.CreateThread(function() - while true do - Citizen.Wait(0) - if isCameraActive then - DisableControlAction(2, 30, true) - DisableControlAction(2, 31, true) - DisableControlAction(2, 32, true) - DisableControlAction(2, 33, true) - DisableControlAction(2, 34, true) - DisableControlAction(2, 35, true) + while true do + Citizen.Wait(0) + if isCameraActive then + DisableControlAction(2, 30, true) + DisableControlAction(2, 31, true) + DisableControlAction(2, 32, true) + DisableControlAction(2, 33, true) + DisableControlAction(2, 34, true) + DisableControlAction(2, 35, true) - DisableControlAction(0, 25, true) -- Input Aim - DisableControlAction(0, 24, true) -- Input Attack + DisableControlAction(0, 25, true) -- Input Aim + DisableControlAction(0, 24, true) -- Input Attack - local playerPed = GetPlayerPed(-1) - local coords = GetEntityCoords(playerPed) + local playerPed = GetPlayerPed(-1) + local coords = GetEntityCoords(playerPed) - local angle = heading * math.pi / 180.0 - local theta = { - x = math.cos(angle), - y = math.sin(angle) - } - local pos = { - x = coords.x + (zoomOffset * theta.x), - y = coords.y + (zoomOffset * theta.y), - } + local angle = heading * math.pi / 180.0 + local theta = { + x = math.cos(angle), + y = math.sin(angle) + } + local pos = { + x = coords.x + (zoomOffset * theta.x), + y = coords.y + (zoomOffset * theta.y), + } - local angleToLook = heading - 140.0 - if angleToLook > 360 then - angleToLook = angleToLook - 360 - elseif angleToLook < 0 then - angleToLook = angleToLook + 360 - end - angleToLook = angleToLook * math.pi / 180.0 - local thetaToLook = { - x = math.cos(angleToLook), - y = math.sin(angleToLook) - } - local posToLook = { - x = coords.x + (zoomOffset * thetaToLook.x), - y = coords.y + (zoomOffset * thetaToLook.y), - } + local angleToLook = heading - 140.0 + if angleToLook > 360 then + angleToLook = angleToLook - 360 + elseif angleToLook < 0 then + angleToLook = angleToLook + 360 + end + angleToLook = angleToLook * math.pi / 180.0 + local thetaToLook = { + x = math.cos(angleToLook), + y = math.sin(angleToLook) + } + local posToLook = { + x = coords.x + (zoomOffset * thetaToLook.x), + y = coords.y + (zoomOffset * thetaToLook.y), + } - SetCamCoord(cam, pos.x, pos.y, coords.z + camOffset) - PointCamAtCoord(cam, posToLook.x, posToLook.y, coords.z + camOffset) + SetCamCoord(cam, pos.x, pos.y, coords.z + camOffset) + PointCamAtCoord(cam, posToLook.x, posToLook.y, coords.z + camOffset) - SetTextComponentFormat("STRING") - AddTextComponentString(_U('use_rotate_view')) - DisplayHelpTextFromStringLabel(0, 0, 0, -1) - end - end + SetTextComponentFormat("STRING") + AddTextComponentString(_U('use_rotate_view')) + DisplayHelpTextFromStringLabel(0, 0, 0, -1) + end + end end) Citizen.CreateThread(function() - local angle = 90 - while true do - Citizen.Wait(0) - if isCameraActive then - if IsControlPressed(0, 108) then - angle = angle - 1 - elseif IsControlPressed(0, 109) then - angle = angle + 1 - end - if angle > 360 then - angle = angle - 360 - elseif angle < 0 then - angle = angle + 360 - end - heading = angle + 0.0 - end - end + local angle = 90 + while true do + Citizen.Wait(0) + if isCameraActive then + if IsControlPressed(0, 108) then + angle = angle - 1 + elseif IsControlPressed(0, 109) then + angle = angle + 1 + end + if angle > 360 then + angle = angle - 360 + elseif angle < 0 then + angle = angle + 360 + end + heading = angle + 0.0 + end + end end) function OpenSaveableMenu(submitCb, cancelCb, restrict) - TriggerEvent('skinchanger:getSkin', function(skin) - LastSkin = skin - end) + TriggerEvent('skinchanger:getSkin', function(skin) + LastSkin = skin + end) - OpenMenu(function(data, menu) + OpenMenu(function(data, menu) - menu.close() + menu.close() - DeleteSkinCam() + DeleteSkinCam() - TriggerEvent('skinchanger:getSkin', function(skin) + TriggerEvent('skinchanger:getSkin', function(skin) - TriggerServerEvent('esx_skin:save', skin) + TriggerServerEvent('esx_skin:save', skin) - if submitCb ~= nil then - submitCb(data, menu) - end + if submitCb ~= nil then + submitCb(data, menu) + end - end) + end) - end, cancelCb, restrict) + end, cancelCb, restrict) end AddEventHandler('playerSpawned', function() - Citizen.CreateThread(function() + Citizen.CreateThread(function() - while not PlayerLoaded do - Citizen.Wait(0) - end + while not PlayerLoaded do + Citizen.Wait(0) + end - if FirstSpawn then + if FirstSpawn then - ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin) + ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin) - if skin == nil then - TriggerEvent('skinchanger:loadSkin', {sex = 0}, OpenSaveableMenu) - else - TriggerEvent('skinchanger:loadSkin', skin) - end + if skin == nil then + TriggerEvent('skinchanger:loadSkin', {sex = 0}, OpenSaveableMenu) + else + TriggerEvent('skinchanger:loadSkin', skin) + end - end) + end) - FirstSpawn = false + FirstSpawn = false - end + end - end) + end) end) RegisterNetEvent('esx:playerLoaded') AddEventHandler('esx:playerLoaded', function(xPlayer) - PlayerLoaded = true + PlayerLoaded = true end) AddEventHandler('esx_skin:getLastSkin', function(cb) - cb(LastSkin) + cb(LastSkin) end) AddEventHandler('esx_skin:setLastSkin', function(skin) - LastSkin = skin + LastSkin = skin end) RegisterNetEvent('esx_skin:openMenu') AddEventHandler('esx_skin:openMenu', function(submitCb, cancelCb) - OpenMenu(submitCb, cancelCb, nil) + OpenMenu(submitCb, cancelCb, nil) end) RegisterNetEvent('esx_skin:openRestrictedMenu') AddEventHandler('esx_skin:openRestrictedMenu', function(submitCb, cancelCb, restrict) - OpenMenu(submitCb, cancelCb, restrict) + OpenMenu(submitCb, cancelCb, restrict) end) RegisterNetEvent('esx_skin:openSaveableMenu') AddEventHandler('esx_skin:openSaveableMenu', function(submitCb, cancelCb) - OpenSaveableMenu(submitCb, cancelCb, nil) + OpenSaveableMenu(submitCb, cancelCb, nil) end) RegisterNetEvent('esx_skin:openSaveableRestrictedMenu') AddEventHandler('esx_skin:openSaveableRestrictedMenu', function(submitCb, cancelCb, restrict) - OpenSaveableMenu(submitCb, cancelCb, restrict) + OpenSaveableMenu(submitCb, cancelCb, restrict) end) RegisterNetEvent('esx_skin:requestSaveSkin') AddEventHandler('esx_skin:requestSaveSkin', function() - TriggerEvent('skinchanger:getSkin', function(skin) - TriggerServerEvent('esx_skin:responseSaveSkin', skin) - end) + TriggerEvent('skinchanger:getSkin', function(skin) + TriggerServerEvent('esx_skin:responseSaveSkin', skin) + end) end) Citizen.CreateThread(function() - while true do + while true do - Citizen.Wait(0) + Citizen.Wait(0) - local playerPed = GetPlayerPed(-1) + local playerPed = GetPlayerPed(-1) - if IsEntityDead(playerPed) then - HasLoadedModel = false - end + if IsEntityDead(playerPed) then + HasLoadedModel = false + end - end + end end) diff --git a/locales/br.lua b/locales/br.lua index f35e7998..1716b1f1 100644 --- a/locales/br.lua +++ b/locales/br.lua @@ -1,8 +1,8 @@ Locales['br'] = { - ['skin_menu'] = 'Skin Menu', - ['use_rotate_view'] = 'Use ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ e ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ para girar a visão.', - ['skin'] = 'Trocar', - ['saveskin'] = 'Salvar', + ['skin_menu'] = 'Skin Menu', + ['use_rotate_view'] = 'Use ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ e ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ para girar a visão.', + ['skin'] = 'Trocar', + ['saveskin'] = 'Salvar', } diff --git a/locales/de.lua b/locales/de.lua index ea5b6bb1..d8d43483 100644 --- a/locales/de.lua +++ b/locales/de.lua @@ -1,8 +1,8 @@ Locales['de'] = { - ['skin_menu'] = 'Skin Menü', - ['use_rotate_view'] = 'benutze ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ und ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ um die Sicht zu drehen.', - ['skin'] = 'Skin ändern', - ['saveskin'] = 'Skin speichern', + ['skin_menu'] = 'Skin Menü', + ['use_rotate_view'] = 'benutze ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ und ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ um die Sicht zu drehen.', + ['skin'] = 'Skin ändern', + ['saveskin'] = 'Skin speichern', } diff --git a/locales/en.lua b/locales/en.lua index 7609234d..99d37d86 100644 --- a/locales/en.lua +++ b/locales/en.lua @@ -1,8 +1,8 @@ Locales['en'] = { - ['skin_menu'] = 'Skin Menu', - ['use_rotate_view'] = 'use ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ and ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ to rotate the view.', - ['skin'] = 'change skin', - ['saveskin'] = 'save skin to a file', + ['skin_menu'] = 'Skin Menu', + ['use_rotate_view'] = 'use ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ and ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ to rotate the view.', + ['skin'] = 'change skin', + ['saveskin'] = 'save skin to a file', } diff --git a/locales/fr.lua b/locales/fr.lua index e20a772e..d8f1f20b 100644 --- a/locales/fr.lua +++ b/locales/fr.lua @@ -1,8 +1,8 @@ Locales['fr'] = { - ['skin_menu'] = 'Skin Menu', - ['use_rotate_view'] = 'utilisez ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ et ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ pour tourner la vue.', - ['skin'] = 'changer de skin', - ['saveskin'] = 'sauvegarder skin dans un fichier', + ['skin_menu'] = 'Skin Menu', + ['use_rotate_view'] = 'utilisez ~INPUT_VEH_FLY_ROLL_LEFT_ONLY~ et ~INPUT_VEH_FLY_ROLL_RIGHT_ONLY~ pour tourner la vue.', + ['skin'] = 'changer de skin', + ['saveskin'] = 'sauvegarder skin dans un fichier', } diff --git a/server/main.lua b/server/main.lua index 1c259e71..2299b58c 100644 --- a/server/main.lua +++ b/server/main.lua @@ -5,68 +5,68 @@ TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) RegisterServerEvent('esx_skin:save') AddEventHandler('esx_skin:save', function(skin) - local xPlayer = ESX.GetPlayerFromId(source) + local xPlayer = ESX.GetPlayerFromId(source) - MySQL.Async.execute( - 'UPDATE users SET `skin` = @skin WHERE identifier = @identifier', - { - ['@skin'] = json.encode(skin), - ['@identifier'] = xPlayer.identifier - } - ) + 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) - local file = io.open('resources/[esx]/esx_skin/skins.txt', "a") - - file:write(json.encode(skin) .. "\n\n") - file:flush() - file:close() - + local file = io.open('resources/[esx]/esx_skin/skins.txt', "a") + + file:write(json.encode(skin) .. "\n\n") + file:flush() + file:close() + end) ESX.RegisterServerCallback('esx_skin:getPlayerSkin', function(source, cb) - local xPlayer = ESX.GetPlayerFromId(source) + local xPlayer = ESX.GetPlayerFromId(source) - MySQL.Async.fetchAll( - 'SELECT * FROM users WHERE identifier = @identifier', - { - ['@identifier'] = xPlayer.identifier - }, - function(users) + MySQL.Async.fetchAll( + 'SELECT * FROM users WHERE identifier = @identifier', + { + ['@identifier'] = xPlayer.identifier + }, + function(users) - local user = users[1] - local skin = nil + local user = users[1] + local skin = nil - local jobSkin = { - skin_male = xPlayer.job.skin_male, - skin_female = xPlayer.job.skin_female - } + local jobSkin = { + skin_male = xPlayer.job.skin_male, + skin_female = xPlayer.job.skin_female + } - if user.skin ~= nil then - skin = json.decode(user.skin) - end + if user.skin ~= nil then + skin = json.decode(user.skin) + end - cb(skin, jobSkin) + cb(skin, jobSkin) - end - ) + end + ) end) -- Commands TriggerEvent('es:addGroupCommand', 'skin', 'admin', function(source, args, user) - TriggerClientEvent('esx_skin:openSaveableMenu', source) + TriggerClientEvent('esx_skin:openSaveableMenu', source) end, function(source, args, user) - TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, 'Insufficient permissions!') + TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, 'Insufficient permissions!') end, {help = _U('skin')}) TriggerEvent('es:addGroupCommand', 'saveskin', 'admin', function(source, args, user) - TriggerClientEvent('esx_skin:requestSaveSkin', source) + TriggerClientEvent('esx_skin:requestSaveSkin', source) end, function(source, args, user) - TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.") -end, {help = _U('saveskin')}) \ No newline at end of file + TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.") +end, {help = _U('saveskin')})