From 321c11c3dd450a4d8d2236254585d3eb30928a1b Mon Sep 17 00:00:00 2001 From: ElPumpo Date: Thu, 11 Oct 2018 20:25:53 +0200 Subject: [PATCH] 4 tab indent update, minor improvements --- __resource.lua | 5 +- client/main.lua | 502 +++++++++++++++++++++++------------------------- server/main.lua | 72 +++---- 3 files changed, 278 insertions(+), 301 deletions(-) diff --git a/__resource.lua b/__resource.lua index d1e36309..a45df0e0 100644 --- a/__resource.lua +++ b/__resource.lua @@ -31,4 +31,7 @@ client_scripts { 'client/main.lua' } -dependency 'es_extended' \ No newline at end of file +dependencies { + 'es_extended', + 'skinchanger' +} diff --git a/client/main.lua b/client/main.lua index 617ac477..de8bee5b 100644 --- a/client/main.lua +++ b/client/main.lua @@ -1,3 +1,15 @@ +local Keys = { + ["ESC"] = 322, ["F1"] = 288, ["F2"] = 289, ["F3"] = 170, ["F5"] = 166, ["F6"] = 167, ["F7"] = 168, ["F8"] = 169, ["F9"] = 56, ["F10"] = 57, + ["~"] = 243, ["1"] = 157, ["2"] = 158, ["3"] = 160, ["4"] = 164, ["5"] = 165, ["6"] = 159, ["7"] = 161, ["8"] = 162, ["9"] = 163, ["-"] = 84, ["="] = 83, ["BACKSPACE"] = 177, + ["TAB"] = 37, ["Q"] = 44, ["W"] = 32, ["E"] = 38, ["R"] = 45, ["T"] = 245, ["Y"] = 246, ["U"] = 303, ["P"] = 199, ["["] = 39, ["]"] = 40, ["ENTER"] = 18, + ["CAPS"] = 137, ["A"] = 34, ["S"] = 8, ["D"] = 9, ["F"] = 23, ["G"] = 47, ["H"] = 74, ["K"] = 311, ["L"] = 182, + ["LEFTSHIFT"] = 21, ["Z"] = 20, ["X"] = 73, ["C"] = 26, ["V"] = 0, ["B"] = 29, ["N"] = 249, ["M"] = 244, [","] = 82, ["."] = 81, + ["LEFTCTRL"] = 36, ["LEFTALT"] = 19, ["SPACE"] = 22, ["RIGHTCTRL"] = 70, + ["HOME"] = 213, ["PAGEUP"] = 10, ["PAGEDOWN"] = 11, ["DELETE"] = 178, + ["LEFT"] = 174, ["RIGHT"] = 175, ["TOP"] = 27, ["DOWN"] = 173, + ["NENTER"] = 201, ["N4"] = 108, ["N5"] = 60, ["N6"] = 107, ["N+"] = 96, ["N-"] = 97, ["N7"] = 117, ["N8"] = 61, ["N9"] = 118 +} + ESX = nil local FirstSpawn = true local LastSkin = nil @@ -9,345 +21,321 @@ 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 = PlayerPedId() - 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) + local elements = {} + local _components = {} - TriggerEvent('skinchanger:getData', function(components, maxVals) - - 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 - - local found = false - - 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 - - end - end - - -- Insert elements - for i=1, #_components, 1 do - - local value = _components[i].value - local componentId = _components[i].componentId - - 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' - } - - for k,v in pairs(maxVals) do - if k == _components[i].name then - data.max = v - end - end - - table.insert(elements, data) - - end - - 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) - - TriggerEvent('skinchanger:getSkin', function(skin) - LastSkin = skin - end) - - submitCb(data, menu) - DeleteSkinCam() - end, function(data, menu) - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'confirm_escape', { - title = _U('confirm_escape'), - align = 'top-left', - elements = { - {label = _U('no'), value = 'no'}, - {label = _U('yes'), value = 'yes'} - } - }, function(data2, menu2) - if data2.current.value == 'yes' then - menu.close() - DeleteSkinCam() - TriggerEvent('skinchanger:loadSkin', LastSkin) + -- Restrict menu + if restrict == nil then + for i=1, #components, 1 do + _components[i] = components[i] end - menu2.close() - end) + else + for i=1, #components, 1 do + local found = false - if cancelCb ~= nil then - cancelCb(data, menu) + 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 + end end - end,function(data, menu) - TriggerEvent('skinchanger:getSkin', function(skin) - zoomOffset = data.current.zoomOffset - camOffset = data.current.camOffset + -- Insert elements + for i=1, #_components, 1 do + local value = _components[i].value + local componentId = _components[i].componentId - if skin[data.current.name] ~= data.current.value then + if componentId == 0 then + value = GetPedPropIndex(playerPed, _components[i].componentId) + end - -- Change skin element - TriggerEvent('skinchanger:change', data.current.name, data.current.value) + 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' + } - -- Update max values - TriggerEvent('skinchanger:getData', function(components, maxVals) + for k,v in pairs(maxVals) do + if k == _components[i].name then + data.max = v + break + end + end - for i=1, #elements, 1 do + table.insert(elements, data) + end - local newData = {} + CreateSkinCam() + zoomOffset = _components[1].zoomOffset + camOffset = _components[1].camOffset - newData.max = maxVals[elements[i].name] + ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'skin', { + title = _U('skin_menu'), + align = 'top-left', + elements = elements + }, function(data, menu) - if elements[i].textureof ~= nil and data.current.name == elements[i].textureof then - newData.value = 0 - end + TriggerEvent('skinchanger:getSkin', function(skin) + LastSkin = skin + end) - menu.update({name = elements[i].name}, newData) + submitCb(data, menu) + DeleteSkinCam() + end, function(data, menu) + ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'confirm_escape', { + title = _U('confirm_escape'), + align = 'top-left', + elements = { + {label = _U('no'), value = 'no'}, + {label = _U('yes'), value = 'yes'} + } + }, function(data2, menu2) + if data2.current.value == 'yes' then + menu.close() + DeleteSkinCam() + TriggerEvent('skinchanger:loadSkin', LastSkin) + end - end + menu2.close() + end) - menu.refresh() + if cancelCb ~= nil then + cancelCb(data, menu) + end + end, function(data, menu) + TriggerEvent('skinchanger:getSkin', function(skin) + zoomOffset = data.current.zoomOffset + camOffset = data.current.camOffset - end) + if skin[data.current.name] ~= data.current.value then + -- Change skin element + TriggerEvent('skinchanger:change', data.current.name, data.current.value) - end + -- Update max values + TriggerEvent('skinchanger:getData', function(components, maxVals) + for i=1, #elements, 1 do + local newData = {} - end) + newData.max = maxVals[elements[i].name] - end, - function() - DeleteSkinCam() - end - ) + 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) + end + menu.refresh() + end) + end + end) + end, function(data, menu) + 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) - DisableControlAction(0, 25, true) -- Input Aim - DisableControlAction(0, 24, true) -- Input Attack + 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 - local playerPed = GetPlayerPed(-1) - local coords = GetEntityCoords(playerPed) + local playerPed = PlayerPedId() + 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 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 pos = { + x = coords.x + (zoomOffset * theta.x), + y = coords.y + (zoomOffset * theta.y) + } - SetCamCoord(cam, pos.x, pos.y, coords.z + camOffset) - PointCamAtCoord(cam, posToLook.x, posToLook.y, coords.z + camOffset) + local angleToLook = heading - 140.0 + if angleToLook > 360 then + angleToLook = angleToLook - 360 + elseif angleToLook < 0 then + angleToLook = angleToLook + 360 + end - SetTextComponentFormat("STRING") - AddTextComponentString(_U('use_rotate_view')) - DisplayHelpTextFromStringLabel(0, 0, 0, -1) - end - 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) + + ESX.ShowHelpNotification(_U('use_rotate_view')) + else + Citizen.Wait(500) + 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, Keys['N4']) 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 + else + Citizen.Wait(500) + 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) + menu.close() + DeleteSkinCam() - OpenMenu(function(data, menu) - - menu.close() - - DeleteSkinCam() - - TriggerEvent('skinchanger:getSkin', function(skin) - - TriggerServerEvent('esx_skin:save', skin) - - if submitCb ~= nil then - submitCb(data, menu) - end - - end) - - end, cancelCb, restrict) + TriggerEvent('skinchanger:getSkin', function(skin) + TriggerServerEvent('esx_skin:save', skin) + if submitCb ~= nil then + submitCb(data, menu) + end + end) + end, cancelCb, restrict) end AddEventHandler('playerSpawned', function() + Citizen.CreateThread(function() + while not PlayerLoaded do + Citizen.Wait(10) + end - Citizen.CreateThread(function() - - while not PlayerLoaded do - Citizen.Wait(0) - end - - if FirstSpawn then - - ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin) - - if skin == nil then - TriggerEvent('skinchanger:loadSkin', {sex = 0}, OpenSaveableMenu) - else - TriggerEvent('skinchanger:loadSkin', skin) - end - - end) - - FirstSpawn = false - - end - - end) + if FirstSpawn then + ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin) + if skin == nil then + TriggerEvent('skinchanger:loadSkin', {sex = 0}, OpenSaveableMenu) + else + TriggerEvent('skinchanger:loadSkin', skin) + end + end) + FirstSpawn = false + 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) -end) \ No newline at end of file + TriggerEvent('skinchanger:getSkin', function(skin) + TriggerServerEvent('esx_skin:responseSaveSkin', skin) + end) +end) diff --git a/server/main.lua b/server/main.lua index 2528f460..5a9ff59c 100644 --- a/server/main.lua +++ b/server/main.lua @@ -4,69 +4,55 @@ 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") - local file = io.open('resources/[esx]/esx_skin/skins.txt', "a") - - file:write(json.encode(skin) .. "\n\n") - file:flush() - file:close() - + 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) + local user = users[1] + local skin = nil - MySQL.Async.fetchAll( - 'SELECT * FROM users WHERE identifier = @identifier', - { - ['@identifier'] = xPlayer.identifier - }, - function(users) + local jobSkin = { + skin_male = xPlayer.job.skin_male, + skin_female = xPlayer.job.skin_female + } - local user = users[1] - local skin = nil - - 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 - - cb(skin, jobSkin) - - end - ) + if user.skin ~= nil 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) + TriggerClientEvent('esx_skin:openSaveableMenu', source) end, function(source, args, user) - TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, 'Insufficient permissions!') + 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) + TriggerClientEvent('esx_skin:requestSaveSkin', source) end, function(source, args, user) - TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.") + TriggerClientEvent('chat:addMessage', source, { args = { '^1SYSTEM', 'Insufficient Permissions.' } }) end, {help = _U('saveskin')})