Merge branch 'dev' into dev

This commit is contained in:
thesysadmindev
2023-06-30 09:15:49 +10:00
committed by GitHub
91 changed files with 2347 additions and 2284 deletions
+3 -1
View File
@@ -3,7 +3,9 @@ name: Bug report
about: Create a report to help us improve
title: "[Bug] - esx_script - Issue"
labels: bug
assignees: Benzo00
assignees:
- TheFantomas
- Gellipapa
---
+3 -1
View File
@@ -3,7 +3,9 @@ name: Feature Request
about: Help us improve esx with your ideas
title: "[Feature Request] - esx_script - Add better configuration"
labels: enhancement
assignees: Benzo00
assignees:
- TheFantomas
- Gellipapa
---
+4 -4
View File
@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
@@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+1 -1
View File
@@ -4,6 +4,6 @@ game 'gta5'
author 'ESX-Framework'
description 'cron'
lua54 'yes'
version '1.9.4'
version '1.9.5'
server_script 'server/main.lua'
+1 -2
View File
@@ -15,11 +15,10 @@ function GetTime()
local h = tonumber(os.date('%H', timestamp))
local m = tonumber(os.date('%M', timestamp))
return {d = d, h = h, m = m}
return { d = d, h = h, m = m }
end
function OnTime(d, h, m)
for i = 1, #Jobs, 1 do
if Jobs[i].h == h and Jobs[i].m == m then
Jobs[i].cb(d, h, m)
+48 -54
View File
@@ -26,7 +26,7 @@ end
function ESX.SearchInventory(items, count)
if type(items) == 'string' then
items = {items}
items = { items }
end
local returnData = {}
@@ -154,7 +154,7 @@ if GetResourceState("esx_context") ~= "missing" then
end
function ESX.RefreshContext(...)
exports["esx_context"]:Refresh(...)
exports["esx_context"]:Refresh(...)
end
else
function ESX.OpenContext()
@@ -203,7 +203,6 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
menu.change = change
menu.close = function()
ESX.UI.Menu.RegisteredTypes[type].close(namespace, name)
for i = 1, #ESX.UI.Menu.Opened, 1 do
@@ -218,11 +217,9 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
if close then
close()
end
end
menu.update = function(query, newData)
for i = 1, #menu.data.elements, 1 do
local match = true
@@ -238,7 +235,6 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
end
end
end
end
menu.refresh = function()
@@ -266,7 +262,6 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
break
end
end
end
end
end
@@ -496,7 +491,6 @@ function ESX.Game.GetPlayers(onlyOtherPlayers, returnKeyValue, returnPeds)
return players
end
function ESX.Game.GetClosestObject(coords, modelFilter)
return ESX.Game.GetClosestEntity(ESX.Game.GetObjects(), false, coords, modelFilter)
end
@@ -604,19 +598,19 @@ function ESX.Game.GetVehicleProperties(vehicle)
local interiorColor = GetVehicleInteriorColour(vehicle)
local customPrimaryColor = nil
if hasCustomPrimaryColor then
customPrimaryColor = {GetVehicleCustomPrimaryColour(vehicle)}
customPrimaryColor = { GetVehicleCustomPrimaryColour(vehicle) }
end
local hasCustomXenonColor, customXenonColorR, customXenonColorG, customXenonColorB = GetVehicleXenonLightsCustomColor(vehicle)
local customXenonColor = nil
if hasCustomXenonColor then
customXenonColor = {customXenonColorR, customXenonColorG, customXenonColorB}
customXenonColor = { customXenonColorR, customXenonColorG, customXenonColorB }
end
local hasCustomSecondaryColor = GetIsVehicleSecondaryColourCustom(vehicle)
local customSecondaryColor = nil
if hasCustomSecondaryColor then
customSecondaryColor = {GetVehicleCustomSecondaryColour(vehicle)}
customSecondaryColor = { GetVehicleCustomSecondaryColour(vehicle) }
end
local extras = {}
@@ -634,11 +628,11 @@ function ESX.Game.GetVehicleProperties(vehicle)
local doorsBroken, windowsBroken, tyreBurst = {}, {}, {}
local numWheels = tostring(GetVehicleNumberOfWheels(vehicle))
local TyresIndex = { -- Wheel index list according to the number of vehicle wheels.
['2'] = {0, 4}, -- Bike and cycle.
['3'] = {0, 1, 4, 5}, -- Vehicle with 3 wheels (get for wheels because some 3 wheels vehicles have 2 wheels on front and one rear or the reverse).
['4'] = {0, 1, 4, 5}, -- Vehicle with 4 wheels.
['6'] = {0, 1, 2, 3, 4, 5} -- Vehicle with 6 wheels.
local TyresIndex = { -- Wheel index list according to the number of vehicle wheels.
['2'] = { 0, 4 }, -- Bike and cycle.
['3'] = { 0, 1, 4, 5 }, -- Vehicle with 3 wheels (get for wheels because some 3 wheels vehicles have 2 wheels on front and one rear or the reverse).
['4'] = { 0, 1, 4, 5 }, -- Vehicle with 4 wheels.
['6'] = { 0, 1, 2, 3, 4, 5 } -- Vehicle with 6 wheels.
}
if TyresIndex[numWheels] then
@@ -688,8 +682,8 @@ function ESX.Game.GetVehicleProperties(vehicle)
xenonColor = GetVehicleXenonLightsColor(vehicle),
customXenonColor = customXenonColor,
neonEnabled = {IsVehicleNeonLightEnabled(vehicle, 0), IsVehicleNeonLightEnabled(vehicle, 1),
IsVehicleNeonLightEnabled(vehicle, 2), IsVehicleNeonLightEnabled(vehicle, 3)},
neonEnabled = { IsVehicleNeonLightEnabled(vehicle, 0), IsVehicleNeonLightEnabled(vehicle, 1),
IsVehicleNeonLightEnabled(vehicle, 2), IsVehicleNeonLightEnabled(vehicle, 3) },
neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
extras = extras,
@@ -720,7 +714,7 @@ function ESX.Game.GetVehicleProperties(vehicle)
modXenon = IsToggleModOn(vehicle, 22),
modFrontWheels = GetVehicleMod(vehicle, 23),
modCustomFrontWheels = GetVehicleModVariation(vehicle, 23),
modCustomFrontWheels = GetVehicleModVariation(vehicle, 23),
modBackWheels = GetVehicleMod(vehicle, 24),
modCustomBackWheels = GetVehicleModVariation(vehicle, 24),
@@ -909,7 +903,7 @@ function ESX.Game.SetVehicleProperties(vehicle, props)
if props.modFrontWheels ~= nil then
SetVehicleMod(vehicle, 23, props.modFrontWheels, false)
end
if props.modCustomFrontWheels ~= nil then
if props.modCustomFrontWheels ~= nil then
SetVehicleMod(vehicle, 23, props.modCustomFrontWheels, false)
end
if props.modBackWheels ~= nil then
@@ -1062,7 +1056,7 @@ function ESX.ShowInventory()
local playerPed = ESX.PlayerData.ped
local elements = {
{unselectable = true, icon = 'fas fa-box', title = 'Player Inventory'}
{ unselectable = true, icon = 'fas fa-box', title = 'Player Inventory' }
}
local currentWeight = 0
@@ -1071,7 +1065,7 @@ function ESX.ShowInventory()
local formattedMoney = TranslateCap('locale_currency', ESX.Math.GroupDigits(ESX.PlayerData.accounts[i].money))
local canDrop = ESX.PlayerData.accounts[i].name ~= 'bank'
elements[#elements+1] = {
elements[#elements + 1] = {
icon = 'fas fa-money-bill-wave',
title = ('%s: <span style="color:green;">%s</span>'):format(ESX.PlayerData.accounts[i].label, formattedMoney),
count = ESX.PlayerData.accounts[i].money,
@@ -1088,7 +1082,7 @@ function ESX.ShowInventory()
if v.count > 0 then
currentWeight = currentWeight + (v.weight * v.count)
elements[#elements+1] = {
elements[#elements + 1] = {
icon = 'fas fa-box',
title = ('%s x%s'):format(v.label, v.count),
count = v.count,
@@ -1107,7 +1101,7 @@ function ESX.ShowInventory()
if HasPedGotWeapon(playerPed, weaponHash, false) then
local ammo = GetAmmoInPedWeapon(playerPed, weaponHash)
elements[#elements+1] = {
elements[#elements + 1] = {
icon = 'fas fa-gun',
title = v.ammo and ('%s - %s %s'):format(v.label, ammo, v.ammo.label) or v.label,
count = 1,
@@ -1122,10 +1116,10 @@ function ESX.ShowInventory()
end
end
elements[#elements+1] = {
elements[#elements + 1] = {
unselectable = true,
icon = "fas fa-weight",
title = "Current Weight: "..currentWeight
title = "Current Weight: " .. currentWeight
}
ESX.CloseContext()
@@ -1136,7 +1130,7 @@ function ESX.ShowInventory()
local elements2 = {}
if element.usable then
elements2[#elements2+1] = {
elements2[#elements2 + 1] = {
icon = "fas fa-utensils",
title = TranslateCap('use'),
action = 'use',
@@ -1147,7 +1141,7 @@ function ESX.ShowInventory()
if element.canRemove then
if player ~= -1 and distance <= 3.0 then
elements2[#elements2+1] = {
elements2[#elements2 + 1] = {
icon = "fas fa-hands",
title = TranslateCap('give'),
action = 'give',
@@ -1156,7 +1150,7 @@ function ESX.ShowInventory()
}
end
elements2[#elements2+1] = {
elements2[#elements2 + 1] = {
icon = "fas fa-trash",
title = TranslateCap('remove'),
action = 'remove',
@@ -1166,7 +1160,7 @@ function ESX.ShowInventory()
end
if element.type == 'item_weapon' and element.canGiveAmmo and element.ammo > 0 and player ~= -1 and distance <= 3.0 then
elements2[#elements2+1] = {
elements2[#elements2 + 1] = {
icon = "fas fa-gun",
title = TranslateCap('giveammo'),
action = 'give_ammo',
@@ -1175,7 +1169,7 @@ function ESX.ShowInventory()
}
end
elements2[#elements2+1] = {
elements2[#elements2 + 1] = {
icon = "fas fa-arrow-left",
title = TranslateCap('return'),
action = 'return'
@@ -1190,7 +1184,7 @@ function ESX.ShowInventory()
if #playersNearby > 0 then
local players = {}
local elements3 = {
{unselectable = true, icon = "fas fa-users", title = "Nearby Players"}
{ unselectable = true, icon = "fas fa-users", title = "Nearby Players" }
}
for _, playerNearby in ipairs(playersNearby) do
@@ -1199,7 +1193,7 @@ function ESX.ShowInventory()
ESX.TriggerServerCallback('esx:getPlayerNames', function(returnedPlayers)
for playerId, playerName in pairs(returnedPlayers) do
elements3[#elements3+1] = {
elements3[#elements3 + 1] = {
icon = "fas fa-user",
title = playerName,
playerId = playerId
@@ -1220,9 +1214,9 @@ function ESX.ShowInventory()
ESX.CloseContext()
else
local elementsG = {
{unselectable = true, icon = "fas fa-trash", title = element.title},
{icon = "fas fa-tally", title = "Amount.", input = true, inputType = "number", inputPlaceholder = "Amount to give..", inputMin = 1, inputMax = 1000},
{icon = "fas fa-check-double", title = "Confirm", val = "confirm"}
{ unselectable = true, icon = "fas fa-trash", title = element.title },
{ icon = "fas fa-tally", title = "Amount.", input = true, inputType = "number", inputPlaceholder = "Amount to give..", inputMin = 1, inputMax = 1000 },
{ icon = "fas fa-check-double", title = "Confirm", val = "confirm" }
}
ESX.OpenContext("right", elementsG, function(menuG)
@@ -1259,9 +1253,9 @@ function ESX.ShowInventory()
TriggerServerEvent('esx:removeInventoryItem', type, item)
else
local elementsR = {
{unselectable = true, icon = "fas fa-trash", title = element.title},
{icon = "fas fa-tally", title = "Amount.", input = true, inputType = "number", inputPlaceholder = "Amount to remove..", inputMin = 1, inputMax = 1000},
{icon = "fas fa-check-double", title = "Confirm", val = "confirm"}
{ unselectable = true, icon = "fas fa-trash", title = element.title },
{ icon = "fas fa-tally", title = "Amount.", input = true, inputType = "number", inputPlaceholder = "Amount to remove..", inputMin = 1, inputMax = 1000 },
{ icon = "fas fa-check-double", title = "Confirm", val = "confirm" }
}
ESX.OpenContext("right", elementsR, function(menuR)
@@ -1294,9 +1288,9 @@ function ESX.ShowInventory()
if closestPlayer ~= -1 and closestDistance < 3.0 then
if pedAmmo > 0 then
local elementsGA = {
{unselectable = true, icon = "fas fa-trash", title = element.title},
{icon = "fas fa-tally", title = "Amount.", input = true, inputType = "number", inputPlaceholder = "Amount to give..", inputMin = 1, inputMax = 1000},
{icon = "fas fa-check-double", title = "Confirm", val = "confirm"}
{ unselectable = true, icon = "fas fa-trash", title = element.title },
{ icon = "fas fa-tally", title = "Amount.", input = true, inputType = "number", inputPlaceholder = "Amount to give..", inputMin = 1, inputMax = 1000 },
{ icon = "fas fa-check-double", title = "Confirm", val = "confirm" }
}
ESX.OpenContext("right", elementsGA, function(menuGA)
@@ -1348,20 +1342,20 @@ end)
function ESX.GetVehicleType(model)
model = type(model) == 'string' and joaat(model) or model
if model == `submersible` or model == `submersible2` then
if model == `submersible` or model == `submersible2` then
return 'submarine'
end
end
local vehicleType = GetVehicleClassFromName(model)
local types = {
[8] = "bike",
[11] = "trailer",
[13] = "bike",
[14] = "boat",
[15] = "heli",
[16] = "plane",
[21] = "train",
}
local vehicleType = GetVehicleClassFromName(model)
local types = {
[8] = "bike",
[11] = "trailer",
[13] = "bike",
[14] = "boat",
[15] = "heli",
[16] = "plane",
[21] = "train",
}
return types[vehicleType] or "automobile"
end
+21 -22
View File
@@ -3,7 +3,7 @@ local pickups = {}
CreateThread(function()
while not Config.Multichar do
Wait(100)
if NetworkIsPlayerActive(PlayerId()) then
exports.spawnmanager:setAutoSpawn(false)
DoScreenFadeOut(0)
@@ -101,7 +101,7 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin)
SetPlayerLockonRangeOverride(playerId, 2.0)
end
end
if Config.DisableVehicleRewards then
DisablePlayerVehicleRewards(playerId)
end
@@ -173,7 +173,7 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin)
'WORLD_VEHICLE_DISTANT_EMPTY_GROUND',
'WORLD_HUMAN_PAPARAZZI'
}
for _, v in pairs(scenarios) do
SetScenarioTypeEnabled(v, false)
end
@@ -246,25 +246,25 @@ AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, _, value)
return
end
local netId = bagName:gsub('entity:', '')
local timer = GetGameTimer()
while not NetworkDoesEntityExistWithNetworkId(tonumber(netId)) do
Wait(0)
if GetGameTimer() - timer > 10000 then
return
end
end
local netId = bagName:gsub('entity:', '')
local timer = GetGameTimer()
while not NetworkDoesEntityExistWithNetworkId(tonumber(netId)) do
Wait(0)
if GetGameTimer() - timer > 10000 then
return
end
end
local vehicle = NetToVeh(tonumber(netId))
local timer2 = GetGameTimer()
while NetworkGetEntityOwner(vehicle) ~= PlayerId() do
Wait(0)
if GetGameTimer() - timer2 > 10000 then
return
end
end
local vehicle = NetToVeh(tonumber(netId))
local timer2 = GetGameTimer()
while NetworkGetEntityOwner(vehicle) ~= PlayerId() do
Wait(0)
if GetGameTimer() - timer2 > 10000 then
return
end
end
ESX.Game.SetVehicleProperties(vehicle, value)
ESX.Game.SetVehicleProperties(vehicle, value)
end)
RegisterNetEvent('esx:setAccountMoney')
@@ -332,7 +332,6 @@ if not Config.OxInventory then
RegisterNetEvent('esx:setWeaponTint')
AddEventHandler('esx:setWeaponTint', function(weapon, weaponTintIndex)
SetPedWeaponTintIndex(ESX.PlayerData.ped, joaat(weapon), weaponTintIndex)
end)
RegisterNetEvent('esx:removeWeapon')
@@ -392,7 +391,7 @@ if not Config.OxInventory then
AddEventHandler('esx:createMissingPickups', function(missingPickups)
for pickupId, pickup in pairs(missingPickups) do
TriggerEvent('esx:createPickup', pickupId, pickup.label, pickup.coords - vector3(0, 0, 1.0), pickup.type, pickup.name
, pickup.components, pickup.tintIndex)
, pickup.components, pickup.tintIndex)
end
end)
end
@@ -21,7 +21,6 @@ end
CreateThread(function()
while true do
if playerPed ~= PlayerPedId() then
playerPed = PlayerPedId()
ESX.SetPlayerData('ped', playerPed)
@@ -37,7 +36,7 @@ CreateThread(function()
isJumping = false
end
if IsPauseMenuActive() and not inPauseMenu then
if IsPauseMenuActive() and not inPauseMenu then
inPauseMenu = true
TriggerEvent('esx:pauseMenuActive', inPauseMenu)
elseif not IsPauseMenuActive() and inPauseMenu then
@@ -87,7 +86,6 @@ CreateThread(function()
end)
if Config.EnableDebug then
AddEventHandler('esx:playerPedChanged', function(netId)
print('esx:playerPedChanged', netId)
end)
@@ -111,5 +109,4 @@ if Config.EnableDebug then
AddEventHandler('esx:exitedVehicle', function(vehicle, plate, seat, displayName, netId)
print('esx:exitedVehicle', 'vehicle', vehicle, 'plate', plate, 'seat', seat, 'displayName', displayName, 'netId', netId)
end)
end
@@ -8,7 +8,7 @@ local clientCallbacks = {}
---@param ... any
ESX.TriggerServerCallback = function(eventName, callback, ...)
serverRequests[RequestId] = callback
TriggerServerEvent('esx:triggerServerCallback', eventName, RequestId, GetInvokingResource() or "unknown", ...)
RequestId = RequestId + 1
+4 -4
View File
@@ -4,7 +4,7 @@ AddEventHandler('gameEventTriggered', function(event, data)
if not IsPedAPlayer(victim) then return end
local player = PlayerId()
local playerPed = PlayerPedId()
if victimDied and NetworkGetPlayerIndexFromPed(victim) == player and (IsPedDeadOrDying(victim, true) or IsPedFatallyInjured(victim)) then
if victimDied and NetworkGetPlayerIndexFromPed(victim) == player and (IsPedDeadOrDying(victim, true) or IsPedFatallyInjured(victim)) then
local killerEntity, deathCause = GetPedSourceOfDeath(playerPed), GetPedCauseOfDeath(playerPed)
local killerClientId = NetworkGetPlayerIndexFromPed(killerEntity)
if killerEntity ~= playerPed and killerClientId and NetworkIsPlayerActive(killerClientId) then
@@ -21,8 +21,8 @@ function PlayerKilledByPlayer(killerServerId, killerClientId, deathCause)
local distance = #(victimCoords - killerCoords)
local data = {
victimCoords = {x = ESX.Math.Round(victimCoords.x, 1), y = ESX.Math.Round(victimCoords.y, 1), z = ESX.Math.Round(victimCoords.z, 1)},
killerCoords = {x = ESX.Math.Round(killerCoords.x, 1), y = ESX.Math.Round(killerCoords.y, 1), z = ESX.Math.Round(killerCoords.z, 1)},
victimCoords = { x = ESX.Math.Round(victimCoords.x, 1), y = ESX.Math.Round(victimCoords.y, 1), z = ESX.Math.Round(victimCoords.z, 1) },
killerCoords = { x = ESX.Math.Round(killerCoords.x, 1), y = ESX.Math.Round(killerCoords.y, 1), z = ESX.Math.Round(killerCoords.z, 1) },
killedByPlayer = true,
deathCause = deathCause,
@@ -41,7 +41,7 @@ function PlayerKilled(deathCause)
local victimCoords = GetEntityCoords(playerPed)
local data = {
victimCoords = {x = ESX.Math.Round(victimCoords.x, 1), y = ESX.Math.Round(victimCoords.y, 1), z = ESX.Math.Round(victimCoords.z, 1)},
victimCoords = { x = ESX.Math.Round(victimCoords.x, 1), y = ESX.Math.Round(victimCoords.y, 1), z = ESX.Math.Round(victimCoords.z, 1) },
killedByPlayer = false,
deathCause = deathCause
+1 -1
View File
@@ -15,7 +15,7 @@ AddEventHandler('onClientResourceStart', function(resource)
if resource ~= 'npwd' then
return
end
npwd = GetResourceState('npwd'):find('start') and exports.npwd or nil
if ESX.PlayerLoaded then
+4 -4
View File
@@ -1,7 +1,7 @@
local Charset = {}
for i = 48, 57 do table.insert(Charset, string.char(i)) end
for i = 65, 90 do table.insert(Charset, string.char(i)) end
for i = 48, 57 do table.insert(Charset, string.char(i)) end
for i = 65, 90 do table.insert(Charset, string.char(i)) end
for i = 97, 122 do table.insert(Charset, string.char(i)) end
local weaponsByName = {}
@@ -78,11 +78,11 @@ function ESX.DumpTable(table, nb)
s = '{\n'
for k, v in pairs(table) do
if type(k) ~= 'number' then k = '"'..k..'"' end
if type(k) ~= 'number' then k = '"' .. k .. '"' end
for _ = 1, nb, 1 do
s = s .. " "
end
s = s .. '['..k..'] = ' .. ESX.DumpTable(v, nb + 1) .. ',\n'
s = s .. '[' .. k .. '] = ' .. ESX.DumpTable(v, nb + 1) .. ',\n'
end
for _ = 1, nb, 1 do
+4 -4
View File
@@ -2,7 +2,7 @@ ESX.Math = {}
function ESX.Math.Round(value, numDecimalPlaces)
if numDecimalPlaces then
local power = 10^numDecimalPlaces
local power = 10 ^ numDecimalPlaces
return math.floor((value * power) + 0.5) / (power)
else
return math.floor(value + 0.5)
@@ -11,9 +11,9 @@ end
-- credit http://richard.warburton.it
function ESX.Math.GroupDigits(value)
local left,num,right = string.match(value,'^([^%d]*%d)(%d*)(.-)$')
local left, num, right = string.match(value, '^([^%d]*%d)(%d*)(.-)$')
return left..(num:reverse():gsub('(%d%d%d)','%1' .. TranslateCap('locale_digit_grouping_symbol')):reverse())..right
return left .. (num:reverse():gsub('(%d%d%d)', '%1' .. TranslateCap('locale_digit_grouping_symbol')):reverse()) .. right
end
function ESX.Math.Trim(value)
@@ -22,4 +22,4 @@ function ESX.Math.Trim(value)
else
return nil
end
end
end
+20 -20
View File
@@ -4,7 +4,7 @@ ESX.Table = {}
function ESX.Table.SizeOf(t)
local count = 0
for _,_ in pairs(t) do
for _, _ in pairs(t) do
count = count + 1
end
@@ -28,7 +28,7 @@ function ESX.Table.IndexOf(t, value)
end
function ESX.Table.LastIndexOf(t, value)
for i=#t, 1, -1 do
for i = #t, 1, -1 do
if t[i] == value then
return i
end
@@ -82,7 +82,7 @@ end
function ESX.Table.Reverse(t)
local newTable = {}
for i=#t, 1, -1 do
for i = #t, 1, -1 do
table.insert(newTable, t[i])
end
@@ -134,21 +134,21 @@ end
-- Credits: https://github.com/JonasDev99/qb-garages/blob/b0335d67cb72a6b9ac60f62a87fb3946f5c2f33d/server/main.lua#L5
function ESX.Table.TableContains(tab, val)
if type(val) == "table" then
for _, value in pairs(tab) do
if ESX.Table.TableContains(val, value) then
return true
end
end
return false
else
for _, value in pairs(tab) do
if value == val then
return true
end
end
end
return false
if type(val) == "table" then
for _, value in pairs(tab) do
if ESX.Table.TableContains(val, value) then
return true
end
end
return false
else
for _, value in pairs(tab) do
if value == val then
return true
end
end
end
return false
end
-- Credit: https://stackoverflow.com/a/15706820
@@ -157,14 +157,14 @@ function ESX.Table.Sort(t, order)
-- collect the keys
local keys = {}
for k,_ in pairs(t) do
for k, _ in pairs(t) do
keys[#keys + 1] = k
end
-- if order function given, sort by it by passing the table and keys a, b,
-- otherwise just sort the keys
if order then
table.sort(keys, function(a,b)
table.sort(keys, function(a, b)
return order(t, a, b)
end)
else
@@ -6,8 +6,8 @@ ESX.SetTimeout = function(msec, cb)
SetTimeout(msec, function()
if CancelledTimeouts[id] then
CancelledTimeouts[id] = nil
return
CancelledTimeouts[id] = nil
return
end
cb()
@@ -20,4 +20,4 @@ end
ESX.ClearTimeout = function(id)
CancelledTimeouts[id] = true
end
end
+55 -55
View File
@@ -1,7 +1,7 @@
Config = {}
Config.Locale = GetConvar('esx:locale', 'en')
Config = {}
Config.Locale = GetConvar('esx:locale', 'en')
Config.Accounts = {
Config.Accounts = {
bank = {
label = TranslateCap('account_bank'),
round = true
@@ -16,15 +16,15 @@ Config.Accounts = {
}
}
Config.StartingAccountMoney = {bank = 50000}
Config.StartingAccountMoney = { bank = 50000 }
Config.DefaultSpawns = { -- If you want to have more spawn positions and select them randomly uncomment commented code or add more locations
{x = 222.2027, y = -864.0162, z = 30.2922, heading = 1.0},
--{x = 224.9865, y = -865.0871, z = 30.2922, heading = 1.0},
--{x = 227.8436, y = -866.0400, z = 30.2922, heading = 1.0},
--{x = 230.6051, y = -867.1450, z = 30.2922, heading = 1.0},
--{x = 233.5459, y = -868.2626, z = 30.2922, heading = 1.0}
{ x = 222.2027, y = -864.0162, z = 30.2922, heading = 1.0 },
--{x = 224.9865, y = -865.0871, z = 30.2922, heading = 1.0},
--{x = 227.8436, y = -866.0400, z = 30.2922, heading = 1.0},
--{x = 230.6051, y = -867.1450, z = 30.2922, heading = 1.0},
--{x = 233.5459, y = -868.2626, z = 30.2922, heading = 1.0}
}
Config.AdminGroups = {
@@ -33,57 +33,57 @@ Config.AdminGroups = {
}
Config.EnablePaycheck = true -- enable paycheck
Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via webhook (default is false)
Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
Config.MaxWeight = 24 -- the max inventory weight without backpack
Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds
Config.EnableDebug = false -- Use Debug options?
Config.EnableDefaultInventory = true -- Display the default Inventory ( F2 )
Config.EnableWantedLevel = false -- Use Normal GTA wanted Level?
Config.EnablePVP = true -- Allow Player to player combat
Config.EnablePaycheck = true -- enable paycheck
Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via webhook (default is false)
Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
Config.MaxWeight = 24 -- the max inventory weight without backpack
Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds
Config.EnableDebug = false -- Use Debug options?
Config.EnableDefaultInventory = true -- Display the default Inventory ( F2 )
Config.EnableWantedLevel = false -- Use Normal GTA wanted Level?
Config.EnablePVP = true -- Allow Player to player combat
Config.Multichar = GetResourceState("esx_multicharacter") ~= "missing"
Config.Identity = true -- Select a characters identity data before they have loaded in (this happens by default with multichar)
Config.DistanceGive = 4.0 -- Max distance when giving items, weapons etc.
Config.Multichar = GetResourceState("esx_multicharacter") ~= "missing"
Config.Identity = true -- Select a characters identity data before they have loaded in (this happens by default with multichar)
Config.DistanceGive = 4.0 -- Max distance when giving items, weapons etc.
Config.AdminLogging = false -- Logs the usage of certain commands by those with group.admin ace permissions (default is false)
Config.AdminLogging = false -- Logs the usage of certain commands by those with group.admin ace permissions (default is false)
Config.DisableHealthRegeneration = false -- Player will no longer regenerate health
Config.DisableVehicleRewards = false -- Disables Player Recieving weapons from vehicles
Config.DisableNPCDrops = false -- stops NPCs from dropping weapons on death
Config.DisableDispatchServices = false -- Disable Dispatch services
Config.DisableScenarios = false -- Disable Scenarios
Config.DisableWeaponWheel = false -- Disables default weapon wheel
Config.DisableAimAssist = false -- disables AIM assist (mainly on controllers)
Config.DisableVehicleSeatShuff = false -- Disables vehicle seat shuff
Config.RemoveHudCommonents = {
[1] = false, --WANTED_STARS,
[2] = false, --WEAPON_ICON
[3] = false, --CASH
[4] = false, --MP_CASH
[5] = false, --MP_MESSAGE
[6] = false, --VEHICLE_NAME
[7] = false,-- AREA_NAME
[8] = false,-- VEHICLE_CLASS
[9] = false, --STREET_NAME
[10] = false, --HELP_TEXT
[11] = false, --FLOATING_HELP_TEXT_1
[12] = false, --FLOATING_HELP_TEXT_2
[13] = false, --CASH_CHANGE
[14] = false, --RETICLE
[15] = false, --SUBTITLE_TEXT
[16] = false, --RADIO_STATIONS
[17] = false, --SAVING_GAME,
[18] = false, --GAME_STREAM
[19] = false, --WEAPON_WHEEL
[20] = false, --WEAPON_WHEEL_STATS
[21] = false, --HUD_COMPONENTS
[22] = false, --HUD_WEAPONS
Config.DisableHealthRegeneration = false -- Player will no longer regenerate health
Config.DisableVehicleRewards = false -- Disables Player Recieving weapons from vehicles
Config.DisableNPCDrops = false -- stops NPCs from dropping weapons on death
Config.DisableDispatchServices = false -- Disable Dispatch services
Config.DisableScenarios = false -- Disable Scenarios
Config.DisableWeaponWheel = false -- Disables default weapon wheel
Config.DisableAimAssist = false -- disables AIM assist (mainly on controllers)
Config.DisableVehicleSeatShuff = false -- Disables vehicle seat shuff
Config.RemoveHudCommonents = {
[1] = false, --WANTED_STARS,
[2] = false, --WEAPON_ICON
[3] = false, --CASH
[4] = false, --MP_CASH
[5] = false, --MP_MESSAGE
[6] = false, --VEHICLE_NAME
[7] = false, -- AREA_NAME
[8] = false, -- VEHICLE_CLASS
[9] = false, --STREET_NAME
[10] = false, --HELP_TEXT
[11] = false, --FLOATING_HELP_TEXT_1
[12] = false, --FLOATING_HELP_TEXT_2
[13] = false, --CASH_CHANGE
[14] = false, --RETICLE
[15] = false, --SUBTITLE_TEXT
[16] = false, --RADIO_STATIONS
[17] = false, --SAVING_GAME,
[18] = false, --GAME_STREAM
[19] = false, --WEAPON_WHEEL
[20] = false, --WEAPON_WHEEL_STATS
[21] = false, --HUD_COMPONENTS
[22] = false, --HUD_WEAPONS
}
Config.SpawnVehMaxUpgrades = true -- admin vehicles spawn with max vehcle settings
Config.CustomAIPlates = 'ESX.A111' -- Custom plates for AI vehicles
Config.SpawnVehMaxUpgrades = true -- admin vehicles spawn with max vehcle settings
Config.CustomAIPlates = '........' -- Custom plates for AI vehicles
-- Pattern string format
--1 will lead to a random number from 0-9.
--A will lead to a random letter from A-Z.
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -5,7 +5,7 @@ game 'gta5'
description 'ES Extended'
lua54 'yes'
version '1.9.4'
version '1.9.5'
shared_scripts {
'locale.lua',
@@ -42,7 +42,7 @@ client_scripts {
'client/modules/callback.lua',
'client/main.lua',
'common/modules/*.lua',
'common/functions.lua',
+2 -2
View File
@@ -1,6 +1,6 @@
Locales = {}
function Translate(str, ...) -- Translate string
function Translate(str, ...) -- Translate string
if not str then
print(("[^1ERROR^7] Resource ^5%s^7 You did not specify a parameter for the Translate function or the value is nil!"):format(GetInvokingResource() or GetCurrentResourceName()))
return 'Given translate function parameter is nil!'
@@ -14,7 +14,7 @@ function Translate(str, ...) -- Translate string
return 'Translation [' .. Config.Locale .. '][' .. str .. '] does not exist'
end
elseif Config.Locale ~= 'en' and Locales['en'] and Locales['en'][str] then
return string.format(Locales['en'][str], ...)
return string.format(Locales['en'][str], ...)
else
return 'Locale [' .. Config.Locale .. '] does not exist'
end
+2 -2
View File
@@ -217,10 +217,10 @@ Locales["cs"] = {
["weapon_tactilerifle"] = "Service Carbine",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "Míček",
+2 -2
View File
@@ -223,10 +223,10 @@ Locales["da"] = {
["weapon_tactilerifle"] = "Service Carbine",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "Baseball",
+2 -2
View File
@@ -223,10 +223,10 @@ Locales["de"] = {
["weapon_tactilerifle"] = "Service Karabiner",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "Baseball",
+1 -1
View File
@@ -366,4 +366,4 @@ Locales["en"] = {
["tint_lspd"] = "blue skin",
["tint_orange"] = "orange skin",
["tint_platinum"] = "platinum skin",
}
}
+3 -3
View File
@@ -116,10 +116,10 @@ Locales["es"] = {
-- Weapons
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Melee
["weapon_dagger"] = "Daga",
@@ -357,7 +357,7 @@ Locales["es"] = {
["tint_lspd"] = "Skin Azul",
["tint_orange"] = "Skin Naranja",
["tint_platinum"] = "Skin Plata",
-- Duty related
["stopped_duty"] = "Has salido de servicio.",
["started_duty"] = "Has entrado de servicio.",
+2 -2
View File
@@ -109,10 +109,10 @@ Locales["fi"] = {
["locale_currency"] = "$%s",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Weapons
["weapon_knife"] = "Veitsi",
+3 -3
View File
@@ -197,10 +197,10 @@ Locales["fr"] = {
["component_luxary_finish"] = "finition de luxe",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Weapon Ammo
["ammo_rounds"] = "cartouche(s)",
@@ -231,7 +231,7 @@ Locales["fr"] = {
["tint_lspd"] = "skin bleu",
["tint_orange"] = "skin orange",
["tint_platinum"] = "skin platine",
-- Duty related
["stopped_duty"] = "Vous êtes maintenant hors-service.",
["started_duty"] = "Vous êtes maintenant en-service.",
+4 -4
View File
@@ -64,7 +64,7 @@ Locales["hu"] = {
["command_clearinventory"] = "Minden tárgy törlése a játékos inventoryból",
["command_clearloadout"] = "Minden fegyver elvétele a játékostól",
["command_freeze"] = "Játékos fagyasztása",
["command_unfreeze"] = "Játékos kiolvasztása",
["command_unfreeze"] = "Játékos kiolvasztása",
["command_giveaccountmoney"] = "Pénz adás a megadott típusban",
["command_giveaccountmoney_account"] = "Típus",
["command_giveaccountmoney_amount"] = "Mennyiség",
@@ -82,7 +82,7 @@ Locales["hu"] = {
["command_giveweaponcomponent_hasalready"] = "Játékosnak már van ilyen fegyver kiegészítője",
["command_giveweaponcomponent_missingweapon"] = "Játékosnak nincs ilyen fegyvere",
["command_goto"] = "Teleportálás játékoshoz",
["command_kill"] = "Játékos megölése",
["command_kill"] = "Játékos megölése",
["command_save"] = "Játékos adatainak mentése",
["command_saveall"] = "Összes játékos adatainak mentése",
["command_setaccountmoney"] = "Játékos pénzének beállítása megadott típusban",
@@ -223,10 +223,10 @@ Locales["hu"] = {
["weapon_tactilerifle"] = "Service Carbine",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "Baseball",
+2 -2
View File
@@ -223,10 +223,10 @@ Locales["it"] = {
["weapon_tactilerifle"] = "Carabina di servizio",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "Palla",
+37 -37
View File
@@ -36,10 +36,10 @@ Locales["nl"] = {
["threw_weapon_already"] = "Je hebt dit wapen al !",
["threw_cannot_pickup"] = "Inventoraris is vol, Kan niet oppakken!",
["threw_pickup_prompt"] = "Druk op E om op te pakken",
-- Key mapping
["keymap_showinventory"] = "Laat inventaris zien",
-- Salary related
["received_salary"] = "Je bent betaald: €%s",
["received_help"] = "Je hebt je uitkering gekregen: €%s",
@@ -49,10 +49,10 @@ Locales["nl"] = {
["account_bank"] = "Bank",
["account_black_money"] = "Zwart geld",
["account_money"] = "Cash",
["act_imp"] = "Kan actie niet uitvoeren",
["in_vehicle"] = "Kan actie niet uitvoeren, de speler zit in een voertuig.",
-- Commands
["command_bring"] = "Breng speler naar jou",
["command_car"] = "Spawn een voertuig",
@@ -110,17 +110,17 @@ Locales["nl"] = {
["command_giveammo_ammo"] = "Ammo Hoeveelheid",
["tpm_nowaypoint"] = "Geen waypoint gezet.",
["tpm_success"] = "Successvol geteleporteerd",
["noclip_message"] = "Noclip is %s",
["enabled"] = "~g~aangezet~s~",
["disabled"] = "~r~uitgezet~s~",
-- Locale settings
["locale_digit_grouping_symbol"] = ",",
["locale_currency"] = "€%s",
-- Weapons
-- Melee
["weapon_dagger"] = "Dolk",
["weapon_bat"] = "Knuppel",
@@ -139,7 +139,7 @@ Locales["nl"] = {
["weapon_poolcue"] = "Pool Cue",
["weapon_stone_hatchet"] = "Steenbijl",
["weapon_switchblade"] = "Switchblade",
-- Handguns
["weapon_appistol"] = "AP-pistool",
["weapon_ceramicpistol"] = "Keramische pistool",
@@ -160,7 +160,7 @@ Locales["nl"] = {
["weapon_stungun"] = "Taser",
["weapon_raypistol"] = "Up-N-Atomizer",
["weapon_vintagepistol"] = "Vintage Pistool",
-- Shotguns
["weapon_assaultshotgun"] = "Aanvalsgeweer",
["weapon_autoshotgun"] = "Automatisch jachtgeweer",
@@ -172,7 +172,7 @@ Locales["nl"] = {
["weapon_pumpshotgun"] = "Pompgeweer",
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
["weapon_sawnoffshotgun"] = "Afgezaagd jachtgeweer",
-- SMG & LMG
["weapon_assaultsmg"] = "Aanval SMG",
["weapon_combatmg"] = "Gevecht MG",
@@ -186,7 +186,7 @@ Locales["nl"] = {
["weapon_smg"] = "SMG",
["weapon_smg_mk2"] = "SMG MK2",
["weapon_raycarbine"] = "Onheilige Hellbringer",
-- Rifles
["weapon_advancedrifle"] = "Geavanceerd geweer",
["weapon_assaultrifle"] = "Aanvalsgeweer",
@@ -199,14 +199,14 @@ Locales["nl"] = {
["weapon_militaryrifle"] = "Militair geweer",
["weapon_specialcarbine"] = "Speciale karabijn",
["weapon_specialcarbine_mk2"] = "Speciale karabijn MK2",
-- Sniper
["weapon_heavysniper"] = "Zware sluipschutter",
["weapon_heavysniper_mk2"] = "Zware Sniper MK2",
["weapon_marksmanrifle"] = "Schuttersgeweer",
["weapon_marksmanrifle_mk2"] = "Schuttersgeweer MK2",
["weapon_sniperrifle"] = "Sniper Rifle",
-- Heavy / Launchers
["weapon_compactlauncher"] = "Compacte Launcher",
["weapon_firework"] = "Vuurwerkstarter",
@@ -216,18 +216,18 @@ Locales["nl"] = {
["weapon_railgun"] = "Spoorgeweer",
["weapon_rpg"] = "Raketwerper",
["weapon_rayminigun"] = "Weduwemaker",
-- Criminal Enterprises DLC
["weapon_metaldetector"] = "Metaal Detector",
["weapon_precisionrifle"] = "Precisiegeweer",
["weapon_tactilerifle"] = "Service Carbine",
-- Drug Wars DLC
["weapon_candycane"] = "Candy Cane", -- not translated
-- Drug Wars DLC
["weapon_candycane"] = "Candy Cane", -- not translated
["weapon_acidpackage"] = "Acid Package", -- not translated
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
["weapon_railgunxm3"] = "Railgun", -- not translated
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
["weapon_railgunxm3"] = "Railgun", -- not translated
-- Thrown
["weapon_ball"] = "Honkbal",
["weapon_bzgas"] = "BZ-gas",
@@ -241,7 +241,7 @@ Locales["nl"] = {
["weapon_snowball"] = "Sneeuwbal",
["weapon_stickybomb"] = "Kleefbom",
["weapon_smokegrenade"] = "Traangas",
-- Special
["weapon_firebluser"] = "Brandblusser",
["weapon_digiscanner"] = "Digitale scanner",
@@ -249,7 +249,7 @@ Locales["nl"] = {
["weapon_handcuffs"] = "Handboeien",
["gadget_nightvision"] = "Nachtzicht",
["gadget_parachute"] = "parachute",
-- Weapon Components
["component_knuckle_base"] = "basismodel",
["component_knuckle_pimp"] = "de pooier",
@@ -261,16 +261,16 @@ Locales["nl"] = {
["component_knuckle_player"] = "de speler",
["component_knuckle_king"] = "de koning",
["component_knuckle_vagos"] = "de Vagos",
["component_luxary_finish"] = "luxe wapenafwerking",
["component_handle_default"] = "standaard handvat",
["component_handle_vip"] = "VIP-handvat",
["component_handle_bodyguard"] = "bodyguard-handvat",
["component_vip_finish"] = "VIP Finish",
["component_bodyguard_finish"] = "bodyguard Finish",
["component_camo_finish"] = "digitale camouflage",
["component_camo_finish2"] = "penseelstreek camouflage",
["component_camo_finish3"] = "bos camouflage",
@@ -282,7 +282,7 @@ Locales["nl"] = {
["component_camo_finish9"] = "geometrische camouflage",
["component_camo_finish10"] = "boom camouflage",
["component_camo_finish11"] = "patriottische camouflage",
["component_camo_slide_finish"] = "digitale diacamouflage",
["component_camo_slide_finish2"] = "penseelstreek Dia Camo",
["component_camo_slide_finish3"] = "bos Slide camouflage",
@@ -294,12 +294,12 @@ Locales["nl"] = {
["component_camo_slide_finish9"] = "geometrische diacamouflage",
["component_camo_slide_finish10"] = "boom Slide camouflage",
["component_camo_slide_finish11"] = "patriottische diacamouflage",
["component_clip_default"] = "standaard magazijn",
["component_clip_extended"] = "uitgebreid magazijn",
["component_clip_drum"] = "drum magazijn",
["component_clip_box"] = "box magazijn",
["component_scope_holo"] = "holografisch bereik",
["component_scope_small"] = "klein bereik",
["component_scope_medium"] = "gemiddeld bereik",
@@ -307,10 +307,10 @@ Locales["nl"] = {
["component_scope"] = "gemonteerde scope",
["component_scope_advanced"] = "geavanceerd bereik",
["component_ironsights"] = "ironsights",
["component_suppressor"] = "suppressor",
["component_compensator"] = "compensator",
["component_muzzle_flat"] = "platte mondingsrem",
["component_muzzle_tactical"] = "tactische mondingsrem",
["component_muzzle_fat"] = "fat-end mondingsrem",
@@ -319,26 +319,26 @@ Locales["nl"] = {
["component_muzzle_slanted"] = "schuine mondingsrem",
["component_muzzle_split"] = "gespleten mondingsrem",
["component_muzzle_squared"] = "kwadraat mondingsrem",
["component_flashlight"] = "zaklamp",
["component_grip"] = "grip",
["component_barrel_default"] = "standaard handvat",
["component_barrel_heavy"] = "zware handvat",
["component_ammo_tracer"] = "tracermunitie",
["component_ammo_incendiary"] = "brandgevaarlijke munitie",
["component_ammo_hollowpoint"] = "hollowpoint munitie",
["component_ammo_fmj"] = "fMJ-munitie",
["component_ammo_armor"] = "pantser piercing munitie",
["component_ammo_explosive"] = "pantserpiercing brandgevaarlijke munitie",
["component_shells_default"] = "standaard shells",
["component_shells_incendiary"] = "draken ademschelpen",
["component_shells_armor"] = "stalen Buckshot Shells",
["component_shells_hollowpoint"] = "flechette schelpen",
["component_shells_explosive"] = "explosieve slakkenhuizen",
-- Weapon Ammo
["ammo_rounds"] = "ronde(n)",
["ammo_shells"] = "huls/(zen)",
@@ -358,7 +358,7 @@ Locales["nl"] = {
["ammo_snowball"] = "sneeuwbal(len)",
["ammo_flare"] = "flare(s)",
["ammo_flaregun"] = "flare(s)",
-- Weapon Tints
["tint_default"] = "standaard skin",
["tint_green"] = "groene skin",
+2 -2
View File
@@ -196,10 +196,10 @@ Locales["pl"] = {
["component_luxary_finish"] = "luksusowe wykończenie broni",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Weapon Ammo
["ammo_rounds"] = "nabój/oi",
+36 -37
View File
@@ -36,10 +36,10 @@ Locales["sl"] = {
["threw_weapon_already"] = "Ti ze imas to orozje",
["threw_cannot_pickup"] = "Shramba je poln, nemorem pobrati!",
["threw_pickup_prompt"] = "Pritisni E da poberes",
-- Key mapping
["keymap_showinventory"] = "Pokazi Shrambo",
-- Salary related
["received_salary"] = "Vi ste plačali: $%s",
["received_help"] = "Vi ste placali svoj CEK v vrednosti: $%s",
@@ -49,10 +49,10 @@ Locales["sl"] = {
["account_bank"] = "Banka",
["account_black_money"] = "Umazan Denar",
["account_money"] = "Denar",
["act_imp"] = "Dejanja ni mogoče izvesti",
["in_vehicle"] = "Dejanja ni mogoče izvesti, Oseba je v vozilu",
-- Commands
["command_bring"] = "Teleportiraj osebo do sebe",
["command_car"] = "Spawnaj si vozilo",
@@ -110,17 +110,17 @@ Locales["sl"] = {
["command_giveammo_ammo"] = "Kolicina streliva",
["tpm_nowaypoint"] = "Ni nastavljene poti!.",
["tpm_success"] = "Uspesno teleportiran",
["noclip_message"] = "Noclip je bil %s",
["enabled"] = "~g~Vkljucen~s~",
["disabled"] = "~r~Izkljucen~s~",
-- Locale settings
["locale_digit_grouping_symbol"] = ",",
["locale_currency"] = "€%s",
-- Weapons
-- Melee
["weapon_dagger"] = "Dagger",
["weapon_bat"] = "Bat",
@@ -139,7 +139,7 @@ Locales["sl"] = {
["weapon_poolcue"] = "Pool Cue",
["weapon_stone_hatchet"] = "Stone Hatchet",
["weapon_switchblade"] = "Switchblade",
-- Handguns
["weapon_appistol"] = "AP Pistol",
["weapon_ceramicpistol"] = "Ceramic Pistol",
@@ -160,7 +160,7 @@ Locales["sl"] = {
["weapon_stungun"] = "Taser",
["weapon_raypistol"] = "Up-N-Atomizer",
["weapon_vintagepistol"] = "Vintage Pistol",
-- Shotguns
["weapon_assaultshotgun"] = "Assault Shotgun",
["weapon_autoshotgun"] = "Auto Shotgun",
@@ -172,7 +172,7 @@ Locales["sl"] = {
["weapon_pumpshotgun"] = "Pump Shotgun",
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
-- SMG & LMG
["weapon_assaultsmg"] = "Assault SMG",
["weapon_combatmg"] = "Combat MG",
@@ -186,7 +186,7 @@ Locales["sl"] = {
["weapon_smg"] = "SMG",
["weapon_smg_mk2"] = "SMG MK2",
["weapon_raycarbine"] = "Unholy Hellbringer",
-- Rifles
["weapon_advancedrifle"] = "Advanced Rifle",
["weapon_assaultrifle"] = "Assault Rifle",
@@ -199,14 +199,14 @@ Locales["sl"] = {
["weapon_militaryrifle"] = "Military Rifle",
["weapon_specialcarbine"] = "Special Carbine",
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
-- Sniper
["weapon_heavysniper"] = "Heavy Sniper",
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
["weapon_marksmanrifle"] = "Marksman Rifle",
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
["weapon_sniperrifle"] = "Sniper Rifle",
-- Heavy / Launchers
["weapon_compactlauncher"] = "Compact Launcher",
["weapon_firework"] = "Firework Launcher",
@@ -216,18 +216,18 @@ Locales["sl"] = {
["weapon_railgun"] = "Railgun",
["weapon_rpg"] = "Rocket Launcher",
["weapon_rayminigun"] = "Widowmaker",
-- Criminal Enterprises DLC
["weapon_metaldetector"] = "Metal Detector",
["weapon_precisionrifle"] = "Precision Rifle",
["weapon_tactilerifle"] = "Service Carbine",
-- Drug Wars DLC
["weapon_candycane"] = "Candy Cane", -- not translated
["weapon_candycane"] = "Candy Cane", -- not translated
["weapon_acidpackage"] = "Acid Package", -- not translated
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
["weapon_railgunxm3"] = "Railgun", -- not translated
["weapon_railgunxm3"] = "Railgun", -- not translated
-- Thrown
["weapon_ball"] = "Baseball",
["weapon_bzgas"] = "BZ Gas",
@@ -241,7 +241,7 @@ Locales["sl"] = {
["weapon_snowball"] = "Snowball",
["weapon_stickybomb"] = "Sticky Bomb",
["weapon_smokegrenade"] = "Tear Gas",
-- Special
["weapon_fireextinguisher"] = "Fire Extinguisher",
["weapon_digiscanner"] = "Digital Scanner",
@@ -249,7 +249,7 @@ Locales["sl"] = {
["weapon_handcuffs"] = "Handcuffs",
["gadget_nightvision"] = "Night Vision",
["gadget_parachute"] = "parachute",
-- Weapon Components
["component_knuckle_base"] = "base Model",
["component_knuckle_pimp"] = "the Pimp",
@@ -261,16 +261,16 @@ Locales["sl"] = {
["component_knuckle_player"] = "the Player",
["component_knuckle_king"] = "the King",
["component_knuckle_vagos"] = "the Vagos",
["component_luxary_finish"] = "luxary Weapon Finish",
["component_handle_default"] = "default Handle",
["component_handle_vip"] = "vIP Handle",
["component_handle_bodyguard"] = "bodyguard Handle",
["component_vip_finish"] = "vIP Finish",
["component_bodyguard_finish"] = "bodyguard Finish",
["component_camo_finish"] = "digital Camo",
["component_camo_finish2"] = "brushstroke Camo",
["component_camo_finish3"] = "woodland Camo",
@@ -282,7 +282,7 @@ Locales["sl"] = {
["component_camo_finish9"] = "geometric Camo",
["component_camo_finish10"] = "boom Camo",
["component_camo_finish11"] = "patriotic Camo",
["component_camo_slide_finish"] = "digital Slide Camo",
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
["component_camo_slide_finish3"] = "woodland Slide Camo",
@@ -294,12 +294,12 @@ Locales["sl"] = {
["component_camo_slide_finish9"] = "geometric Slide Camo",
["component_camo_slide_finish10"] = "boom Slide Camo",
["component_camo_slide_finish11"] = "patriotic Slide Camo",
["component_clip_default"] = "default Magazine",
["component_clip_extended"] = "extended Magazine",
["component_clip_drum"] = "drum Magazine",
["component_clip_box"] = "box Magazine",
["component_scope_holo"] = "holographic Scope",
["component_scope_small"] = "small Scope",
["component_scope_medium"] = "medium Scope",
@@ -307,10 +307,10 @@ Locales["sl"] = {
["component_scope"] = "mounted Scope",
["component_scope_advanced"] = "advanced Scope",
["component_ironsights"] = "ironsights",
["component_suppressor"] = "suppressor",
["component_compensator"] = "compensator",
["component_muzzle_flat"] = "flat Muzzle Brake",
["component_muzzle_tactical"] = "tactical Muzzle Brake",
["component_muzzle_fat"] = "fat-End Muzzle Brake",
@@ -319,26 +319,26 @@ Locales["sl"] = {
["component_muzzle_slanted"] = "slanted Muzzle Brake",
["component_muzzle_split"] = "split-End Muzzle Brake",
["component_muzzle_squared"] = "squared Muzzle Brake",
["component_flashlight"] = "flashlight",
["component_grip"] = "grip",
["component_barrel_default"] = "default Barrel",
["component_barrel_heavy"] = "heavy Barrel",
["component_ammo_tracer"] = "tracer Ammo",
["component_ammo_incendiary"] = "incendiary Ammo",
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
["component_ammo_fmj"] = "fMJ Ammo",
["component_ammo_armor"] = "armor Piercing Ammo",
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
["component_shells_default"] = "default Shells",
["component_shells_incendiary"] = "dragons Breath Shells",
["component_shells_armor"] = "steel Buckshot Shells",
["component_shells_hollowpoint"] = "flechette Shells",
["component_shells_explosive"] = "explosive Slug Shells",
-- Weapon Ammo
["ammo_rounds"] = "round(s)",
["ammo_shells"] = "shell(s)",
@@ -358,7 +358,7 @@ Locales["sl"] = {
["ammo_snowball"] = "snowball(s)",
["ammo_flare"] = "flare(s)",
["ammo_flaregun"] = "flare(s)",
-- Weapon Tints
["tint_default"] = "default skin",
["tint_green"] = "green skin",
@@ -368,5 +368,4 @@ Locales["sl"] = {
["tint_lspd"] = "blue skin",
["tint_orange"] = "orange skin",
["tint_platinum"] = "platinum skin",
}
}
+2 -2
View File
@@ -223,10 +223,10 @@ Locales["sr"] = {
["weapon_tactilerifle"] = "Service Carbine",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "Baseball",
+2 -2
View File
@@ -223,10 +223,10 @@ Locales["zh-cn"] = {
["weapon_tactilerifle"] = "制式卡宾步枪",
-- Drug Wars DLC
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_candycane'] = 'Candy Cane', -- not translated
['weapon_acidpackage'] = 'Acid Package', -- not translated
['weapon_pistolxm3'] = 'WM 29 Pistol', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
['weapon_railgunxm3'] = 'Railgun', -- not translated
-- Thrown
["weapon_ball"] = "棒球",
@@ -20,7 +20,7 @@ Core.PlayerFunctionOverrides.OxInventory = {
metadata = nil
end
minimalInventory[#minimalInventory+1] = {
minimalInventory[#minimalInventory + 1] = {
name = v.name,
count = v.count,
slot = k,
@@ -43,7 +43,7 @@ Core.PlayerFunctionOverrides.OxInventory = {
end,
setAccountMoney = function(self)
return function(accountName,money, reason)
return function(accountName, money, reason)
reason = reason or 'unknown'
if money >= 0 then
local account = self.getAccount(accountName)
@@ -63,16 +63,16 @@ Core.PlayerFunctionOverrides.OxInventory = {
end,
addAccountMoney = function(self)
return function(accountName,money, reason)
return function(accountName, money, reason)
reason = reason or 'unknown'
if money > 0 then
local account = self.getAccount(accountName)
if account then
money = account.round and ESX.Math.Round(money) or money
self.accounts[account.index].money = self.accounts[account.index].money + money
self.triggerEvent('esx:setAccountMoney', account)
TriggerEvent('esx:addAccountMoney', self.source, accountName, money, reason)
money = account.round and ESX.Math.Round(money) or money
self.accounts[account.index].money = self.accounts[account.index].money + money
self.triggerEvent('esx:setAccountMoney', account)
TriggerEvent('esx:addAccountMoney', self.source, accountName, money, reason)
if Inventory.accounts[accountName] then
Inventory.AddItem(self.source, accountName, money)
end
@@ -82,7 +82,7 @@ Core.PlayerFunctionOverrides.OxInventory = {
end,
removeAccountMoney = function(self)
return function(accountName,money, reason)
return function(accountName, money, reason)
reason = reason or 'unknown'
if money > 0 then
local account = self.getAccount(accountName)
@@ -101,31 +101,31 @@ Core.PlayerFunctionOverrides.OxInventory = {
end,
getInventoryItem = function(self)
return function(name,metadata)
return function(name, metadata)
return Inventory.GetItem(self.source, name, metadata)
end
end,
addInventoryItem = function(self)
return function(name,count,metadata,slot)
return function(name, count, metadata, slot)
return Inventory.AddItem(self.source, name, count or 1, metadata, slot)
end
end,
removeInventoryItem = function(self)
return function(name,count,metadata,slot)
return function(name, count, metadata, slot)
return Inventory.RemoveItem(self.source, name, count or 1, metadata, slot)
end
end,
setInventoryItem = function(self)
return function(name,count,metadata)
return function(name, count, metadata)
return Inventory.SetItem(self.source, name, count, metadata)
end
end,
canCarryItem = function(self)
return function(name,count,metadata)
return function(name, count, metadata)
return Inventory.CanCarryItem(self.source, name, count, metadata)
end
end,
@@ -193,7 +193,7 @@ Core.PlayerFunctionOverrides.OxInventory = {
end,
hasItem = function(self)
return function(name,metadata)
return function(name, metadata)
return Inventory.GetItem(self.source, name, metadata)
end
end,
+72 -75
View File
@@ -3,7 +3,7 @@ local GetEntityCoords = GetEntityCoords
function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, weight, job, loadout, name, coords, metadata)
local targetOverrides = Config.PlayerFunctionOverride and Core.PlayerFunctionOverrides[Config.PlayerFunctionOverride] or {}
local self = {}
self.accounts = accounts
@@ -20,10 +20,10 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
self.weight = weight
self.maxWeight = Config.MaxWeight
self.metadata = metadata
if Config.Multichar then self.license = 'license'.. identifier:sub(identifier:find(':'), identifier:len()) else self.license = 'license:'..identifier end
if Config.Multichar then self.license = 'license' .. identifier:sub(identifier:find(':'), identifier:len()) else self.license = 'license:' .. identifier end
ExecuteCommand(('add_principal identifier.%s group.%s'):format(self.license, self.group))
local stateBag = Player(self.source).state
stateBag:set("identifier", self.identifier, true)
stateBag:set("license", self.license, true)
@@ -36,25 +36,25 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
TriggerClientEvent(eventName, self.source, ...)
end
function self.setCoords(coords)
function self.setCoords(coordinates)
local Ped = GetPlayerPed(self.source)
local vector = type(coords) == "vector4" and coords or type(coords) == "vector3" and vector4(coords, 0.0) or
vec(coords.x, coords.y, coords.z, coords.heading or 0.0)
local vector = type(coordinates) == "vector4" and coordinates or type(coordinates) == "vector3" and vector4(coordinates, 0.0) or
vec(coordinates.x, coordinates.y, coordinates.z, coordinates.heading or 0.0)
SetEntityCoords(Ped, vector.xyz, false, false, false, false)
SetEntityHeading(Ped, vector.w)
end
function self.getCoords(vector)
local ped = GetPlayerPed(self.source)
local coords = GetEntityCoords(ped)
local coordinates = GetEntityCoords(ped)
if vector then
return coords
return coordinates
else
return {
x = coords.x,
y = coords.y,
z = coords.z,
x = coordinates.x,
y = coordinates.y,
z = coordinates.z,
}
end
end
@@ -156,7 +156,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
local minimalLoadout = {}
for _, v in ipairs(self.loadout) do
minimalLoadout[v.name] = {ammo = v.ammo}
minimalLoadout[v.name] = { ammo = v.ammo }
if v.tintIndex > 0 then minimalLoadout[v.name].tintIndex = v.tintIndex end
if #v.components > 0 then
@@ -254,16 +254,16 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
end
end
function self.getInventoryItem(name)
function self.getInventoryItem(itemName)
for _, v in ipairs(self.inventory) do
if v.name == name then
if v.name == itemName then
return v
end
end
end
function self.addInventoryItem(name, count)
local item = self.getInventoryItem(name)
function self.addInventoryItem(itemName, count)
local item = self.getInventoryItem(itemName)
if item then
count = ESX.Math.Round(count)
@@ -275,8 +275,8 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
end
end
function self.removeInventoryItem(name, count)
local item = self.getInventoryItem(name)
function self.removeInventoryItem(itemName, count)
local item = self.getInventoryItem(itemName)
if item then
count = ESX.Math.Round(count)
@@ -291,13 +291,13 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
self.triggerEvent('esx:removeInventoryItem', item.name, item.count)
end
else
print(('[^1ERROR^7] Player ID:^5%s Tried remove a Invalid count -> %s of %s'):format(self.playerId, count,name))
print(('[^1ERROR^7] Player ID:^5%s Tried remove a Invalid count -> %s of %s'):format(self.playerId, count, itemName))
end
end
end
function self.setInventoryItem(name, count)
local item = self.getInventoryItem(name)
function self.setInventoryItem(itemName, count)
local item = self.getInventoryItem(itemName)
if item and count >= 0 then
count = ESX.Math.Round(count)
@@ -318,15 +318,15 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
return self.maxWeight
end
function self.canCarryItem(name, count)
if ESX.Items[name] then
local currentWeight, itemWeight = self.weight, ESX.Items[name].weight
local newWeight = currentWeight + (itemWeight * count)
function self.canCarryItem(itemName, count)
if ESX.Items[itemName] then
local currentWeight, itemWeight = self.weight, ESX.Items[itemName].weight
local newWeight = currentWeight + (itemWeight * count)
return newWeight <= self.maxWeight
else
print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(name))
end
return newWeight <= self.maxWeight
else
print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(itemName))
end
end
function self.canSwapItem(firstItem, firstItemCount, testItem, testItemCount)
@@ -348,21 +348,21 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
self.triggerEvent('esx:setMaxWeight', self.maxWeight)
end
function self.setJob(job, grade)
function self.setJob(newJob, grade)
grade = tostring(grade)
local lastJob = json.decode(json.encode(self.job))
if ESX.DoesJobExist(job, grade) then
local jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade]
if ESX.DoesJobExist(newJob, grade) then
local jobObject, gradeObject = ESX.Jobs[newJob], ESX.Jobs[newJob].grades[grade]
self.job.id = jobObject.id
self.job.name = jobObject.name
self.job.label = jobObject.label
self.job.id = jobObject.id
self.job.name = jobObject.name
self.job.label = jobObject.label
self.job.grade = tonumber(grade)
self.job.grade_name = gradeObject.name
self.job.grade_label = gradeObject.label
self.job.grade_salary = gradeObject.salary
self.job.grade = tonumber(grade)
self.job.grade_name = gradeObject.name
self.job.grade_label = gradeObject.label
self.job.grade_salary = gradeObject.salary
if gradeObject.skin_male then
self.job.skin_male = json.decode(gradeObject.skin_male)
@@ -466,7 +466,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
if v.name == weaponName then
weaponLabel = v.label
for _,v2 in ipairs(v.components) do
for _, v2 in ipairs(v.components) do
self.removeWeaponComponent(weaponName, v2)
end
@@ -568,47 +568,46 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
self.triggerEvent('esx:showHelpNotification', msg, thisFrame, beep, duration)
end
function self.getMeta(index, subIndex)
if not (index) then return self.metadata end
function self.getMeta(index, subIndex)
if not (index) then return self.metadata end
if type(index) ~= "string" then
return print("[^1ERROR^7] xPlayer.getMeta ^5index^7 should be ^5string^7!")
end
if type(index) ~= "string" then
return print("[^1ERROR^7] xPlayer.getMeta ^5index^7 should be ^5string^7!")
end
local metadata = self.metadata[index]
if (metadata == nil) then
return Config.EnableDebug and print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not exist!"):format(index)) or nil
end
local metaData = self.metadata[index]
if (metaData == nil) then
return Config.EnableDebug and print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not exist!"):format(index)) or nil
end
if (subIndex and type(metadata) == "table") then
local _type = type(subIndex)
if (subIndex and type(metaData) == "table") then
local _type = type(subIndex)
if (_type == "string") then
local value = metadata[subIndex]
return value
end
if (_type == "string") then
local value = metaData[subIndex]
return value
end
if (_type == "table") then
local returnValues = {}
if (_type == "table") then
local returnValues = {}
for i = 1, #subIndex do
local key = subIndex[i]
if (type(key) == "string") then
returnValues[key] = self.getMeta(index, key)
else
print(("[^1ERROR^7] xPlayer.getMeta subIndex should be ^5string^7 or ^5table^7! that contains ^5string^7, received ^5%s^7!, skipping..."):format(type(key)))
end
end
for i = 1, #subIndex do
local key = subIndex[i]
if (type(key) == "string") then
returnValues[key] = self.getMeta(index, key)
else
print(("[^1ERROR^7] xPlayer.getMeta subIndex should be ^5string^7 or ^5table^7! that contains ^5string^7, received ^5%s^7!, skipping..."):format(type(key)))
end
end
return returnValues
end
return returnValues
end
return print(("[^1ERROR^7] xPlayer.getMeta subIndex should be ^5string^7 or ^5table^7!, received ^5%s^7!"):format(_type))
end
return metadata
end
return print(("[^1ERROR^7] xPlayer.getMeta subIndex should be ^5string^7 or ^5table^7!, received ^5%s^7!"):format(_type))
end
return metaData
end
function self.setMeta(index, value, subValue)
if not index then
@@ -626,14 +625,12 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
local _type = type(value)
if not subValue then
if _type ~= "number" and _type ~= "string" and _type ~= "table" then
return print(("[^1ERROR^7] xPlayer.setMeta ^5%s^7 should be ^5number^7 or ^5string^7 or ^5table^7!"):format(value))
end
self.metadata[index] = value
else
if _type ~= "string" then
return print(("[^1ERROR^7] xPlayer.setMeta ^5value^7 should be ^5string^7 as a subIndex!"):format(value))
end
@@ -668,7 +665,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
Player(self.source).state:set('metadata', self.metadata, true)
end
for fnName,fn in pairs(targetOverrides) do
for fnName, fn in pairs(targetOverrides) do
self[fnName] = fn(self)
end
+263 -184
View File
@@ -1,19 +1,23 @@
ESX.RegisterCommand('setcoords', 'admin', function(xPlayer, args)
xPlayer.setCoords({x = args.x, y = args.y, z = args.z})
xPlayer.setCoords({ x = args.x, y = args.y, z = args.z })
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Set Coordinates /setcoords Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "X Coord", value = args.x, inline = true},
{name = "Y Coord", value = args.y, inline = true},
{name = "Z Coord", value = args.z, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "X Coord", value = args.x, inline = true },
{ name = "Y Coord", value = args.y, inline = true },
{ name = "Z Coord", value = args.z, inline = true },
})
end
end, false, {help = TranslateCap('command_setcoords'), validate = true, arguments = {
{name = 'x', help = TranslateCap('command_setcoords_x'), type = 'number'},
{name = 'y', help = TranslateCap('command_setcoords_y'), type = 'number'},
{name = 'z', help = TranslateCap('command_setcoords_z'), type = 'number'}
}})
end, false, {
help = TranslateCap('command_setcoords'),
validate = true,
arguments = {
{ name = 'x', help = TranslateCap('command_setcoords_x'), type = 'number' },
{ name = 'y', help = TranslateCap('command_setcoords_y'), type = 'number' },
{ name = 'z', help = TranslateCap('command_setcoords_z'), type = 'number' }
}
})
ESX.RegisterCommand('setjob', 'admin', function(xPlayer, args, showError)
if not ESX.DoesJobExist(args.job, args.grade) then
@@ -23,35 +27,39 @@ ESX.RegisterCommand('setjob', 'admin', function(xPlayer, args, showError)
args.playerId.setJob(args.job, args.grade)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Set Job /setjob Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Job", value = args.playerId, inline = true},
{name = "Grade", value = args.playerId, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Job", value = args.playerId, inline = true },
{ name = "Grade", value = args.playerId, inline = true },
})
end
end, true, {help = TranslateCap('command_setjob'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'job', help = TranslateCap('command_setjob_job'), type = 'string'},
{name = 'grade', help = TranslateCap('command_setjob_grade'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_setjob'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'job', help = TranslateCap('command_setjob_job'), type = 'string' },
{ name = 'grade', help = TranslateCap('command_setjob_grade'), type = 'number' }
}
})
local upgrades = Config.SpawnVehMaxUpgrades and
{
plate = "ADMINCAR",
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1
} or {}
{
plate = "ADMINCAR",
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1
} or {}
ESX.RegisterCommand('car', 'admin', function(xPlayer, args, showError)
if not xPlayer then
return showError('[^1ERROR^7] The xPlayer value is nil')
end
local playerPed = GetPlayerPed(xPlayer.source)
local playerCoords = GetEntityCoords(playerPed)
local playerHeading = GetEntityHeading(playerPed)
@@ -67,9 +75,9 @@ ESX.RegisterCommand('car', 'admin', function(xPlayer, args, showError)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Spawn Car /car Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Vehicle", value = args.car, inline = true}
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Vehicle", value = args.car, inline = true }
})
end
@@ -79,7 +87,7 @@ ESX.RegisterCommand('car', 'admin', function(xPlayer, args, showError)
for _ = 1, 20 do
Wait(0)
SetPedIntoVehicle(playerPed, vehicle, -1)
if GetVehiclePedIsIn(playerPed, false) == vehicle then
break
end
@@ -89,11 +97,15 @@ ESX.RegisterCommand('car', 'admin', function(xPlayer, args, showError)
end
end
end)
end, false, {help = TranslateCap('command_car'), validate = false, arguments = {
{name = 'car',validate = false, help = TranslateCap('command_car_car'), type = 'string'}
}})
end, false, {
help = TranslateCap('command_car'),
validate = false,
arguments = {
{ name = 'car', validate = false, help = TranslateCap('command_car_car'), type = 'string' }
}
})
ESX.RegisterCommand({'cardel', 'dv'}, 'admin', function(xPlayer, args)
ESX.RegisterCommand({ 'cardel', 'dv' }, 'admin', function(xPlayer, args)
local PedVehicle = GetVehiclePedIsIn(GetPlayerPed(xPlayer.source), false)
if DoesEntityExist(PedVehicle) then
DeleteEntity(PedVehicle)
@@ -107,13 +119,17 @@ ESX.RegisterCommand({'cardel', 'dv'}, 'admin', function(xPlayer, args)
end
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Delete Vehicle /dv Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
})
end
end, false, {help = TranslateCap('command_cardel'), validate = false, arguments = {
{name = 'radius',validate = false, help = TranslateCap('command_cardel_radius'), type = 'number'}
}})
end, false, {
help = TranslateCap('command_cardel'),
validate = false,
arguments = {
{ name = 'radius', validate = false, help = TranslateCap('command_cardel_radius'), type = 'number' }
}
})
ESX.RegisterCommand('setaccountmoney', 'admin', function(xPlayer, args, showError)
if not args.playerId.getAccount(args.account) then
@@ -122,18 +138,22 @@ ESX.RegisterCommand('setaccountmoney', 'admin', function(xPlayer, args, showErro
args.playerId.setAccountMoney(args.account, args.amount, "Government Grant")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Set Account Money /setaccountmoney Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Account", value = args.account, inline = true},
{name = "Amount", value = args.amount, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Account", value = args.account, inline = true },
{ name = "Amount", value = args.amount, inline = true },
})
end
end, true, {help = TranslateCap('command_setaccountmoney'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'account', help = TranslateCap('command_giveaccountmoney_account'), type = 'string'},
{name = 'amount', help = TranslateCap('command_setaccountmoney_amount'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_setaccountmoney'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'account', help = TranslateCap('command_giveaccountmoney_account'), type = 'string' },
{ name = 'amount', help = TranslateCap('command_setaccountmoney_amount'), type = 'number' }
}
})
ESX.RegisterCommand('giveaccountmoney', 'admin', function(xPlayer, args, showError)
if not args.playerId.getAccount(args.account) then
@@ -142,18 +162,22 @@ ESX.RegisterCommand('giveaccountmoney', 'admin', function(xPlayer, args, showErr
args.playerId.addAccountMoney(args.account, args.amount, "Government Grant")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Give Account Money /giveaccountmoney Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Account", value = args.account, inline = true},
{name = "Amount", value = args.amount, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Account", value = args.account, inline = true },
{ name = "Amount", value = args.amount, inline = true },
})
end
end, true, {help = TranslateCap('command_giveaccountmoney'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'account', help = TranslateCap('command_giveaccountmoney_account'), type = 'string'},
{name = 'amount', help = TranslateCap('command_giveaccountmoney_amount'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_giveaccountmoney'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'account', help = TranslateCap('command_giveaccountmoney_account'), type = 'string' },
{ name = 'amount', help = TranslateCap('command_giveaccountmoney_amount'), type = 'number' }
}
})
ESX.RegisterCommand('removeaccountmoney', 'admin', function(xPlayer, args, showError)
if not args.playerId.getAccount(args.account) then
@@ -162,36 +186,44 @@ ESX.RegisterCommand('removeaccountmoney', 'admin', function(xPlayer, args, showE
args.playerId.removeAccountMoney(args.account, args.amount, "Government Tax")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Remove Account Money /removeaccountmoney Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Account", value = args.account, inline = true},
{name = "Amount", value = args.amount, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Account", value = args.account, inline = true },
{ name = "Amount", value = args.amount, inline = true },
})
end
end, true, {help = TranslateCap('command_removeaccountmoney'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'account', help = TranslateCap('command_removeaccountmoney_account'), type = 'string'},
{name = 'amount', help = TranslateCap('command_removeaccountmoney_amount'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_removeaccountmoney'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'account', help = TranslateCap('command_removeaccountmoney_account'), type = 'string' },
{ name = 'amount', help = TranslateCap('command_removeaccountmoney_amount'), type = 'number' }
}
})
if not Config.OxInventory then
ESX.RegisterCommand('giveitem', 'admin', function(xPlayer, args)
args.playerId.addInventoryItem(args.item, args.count)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Give Item /giveitem Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Item", value = args.item, inline = true},
{name = "Quantity", value = args.count, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Item", value = args.item, inline = true },
{ name = "Quantity", value = args.count, inline = true },
})
end
end, true, {help = TranslateCap('command_giveitem'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'item', help = TranslateCap('command_giveitem_item'), type = 'item'},
{name = 'count', help = TranslateCap('command_giveitem_count'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_giveitem'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'item', help = TranslateCap('command_giveitem_item'), type = 'item' },
{ name = 'count', help = TranslateCap('command_giveitem_count'), type = 'number' }
}
})
ESX.RegisterCommand('giveweapon', 'admin', function(xPlayer, args, showError)
if args.playerId.hasWeapon(args.weapon) then
@@ -200,18 +232,22 @@ if not Config.OxInventory then
args.playerId.addWeapon(args.weapon, args.ammo)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Give Weapon /giveweapon Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Weapon", value = args.weapon, inline = true},
{name = "Ammo", value = args.ammo, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Weapon", value = args.weapon, inline = true },
{ name = "Ammo", value = args.ammo, inline = true },
})
end
end, true, {help = TranslateCap('command_giveweapon'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'weapon', help = TranslateCap('command_giveweapon_weapon'), type = 'weapon'},
{name = 'ammo', help = TranslateCap('command_giveweapon_ammo'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_giveweapon'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'weapon', help = TranslateCap('command_giveweapon_weapon'), type = 'weapon' },
{ name = 'ammo', help = TranslateCap('command_giveweapon_ammo'), type = 'number' }
}
})
ESX.RegisterCommand('giveammo', 'admin', function(xPlayer, args, showError)
if not args.playerId.hasWeapon(args.weapon) then
@@ -220,18 +256,22 @@ if not Config.OxInventory then
args.playerId.addWeaponAmmo(args.weapon, args.ammo)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Give Ammunition /giveammo Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Weapon", value = args.weapon, inline = true},
{name = "Ammo", value = args.ammo, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Weapon", value = args.weapon, inline = true },
{ name = "Ammo", value = args.ammo, inline = true },
})
end
end, true, {help = TranslateCap('command_giveweapon'), validate = false, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'weapon', help = TranslateCap('command_giveammo_weapon'), type = 'weapon'},
{name = 'ammo', help = TranslateCap('command_giveammo_ammo'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_giveweapon'),
validate = false,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'weapon', help = TranslateCap('command_giveammo_weapon'), type = 'weapon' },
{ name = 'ammo', help = TranslateCap('command_giveammo_ammo'), type = 'number' }
}
})
ESX.RegisterCommand('giveweaponcomponent', 'admin', function(xPlayer, args, showError)
if args.playerId.hasWeapon(args.weaponName) then
@@ -244,11 +284,11 @@ if not Config.OxInventory then
args.playerId.addWeaponComponent(args.weaponName, args.componentName)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Give Weapon Component /giveweaponcomponent Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Weapon", value = args.weaponName, inline = true},
{name = "Component", value = args.componentName, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Weapon", value = args.weaponName, inline = true },
{ name = "Component", value = args.componentName, inline = true },
})
end
end
@@ -258,30 +298,34 @@ if not Config.OxInventory then
else
showError(TranslateCap('command_giveweaponcomponent_missingweapon'))
end
end, true, {help = TranslateCap('command_giveweaponcomponent'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'weaponName', help = TranslateCap('command_giveweapon_weapon'), type = 'weapon'},
{name = 'componentName', help = TranslateCap('command_giveweaponcomponent_component'), type = 'string'}
}})
end, true, {
help = TranslateCap('command_giveweaponcomponent'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'weaponName', help = TranslateCap('command_giveweapon_weapon'), type = 'weapon' },
{ name = 'componentName', help = TranslateCap('command_giveweaponcomponent_component'), type = 'string' }
}
})
end
ESX.RegisterCommand({'clear', 'cls'}, 'user', function(xPlayer)
ESX.RegisterCommand({ 'clear', 'cls' }, 'user', function(xPlayer)
xPlayer.triggerEvent('chat:clear')
end, false, {help = TranslateCap('command_clear')})
end, false, { help = TranslateCap('command_clear') })
ESX.RegisterCommand({'clearall', 'clsall'}, 'admin', function(xPlayer)
ESX.RegisterCommand({ 'clearall', 'clsall' }, 'admin', function(xPlayer)
TriggerClientEvent('chat:clear', -1)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Clear Chat /clearall Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
})
end
end, true, {help = TranslateCap('command_clearall')})
end, true, { help = TranslateCap('command_clearall') })
ESX.RegisterCommand("refreshjobs", 'admin', function()
ESX.RefreshJobs()
end, true, {help = TranslateCap('command_clearall')})
end, true, { help = TranslateCap('command_clearall') })
if not Config.OxInventory then
ESX.RegisterCommand('clearinventory', 'admin', function(xPlayer, args)
@@ -290,51 +334,66 @@ if not Config.OxInventory then
args.playerId.setInventoryItem(v.name, 0)
end
end
TriggerEvent('esx:playerInventoryCleared',args.playerId)
TriggerEvent('esx:playerInventoryCleared', args.playerId)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Clear Inventory /clearinventory Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
})
end
end, true, {help = TranslateCap('command_clearinventory'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_clearinventory'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
ESX.RegisterCommand('clearloadout', 'admin', function(xPlayer, args)
for i=#args.playerId.loadout, 1, -1 do
for i = #args.playerId.loadout, 1, -1 do
args.playerId.removeWeapon(args.playerId.loadout[i].name)
end
TriggerEvent('esx:playerLoadoutCleared',args.playerId)
TriggerEvent('esx:playerLoadoutCleared', args.playerId)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "/clearloadout Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
})
end
end, true, {help = TranslateCap('command_clearloadout'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_clearloadout'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
end
ESX.RegisterCommand('setgroup', 'admin', function(xPlayer, args)
if not args.playerId then args.playerId = xPlayer.source end
if args.group == "superadmin" then args.group = "admin" print("[^3WARNING^7] ^5Superadmin^7 detected, setting group to ^5admin^7") end
if args.group == "superadmin" then
args.group = "admin"
print("[^3WARNING^7] ^5Superadmin^7 detected, setting group to ^5admin^7")
end
args.playerId.setGroup(args.group)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "/setgroup Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Group", value = args.group, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Group", value = args.group, inline = true },
})
end
end, true, {help = TranslateCap('command_setgroup'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'},
{name = 'group', help = TranslateCap('command_setgroup_group'), type = 'string'},
}})
end, true, {
help = TranslateCap('command_setgroup'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' },
{ name = 'group', help = TranslateCap('command_setgroup_group'), type = 'string' },
}
})
ESX.RegisterCommand('save', 'admin', function(_, args)
Core.SavePlayer(args.playerId)
@@ -345,7 +404,7 @@ end, true, {help = TranslateCap('command_save'), validate = true, arguments = {
ESX.RegisterCommand('saveall', 'admin', function()
Core.SavePlayers()
end, true, {help = TranslateCap('command_saveall')})
end, true, { help = TranslateCap('command_saveall') })
ESX.RegisterCommand('group', {"user", "admin"}, function(xPlayer, _, _)
print(('%s, you are currently: ^5%s^0'):format(xPlayer.getName(), xPlayer.getGroup()))
@@ -355,14 +414,14 @@ ESX.RegisterCommand('job', {"user", "admin"}, function(xPlayer, _, _)
print(('%s, your job is: ^5%s^0 - ^5%s^0'):format(xPlayer.getName(), xPlayer.getJob().name, xPlayer.getJob().grade_label))
end, true)
ESX.RegisterCommand('info', {"user", "admin"}, function(xPlayer)
ESX.RegisterCommand('info', { "user", "admin" }, function(xPlayer)
local job = xPlayer.getJob().name
local jobgrade = xPlayer.getJob().grade_name
print(('^2ID: ^5%s^0 | ^2Name: ^5%s^0 | ^2Group: ^5%s^0 | ^2Job: ^5%s^0'):format(xPlayer.source, xPlayer.getName(), xPlayer.getGroup(), job))
end, true)
ESX.RegisterCommand('coords', "admin", function(xPlayer)
local ped = GetPlayerPed(xPlayer.source)
local ped = GetPlayerPed(xPlayer.source)
local coords = GetEntityCoords(ped, false)
local heading = GetEntityHeading(ped)
print(('Coords - Vector3: ^5%s^0'):format(vector3(coords.x,coords.y,coords.z)))
@@ -373,8 +432,8 @@ ESX.RegisterCommand('tpm', "admin", function(xPlayer)
xPlayer.triggerEvent("esx:tpm")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Admin Teleport /tpm Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
})
end
end, true)
@@ -384,15 +443,19 @@ ESX.RegisterCommand('goto', "admin", function(xPlayer, args)
xPlayer.setCoords(targetCoords)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Admin Teleport /goto Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Target Coords", value = targetCoords, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Target Coords", value = targetCoords, inline = true },
})
end
end, true, {help = TranslateCap('command_goto'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_goto'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
ESX.RegisterCommand('bring', "admin", function(xPlayer, args)
local targetCoords = args.playerId.getCoords()
@@ -400,61 +463,77 @@ ESX.RegisterCommand('bring', "admin", function(xPlayer, args)
args.playerId.setCoords(playerCoords)
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Admin Teleport /bring Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{name = "Target Coords", value = targetCoords, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
{ name = "Target Coords", value = targetCoords, inline = true },
})
end
end, true, {help = TranslateCap('command_bring'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_bring'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
ESX.RegisterCommand('kill', "admin", function(xPlayer, args)
args.playerId.triggerEvent("esx:killPlayer")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Kill Command /kill Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
})
end
end, true, {help = TranslateCap('command_kill'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_kill'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
ESX.RegisterCommand('freeze', "admin", function(xPlayer, args)
args.playerId.triggerEvent('esx:freezePlayer', "freeze")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Admin Freeze /freeze Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
})
end
end, true, {help = TranslateCap('command_freeze'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_freeze'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
ESX.RegisterCommand('unfreeze', "admin", function(xPlayer, args)
args.playerId.triggerEvent('esx:freezePlayer', "unfreeze")
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Admin UnFreeze /unfreeze Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Target", value = args.playerId.name, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Target", value = args.playerId.name, inline = true },
})
end
end, true, {help = TranslateCap('command_unfreeze'), validate = true, arguments = {
{name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player'}
}})
end, true, {
help = TranslateCap('command_unfreeze'),
validate = true,
arguments = {
{ name = 'playerId', help = TranslateCap('commandgeneric_playerid'), type = 'player' }
}
})
ESX.RegisterCommand("noclip", 'admin', function(xPlayer)
xPlayer.triggerEvent('esx:noclip')
if Config.AdminLogging then
ESX.DiscordLogFields("UserActions", "Admin NoClip /noclip Triggered!", "pink", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
})
end
end, false)
+2 -2
View File
@@ -43,7 +43,7 @@ MySQL.ready(function()
if not Config.OxInventory then
local items = MySQL.query.await('SELECT * FROM items')
for _, v in ipairs(items) do
ESX.Items[v.name] = {label = v.label, weight = v.weight, rare = v.rare, canRemove = v.can_remove}
ESX.Items[v.name] = { label = v.label, weight = v.weight, rare = v.rare, canRemove = v.can_remove }
end
else
TriggerEvent('__cfx_export_ox_inventory_Items', function(ref)
@@ -64,7 +64,7 @@ MySQL.ready(function()
ESX.RefreshJobs()
print(('[^2INFO^7] ESX ^5Legacy %s^0 initialized!'):format(GetResourceMetadata(GetCurrentResourceName(), "version", 0)))
StartDBSync()
if Config.EnablePaycheck then
StartPayCheck()
+86 -87
View File
@@ -32,7 +32,7 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion)
TriggerClientEvent('chat:addSuggestion', -1, ('/%s'):format(name), suggestion.help, suggestion.arguments)
end
Core.RegisteredCommands[name] = {group = group, cb = cb, allowConsole = allowConsole, suggestion = suggestion}
Core.RegisteredCommands[name] = { group = group, cb = cb, allowConsole = allowConsole, suggestion = suggestion }
RegisterCommand(name, function(playerId, args)
local command = Core.RegisteredCommands[name]
@@ -100,10 +100,10 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion)
end
elseif v.type == 'any' then
newArgs[v.name] = args[k]
elseif v.type == 'merge' then
elseif v.type == 'merge' then
local lenght = 0
for i = 1, k-1 do
lenght = lenght + string.len(args[i]) +1
for i = 1, k - 1 do
lenght = lenght + string.len(args[i]) + 1
end
local merge = table.concat(args, " ")
@@ -188,7 +188,7 @@ function Core.SavePlayers(cb)
if not next(xPlayers) then
return
end
local startTime <const> = os.time()
local parameters = {}
@@ -217,7 +217,7 @@ function Core.SavePlayers(cb)
if type(cb) == 'function' then
return cb()
end
print(('[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms'):format(#parameters, #parameters > 1 and 'players' or 'player', ESX.Math.Round((os.time() - startTime) / 1000000, 2)))
end
)
@@ -226,35 +226,35 @@ end
ESX.GetPlayers = GetPlayers
local function checkTable(key, val, player, xPlayers)
for valIndex = 1, #val do
local value = val[valIndex]
if not xPlayers[value] then
xPlayers[value] = {}
end
if (key == 'job' and player.job.name == value) or player[key] == value then
xPlayers[value][#xPlayers[value] + 1] = player
end
end
for valIndex = 1, #val do
local value = val[valIndex]
if not xPlayers[value] then
xPlayers[value] = {}
end
if (key == 'job' and player.job.name == value) or player[key] == value then
xPlayers[value][#xPlayers[value] + 1] = player
end
end
end
function ESX.GetExtendedPlayers(key, val)
if not key then return ESX.Players end
if not key then return ESX.Players end
local xPlayers = {}
if type(val) == "table" then
for _, v in pairs(ESX.Players) do
checkTable(key, val, v, xPlayers)
end
else
for _, v in pairs(ESX.Players) do
if (key == 'job' and v.job.name == val) or v[key] == val then
xPlayers[#xPlayers + 1] = v
end
end
end
local xPlayers = {}
if type(val) == "table" then
for _, v in pairs(ESX.Players) do
checkTable(key, val, v, xPlayers)
end
else
for _, v in pairs(ESX.Players) do
if (key == 'job' and v.job.name == val) or v[key] == val then
xPlayers[#xPlayers + 1] = v
end
end
end
return xPlayers
return xPlayers
end
function ESX.GetPlayerFromId(source)
@@ -284,7 +284,7 @@ end
function ESX.GetVehicleType(model, player, cb)
model = type(model) == 'string' and joaat(model) or model
if Core.vehicleTypesByModel[model] then
return cb(Core.vehicleTypesByModel[model])
end
@@ -296,50 +296,49 @@ function ESX.GetVehicleType(model, player, cb)
end
function ESX.DiscordLog(name, title, color, message)
local webHook = Config.DiscordLogs.Webhooks[name] or Config.DiscordLogs.Webhooks.default
local embedData = {{
['title'] = title,
['color'] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default,
['footer'] = {
['text'] = "| ESX Logs | " .. os.date(),
['icon_url'] = "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png"
},
['description'] = message,
['author'] = {
['name'] = "ESX Framework",
['icon_url'] = "https://cdn.discordapp.com/emojis/939245183621558362.webp?size=128&quality=lossless"
}
}}
local embedData = { {
['title'] = title,
['color'] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default,
['footer'] = {
['text'] = "| ESX Logs | " .. os.date(),
['icon_url'] = "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png"
},
['description'] = message,
['author'] = {
['name'] = "ESX Framework",
['icon_url'] = "https://cdn.discordapp.com/emojis/939245183621558362.webp?size=128&quality=lossless"
}
} }
PerformHttpRequest(webHook, nil, 'POST', json.encode({
username = 'Logs',
embeds = embedData
username = 'Logs',
embeds = embedData
}), {
['Content-Type'] = 'application/json'
['Content-Type'] = 'application/json'
})
end
function ESX.DiscordLogFields(name, title, color, fields)
local webHook = Config.DiscordLogs.Webhooks[name] or Config.DiscordLogs.Webhooks.default
local embedData = {{
['title'] = title,
['color'] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default,
['footer'] = {
['text'] = "| ESX Logs | " .. os.date(),
['icon_url'] = "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png"
},
['fields'] = fields,
['description'] = "",
['author'] = {
['name'] = "ESX Framework",
['icon_url'] = "https://cdn.discordapp.com/emojis/939245183621558362.webp?size=128&quality=lossless"
}
}}
local embedData = { {
['title'] = title,
['color'] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default,
['footer'] = {
['text'] = "| ESX Logs | " .. os.date(),
['icon_url'] = "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png"
},
['fields'] = fields,
['description'] = "",
['author'] = {
['name'] = "ESX Framework",
['icon_url'] = "https://cdn.discordapp.com/emojis/939245183621558362.webp?size=128&quality=lossless"
}
} }
PerformHttpRequest(webHook, nil, 'POST', json.encode({
username = 'Logs',
embeds = embedData
username = 'Logs',
embeds = embedData
}), {
['Content-Type'] = 'application/json'
['Content-Type'] = 'application/json'
})
end
@@ -348,30 +347,30 @@ end
--- @param label string
--- @param grades table
function ESX.CreateJob(name, label, grades)
if not name then
return print('[^3WARNING^7] missing argument `name(string)` while creating a job')
end
if not label then
return print('[^3WARNING^7] missing argument `label(string)` while creating a job')
end
if not grades or not next(grades) then
return print('[^3WARNING^7] missing argument `grades(table)` while creating a job!')
end
if not name then
return print('[^3WARNING^7] missing argument `name(string)` while creating a job')
end
local parameters = {}
local job = {name = name, label = label, grades = {}}
if not label then
return print('[^3WARNING^7] missing argument `label(string)` while creating a job')
end
for _,v in pairs(grades) do
job.grades[tostring(v.grade)] = {job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {}}
parameters[#parameters + 1] = { name, v.grade, v.name, v.label, v.salary}
end
if not grades or not next(grades) then
return print('[^3WARNING^7] missing argument `grades(table)` while creating a job!')
end
MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {name, label})
MySQL.prepare('INSERT INTO job_grades (job_name, grade, name, label, salary) VALUES (?, ?, ?, ?, ?)', parameters)
ESX.Jobs[name] = job
local parameters = {}
local job = { name = name, label = label, grades = {} }
for _, v in pairs(grades) do
job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {} }
parameters[#parameters + 1] = { name, v.grade, v.name, v.label, v.salary }
end
MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', { name, label })
MySQL.prepare('INSERT INTO job_grades (job_name, grade, name, label, salary) VALUES (?, ?, ?, ?, ?)', parameters)
ESX.Jobs[name] = job
end
function ESX.RefreshJobs()
@@ -473,7 +472,7 @@ if not Config.OxInventory then
local xPlayer = ESX.Players[playerId]
local coords = xPlayer.getCoords()
Core.Pickups[pickupId] = {type = type, name = name, count = count, label = label, coords = coords}
Core.Pickups[pickupId] = { type = type, name = name, count = count, label = label, coords = coords }
if type == 'item_weapon' then
Core.Pickups[pickupId].components = components
@@ -6,7 +6,6 @@ RegisterServerEvent('esx:enteredVehicle')
RegisterServerEvent('esx:exitedVehicle')
if Config.EnableDebug then
AddEventHandler('esx:playerPedChanged', function(netId)
print('esx:playerPedChanged', source, netId)
end)
@@ -30,5 +29,4 @@ if Config.EnableDebug then
AddEventHandler('esx:exitedVehicle', function(plate, seat, displayName, netId)
print('esx:exitedVehicle', 'source', source, 'plate', plate, 'seat', seat, 'displayName', displayName, 'netId', netId)
end)
end
end
@@ -35,7 +35,7 @@ end
RegisterNetEvent('esx:clientCallback', function(requestId, invoker, ...)
if not clientRequests[requestId] then
return print(('[^1ERROR^7] Client Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker))
return print(('[^1ERROR^7] Client Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker))
end
clientRequests[requestId](...)
+5 -6
View File
@@ -27,12 +27,12 @@ local function getNearbyPlayers(source, closest, distance, ignore)
local dist = #(source - coords)
if dist <= distance then
count = count + 1
result[count] = {id = xPlayer.source, ped = NetworkGetNetworkIdFromEntity(entity), coords = coords, dist = dist}
result[count] = { id = xPlayer.source, ped = NetworkGetNetworkIdFromEntity(entity), coords = coords, dist = dist }
end
else
local dist = #(source - coords)
if dist <= (result.dist or distance) then
result = {id = xPlayer.source, ped = NetworkGetNetworkIdFromEntity(entity), coords = coords, dist = dist}
result = { id = xPlayer.source, ped = NetworkGetNetworkIdFromEntity(entity), coords = coords, dist = dist }
end
end
end
@@ -83,16 +83,15 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb)
end)
end
---@param model number|string
---@param coords vector3|table
---@param heading number
---@param cb function
function ESX.OneSync.SpawnObject(model, coords, heading, cb)
if type(model) == 'string' then model = joaat(model) end
local coords = type(coords) == "vector3" and coords or vector3(coords.x, coords.y, coords.z)
local objectCoords = type(coords) == "vector3" and coords or vector3(coords.x, coords.y, coords.z)
CreateThread(function()
local entity = CreateObject(model, coords, true, true)
local entity = CreateObject(model, objectCoords, true, true)
while not DoesEntityExist(entity) do Wait(50) end
SetEntityHeading(entity, heading)
cb(NetworkGetNetworkIdFromEntity(entity))
@@ -133,7 +132,7 @@ local function getNearbyEntities(entities, coords, modelFilter, maxDistance, isP
if not modelFilter or modelFilter[GetEntityModel(entity)] then
local entityCoords = GetEntityCoords(entity)
if not maxDistance or #(coords - entityCoords) <= maxDistance then
nearbyEntities[#nearbyEntities+1] = NetworkGetNetworkIdFromEntity(entity)
nearbyEntities[#nearbyEntities + 1] = NetworkGetNetworkIdFromEntity(entity)
end
end
end
+18 -18
View File
@@ -1,7 +1,7 @@
function StartPayCheck()
CreateThread(function()
while true do
Wait(Config.PaycheckInterval)
CreateThread(function()
while true do
Wait(Config.PaycheckInterval)
for player, xPlayer in pairs(ESX.Players) do
local jobLabel = xPlayer.job.label
local job = xPlayer.job.grade_name
@@ -14,23 +14,23 @@ function StartPayCheck()
'CHAR_BANK_MAZE', 9)
if Config.LogPaycheck then
ESX.DiscordLogFields("Paycheck", "Paycheck - Unemployment Benefits", "green", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Amount", value = salary, inline = true}
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Amount", value = salary, inline = true }
})
end
elseif Config.EnableSocietyPayouts then -- possibly a society
TriggerEvent('esx_society:getSociety', xPlayer.job.name, function(society)
if society ~= nil then -- verified society
if society ~= nil then -- verified society
TriggerEvent('esx_addonaccount:getSharedAccount', society.account, function(account)
if account.money >= salary then -- does the society money to pay its employees?
xPlayer.addAccountMoney('bank', salary, "Paycheck")
account.removeMoney(salary)
if Config.LogPaycheck then
ESX.DiscordLogFields("Paycheck", "Paycheck - "..jobLabel, "green", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Amount", value = salary, inline = true}
ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", {
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Amount", value = salary, inline = true }
})
end
@@ -43,10 +43,10 @@ function StartPayCheck()
else -- not a society
xPlayer.addAccountMoney('bank', salary, "Paycheck")
if Config.LogPaycheck then
ESX.DiscordLogFields("Paycheck", "Paycheck - "..jobLabel, "green", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Amount", value = salary, inline = true}
ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", {
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Amount", value = salary, inline = true }
})
end
TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary),
@@ -57,9 +57,9 @@ function StartPayCheck()
xPlayer.addAccountMoney('bank', salary, "Paycheck")
if Config.LogPaycheck then
ESX.DiscordLogFields("Paycheck", "Paycheck - Generic", "green", {
{name = "Player", value = xPlayer.name, inline = true},
{name = "ID", value = xPlayer.source, inline = true},
{name = "Amount", value = salary, inline = true}
{ name = "Player", value = xPlayer.name, inline = true },
{ name = "ID", value = xPlayer.source, inline = true },
{ name = "Amount", value = salary, inline = true }
})
end
TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary),
+1 -1
View File
@@ -1 +1 @@
PREVIEW_KEYBIND = "LMENU"
PREVIEW_KEYBIND = "LMENU"
+2 -2
View File
@@ -4,7 +4,7 @@ game 'gta5'
author 'ESX-Framework & Brayden'
description 'Offical ESX Legacy Context Menu'
lua54 'yes'
version '1.9.4'
version '1.9.5'
ui_page 'index.html'
@@ -21,4 +21,4 @@ files {
dependencies {
'es_extended'
}
}
+83 -95
View File
@@ -4,14 +4,14 @@ local Debug = ESX.GetConfig().EnableDebug
-- Global functions
-- [ Post | Open | Closed ]
function Post(fn,...)
function Post(fn, ...)
SendNUIMessage({
func = fn,
args = {...}
args = { ... }
})
end
function Open(position,eles,onSelect,onClose,canClose)
function Open(position, eles, onSelect, onClose, canClose)
local canClose = canClose == nil and true or canClose
activeMenu = {
position = position,
@@ -21,20 +21,20 @@ function Open(position,eles,onSelect,onClose,canClose)
onClose = onClose
}
LocalPlayer.state:set("context:active",true)
LocalPlayer.state:set("context:active", true)
Post("Open",eles,position)
Post("Open", eles, position)
end
function Closed()
SetNuiFocus(false,false)
SetNuiFocus(false, false)
local menu = activeMenu
local cb = menu.onClose
activeMenu = nil
LocalPlayer.state:set("context:active",false)
LocalPlayer.state:set("context:active", false)
if cb then
cb(menu)
@@ -44,14 +44,14 @@ end
-- Exports
-- [ Preview | Open | Close ]
exports("Preview",Open)
exports("Preview", Open)
exports("Open",function(...)
exports("Open", function(...)
Open(...)
SetNuiFocus(true,true)
SetNuiFocus(true, true)
end)
exports("Close",function()
exports("Close", function()
if not activeMenu then
return
end
@@ -61,7 +61,7 @@ exports("Close",function()
Closed()
end)
exports("Refresh",function(eles,position)
exports("Refresh", function(eles, position)
if not activeMenu then
return
end
@@ -69,13 +69,13 @@ exports("Refresh",function(eles,position)
activeMenu.eles = eles or activeMenu.eles
activeMenu.position = position or activeMenu.position
Post("Open",activeMenu.eles,activeMenu.position)
Post("Open", activeMenu.eles, activeMenu.position)
end)
-- NUI Callbacks
-- [ closed | selected | changed ]
RegisterNUICallback("closed",function(_,cb)
RegisterNUICallback("closed", function(_, cb)
if not activeMenu or (activeMenu and not activeMenu.canClose) then
return cb(false)
end
@@ -83,20 +83,15 @@ RegisterNUICallback("closed",function(_,cb)
Closed()
end)
RegisterNUICallback("selected",function(data,cb)
if not activeMenu
or not activeMenu.onSelect
or not data.index
then
RegisterNUICallback("selected", function(data, cb)
if not activeMenu or not activeMenu.onSelect or not data.index then
return
end
local index = tonumber(data.index)
local ele = activeMenu.eles[index]
if not ele
or ele.input
then
if not ele or ele.input then
return
end
@@ -104,20 +99,15 @@ RegisterNUICallback("selected",function(data,cb)
if cb then cb('ok') end
end)
RegisterNUICallback("changed",function(data,cb)
if not activeMenu
or not data.index
or not data.value
then
RegisterNUICallback("changed", function(data, cb)
if not activeMenu or not data.index or not data.value then
return
end
local index = tonumber(data.index)
local ele = activeMenu.eles[index]
if not ele
or not ele.input
then
if not ele or not ele.input then
return
end
@@ -125,11 +115,11 @@ RegisterNUICallback("changed",function(data,cb)
ele.inputValue = tonumber(data.value)
if ele.inputMin then
ele.inputValue = math.max(ele.inputMin,ele.inputValue)
ele.inputValue = math.max(ele.inputMin, ele.inputValue)
end
if ele.inputMax then
ele.inputValue = math.min(ele.inputMax,ele.inputValue)
ele.inputValue = math.min(ele.inputMax, ele.inputValue)
end
elseif ele.inputType == "text" then
ele.inputValue = data.value
@@ -142,22 +132,20 @@ end)
-- Keybind
local function focusPreview()
if not activeMenu
or not activeMenu.onSelect
then
if not activeMenu or not activeMenu.onSelect then
return
end
SetNuiFocus(true,true)
SetNuiFocus(true, true)
end
if PREVIEW_KEYBIND then
RegisterCommand("previewContext",focusPreview)
RegisterCommand("previewContext", focusPreview)
RegisterKeyMapping("previewContext","Preview Active Context","keyboard",PREVIEW_KEYBIND)
RegisterKeyMapping("previewContext", "Preview Active Context", "keyboard", PREVIEW_KEYBIND)
end
exports("focusPreview",focusPreview)
exports("focusPreview", focusPreview)
-- Debug/Test
-- Commands:
@@ -167,31 +155,31 @@ if Debug then
local position = "right"
local eles = {
{
unselectable=true,
icon="fas fa-info-circle",
title="Unselectable Item (Header/Label?)",
},
{
icon="fas fa-check",
title="Item A",
description="Some description here. Add some words to make the text overflow."
},
{
disabled=true,
icon="fas fa-times",
title="Disabled Item",
description="Some description here. Add some words to make the text overflow."
},
{
icon="fas fa-check",
title="Item B",
description="Some description here. Add some words to make the text overflow."
},
{
unselectable = true,
icon = "fas fa-info-circle",
title = "Unselectable Item (Header/Label?)",
},
{
icon = "fas fa-check",
title = "Item A",
description = "Some description here. Add some words to make the text overflow."
},
{
disabled = true,
icon = "fas fa-times",
title = "Disabled Item",
description = "Some description here. Add some words to make the text overflow."
},
{
icon = "fas fa-check",
title = "Item B",
description = "Some description here. Add some words to make the text overflow."
},
}
local function onSelect(menu,ele)
print("Ele selected",ele.title)
local function onSelect(menu, ele)
print("Ele selected", ele.title)
if ele.name == "close" then
exports["esx_context"]:Close()
@@ -201,9 +189,9 @@ if Debug then
return
end
for _,ele in ipairs(menu.eles) do
for _, ele in ipairs(menu.eles) do
if ele.input then
print(ele.name,ele.inputType,ele.inputValue)
print(ele.name, ele.inputType, ele.inputValue)
end
end
@@ -214,51 +202,51 @@ if Debug then
print("Menu closed.")
end
RegisterCommand("ctx:preview",function()
exports["esx_context"]:Preview(position,eles)
RegisterCommand("ctx:preview", function()
exports["esx_context"]:Preview(position, eles)
end)
RegisterCommand("ctx:open",function()
exports["esx_context"]:Open(position,eles,onSelect,onClose)
RegisterCommand("ctx:open", function()
exports["esx_context"]:Open(position, eles, onSelect, onClose)
end)
RegisterCommand("ctx:close",function()
RegisterCommand("ctx:close", function()
exports["esx_context"]:Close()
end)
RegisterCommand("ctx:form",function()
RegisterCommand("ctx:form", function()
local eles = {
{
unselectable=true,
icon="fas fa-info-circle",
title="Unselectable Item (Header/Label?)",
unselectable = true,
icon = "fas fa-info-circle",
title = "Unselectable Item (Header/Label?)",
},
{
icon="",
title="Input Text",
input=true,
inputType="text",
inputPlaceholder="Placeholder...",
name="firstname",
icon = "",
title = "Input Text",
input = true,
inputType = "text",
inputPlaceholder = "Placeholder...",
name = "firstname",
},
{
icon="",
title="Input Text",
input=true,
inputType="text",
inputPlaceholder="Placeholder...",
name="lastname",
icon = "",
title = "Input Text",
input = true,
inputType = "text",
inputPlaceholder = "Placeholder...",
name = "lastname",
},
{
icon="",
title="Input Number",
input=true,
inputType="number",
inputPlaceholder="Placeholder...",
inputValue=0,
inputMin=0,
inputMax=50,
name="age",
icon = "",
title = "Input Number",
input = true,
inputType = "number",
inputPlaceholder = "Placeholder...",
inputValue = 0,
inputMin = 0,
inputMax = 50,
name = "age",
},
{
icon = "fas fa-check",
@@ -267,6 +255,6 @@ if Debug then
}
}
exports["esx_context"]:Open(position,eles,onSelect,onClose)
exports["esx_context"]:Open(position, eles, onSelect, onClose)
end)
end
+1 -1
View File
@@ -39,7 +39,7 @@ if not Config.UseDeferrals then
ClearTimecycleModifier()
end
SendNUIMessage({type = "enableui", enable = state})
SendNUIMessage({ type = "enableui", enable = state })
end
RegisterNetEvent('esx_identity:showRegisterIdentity', function()
+12 -12
View File
@@ -1,23 +1,23 @@
Config = {}
Config.Locale = GetConvar('esx:locale', 'en')
Config = {}
Config.Locale = GetConvar('esx:locale', 'en')
-- [Config.EnableCommands]
-- Enables Commands Such As /char and /chardel
Config.EnableCommands = ESX.GetConfig().EnableDebug
Config.EnableCommands = ESX.GetConfig().EnableDebug
-- EXPERIMENTAL Character Registration Method
Config.UseDeferrals = false
Config.UseDeferrals = false
-- These values are for the date format in the registration menu
-- Choices: DD/MM/YYYY | MM/DD/YYYY | YYYY/MM/DD
Config.DateFormat = 'DD/MM/YYYY'
Config.DateFormat = 'DD/MM/YYYY'
-- These values are for the second input validation in server/main.lua
Config.MaxNameLength = 20 -- Max Name Length.
Config.MinHeight = 120 -- 120 cm lowest height
Config.MaxHeight = 220 -- 220 cm max height.
Config.LowestYear = 1900 -- 112 years old is the oldest you can be.
Config.HighestYear = 2005 -- 18 years old is the youngest you can be.
Config.MaxNameLength = 20 -- Max Name Length.
Config.MinHeight = 120 -- 120 cm lowest height
Config.MaxHeight = 220 -- 220 cm max height.
Config.LowestYear = 1900 -- 112 years old is the oldest you can be.
Config.HighestYear = 2005 -- 18 years old is the youngest you can be.
Config.FullCharDelete = true -- Delete all reference to character.
Config.EnableDebugging = ESX.GetConfig().EnableDebug -- prints for debugging :)
Config.FullCharDelete = true -- Delete all reference to character.
Config.EnableDebugging = ESX.GetConfig().EnableDebug -- prints for debugging :)
+2 -2
View File
@@ -4,7 +4,7 @@ game 'gta5'
description 'ESX Identity'
lua54 'yes'
version '1.9.4'
version '1.9.5'
shared_scripts {
'@es_extended/imports.lua',
@@ -32,4 +32,4 @@ files {
'html/css/style.css',
}
dependency 'es_extended'
dependency 'es_extended'
+37 -38
View File
@@ -1,39 +1,38 @@
Locales["da"] = {
["show_active_character"] = "Vis aktiv karakter",
["active_character"] = "Aktiv karakter: %s",
["error_active_character"] = "Der opstod en fejl under indhentning af dine data.",
["delete_character"] = "Slet din nuværende karakter.",
["deleted_character"] = "Karakter slettet",
["error_delete_character"] = "Der opstod et problem med at slette din karakter.",
["thank_you_for_registering"] = "Registreringen lykkedes. God fornøjelse!",
["debug_xPlayer_get_first_name"] = "Returnerer dit fornavn",
["debug_xPlayer_get_last_name"] = "Returnerer dit efternavn",
["debug_xPlayer_get_full_name"] = "Returnerer dit fulde navn",
["debug_xPlayer_get_sex"] = "Returnerer dit køn",
["debug_xPlayer_get_dob"] = "Returnerer din fødselsdato",
["debug_xPlayer_get_height"] = "Giver din højde tilbage",
["error_debug_xPlayer_get_first_name"] = "Der opstod et problem med at få dit fornavn.",
["error_debug_xPlayer_get_last_name"] = "Der opstod et problem med at få dit efternavn.",
["error_debug_xPlayer_get_full_name"] = "Der opstod et problem under indhentning af dit fulde navn.",
["error_debug_xPlayer_get_sex"] = "Der var et problem med at få dit sex.",
["error_debug_xPlayer_get_dob"] = "Der var et problem med at få din fødselsdato.",
["error_debug_xPlayer_get_height"] = "Der var et problem med at få din højde.",
["return_debug_xPlayer_get_first_name"] = "Fornavn: %s",
["return_debug_xPlayer_get_last_name"] = "Efternavn: %s",
["return_debug_xPlayer_get_full_name"] = "Fulde Navn: %s",
["return_debug_xPlayer_get_sex"] = "Køn: %s",
["return_debug_xPlayer_get_dob"] = "Fødselsdato: %s",
["return_debug_xPlayer_get_height"] = "Højde: %s Tommer",
["data_incorrect"] = "Ugyldige data. Prøv venligst igen.",
["invalid_format"] = "Ugyldigt dataformat. Prøv venligst igen.",
["no_identifier"] = "[ESX Identitet]\nDer var et problem under indlæsning af din karakter!\nFejlkode: identifikator mangler\n\nDette skyldes, at din identifikator mangler. Venligst vend tilbage senere eller rapporter dette problem til serverejeren.",
["missing_identity"] = "[ESX Identitet]\nDer var et problem med at indlæse din karakter!\nFejlkode: identitet mangler\n\nDet ser ud til, at din identitet mangler, prøv at oprette forbindelse igen.",
["deleted_identity"] = "Tegn slettet. Tilmeld dig igen for at oprette en ny karakter.",
["already_registered"] = "Du har allerede tilmeldt dig.",
["invalid_firstname_format"] = "Ugyldigt format (fornavn): Prøv venligst igen.",
["invalid_lastname_format"] = "Ugyldigt format (efternavn): Prøv igen.",
["invalid_dob_format"] = "Ugyldigt format (DOB): Prøv venligst igen.",
["invalid_sex_format"] = "Ugyldigt format (køn): Prøv venligst igen.",
["invalid_height_format"] = "Ugyldigt format (højde): Prøv venligst igen.",
}
["show_active_character"] = "Vis aktiv karakter",
["active_character"] = "Aktiv karakter: %s",
["error_active_character"] = "Der opstod en fejl under indhentning af dine data.",
["delete_character"] = "Slet din nuværende karakter.",
["deleted_character"] = "Karakter slettet",
["error_delete_character"] = "Der opstod et problem med at slette din karakter.",
["thank_you_for_registering"] = "Registreringen lykkedes. God fornøjelse!",
["debug_xPlayer_get_first_name"] = "Returnerer dit fornavn",
["debug_xPlayer_get_last_name"] = "Returnerer dit efternavn",
["debug_xPlayer_get_full_name"] = "Returnerer dit fulde navn",
["debug_xPlayer_get_sex"] = "Returnerer dit køn",
["debug_xPlayer_get_dob"] = "Returnerer din fødselsdato",
["debug_xPlayer_get_height"] = "Giver din højde tilbage",
["error_debug_xPlayer_get_first_name"] = "Der opstod et problem med at få dit fornavn.",
["error_debug_xPlayer_get_last_name"] = "Der opstod et problem med at få dit efternavn.",
["error_debug_xPlayer_get_full_name"] = "Der opstod et problem under indhentning af dit fulde navn.",
["error_debug_xPlayer_get_sex"] = "Der var et problem med at få dit sex.",
["error_debug_xPlayer_get_dob"] = "Der var et problem med at få din fødselsdato.",
["error_debug_xPlayer_get_height"] = "Der var et problem med at få din højde.",
["return_debug_xPlayer_get_first_name"] = "Fornavn: %s",
["return_debug_xPlayer_get_last_name"] = "Efternavn: %s",
["return_debug_xPlayer_get_full_name"] = "Fulde Navn: %s",
["return_debug_xPlayer_get_sex"] = "Køn: %s",
["return_debug_xPlayer_get_dob"] = "Fødselsdato: %s",
["return_debug_xPlayer_get_height"] = "Højde: %s Tommer",
["data_incorrect"] = "Ugyldige data. Prøv venligst igen.",
["invalid_format"] = "Ugyldigt dataformat. Prøv venligst igen.",
["no_identifier"] = "[ESX Identitet]\nDer var et problem under indlæsning af din karakter!\nFejlkode: identifikator mangler\n\nDette skyldes, at din identifikator mangler. Venligst vend tilbage senere eller rapporter dette problem til serverejeren.",
["missing_identity"] = "[ESX Identitet]\nDer var et problem med at indlæse din karakter!\nFejlkode: identitet mangler\n\nDet ser ud til, at din identitet mangler, prøv at oprette forbindelse igen.",
["deleted_identity"] = "Tegn slettet. Tilmeld dig igen for at oprette en ny karakter.",
["already_registered"] = "Du har allerede tilmeldt dig.",
["invalid_firstname_format"] = "Ugyldigt format (fornavn): Prøv venligst igen.",
["invalid_lastname_format"] = "Ugyldigt format (efternavn): Prøv igen.",
["invalid_dob_format"] = "Ugyldigt format (DOB): Prøv venligst igen.",
["invalid_sex_format"] = "Ugyldigt format (køn): Prøv venligst igen.",
["invalid_height_format"] = "Ugyldigt format (højde): Prøv venligst igen.",
}
+36 -36
View File
@@ -1,38 +1,38 @@
Locales["es"] = {
["show_active_character"] = "Mostrar personaje actual",
["active_character"] = "Personaje actual: %s",
["error_active_character"] = "Se produjo un error al recuperar tu nombre. Por favor contacta con un administrador",
["delete_character"] = "Elimina tu personaje y crea uno nuevo",
["deleted_character"] = "Tu personaje ha sido eliminado",
["error_delete_character"] = "Se produjo un error al eliminar tu personaje. Por favor contacta con un administrador",
["thank_you_for_registering"] = "Gracias por registrarte. Bienvenido a la ciudad",
["debug_xPlayer_get_first_name"] = "Devuelve tu nombre",
["debug_xPlayer_get_last_name"] = "Devuelve tu apellido",
["debug_xPlayer_get_full_name"] = "Devuelve tu nombre completo",
["debug_xPlayer_get_sex"] = "Devuelve tu sexo",
["debug_xPlayer_get_dob"] = "Devuelve tu fecha de nacimiento",
["debug_xPlayer_get_height"] = "Devuelve tu altura",
["error_debug_xPlayer_get_first_name"] = "Se produjo un error al recuperar tu nombre",
["error_debug_xPlayer_get_last_name"] = "Se produjo un error al recuperar tu apellido",
["error_debug_xPlayer_get_full_name"] = "Se produjo un error al recuperar tu nombre completo",
["error_debug_xPlayer_get_sex"] = "Se produjo un error al recuperar tu sexo",
["error_debug_xPlayer_get_dob"] = "Se produjo un error al recuperar tu fecha de nacimiento",
["error_debug_xPlayer_get_height"] = "Se produjo un error al recuperar tu altura",
["return_debug_xPlayer_get_first_name"] = "Nombre: %s",
["return_debug_xPlayer_get_last_name"] = "Apellido: %s",
["return_debug_xPlayer_get_full_name"] = "Nombre completo: %s",
["return_debug_xPlayer_get_sex"] = "Sexo: %s",
["return_debug_xPlayer_get_dob"] = "Fecha de nacimiento: %s",
["return_debug_xPlayer_get_height"] = "Altura: %s centímetros",
["data_incorrect"] = "Datos introducidos de forma incorrecta. Inténtalo de nuevo",
["invalid_format"] = "Datos con formato incorrecto. Inténtalo de nuevo",
["no_identifier"] = "¡Se ha producido un error al cargar tu personaje!\nCódigo de error: identifier-missing\n\nSe desconoce la causa de este error, no se pudo encontrar su identificador. Intentalo más tarde o informa de este problema al equipo administrativo del servidor",
["missing_identity"] = "¡Se ha producido un error al cargar tu personaje!\nCódigo de error: identity-missing\n\nParece que falta su identidad, intenta conectarte nuevamente",
["deleted_identity"] = "Tu personaje ha sido borrado. Vuelva a iniciar sesión para crear un nuevo personaje",
["already_registered"] = "Ya estás registrado.",
["invalid_firstname_format"] = "Formato Inválido (Nombre): Inténtalo de nuevo.",
["invalid_lastname_format"] = "Formato Inválido (Apellido): Inténtalo de nuevo.",
["invalid_dob_format"] = "Formato Inválido (Fec. Nac.): Inténtalo de nuevo.",
["invalid_sex_format"] = "Formato Inválido (Sexo): Inténtalo de nuevo.",
["invalid_height_format"] = "Formato Inválido (Altura): Inténtalo de nuevo.",
["show_active_character"] = "Mostrar personaje actual",
["active_character"] = "Personaje actual: %s",
["error_active_character"] = "Se produjo un error al recuperar tu nombre. Por favor contacta con un administrador",
["delete_character"] = "Elimina tu personaje y crea uno nuevo",
["deleted_character"] = "Tu personaje ha sido eliminado",
["error_delete_character"] = "Se produjo un error al eliminar tu personaje. Por favor contacta con un administrador",
["thank_you_for_registering"] = "Gracias por registrarte. Bienvenido a la ciudad",
["debug_xPlayer_get_first_name"] = "Devuelve tu nombre",
["debug_xPlayer_get_last_name"] = "Devuelve tu apellido",
["debug_xPlayer_get_full_name"] = "Devuelve tu nombre completo",
["debug_xPlayer_get_sex"] = "Devuelve tu sexo",
["debug_xPlayer_get_dob"] = "Devuelve tu fecha de nacimiento",
["debug_xPlayer_get_height"] = "Devuelve tu altura",
["error_debug_xPlayer_get_first_name"] = "Se produjo un error al recuperar tu nombre",
["error_debug_xPlayer_get_last_name"] = "Se produjo un error al recuperar tu apellido",
["error_debug_xPlayer_get_full_name"] = "Se produjo un error al recuperar tu nombre completo",
["error_debug_xPlayer_get_sex"] = "Se produjo un error al recuperar tu sexo",
["error_debug_xPlayer_get_dob"] = "Se produjo un error al recuperar tu fecha de nacimiento",
["error_debug_xPlayer_get_height"] = "Se produjo un error al recuperar tu altura",
["return_debug_xPlayer_get_first_name"] = "Nombre: %s",
["return_debug_xPlayer_get_last_name"] = "Apellido: %s",
["return_debug_xPlayer_get_full_name"] = "Nombre completo: %s",
["return_debug_xPlayer_get_sex"] = "Sexo: %s",
["return_debug_xPlayer_get_dob"] = "Fecha de nacimiento: %s",
["return_debug_xPlayer_get_height"] = "Altura: %s centímetros",
["data_incorrect"] = "Datos introducidos de forma incorrecta. Inténtalo de nuevo",
["invalid_format"] = "Datos con formato incorrecto. Inténtalo de nuevo",
["no_identifier"] = "¡Se ha producido un error al cargar tu personaje!\nCódigo de error: identifier-missing\n\nSe desconoce la causa de este error, no se pudo encontrar su identificador. Intentalo más tarde o informa de este problema al equipo administrativo del servidor",
["missing_identity"] = "¡Se ha producido un error al cargar tu personaje!\nCódigo de error: identity-missing\n\nParece que falta su identidad, intenta conectarte nuevamente",
["deleted_identity"] = "Tu personaje ha sido borrado. Vuelva a iniciar sesión para crear un nuevo personaje",
["already_registered"] = "Ya estás registrado.",
["invalid_firstname_format"] = "Formato Inválido (Nombre): Inténtalo de nuevo.",
["invalid_lastname_format"] = "Formato Inválido (Apellido): Inténtalo de nuevo.",
["invalid_dob_format"] = "Formato Inválido (Fec. Nac.): Inténtalo de nuevo.",
["invalid_sex_format"] = "Formato Inválido (Sexo): Inténtalo de nuevo.",
["invalid_height_format"] = "Formato Inválido (Altura): Inténtalo de nuevo.",
}
+37 -37
View File
@@ -1,38 +1,38 @@
Locales["fr"] = {
["show_active_character"] = "Afficher le personnage actif",
["active_character"] = "Personnage actif: %s",
["error_active_character"] = "Une erreur s'est produite lors de l'obtention de vos données.",
["delete_character"] = "Supprimez votre personnage actuel.",
["deleted_character"] = "Caractère supprimé",
["error_delete_character"] = "Un problème est survenu lors de la suppression de votre personnage.",
["thank_you_for_registering"] = "Inscription réussi. Profitez!",
["debug_xPlayer_get_first_name"] = "Renvoie votre prénom",
["debug_xPlayer_get_last_name"] = "Renvoie votre nom de famille",
["debug_xPlayer_get_full_name"] = "Renvoie votre nom complet",
["debug_xPlayer_get_sex"] = "Renvoie votre sexe",
["debug_xPlayer_get_dob"] = "Renvoie votre date de naissance",
["debug_xPlayer_get_height"] = "Renvoie votre taille",
["error_debug_xPlayer_get_first_name"] = "Un problème est survenu lors de l'obtention de votre prénom.",
["error_debug_xPlayer_get_last_name"] = "Un problème est survenu lors de l'obtention de votre nom de famille.",
["error_debug_xPlayer_get_full_name"] = "Un problème est survenu lors de l'obtention de votre nom complet.",
["error_debug_xPlayer_get_sex"] = "Il y a eu un problème lors de l'obtention de votre sexe.",
["error_debug_xPlayer_get_dob"] = "Un problème est survenu lors de l'obtention de votre date de naissance.",
["error_debug_xPlayer_get_height"] = "Un problème est survenu lors de l'obtention de votre taille.",
["return_debug_xPlayer_get_first_name"] = "Prénom: %s",
["return_debug_xPlayer_get_last_name"] = "Nom de famille: %s",
["return_debug_xPlayer_get_full_name"] = "Nom: %s",
["return_debug_xPlayer_get_sex"] = "Sexe: %s",
["return_debug_xPlayer_get_dob"] = "Date de naissance: %s",
["return_debug_xPlayer_get_height"] = "Hauteur: %s pouces",
["data_incorrect"] = "Données non valides, veuillez réessayer.",
["invalid_format"] = "Format de données non valide, veuillez réessayer.",
["no_identifier"] = "[ESX Identity]\nIl y a eu un problème lors du chargement de votre personnage !\nCode d'erreur : identifiant manquant\n\nCela est dû au fait que votre identifiant est manquant. Veuillez revenir plus tard ou signaler ce problème au propriétaire du serveur.",
["missing_identity"] = "[ESX Identity]Un problème est survenu lors du chargement de votre personnage !Code d'erreur : identité manquante\n\nIl semble que votre identité soit manquante, essayez de vous reconnecter.",
["deleted_identity"] = "Personnage supprimé. Veuillez vous réinscrire pour créer un nouveau personnage.",
["already_registered"] = "Vous êtes déjà inscrit.",
["invalid_firstname_format"] = "Format non valide (prénom) : veuillez réessayer.",
["invalid_lastname_format"] = "Format non valide (nom de famille) : veuillez réessayer.",
["invalid_dob_format"] = "Format non valide (DDN) : veuillez réessayer.",
["invalid_sex_format"] = "Format non valide (sexe) : veuillez réessayer.",
["invalid_height_format"] = "Format non valide (hauteur) : veuillez réessayer.",
}
["show_active_character"] = "Afficher le personnage actif",
["active_character"] = "Personnage actif: %s",
["error_active_character"] = "Une erreur s'est produite lors de l'obtention de vos données.",
["delete_character"] = "Supprimez votre personnage actuel.",
["deleted_character"] = "Caractère supprimé",
["error_delete_character"] = "Un problème est survenu lors de la suppression de votre personnage.",
["thank_you_for_registering"] = "Inscription réussi. Profitez!",
["debug_xPlayer_get_first_name"] = "Renvoie votre prénom",
["debug_xPlayer_get_last_name"] = "Renvoie votre nom de famille",
["debug_xPlayer_get_full_name"] = "Renvoie votre nom complet",
["debug_xPlayer_get_sex"] = "Renvoie votre sexe",
["debug_xPlayer_get_dob"] = "Renvoie votre date de naissance",
["debug_xPlayer_get_height"] = "Renvoie votre taille",
["error_debug_xPlayer_get_first_name"] = "Un problème est survenu lors de l'obtention de votre prénom.",
["error_debug_xPlayer_get_last_name"] = "Un problème est survenu lors de l'obtention de votre nom de famille.",
["error_debug_xPlayer_get_full_name"] = "Un problème est survenu lors de l'obtention de votre nom complet.",
["error_debug_xPlayer_get_sex"] = "Il y a eu un problème lors de l'obtention de votre sexe.",
["error_debug_xPlayer_get_dob"] = "Un problème est survenu lors de l'obtention de votre date de naissance.",
["error_debug_xPlayer_get_height"] = "Un problème est survenu lors de l'obtention de votre taille.",
["return_debug_xPlayer_get_first_name"] = "Prénom: %s",
["return_debug_xPlayer_get_last_name"] = "Nom de famille: %s",
["return_debug_xPlayer_get_full_name"] = "Nom: %s",
["return_debug_xPlayer_get_sex"] = "Sexe: %s",
["return_debug_xPlayer_get_dob"] = "Date de naissance: %s",
["return_debug_xPlayer_get_height"] = "Hauteur: %s pouces",
["data_incorrect"] = "Données non valides, veuillez réessayer.",
["invalid_format"] = "Format de données non valide, veuillez réessayer.",
["no_identifier"] = "[ESX Identity]\nIl y a eu un problème lors du chargement de votre personnage !\nCode d'erreur : identifiant manquant\n\nCela est dû au fait que votre identifiant est manquant. Veuillez revenir plus tard ou signaler ce problème au propriétaire du serveur.",
["missing_identity"] = "[ESX Identity]Un problème est survenu lors du chargement de votre personnage !Code d'erreur : identité manquante\n\nIl semble que votre identité soit manquante, essayez de vous reconnecter.",
["deleted_identity"] = "Personnage supprimé. Veuillez vous réinscrire pour créer un nouveau personnage.",
["already_registered"] = "Vous êtes déjà inscrit.",
["invalid_firstname_format"] = "Format non valide (prénom) : veuillez réessayer.",
["invalid_lastname_format"] = "Format non valide (nom de famille) : veuillez réessayer.",
["invalid_dob_format"] = "Format non valide (DDN) : veuillez réessayer.",
["invalid_sex_format"] = "Format non valide (sexe) : veuillez réessayer.",
["invalid_height_format"] = "Format non valide (hauteur) : veuillez réessayer.",
}
+6 -6
View File
@@ -1,7 +1,7 @@
Locales["hu"] = {
["show_active_character"] = "Aktív karakterek mutatása",
["active_character"] = "Aktív karakter: %s",
["error_active_character"] = "A név nem megfelelő",
["error_active_character"] = "A név nem megfelelő",
["delete_character"] = "Töröld a karaktered és csinálj újat",
["deleted_character"] = "A karaktered törölve",
["error_delete_character"] = "Hiba történt a karakter törlésekor. Kérjük, lépjen kapcsolatba egy Adminisztrátorral.",
@@ -30,9 +30,9 @@ Locales["hu"] = {
["missing_identity"] = "Hiba történt a karaktered betöltésekor! \n Hibakód: hiányzik az identitás \n és \nNem úgy tűnik, hogy hiányzik a személyazonosságod, próbálkozz újra.",
["deleted_identity"] = "A karaktered törölve",
["already_registered"] = "Már regisztráltál.",
["invalid_firstname_format"] = "Érvénytelen formátum (Keresztnév): Próbáld újra.",
["invalid_lastname_format"] = "Érvénytelen formátum (Vezetéknév): Próbáld újra.",
["invalid_dob_format"] = "Érvénytelen formátum (Születési Idő): Próbáld újra.",
["invalid_sex_format"] = "Érvénytelen formátum (Nem): Próbáld újra.",
["invalid_height_format"] = "Érvénytelen formátum (Magasság): Próbáld újra."
["invalid_firstname_format"] = "Érvénytelen formátum (Keresztnév): Próbáld újra.",
["invalid_lastname_format"] = "Érvénytelen formátum (Vezetéknév): Próbáld újra.",
["invalid_dob_format"] = "Érvénytelen formátum (Születési Idő): Próbáld újra.",
["invalid_sex_format"] = "Érvénytelen formátum (Nem): Próbáld újra.",
["invalid_height_format"] = "Érvénytelen formátum (Magasság): Próbáld újra."
}
+37 -37
View File
@@ -1,38 +1,38 @@
Locales["pt"] = {
["show_active_character"] = "Mostrar personagem ativa",
["active_character"] = "Personagem ativa: %s",
["error_active_character"] = "Houve um erro a obter os teus dados.",
["delete_character"] = "Apagar a tua personagem atual.",
["deleted_character"] = "Personagem apagada!",
["error_delete_character"] = "Houve um problema ao apagar a tua personagem.",
["thank_you_for_registering"] = "Registo concluído. Diverte-te!",
["debug_xPlayer_get_first_name"] = "Retorna o teu primeiro nome",
["debug_xPlayer_get_last_name"] = "Retorna o teu último nome",
["debug_xPlayer_get_full_name"] = "Retorna o teu nome completo",
["debug_xPlayer_get_sex"] = "Retorna o teu sexo",
["debug_xPlayer_get_dob"] = "Retorna a tua data de nascimento",
["debug_xPlayer_get_height"] = "Retorna a tua altura",
["error_debug_xPlayer_get_first_name"] = "Houve um problema ao obter o teu primeiro nome.",
["error_debug_xPlayer_get_last_name"] = "Houve um problema ao obter o teu último nome.",
["error_debug_xPlayer_get_full_name"] = "Houve um problema ao obter o teu nome completo.",
["error_debug_xPlayer_get_sex"] = "Houve um problema ao obter o teu sexo.",
["error_debug_xPlayer_get_dob"] = "Houve um problema ao obter a tua data de nascimento.",
["error_debug_xPlayer_get_height"] = "Houve um problema ao obter a tua altura.",
["return_debug_xPlayer_get_first_name"] = "Primeiro nome: %s",
["return_debug_xPlayer_get_last_name"] = "Último nome: %s",
["return_debug_xPlayer_get_full_name"] = "Nome: %s",
["return_debug_xPlayer_get_sex"] = "Sexo: %s",
["return_debug_xPlayer_get_dob"] = "Data de nascimento: %s",
["return_debug_xPlayer_get_height"] = "Altura: %s cm",
["data_incorrect"] = "Dados inválidos, tenta novamente.",
["invalid_format"] = "Formato dos dados inválido, tenta novamente.",
["no_identifier"] = "[ESX Identity]\nHouve um erro ao carregar a tua personagem!\nCódigo do erro: identifier-missing\n\nEste erro é devido à falta do teu identificador. Porfavor volta mais tarde ou reporta este problema a um Administrador.",
["missing_identity"] = "[ESX Identity]\nHouve um erro ao carregar a tua personagem!\nCódigo do erro: identity-missing\n\nParece que a tua identidade está em falta, experimenta reentrar no servidor!",
["deleted_identity"] = "Personagem apagada. Porfavor reentra para criar uma nova personagem.",
["already_registered"] = "Tu já estás registado.",
["invalid_firstname_format"] = "Formato inválido (Primeiro nome): Porfavor tenta novamente!",
["invalid_lastname_format"] = "Formato inválido (Último nome): Porfavor tenta novamente!",
["invalid_dob_format"] = "Formato inválido (Data de nascimento): Porfavor tenta novamente!",
["invalid_sex_format"] = "Formato inválido (Sexo): Porfavor tenta novamente!",
["invalid_height_format"] = "Formato inválido (Altura): Porfavor tenta novamente!",
}
["show_active_character"] = "Mostrar personagem ativa",
["active_character"] = "Personagem ativa: %s",
["error_active_character"] = "Houve um erro a obter os teus dados.",
["delete_character"] = "Apagar a tua personagem atual.",
["deleted_character"] = "Personagem apagada!",
["error_delete_character"] = "Houve um problema ao apagar a tua personagem.",
["thank_you_for_registering"] = "Registo concluído. Diverte-te!",
["debug_xPlayer_get_first_name"] = "Retorna o teu primeiro nome",
["debug_xPlayer_get_last_name"] = "Retorna o teu último nome",
["debug_xPlayer_get_full_name"] = "Retorna o teu nome completo",
["debug_xPlayer_get_sex"] = "Retorna o teu sexo",
["debug_xPlayer_get_dob"] = "Retorna a tua data de nascimento",
["debug_xPlayer_get_height"] = "Retorna a tua altura",
["error_debug_xPlayer_get_first_name"] = "Houve um problema ao obter o teu primeiro nome.",
["error_debug_xPlayer_get_last_name"] = "Houve um problema ao obter o teu último nome.",
["error_debug_xPlayer_get_full_name"] = "Houve um problema ao obter o teu nome completo.",
["error_debug_xPlayer_get_sex"] = "Houve um problema ao obter o teu sexo.",
["error_debug_xPlayer_get_dob"] = "Houve um problema ao obter a tua data de nascimento.",
["error_debug_xPlayer_get_height"] = "Houve um problema ao obter a tua altura.",
["return_debug_xPlayer_get_first_name"] = "Primeiro nome: %s",
["return_debug_xPlayer_get_last_name"] = "Último nome: %s",
["return_debug_xPlayer_get_full_name"] = "Nome: %s",
["return_debug_xPlayer_get_sex"] = "Sexo: %s",
["return_debug_xPlayer_get_dob"] = "Data de nascimento: %s",
["return_debug_xPlayer_get_height"] = "Altura: %s cm",
["data_incorrect"] = "Dados inválidos, tenta novamente.",
["invalid_format"] = "Formato dos dados inválido, tenta novamente.",
["no_identifier"] = "[ESX Identity]\nHouve um erro ao carregar a tua personagem!\nCódigo do erro: identifier-missing\n\nEste erro é devido à falta do teu identificador. Porfavor volta mais tarde ou reporta este problema a um Administrador.",
["missing_identity"] = "[ESX Identity]\nHouve um erro ao carregar a tua personagem!\nCódigo do erro: identity-missing\n\nParece que a tua identidade está em falta, experimenta reentrar no servidor!",
["deleted_identity"] = "Personagem apagada. Porfavor reentra para criar uma nova personagem.",
["already_registered"] = "Tu já estás registado.",
["invalid_firstname_format"] = "Formato inválido (Primeiro nome): Porfavor tenta novamente!",
["invalid_lastname_format"] = "Formato inválido (Último nome): Porfavor tenta novamente!",
["invalid_dob_format"] = "Formato inválido (Data de nascimento): Porfavor tenta novamente!",
["invalid_sex_format"] = "Formato inválido (Sexo): Porfavor tenta novamente!",
["invalid_height_format"] = "Formato inválido (Altura): Porfavor tenta novamente!",
}
+37 -37
View File
@@ -1,38 +1,38 @@
Locales["sl"] = {
["show_active_character"] = "Prikazi aktivni Karakter",
["active_character"] = "Aktivni Karakter: %s",
["error_active_character"] = "Pri pridobivanju vasih podatkov je prislo do napake.",
["delete_character"] = "Izbrisi vas trenutni Karakter.",
["deleted_character"] = "Karakter izbrisan",
["error_delete_character"] = "Pri brisanju vasega lika je prislo do tezave.",
["thank_you_for_registering"] = "Registracija uspesna. Uzivajte!",
["debug_xPlayer_get_first_name"] = "Vrne vase ime",
["debug_xPlayer_get_last_name"] = "Vrne vas priimek",
["debug_xPlayer_get_full_name"] = "Vrne vase polno ime",
["debug_xPlayer_get_sex"] = "Vrne vas spol",
["debug_xPlayer_get_dob"] = "Vrne vas DOB",
["debug_xPlayer_get_height"] = "Vrne vaso visino",
["error_debug_xPlayer_get_first_name"] = "Pri pridobivanju vasega imena je prislo do tezave.",
["error_debug_xPlayer_get_last_name"] = "Pri pridobivanju vasega priimka je prislo do tezave.",
["error_debug_xPlayer_get_full_name"] = "Pri pridobivanju vasega polnega imena je prislo do tezave.",
["error_debug_xPlayer_get_sex"] = "Pri pridobivanju vasega spola je prislo do tezave.",
["error_debug_xPlayer_get_dob"] = "Pri pridobivanju vasega datuma rojstva je prislo do tezave.",
["error_debug_xPlayer_get_height"] = "Pri pridobivanju vase visine je prislo do tezave.",
["return_debug_xPlayer_get_first_name"] = "Ime: %s",
["return_debug_xPlayer_get_last_name"] = "Priimek: %s",
["return_debug_xPlayer_get_full_name"] = "Ime: %s",
["return_debug_xPlayer_get_sex"] = "Spol: %s",
["return_debug_xPlayer_get_dob"] = "DOB: %s",
["return_debug_xPlayer_get_height"] = "Visina: %s palcev",
["data_incorrect"] = "Neveljavni podatki, poskusite znova.",
["invalid_format"] = "Neveljavna oblika podatkov, poskusite znova.",
["no_identifier"] = "[ESX Identiteta]\nPri nalaganju vasega lika je prislo do tezave!\nKoda napake: identifikator-manjka\n\nTo je posledica tega, da manjka vas identifikator. Vrnite se pozneje ali prijavite to tezavo lastniku streznika.",
["missing_identity"] = "[ESX Identity]\nPri nalaganju vasega lika je prislo do tezave!\nKoda napake: identity-missing\n\nVideti je, da vasa identiteta manjka, poskusite znova vzpostaviti povezavo.",
["deleted_identity"] = "Karakter izbrisan. Ponovno se pridruzite, da ustvarite nov lik.",
["already_registered"] = "Registrirali ste se ze.",
["invalid_firstname_format"] = "Neveljavna oblika (ime): Prosimo, poskusite znova.",
["invalid_lastname_format"] = "Neveljavna oblika (priimek): Poskusite ponovno.",
["invalid_dob_format"] = "Neveljavna oblika (DOB): Prosimo, poskusite znova.",
["invalid_sex_format"] = "Neveljavna oblika (spol): Poskusite ponovno.",
["invalid_height_format"] = "Neveljavna oblika (visina): Prosimo, poskusite znova.",
}
["show_active_character"] = "Prikazi aktivni Karakter",
["active_character"] = "Aktivni Karakter: %s",
["error_active_character"] = "Pri pridobivanju vasih podatkov je prislo do napake.",
["delete_character"] = "Izbrisi vas trenutni Karakter.",
["deleted_character"] = "Karakter izbrisan",
["error_delete_character"] = "Pri brisanju vasega lika je prislo do tezave.",
["thank_you_for_registering"] = "Registracija uspesna. Uzivajte!",
["debug_xPlayer_get_first_name"] = "Vrne vase ime",
["debug_xPlayer_get_last_name"] = "Vrne vas priimek",
["debug_xPlayer_get_full_name"] = "Vrne vase polno ime",
["debug_xPlayer_get_sex"] = "Vrne vas spol",
["debug_xPlayer_get_dob"] = "Vrne vas DOB",
["debug_xPlayer_get_height"] = "Vrne vaso visino",
["error_debug_xPlayer_get_first_name"] = "Pri pridobivanju vasega imena je prislo do tezave.",
["error_debug_xPlayer_get_last_name"] = "Pri pridobivanju vasega priimka je prislo do tezave.",
["error_debug_xPlayer_get_full_name"] = "Pri pridobivanju vasega polnega imena je prislo do tezave.",
["error_debug_xPlayer_get_sex"] = "Pri pridobivanju vasega spola je prislo do tezave.",
["error_debug_xPlayer_get_dob"] = "Pri pridobivanju vasega datuma rojstva je prislo do tezave.",
["error_debug_xPlayer_get_height"] = "Pri pridobivanju vase visine je prislo do tezave.",
["return_debug_xPlayer_get_first_name"] = "Ime: %s",
["return_debug_xPlayer_get_last_name"] = "Priimek: %s",
["return_debug_xPlayer_get_full_name"] = "Ime: %s",
["return_debug_xPlayer_get_sex"] = "Spol: %s",
["return_debug_xPlayer_get_dob"] = "DOB: %s",
["return_debug_xPlayer_get_height"] = "Visina: %s palcev",
["data_incorrect"] = "Neveljavni podatki, poskusite znova.",
["invalid_format"] = "Neveljavna oblika podatkov, poskusite znova.",
["no_identifier"] = "[ESX Identiteta]\nPri nalaganju vasega lika je prislo do tezave!\nKoda napake: identifikator-manjka\n\nTo je posledica tega, da manjka vas identifikator. Vrnite se pozneje ali prijavite to tezavo lastniku streznika.",
["missing_identity"] = "[ESX Identity]\nPri nalaganju vasega lika je prislo do tezave!\nKoda napake: identity-missing\n\nVideti je, da vasa identiteta manjka, poskusite znova vzpostaviti povezavo.",
["deleted_identity"] = "Karakter izbrisan. Ponovno se pridruzite, da ustvarite nov lik.",
["already_registered"] = "Registrirali ste se ze.",
["invalid_firstname_format"] = "Neveljavna oblika (ime): Prosimo, poskusite znova.",
["invalid_lastname_format"] = "Neveljavna oblika (priimek): Poskusite ponovno.",
["invalid_dob_format"] = "Neveljavna oblika (DOB): Prosimo, poskusite znova.",
["invalid_sex_format"] = "Neveljavna oblika (spol): Poskusite ponovno.",
["invalid_height_format"] = "Neveljavna oblika (visina): Prosimo, poskusite znova.",
}
+169 -178
View File
@@ -3,16 +3,12 @@ local alreadyRegistered = {}
local multichar = ESX.GetConfig().Multichar
local function deleteIdentityFromDatabase(xPlayer)
MySQL.query.await(
'UPDATE users SET firstname = ?, lastname = ?, dateofbirth = ?, sex = ?, height = ?, skin = ? WHERE identifier = ?',
{nil, nil, nil, nil, nil, nil, xPlayer.identifier})
MySQL.query.await('UPDATE users SET firstname = ?, lastname = ?, dateofbirth = ?, sex = ?, height = ?, skin = ? WHERE identifier = ?', { nil, nil, nil, nil, nil, nil, xPlayer.identifier })
if Config.FullCharDelete then
MySQL.update.await('UPDATE addon_account_data SET money = 0 WHERE account_name IN (?) AND owner = ?',
{{'bank_savings', 'caution'}, xPlayer.identifier})
MySQL.update.await('UPDATE addon_account_data SET money = 0 WHERE account_name IN (?) AND owner = ?', { { 'bank_savings', 'caution' }, xPlayer.identifier })
MySQL.prepare.await('UPDATE datastore_data SET data = ? WHERE name IN (?) AND owner = ?',
{'\'{}\'', {'user_ears', 'user_glasses', 'user_helmet', 'user_mask'}, xPlayer.identifier})
MySQL.prepare.await('UPDATE datastore_data SET data = ? WHERE name IN (?) AND owner = ?', { '\'{}\'', { 'user_ears', 'user_glasses', 'user_helmet', 'user_mask' }, xPlayer.identifier })
end
end
@@ -31,9 +27,7 @@ local function deleteIdentity(xPlayer)
end
local function saveIdentityToDatabase(identifier, identity)
MySQL.update.await(
'UPDATE users SET firstname = ?, lastname = ?, dateofbirth = ?, sex = ?, height = ? WHERE identifier = ?',
{identity.firstName, identity.lastName, identity.dateOfBirth, identity.sex, identity.height, identifier})
MySQL.update.await('UPDATE users SET firstname = ?, lastname = ?, dateofbirth = ?, sex = ?, height = ? WHERE identifier = ?', { identity.firstName, identity.lastName, identity.dateOfBirth, identity.sex, identity.height, identifier })
end
local function checkDOBFormat(str)
@@ -41,9 +35,9 @@ local function checkDOBFormat(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)
@@ -125,22 +119,21 @@ if Config.UseDeferrals then
Wait(100)
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
}
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
}
deferrals.done()
else
deferrals.presentCard(
[==[{"type": "AdaptiveCard","body":[{"type":"Container","items":[{"type":"ColumnSet",
deferrals.done()
else
deferrals.presentCard(
[==[{"type": "AdaptiveCard","body":[{"type":"Container","items":[{"type":"ColumnSet",
"columns":[{"type":"Column","items":[{"type":"Input.Text","placeholder":"First Name",
"id":"firstname","maxLength":15},{"type":"Input.Text","placeholder":"Date of Birth (MM/DD/YYYY)",
"id":"dateofbirth","maxLength":10}],"width":"stretch"},{"type":"Column","width":"stretch",
@@ -150,33 +143,33 @@ 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)
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) and checkNameFormat(data.lastname) and
checkDOBFormat(data.dateofbirth) and checkSexFormat(data.sex) and
checkHeightFormat(data.height) then
playerIdentity[identifier] = {
firstName = formatName(data.firstname),
lastName = formatName(data.lastname),
dateOfBirth = data.dateofbirth,
sex = data.sex,
height = tonumber(data.height),
saveToDatabase = true
}
function(data)
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) and checkNameFormat(data.lastname) and
checkDOBFormat(data.dateofbirth) and checkSexFormat(data.sex) and
checkHeightFormat(data.height) then
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_format'))
end
deferrals.done()
else
deferrals.done(TranslateCap('invalid_format'))
end
end)
end
else
deferrals.presentCard(
[==[{"type": "AdaptiveCard","body":[{"type":"Container","items":[{"type":"ColumnSet","columns":[{
end
end)
end
else
deferrals.presentCard(
[==[{"type": "AdaptiveCard","body":[{"type":"Container","items":[{"type":"ColumnSet","columns":[{
"type":"Column","items":[{"type":"Input.Text","placeholder":"First Name","id":"firstname",
"maxLength":15},{"type":"Input.Text","placeholder":"Date of Birth (MM/DD/YYYY)","id":"dateofbirth",
"maxLength":10}],"width":"stretch"},{"type":"Column","width":"stretch","items":[{"type":"Input.Text",
@@ -185,39 +178,39 @@ 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)
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
}
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
deferrals.done()
end)
end
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)
else
deferrals.done(TranslateCap('no_identifier'))
end
@@ -246,8 +239,8 @@ if Config.UseDeferrals then
playerIdentity[xPlayer.identifier] = nil
end)
else
local function setIdentity(xPlayer)
if not alreadyRegistered[xPlayer.identifier] then
local function setIdentity(xPlayer)
if not alreadyRegistered[xPlayer.identifier] then
return
end
local currentIdentity = playerIdentity[xPlayer.identifier]
@@ -264,21 +257,55 @@ else
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)
end
local function checkIdentity(xPlayer)
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
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
AddEventHandler('playerConnecting', function(_, _, deferrals)
deferrals.defer()
local _, identifier = source, ESX.GetIdentifier(source)
Wait(40)
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
return TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source)
playerIdentity[identifier] = nil
alreadyRegistered[identifier] = false
return deferrals.done()
end
if not result.firstname then
playerIdentity[xPlayer.identifier] = nil
alreadyRegistered[xPlayer.identifier] = false
return TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source)
playerIdentity[identifier] = nil
alreadyRegistered[identifier] = false
return deferrals.done()
end
playerIdentity[xPlayer.identifier] = {
playerIdentity[identifier] = {
firstName = result.firstname,
lastName = result.lastname,
dateOfBirth = result.dateofbirth,
@@ -286,49 +313,13 @@ else
height = result.height
}
alreadyRegistered[xPlayer.identifier] = true
setIdentity(xPlayer)
end
)
end
alreadyRegistered[identifier] = true
if not multichar then
AddEventHandler('playerConnecting', function(_, _, deferrals)
deferrals.defer()
local _, identifier = source, ESX.GetIdentifier(source)
Wait(40)
deferrals.done()
end)
end)
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
playerIdentity[identifier] = {
firstName = result.firstname,
lastName = result.lastname,
dateOfBirth = result.dateofbirth,
sex = result.sex,
height = result.height
}
alreadyRegistered[identifier] = true
deferrals.done()
end)
end)
AddEventHandler('onResourceStart', function(resource)
AddEventHandler('onResourceStart', function(resource)
if resource ~= GetCurrentResourceName() then
return
end
@@ -345,8 +336,8 @@ else
end
end)
RegisterNetEvent('esx:playerLoaded', function(_, xPlayer)
local currentIdentity = playerIdentity[xPlayer.identifier]
RegisterNetEvent('esx:playerLoaded', function(_, xPlayer)
local currentIdentity = playerIdentity[xPlayer.identifier]
if currentIdentity and alreadyRegistered[xPlayer.identifier] then
xPlayer.setName(('%s %s'):format(currentIdentity.firstName, currentIdentity.lastName))
@@ -368,35 +359,35 @@ else
else
TriggerClientEvent('esx_identity:showRegisterIdentity', xPlayer.source)
end
end)
end
end)
end
ESX.RegisterServerCallback('esx_identity:registerIdentity', function(source, cb, data)
local xPlayer = ESX.GetPlayerFromId(source)
if not checkNameFormat(data.firstname) then
TriggerClientEvent('esx:showNotification',source,TranslateCap('invalid_firstname_format'), "error")
return cb(false)
end
if not checkNameFormat(data.lastname) then
TriggerClientEvent('esx:showNotification',source,TranslateCap('invalid_lastname_format'), "error")
return cb(false)
end
if not checkSexFormat(data.sex) then
TriggerClientEvent('esx:showNotification',source,TranslateCap('invalid_sex_format'), "error")
return cb(false)
end
if not checkDOBFormat(data.dateofbirth) then
TriggerClientEvent('esx:showNotification',source,TranslateCap('invalid_dob_format'), "error")
return cb(false)
end
if not checkHeightFormat(data.height) then
TriggerClientEvent('esx:showNotification',source,TranslateCap('invalid_height_format'), "error")
return cb(false)
end
if xPlayer then
if alreadyRegistered[xPlayer.identifier] then
xPlayer.showNotification(TranslateCap('already_registered'), "error")
return cb(false)
ESX.RegisterServerCallback('esx_identity:registerIdentity', function(source, cb, data)
local xPlayer = ESX.GetPlayerFromId(source)
if not checkNameFormat(data.firstname) then
TriggerClientEvent('esx:showNotification', source, TranslateCap('invalid_firstname_format'), "error")
return cb(false)
end
if not checkNameFormat(data.lastname) then
TriggerClientEvent('esx:showNotification', source, TranslateCap('invalid_lastname_format'), "error")
return cb(false)
end
if not checkSexFormat(data.sex) then
TriggerClientEvent('esx:showNotification', source, TranslateCap('invalid_sex_format'), "error")
return cb(false)
end
if not checkDOBFormat(data.dateofbirth) then
TriggerClientEvent('esx:showNotification', source, TranslateCap('invalid_dob_format'), "error")
return cb(false)
end
if not checkHeightFormat(data.height) then
TriggerClientEvent('esx:showNotification', source, TranslateCap('invalid_height_format'), "error")
return cb(false)
end
if xPlayer then
if alreadyRegistered[xPlayer.identifier] then
xPlayer.showNotification(TranslateCap('already_registered'), "error")
return cb(false)
end
playerIdentity[xPlayer.identifier] = {
@@ -445,19 +436,19 @@ else
TriggerEvent('esx_identity:completedRegistration', source, data)
TriggerClientEvent('esx_identity:setPlayerData', source, Identity)
cb(true)
end)
end)
end
if Config.EnableCommands then
ESX.RegisterCommand('char', 'user', function(xPlayer)
ESX.RegisterCommand('char', 'user', function(xPlayer)
if xPlayer and xPlayer.getName() then
xPlayer.showNotification(TranslateCap('active_character', xPlayer.getName()))
else
xPlayer.showNotification(TranslateCap('error_active_character'))
end
end, false, {help = TranslateCap('show_active_character')})
end, false, { help = TranslateCap('show_active_character') })
ESX.RegisterCommand('chardel', 'user', function(xPlayer)
ESX.RegisterCommand('chardel', 'user', function(xPlayer)
if xPlayer and xPlayer.getName() then
if Config.UseDeferrals then
xPlayer.kick(TranslateCap('deleted_identity'))
@@ -476,7 +467,7 @@ if Config.EnableCommands then
else
xPlayer.showNotification(TranslateCap('error_delete_character'))
end
end, false, {help = TranslateCap('delete_character')})
end, false, { help = TranslateCap('delete_character') })
end
if Config.EnableDebugging then
@@ -486,7 +477,7 @@ if Config.EnableDebugging then
else
xPlayer.showNotification(TranslateCap('error_debug_xPlayer_get_first_name'))
end
end, false, {help = TranslateCap('debug_xPlayer_get_first_name')})
end, false, { help = TranslateCap('debug_xPlayer_get_first_name') })
ESX.RegisterCommand('xPlayerGetLastName', 'user', function(xPlayer)
if xPlayer and xPlayer.get('lastName') then
@@ -494,7 +485,7 @@ if Config.EnableDebugging then
else
xPlayer.showNotification(TranslateCap('error_debug_xPlayer_get_last_name'))
end
end, false, {help = TranslateCap('debug_xPlayer_get_last_name')})
end, false, { help = TranslateCap('debug_xPlayer_get_last_name') })
ESX.RegisterCommand('xPlayerGetFullName', 'user', function(xPlayer)
if xPlayer and xPlayer.getName() then
@@ -502,7 +493,7 @@ if Config.EnableDebugging then
else
xPlayer.showNotification(TranslateCap('error_debug_xPlayer_get_full_name'))
end
end, false, {help = TranslateCap('debug_xPlayer_get_full_name')})
end, false, { help = TranslateCap('debug_xPlayer_get_full_name') })
ESX.RegisterCommand('xPlayerGetSex', 'user', function(xPlayer)
if xPlayer and xPlayer.get('sex') then
@@ -510,7 +501,7 @@ if Config.EnableDebugging then
else
xPlayer.showNotification(TranslateCap('error_debug_xPlayer_get_sex'))
end
end, false, {help = TranslateCap('debug_xPlayer_get_sex')})
end, false, { help = TranslateCap('debug_xPlayer_get_sex') })
ESX.RegisterCommand('xPlayerGetDOB', 'user', function(xPlayer)
if xPlayer and xPlayer.get('dateofbirth') then
@@ -518,7 +509,7 @@ if Config.EnableDebugging then
else
xPlayer.showNotification(TranslateCap('error_debug_xPlayer_get_dob'))
end
end, false, {help = TranslateCap('debug_xPlayer_get_dob')})
end, false, { help = TranslateCap('debug_xPlayer_get_dob') })
ESX.RegisterCommand('xPlayerGetHeight', 'user', function(xPlayer)
if xPlayer and xPlayer.get('height') then
@@ -526,5 +517,5 @@ if Config.EnableDebugging then
else
xPlayer.showNotification(TranslateCap('error_debug_xPlayer_get_height'))
end
end, false, {help = TranslateCap('debug_xPlayer_get_height')})
end, false, { help = TranslateCap('debug_xPlayer_get_height') })
end
+2 -2
View File
@@ -1,6 +1,6 @@
local ClientLoadESX = false
AddEventHandler("playerSpawned", function ()
AddEventHandler("playerSpawned", function()
if not ClientLoadESX then
ShutdownLoadingScreenNui()
ClientLoadESX = true
@@ -10,4 +10,4 @@ AddEventHandler("playerSpawned", function ()
DoScreenFadeIn(2500)
end
end
end)
end)
+1 -1
View File
@@ -1,3 +1,3 @@
Config = {}
Config.Fade = true
Config.Fade = true
+2 -2
View File
@@ -1,5 +1,5 @@
game 'common'
version '1.9.4'
version '1.9.5'
fx_version 'cerulean'
author 'ESX-Framework'
lua54 'yes'
@@ -11,4 +11,4 @@ loadscreen_manual_shutdown "yes"
client_script 'client/client.lua'
files {'index.html', './vid/*.mp4', './vid/*.webm', './js/index.js', './css/index.css'}
files { 'index.html', './vid/*.mp4', './vid/*.webm', './js/index.js', './css/index.css' }
+2 -2
View File
@@ -14,7 +14,7 @@ end
local function closeMenu(namespace, name)
CurrentNameSpace = namespace
OpenedMenus -= 1
OpenedMenus = OpenedMenus - 1
if OpenedMenus < 0 then
OpenedMenus = 0
end
@@ -26,7 +26,7 @@ local function closeMenu(namespace, name)
end
AddEventHandler('onResourceStop', function(resource)
if GetCurrentResourceName() == resource and OpenedMenus > 0 then
if GetCurrentResourceName() == resource and OpenedMenus > 0 then
ESX.UI.Menu.CloseAll()
elseif CurrentNameSpace ~= nil and CurrentNameSpace == resource and OpenedMenus > 0 then
ESX.UI.Menu.CloseAll()
+5 -5
View File
@@ -4,12 +4,12 @@ game 'gta5'
description 'ESX Menu Default'
lua54 'yes'
version '1.9.4'
version '1.9.5'
client_scripts {'@es_extended/imports.lua', 'client/main.lua'}
client_scripts { '@es_extended/imports.lua', 'client/main.lua' }
ui_page {'html/ui.html'}
ui_page { 'html/ui.html' }
files {'html/ui.html', 'html/css/app.css', 'html/js/mustache.min.js', 'html/js/app.js'}
files { 'html/ui.html', 'html/css/app.css', 'html/js/mustache.min.js', 'html/js/app.js' }
dependencies {'es_extended'}
dependencies { 'es_extended' }
+1 -1
View File
@@ -77,4 +77,4 @@ AddEventHandler('esx_menu_dialog:message:menu_change', function(data)
if menu.change ~= nil then
menu.change(data, menu)
end
end)
end)
+1 -1
View File
@@ -4,7 +4,7 @@ game 'gta5'
description 'ESX Menu Dialog'
lua54 'yes'
version '1.9.4'
version '1.9.5'
client_scripts {
'@es_extended/imports.lua',
+2 -6
View File
@@ -3,7 +3,6 @@ CreateThread(function()
local OpenedMenus = {}
local function openMenu(namespace, name, data)
OpenedMenus[namespace .. '_' .. name] = true
SendNUIMessage({
@@ -13,12 +12,11 @@ CreateThread(function()
data = data
})
SetTimeout(200, function()
SetNuiFocus(true, true)
end)
SetNuiFocus(true, true)
end)
end
local function closeMenu(namespace, name)
OpenedMenus[namespace .. '_' .. name] = nil
local OpenedMenuCount = 0
@@ -37,7 +35,6 @@ CreateThread(function()
if OpenedMenuCount == 0 then
SetNuiFocus(false)
end
end
ESX.UI.Menu.RegisterType(MenuType, openMenu, closeMenu)
@@ -59,5 +56,4 @@ CreateThread(function()
cb('OK')
end)
end)
+1 -1
View File
@@ -4,7 +4,7 @@ game 'gta5'
description 'ESX Menu List'
lua54 'yes'
version '1.9.4'
version '1.9.5'
client_scripts {
'@es_extended/imports.lua',
+28 -28
View File
@@ -4,11 +4,10 @@ local mp_f_freemode_01 = `mp_f_freemode_01`
local SpawnCoords = Config.Spawn[math.random(#Config.Spawn)]
if ESX.GetConfig().Multichar then
CreateThread(function()
while not ESX.PlayerLoaded do
Wait(100)
if NetworkIsPlayerActive(PlayerId()) then
exports.spawnmanager:setAutoSpawn(false)
DoScreenFadeOut(0)
@@ -22,7 +21,7 @@ if ESX.GetConfig().Multichar then
end)
local canRelog, cam, spawned = true, nil, nil
local Characters = {}
local Characters = {}
RegisterNetEvent('esx_multicharacter:SetupCharacters')
AddEventHandler('esx_multicharacter:SetupCharacters', function()
@@ -51,7 +50,7 @@ if ESX.GetConfig().Multichar then
hidePlayers = true
MumbleSetVolumeOverride(PlayerId(), 0.0)
CreateThread(function()
local keys = {18, 27, 172, 173, 174, 175, 176, 177, 187, 188, 191, 201, 108, 109}
local keys = { 18, 27, 172, 173, 174, 175, 176, 177, 187, 188, 191, 201, 108, 109 }
while hidePlayers do
DisableAllControlActions(0)
for i = 1, #keys do
@@ -118,8 +117,7 @@ if ESX.GetConfig().Multichar then
end
DoScreenFadeIn(600)
end)
repeat Wait(200) until not IsScreenFadedOut()
repeat Wait(200) until not IsScreenFadedOut()
elseif Characters[index] and Characters[index].skin then
if Characters[spawned] and Characters[spawned].model then
RequestModel(Characters[index].model)
@@ -145,11 +143,11 @@ if ESX.GetConfig().Multichar then
function CharacterDeleteConfirmation(Characters, slots, SelectedCharacter, value)
local elements = {
{title = TranslateCap('char_delete_confirmation'), icon = "fa-solid fa-users", description = TranslateCap('char_delete_confirmation_description'), unselectable = true},
{title = TranslateCap('char_delete'), icon ="fa-solid fa-xmark", description = TranslateCap('char_delete_yes_description'), action = 'delete', value = value},
{title = TranslateCap('return'), unselectable = false, icon = "fa-solid fa-arrow-left", description = TranslateCap('char_delete_no_description'), action = "return"}
{ title = TranslateCap('char_delete_confirmation'), icon = "fa-solid fa-users", description = TranslateCap('char_delete_confirmation_description'), unselectable = true },
{ title = TranslateCap('char_delete'), icon = "fa-solid fa-xmark", description = TranslateCap('char_delete_yes_description'), action = 'delete', value = value },
{ title = TranslateCap('return'), unselectable = false, icon = "fa-solid fa-arrow-left", description = TranslateCap('char_delete_no_description'), action = "return" }
}
ESX.OpenContext("left", elements, function(_, Action)
if Action.action == "delete" then
ESX.CloseContext()
@@ -162,14 +160,14 @@ if ESX.GetConfig().Multichar then
end
function CharacterOptions(Characters, slots, SelectedCharacter)
local elements = {{title = TranslateCap('character', Characters[SelectedCharacter.value].firstname .. " ".. Characters[SelectedCharacter.value].lastname),icon = "fa-regular fa-user", unselectable = true},
{title = TranslateCap('return'), unselectable = false,icon = "fa-solid fa-arrow-left",description = TranslateCap('return_description'), action = "return"}}
local elements = { { title = TranslateCap('character', Characters[SelectedCharacter.value].firstname .. " " .. Characters[SelectedCharacter.value].lastname), icon = "fa-regular fa-user", unselectable = true },
{ title = TranslateCap('return'), unselectable = false, icon = "fa-solid fa-arrow-left", description = TranslateCap('return_description'), action = "return" } }
if not Characters[SelectedCharacter.value].disabled then
elements[3] = {title = TranslateCap('char_play'), description = TranslateCap('char_play_description'), icon ="fa-solid fa-play",action = 'play', value = SelectedCharacter.value}
elements[3] = { title = TranslateCap('char_play'), description = TranslateCap('char_play_description'), icon = "fa-solid fa-play", action = 'play', value = SelectedCharacter.value }
else
elements[3] = {title = TranslateCap('char_disabled'), value = SelectedCharacter.value, icon ="fa-solid fa-xmark", description = TranslateCap('char_disabled_description'),}
elements[3] = { title = TranslateCap('char_disabled'), value = SelectedCharacter.value, icon = "fa-solid fa-xmark", description = TranslateCap('char_disabled_description'), }
end
if Config.CanDelete then elements[4] = {title = TranslateCap('char_delete'),icon ="fa-solid fa-xmark",description = TranslateCap('char_delete_description'), action = 'delete', value = SelectedCharacter.value} end
if Config.CanDelete then elements[4] = { title = TranslateCap('char_delete'), icon = "fa-solid fa-xmark", description = TranslateCap('char_delete_description'), action = 'delete', value = SelectedCharacter.value } end
ESX.OpenContext("left", elements, function(_, Action)
if Action.action == "play" then
SendNUIMessage({
@@ -187,21 +185,21 @@ if ESX.GetConfig().Multichar then
function SelectCharacterMenu(Characters, slots)
local Character = next(Characters)
local elements = {{title = TranslateCap('select_char') , icon = "fa-solid fa-users", description = TranslateCap('select_char_description') , unselectable = true}}
local elements = { { title = TranslateCap('select_char'), icon = "fa-solid fa-users", description = TranslateCap('select_char_description'), unselectable = true } }
for k, v in pairs(Characters) do
if not v.model and v.skin then
if v.skin.model then v.model = v.skin.model elseif v.skin.sex == 1 then v.model = mp_f_freemode_01 else v.model = mp_m_freemode_01 end
end
if not spawned then SetupCharacter(Character) end
local label = v.firstname..' '..v.lastname
local label = v.firstname .. ' ' .. v.lastname
if Characters[k].disabled then
elements[#elements+1] = {title = label,icon = "fa-regular fa-user", value = v.id}
elements[#elements + 1] = { title = label, icon = "fa-regular fa-user", value = v.id }
else
elements[#elements+1] = {title = label,icon = "fa-regular fa-user", value = v.id}
elements[#elements + 1] = { title = label, icon = "fa-regular fa-user", value = v.id }
end
end
if #elements - 1 < slots then
elements[#elements+1] = {title = TranslateCap('create_char'), icon = "fa-solid fa-plus", value = (#elements+1), new = true}
elements[#elements + 1] = { title = TranslateCap('create_char'), icon = "fa-solid fa-plus", value = (#elements + 1), new = true }
end
ESX.OpenContext("left", elements, function(_, SelectedCharacter)
@@ -218,13 +216,13 @@ if ESX.GetConfig().Multichar then
TriggerServerEvent('esx_multicharacter:CharacterChosen', slot, true)
TriggerEvent('esx_identity:showRegisterIdentity')
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, false)
SetEntityAlpha(playerPed, 0)
SendNUIMessage({
action = "closeui"
})
SetPedAoBlobRendering(playerPed, false)
SetEntityAlpha(playerPed, 0)
SendNUIMessage({
action = "closeui"
})
else
CharacterOptions(Characters,slots, SelectedCharacter)
CharacterOptions(Characters, slots, SelectedCharacter)
SetupCharacter(SelectedCharacter.value)
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, true)
@@ -232,6 +230,7 @@ if ESX.GetConfig().Multichar then
end
end, nil, false)
end
RegisterNetEvent('esx_multicharacter:SetupUI')
AddEventHandler('esx_multicharacter:SetupUI', function(data, slots)
DoScreenFadeOut(0)
@@ -286,7 +285,9 @@ if ESX.GetConfig().Multichar then
SetPedAoBlobRendering(playerPed, true)
ResetEntityAlpha(playerPed)
TriggerEvent('esx_skin:openSaveableMenu', function()
finished = true end, function() finished = true
finished = true
end, function()
finished = true
end)
end)
repeat Wait(200) until finished
@@ -331,5 +332,4 @@ if ESX.GetConfig().Multichar then
end
end)
end
end
+98 -99
View File
@@ -12,12 +12,11 @@ if IsDuplicityVersion() then
-- Text to prepend to each character (char#:identifier) - keep it short
Config.Prefix = 'char'
else
-- Sets the location for the character selection scene
-- To set the spawn location for new characters, modify the default value in the users SQL table
Config.Spawn = {
{x = -284.2856, y = 562.4627, z = 172.9182, heading = 19.9895},
{ x = -284.2856, y = 562.4627, z = 172.9182, heading = 19.9895 },
}
--------------------
@@ -29,101 +28,101 @@ else
-- Default appearance for new characters
Config.Default = {
["m"] = {
mom = 43,
dad = 29,
face_md_weight = 61,
skin_md_weight = 27,
nose_1 = -5,
nose_2 = 6,
nose_3 = 5,
nose_4 = 8,
nose_5 = 10,
nose_6 = 0,
cheeks_1 = 2,
cheeks_2 = -10,
cheeks_3 = 6,
lip_thickness = -2,
jaw_1 = 0,
jaw_2 = 0,
chin_1 = 0,
chin_2 = 0,
chin_13 = 0,
chin_4 = 0,
neck_thickness = 0,
hair_1 = 76,
hair_2 = 0,
hair_color_1 = 61,
hair_color_2 = 29,
tshirt_1 = 4,
tshirt_2 = 2,
torso_1 = 23,
torso_2 = 2,
decals_1 = 0,
decals_2 = 0,
arms = 1,
arms_2 = 0,
pants_1 = 28,
pants_2 = 3,
shoes_1 = 70,
shoes_2 = 2,
mask_1 = 0,
mask_2 = 0,
bproof_1 = 0,
bproof_2 = 0,
chain_1 = 22,
chain_2 = 2,
helmet_1 = -1,
helmet_2 = 0,
glasses_1 = 0,
glasses_2 = 0,
watches_1 = -1,
watches_2 = 0,
bracelets_1 = -1,
bracelets_2 = 0,
bags_1 = 0,
bags_2 = 0,
eye_color = 0,
eye_squint = 0,
eyebrows_2 = 0,
eyebrows_1 = 0,
eyebrows_3 = 0,
eyebrows_4 = 0,
eyebrows_5 = 0,
eyebrows_6 = 0,
makeup_1 = 0,
makeup_2 = 0,
makeup_3 = 0,
makeup_4 = 0,
lipstick_1 = 0,
lipstick_2 = 0,
lipstick_3 = 0,
lipstick_4 = 0,
ears_1 = -1,
ears_2 = 0,
chest_1 = 0,
chest_2 = 0,
chest_3 = 0,
bodyb_1 = -1,
bodyb_2 = 0,
bodyb_3 = -1,
bodyb_4 = 0,
age_1 = 0,
age_2 = 0,
blemishes_1 = 0,
blemishes_2 = 0,
blush_1 = 0,
blush_2 = 0,
blush_3 = 0,
complexion_1 = 0,
complexion_2 = 0,
sun_1 = 0,
sun_2 = 0,
moles_1 = 0,
moles_2 = 0,
beard_1 = 11,
beard_2 = 10,
beard_3 = 0,
beard_4 = 0
mom = 43,
dad = 29,
face_md_weight = 61,
skin_md_weight = 27,
nose_1 = -5,
nose_2 = 6,
nose_3 = 5,
nose_4 = 8,
nose_5 = 10,
nose_6 = 0,
cheeks_1 = 2,
cheeks_2 = -10,
cheeks_3 = 6,
lip_thickness = -2,
jaw_1 = 0,
jaw_2 = 0,
chin_1 = 0,
chin_2 = 0,
chin_13 = 0,
chin_4 = 0,
neck_thickness = 0,
hair_1 = 76,
hair_2 = 0,
hair_color_1 = 61,
hair_color_2 = 29,
tshirt_1 = 4,
tshirt_2 = 2,
torso_1 = 23,
torso_2 = 2,
decals_1 = 0,
decals_2 = 0,
arms = 1,
arms_2 = 0,
pants_1 = 28,
pants_2 = 3,
shoes_1 = 70,
shoes_2 = 2,
mask_1 = 0,
mask_2 = 0,
bproof_1 = 0,
bproof_2 = 0,
chain_1 = 22,
chain_2 = 2,
helmet_1 = -1,
helmet_2 = 0,
glasses_1 = 0,
glasses_2 = 0,
watches_1 = -1,
watches_2 = 0,
bracelets_1 = -1,
bracelets_2 = 0,
bags_1 = 0,
bags_2 = 0,
eye_color = 0,
eye_squint = 0,
eyebrows_2 = 0,
eyebrows_1 = 0,
eyebrows_3 = 0,
eyebrows_4 = 0,
eyebrows_5 = 0,
eyebrows_6 = 0,
makeup_1 = 0,
makeup_2 = 0,
makeup_3 = 0,
makeup_4 = 0,
lipstick_1 = 0,
lipstick_2 = 0,
lipstick_3 = 0,
lipstick_4 = 0,
ears_1 = -1,
ears_2 = 0,
chest_1 = 0,
chest_2 = 0,
chest_3 = 0,
bodyb_1 = -1,
bodyb_2 = 0,
bodyb_3 = -1,
bodyb_4 = 0,
age_1 = 0,
age_2 = 0,
blemishes_1 = 0,
blemishes_2 = 0,
blush_1 = 0,
blush_2 = 0,
blush_3 = 0,
complexion_1 = 0,
complexion_2 = 0,
sun_1 = 0,
sun_2 = 0,
moles_1 = 0,
moles_2 = 0,
beard_1 = 11,
beard_2 = 10,
beard_3 = 0,
beard_4 = 0
},
["f"] = {
mom = 28,
@@ -221,6 +220,6 @@ else
beard_2 = 0,
beard_3 = 0,
beard_4 = 0
}
}
}
end
end
+7 -7
View File
@@ -2,17 +2,17 @@ fx_version 'cerulean'
game 'gta5'
author 'ESX-Framework - Linden - KASH'
description 'Official Multicharacter System For ESX Legacy'
version '1.9.4'
version '1.9.5'
lua54 'yes'
dependencies {'es_extended', 'esx_context', 'esx_identity', 'esx_skin'}
dependencies { 'es_extended', 'esx_context', 'esx_identity', 'esx_skin' }
shared_scripts {'@es_extended/imports.lua', '@es_extended/locale.lua', 'locales/*.lua', 'config.lua'}
shared_scripts { '@es_extended/imports.lua', '@es_extended/locale.lua', 'locales/*.lua', 'config.lua' }
server_scripts {'@oxmysql/lib/MySQL.lua', 'server/*.lua'}
server_scripts { '@oxmysql/lib/MySQL.lua', 'server/*.lua' }
client_scripts {'client/*.lua'}
client_scripts { 'client/*.lua' }
ui_page {'html/ui.html'}
ui_page { 'html/ui.html' }
files {'html/ui.html', 'html/css/main.css', 'html/js/app.js', 'html/locales/*.js'}
files { 'html/ui.html', 'html/css/main.css', 'html/js/app.js', 'html/locales/*.js' }
+2 -2
View File
@@ -17,7 +17,7 @@ Locales["fi"] = {
["character"] = "Hahmo: %s",
["return"] = "Takaisin",
["return_description"] = "Palaa hahmojen valintaan.",
["command_setslots"] = "Määritä pelaajan multicharacter paikkojen määrä",
["command_setslots"] = "Määritä pelaajan multicharacter paikkojen määrä",
["command_remslots"] = "Vähennä pelaajan multicharacter paikkojen määrää",
["command_enablechar"] = "Muuta pelaajan tietty hahmo käyttöön",
["command_disablechar"] = "Muuta pelaajan tietty hahmo pois käytöstä",
@@ -28,6 +28,6 @@ Locales["fi"] = {
["slotsedit"] = "Olet määrittänyt %s kohteeseen %s",
["slotsrem"] = "Poistit paikat kohteesta %s",
["charenabled"] = "Otit käyttöön hahmon #%s / %s",
["chardisabled"] = "Poistit hahmon #%s / %s käytöstä",
["chardisabled"] = "Poistit hahmon #%s / %s käytöstä",
["charnotfound"] = "Hahmoa #%s / %s ei ole olemassa",
}
+6 -6
View File
@@ -10,11 +10,11 @@ Locales["sl"] = {
["char_disabled_description"] = "Ta znak je neuporaben.",
["char_delete"] = "Izbriši",
["char_delete_description"] = "Trajno odstrani ta znak.",
["char_delete_confirmation"] = "Potrditev brisanja",
["char_delete_confirmation_description"] = "Ali ste prepicani da hocete zbrisati svoj karakter*",
["char_delete_yes_description"] = "Da",
["char_delete_no_description"] = "Ne",
["character"] = "Znak: %s",
["char_delete_confirmation"] = "Potrditev brisanja",
["char_delete_confirmation_description"] = "Ali ste prepicani da hocete zbrisati svoj karakter*",
["char_delete_yes_description"] = "Da",
["char_delete_no_description"] = "Ne",
["character"] = "Znak: %s",
["return"] = "Vrni se",
["return_description"] = "Nazaj na izbiro znakov.",
["command_setslots"] = "Nastavi število večznakovnih mest za igralca",
@@ -30,4 +30,4 @@ Locales["sl"] = {
["charenabled"] = "Omogočili ste znak #%s od %s",
["chardisabled"] = "Onemogočili ste znak #%s od %s",
["charnotfound"] = "Znak #%s od %s ne obstaja",
}
}
+1 -1
View File
@@ -30,4 +30,4 @@ Locales["sr"] = {
["charenabled"] = "Dozvolili ste karakter #%s od %s",
["chardisabled"] = "Zabranili ste karakter #%s od %s",
["charnotfound"] = "Karakter #%s od %s ne postoji",
}
}
+39 -27
View File
@@ -1,13 +1,17 @@
ESX.RegisterCommand('setslots', 'admin', function(xPlayer, args)
MySQL.insert('INSERT INTO `multicharacter_slots` (`identifier`, `slots`) VALUES (?, ?) ON DUPLICATE KEY UPDATE `slots` = VALUES(`slots`)', {
args.identifier,
args.slots,
})
xPlayer.triggerEvent('esx:showNotification', TranslateCap('slotsadd', args.slots, args.identifier))
end, true, {help = TranslateCap('command_setslots'), validate = true, arguments = {
{name = 'identifier', help = TranslateCap('command_identifier'), type = 'string'},
{name = 'slots', help = TranslateCap('command_slots'), type = 'number'}
}})
MySQL.insert('INSERT INTO `multicharacter_slots` (`identifier`, `slots`) VALUES (?, ?) ON DUPLICATE KEY UPDATE `slots` = VALUES(`slots`)', {
args.identifier,
args.slots,
})
xPlayer.triggerEvent('esx:showNotification', TranslateCap('slotsadd', args.slots, args.identifier))
end, true, {
help = TranslateCap('command_setslots'),
validate = true,
arguments = {
{ name = 'identifier', help = TranslateCap('command_identifier'), type = 'string' },
{ name = 'slots', help = TranslateCap('command_slots'), type = 'number' }
}
})
ESX.RegisterCommand('remslots', 'admin', function(xPlayer, args)
local slots = MySQL.scalar.await('SELECT `slots` FROM `multicharacter_slots` WHERE identifier = ?', {
@@ -20,14 +24,17 @@ ESX.RegisterCommand('remslots', 'admin', function(xPlayer, args)
})
xPlayer.triggerEvent('esx:showNotification', TranslateCap('slotsrem', args.identifier))
end
end, true, {help = TranslateCap('command_remslots'), validate = true, arguments = {
{name = 'identifier', help = TranslateCap('command_identifier'), type = 'string'}
}})
end, true, {
help = TranslateCap('command_remslots'),
validate = true,
arguments = {
{ name = 'identifier', help = TranslateCap('command_identifier'), type = 'string' }
}
})
ESX.RegisterCommand('enablechar', 'admin', function(xPlayer, args)
local selectedCharacter = 'char' .. args.charslot .. ':' .. args.identifier;
local selectedCharacter = 'char'..args.charslot..':'..args.identifier;
MySQL.update('UPDATE `users` SET `disabled` = 0 WHERE identifier = ?', {
selectedCharacter
}, function(result)
@@ -37,16 +44,18 @@ ESX.RegisterCommand('enablechar', 'admin', function(xPlayer, args)
xPlayer.triggerEvent('esx:showNotification', TranslateCap('charnotfound', args.charslot, args.identifier))
end
end)
end, true, {help = TranslateCap('command_enablechar'), validate = true, arguments = {
{name = 'identifier', help = TranslateCap('command_identifier'), type = 'string'},
{name = 'charslot', help = TranslateCap('command_charslot'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_enablechar'),
validate = true,
arguments = {
{ name = 'identifier', help = TranslateCap('command_identifier'), type = 'string' },
{ name = 'charslot', help = TranslateCap('command_charslot'), type = 'number' }
}
})
ESX.RegisterCommand('disablechar', 'admin', function(xPlayer, args)
local selectedCharacter = 'char' .. args.charslot .. ':' .. args.identifier;
local selectedCharacter = 'char'..args.charslot..':'..args.identifier;
MySQL.update('UPDATE `users` SET `disabled` = 1 WHERE identifier = ?', {
selectedCharacter
}, function(result)
@@ -56,12 +65,15 @@ ESX.RegisterCommand('disablechar', 'admin', function(xPlayer, args)
xPlayer.triggerEvent('esx:showNotification', TranslateCap('charnotfound', args.charslot, args.identifier))
end
end)
end, true, {help = TranslateCap('command_disablechar'), validate = true, arguments = {
{name = 'identifier', help = TranslateCap('command_identifier'), type = 'string'},
{name = 'charslot', help = TranslateCap('command_charslot'), type = 'number'}
}})
end, true, {
help = TranslateCap('command_disablechar'),
validate = true,
arguments = {
{ name = 'identifier', help = TranslateCap('command_identifier'), type = 'string' },
{ name = 'charslot', help = TranslateCap('command_charslot'), type = 'number' }
}
})
RegisterCommand('forcelog', function(source)
TriggerEvent('esx:playerLogout', source)
end, true)
end, true)
+1 -2
View File
@@ -4,7 +4,6 @@ local Debug = ESX.GetConfig().EnableDebug
---@param length number the length of the notification
---@param message any the message :D
local function Notify(notificatonType, length, message)
if Debug then
print(('1 %s'):format(tostring(notificatonType)))
print(('2 %s'):format(tostring(length)))
@@ -56,4 +55,4 @@ if Debug then
RegisterCommand("notify3", function()
ESX.ShowNotification("You Did something ~r~WRONG~s~!", "error", 3000)
end)
end
end
+1 -1
View File
@@ -1,7 +1,7 @@
fx_version 'adamant'
lua54 'yes'
game 'gta5'
version '1.9.4'
version '1.9.5'
author 'ESX-Framework'
description 'Official NUI Notification system for ESX'
+2 -2
View File
@@ -1,6 +1,6 @@
local CurrentProgress = nil
local function Progressbar(message,length,Options)
local function Progressbar(message, length, Options)
if CurrentProgress then
return false
end
@@ -8,7 +8,7 @@ local function Progressbar(message,length,Options)
if CurrentProgress.animation then
if CurrentProgress.animation.type == "anim" then
ESX.Streaming.RequestAnimDict(CurrentProgress.animation.dict, function()
TaskPlayAnim(ESX.PlayerData.ped, CurrentProgress.animation.dict, CurrentProgress.animation.lib, 1.0, 1.0, length, 1, 1.0, false,false,false)
TaskPlayAnim(ESX.PlayerData.ped, CurrentProgress.animation.dict, CurrentProgress.animation.lib, 1.0, 1.0, length, 1, 1.0, false, false, false)
RemoveAnimDict(CurrentProgress.animation.dict)
end)
elseif CurrentProgress.animation.type == "Scenario" then
+1 -1
View File
@@ -2,7 +2,7 @@ fx_version 'adamant'
game 'gta5'
author 'ESX-Framework'
lua54 'yes'
version '1.9.4'
version '1.9.5'
description 'ESX Progressbar'
client_scripts { 'Progress.lua' }
+10 -11
View File
@@ -23,7 +23,7 @@ function OpenMenu(submitCb, cancelCb, restrict)
for i = 1, #components, 1 do
local found = false
for j=1, #restrict, 1 do
for j = 1, #restrict, 1 do
if components[i].name == restrict[j] then
found = true
end
@@ -49,7 +49,7 @@ function OpenMenu(submitCb, cancelCb, restrict)
value = value,
min = _components[i].min,
textureof = _components[i].textureof,
zoomOffset= _components[i].zoomOffset,
zoomOffset = _components[i].zoomOffset,
camOffset = _components[i].camOffset,
type = 'slider'
}
@@ -112,7 +112,7 @@ function OpenMenu(submitCb, cancelCb, restrict)
newData.value = 0
end
menu.update({name = elements[i].name}, newData)
menu.update({ name = elements[i].name }, newData)
end
menu.refresh()
@@ -161,16 +161,16 @@ CreateThread(function()
DisableControlAction(0, 25, true) -- Input Aim
DisableControlAction(0, 24, true) -- Input Attack
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
local angle = heading * math.pi / 180.0
local theta = {
local angle = heading * math.pi / 180.0
local theta = {
x = math.cos(angle),
y = math.sin(angle)
}
local pos = {
local pos = {
x = coords.x + (zoomOffset * theta.x),
y = coords.y + (zoomOffset * theta.y)
}
@@ -224,7 +224,7 @@ CreateThread(function()
heading = angle + 0.0
end
Wait(sleep)
Wait(sleep)
end
end)
@@ -242,7 +242,6 @@ function OpenSaveableMenu(submitCb, cancelCb, restrict)
submitCb(data, menu)
end
end)
end, cancelCb, restrict)
end
@@ -260,7 +259,7 @@ AddEventHandler('esx_skin:playerRegistered', function()
if firstSpawn then
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin)
if skin == nil then
TriggerEvent('skinchanger:loadSkin', {sex = 0}, OpenSaveableMenu)
TriggerEvent('skinchanger:loadSkin', { sex = 0 }, OpenSaveableMenu)
Wait(100)
else
TriggerEvent('skinchanger:loadSkin', skin)
+1 -1
View File
@@ -4,7 +4,7 @@ game 'gta5'
description 'ESX Skin'
version '1.9.4'
version '1.9.5'
lua54 'yes'
shared_script '@es_extended/imports.lua'
+1 -1
View File
@@ -3,4 +3,4 @@ Locales["da"] = {
["use_rotate_view"] = "brug ~INPUT_FRONTEND_LS~ og ~INPUT_CHARACTER_WHEEL~ for at dreje kameraet.",
["skin"] = "skift udseende",
["saveskin"] = "gem udseende til en fil",
}
}
+5 -5
View File
@@ -1,6 +1,6 @@
Locales["pt"] = {
["skin_menu"] = "Menu de Skin",
["use_rotate_view"] = "Usa ~INPUT_FRONTEND_LS~ e ~INPUT_CHARACTER_WHEEL~ para rodar a câmara.",
["skin"] = "alterar skin",
["saveskin"] = "salvar a skin num ficheiro",
}
["skin_menu"] = "Menu de Skin",
["use_rotate_view"] = "Usa ~INPUT_FRONTEND_LS~ e ~INPUT_CHARACTER_WHEEL~ para rodar a câmara.",
["skin"] = "alterar skin",
["saveskin"] = "salvar a skin num ficheiro",
}
+5 -5
View File
@@ -1,6 +1,6 @@
Locales["zh-cn"] = {
["skin_menu"] = "皮肤选单",
["use_rotate_view"] = "使用 ~INPUT_FRONTEND_LS~ 和 ~INPUT_CHARACTER_WHEEL~ 旋转镜头视角.",
["skin"] = "更换皮肤数据",
["saveskin"] = "保存皮肤数据",
}
["skin_menu"] = "皮肤选单",
["use_rotate_view"] = "使用 ~INPUT_FRONTEND_LS~ 和 ~INPUT_CHARACTER_WHEEL~ 旋转镜头视角.",
["skin"] = "更换皮肤数据",
["saveskin"] = "保存皮肤数据",
}
+12 -12
View File
@@ -21,18 +21,18 @@ end)
RegisterServerEvent('esx_skin:setWeight')
AddEventHandler('esx_skin:setWeight', function(skin)
local xPlayer = ESX.GetPlayerFromId(source)
local xPlayer = ESX.GetPlayerFromId(source)
if not ESX.GetConfig().OxInventory then
local defaultMaxWeight = ESX.GetConfig().MaxWeight
local backpackModifier = Config.BackpackWeight[skin.bags_1]
if not ESX.GetConfig().OxInventory then
local defaultMaxWeight = ESX.GetConfig().MaxWeight
local backpackModifier = Config.BackpackWeight[skin.bags_1]
if backpackModifier then
xPlayer.setMaxWeight(defaultMaxWeight + backpackModifier)
else
xPlayer.setMaxWeight(defaultMaxWeight)
end
end
if backpackModifier then
xPlayer.setMaxWeight(defaultMaxWeight + backpackModifier)
else
xPlayer.setMaxWeight(defaultMaxWeight)
end
end
end)
RegisterServerEvent('esx_skin:responseSaveSkin')
@@ -73,8 +73,8 @@ end)
ESX.RegisterCommand('skin', 'admin', function(xPlayer)
xPlayer.triggerEvent('esx_skin:openSaveableMenu')
end, false, {help = TranslateCap('skin')})
end, false, { help = TranslateCap('skin') })
ESX.RegisterCommand('skinsave', 'admin', function(xPlayer)
xPlayer.triggerEvent('esx_skin:requestSaveSkin')
end, false, {help = TranslateCap('saveskin')})
end, false, { help = TranslateCap('saveskin') })
+2 -2
View File
@@ -12,8 +12,8 @@ local function TextUI(message, typ)
end
local function HideUI()
if not isShowing then return end
isShowing = false
if not isShowing then return end
isShowing = false
SendNUIMessage({
action = 'hide'
})
+1 -1
View File
@@ -1,7 +1,7 @@
fx_version 'adamant'
game 'gta5'
author 'ESX-Framework'
version '1.9.4'
version '1.9.5'
description 'ESX TextUI'
lua54 'yes'
client_scripts { 'TextUI.lua' }
+48 -48
View File
@@ -178,47 +178,47 @@ function ApplySkin(skin, clothes)
SetPedHeadBlendData(playerPed, Character['mom'], Character['dad'], 0, Character['mom'], Character['dad'], 0,
face_weight, skin_weight, 0.0, false)
SetPedFaceFeature(playerPed, 0, (Character['nose_1'] / 10) + 0.0) -- Nose Width
SetPedFaceFeature(playerPed, 1, (Character['nose_2'] / 10) + 0.0) -- Nose Peak Height
SetPedFaceFeature(playerPed, 2, (Character['nose_3'] / 10) + 0.0) -- Nose Peak Length
SetPedFaceFeature(playerPed, 3, (Character['nose_4'] / 10) + 0.0) -- Nose Bone Height
SetPedFaceFeature(playerPed, 4, (Character['nose_5'] / 10) + 0.0) -- Nose Peak Lowering
SetPedFaceFeature(playerPed, 5, (Character['nose_6'] / 10) + 0.0) -- Nose Bone Twist
SetPedFaceFeature(playerPed, 6, (Character['eyebrows_5'] / 10) + 0.0) -- Eyebrow height
SetPedFaceFeature(playerPed, 7, (Character['eyebrows_6'] / 10) + 0.0) -- Eyebrow depth
SetPedFaceFeature(playerPed, 8, (Character['cheeks_1'] / 10) + 0.0) -- Cheekbones Height
SetPedFaceFeature(playerPed, 9, (Character['cheeks_2'] / 10) + 0.0) -- Cheekbones Width
SetPedFaceFeature(playerPed, 10, (Character['cheeks_3'] / 10) + 0.0) -- Cheeks Width
SetPedFaceFeature(playerPed, 11, (Character['eye_squint'] / 10) + 0.0) -- Eyes squint
SetPedFaceFeature(playerPed, 12, (Character['lip_thickness'] / 10) + 0.0) -- Lip Fullness
SetPedFaceFeature(playerPed, 13, (Character['jaw_1'] / 10) + 0.0) -- Jaw Bone Width
SetPedFaceFeature(playerPed, 14, (Character['jaw_2'] / 10) + 0.0) -- Jaw Bone Length
SetPedFaceFeature(playerPed, 15, (Character['chin_1'] / 10) + 0.0) -- Chin Height
SetPedFaceFeature(playerPed, 16, (Character['chin_2'] / 10) + 0.0) -- Chin Length
SetPedFaceFeature(playerPed, 17, (Character['chin_3'] / 10) + 0.0) -- Chin Width
SetPedFaceFeature(playerPed, 18, (Character['chin_4'] / 10) + 0.0) -- Chin Hole Size
SetPedFaceFeature(playerPed, 19, (Character['neck_thickness'] / 10) + 0.0) -- Neck Thickness
SetPedFaceFeature(playerPed, 0, (Character['nose_1'] / 10) + 0.0) -- Nose Width
SetPedFaceFeature(playerPed, 1, (Character['nose_2'] / 10) + 0.0) -- Nose Peak Height
SetPedFaceFeature(playerPed, 2, (Character['nose_3'] / 10) + 0.0) -- Nose Peak Length
SetPedFaceFeature(playerPed, 3, (Character['nose_4'] / 10) + 0.0) -- Nose Bone Height
SetPedFaceFeature(playerPed, 4, (Character['nose_5'] / 10) + 0.0) -- Nose Peak Lowering
SetPedFaceFeature(playerPed, 5, (Character['nose_6'] / 10) + 0.0) -- Nose Bone Twist
SetPedFaceFeature(playerPed, 6, (Character['eyebrows_5'] / 10) + 0.0) -- Eyebrow height
SetPedFaceFeature(playerPed, 7, (Character['eyebrows_6'] / 10) + 0.0) -- Eyebrow depth
SetPedFaceFeature(playerPed, 8, (Character['cheeks_1'] / 10) + 0.0) -- Cheekbones Height
SetPedFaceFeature(playerPed, 9, (Character['cheeks_2'] / 10) + 0.0) -- Cheekbones Width
SetPedFaceFeature(playerPed, 10, (Character['cheeks_3'] / 10) + 0.0) -- Cheeks Width
SetPedFaceFeature(playerPed, 11, (Character['eye_squint'] / 10) + 0.0) -- Eyes squint
SetPedFaceFeature(playerPed, 12, (Character['lip_thickness'] / 10) + 0.0) -- Lip Fullness
SetPedFaceFeature(playerPed, 13, (Character['jaw_1'] / 10) + 0.0) -- Jaw Bone Width
SetPedFaceFeature(playerPed, 14, (Character['jaw_2'] / 10) + 0.0) -- Jaw Bone Length
SetPedFaceFeature(playerPed, 15, (Character['chin_1'] / 10) + 0.0) -- Chin Height
SetPedFaceFeature(playerPed, 16, (Character['chin_2'] / 10) + 0.0) -- Chin Length
SetPedFaceFeature(playerPed, 17, (Character['chin_3'] / 10) + 0.0) -- Chin Width
SetPedFaceFeature(playerPed, 18, (Character['chin_4'] / 10) + 0.0) -- Chin Hole Size
SetPedFaceFeature(playerPed, 19, (Character['neck_thickness'] / 10) + 0.0) -- Neck Thickness
SetPedHairColor(playerPed, Character['hair_color_1'], Character['hair_color_2']) -- Hair Color
SetPedHeadOverlay(playerPed, 3, Character['age_1'], (Character['age_2'] / 10) + 0.0) -- Age + opacity
SetPedHeadOverlay(playerPed, 0, Character['blemishes_1'], (Character['blemishes_2'] / 10) + 0.0) -- Blemishes + opacity
SetPedHeadOverlay(playerPed, 1, Character['beard_1'], (Character['beard_2'] / 10) + 0.0) -- Beard + opacity
SetPedEyeColor(playerPed, Character['eye_color']) -- Eyes color
SetPedHeadOverlay(playerPed, 2, Character['eyebrows_1'], (Character['eyebrows_2'] / 10) + 0.0) -- Eyebrows + opacity
SetPedHeadOverlay(playerPed, 4, Character['makeup_1'], (Character['makeup_2'] / 10) + 0.0) -- Makeup + opacity
SetPedHeadOverlay(playerPed, 8, Character['lipstick_1'], (Character['lipstick_2'] / 10) + 0.0) -- Lipstick + opacity
SetPedComponentVariation(playerPed, 2, Character['hair_1'], Character['hair_2'], 2) -- Hair
SetPedHeadOverlayColor(playerPed, 1, 1, Character['beard_3'], Character['beard_4']) -- Beard Color
SetPedHeadOverlayColor(playerPed, 2, 1, Character['eyebrows_3'], Character['eyebrows_4']) -- Eyebrows Color
SetPedHeadOverlayColor(playerPed, 4, 2, Character['makeup_3'], Character['makeup_4']) -- Makeup Color
SetPedHeadOverlayColor(playerPed, 8, 1, Character['lipstick_3'], Character['lipstick_4']) -- Lipstick Color
SetPedHeadOverlay(playerPed, 5, Character['blush_1'], (Character['blush_2'] / 10) + 0.0) -- Blush + opacity
SetPedHeadOverlayColor(playerPed, 5, 2, Character['blush_3']) -- Blush Color
SetPedHairColor(playerPed, Character['hair_color_1'], Character['hair_color_2']) -- Hair Color
SetPedHeadOverlay(playerPed, 3, Character['age_1'], (Character['age_2'] / 10) + 0.0) -- Age + opacity
SetPedHeadOverlay(playerPed, 0, Character['blemishes_1'], (Character['blemishes_2'] / 10) + 0.0) -- Blemishes + opacity
SetPedHeadOverlay(playerPed, 1, Character['beard_1'], (Character['beard_2'] / 10) + 0.0) -- Beard + opacity
SetPedEyeColor(playerPed, Character['eye_color']) -- Eyes color
SetPedHeadOverlay(playerPed, 2, Character['eyebrows_1'], (Character['eyebrows_2'] / 10) + 0.0) -- Eyebrows + opacity
SetPedHeadOverlay(playerPed, 4, Character['makeup_1'], (Character['makeup_2'] / 10) + 0.0) -- Makeup + opacity
SetPedHeadOverlay(playerPed, 8, Character['lipstick_1'], (Character['lipstick_2'] / 10) + 0.0) -- Lipstick + opacity
SetPedComponentVariation(playerPed, 2, Character['hair_1'], Character['hair_2'], 2) -- Hair
SetPedHeadOverlayColor(playerPed, 1, 1, Character['beard_3'], Character['beard_4']) -- Beard Color
SetPedHeadOverlayColor(playerPed, 2, 1, Character['eyebrows_3'], Character['eyebrows_4']) -- Eyebrows Color
SetPedHeadOverlayColor(playerPed, 4, 2, Character['makeup_3'], Character['makeup_4']) -- Makeup Color
SetPedHeadOverlayColor(playerPed, 8, 1, Character['lipstick_3'], Character['lipstick_4']) -- Lipstick Color
SetPedHeadOverlay(playerPed, 5, Character['blush_1'], (Character['blush_2'] / 10) + 0.0) -- Blush + opacity
SetPedHeadOverlayColor(playerPed, 5, 2, Character['blush_3']) -- Blush Color
SetPedHeadOverlay(playerPed, 6, Character['complexion_1'], (Character['complexion_2'] / 10) + 0.0) -- Complexion + opacity
SetPedHeadOverlay(playerPed, 7, Character['sun_1'], (Character['sun_2'] / 10) + 0.0) -- Sun Damage + opacity
SetPedHeadOverlay(playerPed, 9, Character['moles_1'], (Character['moles_2'] / 10) + 0.0) -- Moles/Freckles + opacity
SetPedHeadOverlay(playerPed, 10, Character['chest_1'], (Character['chest_2'] / 10) + 0.0) -- Chest Hair + opacity
SetPedHeadOverlayColor(playerPed, 10, 1, Character['chest_3']) -- Torso Color
SetPedHeadOverlay(playerPed, 7, Character['sun_1'], (Character['sun_2'] / 10) + 0.0) -- Sun Damage + opacity
SetPedHeadOverlay(playerPed, 9, Character['moles_1'], (Character['moles_2'] / 10) + 0.0) -- Moles/Freckles + opacity
SetPedHeadOverlay(playerPed, 10, Character['chest_1'], (Character['chest_2'] / 10) + 0.0) -- Chest Hair + opacity
SetPedHeadOverlayColor(playerPed, 10, 1, Character['chest_3']) -- Torso Color
if Character['bodyb_1'] == -1 then
SetPedHeadOverlay(playerPed, 11, 255, (Character['bodyb_2'] / 10) + 0.0) -- Body Blemishes + opacity
@@ -238,16 +238,16 @@ function ApplySkin(skin, clothes)
SetPedPropIndex(playerPed, 2, Character['ears_1'], Character['ears_2'], 2) -- Ears Accessories
end
SetPedComponentVariation(playerPed, 8, Character['tshirt_1'], Character['tshirt_2'], 2) -- Tshirt
SetPedComponentVariation(playerPed, 11, Character['torso_1'], Character['torso_2'], 2) -- torso parts
SetPedComponentVariation(playerPed, 3, Character['arms'], Character['arms_2'], 2) -- Arms
SetPedComponentVariation(playerPed, 8, Character['tshirt_1'], Character['tshirt_2'], 2) -- Tshirt
SetPedComponentVariation(playerPed, 11, Character['torso_1'], Character['torso_2'], 2) -- torso parts
SetPedComponentVariation(playerPed, 3, Character['arms'], Character['arms_2'], 2) -- Arms
SetPedComponentVariation(playerPed, 10, Character['decals_1'], Character['decals_2'], 2) -- decals
SetPedComponentVariation(playerPed, 4, Character['pants_1'], Character['pants_2'], 2) -- pants
SetPedComponentVariation(playerPed, 6, Character['shoes_1'], Character['shoes_2'], 2) -- shoes
SetPedComponentVariation(playerPed, 1, Character['mask_1'], Character['mask_2'], 2) -- mask
SetPedComponentVariation(playerPed, 9, Character['bproof_1'], Character['bproof_2'], 2) -- bulletproof
SetPedComponentVariation(playerPed, 7, Character['chain_1'], Character['chain_2'], 2) -- chain
SetPedComponentVariation(playerPed, 5, Character['bags_1'], Character['bags_2'], 2) -- Bag
SetPedComponentVariation(playerPed, 4, Character['pants_1'], Character['pants_2'], 2) -- pants
SetPedComponentVariation(playerPed, 6, Character['shoes_1'], Character['shoes_2'], 2) -- shoes
SetPedComponentVariation(playerPed, 1, Character['mask_1'], Character['mask_2'], 2) -- mask
SetPedComponentVariation(playerPed, 9, Character['bproof_1'], Character['bproof_2'], 2) -- bulletproof
SetPedComponentVariation(playerPed, 7, Character['chain_1'], Character['chain_2'], 2) -- chain
SetPedComponentVariation(playerPed, 5, Character['bags_1'], Character['bags_2'], 2) -- Bag
if Character['helmet_1'] == -1 then
ClearPedProp(playerPed, 0)
+2 -2
View File
@@ -2,7 +2,7 @@ Config = {}
Config.Locale = GetConvar('esx:locale', 'en')
Config.Components = {{
Config.Components = { {
label = TranslateCap('sex'),
name = 'sex',
value = 0,
@@ -702,4 +702,4 @@ Config.Components = {{
min = 0,
zoomOffset = 0.4,
camOffset = 0.65
}}
} }
+1 -1
View File
@@ -6,7 +6,7 @@ lua54 'yes'
description 'Official ESX-Legacy resource for handling the Player`s Skin'
version '1.9.4'
version '1.9.5'
client_scripts {
'@es_extended/locale.lua',
+1 -1
View File
@@ -97,4 +97,4 @@ Locales["da"] = {
["bodyb_size"] = "krops pletter tykkelse",
["bodyb_extra"] = "pletter kropseffekt",
["bodyb_extra_thickness"] = "pletter kropseffekt tykkelse",
}
}
+1 -1
View File
@@ -56,7 +56,7 @@ Locales["fi"] = {
["bag"] = "Reput",
["bag_color"] = "Repun väri",
["blemishes"] = "Pisamat",
["blemishes_size"]= "Pisamien vahvuus",
["blemishes_size"] = "Pisamien vahvuus",
["ageing"] = "Ikääntyminen",
["ageing_1"] = "Ikääntyminen vahvuus",
["blush"] = "Punastuminen",
+99 -99
View File
@@ -1,100 +1,100 @@
Locales["nl"] = {
["sex"] = "geslacht",
["mom"] = "gezicht moeder",
["dad"] = "gezicht vader",
["resemblance"] = "gelijkenis",
["skin_tone"] = "huidskleur",
["nose_1"] = "neusbreedte",
["nose_2"] = "neuspiek hoogte",
["nose_3"] = "neuspiek lengte",
["nose_4"] = "neusbeen hoogte",
["nose_5"] = "neusbeen verlaging",
["nose_6"] = "neusbeen verdraaiing",
["cheeks_1"] = "jukbeenderen hoogte",
["cheeks_2"] = "jukbeenderen breedte",
["cheeks_3"] = "wangen breedte",
["lip_fullness"] = "lipvolheid",
["jaw_bone_width"] = "kaakbeen breedte",
["jaw_bone_length"] = "kaakbeen lengte",
["chin_height"] = "kin hoogte",
["chin_length"] = "kin lengte",
["chin_width"] = "kin breedte",
["chin_hole"] = "grootte van het kin-gat",
["neck_thickness"] = "nek dikte",
["wrinkles"] = "rimpels",
["wrinkle_thickness"] = "rimpels dikte",
["beard_type"] = "baard type",
["beard_size"] = "baard grootte",
["beard_color_1"] = "baard kleur 1",
["beard_color_2"] = "baard kleur 2",
["hair_1"] = "haar 1",
["hair_2"] = "haar 2",
["hair_color_1"] = "haar kleur 1",
["hair_color_2"] = "haar kleur 2",
["eye_color"] = "oogkleur",
["eye_squint"] = "oog scheelte",
["eyebrow_type"] = "wenkbrauw type",
["eyebrow_size"] = "wenkbrauw formaat",
["eyebrow_color_1"] = "wenkbrauw kleur 1",
["eyebrow_color_2"] = "wenkbrauw kleur 2",
["eyebrow_depth"] = "wenkbrauw diepte",
["eyebrow_height"] = "wenkbrauw hoogte",
["makeup_type"] = "makeup type",
["makeup_thickness"] = "makeup dikte",
["makeup_color_1"] = "makeup kleur 1",
["makeup_color_2"] = "makeup kleur 2",
["lipstick_type"] = "lippenstift type",
["lipstick_thickness"] = "lippenstift dikte",
["lipstick_color_1"] = "lippenstift kleur 1",
["lipstick_color_2"] = "lippenstift kleur 2",
["ear_accessories"] = "ooraccessoires",
["ear_accessories_color"] = "ooraccessoires kleur",
["tshirt_1"] = "t-shirt 1",
["tshirt_2"] = "t-shirt 2",
["torso_1"] = "vest 1",
["torso_2"] = "vest 2",
["decals_1"] = "stickers 1",
["decals_2"] = "stickers 2",
["arms"] = "armen",
["arms_2"] = "armen 2",
["pants_1"] = "broek 1",
["pants_2"] = "broek 2",
["shoes_1"] = "shoenen 1",
["shoes_2"] = "shoenen 2",
["mask_1"] = "masker 1",
["mask_2"] = "masker 2",
["bproof_1"] = "kogelvrij vest 1",
["bproof_2"] = "kogelvrij vest 2",
["chain_1"] = "ketting 1",
["chain_2"] = "ketting 2",
["helmet_1"] = "helm 1",
["helmet_2"] = "helm 2",
["watches_1"] = "horloge 1",
["watches_2"] = "horloge 2",
["bracelets_1"] = "armband(en) 1",
["bracelets_2"] = "armband(en) 2",
["glasses_1"] = "bril 1",
["glasses_2"] = "bril 2",
["bag"] = "rugzak",
["bag_color"] = "rugzak kleur",
["blemishes"] = "vlekken",
["blemishes_size"] = "vlekken dikte",
["ageing"] = "veroudering",
["ageing_1"] = "veroudering zichtbaarheid",
["blush"] = "blozen",
["blush_1"] = "blozen zichtbaarheid",
["blush_color"] = "blozen kleur",
["complexion"] = "gelaatskleur",
["complexion_1"] = "gelaatskleur 1",
["sun"] = "zon",
["sun_1"] = "zon dikte",
["freckles"] = "sproeten",
["freckles_1"] = "sproeten dikte",
["chest_hair"] = "borsthaar",
["chest_hair_1"] = "borsthaar dikte",
["chest_color"] = "borsthaar kleur",
["bodyb"] = "lichaamsvlekken",
["bodyb_size"] = "lichaamsvlekken zichtbaarheid",
["bodyb_extra"] = "lichaamsvlekken effect",
["bodyb_extra_thickness"] = "lichaamsvlekken effect zichtbaarheid",
}
["sex"] = "geslacht",
["mom"] = "gezicht moeder",
["dad"] = "gezicht vader",
["resemblance"] = "gelijkenis",
["skin_tone"] = "huidskleur",
["nose_1"] = "neusbreedte",
["nose_2"] = "neuspiek hoogte",
["nose_3"] = "neuspiek lengte",
["nose_4"] = "neusbeen hoogte",
["nose_5"] = "neusbeen verlaging",
["nose_6"] = "neusbeen verdraaiing",
["cheeks_1"] = "jukbeenderen hoogte",
["cheeks_2"] = "jukbeenderen breedte",
["cheeks_3"] = "wangen breedte",
["lip_fullness"] = "lipvolheid",
["jaw_bone_width"] = "kaakbeen breedte",
["jaw_bone_length"] = "kaakbeen lengte",
["chin_height"] = "kin hoogte",
["chin_length"] = "kin lengte",
["chin_width"] = "kin breedte",
["chin_hole"] = "grootte van het kin-gat",
["neck_thickness"] = "nek dikte",
["wrinkles"] = "rimpels",
["wrinkle_thickness"] = "rimpels dikte",
["beard_type"] = "baard type",
["beard_size"] = "baard grootte",
["beard_color_1"] = "baard kleur 1",
["beard_color_2"] = "baard kleur 2",
["hair_1"] = "haar 1",
["hair_2"] = "haar 2",
["hair_color_1"] = "haar kleur 1",
["hair_color_2"] = "haar kleur 2",
["eye_color"] = "oogkleur",
["eye_squint"] = "oog scheelte",
["eyebrow_type"] = "wenkbrauw type",
["eyebrow_size"] = "wenkbrauw formaat",
["eyebrow_color_1"] = "wenkbrauw kleur 1",
["eyebrow_color_2"] = "wenkbrauw kleur 2",
["eyebrow_depth"] = "wenkbrauw diepte",
["eyebrow_height"] = "wenkbrauw hoogte",
["makeup_type"] = "makeup type",
["makeup_thickness"] = "makeup dikte",
["makeup_color_1"] = "makeup kleur 1",
["makeup_color_2"] = "makeup kleur 2",
["lipstick_type"] = "lippenstift type",
["lipstick_thickness"] = "lippenstift dikte",
["lipstick_color_1"] = "lippenstift kleur 1",
["lipstick_color_2"] = "lippenstift kleur 2",
["ear_accessories"] = "ooraccessoires",
["ear_accessories_color"] = "ooraccessoires kleur",
["tshirt_1"] = "t-shirt 1",
["tshirt_2"] = "t-shirt 2",
["torso_1"] = "vest 1",
["torso_2"] = "vest 2",
["decals_1"] = "stickers 1",
["decals_2"] = "stickers 2",
["arms"] = "armen",
["arms_2"] = "armen 2",
["pants_1"] = "broek 1",
["pants_2"] = "broek 2",
["shoes_1"] = "shoenen 1",
["shoes_2"] = "shoenen 2",
["mask_1"] = "masker 1",
["mask_2"] = "masker 2",
["bproof_1"] = "kogelvrij vest 1",
["bproof_2"] = "kogelvrij vest 2",
["chain_1"] = "ketting 1",
["chain_2"] = "ketting 2",
["helmet_1"] = "helm 1",
["helmet_2"] = "helm 2",
["watches_1"] = "horloge 1",
["watches_2"] = "horloge 2",
["bracelets_1"] = "armband(en) 1",
["bracelets_2"] = "armband(en) 2",
["glasses_1"] = "bril 1",
["glasses_2"] = "bril 2",
["bag"] = "rugzak",
["bag_color"] = "rugzak kleur",
["blemishes"] = "vlekken",
["blemishes_size"] = "vlekken dikte",
["ageing"] = "veroudering",
["ageing_1"] = "veroudering zichtbaarheid",
["blush"] = "blozen",
["blush_1"] = "blozen zichtbaarheid",
["blush_color"] = "blozen kleur",
["complexion"] = "gelaatskleur",
["complexion_1"] = "gelaatskleur 1",
["sun"] = "zon",
["sun_1"] = "zon dikte",
["freckles"] = "sproeten",
["freckles_1"] = "sproeten dikte",
["chest_hair"] = "borsthaar",
["chest_hair_1"] = "borsthaar dikte",
["chest_color"] = "borsthaar kleur",
["bodyb"] = "lichaamsvlekken",
["bodyb_size"] = "lichaamsvlekken zichtbaarheid",
["bodyb_extra"] = "lichaamsvlekken effect",
["bodyb_extra_thickness"] = "lichaamsvlekken effect zichtbaarheid",
}
+1 -1
View File
@@ -80,7 +80,7 @@ Locales["pl"] = {
["bag"] = "torba",
["bag_color"] = "kolor torby",
["blemishes"] = "skazy",
["blemishes_size"]= "wielkość skaz",
["blemishes_size"] = "wielkość skaz",
["ageing"] = "starzenie",
["ageing_1"] = "wielkość starzenia",
["blush"] = "rumieńce",
+99 -99
View File
@@ -1,100 +1,100 @@
Locales["pt"] = {
["sex"] = "sexo",
["mom"] = "cara da mãe",
["dad"] = "cara do pai",
["resemblance"] = "semelhanças",
["skin_tone"] = "tom de pele",
["nose_1"] = "largura do nariz",
["nose_2"] = "altura da ponta do nariz",
["nose_3"] = "tamanho da ponta do nariz",
["nose_4"] = "altura do nariz",
["nose_5"] = "reduzir ponta do nariz",
["nose_6"] = "torcer o nariz",
["cheeks_1"] = "altura das maçãs do rosto",
["cheeks_2"] = "largura das maçãs do rosto",
["cheeks_3"] = "largura das bochechas",
["lip_fullness"] = "preenchimento labial",
["jaw_bone_width"] = "largura do maxilar",
["jaw_bone_length"] = "comprimento do maxilar",
["chin_height"] = "altura do queixo",
["chin_length"] = "comprimento do queixo",
["chin_width"] = "largura do queixo",
["chin_hole"] = "tamanho do buraco do queixo",
["neck_thickness"] = "espessura do pescoço",
["wrinkles"] = "rugas",
["wrinkle_thickness"] = "espessura das rugas",
["beard_type"] = "tipo de barba",
["beard_size"] = "tamanho da barba",
["beard_color_1"] = "cor da barba 1",
["beard_color_2"] = "cor da barba 2",
["hair_1"] = "cabelo 1",
["hair_2"] = "cabelo 2",
["hair_color_1"] = "cor do cabelo 1",
["hair_color_2"] = "cor do cabelo 2",
["eye_color"] = "cor dos olhos",
["eye_squint"] = "estrabismo",
["eyebrow_type"] = "tipo de sobrancelha",
["eyebrow_size"] = "tamanho da sobrancelha",
["eyebrow_color_1"] = "cor da sobrancelha 1",
["eyebrow_color_2"] = "cor da sobrancelha 2",
["eyebrow_depth"] = "profundidade da sobrancelha",
["eyebrow_height"] = "altura da sobrancelha",
["makeup_type"] = "tipo de maquiagem",
["makeup_thickness"] = "espessura da maquiagem",
["makeup_color_1"] = "cor da maquiagem 1",
["makeup_color_2"] = "cor da maquiagem 2",
["lipstick_type"] = "tipo de batom",
["lipstick_thickness"] = "espessura do batom",
["lipstick_color_1"] = "cor do batom 1",
["lipstick_color_2"] = "cor do batom 2",
["ear_accessories"] = "acessórios de ouvido",
["ear_accessories_color"] = "cor dos acessórios de ouvido",
["tshirt_1"] = "t-Shirt 1",
["tshirt_2"] = "t-Shirt 2",
["torso_1"] = "casaco 1",
["torso_2"] = "casaco 2",
["decals_1"] = "autocolantes 1",
["decals_2"] = "autocolantes 2",
["arms"] = "braços",
["arms_2"] = "braços 2",
["pants_1"] = "calças 1",
["pants_2"] = "calças 2",
["shoes_1"] = "sapatos 1",
["shoes_2"] = "sapatos 2",
["mask_1"] = "máscara 1",
["mask_2"] = "máscara 2",
["bproof_1"] = "colete 1",
["bproof_2"] = "colete 2",
["chain_1"] = "colar 1",
["chain_2"] = "colar 2",
["helmet_1"] = "capacete 1",
["helmet_2"] = "capacete 2",
["watches_1"] = "relógio 1",
["watches_2"] = "relógio 2",
["bracelets_1"] = "pulseiras 1",
["bracelets_2"] = "pulseiras 2",
["glasses_1"] = "óculos 1",
["glasses_2"] = "óculos 2",
["bag"] = "mochila",
["bag_color"] = "cor da mochila",
["blemishes"] = "manchas",
["blemishes_size"] = "espessura de manchas",
["ageing"] = "envelhecimento",
["ageing_1"] = "espessura de envelhecimento",
["blush"] = "corar",
["blush_1"] = "espessura do blush",
["blush_color"] = "cor de blush",
["complexion"] = "aparência",
["complexion_1"] = "aparência 2",
["sun"] = "sol",
["sun_1"] = "espessura do sol",
["freckles"] = "sardas",
["freckles_1"] = "espessura das sardas",
["chest_hair"] = "pelos no peito",
["chest_hair_1"] = "espessura dos pelos do peito",
["chest_color"] = "cor dos pelos dos peitos",
["bodyb"] = "manchas no corpo",
["bodyb_size"] = "espessura das manchas no corpo",
["bodyb_extra"] = "extra das manchas no corpo",
["bodyb_extra_thickness"] = "cor do extra das manchas no corpo",
}
["sex"] = "sexo",
["mom"] = "cara da mãe",
["dad"] = "cara do pai",
["resemblance"] = "semelhanças",
["skin_tone"] = "tom de pele",
["nose_1"] = "largura do nariz",
["nose_2"] = "altura da ponta do nariz",
["nose_3"] = "tamanho da ponta do nariz",
["nose_4"] = "altura do nariz",
["nose_5"] = "reduzir ponta do nariz",
["nose_6"] = "torcer o nariz",
["cheeks_1"] = "altura das maçãs do rosto",
["cheeks_2"] = "largura das maçãs do rosto",
["cheeks_3"] = "largura das bochechas",
["lip_fullness"] = "preenchimento labial",
["jaw_bone_width"] = "largura do maxilar",
["jaw_bone_length"] = "comprimento do maxilar",
["chin_height"] = "altura do queixo",
["chin_length"] = "comprimento do queixo",
["chin_width"] = "largura do queixo",
["chin_hole"] = "tamanho do buraco do queixo",
["neck_thickness"] = "espessura do pescoço",
["wrinkles"] = "rugas",
["wrinkle_thickness"] = "espessura das rugas",
["beard_type"] = "tipo de barba",
["beard_size"] = "tamanho da barba",
["beard_color_1"] = "cor da barba 1",
["beard_color_2"] = "cor da barba 2",
["hair_1"] = "cabelo 1",
["hair_2"] = "cabelo 2",
["hair_color_1"] = "cor do cabelo 1",
["hair_color_2"] = "cor do cabelo 2",
["eye_color"] = "cor dos olhos",
["eye_squint"] = "estrabismo",
["eyebrow_type"] = "tipo de sobrancelha",
["eyebrow_size"] = "tamanho da sobrancelha",
["eyebrow_color_1"] = "cor da sobrancelha 1",
["eyebrow_color_2"] = "cor da sobrancelha 2",
["eyebrow_depth"] = "profundidade da sobrancelha",
["eyebrow_height"] = "altura da sobrancelha",
["makeup_type"] = "tipo de maquiagem",
["makeup_thickness"] = "espessura da maquiagem",
["makeup_color_1"] = "cor da maquiagem 1",
["makeup_color_2"] = "cor da maquiagem 2",
["lipstick_type"] = "tipo de batom",
["lipstick_thickness"] = "espessura do batom",
["lipstick_color_1"] = "cor do batom 1",
["lipstick_color_2"] = "cor do batom 2",
["ear_accessories"] = "acessórios de ouvido",
["ear_accessories_color"] = "cor dos acessórios de ouvido",
["tshirt_1"] = "t-Shirt 1",
["tshirt_2"] = "t-Shirt 2",
["torso_1"] = "casaco 1",
["torso_2"] = "casaco 2",
["decals_1"] = "autocolantes 1",
["decals_2"] = "autocolantes 2",
["arms"] = "braços",
["arms_2"] = "braços 2",
["pants_1"] = "calças 1",
["pants_2"] = "calças 2",
["shoes_1"] = "sapatos 1",
["shoes_2"] = "sapatos 2",
["mask_1"] = "máscara 1",
["mask_2"] = "máscara 2",
["bproof_1"] = "colete 1",
["bproof_2"] = "colete 2",
["chain_1"] = "colar 1",
["chain_2"] = "colar 2",
["helmet_1"] = "capacete 1",
["helmet_2"] = "capacete 2",
["watches_1"] = "relógio 1",
["watches_2"] = "relógio 2",
["bracelets_1"] = "pulseiras 1",
["bracelets_2"] = "pulseiras 2",
["glasses_1"] = "óculos 1",
["glasses_2"] = "óculos 2",
["bag"] = "mochila",
["bag_color"] = "cor da mochila",
["blemishes"] = "manchas",
["blemishes_size"] = "espessura de manchas",
["ageing"] = "envelhecimento",
["ageing_1"] = "espessura de envelhecimento",
["blush"] = "corar",
["blush_1"] = "espessura do blush",
["blush_color"] = "cor de blush",
["complexion"] = "aparência",
["complexion_1"] = "aparência 2",
["sun"] = "sol",
["sun_1"] = "espessura do sol",
["freckles"] = "sardas",
["freckles_1"] = "espessura das sardas",
["chest_hair"] = "pelos no peito",
["chest_hair_1"] = "espessura dos pelos do peito",
["chest_color"] = "cor dos pelos dos peitos",
["bodyb"] = "manchas no corpo",
["bodyb_size"] = "espessura das manchas no corpo",
["bodyb_extra"] = "extra das manchas no corpo",
["bodyb_extra_thickness"] = "cor do extra das manchas no corpo",
}