appearance done + esx stuff removed
This commit is contained in:
parent
e4b7186910
commit
b849ee5785
@ -1,5 +1,3 @@
|
||||
### 2024-10-20 18:17:30.946
|
||||
setgroup 1 owner
|
||||
### 2024-10-20 18:17:39.654
|
||||
setgroup 1 superadmin
|
||||
### 2024-10-20 19:41:56.235
|
||||
@ -78,7 +76,17 @@ ensure "ui_pmenu"
|
||||
txaReportResources
|
||||
### 2025-03-17 13:21:02.116
|
||||
txaReportResources
|
||||
### 2025-03-17 13:25:13.990
|
||||
txaEvent "serverShuttingDown" "{\"delay\":5000,\"author\":\"androxaaa\",\"message\":\"Server restarting (admin request).\"}"
|
||||
### 2025-03-17 13:28:58.791
|
||||
quit "host shutting down"
|
||||
### 2025-03-17 15:18:56.763
|
||||
txaEvent "serverShuttingDown" "{\"delay\":5000,\"author\":\"androxaaa\",\"message\":\"Server shutting down (admin request).\"}"
|
||||
### 2025-03-17 15:51:55.750
|
||||
txaEvent "serverShuttingDown" "{\"delay\":5000,\"author\":\"androxaaa\",\"message\":\"Server restarting (admin request).\"}"
|
||||
### 2025-03-17 15:55:56.729
|
||||
setgroup 1 owner
|
||||
### 2025-03-17 15:55:56.780
|
||||
txaEvent "consoleCommand" "{\"channel\":\"txAdmin\",\"command\":\"setgroup 1 owner\",\"author\":\"androxaaa\"}"
|
||||
### 2025-03-17 15:56:09.510
|
||||
setgroup 1 admin
|
||||
### 2025-03-17 15:56:09.536
|
||||
txaEvent "consoleCommand" "{\"channel\":\"txAdmin\",\"command\":\"setgroup 1 admin\",\"author\":\"androxaaa\"}"
|
||||
|
||||
BIN
icon.png
BIN
icon.png
Binary file not shown.
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 3.7 KiB |
85
resources/[core]/illenium-appearance/client/blips.lua
Normal file
85
resources/[core]/illenium-appearance/client/blips.lua
Normal file
@ -0,0 +1,85 @@
|
||||
local Blips = {}
|
||||
local client = client
|
||||
|
||||
local function ShowBlip(blipConfig, blip)
|
||||
if blip.job and blip.job ~= client.job.name then
|
||||
return false
|
||||
elseif blip.gang and blip.gang ~= client.gang.name then
|
||||
return false
|
||||
end
|
||||
|
||||
if Config.RCoreTattoosCompatibility and blip.type == "tattoo" then
|
||||
return false
|
||||
end
|
||||
|
||||
return (blipConfig.Show and blip.showBlip == nil) or blip.showBlip
|
||||
end
|
||||
|
||||
local function CreateBlip(blipConfig, coords)
|
||||
local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
|
||||
SetBlipSprite(blip, blipConfig.Sprite)
|
||||
SetBlipColour(blip, blipConfig.Color)
|
||||
SetBlipScale(blip, blipConfig.Scale)
|
||||
SetBlipAsShortRange(blip, true)
|
||||
BeginTextCommandSetBlipName("STRING")
|
||||
AddTextComponentString(blipConfig.Name)
|
||||
EndTextCommandSetBlipName(blip)
|
||||
return blip
|
||||
end
|
||||
|
||||
local function SetupBlips()
|
||||
for k, _ in pairs(Config.Stores) do
|
||||
local blipConfig = Config.Blips[Config.Stores[k].type]
|
||||
if ShowBlip(blipConfig, Config.Stores[k]) then
|
||||
local blip = CreateBlip(blipConfig, Config.Stores[k].coords)
|
||||
Blips[#Blips + 1] = blip
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ResetBlips()
|
||||
if Config.ShowNearestShopOnly then
|
||||
return
|
||||
end
|
||||
|
||||
for i = 1, #Blips do
|
||||
RemoveBlip(Blips[i])
|
||||
end
|
||||
Blips = {}
|
||||
SetupBlips()
|
||||
end
|
||||
|
||||
local function ShowNearestShopBlip()
|
||||
for k in pairs(Config.Blips) do
|
||||
Blips[k] = 0
|
||||
end
|
||||
while true do
|
||||
local coords = GetEntityCoords(cache.ped)
|
||||
for shopType, blipConfig in pairs(Config.Blips) do
|
||||
local closest = 1000000
|
||||
local closestCoords
|
||||
|
||||
for _, shop in pairs(Config.Stores) do
|
||||
if shop.type == shopType and ShowBlip(blipConfig, shop) then
|
||||
local dist = #(coords - vector3(shop.coords.xyz))
|
||||
if dist < closest then
|
||||
closest = dist
|
||||
closestCoords = shop.coords
|
||||
end
|
||||
end
|
||||
end
|
||||
if DoesBlipExist(Blips[shopType]) then
|
||||
RemoveBlip(Blips[shopType])
|
||||
end
|
||||
|
||||
if closestCoords then
|
||||
Blips[shopType] = CreateBlip(blipConfig, closestCoords)
|
||||
end
|
||||
end
|
||||
Wait(Config.NearestShopBlipUpdateDelay)
|
||||
end
|
||||
end
|
||||
|
||||
if Config.ShowNearestShopOnly then
|
||||
CreateThread(ShowNearestShopBlip)
|
||||
end
|
||||
756
resources/[core]/illenium-appearance/client/client.lua
Normal file
756
resources/[core]/illenium-appearance/client/client.lua
Normal file
@ -0,0 +1,756 @@
|
||||
local client = client
|
||||
local reloadSkinTimer = GetGameTimer()
|
||||
|
||||
local function LoadPlayerUniform(reset)
|
||||
if reset then
|
||||
TriggerServerEvent("illenium-appearance:server:syncUniform", nil)
|
||||
return
|
||||
end
|
||||
lib.callback("illenium-appearance:server:getUniform", false, function(uniformData)
|
||||
if not uniformData then
|
||||
return
|
||||
end
|
||||
if Config.BossManagedOutfits then
|
||||
local result = lib.callback.await("illenium-appearance:server:getManagementOutfits", false, uniformData.type, Framework.GetGender())
|
||||
local uniform = nil
|
||||
for i = 1, #result, 1 do
|
||||
if result[i].name == uniformData.name then
|
||||
uniform = {
|
||||
type = uniformData.type,
|
||||
name = result[i].name,
|
||||
model = result[i].model,
|
||||
components = result[i].components,
|
||||
props = result[i].props,
|
||||
disableSave = true,
|
||||
}
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not uniform then
|
||||
TriggerServerEvent("illenium-appearance:server:syncUniform", nil) -- Uniform doesn't exist anymore
|
||||
return
|
||||
end
|
||||
|
||||
TriggerEvent("illenium-appearance:client:changeOutfit", uniform)
|
||||
else
|
||||
local outfits = Config.Outfits[uniformData.jobName][uniformData.gender]
|
||||
local uniform = nil
|
||||
for i = 1, #outfits, 1 do
|
||||
if outfits[i].name == uniformData.label then
|
||||
uniform = outfits[i]
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not uniform then
|
||||
TriggerServerEvent("illenium-appearance:server:syncUniform", nil) -- Uniform doesn't exist anymore
|
||||
return
|
||||
end
|
||||
|
||||
uniform.jobName = uniformData.jobName
|
||||
uniform.gender = uniformData.gender
|
||||
|
||||
TriggerEvent("illenium-appearance:client:loadJobOutfit", uniform)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function InitAppearance()
|
||||
Framework.UpdatePlayerData()
|
||||
lib.callback("illenium-appearance:server:getAppearance", false, function(appearance)
|
||||
if not appearance then
|
||||
return
|
||||
end
|
||||
|
||||
client.setPlayerAppearance(appearance)
|
||||
if Config.PersistUniforms then
|
||||
LoadPlayerUniform()
|
||||
end
|
||||
end)
|
||||
ResetBlips()
|
||||
if Config.BossManagedOutfits then
|
||||
Management.AddItems()
|
||||
end
|
||||
RestorePlayerStats()
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStart", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
InitAppearance()
|
||||
end
|
||||
end)
|
||||
|
||||
local function getNewCharacterConfig()
|
||||
local config = GetDefaultConfig()
|
||||
config.enableExit = false
|
||||
|
||||
config.ped = Config.NewCharacterSections.Ped
|
||||
config.headBlend = Config.NewCharacterSections.HeadBlend
|
||||
config.faceFeatures = Config.NewCharacterSections.FaceFeatures
|
||||
config.headOverlays = Config.NewCharacterSections.HeadOverlays
|
||||
config.components = Config.NewCharacterSections.Components
|
||||
config.props = Config.NewCharacterSections.Props
|
||||
config.tattoos = not Config.RCoreTattoosCompatibility and Config.NewCharacterSections.Tattoos
|
||||
|
||||
return config
|
||||
end
|
||||
|
||||
function SetInitialClothes(initial)
|
||||
client.setPlayerModel(initial.Model)
|
||||
-- Fix for tattoo's appearing when creating a new character
|
||||
local ped = cache.ped
|
||||
client.setPedTattoos(ped, {})
|
||||
client.setPedComponents(ped, initial.Components)
|
||||
client.setPedProps(ped, initial.Props)
|
||||
client.setPedHair(ped, initial.Hair, {})
|
||||
ClearPedDecorations(ped)
|
||||
end
|
||||
|
||||
function InitializeCharacter(gender, onSubmit, onCancel)
|
||||
SetInitialClothes(Config.InitialPlayerClothes[gender])
|
||||
local config = getNewCharacterConfig()
|
||||
TriggerServerEvent("illenium-appearance:server:ChangeRoutingBucket")
|
||||
client.startPlayerCustomization(function(appearance)
|
||||
if (appearance) then
|
||||
TriggerServerEvent("illenium-appearance:server:saveAppearance", appearance)
|
||||
if onSubmit then
|
||||
onSubmit()
|
||||
end
|
||||
elseif onCancel then
|
||||
onCancel()
|
||||
end
|
||||
Framework.CachePed()
|
||||
TriggerServerEvent("illenium-appearance:server:ResetRoutingBucket")
|
||||
end, config)
|
||||
end
|
||||
|
||||
function OpenShop(config, isPedMenu, shopType)
|
||||
lib.callback("illenium-appearance:server:hasMoney", false, function(hasMoney, money)
|
||||
if not hasMoney and not isPedMenu then
|
||||
lib.notify({
|
||||
title = "Cannot Enter Shop",
|
||||
description = "Not enough cash. Need $" .. money,
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
client.startPlayerCustomization(function(appearance)
|
||||
if appearance then
|
||||
if not isPedMenu then
|
||||
TriggerServerEvent("illenium-appearance:server:chargeCustomer", shopType)
|
||||
end
|
||||
TriggerServerEvent("illenium-appearance:server:saveAppearance", appearance)
|
||||
else
|
||||
lib.notify({
|
||||
title = _L("cancelled.title"),
|
||||
description = _L("cancelled.description"),
|
||||
type = "inform",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
Framework.CachePed()
|
||||
end, config)
|
||||
end, shopType)
|
||||
end
|
||||
|
||||
local function OpenClothingShop(isPedMenu)
|
||||
local config = GetDefaultConfig()
|
||||
config.components = true
|
||||
config.props = true
|
||||
|
||||
if isPedMenu then
|
||||
config.ped = true
|
||||
config.headBlend = true
|
||||
config.faceFeatures = true
|
||||
config.headOverlays = true
|
||||
config.tattoos = not Config.RCoreTattoosCompatibility and true
|
||||
end
|
||||
OpenShop(config, isPedMenu, "clothing")
|
||||
end
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:openClothingShop", OpenClothingShop)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:importOutfitCode", function()
|
||||
local response = lib.inputDialog(_L("outfits.import.title"), {
|
||||
{
|
||||
type = "input",
|
||||
label = _L("outfits.import.name.label"),
|
||||
placeholder = _L("outfits.import.name.placeholder"),
|
||||
default = _L("outfits.import.name.default"),
|
||||
required = true
|
||||
},
|
||||
{
|
||||
type = "input",
|
||||
label = _L("outfits.import.code.label"),
|
||||
placeholder = "XXXXXXXXXXXX",
|
||||
required = true
|
||||
}
|
||||
})
|
||||
|
||||
if not response then
|
||||
return
|
||||
end
|
||||
|
||||
local outfitName = response[1]
|
||||
local outfitCode = response[2]
|
||||
if outfitCode ~= nil then
|
||||
Wait(500)
|
||||
lib.callback("illenium-appearance:server:importOutfitCode", false, function(success)
|
||||
if success then
|
||||
lib.notify({
|
||||
title = _L("outfits.import.success.title"),
|
||||
description = _L("outfits.import.success.description"),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
else
|
||||
lib.notify({
|
||||
title = _L("outfits.import.failure.title"),
|
||||
description = _L("outfits.import.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
end, outfitName, outfitCode)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:generateOutfitCode", function(id)
|
||||
lib.callback("illenium-appearance:server:generateOutfitCode", false, function(code)
|
||||
if not code then
|
||||
lib.notify({
|
||||
title = _L("outfits.generate.failure.title"),
|
||||
description = _L("outfits.generate.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
lib.setClipboard(code)
|
||||
lib.inputDialog(_L("outfits.generate.success.title"), {
|
||||
{
|
||||
type = "input",
|
||||
label = _L("outfits.generate.success.description"),
|
||||
default = code,
|
||||
disabled = true
|
||||
}
|
||||
})
|
||||
end, id)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:saveOutfit", function()
|
||||
local response = lib.inputDialog(_L("outfits.save.title"), {
|
||||
{
|
||||
type = "input",
|
||||
label = _L("outfits.save.name.label"),
|
||||
placeholder = _L("outfits.save.name.placeholder"),
|
||||
required = true
|
||||
}
|
||||
})
|
||||
|
||||
if not response then
|
||||
return
|
||||
end
|
||||
|
||||
local outfitName = response[1]
|
||||
if outfitName then
|
||||
Wait(500)
|
||||
lib.callback("illenium-appearance:server:getOutfits", false, function(outfits)
|
||||
local outfitExists = false
|
||||
for i = 1, #outfits, 1 do
|
||||
if outfits[i].name:lower() == outfitName:lower() then
|
||||
outfitExists = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if outfitExists then
|
||||
lib.notify({
|
||||
title = _L("outfits.save.failure.title"),
|
||||
description = _L("outfits.save.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
local pedModel = client.getPedModel(cache.ped)
|
||||
local pedComponents = client.getPedComponents(cache.ped)
|
||||
local pedProps = client.getPedProps(cache.ped)
|
||||
|
||||
TriggerServerEvent("illenium-appearance:server:saveOutfit", outfitName, pedModel, pedComponents, pedProps)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('illenium-appearance:client:updateOutfit', function(outfitID)
|
||||
if not outfitID then return end
|
||||
|
||||
lib.callback("illenium-appearance:server:getOutfits", false, function(outfits)
|
||||
local outfitExists = false
|
||||
for i = 1, #outfits, 1 do
|
||||
if outfits[i].id == outfitID then
|
||||
outfitExists = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not outfitExists then
|
||||
lib.notify({
|
||||
title = _L("outfits.update.failure.title"),
|
||||
description = _L("outfits.update.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
local pedModel = client.getPedModel(cache.ped)
|
||||
local pedComponents = client.getPedComponents(cache.ped)
|
||||
local pedProps = client.getPedProps(cache.ped)
|
||||
|
||||
TriggerServerEvent("illenium-appearance:server:updateOutfit", outfitID, pedModel, pedComponents, pedProps)
|
||||
end)
|
||||
end)
|
||||
|
||||
local function RegisterChangeOutfitMenu(id, parent, outfits, mType)
|
||||
local changeOutfitMenu = {
|
||||
id = id,
|
||||
title = _L("outfits.change.title"),
|
||||
menu = parent,
|
||||
options = {}
|
||||
}
|
||||
for i = 1, #outfits, 1 do
|
||||
changeOutfitMenu.options[#changeOutfitMenu.options + 1] = {
|
||||
title = outfits[i].name,
|
||||
description = outfits[i].model,
|
||||
event = "illenium-appearance:client:changeOutfit",
|
||||
args = {
|
||||
type = mType,
|
||||
name = outfits[i].name,
|
||||
model = outfits[i].model,
|
||||
components = outfits[i].components,
|
||||
props = outfits[i].props,
|
||||
disableSave = mType and true or false
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
table.sort(changeOutfitMenu.options, function(a, b)
|
||||
return a.title < b.title
|
||||
end)
|
||||
|
||||
lib.registerContext(changeOutfitMenu)
|
||||
end
|
||||
|
||||
local function RegisterUpdateOutfitMenu(id, parent, outfits)
|
||||
local updateOutfitMenu = {
|
||||
id = id,
|
||||
title = _L("outfits.update.title"),
|
||||
menu = parent,
|
||||
options = {}
|
||||
}
|
||||
for i = 1, #outfits, 1 do
|
||||
updateOutfitMenu.options[#updateOutfitMenu.options + 1] = {
|
||||
title = outfits[i].name,
|
||||
description = outfits[i].model,
|
||||
event = "illenium-appearance:client:updateOutfit",
|
||||
args = outfits[i].id
|
||||
}
|
||||
end
|
||||
|
||||
table.sort(updateOutfitMenu.options, function(a, b)
|
||||
return a.title < b.title
|
||||
end)
|
||||
|
||||
lib.registerContext(updateOutfitMenu)
|
||||
end
|
||||
|
||||
local function RegisterGenerateOutfitCodeMenu(id, parent, outfits)
|
||||
local generateOutfitCodeMenu = {
|
||||
id = id,
|
||||
title = _L("outfits.generate.title"),
|
||||
menu = parent,
|
||||
options = {}
|
||||
}
|
||||
for i = 1, #outfits, 1 do
|
||||
generateOutfitCodeMenu.options[#generateOutfitCodeMenu.options + 1] = {
|
||||
title = outfits[i].name,
|
||||
description = outfits[i].model,
|
||||
event = "illenium-appearance:client:generateOutfitCode",
|
||||
args = outfits[i].id
|
||||
}
|
||||
end
|
||||
|
||||
lib.registerContext(generateOutfitCodeMenu)
|
||||
end
|
||||
|
||||
local function RegisterDeleteOutfitMenu(id, parent, outfits, deleteEvent)
|
||||
local deleteOutfitMenu = {
|
||||
id = id,
|
||||
title = _L("outfits.delete.title"),
|
||||
menu = parent,
|
||||
options = {}
|
||||
}
|
||||
|
||||
table.sort(outfits, function(a, b)
|
||||
return a.name < b.name
|
||||
end)
|
||||
|
||||
for i = 1, #outfits, 1 do
|
||||
deleteOutfitMenu.options[#deleteOutfitMenu.options + 1] = {
|
||||
title = string.format(_L("outfits.delete.item.title"), outfits[i].name),
|
||||
description = string.format(_L("outfits.delete.item.description"), outfits[i].model, (outfits[i].gender and (" - Gender: " .. outfits[i].gender) or "")),
|
||||
event = deleteEvent,
|
||||
args = outfits[i].id
|
||||
}
|
||||
end
|
||||
|
||||
lib.registerContext(deleteOutfitMenu)
|
||||
end
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:OutfitManagementMenu", function(args)
|
||||
local outfits = lib.callback.await("illenium-appearance:server:getManagementOutfits", false, args.type, Framework.GetGender())
|
||||
local managementMenuID = "illenium_appearance_outfit_management_menu"
|
||||
local changeManagementOutfitMenuID = "illenium_appearance_change_management_outfit_menu"
|
||||
local deleteManagementOutfitMenuID = "illenium_appearance_delete_management_outfit_menu"
|
||||
|
||||
RegisterChangeOutfitMenu(changeManagementOutfitMenuID, managementMenuID, outfits, args.type)
|
||||
RegisterDeleteOutfitMenu(deleteManagementOutfitMenuID, managementMenuID, outfits, "illenium-appearance:client:DeleteManagementOutfit")
|
||||
local managementMenu = {
|
||||
id = managementMenuID,
|
||||
title = string.format(_L("outfits.manage.title"), args.type),
|
||||
options = {
|
||||
{
|
||||
title = _L("outfits.change.title"),
|
||||
description = string.format(_L("outfits.change.description"), args.type),
|
||||
menu = changeManagementOutfitMenuID,
|
||||
},
|
||||
{
|
||||
title = _L("outfits.save.menuTitle"),
|
||||
description = string.format(_L("outfits.save.menuDescription"), args.type),
|
||||
event = "illenium-appearance:client:SaveManagementOutfit",
|
||||
args = args.type
|
||||
},
|
||||
{
|
||||
title = _L("outfits.delete.title"),
|
||||
description = string.format(_L("outfits.delete.description"), args.type),
|
||||
menu = deleteManagementOutfitMenuID,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Management.AddBackMenuItem(managementMenu, args)
|
||||
|
||||
lib.registerContext(managementMenu)
|
||||
lib.showContext(managementMenuID)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:SaveManagementOutfit", function(mType)
|
||||
local outfitData = {
|
||||
Type = mType,
|
||||
Model = client.getPedModel(cache.ped),
|
||||
Components = client.getPedComponents(cache.ped),
|
||||
Props = client.getPedProps(cache.ped)
|
||||
}
|
||||
|
||||
local rankValues
|
||||
|
||||
if mType == "Job" then
|
||||
outfitData.JobName = client.job.name
|
||||
rankValues = Framework.GetRankInputValues("job")
|
||||
|
||||
else
|
||||
outfitData.JobName = client.gang.name
|
||||
rankValues = Framework.GetRankInputValues("gang")
|
||||
end
|
||||
|
||||
local dialogResponse = lib.inputDialog(_L("outfits.save.managementTitle"), {
|
||||
{
|
||||
label = _L("outfits.save.name.label"),
|
||||
type = "input",
|
||||
required = true
|
||||
},
|
||||
{
|
||||
label = _L("outfits.save.gender.label"),
|
||||
type = "select",
|
||||
options = {
|
||||
{
|
||||
label = _L("outfits.save.gender.male"), value = "male"
|
||||
},
|
||||
{
|
||||
label = _L("outfits.save.gender.female"), value = "female"
|
||||
}
|
||||
},
|
||||
default = "male",
|
||||
},
|
||||
{
|
||||
label = _L("outfits.save.rank.label"),
|
||||
type = "select",
|
||||
options = rankValues,
|
||||
default = "0"
|
||||
}
|
||||
})
|
||||
|
||||
if not dialogResponse then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
outfitData.Name = dialogResponse[1]
|
||||
outfitData.Gender = dialogResponse[2]
|
||||
outfitData.MinRank = tonumber(dialogResponse[3])
|
||||
|
||||
TriggerServerEvent("illenium-appearance:server:saveManagementOutfit", outfitData)
|
||||
|
||||
end)
|
||||
|
||||
local function RegisterWorkOutfitsListMenu(id, parent, menuData)
|
||||
local menu = {
|
||||
id = id,
|
||||
menu = parent,
|
||||
title = _L("jobOutfits.title"),
|
||||
options = {}
|
||||
}
|
||||
local event = "illenium-appearance:client:loadJobOutfit"
|
||||
if Config.BossManagedOutfits then
|
||||
event = "illenium-appearance:client:changeOutfit"
|
||||
end
|
||||
if menuData then
|
||||
for _, v in pairs(menuData) do
|
||||
menu.options[#menu.options + 1] = {
|
||||
title = v.name,
|
||||
event = event,
|
||||
args = v
|
||||
}
|
||||
end
|
||||
end
|
||||
lib.registerContext(menu)
|
||||
end
|
||||
|
||||
function OpenMenu(isPedMenu, menuType, menuData)
|
||||
local mainMenuID = "illenium_appearance_main_menu"
|
||||
local mainMenu = {
|
||||
id = mainMenuID
|
||||
}
|
||||
local menuItems = {}
|
||||
|
||||
local outfits = lib.callback.await("illenium-appearance:server:getOutfits", false)
|
||||
local changeOutfitMenuID = "illenium_appearance_change_outfit_menu"
|
||||
local updateOutfitMenuID = "illenium_appearance_update_outfit_menu"
|
||||
local deleteOutfitMenuID = "illenium_appearance_delete_outfit_menu"
|
||||
local generateOutfitCodeMenuID = "illenium_appearance_generate_outfit_code_menu"
|
||||
|
||||
RegisterChangeOutfitMenu(changeOutfitMenuID, mainMenuID, outfits)
|
||||
RegisterUpdateOutfitMenu(updateOutfitMenuID, mainMenuID, outfits)
|
||||
RegisterDeleteOutfitMenu(deleteOutfitMenuID, mainMenuID, outfits, "illenium-appearance:client:deleteOutfit")
|
||||
RegisterGenerateOutfitCodeMenu(generateOutfitCodeMenuID, mainMenuID, outfits)
|
||||
local outfitMenuItems = {
|
||||
{
|
||||
title = _L("outfits.change.title"),
|
||||
description = _L("outfits.change.pDescription"),
|
||||
menu = changeOutfitMenuID
|
||||
},
|
||||
{
|
||||
title = _L("outfits.update.title"),
|
||||
description = _L("outfits.update.description"),
|
||||
menu = updateOutfitMenuID
|
||||
},
|
||||
{
|
||||
title = _L("outfits.save.menuTitle"),
|
||||
description = _L("outfits.save.description"),
|
||||
event = "illenium-appearance:client:saveOutfit"
|
||||
},
|
||||
{
|
||||
title = _L("outfits.generate.title"),
|
||||
description = _L("outfits.generate.description"),
|
||||
menu = generateOutfitCodeMenuID
|
||||
},
|
||||
{
|
||||
title = _L("outfits.delete.title"),
|
||||
description = _L("outfits.delete.mDescription"),
|
||||
menu = deleteOutfitMenuID
|
||||
},
|
||||
{
|
||||
title = _L("outfits.import.menuTitle"),
|
||||
description = _L("outfits.import.description"),
|
||||
event = "illenium-appearance:client:importOutfitCode"
|
||||
}
|
||||
}
|
||||
if menuType == "default" then
|
||||
local header = string.format(_L("clothing.title"), Config.ClothingCost)
|
||||
if isPedMenu then
|
||||
header = _L("clothing.titleNoPrice")
|
||||
end
|
||||
mainMenu.title = _L("clothing.options.title")
|
||||
menuItems[#menuItems + 1] = {
|
||||
title = header,
|
||||
description = _L("clothing.options.description"),
|
||||
event = "illenium-appearance:client:openClothingShop",
|
||||
args = isPedMenu
|
||||
}
|
||||
for i = 0, #outfitMenuItems, 1 do
|
||||
menuItems[#menuItems + 1] = outfitMenuItems[i]
|
||||
end
|
||||
elseif menuType == "outfit" then
|
||||
mainMenu.title = _L("clothing.outfits.title")
|
||||
for i = 0, #outfitMenuItems, 1 do
|
||||
menuItems[#menuItems + 1] = outfitMenuItems[i]
|
||||
end
|
||||
elseif menuType == "job-outfit" then
|
||||
mainMenu.title = _L("clothing.outfits.title")
|
||||
menuItems[#menuItems + 1] = {
|
||||
title = _L("clothing.outfits.civilian.title"),
|
||||
description = _L("clothing.outfits.civilian.description"),
|
||||
event = "illenium-appearance:client:reloadSkin",
|
||||
args = true
|
||||
}
|
||||
|
||||
local workOutfitsMenuID = "illenium_appearance_work_outfits_menu"
|
||||
RegisterWorkOutfitsListMenu(workOutfitsMenuID, mainMenuID, menuData)
|
||||
|
||||
menuItems[#menuItems + 1] = {
|
||||
title = _L("jobOutfits.title"),
|
||||
description = _L("jobOutfits.description"),
|
||||
menu = workOutfitsMenuID
|
||||
}
|
||||
end
|
||||
mainMenu.options = menuItems
|
||||
|
||||
lib.registerContext(mainMenu)
|
||||
lib.showContext(mainMenuID)
|
||||
end
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:openClothingShopMenu", function(isPedMenu)
|
||||
if type(isPedMenu) == "table" then
|
||||
isPedMenu = false
|
||||
end
|
||||
OpenMenu(isPedMenu, "default")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:OpenBarberShop", OpenBarberShop)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:OpenTattooShop", OpenTattooShop)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:OpenSurgeonShop", OpenSurgeonShop)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:changeOutfit", function(data)
|
||||
local pedModel = client.getPedModel(cache.ped)
|
||||
local appearanceDB
|
||||
if pedModel ~= data.model then
|
||||
local p = promise.new()
|
||||
lib.callback("illenium-appearance:server:getAppearance", false, function(appearance)
|
||||
BackupPlayerStats()
|
||||
if appearance then
|
||||
client.setPlayerAppearance(appearance)
|
||||
RestorePlayerStats()
|
||||
else
|
||||
lib.notify({
|
||||
title = _L("outfits.change.failure.title"),
|
||||
description = _L("outfits.change.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
p:resolve(appearance)
|
||||
end, data.model)
|
||||
appearanceDB = Citizen.Await(p)
|
||||
else
|
||||
appearanceDB = client.getPedAppearance(cache.ped)
|
||||
end
|
||||
if appearanceDB then
|
||||
client.setPedComponents(cache.ped, data.components)
|
||||
client.setPedProps(cache.ped, data.props)
|
||||
client.setPedHair(cache.ped, appearanceDB.hair, appearanceDB.tattoos)
|
||||
|
||||
if data.disableSave then
|
||||
TriggerServerEvent("illenium-appearance:server:syncUniform", {
|
||||
type = data.type,
|
||||
name = data.name
|
||||
}) -- Is a uniform
|
||||
else
|
||||
local appearance = client.getPedAppearance(cache.ped)
|
||||
TriggerServerEvent("illenium-appearance:server:saveAppearance", appearance)
|
||||
end
|
||||
Framework.CachePed()
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:DeleteManagementOutfit", function(id)
|
||||
TriggerServerEvent("illenium-appearance:server:deleteManagementOutfit", id)
|
||||
lib.notify({
|
||||
title = _L("outfits.delete.management.success.title"),
|
||||
description = _L("outfits.delete.management.success.description"),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:deleteOutfit", function(id)
|
||||
TriggerServerEvent("illenium-appearance:server:deleteOutfit", id)
|
||||
lib.notify({
|
||||
title = _L("outfits.delete.success.title"),
|
||||
description = _L("outfits.delete.success.description"),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:openJobOutfitsMenu", function(outfitsToShow)
|
||||
OpenMenu(nil, "job-outfit", outfitsToShow)
|
||||
end)
|
||||
|
||||
local function InCooldown()
|
||||
return (GetGameTimer() - reloadSkinTimer) < Config.ReloadSkinCooldown
|
||||
end
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:reloadSkin", function(bypassChecks)
|
||||
if not bypassChecks and InCooldown() or Framework.CheckPlayerMeta() or cache.vehicle or IsPedFalling(cache.ped) then
|
||||
lib.notify({
|
||||
title = _L("commands.reloadskin.failure.title"),
|
||||
description = _L("commands.reloadskin.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
reloadSkinTimer = GetGameTimer()
|
||||
BackupPlayerStats()
|
||||
|
||||
lib.callback("illenium-appearance:server:getAppearance", false, function(appearance)
|
||||
if not appearance then
|
||||
return
|
||||
end
|
||||
client.setPlayerAppearance(appearance)
|
||||
if Config.PersistUniforms then
|
||||
LoadPlayerUniform(bypassChecks)
|
||||
end
|
||||
RestorePlayerStats()
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:ClearStuckProps", function()
|
||||
if InCooldown() or Framework.CheckPlayerMeta() then
|
||||
lib.notify({
|
||||
title = _L("commands.clearstuckprops.failure.title"),
|
||||
description = _L("commands.clearstuckprops.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
reloadSkinTimer = GetGameTimer()
|
||||
|
||||
for _, v in pairs(GetGamePool("CObject")) do
|
||||
if IsEntityAttachedToEntity(cache.ped, v) then
|
||||
SetEntityAsMissionEntity(v, true, true)
|
||||
DeleteObject(v)
|
||||
DeleteEntity(v)
|
||||
end
|
||||
end
|
||||
end)
|
||||
83
resources/[core]/illenium-appearance/client/common.lua
Normal file
83
resources/[core]/illenium-appearance/client/common.lua
Normal file
@ -0,0 +1,83 @@
|
||||
function CheckDuty()
|
||||
return not Config.OnDutyOnlyClothingRooms or (Config.OnDutyOnlyClothingRooms and client.job.onduty)
|
||||
end
|
||||
|
||||
function IsPlayerAllowedForOutfitRoom(outfitRoom)
|
||||
local isAllowed = false
|
||||
local count = #outfitRoom.citizenIDs
|
||||
for i = 1, count, 1 do
|
||||
if Framework.IsPlayerAllowed(outfitRoom.citizenIDs[i]) then
|
||||
isAllowed = true
|
||||
break
|
||||
end
|
||||
end
|
||||
return isAllowed or not outfitRoom.citizenIDs or count == 0
|
||||
end
|
||||
|
||||
function GetPlayerJobOutfits(job)
|
||||
local outfits = {}
|
||||
local gender = Framework.GetGender()
|
||||
local gradeLevel = job and Framework.GetJobGrade() or Framework.GetGangGrade()
|
||||
local jobName = job and client.job.name or client.gang.name
|
||||
|
||||
if Config.BossManagedOutfits then
|
||||
local mType = job and "Job" or "Gang"
|
||||
local result = lib.callback.await("illenium-appearance:server:getManagementOutfits", false, mType, gender)
|
||||
for i = 1, #result, 1 do
|
||||
outfits[#outfits + 1] = {
|
||||
type = mType,
|
||||
model = result[i].model,
|
||||
components = result[i].components,
|
||||
props = result[i].props,
|
||||
disableSave = true,
|
||||
name = result[i].name
|
||||
}
|
||||
end
|
||||
elseif Config.Outfits[jobName] and Config.Outfits[jobName][gender] then
|
||||
for i = 1, #Config.Outfits[jobName][gender], 1 do
|
||||
for _, v in pairs(Config.Outfits[jobName][gender][i].grades) do
|
||||
if v == gradeLevel then
|
||||
outfits[#outfits + 1] = Config.Outfits[jobName][gender][i]
|
||||
outfits[#outfits].gender = gender
|
||||
outfits[#outfits].jobName = jobName
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return outfits
|
||||
end
|
||||
|
||||
function OpenOutfitRoom(outfitRoom)
|
||||
local isAllowed = IsPlayerAllowedForOutfitRoom(outfitRoom)
|
||||
if isAllowed then
|
||||
OpenMenu(nil, "outfit")
|
||||
end
|
||||
end
|
||||
|
||||
function OpenBarberShop()
|
||||
local config = GetDefaultConfig()
|
||||
config.headOverlays = true
|
||||
OpenShop(config, false, "barber")
|
||||
end
|
||||
|
||||
function OpenTattooShop()
|
||||
local config = GetDefaultConfig()
|
||||
config.tattoos = true
|
||||
OpenShop(config, false, "tattoo")
|
||||
end
|
||||
|
||||
function OpenSurgeonShop()
|
||||
local config = GetDefaultConfig()
|
||||
config.headBlend = true
|
||||
config.faceFeatures = true
|
||||
OpenShop(config, false, "surgeon")
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
if Config.BossManagedOutfits then
|
||||
Management.RemoveItems()
|
||||
end
|
||||
end
|
||||
end)
|
||||
41
resources/[core]/illenium-appearance/client/defaults.lua
Normal file
41
resources/[core]/illenium-appearance/client/defaults.lua
Normal file
@ -0,0 +1,41 @@
|
||||
local function getComponentConfig()
|
||||
return {
|
||||
masks = not Config.DisableComponents.Masks,
|
||||
upperBody = not Config.DisableComponents.UpperBody,
|
||||
lowerBody = not Config.DisableComponents.LowerBody,
|
||||
bags = not Config.DisableComponents.Bags,
|
||||
shoes = not Config.DisableComponents.Shoes,
|
||||
scarfAndChains = not Config.DisableComponents.ScarfAndChains,
|
||||
bodyArmor = not Config.DisableComponents.BodyArmor,
|
||||
shirts = not Config.DisableComponents.Shirts,
|
||||
decals = not Config.DisableComponents.Decals,
|
||||
jackets = not Config.DisableComponents.Jackets
|
||||
}
|
||||
end
|
||||
|
||||
local function getPropConfig()
|
||||
return {
|
||||
hats = not Config.DisableProps.Hats,
|
||||
glasses = not Config.DisableProps.Glasses,
|
||||
ear = not Config.DisableProps.Ear,
|
||||
watches = not Config.DisableProps.Watches,
|
||||
bracelets = not Config.DisableProps.Bracelets
|
||||
}
|
||||
end
|
||||
|
||||
function GetDefaultConfig()
|
||||
return {
|
||||
ped = false,
|
||||
headBlend = false,
|
||||
faceFeatures = false,
|
||||
headOverlays = false,
|
||||
components = false,
|
||||
componentConfig = getComponentConfig(),
|
||||
props = false,
|
||||
propConfig = getPropConfig(),
|
||||
tattoos = false,
|
||||
enableExit = true,
|
||||
hasTracker = Config.PreventTrackerRemoval and Framework.HasTracker(),
|
||||
automaticFade = Config.AutomaticFade
|
||||
}
|
||||
end
|
||||
@ -0,0 +1,89 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
local client = client
|
||||
local firstSpawn = false
|
||||
|
||||
AddEventHandler("esx_skin:resetFirstSpawn", function()
|
||||
firstSpawn = true
|
||||
end)
|
||||
|
||||
AddEventHandler("esx_skin:playerRegistered", function()
|
||||
if(firstSpawn) then
|
||||
InitializeCharacter(Framework.GetGender(true))
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("skinchanger:loadSkin2", function(ped, skin)
|
||||
if not skin.model then skin.model = "mp_m_freemode_01" end
|
||||
client.setPedAppearance(ped, skin)
|
||||
Framework.CachePed()
|
||||
end)
|
||||
|
||||
RegisterNetEvent("skinchanger:getSkin", function(cb)
|
||||
while not Framework.PlayerData do
|
||||
Wait(1000)
|
||||
end
|
||||
lib.callback("illenium-appearance:server:getAppearance", false, function(appearance)
|
||||
cb(appearance)
|
||||
Framework.CachePed()
|
||||
end)
|
||||
end)
|
||||
|
||||
|
||||
local function LoadSkin(skin, cb)
|
||||
if skin.model then
|
||||
client.setPlayerAppearance(skin)
|
||||
else -- add validation invisible when failed registration (maybe server restarted when apply skin)
|
||||
SetInitialClothes(Config.InitialPlayerClothes[Framework.GetGender(true)])
|
||||
end
|
||||
if Framework.PlayerData and Framework.PlayerData.loadout then
|
||||
TriggerEvent("esx:restoreLoadout")
|
||||
end
|
||||
Framework.CachePed()
|
||||
if cb ~= nil then
|
||||
cb()
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent("skinchanger:loadSkin", function(skin, cb)
|
||||
LoadSkin(skin, cb)
|
||||
end)
|
||||
|
||||
local function loadClothes(_, clothes)
|
||||
local components = Framework.ConvertComponents(clothes, client.getPedComponents(cache.ped))
|
||||
local props = Framework.ConvertProps(clothes, client.getPedProps(cache.ped))
|
||||
|
||||
client.setPedComponents(cache.ped, components)
|
||||
client.setPedProps(cache.ped, props)
|
||||
end
|
||||
|
||||
RegisterNetEvent("skinchanger:loadClothes", function(_, clothes)
|
||||
loadClothes(_, clothes)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx_skin:openSaveableMenu", function(onSubmit, onCancel)
|
||||
InitializeCharacter(Framework.GetGender(true), onSubmit, onCancel)
|
||||
end)
|
||||
|
||||
local function exportHandler(exportName, func)
|
||||
AddEventHandler(('__cfx_export_skinchanger_%s'):format(exportName), function(setCB)
|
||||
setCB(func)
|
||||
end)
|
||||
end
|
||||
|
||||
exportHandler("GetSkin", function()
|
||||
while not Framework.PlayerData do
|
||||
Wait(1000)
|
||||
end
|
||||
|
||||
local appearance = lib.callback.await("illenium-appearance:server:getAppearance", false)
|
||||
return appearance
|
||||
end)
|
||||
|
||||
exportHandler("LoadSkin", function(skin)
|
||||
return LoadSkin(skin)
|
||||
end)
|
||||
|
||||
exportHandler("LoadClothes", function(playerSkin, clothesSkin)
|
||||
return loadClothes(playerSkin, clothesSkin)
|
||||
end)
|
||||
@ -0,0 +1,85 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
local ESX = exports["ui_core"]:getSharedObject()
|
||||
Framework.PlayerData = nil
|
||||
|
||||
RegisterNetEvent("esx:playerLoaded", function(xPlayer)
|
||||
Framework.PlayerData = xPlayer
|
||||
client.job = Framework.PlayerData.job
|
||||
client.gang = Framework.PlayerData.gang
|
||||
client.citizenid = Framework.PlayerData.identifier
|
||||
InitAppearance()
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:onPlayerLogout", function()
|
||||
Framework.PlayerData = nil
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:setJob", function(job)
|
||||
Framework.PlayerData.job = job
|
||||
client.job = Framework.PlayerData.job
|
||||
client.gang = Framework.PlayerData.job
|
||||
end)
|
||||
|
||||
local function getRankInputValues(rankList)
|
||||
local rankValues = {}
|
||||
for _, v in pairs(rankList) do
|
||||
rankValues[#rankValues + 1] = {
|
||||
label = v.label,
|
||||
value = v.grade
|
||||
}
|
||||
end
|
||||
return rankValues
|
||||
end
|
||||
|
||||
function Framework.GetPlayerGender()
|
||||
Framework.PlayerData = ESX.GetPlayerData()
|
||||
if Framework.PlayerData.sex == "f" then
|
||||
return "Female"
|
||||
end
|
||||
return "Male"
|
||||
end
|
||||
|
||||
function Framework.UpdatePlayerData()
|
||||
local data = ESX.GetPlayerData()
|
||||
if data.job then
|
||||
Framework.PlayerData = data
|
||||
client.job = Framework.PlayerData.job
|
||||
client.gang = Framework.PlayerData.job
|
||||
end
|
||||
client.citizenid = Framework.PlayerData.identifier
|
||||
end
|
||||
|
||||
function Framework.HasTracker()
|
||||
return false
|
||||
end
|
||||
|
||||
function Framework.CheckPlayerMeta()
|
||||
Framework.PlayerData = ESX.GetPlayerData()
|
||||
return Framework.PlayerData.dead or IsPedCuffed(Framework.PlayerData.ped)
|
||||
end
|
||||
|
||||
function Framework.IsPlayerAllowed(citizenid)
|
||||
return citizenid == Framework.PlayerData.identifier
|
||||
end
|
||||
|
||||
function Framework.GetRankInputValues(type)
|
||||
local jobGrades = lib.callback.await("illenium-appearance:server:esx:getGradesForJob", false, client[type].name)
|
||||
return getRankInputValues(jobGrades)
|
||||
end
|
||||
|
||||
function Framework.GetJobGrade()
|
||||
return client.job.grade
|
||||
end
|
||||
|
||||
function Framework.GetGangGrade()
|
||||
return client.gang.grade
|
||||
end
|
||||
|
||||
function Framework.CachePed()
|
||||
ESX.SetPlayerData("ped", cache.ped)
|
||||
end
|
||||
|
||||
function Framework.RestorePlayerArmour()
|
||||
return nil
|
||||
end
|
||||
@ -0,0 +1,11 @@
|
||||
function Framework.GetGender(isNew)
|
||||
if isNew or not Config.GenderBasedOnPed then
|
||||
return Framework.GetPlayerGender()
|
||||
end
|
||||
|
||||
local model = client.getPedModel(cache.ped)
|
||||
if model == "mp_f_freemode_01" then
|
||||
return "Female"
|
||||
end
|
||||
return "Male"
|
||||
end
|
||||
@ -0,0 +1,42 @@
|
||||
if not Framework.Ox() then return end
|
||||
|
||||
local Ox = require '@ox_core.lib.init'
|
||||
local player = Ox.GetPlayer()
|
||||
|
||||
RegisterNetEvent("ox:setActiveCharacter", function(character)
|
||||
if character.isNew then
|
||||
return InitializeCharacter(Framework.GetGender(true))
|
||||
end
|
||||
|
||||
InitAppearance()
|
||||
end)
|
||||
|
||||
---@todo groups
|
||||
-- RegisterNetEvent("ox:setGroup", function(group, grade)
|
||||
-- end)
|
||||
|
||||
function Framework.GetPlayerGender()
|
||||
return player.get('gender') == 'female' and 'Female' or 'Male'
|
||||
end
|
||||
|
||||
function Framework.UpdatePlayerData() end
|
||||
|
||||
function Framework.HasTracker() return false end
|
||||
|
||||
function Framework.CheckPlayerMeta()
|
||||
return LocalPlayer.state.isDead or IsPedCuffed(cache.ped)
|
||||
end
|
||||
|
||||
function Framework.IsPlayerAllowed(charId)
|
||||
return charId == player.charId
|
||||
end
|
||||
|
||||
function Framework.GetRankInputValues() end
|
||||
|
||||
function Framework.GetJobGrade() end
|
||||
|
||||
function Framework.GetGangGrade() end
|
||||
|
||||
function Framework.CachePed() end
|
||||
|
||||
function Framework.RestorePlayerArmour() end
|
||||
@ -0,0 +1,30 @@
|
||||
if not Framework.QBCore() then return end
|
||||
|
||||
local client = client
|
||||
|
||||
-- Backwards Compatible Events
|
||||
|
||||
RegisterNetEvent("qb-clothing:client:openMenu", function()
|
||||
local config = GetDefaultConfig()
|
||||
config.ped = true
|
||||
config.headBlend = true
|
||||
config.faceFeatures = true
|
||||
config.headOverlays = true
|
||||
config.components = true
|
||||
config.props = true
|
||||
config.tattoos = true
|
||||
OpenShop(config, true, "all")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("qb-clothing:client:openOutfitMenu", function()
|
||||
OpenMenu(nil, "outfit")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("qb-clothing:client:loadOutfit", LoadJobOutfit)
|
||||
|
||||
RegisterNetEvent("qb-multicharacter:client:chooseChar", function()
|
||||
client.setPedTattoos(cache.ped, {})
|
||||
ClearPedDecorations(cache.ped)
|
||||
|
||||
TriggerServerEvent("illenium-appearance:server:resetOutfitCache")
|
||||
end)
|
||||
@ -0,0 +1,107 @@
|
||||
if not Framework.QBCore() then return end
|
||||
|
||||
local client = client
|
||||
|
||||
local QBCore = exports["qb-core"]:GetCoreObject()
|
||||
|
||||
local PlayerData = QBCore.Functions.GetPlayerData()
|
||||
|
||||
local function getRankInputValues(rankList)
|
||||
local rankValues = {}
|
||||
for k, v in pairs(rankList) do
|
||||
rankValues[#rankValues + 1] = {
|
||||
label = v.name,
|
||||
value = k
|
||||
}
|
||||
end
|
||||
return rankValues
|
||||
end
|
||||
|
||||
local function setClientParams()
|
||||
client.job = PlayerData.job
|
||||
client.gang = PlayerData.gang
|
||||
client.citizenid = PlayerData.citizenid
|
||||
end
|
||||
|
||||
function Framework.GetPlayerGender()
|
||||
if PlayerData.charinfo.gender == 1 then
|
||||
return "Female"
|
||||
end
|
||||
return "Male"
|
||||
end
|
||||
|
||||
function Framework.UpdatePlayerData()
|
||||
PlayerData = QBCore.Functions.GetPlayerData()
|
||||
setClientParams()
|
||||
end
|
||||
|
||||
function Framework.HasTracker()
|
||||
return QBCore.Functions.GetPlayerData().metadata["tracker"]
|
||||
end
|
||||
|
||||
function Framework.CheckPlayerMeta()
|
||||
return PlayerData.metadata["isdead"] or PlayerData.metadata["inlaststand"] or PlayerData.metadata["ishandcuffed"]
|
||||
end
|
||||
|
||||
function Framework.IsPlayerAllowed(citizenid)
|
||||
return citizenid == PlayerData.citizenid
|
||||
end
|
||||
|
||||
function Framework.GetRankInputValues(type)
|
||||
local grades = QBCore.Shared.Jobs[client.job.name].grades
|
||||
if type == "gang" then
|
||||
grades = QBCore.Shared.Gangs[client.gang.name].grades
|
||||
end
|
||||
return getRankInputValues(grades)
|
||||
end
|
||||
|
||||
function Framework.GetJobGrade()
|
||||
return client.job.grade.level
|
||||
end
|
||||
|
||||
function Framework.GetGangGrade()
|
||||
return client.gang.grade.level
|
||||
end
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnJobUpdate", function(JobInfo)
|
||||
PlayerData.job = JobInfo
|
||||
client.job = JobInfo
|
||||
ResetBlips()
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnGangUpdate", function(GangInfo)
|
||||
PlayerData.gang = GangInfo
|
||||
client.gang = GangInfo
|
||||
ResetBlips()
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:SetDuty", function(duty)
|
||||
if PlayerData and PlayerData.job then
|
||||
PlayerData.job.onduty = duty
|
||||
client.job = PlayerData.job
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("QBCore:Client:OnPlayerLoaded", function()
|
||||
InitAppearance()
|
||||
end)
|
||||
|
||||
RegisterNetEvent("qb-clothes:client:CreateFirstCharacter", function()
|
||||
QBCore.Functions.GetPlayerData(function(pd)
|
||||
PlayerData = pd
|
||||
setClientParams()
|
||||
InitializeCharacter(Framework.GetGender(true))
|
||||
end)
|
||||
end)
|
||||
|
||||
function Framework.CachePed()
|
||||
return nil
|
||||
end
|
||||
|
||||
function Framework.RestorePlayerArmour()
|
||||
Framework.UpdatePlayerData()
|
||||
if PlayerData and PlayerData.metadata then
|
||||
Wait(1000)
|
||||
SetPedArmour(cache.ped, PlayerData.metadata["armor"])
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,190 @@
|
||||
if not Framework.QBCore() then return end
|
||||
|
||||
local client = client
|
||||
|
||||
local skinData = {
|
||||
["face2"] = {
|
||||
item = 0,
|
||||
texture = 0,
|
||||
defaultItem = 0,
|
||||
defaultTexture = 0,
|
||||
},
|
||||
["facemix"] = {
|
||||
skinMix = 0,
|
||||
shapeMix = 0,
|
||||
defaultSkinMix = 0.0,
|
||||
defaultShapeMix = 0.0,
|
||||
},
|
||||
}
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:migration:load-qb-clothing-skin", function(playerSkin)
|
||||
local model = playerSkin.model
|
||||
model = model ~= nil and tonumber(model) or false
|
||||
Citizen.CreateThread(function()
|
||||
lib.requestModel(model, 1000)
|
||||
SetPlayerModel(cache.playerId, model)
|
||||
Wait(150)
|
||||
SetPedComponentVariation(cache.ped, 0, 0, 0, 2)
|
||||
TriggerEvent("illenium-appearance:client:migration:load-qb-clothing-clothes", playerSkin, cache.ped)
|
||||
SetModelAsNoLongerNeeded(model)
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:migration:load-qb-clothing-clothes", function(playerSkin, ped)
|
||||
local data = json.decode(playerSkin.skin)
|
||||
if ped == nil then ped = cache.ped end
|
||||
|
||||
for i = 0, 11 do
|
||||
SetPedComponentVariation(ped, i, 0, 0, 0)
|
||||
end
|
||||
|
||||
for i = 0, 7 do
|
||||
ClearPedProp(ped, i)
|
||||
end
|
||||
|
||||
-- Face
|
||||
if not data["facemix"] or not data["face2"] then
|
||||
data["facemix"] = skinData["facemix"]
|
||||
data["facemix"].shapeMix = data["facemix"].defaultShapeMix
|
||||
data["facemix"].skinMix = data["facemix"].defaultSkinMix
|
||||
data["face2"] = skinData["face2"]
|
||||
end
|
||||
|
||||
SetPedHeadBlendData(ped, data["face"].item, data["face2"].item, nil, data["face"].texture, data["face2"].texture, nil, data["facemix"].shapeMix, data["facemix"].skinMix, nil, true)
|
||||
|
||||
-- Pants
|
||||
SetPedComponentVariation(ped, 4, data["pants"].item, 0, 0)
|
||||
SetPedComponentVariation(ped, 4, data["pants"].item, data["pants"].texture, 0)
|
||||
|
||||
-- Hair
|
||||
SetPedComponentVariation(ped, 2, data["hair"].item, 0, 0)
|
||||
SetPedHairColor(ped, data["hair"].texture, data["hair"].texture)
|
||||
|
||||
-- Eyebrows
|
||||
SetPedHeadOverlay(ped, 2, data["eyebrows"].item, 1.0)
|
||||
SetPedHeadOverlayColor(ped, 2, 1, data["eyebrows"].texture, 0)
|
||||
|
||||
-- Beard
|
||||
SetPedHeadOverlay(ped, 1, data["beard"].item, 1.0)
|
||||
SetPedHeadOverlayColor(ped, 1, 1, data["beard"].texture, 0)
|
||||
|
||||
-- Blush
|
||||
SetPedHeadOverlay(ped, 5, data["blush"].item, 1.0)
|
||||
SetPedHeadOverlayColor(ped, 5, 1, data["blush"].texture, 0)
|
||||
|
||||
-- Lipstick
|
||||
SetPedHeadOverlay(ped, 8, data["lipstick"].item, 1.0)
|
||||
SetPedHeadOverlayColor(ped, 8, 1, data["lipstick"].texture, 0)
|
||||
|
||||
-- Makeup
|
||||
SetPedHeadOverlay(ped, 4, data["makeup"].item, 1.0)
|
||||
SetPedHeadOverlayColor(ped, 4, 1, data["makeup"].texture, 0)
|
||||
|
||||
-- Ageing
|
||||
SetPedHeadOverlay(ped, 3, data["ageing"].item, 1.0)
|
||||
SetPedHeadOverlayColor(ped, 3, 1, data["ageing"].texture, 0)
|
||||
|
||||
-- Arms
|
||||
SetPedComponentVariation(ped, 3, data["arms"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 3, data["arms"].item, data["arms"].texture, 0)
|
||||
|
||||
-- T-Shirt
|
||||
SetPedComponentVariation(ped, 8, data["t-shirt"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 8, data["t-shirt"].item, data["t-shirt"].texture, 0)
|
||||
|
||||
-- Vest
|
||||
SetPedComponentVariation(ped, 9, data["vest"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 9, data["vest"].item, data["vest"].texture, 0)
|
||||
|
||||
-- Torso 2
|
||||
SetPedComponentVariation(ped, 11, data["torso2"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 11, data["torso2"].item, data["torso2"].texture, 0)
|
||||
|
||||
-- Shoes
|
||||
SetPedComponentVariation(ped, 6, data["shoes"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 6, data["shoes"].item, data["shoes"].texture, 0)
|
||||
|
||||
-- Mask
|
||||
SetPedComponentVariation(ped, 1, data["mask"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 1, data["mask"].item, data["mask"].texture, 0)
|
||||
|
||||
-- Badge
|
||||
SetPedComponentVariation(ped, 10, data["decals"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 10, data["decals"].item, data["decals"].texture, 0)
|
||||
|
||||
-- Accessory
|
||||
SetPedComponentVariation(ped, 7, data["accessory"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 7, data["accessory"].item, data["accessory"].texture, 0)
|
||||
|
||||
-- Bag
|
||||
SetPedComponentVariation(ped, 5, data["bag"].item, 0, 2)
|
||||
SetPedComponentVariation(ped, 5, data["bag"].item, data["bag"].texture, 0)
|
||||
|
||||
-- Hat
|
||||
if data["hat"].item ~= -1 and data["hat"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 0, data["hat"].item, data["hat"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 0)
|
||||
end
|
||||
|
||||
-- Glass
|
||||
if data["glass"].item ~= -1 and data["glass"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 1, data["glass"].item, data["glass"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 1)
|
||||
end
|
||||
|
||||
-- Ear
|
||||
if data["ear"].item ~= -1 and data["ear"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 2, data["ear"].item, data["ear"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 2)
|
||||
end
|
||||
|
||||
-- Watch
|
||||
if data["watch"].item ~= -1 and data["watch"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 6, data["watch"].item, data["watch"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 6)
|
||||
end
|
||||
|
||||
-- Bracelet
|
||||
if data["bracelet"].item ~= -1 and data["bracelet"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 7, data["bracelet"].item, data["bracelet"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 7)
|
||||
end
|
||||
|
||||
if data["eye_color"].item ~= -1 and data["eye_color"].item ~= 0 then
|
||||
SetPedEyeColor(ped, data["eye_color"].item)
|
||||
end
|
||||
|
||||
if data["moles"].item ~= -1 and data["moles"].item ~= 0 then
|
||||
SetPedHeadOverlay(ped, 9, data["moles"].item, (data["moles"].texture / 10))
|
||||
end
|
||||
|
||||
SetPedFaceFeature(ped, 0, (data["nose_0"].item / 10))
|
||||
SetPedFaceFeature(ped, 1, (data["nose_1"].item / 10))
|
||||
SetPedFaceFeature(ped, 2, (data["nose_2"].item / 10))
|
||||
SetPedFaceFeature(ped, 3, (data["nose_3"].item / 10))
|
||||
SetPedFaceFeature(ped, 4, (data["nose_4"].item / 10))
|
||||
SetPedFaceFeature(ped, 5, (data["nose_5"].item / 10))
|
||||
SetPedFaceFeature(ped, 6, (data["eyebrown_high"].item / 10))
|
||||
SetPedFaceFeature(ped, 7, (data["eyebrown_forward"].item / 10))
|
||||
SetPedFaceFeature(ped, 8, (data["cheek_1"].item / 10))
|
||||
SetPedFaceFeature(ped, 9, (data["cheek_2"].item / 10))
|
||||
SetPedFaceFeature(ped, 10,(data["cheek_3"].item / 10))
|
||||
SetPedFaceFeature(ped, 11, (data["eye_opening"].item / 10))
|
||||
SetPedFaceFeature(ped, 12, (data["lips_thickness"].item / 10))
|
||||
SetPedFaceFeature(ped, 13, (data["jaw_bone_width"].item / 10))
|
||||
SetPedFaceFeature(ped, 14, (data["jaw_bone_back_lenght"].item / 10))
|
||||
SetPedFaceFeature(ped, 15, (data["chimp_bone_lowering"].item / 10))
|
||||
SetPedFaceFeature(ped, 16, (data["chimp_bone_lenght"].item / 10))
|
||||
SetPedFaceFeature(ped, 17, (data["chimp_bone_width"].item / 10))
|
||||
SetPedFaceFeature(ped, 18, (data["chimp_hole"].item / 10))
|
||||
SetPedFaceFeature(ped, 19, (data["neck_thikness"].item / 10))
|
||||
|
||||
local appearance = client.getPedAppearance(ped)
|
||||
|
||||
TriggerServerEvent("illenium-appearance:server:migrate-qb-clothing-skin", playerSkin.citizenid, appearance)
|
||||
end)
|
||||
@ -0,0 +1,27 @@
|
||||
if not Config.BossManagedOutfits then return end
|
||||
|
||||
if Framework.ESX() then return end
|
||||
|
||||
function Management.RemoveItems()
|
||||
if GetResourceState(Management.ResourceName) ~= "started" then return end
|
||||
|
||||
if Management.ItemIDs.Boss then
|
||||
exports[Management.ResourceName]:RemoveBossMenuItem(Management.ItemIDs.Boss)
|
||||
end
|
||||
if Management.ItemIDs.Gang then
|
||||
exports[Management.ResourceName]:RemoveGangMenuItem(Management.ItemIDs.Gang)
|
||||
end
|
||||
end
|
||||
|
||||
function Management.AddBackMenuItem(managementMenu, args)
|
||||
local bossMenuEvent = "qb-bossmenu:client:OpenMenu"
|
||||
if args.type == "Gang" then
|
||||
bossMenuEvent = "qb-gangmenu:client:OpenMenu"
|
||||
end
|
||||
|
||||
managementMenu.options[#managementMenu.options+1] = {
|
||||
title = _L("menu.returnTitle"),
|
||||
icon = "fa-solid fa-angle-left",
|
||||
event = bossMenuEvent
|
||||
}
|
||||
end
|
||||
@ -0,0 +1,15 @@
|
||||
if not Config.BossManagedOutfits then return end
|
||||
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
function Management.RemoveItems()
|
||||
-- Do nothing
|
||||
end
|
||||
|
||||
function Management.AddItems()
|
||||
-- Do nothing
|
||||
end
|
||||
|
||||
function Management.AddBackMenuItem()
|
||||
-- Do nothing
|
||||
end
|
||||
@ -0,0 +1,26 @@
|
||||
if not Config.BossManagedOutfits then return end
|
||||
|
||||
Management = {}
|
||||
|
||||
Management.ItemIDs = {
|
||||
Gang = nil,
|
||||
Boss = nil
|
||||
}
|
||||
|
||||
function Management.IsQB()
|
||||
local resName = "qb-management"
|
||||
if GetResourceState(resName) ~= "missing" then
|
||||
Management.ResourceName = resName
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Management.IsQBX()
|
||||
local resName = "qbx_management"
|
||||
if GetResourceState(resName) ~= "missing" then
|
||||
Management.ResourceName = resName
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
@ -0,0 +1,21 @@
|
||||
if not Config.BossManagedOutfits then return end
|
||||
|
||||
if not Management.IsQB() then return end
|
||||
|
||||
function Management.AddItems()
|
||||
local menuItem = {
|
||||
header = _L("outfitManagement.title"),
|
||||
icon = "fa-solid fa-shirt",
|
||||
params = {
|
||||
event = "illenium-appearance:client:OutfitManagementMenu",
|
||||
args = {}
|
||||
}
|
||||
}
|
||||
menuItem.txt = _L("outfitManagement.jobText")
|
||||
menuItem.params.args.type = "Job"
|
||||
Management.ItemIDs.Boss = exports[Management.ResourceName]:AddBossMenuItem(menuItem)
|
||||
|
||||
menuItem.txt = _L("outfitManagement.gangText")
|
||||
menuItem.params.args.type = "Gang"
|
||||
Management.ItemIDs.Gang = exports[Management.ResourceName]:AddGangMenuItem(menuItem)
|
||||
end
|
||||
@ -0,0 +1,19 @@
|
||||
if not Config.BossManagedOutfits then return end
|
||||
|
||||
if not Management.IsQBX() then return end
|
||||
|
||||
function Management.AddItems()
|
||||
local menuItem = {
|
||||
title = _L("outfitManagement.title"),
|
||||
icon = "fa-solid fa-shirt",
|
||||
event = "illenium-appearance:client:OutfitManagementMenu",
|
||||
args = {}
|
||||
}
|
||||
menuItem.description = _L("outfitManagement.jobText")
|
||||
menuItem.args.type = "Job"
|
||||
Management.ItemIDs.Boss = exports[Management.ResourceName]:AddBossMenuItem(menuItem)
|
||||
|
||||
menuItem.description = _L("outfitManagement.gangText")
|
||||
menuItem.args.type = "Gang"
|
||||
Management.ItemIDs.Gang = exports[Management.ResourceName]:AddGangMenuItem(menuItem)
|
||||
end
|
||||
142
resources/[core]/illenium-appearance/client/outfits.lua
Normal file
142
resources/[core]/illenium-appearance/client/outfits.lua
Normal file
@ -0,0 +1,142 @@
|
||||
local function typeof(var)
|
||||
local _type = type(var);
|
||||
if (_type ~= "table" and _type ~= "userdata") then
|
||||
return _type;
|
||||
end
|
||||
local _meta = getmetatable(var);
|
||||
if (_meta ~= nil and _meta._NAME ~= nil) then
|
||||
return _meta._NAME;
|
||||
else
|
||||
return _type;
|
||||
end
|
||||
end
|
||||
|
||||
function LoadJobOutfit(oData)
|
||||
local ped = cache.ped
|
||||
|
||||
local data = oData.outfitData
|
||||
|
||||
if typeof(data) ~= "table" then
|
||||
data = json.decode(data)
|
||||
end
|
||||
|
||||
-- Pants
|
||||
if data["pants"] ~= nil then
|
||||
SetPedComponentVariation(ped, 4, data["pants"].item, data["pants"].texture, 0)
|
||||
end
|
||||
|
||||
-- Arms
|
||||
if data["arms"] ~= nil then
|
||||
SetPedComponentVariation(ped, 3, data["arms"].item, data["arms"].texture, 0)
|
||||
end
|
||||
|
||||
-- T-Shirt
|
||||
if data["t-shirt"] ~= nil then
|
||||
SetPedComponentVariation(ped, 8, data["t-shirt"].item, data["t-shirt"].texture, 0)
|
||||
end
|
||||
|
||||
-- Vest
|
||||
if data["vest"] ~= nil then
|
||||
SetPedComponentVariation(ped, 9, data["vest"].item, data["vest"].texture, 0)
|
||||
end
|
||||
|
||||
-- Torso 2
|
||||
if data["torso2"] ~= nil then
|
||||
SetPedComponentVariation(ped, 11, data["torso2"].item, data["torso2"].texture, 0)
|
||||
end
|
||||
|
||||
-- Shoes
|
||||
if data["shoes"] ~= nil then
|
||||
SetPedComponentVariation(ped, 6, data["shoes"].item, data["shoes"].texture, 0)
|
||||
end
|
||||
|
||||
-- Badge
|
||||
if data["decals"] ~= nil then
|
||||
SetPedComponentVariation(ped, 10, data["decals"].item, data["decals"].texture, 0)
|
||||
end
|
||||
|
||||
-- Accessory
|
||||
local tracker = Config.TrackerClothingOptions
|
||||
|
||||
if data["accessory"] ~= nil then
|
||||
if Framework.HasTracker() then
|
||||
SetPedComponentVariation(ped, 7, tracker.drawable, tracker.texture, 0)
|
||||
else
|
||||
SetPedComponentVariation(ped, 7, data["accessory"].item, data["accessory"].texture, 0)
|
||||
end
|
||||
else
|
||||
if Framework.HasTracker() then
|
||||
SetPedComponentVariation(ped, 7, tracker.drawable, tracker.texture, 0)
|
||||
else
|
||||
local drawableId = GetPedDrawableVariation(ped, 7)
|
||||
|
||||
if drawableId ~= -1 then
|
||||
local textureId = GetPedTextureVariation(ped, 7)
|
||||
if drawableId == tracker.drawable and textureId == tracker.texture then
|
||||
SetPedComponentVariation(ped, 7, -1, 0, 2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Mask
|
||||
if data["mask"] ~= nil then
|
||||
SetPedComponentVariation(ped, 1, data["mask"].item, data["mask"].texture, 0)
|
||||
end
|
||||
|
||||
-- Bag
|
||||
if data["bag"] ~= nil then
|
||||
SetPedComponentVariation(ped, 5, data["bag"].item, data["bag"].texture, 0)
|
||||
end
|
||||
|
||||
-- Hat
|
||||
if data["hat"] ~= nil then
|
||||
if data["hat"].item ~= -1 and data["hat"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 0, data["hat"].item, data["hat"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 0)
|
||||
end
|
||||
end
|
||||
|
||||
-- Glass
|
||||
if data["glass"] ~= nil then
|
||||
if data["glass"].item ~= -1 and data["glass"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 1, data["glass"].item, data["glass"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 1)
|
||||
end
|
||||
end
|
||||
|
||||
-- Ear
|
||||
if data["ear"] ~= nil then
|
||||
if data["ear"].item ~= -1 and data["ear"].item ~= 0 then
|
||||
SetPedPropIndex(ped, 2, data["ear"].item, data["ear"].texture, true)
|
||||
else
|
||||
ClearPedProp(ped, 2)
|
||||
end
|
||||
end
|
||||
|
||||
local length = 0
|
||||
for _ in pairs(data) do
|
||||
length = length + 1
|
||||
end
|
||||
|
||||
if Config.PersistUniforms and length > 1 then
|
||||
TriggerServerEvent("illenium-appearance:server:syncUniform", {
|
||||
jobName = oData.jobName,
|
||||
gender = oData.gender,
|
||||
label = oData.name
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:loadJobOutfit", LoadJobOutfit)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:openOutfitMenu", function()
|
||||
OpenMenu(nil, "outfit")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-apearance:client:outfitsCommand", function(isJob)
|
||||
local outfits = GetPlayerJobOutfits(isJob)
|
||||
TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits)
|
||||
end)
|
||||
5
resources/[core]/illenium-appearance/client/props.lua
Normal file
5
resources/[core]/illenium-appearance/client/props.lua
Normal file
@ -0,0 +1,5 @@
|
||||
lib.onCache('ped', function(value)
|
||||
if Config.AlwaysKeepProps then
|
||||
SetPedCanLosePropsOnDamage(value, false, 0)
|
||||
end
|
||||
end)
|
||||
17
resources/[core]/illenium-appearance/client/radial/ox.lua
Normal file
17
resources/[core]/illenium-appearance/client/radial/ox.lua
Normal file
@ -0,0 +1,17 @@
|
||||
if not Radial.IsOX() then return end
|
||||
|
||||
function Radial.Add(title, event)
|
||||
lib.addRadialItem({
|
||||
id = Radial.MenuID,
|
||||
icon = "shirt",
|
||||
label = title,
|
||||
event = event,
|
||||
onSelect = function()
|
||||
TriggerEvent(event)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
function Radial.Remove()
|
||||
lib.removeRadialItem(Radial.MenuID)
|
||||
end
|
||||
16
resources/[core]/illenium-appearance/client/radial/qb.lua
Normal file
16
resources/[core]/illenium-appearance/client/radial/qb.lua
Normal file
@ -0,0 +1,16 @@
|
||||
if not Radial.IsQBX() and not Radial.IsQB() then return end
|
||||
|
||||
function Radial.Add(title, event)
|
||||
exports[Radial.ResourceName]:AddOption({
|
||||
id = Radial.MenuID,
|
||||
title = title,
|
||||
icon = "shirt",
|
||||
type = "client",
|
||||
event = event,
|
||||
shouldClose = true
|
||||
}, Radial.MenuID)
|
||||
end
|
||||
|
||||
function Radial.Remove()
|
||||
exports[Radial.ResourceName]:RemoveOption(Radial.MenuID)
|
||||
end
|
||||
@ -0,0 +1,71 @@
|
||||
Radial = {}
|
||||
|
||||
Radial.MenuID = "open_clothing_menu"
|
||||
|
||||
local radialOptionAdded = false
|
||||
|
||||
function Radial.IsOX()
|
||||
local resName = "ox_lib"
|
||||
if GetResourceState(resName) ~= "missing" and Config.UseOxRadial then
|
||||
Radial.ResourceName = resName
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Radial.IsQB()
|
||||
local resName = "qb-radialmenu"
|
||||
if GetResourceState(resName) ~= "missing" then
|
||||
Radial.ResourceName = resName
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Radial.IsQBX()
|
||||
local resName = "qbx_radialmenu"
|
||||
if GetResourceState(resName) ~= "missing" then
|
||||
Radial.ResourceName = resName
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Radial.AddOption(currentZone)
|
||||
if not Config.UseRadialMenu then return end
|
||||
|
||||
if not currentZone then
|
||||
Radial.Remove()
|
||||
return
|
||||
end
|
||||
local event, title
|
||||
local zoneEvents = {
|
||||
clothingRoom = {"illenium-appearance:client:OpenClothingRoom", _L("menu.title")},
|
||||
playerOutfitRoom = {"illenium-appearance:client:OpenPlayerOutfitRoom", _L("menu.outfitsTitle")},
|
||||
clothing = {"illenium-appearance:client:openClothingShopMenu", _L("menu.clothingShopTitle")},
|
||||
barber = {"illenium-appearance:client:OpenBarberShop", _L("menu.barberShopTitle")},
|
||||
tattoo = {"illenium-appearance:client:OpenTattooShop", _L("menu.tattooShopTitle")},
|
||||
surgeon = {"illenium-appearance:client:OpenSurgeonShop", _L("menu.surgeonShopTitle")},
|
||||
}
|
||||
if zoneEvents[currentZone.name] then
|
||||
event, title = table.unpack(zoneEvents[currentZone.name])
|
||||
end
|
||||
|
||||
Radial.Add(title, event)
|
||||
radialOptionAdded = true
|
||||
end
|
||||
|
||||
function Radial.RemoveOption()
|
||||
if radialOptionAdded then
|
||||
Radial.Remove()
|
||||
radialOptionAdded = false
|
||||
end
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
if Config.UseOxRadial and GetResourceState("ox_lib") == "started" or GetResourceState("qb-radialmenu") == "started" then
|
||||
Radial.RemoveOption()
|
||||
end
|
||||
end
|
||||
end)
|
||||
28
resources/[core]/illenium-appearance/client/stats.lua
Normal file
28
resources/[core]/illenium-appearance/client/stats.lua
Normal file
@ -0,0 +1,28 @@
|
||||
local stats = nil
|
||||
|
||||
local function ResetRechargeMultipliers()
|
||||
SetPlayerHealthRechargeMultiplier(cache.playerId, 0.0)
|
||||
SetPlayerHealthRechargeLimit(cache.playerId, 0.0)
|
||||
end
|
||||
|
||||
function BackupPlayerStats()
|
||||
stats = {
|
||||
health = GetEntityHealth(cache.ped),
|
||||
armour = GetPedArmour(cache.ped)
|
||||
}
|
||||
end
|
||||
|
||||
function RestorePlayerStats()
|
||||
if stats then
|
||||
SetEntityMaxHealth(cache.ped, 200)
|
||||
Wait(1000) -- Safety Delay
|
||||
SetEntityHealth(cache.ped, stats.health)
|
||||
SetPedArmour(cache.ped, stats.armour)
|
||||
ResetRechargeMultipliers()
|
||||
stats = nil
|
||||
return
|
||||
end
|
||||
|
||||
-- If no stats are backed up, restore from the framework
|
||||
Framework.RestorePlayerArmour()
|
||||
end
|
||||
55
resources/[core]/illenium-appearance/client/target/ox.lua
Normal file
55
resources/[core]/illenium-appearance/client/target/ox.lua
Normal file
@ -0,0 +1,55 @@
|
||||
if not Config.UseTarget then return end
|
||||
|
||||
if not Target.IsOX() then return end
|
||||
|
||||
local ZoneIDMap = {}
|
||||
|
||||
local function convert(options)
|
||||
local distance = options.distance
|
||||
options = options.options
|
||||
for _, v in pairs(options) do
|
||||
v.onSelect = v.action
|
||||
v.distance = v.distance or distance
|
||||
v.name = v.name or v.label
|
||||
v.groups = v.job or v.gang
|
||||
v.type = nil
|
||||
v.action = nil
|
||||
|
||||
v.job = nil
|
||||
v.gang = nil
|
||||
v.qtarget = true
|
||||
end
|
||||
|
||||
return options
|
||||
end
|
||||
|
||||
function Target.RemoveZone(zone)
|
||||
exports["ox_target"]:removeZone(ZoneIDMap[zone])
|
||||
end
|
||||
|
||||
function Target.AddTargetEntity(entity, parameters)
|
||||
exports["ox_target"]:addLocalEntity(entity, convert(parameters))
|
||||
end
|
||||
|
||||
function Target.AddBoxZone(name, coords, size, parameters)
|
||||
local rotation = parameters.rotation
|
||||
ZoneIDMap[name] = exports["ox_target"]:addBoxZone({
|
||||
coords = coords,
|
||||
size = size,
|
||||
rotation = rotation,
|
||||
debug = Config.Debug,
|
||||
options = convert(parameters)
|
||||
})
|
||||
end
|
||||
|
||||
function Target.AddPolyZone(name, points, parameters)
|
||||
ZoneIDMap[name] = exports["ox_target"]:addPolyZone({
|
||||
points = points,
|
||||
debug = Config.Debug,
|
||||
options = convert(parameters)
|
||||
})
|
||||
end
|
||||
|
||||
function Target.IsTargetStarted()
|
||||
return GetResourceState("ox_target") == "started"
|
||||
end
|
||||
34
resources/[core]/illenium-appearance/client/target/qb.lua
Normal file
34
resources/[core]/illenium-appearance/client/target/qb.lua
Normal file
@ -0,0 +1,34 @@
|
||||
if not Config.UseTarget then return end
|
||||
|
||||
if not Target.IsQB() then return end
|
||||
|
||||
function Target.RemoveZone(zone)
|
||||
exports["qb-target"]:RemoveZone(zone)
|
||||
end
|
||||
|
||||
function Target.AddTargetEntity(entity, parameters)
|
||||
exports["qb-target"]:AddTargetEntity(entity, parameters)
|
||||
end
|
||||
|
||||
function Target.AddBoxZone(name, coords, size, parameters)
|
||||
exports["qb-target"]:AddBoxZone(name, coords, size.x, size.y, {
|
||||
name = name,
|
||||
debugPoly = Config.Debug,
|
||||
minZ = coords.z - 2,
|
||||
maxZ = coords.z + 2,
|
||||
heading = coords.w
|
||||
}, parameters)
|
||||
end
|
||||
|
||||
function Target.AddPolyZone(name, points, parameters)
|
||||
exports["qb-target"]:AddPolyZone(name, points, {
|
||||
name = name,
|
||||
debugPoly = Config.Debug,
|
||||
minZ = points[1].z - 2,
|
||||
maxZ = points[1].z + 2
|
||||
}, parameters)
|
||||
end
|
||||
|
||||
function Target.IsTargetStarted()
|
||||
return GetResourceState("qb-target") == "started"
|
||||
end
|
||||
192
resources/[core]/illenium-appearance/client/target/target.lua
Normal file
192
resources/[core]/illenium-appearance/client/target/target.lua
Normal file
@ -0,0 +1,192 @@
|
||||
if not Config.UseTarget then return end
|
||||
|
||||
local TargetPeds = {
|
||||
Store = {},
|
||||
ClothingRoom = {},
|
||||
PlayerOutfitRoom = {}
|
||||
}
|
||||
|
||||
Target = {}
|
||||
|
||||
function Target.IsOX()
|
||||
return GetResourceState("ox_target") ~= "missing"
|
||||
end
|
||||
|
||||
function Target.IsQB()
|
||||
return GetResourceState("qb-target") ~= "missing"
|
||||
end
|
||||
|
||||
local function RemoveTargetPeds(peds)
|
||||
for i = 1, #peds, 1 do
|
||||
DeletePed(peds[i])
|
||||
end
|
||||
end
|
||||
|
||||
local function RemoveTargets()
|
||||
if Config.EnablePedsForShops then
|
||||
RemoveTargetPeds(TargetPeds.Store)
|
||||
else
|
||||
for k, v in pairs(Config.Stores) do
|
||||
Target.RemoveZone(v.type .. k)
|
||||
end
|
||||
end
|
||||
|
||||
if Config.EnablePedsForClothingRooms then
|
||||
RemoveTargetPeds(TargetPeds.ClothingRoom)
|
||||
else
|
||||
for k, v in pairs(Config.ClothingRooms) do
|
||||
Target.RemoveZone("clothing_" .. (v.job or v.gang) .. k)
|
||||
end
|
||||
end
|
||||
|
||||
if Config.EnablePedsForPlayerOutfitRooms then
|
||||
RemoveTargetPeds(TargetPeds.PlayerOutfitRoom)
|
||||
else
|
||||
for k in pairs(Config.PlayerOutfitRooms) do
|
||||
Target.RemoveZone("playeroutfitroom_" .. k)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
if Target.IsTargetStarted() then
|
||||
RemoveTargets()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local function CreatePedAtCoords(pedModel, coords, scenario)
|
||||
pedModel = type(pedModel) == "string" and joaat(pedModel) or pedModel
|
||||
lib.requestModel(pedModel)
|
||||
local ped = CreatePed(0, pedModel, coords.x, coords.y, coords.z - 0.98, coords.w, false, false)
|
||||
TaskStartScenarioInPlace(ped, scenario, true)
|
||||
FreezeEntityPosition(ped, true)
|
||||
SetEntityVisible(ped, true)
|
||||
SetEntityInvincible(ped, true)
|
||||
PlaceObjectOnGroundProperly(ped)
|
||||
SetBlockingOfNonTemporaryEvents(ped, true)
|
||||
return ped
|
||||
end
|
||||
|
||||
local function SetupStoreTarget(targetConfig, action, k, v)
|
||||
local parameters = {
|
||||
options = {{
|
||||
type = "client",
|
||||
action = action,
|
||||
icon = targetConfig.icon,
|
||||
label = targetConfig.label
|
||||
}},
|
||||
distance = targetConfig.distance,
|
||||
rotation = v.rotation
|
||||
}
|
||||
|
||||
if Config.EnablePedsForShops then
|
||||
TargetPeds.Store[k] = CreatePedAtCoords(v.targetModel or targetConfig.model, v.coords, v.targetScenario or targetConfig.scenario)
|
||||
Target.AddTargetEntity(TargetPeds.Store[k], parameters)
|
||||
elseif v.usePoly then
|
||||
Target.AddPolyZone(v.type .. k, v.points, parameters)
|
||||
else
|
||||
Target.AddBoxZone(v.type .. k, v.coords, v.size, parameters)
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupStoreTargets()
|
||||
for k, v in pairs(Config.Stores) do
|
||||
local targetConfig = Config.TargetConfig[v.type]
|
||||
local action
|
||||
|
||||
if v.type == "barber" then
|
||||
action = OpenBarberShop
|
||||
elseif v.type == "clothing" then
|
||||
action = function()
|
||||
TriggerEvent("illenium-appearance:client:openClothingShopMenu")
|
||||
end
|
||||
elseif v.type == "tattoo" then
|
||||
action = OpenTattooShop
|
||||
elseif v.type == "surgeon" then
|
||||
action = OpenSurgeonShop
|
||||
end
|
||||
|
||||
if not (Config.RCoreTattoosCompatibility and v.type == "tattoo") then
|
||||
SetupStoreTarget(targetConfig, action, k, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupClothingRoomTargets()
|
||||
for k, v in pairs(Config.ClothingRooms) do
|
||||
local targetConfig = Config.TargetConfig["clothingroom"]
|
||||
local action = function()
|
||||
local outfits = GetPlayerJobOutfits(v.job)
|
||||
TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits)
|
||||
end
|
||||
|
||||
local parameters = {
|
||||
options = {{
|
||||
type = "client",
|
||||
action = action,
|
||||
icon = targetConfig.icon,
|
||||
label = targetConfig.label,
|
||||
canInteract = v.job and CheckDuty or nil,
|
||||
job = v.job,
|
||||
gang = v.gang
|
||||
}},
|
||||
distance = targetConfig.distance,
|
||||
rotation = v.rotation
|
||||
}
|
||||
|
||||
local key = "clothing_" .. (v.job or v.gang) .. k
|
||||
if Config.EnablePedsForClothingRooms then
|
||||
TargetPeds.ClothingRoom[k] = CreatePedAtCoords(v.targetModel or targetConfig.model, v.coords, v.targetScenario or targetConfig.scenario)
|
||||
Target.AddTargetEntity(TargetPeds.ClothingRoom[k], parameters)
|
||||
elseif v.usePoly then
|
||||
Target.AddPolyZone(key, v.points, parameters)
|
||||
else
|
||||
Target.AddBoxZone(key, v.coords, v.size, parameters)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupPlayerOutfitRoomTargets()
|
||||
for k, v in pairs(Config.PlayerOutfitRooms) do
|
||||
local targetConfig = Config.TargetConfig["playeroutfitroom"]
|
||||
|
||||
local parameters = {
|
||||
options = {{
|
||||
type = "client",
|
||||
action = function()
|
||||
OpenOutfitRoom(v)
|
||||
end,
|
||||
icon = targetConfig.icon,
|
||||
label = targetConfig.label,
|
||||
canInteract = function()
|
||||
return IsPlayerAllowedForOutfitRoom(v)
|
||||
end
|
||||
}},
|
||||
distance = targetConfig.distance,
|
||||
rotation = v.rotation
|
||||
}
|
||||
|
||||
if Config.EnablePedsForPlayerOutfitRooms then
|
||||
TargetPeds.PlayerOutfitRoom[k] = CreatePedAtCoords(v.targetModel or targetConfig.model, v.coords, v.targetScenario or targetConfig.scenario)
|
||||
Target.AddTargetEntity(TargetPeds.PlayerOutfitRoom[k], parameters)
|
||||
elseif v.usePoly then
|
||||
Target.AddPolyZone("playeroutfitroom_" .. k, v.points, parameters)
|
||||
else
|
||||
Target.AddBoxZone("playeroutfitroom_" .. k, v.coords, v.size, parameters)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupTargets()
|
||||
SetupStoreTargets()
|
||||
SetupClothingRoomTargets()
|
||||
SetupPlayerOutfitRoomTargets()
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
if Config.UseTarget then
|
||||
SetupTargets()
|
||||
end
|
||||
end)
|
||||
197
resources/[core]/illenium-appearance/client/zones.lua
Normal file
197
resources/[core]/illenium-appearance/client/zones.lua
Normal file
@ -0,0 +1,197 @@
|
||||
if Config.UseTarget then return end
|
||||
|
||||
local currentZone = nil
|
||||
|
||||
local Zones = {
|
||||
Store = {},
|
||||
ClothingRoom = {},
|
||||
PlayerOutfitRoom = {}
|
||||
}
|
||||
|
||||
local function RemoveZones()
|
||||
for i = 1, #Zones.Store do
|
||||
if Zones.Store[i]["remove"] then
|
||||
Zones.Store[i]:remove()
|
||||
end
|
||||
end
|
||||
for i = 1, #Zones.ClothingRoom do
|
||||
Zones.ClothingRoom[i]:remove()
|
||||
end
|
||||
for i = 1, #Zones.PlayerOutfitRoom do
|
||||
Zones.PlayerOutfitRoom[i]:remove()
|
||||
end
|
||||
end
|
||||
|
||||
local function lookupZoneIndexFromID(zones, id)
|
||||
for i = 1, #zones do
|
||||
if zones[i].id == id then
|
||||
return i
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function onStoreEnter(data)
|
||||
local index = lookupZoneIndexFromID(Zones.Store, data.id)
|
||||
local store = Config.Stores[index]
|
||||
|
||||
local jobName = (store.job and client.job.name) or (store.gang and client.gang.name)
|
||||
if jobName == (store.job or store.gang) then
|
||||
currentZone = {
|
||||
name = store.type,
|
||||
index = index
|
||||
}
|
||||
local prefix = Config.UseRadialMenu and "" or "[E] "
|
||||
if currentZone.name == "clothing" then
|
||||
lib.showTextUI(prefix .. string.format(_L("textUI.clothing"), Config.ClothingCost), Config.TextUIOptions)
|
||||
elseif currentZone.name == "barber" then
|
||||
lib.showTextUI(prefix .. string.format(_L("textUI.barber"), Config.BarberCost), Config.TextUIOptions)
|
||||
elseif currentZone.name == "tattoo" then
|
||||
lib.showTextUI(prefix .. string.format(_L("textUI.tattoo"), Config.TattooCost), Config.TextUIOptions)
|
||||
elseif currentZone.name == "surgeon" then
|
||||
lib.showTextUI(prefix .. string.format(_L("textUI.surgeon"), Config.SurgeonCost), Config.TextUIOptions)
|
||||
end
|
||||
Radial.AddOption(currentZone)
|
||||
end
|
||||
end
|
||||
|
||||
local function onClothingRoomEnter(data)
|
||||
local index = lookupZoneIndexFromID(Zones.ClothingRoom, data.id)
|
||||
local clothingRoom = Config.ClothingRooms[index]
|
||||
|
||||
local jobName = clothingRoom.job and client.job.name or client.gang.name
|
||||
if jobName == (clothingRoom.job or clothingRoom.gang) then
|
||||
if CheckDuty() or clothingRoom.gang then
|
||||
currentZone = {
|
||||
name = "clothingRoom",
|
||||
index = index
|
||||
}
|
||||
local prefix = Config.UseRadialMenu and "" or "[E] "
|
||||
lib.showTextUI(prefix .. _L("textUI.clothingRoom"), Config.TextUIOptions)
|
||||
Radial.AddOption(currentZone)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function onPlayerOutfitRoomEnter(data)
|
||||
local index = lookupZoneIndexFromID(Zones.PlayerOutfitRoom, data.id)
|
||||
local playerOutfitRoom = Config.PlayerOutfitRooms[index]
|
||||
|
||||
local isAllowed = IsPlayerAllowedForOutfitRoom(playerOutfitRoom)
|
||||
if isAllowed then
|
||||
currentZone = {
|
||||
name = "playerOutfitRoom",
|
||||
index = index
|
||||
}
|
||||
local prefix = Config.UseRadialMenu and "" or "[E] "
|
||||
lib.showTextUI(prefix .. _L("textUI.playerOutfitRoom"), Config.TextUIOptions)
|
||||
Radial.AddOption(currentZone)
|
||||
end
|
||||
end
|
||||
|
||||
local function onZoneExit()
|
||||
currentZone = nil
|
||||
Radial.RemoveOption()
|
||||
lib.hideTextUI()
|
||||
end
|
||||
|
||||
local function SetupZone(store, onEnter, onExit)
|
||||
if Config.RCoreTattoosCompatibility and store.type == "tattoo" then
|
||||
return {}
|
||||
end
|
||||
|
||||
if Config.UseRadialMenu or store.usePoly then
|
||||
return lib.zones.poly({
|
||||
points = store.points,
|
||||
debug = Config.Debug,
|
||||
onEnter = onEnter,
|
||||
onExit = onExit
|
||||
})
|
||||
end
|
||||
|
||||
return lib.zones.box({
|
||||
coords = store.coords,
|
||||
size = store.size,
|
||||
rotation = store.rotation,
|
||||
debug = Config.Debug,
|
||||
onEnter = onEnter,
|
||||
onExit = onExit
|
||||
})
|
||||
end
|
||||
|
||||
local function SetupStoreZones()
|
||||
for _, v in pairs(Config.Stores) do
|
||||
Zones.Store[#Zones.Store + 1] = SetupZone(v, onStoreEnter, onZoneExit)
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupClothingRoomZones()
|
||||
for _, v in pairs(Config.ClothingRooms) do
|
||||
Zones.ClothingRoom[#Zones.ClothingRoom + 1] = SetupZone(v, onClothingRoomEnter, onZoneExit)
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupPlayerOutfitRoomZones()
|
||||
for _, v in pairs(Config.PlayerOutfitRooms) do
|
||||
Zones.PlayerOutfitRoom[#Zones.PlayerOutfitRoom + 1] = SetupZone(v, onPlayerOutfitRoomEnter, onZoneExit)
|
||||
end
|
||||
end
|
||||
|
||||
local function SetupZones()
|
||||
SetupStoreZones()
|
||||
SetupClothingRoomZones()
|
||||
SetupPlayerOutfitRoomZones()
|
||||
end
|
||||
|
||||
local function ZonesLoop()
|
||||
Wait(1000)
|
||||
while true do
|
||||
local sleep = 1000
|
||||
if currentZone then
|
||||
sleep = 5
|
||||
if IsControlJustReleased(0, 38) then
|
||||
if currentZone.name == "clothingRoom" then
|
||||
local clothingRoom = Config.ClothingRooms[currentZone.index]
|
||||
local outfits = GetPlayerJobOutfits(clothingRoom.job)
|
||||
TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits)
|
||||
elseif currentZone.name == "playerOutfitRoom" then
|
||||
local outfitRoom = Config.PlayerOutfitRooms[currentZone.index]
|
||||
OpenOutfitRoom(outfitRoom)
|
||||
elseif currentZone.name == "clothing" then
|
||||
TriggerEvent("illenium-appearance:client:openClothingShopMenu")
|
||||
elseif currentZone.name == "barber" then
|
||||
OpenBarberShop()
|
||||
elseif currentZone.name == "tattoo" then
|
||||
OpenTattooShop()
|
||||
elseif currentZone.name == "surgeon" then
|
||||
OpenSurgeonShop()
|
||||
end
|
||||
end
|
||||
end
|
||||
Wait(sleep)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
CreateThread(function()
|
||||
SetupZones()
|
||||
if not Config.UseRadialMenu then
|
||||
ZonesLoop()
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
RemoveZones()
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:OpenClothingRoom", function()
|
||||
local clothingRoom = Config.ClothingRooms[currentZone.index]
|
||||
local outfits = GetPlayerJobOutfits(clothingRoom.job)
|
||||
TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:client:OpenPlayerOutfitRoom", function()
|
||||
local outfitRoom = Config.PlayerOutfitRooms[currentZone.index]
|
||||
OpenOutfitRoom(outfitRoom)
|
||||
end)
|
||||
98
resources/[core]/illenium-appearance/fxmanifest.lua
Normal file
98
resources/[core]/illenium-appearance/fxmanifest.lua
Normal file
@ -0,0 +1,98 @@
|
||||
fx_version "cerulean"
|
||||
game "gta5"
|
||||
|
||||
author "snakewiz & iLLeniumStudios"
|
||||
description "A flexible player customization script for FiveM servers."
|
||||
repository "https://github.com/iLLeniumStudios/illenium-appearance"
|
||||
version "v5.7.0"
|
||||
|
||||
lua54 "yes"
|
||||
|
||||
client_scripts {
|
||||
"game/constants.lua",
|
||||
"game/util.lua",
|
||||
"game/customization.lua",
|
||||
"game/nui.lua",
|
||||
"client/outfits.lua",
|
||||
"client/common.lua",
|
||||
"client/zones.lua",
|
||||
"client/framework/framework.lua",
|
||||
"client/framework/qb/compatibility.lua",
|
||||
"client/framework/qb/main.lua",
|
||||
"client/framework/qb/migrate.lua",
|
||||
"client/framework/esx/compatibility.lua",
|
||||
"client/framework/esx/main.lua",
|
||||
"client/framework/ox/main.lua",
|
||||
"client/target/target.lua",
|
||||
"client/target/qb.lua",
|
||||
"client/target/ox.lua",
|
||||
"client/management/management.lua",
|
||||
"client/management/common.lua",
|
||||
"client/management/qb.lua",
|
||||
"client/management/qbx.lua",
|
||||
"client/management/esx.lua",
|
||||
"client/radial/radial.lua",
|
||||
"client/radial/qb.lua",
|
||||
"client/radial/ox.lua",
|
||||
"client/stats.lua",
|
||||
"client/defaults.lua",
|
||||
"client/blips.lua",
|
||||
"client/props.lua",
|
||||
"client/client.lua",
|
||||
}
|
||||
|
||||
server_scripts {
|
||||
"@oxmysql/lib/MySQL.lua",
|
||||
"server/database/database.lua",
|
||||
"server/database/jobgrades.lua",
|
||||
"server/database/managementoutfits.lua",
|
||||
"server/database/playeroutfitcodes.lua",
|
||||
"server/database/playeroutfits.lua",
|
||||
"server/database/players.lua",
|
||||
"server/database/playerskins.lua",
|
||||
"server/database/users.lua",
|
||||
"server/framework/qb/main.lua",
|
||||
"server/framework/qb/migrate.lua",
|
||||
"server/framework/esx/main.lua",
|
||||
"server/framework/esx/migrate.lua",
|
||||
"server/framework/esx/callbacks.lua",
|
||||
"server/framework/esx/management.lua",
|
||||
"server/framework/ox/main.lua",
|
||||
"server/util.lua",
|
||||
"server/server.lua",
|
||||
"server/permissions.lua"
|
||||
}
|
||||
|
||||
shared_scripts {
|
||||
"shared/config.lua",
|
||||
"shared/blacklist.lua",
|
||||
"shared/peds.lua",
|
||||
"shared/tattoos.lua",
|
||||
"shared/theme.lua",
|
||||
"shared/framework/framework.lua",
|
||||
"shared/framework/esx/util.lua",
|
||||
"locales/locales.lua",
|
||||
"locales/ar.lua",
|
||||
"locales/bg.lua",
|
||||
"locales/cs.lua",
|
||||
"locales/de.lua",
|
||||
"locales/en.lua",
|
||||
"locales/es-ES.lua",
|
||||
"locales/fr.lua",
|
||||
"locales/hu.lua",
|
||||
"locales/it.lua",
|
||||
"locales/nl.lua",
|
||||
"locales/pt-BR.lua",
|
||||
"locales/ro-RO.lua",
|
||||
"locales/id.lua",
|
||||
"@ox_lib/init.lua"
|
||||
}
|
||||
|
||||
files {
|
||||
"web/dist/index.html",
|
||||
"web/dist/assets/*.js"
|
||||
}
|
||||
|
||||
ui_page "web/dist/index.html"
|
||||
|
||||
provides { "esx_skin", "ui_skin", "skinchanger" }
|
||||
366
resources/[core]/illenium-appearance/game/constants.lua
Normal file
366
resources/[core]/illenium-appearance/game/constants.lua
Normal file
@ -0,0 +1,366 @@
|
||||
constants = {}
|
||||
constants.PED_COMPONENTS_IDS = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
|
||||
constants.PED_PROPS_IDS = {0, 1, 2, 6, 7}
|
||||
|
||||
constants.FACE_FEATURES = {
|
||||
"noseWidth",
|
||||
"nosePeakHigh",
|
||||
"nosePeakSize",
|
||||
"noseBoneHigh",
|
||||
"nosePeakLowering",
|
||||
"noseBoneTwist",
|
||||
"eyeBrownHigh",
|
||||
"eyeBrownForward",
|
||||
"cheeksBoneHigh",
|
||||
"cheeksBoneWidth",
|
||||
"cheeksWidth",
|
||||
"eyesOpening",
|
||||
"lipsThickness",
|
||||
"jawBoneWidth",
|
||||
"jawBoneBackSize",
|
||||
"chinBoneLowering",
|
||||
"chinBoneLenght",
|
||||
"chinBoneSize",
|
||||
"chinHole",
|
||||
"neckThickness",
|
||||
}
|
||||
|
||||
constants.HEAD_OVERLAYS = {
|
||||
"blemishes",
|
||||
"beard",
|
||||
"eyebrows",
|
||||
"ageing",
|
||||
"makeUp",
|
||||
"blush",
|
||||
"complexion",
|
||||
"sunDamage",
|
||||
"lipstick",
|
||||
"moleAndFreckles",
|
||||
"chestHair",
|
||||
"bodyBlemishes",
|
||||
}
|
||||
|
||||
-- Thanks to rootcause for the eye colors names and hair decorations hashes.
|
||||
constants.EYE_COLORS = {
|
||||
"Green",
|
||||
"Emerald",
|
||||
"Light Blue",
|
||||
"Ocean Blue",
|
||||
"Light Brown",
|
||||
"Dark Brown",
|
||||
"Hazel",
|
||||
"Dark Gray",
|
||||
"Light Gray",
|
||||
"Pink",
|
||||
"Yellow",
|
||||
"Purple",
|
||||
"Blackout",
|
||||
"Shades of Gray",
|
||||
"Tequila Sunrise",
|
||||
"Atomic",
|
||||
"Warp",
|
||||
"ECola",
|
||||
"Space Ranger",
|
||||
"Ying Yang",
|
||||
"Bullseye",
|
||||
"Lizard",
|
||||
"Dragon",
|
||||
"Extra Terrestrial",
|
||||
"Goat",
|
||||
"Smiley",
|
||||
"Possessed",
|
||||
"Demon",
|
||||
"Infected",
|
||||
"Alien",
|
||||
"Undead",
|
||||
"Zombie",
|
||||
}
|
||||
|
||||
constants.HAIR_DECORATIONS = {
|
||||
male = {
|
||||
[0] = { `mpbeach_overlays`, `FM_Hair_Fuzz` },
|
||||
[1] = { `multiplayer_overlays`, `NG_M_Hair_001` },
|
||||
[2] = { `multiplayer_overlays`, `NG_M_Hair_002` },
|
||||
[3] = { `multiplayer_overlays`, `NG_M_Hair_003` },
|
||||
[4] = { `multiplayer_overlays`, `NG_M_Hair_004` },
|
||||
[5] = { `multiplayer_overlays`, `NG_M_Hair_005` },
|
||||
[6] = { `multiplayer_overlays`, `NG_M_Hair_006` },
|
||||
[7] = { `multiplayer_overlays`, `NG_M_Hair_007` },
|
||||
[8] = { `multiplayer_overlays`, `NG_M_Hair_008` },
|
||||
[9] = { `multiplayer_overlays`, `NG_M_Hair_009` },
|
||||
[10] = { `multiplayer_overlays`, `NG_M_Hair_013` },
|
||||
[11] = { `multiplayer_overlays`, `NG_M_Hair_002` },
|
||||
[12] = { `multiplayer_overlays`, `NG_M_Hair_011` },
|
||||
[13] = { `multiplayer_overlays`, `NG_M_Hair_012` },
|
||||
[14] = { `multiplayer_overlays`, `NG_M_Hair_014` },
|
||||
[15] = { `multiplayer_overlays`, `NG_M_Hair_015` },
|
||||
[16] = { `multiplayer_overlays`, `NGBea_M_Hair_000` },
|
||||
[17] = { `multiplayer_overlays`, `NGBea_M_Hair_001` },
|
||||
[18] = { `multiplayer_overlays`, `NGBus_M_Hair_000` },
|
||||
[19] = { `multiplayer_overlays`, `NGBus_M_Hair_001` },
|
||||
[20] = { `multiplayer_overlays`, `NGHip_M_Hair_000` },
|
||||
[21] = { `multiplayer_overlays`, `NGHip_M_Hair_001` },
|
||||
[22] = { `multiplayer_overlays`, `NGInd_M_Hair_000` },
|
||||
[24] = { `mplowrider_overlays`, `LR_M_Hair_000` },
|
||||
[25] = { `mplowrider_overlays`, `LR_M_Hair_001` },
|
||||
[26] = { `mplowrider_overlays`, `LR_M_Hair_002` },
|
||||
[27] = { `mplowrider_overlays`, `LR_M_Hair_003` },
|
||||
[28] = { `mplowrider2_overlays`, `LR_M_Hair_004` },
|
||||
[29] = { `mplowrider2_overlays`, `LR_M_Hair_005` },
|
||||
[30] = { `mplowrider2_overlays`, `LR_M_Hair_006` },
|
||||
[31] = { `mpbiker_overlays`, `MP_Biker_Hair_000_M` },
|
||||
[32] = { `mpbiker_overlays`, `MP_Biker_Hair_001_M` },
|
||||
[33] = { `mpbiker_overlays`, `MP_Biker_Hair_002_M` },
|
||||
[34] = { `mpbiker_overlays`, `MP_Biker_Hair_003_M` },
|
||||
[35] = { `mpbiker_overlays`, `MP_Biker_Hair_004_M` },
|
||||
[36] = { `mpbiker_overlays`, `MP_Biker_Hair_005_M` },
|
||||
[37] = { `multiplayer_overlays`, `NG_M_Hair_001` },
|
||||
[38] = { `multiplayer_overlays`, `NG_M_Hair_002` },
|
||||
[39] = { `multiplayer_overlays`, `NG_M_Hair_003` },
|
||||
[40] = { `multiplayer_overlays`, `NG_M_Hair_004` },
|
||||
[41] = { `multiplayer_overlays`, `NG_M_Hair_005` },
|
||||
[42] = { `multiplayer_overlays`, `NG_M_Hair_006` },
|
||||
[43] = { `multiplayer_overlays`, `NG_M_Hair_007` },
|
||||
[44] = { `multiplayer_overlays`, `NG_M_Hair_008` },
|
||||
[45] = { `multiplayer_overlays`, `NG_M_Hair_009` },
|
||||
[46] = { `multiplayer_overlays`, `NG_M_Hair_013` },
|
||||
[47] = { `multiplayer_overlays`, `NG_M_Hair_002` },
|
||||
[48] = { `multiplayer_overlays`, `NG_M_Hair_011` },
|
||||
[49] = { `multiplayer_overlays`, `NG_M_Hair_012` },
|
||||
[50] = { `multiplayer_overlays`, `NG_M_Hair_014` },
|
||||
[51] = { `multiplayer_overlays`, `NG_M_Hair_015` },
|
||||
[52] = { `multiplayer_overlays`, `NGBea_M_Hair_000` },
|
||||
[53] = { `multiplayer_overlays`, `NGBea_M_Hair_001` },
|
||||
[54] = { `multiplayer_overlays`, `NGBus_M_Hair_000` },
|
||||
[55] = { `multiplayer_overlays`, `NGBus_M_Hair_001` },
|
||||
[56] = { `multiplayer_overlays`, `NGHip_M_Hair_000` },
|
||||
[57] = { `multiplayer_overlays`, `NGHip_M_Hair_001` },
|
||||
[58] = { `multiplayer_overlays`, `NGInd_M_Hair_000` },
|
||||
[59] = { `mplowrider_overlays`, `LR_M_Hair_000` },
|
||||
[60] = { `mplowrider_overlays`, `LR_M_Hair_001` },
|
||||
[61] = { `mplowrider_overlays`, `LR_M_Hair_002` },
|
||||
[62] = { `mplowrider_overlays`, `LR_M_Hair_003` },
|
||||
[63] = { `mplowrider2_overlays`, `LR_M_Hair_004` },
|
||||
[64] = { `mplowrider2_overlays`, `LR_M_Hair_005` },
|
||||
[65] = { `mplowrider2_overlays`, `LR_M_Hair_006` },
|
||||
[66] = { `mpbiker_overlays`, `MP_Biker_Hair_000_M` },
|
||||
[67] = { `mpbiker_overlays`, `MP_Biker_Hair_001_M` },
|
||||
[68] = { `mpbiker_overlays`, `MP_Biker_Hair_002_M` },
|
||||
[69] = { `mpbiker_overlays`, `MP_Biker_Hair_003_M` },
|
||||
[70] = { `mpbiker_overlays`, `MP_Biker_Hair_004_M` },
|
||||
[71] = { `mpbiker_overlays`, `MP_Biker_Hair_005_M` },
|
||||
[72] = { `mpgunrunning_overlays`, `MP_Gunrunning_Hair_M_000_M` },
|
||||
[73] = { `mpgunrunning_overlays`, `MP_Gunrunning_Hair_M_001_M` },
|
||||
[74] = { `mpVinewood_overlays`, `MP_Vinewood_Hair_M_000_M` },
|
||||
[75] = { `mptuner_overlays`, `MP_Tuner_Hair_001_M` },
|
||||
[76] = { `mpsecurity_overlays`, `MP_Security_Hair_001_M` },
|
||||
},
|
||||
|
||||
female = {
|
||||
[0] = { `mpbeach_overlays`, `FM_Hair_Fuzz` },
|
||||
[1] = { `multiplayer_overlays`, `NG_F_Hair_001` },
|
||||
[2] = { `multiplayer_overlays`, `NG_F_Hair_002` },
|
||||
[3] = { `multiplayer_overlays`, `NG_F_Hair_003` },
|
||||
[4] = { `multiplayer_overlays`, `NG_F_Hair_004` },
|
||||
[5] = { `multiplayer_overlays`, `NG_F_Hair_005` },
|
||||
[6] = { `multiplayer_overlays`, `NG_F_Hair_006` },
|
||||
[7] = { `multiplayer_overlays`, `NG_F_Hair_007` },
|
||||
[8] = { `multiplayer_overlays`, `NG_F_Hair_008` },
|
||||
[9] = { `multiplayer_overlays`, `NG_F_Hair_009` },
|
||||
[10] = { `multiplayer_overlays`, `NG_F_Hair_010` },
|
||||
[11] = { `multiplayer_overlays`, `NG_F_Hair_011` },
|
||||
[12] = { `multiplayer_overlays`, `NG_F_Hair_012` },
|
||||
[13] = { `multiplayer_overlays`, `NG_F_Hair_013` },
|
||||
[14] = { `multiplayer_overlays`, `NG_M_Hair_014` },
|
||||
[15] = { `multiplayer_overlays`, `NG_M_Hair_015` },
|
||||
[16] = { `multiplayer_overlays`, `NGBea_F_Hair_000` },
|
||||
[17] = { `multiplayer_overlays`, `NGBea_F_Hair_001` },
|
||||
[18] = { `multiplayer_overlays`, `NG_F_Hair_007` },
|
||||
[19] = { `multiplayer_overlays`, `NGBus_F_Hair_000` },
|
||||
[20] = { `multiplayer_overlays`, `NGBus_F_Hair_001` },
|
||||
[21] = { `multiplayer_overlays`, `NGBea_F_Hair_001` },
|
||||
[22] = { `multiplayer_overlays`, `NGHip_F_Hair_000` },
|
||||
[23] = { `multiplayer_overlays`, `NGInd_F_Hair_000` },
|
||||
[25] = { `mplowrider_overlays`, `LR_F_Hair_000` },
|
||||
[26] = { `mplowrider_overlays`, `LR_F_Hair_001` },
|
||||
[27] = { `mplowrider_overlays`, `LR_F_Hair_002` },
|
||||
[28] = { `mplowrider2_overlays`, `LR_F_Hair_003` },
|
||||
[29] = { `mplowrider2_overlays`, `LR_F_Hair_003` },
|
||||
[30] = { `mplowrider2_overlays`, `LR_F_Hair_004` },
|
||||
[31] = { `mplowrider2_overlays`, `LR_F_Hair_006` },
|
||||
[32] = { `mpbiker_overlays`, `MP_Biker_Hair_000_F` },
|
||||
[33] = { `mpbiker_overlays`, `MP_Biker_Hair_001_F` },
|
||||
[34] = { `mpbiker_overlays`, `MP_Biker_Hair_002_F` },
|
||||
[35] = { `mpbiker_overlays`, `MP_Biker_Hair_003_F` },
|
||||
[36] = { `multiplayer_overlays`, `NG_F_Hair_003` },
|
||||
[37] = { `mpbiker_overlays`, `MP_Biker_Hair_006_F` },
|
||||
[38] = { `mpbiker_overlays`, `MP_Biker_Hair_004_F` },
|
||||
[39] = { `multiplayer_overlays`, `NG_F_Hair_001` },
|
||||
[40] = { `multiplayer_overlays`, `NG_F_Hair_002` },
|
||||
[41] = { `multiplayer_overlays`, `NG_F_Hair_003` },
|
||||
[42] = { `multiplayer_overlays`, `NG_F_Hair_004` },
|
||||
[43] = { `multiplayer_overlays`, `NG_F_Hair_005` },
|
||||
[44] = { `multiplayer_overlays`, `NG_F_Hair_006` },
|
||||
[45] = { `multiplayer_overlays`, `NG_F_Hair_007` },
|
||||
[46] = { `multiplayer_overlays`, `NG_F_Hair_008` },
|
||||
[47] = { `multiplayer_overlays`, `NG_F_Hair_009` },
|
||||
[48] = { `multiplayer_overlays`, `NG_F_Hair_010` },
|
||||
[49] = { `multiplayer_overlays`, `NG_F_Hair_011` },
|
||||
[50] = { `multiplayer_overlays`, `NG_F_Hair_012` },
|
||||
[51] = { `multiplayer_overlays`, `NG_F_Hair_013` },
|
||||
[52] = { `multiplayer_overlays`, `NG_M_Hair_014` },
|
||||
[53] = { `multiplayer_overlays`, `NG_M_Hair_015` },
|
||||
[54] = { `multiplayer_overlays`, `NGBea_F_Hair_000` },
|
||||
[55] = { `multiplayer_overlays`, `NGBea_F_Hair_001` },
|
||||
[56] = { `multiplayer_overlays`, `NG_F_Hair_007` },
|
||||
[57] = { `multiplayer_overlays`, `NGBus_F_Hair_000` },
|
||||
[58] = { `multiplayer_overlays`, `NGBus_F_Hair_001` },
|
||||
[59] = { `multiplayer_overlays`, `NGBea_F_Hair_001` },
|
||||
[60] = { `multiplayer_overlays`, `NGHip_F_Hair_000` },
|
||||
[61] = { `multiplayer_overlays`, `NGInd_F_Hair_000` },
|
||||
[62] = { `mplowrider_overlays`, `LR_F_Hair_000` },
|
||||
[63] = { `mplowrider_overlays`, `LR_F_Hair_001` },
|
||||
[64] = { `mplowrider_overlays`, `LR_F_Hair_002` },
|
||||
[65] = { `mplowrider2_overlays`, `LR_F_Hair_003` },
|
||||
[66] = { `mplowrider2_overlays`, `LR_F_Hair_003` },
|
||||
[67] = { `mplowrider2_overlays`, `LR_F_Hair_004` },
|
||||
[68] = { `mplowrider2_overlays`, `LR_F_Hair_006` },
|
||||
[69] = { `mpbiker_overlays`, `MP_Biker_Hair_000_F` },
|
||||
[70] = { `mpbiker_overlays`, `MP_Biker_Hair_001_F` },
|
||||
[71] = { `mpbiker_overlays`, `MP_Biker_Hair_002_F` },
|
||||
[72] = { `mpbiker_overlays`, `MP_Biker_Hair_003_F` },
|
||||
[73] = { `multiplayer_overlays`, `NG_F_Hair_003` },
|
||||
[74] = { `mpbiker_overlays`, `MP_Biker_Hair_006_F` },
|
||||
[75] = { `mpbiker_overlays`, `MP_Biker_Hair_004_F` },
|
||||
[76] = { `mpgunrunning_overlays`, `MP_Gunrunning_Hair_F_000_F` },
|
||||
[77] = { `mpgunrunning_overlays`, `MP_Gunrunning_Hair_F_001_F` },
|
||||
[78] = { `mpVinewood_overlays`, `MP_Vinewood_Hair_F_000_F` },
|
||||
[79] = { `mptuner_overlays`, `MP_Tuner_Hair_000_F` },
|
||||
[80] = { `mpsecurity_overlays`, `MP_Security_Hair_000_F` },
|
||||
},
|
||||
}
|
||||
|
||||
constants.DATA_CLOTHES = {
|
||||
head = {
|
||||
animations = {
|
||||
on = {
|
||||
dict = "mp_masks@standard_car@ds@",
|
||||
anim = "put_on_mask",
|
||||
move = 51,
|
||||
duration = 600
|
||||
},
|
||||
off = {
|
||||
dict = "missheist_agency2ahelmet",
|
||||
anim = "take_off_helmet_stand",
|
||||
move = 51,
|
||||
duration = 1200
|
||||
}
|
||||
},
|
||||
components = {
|
||||
male = {
|
||||
{1, 0}
|
||||
},
|
||||
female = {
|
||||
{1, 0}
|
||||
}
|
||||
},
|
||||
props = {
|
||||
male = {
|
||||
{0, -1}
|
||||
},
|
||||
female = {}
|
||||
}
|
||||
},
|
||||
body = {
|
||||
animations = {
|
||||
on = {
|
||||
dict = "clothingtie",
|
||||
anim = "try_tie_negative_a",
|
||||
move = 51,
|
||||
duration = 1200
|
||||
},
|
||||
off = {
|
||||
dict = "clothingtie",
|
||||
anim = "try_tie_negative_a",
|
||||
move = 51,
|
||||
duration = 1200
|
||||
}
|
||||
},
|
||||
components = {
|
||||
male = {
|
||||
{11, 252},
|
||||
{3, 15},
|
||||
{8, 15},
|
||||
{10, 0},
|
||||
{5, 0}
|
||||
},
|
||||
female = {
|
||||
{11, 15},
|
||||
{8, 14},
|
||||
{3, 15},
|
||||
{10, 0},
|
||||
{5, 0}
|
||||
}
|
||||
},
|
||||
props = {
|
||||
male = {},
|
||||
female = {}
|
||||
}
|
||||
},
|
||||
bottom = {
|
||||
animations = {
|
||||
on = {
|
||||
dict = "re@construction",
|
||||
anim = "out_of_breath",
|
||||
move = 51,
|
||||
duration = 1300
|
||||
},
|
||||
off = {
|
||||
dict = "re@construction",
|
||||
anim = "out_of_breath",
|
||||
move = 51,
|
||||
duration = 1300
|
||||
}
|
||||
},
|
||||
components = {
|
||||
male = {
|
||||
{4, 61},
|
||||
{6, 34}
|
||||
},
|
||||
female = {
|
||||
{4, 15},
|
||||
{6, 35}
|
||||
}
|
||||
},
|
||||
props = {
|
||||
male = {},
|
||||
female = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
constants.CAMERAS = {
|
||||
default = {
|
||||
vec3(0, 2.2, 0.2),
|
||||
vec3(0, 0, -0.05),
|
||||
},
|
||||
head = {
|
||||
vec3(0, 0.9, 0.65),
|
||||
vec3(0, 0, 0.6),
|
||||
},
|
||||
body = {
|
||||
vec3(0, 1.2, 0.2),
|
||||
vec3(0, 0, 0.2),
|
||||
},
|
||||
bottom = {
|
||||
vec3(0, 0.98, -0.7),
|
||||
vec3(0, 0, -0.9),
|
||||
},
|
||||
}
|
||||
|
||||
constants.OFFSETS = {
|
||||
default = vec2(1.5, -1),
|
||||
head = vec2(0.7, -0.45),
|
||||
body = vec2(1.2, -0.45),
|
||||
bottom = vec2(0.7, -0.45),
|
||||
}
|
||||
613
resources/[core]/illenium-appearance/game/customization.lua
Normal file
613
resources/[core]/illenium-appearance/game/customization.lua
Normal file
@ -0,0 +1,613 @@
|
||||
local reverseCamera
|
||||
|
||||
local function getRgbColors()
|
||||
local colors = {
|
||||
hair = {},
|
||||
makeUp = {}
|
||||
}
|
||||
|
||||
for i = 0, GetNumHairColors() - 1 do
|
||||
colors.hair[i+1] = {GetPedHairRgbColor(i)}
|
||||
end
|
||||
|
||||
for i = 0, GetNumMakeupColors() - 1 do
|
||||
colors.makeUp[i+1] = {GetPedMakeupRgbColor(i)}
|
||||
end
|
||||
|
||||
return colors
|
||||
end
|
||||
|
||||
local playerAppearance
|
||||
|
||||
local function getAppearance()
|
||||
if not playerAppearance then
|
||||
playerAppearance = client.getPedAppearance(cache.ped)
|
||||
end
|
||||
|
||||
return playerAppearance
|
||||
end
|
||||
client.getAppearance = getAppearance
|
||||
|
||||
local function addToBlacklist(item, drawable, drawableId, blacklistSettings)
|
||||
if drawable == drawableId and item.textures then
|
||||
for i = 1, #item.textures do
|
||||
blacklistSettings.textures[#blacklistSettings.textures + 1] = item.textures[i]
|
||||
end
|
||||
end
|
||||
if not item.textures or #item.textures == 0 then
|
||||
blacklistSettings.drawables[#blacklistSettings.drawables + 1] = drawable
|
||||
end
|
||||
end
|
||||
|
||||
local function listContains(items, item)
|
||||
for i = 1, #items do
|
||||
if items[i] == item then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function listContainsAny(items, containedItems)
|
||||
for i = 1, #items do
|
||||
if listContains(containedItems, items[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function allowedForPlayer(item, allowedAces)
|
||||
return (item.jobs and listContains(item.jobs, client.job.name)) or (item.gangs and listContains(item.gangs, client.gang.name)) or (item.aces and listContainsAny(item.aces, allowedAces) or (item.citizenids and listContains(item.citizenids, client.citizenid)))
|
||||
end
|
||||
|
||||
local function filterPedModelsForPlayer(pedConfigs)
|
||||
local playerPeds = {}
|
||||
local allowedAces = lib.callback.await("illenium-appearance:server:GetPlayerAces", false)
|
||||
|
||||
for i = 1, #pedConfigs do
|
||||
local config = pedConfigs[i]
|
||||
if (not config.jobs and not config.gangs and not config.aces and not config.citizenids) or allowedForPlayer(config, allowedAces) then
|
||||
for j = 1, #config.peds do
|
||||
playerPeds[#playerPeds + 1] = config.peds[j]
|
||||
end
|
||||
end
|
||||
end
|
||||
return playerPeds
|
||||
end
|
||||
|
||||
local function filterTattoosByGender(tattoos)
|
||||
local filtered = {}
|
||||
local gender = client.getPedDecorationType()
|
||||
for k, v in pairs(tattoos) do
|
||||
filtered[k] = {}
|
||||
for i = 1, #v do
|
||||
local tattoo = v[i]
|
||||
if tattoo["hash" .. gender:gsub("^%l", string.upper)] ~= "" then
|
||||
filtered[k][#filtered[k] + 1] = tattoo
|
||||
end
|
||||
end
|
||||
end
|
||||
return filtered
|
||||
end
|
||||
|
||||
local function filterBlacklistSettings(items, drawableId)
|
||||
local blacklistSettings = {
|
||||
drawables = {},
|
||||
textures = {}
|
||||
}
|
||||
|
||||
local allowedAces = lib.callback.await("illenium-appearance:server:GetPlayerAces", false)
|
||||
|
||||
for i = 1, #items do
|
||||
local item = items[i]
|
||||
if not allowedForPlayer(item, allowedAces) and item.drawables then
|
||||
for j = 0, #item.drawables do
|
||||
addToBlacklist(item, item.drawables[j], drawableId, blacklistSettings)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return blacklistSettings
|
||||
end
|
||||
|
||||
local function componentBlacklistMap(gender, componentId)
|
||||
local genderSettings = Config.Blacklist[gender].components
|
||||
if componentId == 1 then
|
||||
return genderSettings.masks
|
||||
elseif componentId == 3 then
|
||||
return genderSettings.upperBody
|
||||
elseif componentId == 4 then
|
||||
return genderSettings.lowerBody
|
||||
elseif componentId == 5 then
|
||||
return genderSettings.bags
|
||||
elseif componentId == 6 then
|
||||
return genderSettings.shoes
|
||||
elseif componentId == 7 then
|
||||
return genderSettings.scarfAndChains
|
||||
elseif componentId == 8 then
|
||||
return genderSettings.shirts
|
||||
elseif componentId == 9 then
|
||||
return genderSettings.bodyArmor
|
||||
elseif componentId == 10 then
|
||||
return genderSettings.decals
|
||||
elseif componentId == 11 then
|
||||
return genderSettings.jackets
|
||||
end
|
||||
|
||||
return {}
|
||||
end
|
||||
|
||||
local function propBlacklistMap(gender, propId)
|
||||
local genderSettings = Config.Blacklist[gender].props
|
||||
|
||||
if propId == 0 then
|
||||
return genderSettings.hats
|
||||
elseif propId == 1 then
|
||||
return genderSettings.glasses
|
||||
elseif propId == 2 then
|
||||
return genderSettings.ear
|
||||
elseif propId == 6 then
|
||||
return genderSettings.watches
|
||||
elseif propId == 7 then
|
||||
return genderSettings.bracelets
|
||||
end
|
||||
|
||||
return {}
|
||||
end
|
||||
|
||||
local function getComponentSettings(ped, componentId)
|
||||
local drawableId = GetPedDrawableVariation(ped, componentId)
|
||||
local gender = client.getPedDecorationType()
|
||||
|
||||
local blacklistSettings = {
|
||||
drawables = {},
|
||||
textures = {}
|
||||
}
|
||||
|
||||
if client.isPedFreemodeModel(ped) then
|
||||
blacklistSettings = filterBlacklistSettings(componentBlacklistMap(gender, componentId), drawableId)
|
||||
end
|
||||
|
||||
return {
|
||||
component_id = componentId,
|
||||
drawable = {
|
||||
min = 0,
|
||||
max = GetNumberOfPedDrawableVariations(ped, componentId) - 1
|
||||
},
|
||||
texture = {
|
||||
min = 0,
|
||||
max = GetNumberOfPedTextureVariations(ped, componentId, drawableId) - 1
|
||||
},
|
||||
blacklist = blacklistSettings
|
||||
}
|
||||
end
|
||||
client.getComponentSettings = getComponentSettings
|
||||
|
||||
local function getPropSettings(ped, propId)
|
||||
local drawableId = GetPedPropIndex(ped, propId)
|
||||
local gender = client.getPedDecorationType()
|
||||
|
||||
local blacklistSettings = {
|
||||
drawables = {},
|
||||
textures = {}
|
||||
}
|
||||
|
||||
if client.isPedFreemodeModel(ped) then
|
||||
blacklistSettings = filterBlacklistSettings(propBlacklistMap(gender, propId), drawableId)
|
||||
end
|
||||
|
||||
local settings = {
|
||||
prop_id = propId,
|
||||
drawable = {
|
||||
min = -1,
|
||||
max = GetNumberOfPedPropDrawableVariations(ped, propId) - 1
|
||||
},
|
||||
texture = {
|
||||
min = -1,
|
||||
max = GetNumberOfPedPropTextureVariations(ped, propId, drawableId) - 1
|
||||
},
|
||||
blacklist = blacklistSettings
|
||||
}
|
||||
return settings
|
||||
end
|
||||
client.getPropSettings = getPropSettings
|
||||
|
||||
local function getHairSettings(ped)
|
||||
local colors = getRgbColors()
|
||||
local gender = client.getPedDecorationType()
|
||||
local blacklistSettings = {
|
||||
drawables = {},
|
||||
textures = {}
|
||||
}
|
||||
|
||||
if client.isPedFreemodeModel(ped) then
|
||||
blacklistSettings = filterBlacklistSettings(Config.Blacklist[gender].hair, GetPedDrawableVariation(ped, 2))
|
||||
end
|
||||
|
||||
local settings = {
|
||||
style = {
|
||||
min = 0,
|
||||
max = GetNumberOfPedDrawableVariations(ped, 2) - 1
|
||||
},
|
||||
color = {
|
||||
items = colors.hair
|
||||
},
|
||||
highlight = {
|
||||
items = colors.hair
|
||||
},
|
||||
texture = {
|
||||
min = 0,
|
||||
max = GetNumberOfPedTextureVariations(ped, 2, GetPedDrawableVariation(ped, 2)) - 1
|
||||
},
|
||||
blacklist = blacklistSettings
|
||||
}
|
||||
|
||||
return settings
|
||||
end
|
||||
client.getHairSettings = getHairSettings
|
||||
|
||||
local function getAppearanceSettings()
|
||||
local ped = {
|
||||
model = {
|
||||
items = filterPedModelsForPlayer(Config.Peds.pedConfig)
|
||||
}
|
||||
}
|
||||
|
||||
local tattoos = {
|
||||
items = filterTattoosByGender(Config.Tattoos),
|
||||
opacity = {
|
||||
min = 0.1,
|
||||
max = 1,
|
||||
factor = 0.1,
|
||||
}
|
||||
}
|
||||
|
||||
local components = {}
|
||||
for i = 1, #constants.PED_COMPONENTS_IDS do
|
||||
components[i] = getComponentSettings(cache.ped, constants.PED_COMPONENTS_IDS[i])
|
||||
end
|
||||
|
||||
local props = {}
|
||||
for i = 1, #constants.PED_PROPS_IDS do
|
||||
props[i] = getPropSettings(cache.ped, constants.PED_PROPS_IDS[i])
|
||||
end
|
||||
|
||||
local headBlend = {
|
||||
shapeFirst = {
|
||||
min = 0,
|
||||
max = 45
|
||||
},
|
||||
shapeSecond = {
|
||||
min = 0,
|
||||
max = 45
|
||||
},
|
||||
shapeThird = {
|
||||
min = 0,
|
||||
max = 45
|
||||
},
|
||||
skinFirst = {
|
||||
min = 0,
|
||||
max = 45
|
||||
},
|
||||
skinSecond = {
|
||||
min = 0,
|
||||
max = 45
|
||||
},
|
||||
skinThird = {
|
||||
min = 0,
|
||||
max = 45
|
||||
},
|
||||
shapeMix = {
|
||||
min = 0,
|
||||
max = 1,
|
||||
factor = 0.1,
|
||||
},
|
||||
skinMix = {
|
||||
min = 0,
|
||||
max = 1,
|
||||
factor = 0.1,
|
||||
},
|
||||
thirdMix = {
|
||||
min = 0,
|
||||
max = 1,
|
||||
factor = 0.1,
|
||||
}
|
||||
}
|
||||
|
||||
local size = #constants.FACE_FEATURES
|
||||
local faceFeatures = table.create(0, size)
|
||||
for i = 1, size do
|
||||
local feature = constants.FACE_FEATURES[i]
|
||||
faceFeatures[feature] = { min = -1, max = 1, factor = 0.1}
|
||||
end
|
||||
|
||||
local colors = getRgbColors()
|
||||
|
||||
local colorMap = {
|
||||
beard = colors.hair,
|
||||
eyebrows = colors.hair,
|
||||
chestHair = colors.hair,
|
||||
makeUp = colors.makeUp,
|
||||
blush = colors.makeUp,
|
||||
lipstick = colors.makeUp,
|
||||
}
|
||||
|
||||
size = #constants.HEAD_OVERLAYS
|
||||
local headOverlays = table.create(0, size)
|
||||
|
||||
for i = 1, size do
|
||||
local overlay = constants.HEAD_OVERLAYS[i]
|
||||
local settings = {
|
||||
style = {
|
||||
min = 0,
|
||||
max = GetPedHeadOverlayNum(i - 1) - 1
|
||||
},
|
||||
opacity = {
|
||||
min = 0,
|
||||
max = 1,
|
||||
factor = 0.1,
|
||||
}
|
||||
}
|
||||
|
||||
if colorMap[overlay] then
|
||||
settings.color = {
|
||||
items = colorMap[overlay]
|
||||
}
|
||||
end
|
||||
|
||||
headOverlays[overlay] = settings
|
||||
end
|
||||
|
||||
local eyeColor = {
|
||||
min = 0,
|
||||
max = 30
|
||||
}
|
||||
|
||||
return {
|
||||
ped = ped,
|
||||
components = components,
|
||||
props = props,
|
||||
headBlend = headBlend,
|
||||
faceFeatures = faceFeatures,
|
||||
headOverlays = headOverlays,
|
||||
hair = getHairSettings(cache.ped),
|
||||
eyeColor = eyeColor,
|
||||
tattoos = tattoos
|
||||
}
|
||||
end
|
||||
client.getAppearanceSettings = getAppearanceSettings
|
||||
|
||||
local config
|
||||
function client.getConfig() return config end
|
||||
|
||||
local isCameraInterpolating
|
||||
local currentCamera
|
||||
local cameraHandle
|
||||
local function setCamera(key)
|
||||
if not isCameraInterpolating then
|
||||
if key ~= "current" then
|
||||
currentCamera = key
|
||||
end
|
||||
|
||||
local coords, point = table.unpack(constants.CAMERAS[currentCamera])
|
||||
local reverseFactor = reverseCamera and -1 or 1
|
||||
|
||||
if cameraHandle then
|
||||
local camCoords = GetOffsetFromEntityInWorldCoords(cache.ped, coords.x * reverseFactor, coords.y * reverseFactor, coords.z * reverseFactor)
|
||||
local camPoint = GetOffsetFromEntityInWorldCoords(cache.ped, point.x, point.y, point.z)
|
||||
local tmpCamera = CreateCameraWithParams("DEFAULT_SCRIPTED_CAMERA", camCoords.x, camCoords.y, camCoords.z, 0.0, 0.0, 0.0, 49.0, false, 0)
|
||||
|
||||
PointCamAtCoord(tmpCamera, camPoint.x, camPoint.y, camPoint.z)
|
||||
SetCamActiveWithInterp(tmpCamera, cameraHandle, 1000, 1, 1)
|
||||
|
||||
isCameraInterpolating = true
|
||||
|
||||
CreateThread(function()
|
||||
repeat Wait(500)
|
||||
until not IsCamInterpolating(cameraHandle) and IsCamActive(tmpCamera)
|
||||
DestroyCam(cameraHandle, false)
|
||||
cameraHandle = tmpCamera
|
||||
isCameraInterpolating = false
|
||||
end)
|
||||
else
|
||||
local camCoords = GetOffsetFromEntityInWorldCoords(cache.ped, coords.x, coords.y, coords.z)
|
||||
local camPoint = GetOffsetFromEntityInWorldCoords(cache.ped, point.x, point.y, point.z)
|
||||
cameraHandle = CreateCameraWithParams("DEFAULT_SCRIPTED_CAMERA", camCoords.x, camCoords.y, camCoords.z, 0.0, 0.0, 0.0, 49.0, false, 0)
|
||||
|
||||
PointCamAtCoord(cameraHandle, camPoint.x, camPoint.y, camPoint.z)
|
||||
SetCamActive(cameraHandle, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
client.setCamera = setCamera
|
||||
|
||||
function client.rotateCamera(direction)
|
||||
if not isCameraInterpolating then
|
||||
local coords, point = table.unpack(constants.CAMERAS[currentCamera])
|
||||
local offset = constants.OFFSETS[currentCamera]
|
||||
local sideFactor = direction == "left" and 1 or -1
|
||||
local reverseFactor = reverseCamera and -1 or 1
|
||||
|
||||
local camCoords = GetOffsetFromEntityInWorldCoords(
|
||||
cache.ped,
|
||||
(coords.x + offset.x) * sideFactor * reverseFactor,
|
||||
(coords.y + offset.y) * reverseFactor,
|
||||
coords.z
|
||||
)
|
||||
|
||||
local camPoint = GetOffsetFromEntityInWorldCoords(cache.ped, point.x, point.y, point.z)
|
||||
local tmpCamera = CreateCameraWithParams("DEFAULT_SCRIPTED_CAMERA", camCoords.x, camCoords.y, camCoords.z, 0.0, 0.0, 0.0, 49.0, false, 0)
|
||||
|
||||
PointCamAtCoord(tmpCamera, camPoint.x, camPoint.y, camPoint.z)
|
||||
SetCamActiveWithInterp(tmpCamera, cameraHandle, 1000, 1, 1)
|
||||
|
||||
isCameraInterpolating = true
|
||||
|
||||
CreateThread(function()
|
||||
repeat Wait(500)
|
||||
until not IsCamInterpolating(cameraHandle) and IsCamActive(tmpCamera)
|
||||
DestroyCam(cameraHandle, false)
|
||||
cameraHandle = tmpCamera
|
||||
isCameraInterpolating = false
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
local playerCoords
|
||||
local function pedTurn(ped, angle)
|
||||
reverseCamera = not reverseCamera
|
||||
local sequenceTaskId = OpenSequenceTask()
|
||||
if sequenceTaskId then
|
||||
TaskGoStraightToCoord(0, playerCoords.x, playerCoords.y, playerCoords.z, 8.0, -1, GetEntityHeading(ped) - angle, 0.1)
|
||||
TaskStandStill(0, -1)
|
||||
CloseSequenceTask(sequenceTaskId)
|
||||
ClearPedTasks(ped)
|
||||
TaskPerformSequence(ped, sequenceTaskId)
|
||||
ClearSequenceTask(sequenceTaskId)
|
||||
end
|
||||
end
|
||||
client.pedTurn = pedTurn
|
||||
|
||||
local function wearClothes(data, typeClothes)
|
||||
local dataClothes = constants.DATA_CLOTHES[typeClothes]
|
||||
local animationsOn = dataClothes.animations.on
|
||||
local components = dataClothes.components[client.getPedDecorationType()]
|
||||
local appliedComponents = data.components
|
||||
local props = dataClothes.props[client.getPedDecorationType()]
|
||||
local appliedProps = data.props
|
||||
|
||||
RequestAnimDict(animationsOn.dict)
|
||||
while not HasAnimDictLoaded(animationsOn.dict) do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
for i = 1, #components do
|
||||
local componentId = components[i][1]
|
||||
for j = 1, #appliedComponents do
|
||||
local applied = appliedComponents[j]
|
||||
if applied.component_id == componentId then
|
||||
SetPedComponentVariation(cache.ped, componentId, applied.drawable, applied.texture, 2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, #props do
|
||||
local propId = props[i][1]
|
||||
for j = 1, #appliedProps do
|
||||
local applied = appliedProps[j]
|
||||
if applied.prop_id == propId then
|
||||
SetPedPropIndex(cache.ped, propId, applied.drawable, applied.texture, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
TaskPlayAnim(cache.ped, animationsOn.dict, animationsOn.anim, 3.0, 3.0, animationsOn.duration, animationsOn.move, 0, false, false, false)
|
||||
end
|
||||
client.wearClothes = wearClothes
|
||||
|
||||
local function removeClothes(typeClothes)
|
||||
local dataClothes = constants.DATA_CLOTHES[typeClothes]
|
||||
local animationsOff = dataClothes.animations.off
|
||||
local components = dataClothes.components[client.getPedDecorationType()]
|
||||
local props = dataClothes.props[client.getPedDecorationType()]
|
||||
|
||||
RequestAnimDict(animationsOff.dict)
|
||||
while not HasAnimDictLoaded(animationsOff.dict) do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
for i = 1, #components do
|
||||
local component = components[i]
|
||||
SetPedComponentVariation(cache.ped, component[1], component[2], 0, 2)
|
||||
end
|
||||
|
||||
for i = 1, #props do
|
||||
ClearPedProp(cache.ped, props[i][1])
|
||||
end
|
||||
|
||||
TaskPlayAnim(cache.ped, animationsOff.dict, animationsOff.anim, 3.0, 3.0, animationsOff.duration, animationsOff.move, 0, false, false, false)
|
||||
end
|
||||
client.removeClothes = removeClothes
|
||||
|
||||
local playerHeading
|
||||
function client.getHeading() return playerHeading end
|
||||
|
||||
local callback
|
||||
function client.startPlayerCustomization(cb, conf)
|
||||
repeat Wait(0) until IsScreenFadedIn() and not IsPlayerTeleportActive() and not IsPlayerSwitchInProgress()
|
||||
|
||||
playerAppearance = client.getPedAppearance(cache.ped)
|
||||
playerCoords = GetEntityCoords(cache.ped, true)
|
||||
playerHeading = GetEntityHeading(cache.ped)
|
||||
|
||||
BackupPlayerStats()
|
||||
|
||||
callback = cb
|
||||
config = conf
|
||||
reverseCamera = false
|
||||
isCameraInterpolating = false
|
||||
|
||||
setCamera("default")
|
||||
SetNuiFocus(true, true)
|
||||
SetNuiFocusKeepInput(false)
|
||||
RenderScriptCams(true, false, 0, true, true)
|
||||
SetEntityInvincible(cache.ped, Config.InvincibleDuringCustomization)
|
||||
TaskStandStill(cache.ped, -1)
|
||||
|
||||
if Config.HideRadar then DisplayRadar(false) end
|
||||
|
||||
SendNuiMessage(json.encode({
|
||||
type = "appearance_display",
|
||||
payload = {
|
||||
asynchronous = Config.AsynchronousLoading
|
||||
}
|
||||
}))
|
||||
end
|
||||
|
||||
function client.exitPlayerCustomization(appearance)
|
||||
RenderScriptCams(false, false, 0, true, true)
|
||||
DestroyCam(cameraHandle, false)
|
||||
SetNuiFocus(false, false)
|
||||
|
||||
if Config.HideRadar then DisplayRadar(true) end
|
||||
|
||||
ClearPedTasksImmediately(cache.ped)
|
||||
SetEntityInvincible(cache.ped, false)
|
||||
|
||||
SendNuiMessage(json.encode({
|
||||
type = "appearance_hide",
|
||||
payload = {}
|
||||
}))
|
||||
|
||||
if not appearance then
|
||||
client.setPlayerAppearance(getAppearance())
|
||||
else
|
||||
client.setPedTattoos(cache.ped, appearance.tattoos)
|
||||
end
|
||||
|
||||
RestorePlayerStats()
|
||||
|
||||
if callback then
|
||||
callback(appearance)
|
||||
end
|
||||
|
||||
callback = nil
|
||||
config = nil
|
||||
playerAppearance = nil
|
||||
playerCoords = nil
|
||||
cameraHandle = nil
|
||||
currentCamera = nil
|
||||
reverseCamera = nil
|
||||
isCameraInterpolating = nil
|
||||
|
||||
end
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if resource == GetCurrentResourceName() then
|
||||
SetNuiFocus(false, false)
|
||||
SetNuiFocusKeepInput(false)
|
||||
end
|
||||
end)
|
||||
|
||||
exports("startPlayerCustomization", client.startPlayerCustomization)
|
||||
136
resources/[core]/illenium-appearance/game/nui.lua
Normal file
136
resources/[core]/illenium-appearance/game/nui.lua
Normal file
@ -0,0 +1,136 @@
|
||||
local client = client
|
||||
|
||||
RegisterNUICallback("appearance_get_locales", function(_, cb)
|
||||
cb(Locales[GetConvar("illenium-appearance:locale", "en")].UI)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_get_settings", function(_, cb)
|
||||
cb({ appearanceSettings = client.getAppearanceSettings() })
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_get_data", function(_, cb)
|
||||
Wait(250)
|
||||
local appearanceData = client.getAppearance()
|
||||
if appearanceData.tattoos then
|
||||
client.setPedTattoos(cache.ped, appearanceData.tattoos)
|
||||
end
|
||||
cb({ config = client.getConfig(), appearanceData = appearanceData })
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_set_camera", function(camera, cb)
|
||||
cb(1)
|
||||
client.setCamera(camera)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_turn_around", function(_, cb)
|
||||
cb(1)
|
||||
client.pedTurn(cache.ped, 180.0)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_rotate_camera", function(direction, cb)
|
||||
cb(1)
|
||||
client.rotateCamera(direction)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_model", function(model, cb)
|
||||
local playerPed = client.setPlayerModel(model)
|
||||
|
||||
SetEntityHeading(cache.ped, client.getHeading())
|
||||
SetEntityInvincible(playerPed, true)
|
||||
TaskStandStill(playerPed, -1)
|
||||
|
||||
cb({
|
||||
appearanceSettings = client.getAppearanceSettings(),
|
||||
appearanceData = client.getPedAppearance(playerPed)
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_component", function(component, cb)
|
||||
client.setPedComponent(cache.ped, component)
|
||||
cb(client.getComponentSettings(cache.ped, component.component_id))
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_prop", function(prop, cb)
|
||||
client.setPedProp(cache.ped, prop)
|
||||
cb(client.getPropSettings(cache.ped, prop.prop_id))
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_head_blend", function(headBlend, cb)
|
||||
cb(1)
|
||||
client.setPedHeadBlend(cache.ped, headBlend)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_face_feature", function(faceFeatures, cb)
|
||||
cb(1)
|
||||
client.setPedFaceFeatures(cache.ped, faceFeatures)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_head_overlay", function(headOverlays, cb)
|
||||
cb(1)
|
||||
client.setPedHeadOverlays(cache.ped, headOverlays)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_hair", function(hair, cb)
|
||||
client.setPedHair(cache.ped, hair)
|
||||
cb(client.getHairSettings(cache.ped))
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_change_eye_color", function(eyeColor, cb)
|
||||
cb(1)
|
||||
client.setPedEyeColor(cache.ped, eyeColor)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_apply_tattoo", function(data, cb)
|
||||
local paid = not data.tattoo or not Config.ChargePerTattoo or lib.callback.await("illenium-appearance:server:payForTattoo", false, data.tattoo)
|
||||
if paid then
|
||||
client.addPedTattoo(cache.ped, data.updatedTattoos or data)
|
||||
end
|
||||
cb(paid)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_preview_tattoo", function(previewTattoo, cb)
|
||||
cb(1)
|
||||
client.setPreviewTattoo(cache.ped, previewTattoo.data, previewTattoo.tattoo)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_delete_tattoo", function(data, cb)
|
||||
cb(1)
|
||||
client.removePedTattoo(cache.ped, data)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_wear_clothes", function(dataWearClothes, cb)
|
||||
cb(1)
|
||||
client.wearClothes(dataWearClothes.data, dataWearClothes.key)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_remove_clothes", function(clothes, cb)
|
||||
cb(1)
|
||||
client.removeClothes(clothes)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_save", function(appearance, cb)
|
||||
cb(1)
|
||||
client.wearClothes(appearance, "head")
|
||||
client.wearClothes(appearance, "body")
|
||||
client.wearClothes(appearance, "bottom")
|
||||
client.exitPlayerCustomization(appearance)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("appearance_exit", function(_, cb)
|
||||
cb(1)
|
||||
client.exitPlayerCustomization()
|
||||
end)
|
||||
|
||||
RegisterNUICallback("rotate_left", function(_, cb)
|
||||
cb(1)
|
||||
client.pedTurn(cache.ped, 10.0)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("rotate_right", function(_, cb)
|
||||
cb(1)
|
||||
client.pedTurn(cache.ped, -10.0)
|
||||
end)
|
||||
|
||||
RegisterNUICallback("get_theme_configuration", function(_, cb)
|
||||
cb(Config.Theme)
|
||||
end)
|
||||
439
resources/[core]/illenium-appearance/game/util.lua
Normal file
439
resources/[core]/illenium-appearance/game/util.lua
Normal file
@ -0,0 +1,439 @@
|
||||
local hashesComputed = false
|
||||
local PED_TATTOOS = {}
|
||||
local pedModelsByHash = {}
|
||||
|
||||
local function tofloat(num)
|
||||
return num + 0.0
|
||||
end
|
||||
|
||||
local function isPedFreemodeModel(ped)
|
||||
local model = GetEntityModel(ped)
|
||||
return model == `mp_m_freemode_01` or model == `mp_f_freemode_01`
|
||||
end
|
||||
|
||||
local function computePedModelsByHash()
|
||||
for i = 1, #Config.Peds.pedConfig do
|
||||
local peds = Config.Peds.pedConfig[i].peds
|
||||
for j = 1, #peds do
|
||||
pedModelsByHash[joaat(peds[j])] = peds[j]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return string
|
||||
--- Get the model name from an entity's model hash
|
||||
local function getPedModel(ped)
|
||||
if not hashesComputed then
|
||||
computePedModelsByHash()
|
||||
hashesComputed = true
|
||||
end
|
||||
return pedModelsByHash[GetEntityModel(ped)]
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return table<number, table<string, number>>
|
||||
local function getPedComponents(ped)
|
||||
local size = #constants.PED_COMPONENTS_IDS
|
||||
local components = table.create(size, 0)
|
||||
|
||||
for i = 1, size do
|
||||
local componentId = constants.PED_COMPONENTS_IDS[i]
|
||||
components[i] = {
|
||||
component_id = componentId,
|
||||
drawable = GetPedDrawableVariation(ped, componentId),
|
||||
texture = GetPedTextureVariation(ped, componentId),
|
||||
}
|
||||
end
|
||||
|
||||
return components
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return table<number, table<string, number>>
|
||||
local function getPedProps(ped)
|
||||
local size = #constants.PED_PROPS_IDS
|
||||
local props = table.create(size, 0)
|
||||
|
||||
for i = 1, size do
|
||||
local propId = constants.PED_PROPS_IDS[i]
|
||||
props[i] = {
|
||||
prop_id = propId,
|
||||
drawable = GetPedPropIndex(ped, propId),
|
||||
texture = GetPedPropTextureIndex(ped, propId),
|
||||
}
|
||||
end
|
||||
return props
|
||||
end
|
||||
|
||||
local function round(number, decimalPlaces)
|
||||
return tonumber(string.format("%." .. (decimalPlaces or 0) .. "f", number))
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return table <number, number>
|
||||
---```
|
||||
---{ shapeFirst, shapeSecond, shapeThird, skinFirst, skinSecond, skinThird, shapeMix, skinMix, thirdMix }
|
||||
---```
|
||||
local function getPedHeadBlend(ped)
|
||||
-- GET_PED_HEAD_BLEND_DATA
|
||||
local shapeFirst, shapeSecond, shapeThird, skinFirst, skinSecond, skinThird, shapeMix, skinMix, thirdMix = Citizen.InvokeNative(0x2746BD9D88C5C5D0, ped, Citizen.PointerValueIntInitialized(0), Citizen.PointerValueIntInitialized(0), Citizen.PointerValueIntInitialized(0), Citizen.PointerValueIntInitialized(0), Citizen.PointerValueIntInitialized(0), Citizen.PointerValueIntInitialized(0), Citizen.PointerValueFloatInitialized(0), Citizen.PointerValueFloatInitialized(0), Citizen.PointerValueFloatInitialized(0))
|
||||
|
||||
shapeMix = tonumber(string.sub(shapeMix, 0, 4))
|
||||
if shapeMix > 1 then shapeMix = 1 end
|
||||
|
||||
skinMix = tonumber(string.sub(skinMix, 0, 4))
|
||||
if skinMix > 1 then skinMix = 1 end
|
||||
|
||||
if not thirdMix then
|
||||
thirdMix = 0
|
||||
end
|
||||
thirdMix = tonumber(string.sub(thirdMix, 0, 4))
|
||||
if thirdMix > 1 then thirdMix = 1 end
|
||||
|
||||
|
||||
return {
|
||||
shapeFirst = shapeFirst,
|
||||
shapeSecond = shapeSecond,
|
||||
shapeThird = shapeThird,
|
||||
skinFirst = skinFirst,
|
||||
skinSecond = skinSecond,
|
||||
skinThird = skinThird,
|
||||
shapeMix = shapeMix,
|
||||
skinMix = skinMix,
|
||||
thirdMix = thirdMix
|
||||
}
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return table<number, table<string, number>>
|
||||
local function getPedFaceFeatures(ped)
|
||||
local size = #constants.FACE_FEATURES
|
||||
local faceFeatures = table.create(0, size)
|
||||
|
||||
for i = 1, size do
|
||||
local feature = constants.FACE_FEATURES[i]
|
||||
faceFeatures[feature] = round(GetPedFaceFeature(ped, i-1), 1)
|
||||
end
|
||||
|
||||
return faceFeatures
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return table<number, table<string, number>>
|
||||
local function getPedHeadOverlays(ped)
|
||||
local size = #constants.HEAD_OVERLAYS
|
||||
local headOverlays = table.create(0, size)
|
||||
|
||||
for i = 1, size do
|
||||
local overlay = constants.HEAD_OVERLAYS[i]
|
||||
local _, value, _, firstColor, secondColor, opacity = GetPedHeadOverlayData(ped, i-1)
|
||||
|
||||
if value ~= 255 then
|
||||
opacity = round(opacity, 1)
|
||||
else
|
||||
value = 0
|
||||
opacity = 0
|
||||
end
|
||||
|
||||
headOverlays[overlay] = {style = value, opacity = opacity, color = firstColor, secondColor = secondColor}
|
||||
end
|
||||
|
||||
return headOverlays
|
||||
end
|
||||
|
||||
---@param ped number entity id
|
||||
---@return table<string, number>
|
||||
local function getPedHair(ped)
|
||||
return {
|
||||
style = GetPedDrawableVariation(ped, 2),
|
||||
color = GetPedHairColor(ped),
|
||||
highlight = GetPedHairHighlightColor(ped),
|
||||
texture = GetPedTextureVariation(ped, 2)
|
||||
}
|
||||
end
|
||||
|
||||
local function getPedDecorationType()
|
||||
local pedModel = GetEntityModel(cache.ped)
|
||||
local decorationType
|
||||
|
||||
if pedModel == `mp_m_freemode_01` then
|
||||
decorationType = "male"
|
||||
elseif pedModel == `mp_f_freemode_01` then
|
||||
decorationType = "female"
|
||||
else
|
||||
decorationType = IsPedMale(cache.ped) and "male" or "female"
|
||||
end
|
||||
|
||||
return decorationType
|
||||
end
|
||||
|
||||
local function getPedAppearance(ped)
|
||||
local eyeColor = GetPedEyeColor(ped)
|
||||
|
||||
return {
|
||||
model = getPedModel(ped) or "mp_m_freemode_01",
|
||||
headBlend = getPedHeadBlend(ped),
|
||||
faceFeatures = getPedFaceFeatures(ped),
|
||||
headOverlays = getPedHeadOverlays(ped),
|
||||
components = getPedComponents(ped),
|
||||
props = getPedProps(ped),
|
||||
hair = getPedHair(ped),
|
||||
tattoos = client.getPedTattoos(),
|
||||
eyeColor = eyeColor < #constants.EYE_COLORS and eyeColor or 0
|
||||
}
|
||||
end
|
||||
|
||||
local function setPlayerModel(model)
|
||||
if type(model) == "string" then model = joaat(model) end
|
||||
|
||||
if IsModelInCdimage(model) then
|
||||
RequestModel(model)
|
||||
while not HasModelLoaded(model) do Wait(0) end
|
||||
|
||||
SetPlayerModel(cache.playerId, model)
|
||||
Wait(150)
|
||||
SetModelAsNoLongerNeeded(model)
|
||||
|
||||
if isPedFreemodeModel(cache.ped) then
|
||||
SetPedDefaultComponentVariation(cache.ped)
|
||||
-- Check if the model is male or female, then change the face mix based on this.
|
||||
if model == `mp_m_freemode_01` then
|
||||
SetPedHeadBlendData(cache.ped, 0, 0, 0, 0, 0, 0, 0, 0, 0, false)
|
||||
elseif model == `mp_f_freemode_01` then
|
||||
SetPedHeadBlendData(cache.ped, 45, 21, 0, 20, 15, 0, 0.3, 0.1, 0, false)
|
||||
end
|
||||
end
|
||||
|
||||
PED_TATTOOS = {}
|
||||
return cache.ped
|
||||
end
|
||||
|
||||
return cache.playerId
|
||||
end
|
||||
|
||||
local function setPedHeadBlend(ped, headBlend)
|
||||
if headBlend and isPedFreemodeModel(ped) then
|
||||
SetPedHeadBlendData(ped, headBlend.shapeFirst, headBlend.shapeSecond, headBlend.shapeThird, headBlend.skinFirst, headBlend.skinSecond, headBlend.skinThird, tofloat(headBlend.shapeMix or 0), tofloat(headBlend.skinMix or 0), tofloat(headBlend.thirdMix or 0), false)
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedFaceFeatures(ped, faceFeatures)
|
||||
if faceFeatures then
|
||||
for k, v in pairs(constants.FACE_FEATURES) do
|
||||
SetPedFaceFeature(ped, k-1, tofloat(faceFeatures[v]))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedHeadOverlays(ped, headOverlays)
|
||||
if headOverlays then
|
||||
for k, v in pairs(constants.HEAD_OVERLAYS) do
|
||||
local headOverlay = headOverlays[v]
|
||||
SetPedHeadOverlay(ped, k-1, headOverlay.style, tofloat(headOverlay.opacity))
|
||||
|
||||
if headOverlay.color then
|
||||
local colorType = 1
|
||||
if v == "blush" or v == "lipstick" or v == "makeUp" then
|
||||
colorType = 2
|
||||
end
|
||||
|
||||
SetPedHeadOverlayColor(ped, k-1, colorType, headOverlay.color, headOverlay.secondColor)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function applyAutomaticFade(ped, style)
|
||||
local gender = getPedDecorationType()
|
||||
local hairDecoration = constants.HAIR_DECORATIONS[gender][style]
|
||||
|
||||
if(hairDecoration) then
|
||||
AddPedDecorationFromHashes(ped, hairDecoration[1], hairDecoration[2])
|
||||
end
|
||||
end
|
||||
|
||||
local function setTattoos(ped, tattoos, style)
|
||||
local isMale = client.getPedDecorationType() == "male"
|
||||
ClearPedDecorations(ped)
|
||||
if Config.AutomaticFade then
|
||||
tattoos["ZONE_HAIR"] = {}
|
||||
PED_TATTOOS["ZONE_HAIR"] = {}
|
||||
applyAutomaticFade(ped, style or GetPedDrawableVariation(ped, 2))
|
||||
end
|
||||
for k in pairs(tattoos) do
|
||||
for i = 1, #tattoos[k] do
|
||||
local tattoo = tattoos[k][i]
|
||||
local tattooGender = isMale and tattoo.hashMale or tattoo.hashFemale
|
||||
for _ = 1, (tattoo.opacity or 0.1) * 10 do
|
||||
AddPedDecorationFromHashes(ped, joaat(tattoo.collection), joaat(tattooGender))
|
||||
end
|
||||
end
|
||||
end
|
||||
if Config.RCoreTattoosCompatibility then
|
||||
TriggerEvent("rcore_tattoos:applyOwnedTattoos")
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedHair(ped, hair, tattoos)
|
||||
if hair then
|
||||
SetPedComponentVariation(ped, 2, hair.style, hair.texture, 0)
|
||||
SetPedHairColor(ped, hair.color, hair.highlight)
|
||||
if isPedFreemodeModel(ped) then
|
||||
setTattoos(ped, tattoos or PED_TATTOOS, hair.style)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedEyeColor(ped, eyeColor)
|
||||
if eyeColor then
|
||||
SetPedEyeColor(ped, eyeColor)
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedComponent(ped, component)
|
||||
if component then
|
||||
if isPedFreemodeModel(ped) and (component.component_id == 0 or component.component_id == 2) then
|
||||
return
|
||||
end
|
||||
|
||||
SetPedComponentVariation(ped, component.component_id, component.drawable, component.texture, 0)
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedComponents(ped, components)
|
||||
if components then
|
||||
for _, v in pairs(components) do
|
||||
setPedComponent(ped, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedProp(ped, prop)
|
||||
if prop then
|
||||
if prop.drawable == -1 then
|
||||
ClearPedProp(ped, prop.prop_id)
|
||||
else
|
||||
SetPedPropIndex(ped, prop.prop_id, prop.drawable, prop.texture, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedProps(ped, props)
|
||||
if props then
|
||||
for _, v in pairs(props) do
|
||||
setPedProp(ped, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedTattoos(ped, tattoos)
|
||||
PED_TATTOOS = tattoos
|
||||
setTattoos(ped, tattoos)
|
||||
end
|
||||
|
||||
local function getPedTattoos()
|
||||
return PED_TATTOOS
|
||||
end
|
||||
|
||||
local function addPedTattoo(ped, tattoos)
|
||||
setTattoos(ped, tattoos)
|
||||
end
|
||||
|
||||
local function removePedTattoo(ped, tattoos)
|
||||
setTattoos(ped, tattoos)
|
||||
end
|
||||
|
||||
local function setPreviewTattoo(ped, tattoos, tattoo)
|
||||
local isMale = client.getPedDecorationType() == "male"
|
||||
local tattooGender = isMale and tattoo.hashMale or tattoo.hashFemale
|
||||
|
||||
ClearPedDecorations(ped)
|
||||
for _ = 1, (tattoo.opacity or 0.1) * 10 do
|
||||
AddPedDecorationFromHashes(ped, joaat(tattoo.collection), tattooGender)
|
||||
end
|
||||
for k in pairs(tattoos) do
|
||||
for i = 1, #tattoos[k] do
|
||||
local aTattoo = tattoos[k][i]
|
||||
if aTattoo.name ~= tattoo.name then
|
||||
local aTattooGender = isMale and aTattoo.hashMale or aTattoo.hashFemale
|
||||
for _ = 1, (aTattoo.opacity or 0.1) * 10 do
|
||||
AddPedDecorationFromHashes(ped, joaat(aTattoo.collection), joaat(aTattooGender))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if Config.AutomaticFade then
|
||||
applyAutomaticFade(ped, GetPedDrawableVariation(ped, 2))
|
||||
end
|
||||
end
|
||||
|
||||
local function setPedAppearance(ped, appearance)
|
||||
if appearance then
|
||||
setPedComponents(ped, appearance.components)
|
||||
setPedProps(ped, appearance.props)
|
||||
|
||||
if appearance.headBlend and isPedFreemodeModel(ped) then setPedHeadBlend(ped, appearance.headBlend) end
|
||||
if appearance.faceFeatures then setPedFaceFeatures(ped, appearance.faceFeatures) end
|
||||
if appearance.headOverlays then setPedHeadOverlays(ped, appearance.headOverlays) end
|
||||
if appearance.hair then setPedHair(ped, appearance.hair, appearance.tattoos) end
|
||||
if appearance.eyeColor then setPedEyeColor(ped, appearance.eyeColor) end
|
||||
if appearance.tattoos then setPedTattoos(ped, appearance.tattoos) end
|
||||
end
|
||||
end
|
||||
|
||||
local function setPlayerAppearance(appearance)
|
||||
if appearance then
|
||||
setPlayerModel(appearance.model)
|
||||
setPedAppearance(cache.ped, appearance)
|
||||
end
|
||||
end
|
||||
|
||||
exports("getPedModel", getPedModel)
|
||||
exports("getPedComponents", getPedComponents)
|
||||
exports("getPedProps", getPedProps)
|
||||
exports("getPedHeadBlend", getPedHeadBlend)
|
||||
exports("getPedFaceFeatures", getPedFaceFeatures)
|
||||
exports("getPedHeadOverlays", getPedHeadOverlays)
|
||||
exports("getPedHair", getPedHair)
|
||||
exports("getPedAppearance", getPedAppearance)
|
||||
|
||||
exports("setPlayerModel", setPlayerModel)
|
||||
exports("setPedHeadBlend", setPedHeadBlend)
|
||||
exports("setPedFaceFeatures", setPedFaceFeatures)
|
||||
exports("setPedHeadOverlays", setPedHeadOverlays)
|
||||
exports("setPedHair", setPedHair)
|
||||
exports("setPedEyeColor", setPedEyeColor)
|
||||
exports("setPedComponent", setPedComponent)
|
||||
exports("setPedComponents", setPedComponents)
|
||||
exports("setPedProp", setPedProp)
|
||||
exports("setPedProps", setPedProps)
|
||||
exports("setPlayerAppearance", setPlayerAppearance)
|
||||
exports("setPedAppearance", setPedAppearance)
|
||||
exports("setPedTattoos", setPedTattoos)
|
||||
|
||||
client = {
|
||||
getPedAppearance = getPedAppearance,
|
||||
setPlayerModel = setPlayerModel,
|
||||
setPedHeadBlend = setPedHeadBlend,
|
||||
setPedFaceFeatures = setPedFaceFeatures,
|
||||
setPedHair = setPedHair,
|
||||
setPedHeadOverlays = setPedHeadOverlays,
|
||||
setPedEyeColor = setPedEyeColor,
|
||||
setPedComponent = setPedComponent,
|
||||
setPedProp = setPedProp,
|
||||
setPlayerAppearance = setPlayerAppearance,
|
||||
setPedAppearance = setPedAppearance,
|
||||
getPedDecorationType = getPedDecorationType,
|
||||
isPedFreemodeModel = isPedFreemodeModel,
|
||||
setPreviewTattoo = setPreviewTattoo,
|
||||
setPedTattoos = setPedTattoos,
|
||||
getPedTattoos = getPedTattoos,
|
||||
addPedTattoo = addPedTattoo,
|
||||
removePedTattoo = removePedTattoo,
|
||||
getPedModel = getPedModel,
|
||||
setPedComponents = setPedComponents,
|
||||
setPedProps = setPedProps,
|
||||
getPedComponents = getPedComponents,
|
||||
getPedProps = getPedProps
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/ar.lua
Normal file
367
resources/[core]/illenium-appearance/locales/ar.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["ar"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "حفظ",
|
||||
description = ""
|
||||
},
|
||||
exit = {
|
||||
title = "خروج",
|
||||
description = "لن يتم حفظ شيء"
|
||||
},
|
||||
accept = "نعم",
|
||||
decline = "لا"
|
||||
},
|
||||
ped = {
|
||||
title = "الشكل",
|
||||
model = "النوع"
|
||||
},
|
||||
headBlend = {
|
||||
title = "شكلك",
|
||||
shape = {
|
||||
title = "الوجه",
|
||||
firstOption = "الاب",
|
||||
secondOption = "الام",
|
||||
mix = "خلط"
|
||||
},
|
||||
skin = {
|
||||
title = "سكين",
|
||||
firstOption = "الاب",
|
||||
secondOption = "الام",
|
||||
mix = "خلط"
|
||||
},
|
||||
race = {
|
||||
title = "رايس",
|
||||
shape = "الشكل",
|
||||
skin = "سكين",
|
||||
mix = "خلط"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "ملامح الوجه",
|
||||
nose = {
|
||||
title = "الأنف",
|
||||
width = "عرض",
|
||||
height = "طول",
|
||||
size = "حجم",
|
||||
boneHeight = "ارتفاع العظام",
|
||||
boneTwist = "تطور العظام",
|
||||
peakHeight = "ذروة الارتفاع"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "الحواجب",
|
||||
height = "ارتفاع",
|
||||
depth = "عمق"
|
||||
},
|
||||
cheeks = {
|
||||
title = "الفحوصات",
|
||||
boneHeight = "ارتفاع العظام",
|
||||
boneWidth = "عرض العظام",
|
||||
width = "عرض"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "العيون والفم",
|
||||
eyesOpening = "فتح العيون",
|
||||
lipsThickness = "سمك الشفاه"
|
||||
},
|
||||
jaw = {
|
||||
title = "فك",
|
||||
width = "عرض",
|
||||
size = "بحجم"
|
||||
},
|
||||
chin = {
|
||||
title = "ذقن",
|
||||
lowering = "عرض",
|
||||
length = "طول",
|
||||
size = "حجم",
|
||||
hole = "الحفرة"
|
||||
},
|
||||
neck = {
|
||||
title = "رقبه",
|
||||
thickness = "سماكة"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "المظهر",
|
||||
hair = {
|
||||
title = "شعر",
|
||||
style = "النوع",
|
||||
color = "اللون",
|
||||
highlight = "التسليط",
|
||||
texture = "نَسِيج",
|
||||
fade = "نزول"
|
||||
},
|
||||
opacity = "الغضب",
|
||||
style = "النوع",
|
||||
color = "اللون",
|
||||
secondColor = "اللون الثانوي",
|
||||
blemishes = "العيوب",
|
||||
beard = "اللحية",
|
||||
eyebrows = "الحواجب",
|
||||
ageing = "شيخوخة",
|
||||
makeUp = "ميك أب",
|
||||
blush = "احمر خدود",
|
||||
complexion = "بشرة",
|
||||
sunDamage = "اشعه الشمس",
|
||||
lipstick = "أحمر الشفاه",
|
||||
moleAndFreckles = "النمش",
|
||||
chestHair = "شعر الصدر",
|
||||
bodyBlemishes = "عيوب الجسم",
|
||||
eyeColor = "لون العيون"
|
||||
},
|
||||
components = {
|
||||
title = "ملابس",
|
||||
drawable = "الظهور",
|
||||
texture = "الشكل",
|
||||
mask = "قناع",
|
||||
upperBody = "اليدين",
|
||||
lowerBody = "أرجل",
|
||||
bags = "الحقائب والمظلة",
|
||||
shoes = "أحذية",
|
||||
scarfAndChains = "وشاح والسلاسل",
|
||||
shirt = "قميص",
|
||||
bodyArmor = "الدروع الواقية",
|
||||
decals = "شارات",
|
||||
jackets = "السترات",
|
||||
head = "رأس"
|
||||
},
|
||||
props = {
|
||||
title = "الاضافات",
|
||||
drawable = "الظهور",
|
||||
texture = "الشكل",
|
||||
hats = "القبعات والخوذات",
|
||||
glasses = "نظارات",
|
||||
ear = "أذن",
|
||||
watches = "ساعات",
|
||||
bracelets = "الأساور"
|
||||
},
|
||||
tattoos = {
|
||||
title = "الوشم",
|
||||
items = {
|
||||
ZONE_TORSO = "الشكل",
|
||||
ZONE_HEAD = "رأس",
|
||||
ZONE_LEFT_ARM = "اليد الايسر",
|
||||
ZONE_RIGHT_ARM = "اليد الايسر",
|
||||
ZONE_LEFT_LEG = "الساق اليسرى",
|
||||
ZONE_RIGHT_LEG = "الساق اليمنى"
|
||||
},
|
||||
apply = "تأكيد",
|
||||
delete = "حدف",
|
||||
deleteAll = "حدف كل الوشم",
|
||||
opacity = "الغضب"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "إدارة المظاهر",
|
||||
jobText = "إدارة المظاهر للوظيفة",
|
||||
gangText = "إدارة المظاهر للعصابة"
|
||||
},
|
||||
cancelled = {
|
||||
title = "إلغاء التخصيص",
|
||||
description = "لم يتم حفظ التخصيص"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "أدخل رمز المظهر",
|
||||
menuTitle = "استيراد المظهر",
|
||||
description = "استيراد مظهر من رمز المشاركة",
|
||||
name = {
|
||||
label = "تسمية المظهر",
|
||||
placeholder = "مظهر جميل",
|
||||
default = "المظهر المستورد"
|
||||
},
|
||||
code = {
|
||||
label = "رمز المظهر"
|
||||
},
|
||||
success = {
|
||||
title = "تم استيراد المظهر",
|
||||
description = "يمكنك الآن تغيير المظهر باستخدام قائمة المظاهر"
|
||||
},
|
||||
failure = {
|
||||
title = "فشل الاستيراد",
|
||||
description = "رمز المظهر غير صحيح"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "إنشاء رمز المظهر",
|
||||
description = "إنشاء رمز مظهر للمشاركة",
|
||||
failure = {
|
||||
title = "حدث خطأ ما",
|
||||
description = "فشل إنشاء الرمز للمظهر"
|
||||
},
|
||||
success = {
|
||||
title = "تم إنشاء رمز المظهر",
|
||||
description = "هذا رمز مظهرك"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "حفظ المظهر الحالي",
|
||||
menuDescription = "حفظ مظهرك الحالي كمظهر %s",
|
||||
description = "حفظ مظهرك الحالي",
|
||||
title = "تسمية مظهرك",
|
||||
managementTitle = "تفاصيل إدارة المظهر",
|
||||
name = {
|
||||
label = "اسم المظهر",
|
||||
placeholder = "مظهر رائع جداً"
|
||||
},
|
||||
gender = {
|
||||
label = "الجنس",
|
||||
male = "ذكر",
|
||||
female = "أنثى"
|
||||
},
|
||||
rank = {
|
||||
label = "الرتبة الأدنى"
|
||||
},
|
||||
failure = {
|
||||
title = "فشل الحفظ",
|
||||
description = "يوجد مظهر بنفس الاسم بالفعل"
|
||||
},
|
||||
success = {
|
||||
title = "نجاح",
|
||||
description = "تم حفظ المظهر %s"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "تحديث المظهر",
|
||||
description = "حفظ ملابسك الحالية إلى مظهر موجود",
|
||||
failure = {
|
||||
title = "فشل التحديث",
|
||||
description = "هذا المظهر غير موجود"
|
||||
},
|
||||
success = {
|
||||
title = "نجاح",
|
||||
description = "تم تحديث المظهر %s"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "تغيير المظهر",
|
||||
description = "اختر من أي من مظاهرك المحفوظة حالياً %s",
|
||||
pDescription = "اختر من أي من مظاهرك المحفوظة حالياً",
|
||||
failure = {
|
||||
title = "حدث خطأ ما",
|
||||
description = "المظهر الذي تحاول تغييره ليس لديه مظهر أساسي",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "حذف المظهر",
|
||||
description = "حذف مظهر %s محفوظ",
|
||||
mDescription = "حذف أي من مظاهرك المحفوظة",
|
||||
item = {
|
||||
title = 'حذف "%s"',
|
||||
description = "نموذج: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "نجاح",
|
||||
description = "تم حذف المظهر"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | إدارة مظاهر %s"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "مظاهر العمل",
|
||||
description = "اختر من أي من مظاهر العمل الخاصة بك"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "عودة",
|
||||
title = "غرفة الملابس",
|
||||
outfitsTitle = "مظاهر اللاعب",
|
||||
clothingShopTitle = "متجر الملابس",
|
||||
barberShopTitle = "حلاق",
|
||||
tattooShopTitle = "محل العلامات الجسمية",
|
||||
surgeonShopTitle = "جراحة البلاستيك"
|
||||
},
|
||||
clothing = {
|
||||
title = "شراء الملابس - $%d",
|
||||
titleNoPrice = "تغيير الملابس",
|
||||
options = {
|
||||
title = "👔 | خيارات متجر الملابس",
|
||||
description = "اختر من مجموعة واسعة من البنود للارتداء"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | خيارات المظاهر",
|
||||
civilian = {
|
||||
title = "مظهر مدني",
|
||||
description = "ارتد ثيابك"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "يجعل شخصيتك تحميل مجدداً",
|
||||
failure = {
|
||||
title = "خطأ",
|
||||
description = "لا يمكنك استخدام reloadskin الآن"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "يزيل جميع العناصر المرفقة بالكيان",
|
||||
failure = {
|
||||
title = "خطأ",
|
||||
description = "لا يمكنك استخدام clearstuckprops الآن"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "فتح / إعطاء قائمة الملابس",
|
||||
failure = {
|
||||
title = "خطأ",
|
||||
description = "لا يوجد اللاعب على الإنترنت"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "يفتح قائمة أزياء العمل"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "يفتح قائمة أزياء العصابات"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "يفتح قائمة ملابس المدير"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "متجر الملابس - السعر: $%d",
|
||||
barber = "حلاق - السعر: $%d",
|
||||
tattoo = "محل العلامات الجسمية - السعر: $%d",
|
||||
surgeon = "جراحة البلاستيك - السعر: $%d",
|
||||
clothingRoom = "غرفة الملابس",
|
||||
playerOutfitRoom = "المظاهر"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "نجاح",
|
||||
description = "انتهت الهجرة. %s جلد تم تهجيرها",
|
||||
descriptionSingle = "تم تهجير الجلد"
|
||||
},
|
||||
skip = {
|
||||
title = "معلومات",
|
||||
description = "تخطي الجلد"
|
||||
},
|
||||
typeError = {
|
||||
title = "خطأ",
|
||||
description = "نوع غير صحيح"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "نجاح",
|
||||
description = "اشتريت علامة جسم بقيمة %s$ ل %s"
|
||||
},
|
||||
failure = {
|
||||
title = "فشل في تطبيق العلامة الجسمية",
|
||||
description = "ليس لديك ما يكفي من المال!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "نجاح",
|
||||
description = "أعطيت $%s ل %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "استغلال!",
|
||||
description = "لم يكن لديك ما يكفي من المال! حاولت أن تستغل النظام!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/bg.lua
Normal file
367
resources/[core]/illenium-appearance/locales/bg.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["bg"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Запазване на кустомизация",
|
||||
description = "Ще бъдете запомнен грозен"
|
||||
},
|
||||
exit = {
|
||||
title = "Изход от кустомизация",
|
||||
description = "Няма да бъдат запазени промените"
|
||||
},
|
||||
accept = "Да",
|
||||
decline = "Не"
|
||||
},
|
||||
ped = {
|
||||
title = "Пед",
|
||||
model = "Модел"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Генове",
|
||||
shape = {
|
||||
title = "Лице",
|
||||
firstOption = "Баща",
|
||||
secondOption = "Майка",
|
||||
mix = "Микс"
|
||||
},
|
||||
skin = {
|
||||
title = "Кожа",
|
||||
firstOption = "Баща",
|
||||
secondOption = "Майка",
|
||||
mix = "Микс"
|
||||
},
|
||||
race = {
|
||||
title = "Раса",
|
||||
shape = "Вид",
|
||||
skin = "Кожа",
|
||||
mix = "Микс"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Характеристики на лицето",
|
||||
nose = {
|
||||
title = "Нос",
|
||||
width = "Ширина",
|
||||
height = "Височина",
|
||||
size = "Размер",
|
||||
boneHeight = "Кост височина",
|
||||
boneTwist = "Кост усукване",
|
||||
peakHeight = "Връх височина"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Вежди",
|
||||
height = "Височина",
|
||||
depth = "Дълбочина"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Бузи",
|
||||
boneHeight = "Кост височина",
|
||||
boneWidth = "Кост ширина",
|
||||
width = "Ширина"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Очи и уста",
|
||||
eyesOpening = "Очи отваряне",
|
||||
lipsThickness = "Устни дебелина"
|
||||
},
|
||||
jaw = {
|
||||
title = "Челюст",
|
||||
width = "Ширина",
|
||||
size = "Размер"
|
||||
},
|
||||
chin = {
|
||||
title = "Брадичка",
|
||||
lowering = "Понижаване",
|
||||
length = "Дължина",
|
||||
size = "Размер",
|
||||
hole = "Дупка размер"
|
||||
},
|
||||
neck = {
|
||||
title = "Врат",
|
||||
thickness = "Дебелина"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Външен вид",
|
||||
hair = {
|
||||
title = "Коса",
|
||||
style = "Стил",
|
||||
color = "Цвят",
|
||||
highlight = "Силно осветена точка",
|
||||
texture = "Текстура",
|
||||
fade = "Избледняване"
|
||||
},
|
||||
opacity = "Непрозрачност",
|
||||
style = "Стил",
|
||||
color = "Цвят",
|
||||
secondColor = "Втори цвят",
|
||||
blemishes = "Петна",
|
||||
beard = "Брада",
|
||||
eyebrows = "Вежди",
|
||||
ageing = "Състаряване",
|
||||
makeUp = "Грим",
|
||||
blush = "Изчервяване",
|
||||
complexion = "Тен",
|
||||
sunDamage = "Увреждане от слънцето",
|
||||
lipstick = "Червило",
|
||||
moleAndFreckles = "Бенки и лунички",
|
||||
chestHair = "Косми по гърдите",
|
||||
bodyBlemishes = "Петна по тялото",
|
||||
eyeColor = "Цвят на очите"
|
||||
},
|
||||
components = {
|
||||
title = "Дрехи",
|
||||
drawable = "Вид",
|
||||
texture = "Текстура",
|
||||
mask = "Маска",
|
||||
upperBody = "Ръце",
|
||||
lowerBody = "Крака",
|
||||
bags = "Чанти и парашут",
|
||||
shoes = "Обувки",
|
||||
scarfAndChains = "Шал и вериги",
|
||||
shirt = "Тениска",
|
||||
bodyArmor = "Бронежилетка",
|
||||
decals = "Ваденки",
|
||||
jackets = "Якета",
|
||||
head = "Глава"
|
||||
},
|
||||
props = {
|
||||
title = "Обекти",
|
||||
drawable = "Вид",
|
||||
texture = "Текстура",
|
||||
hats = "Шапки и каски",
|
||||
glasses = "Очила",
|
||||
ear = "Обеци",
|
||||
watches = "Часовници",
|
||||
bracelets = "Гривни"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Татуировки",
|
||||
items = {
|
||||
ZONE_TORSO = "Тяло",
|
||||
ZONE_HEAD = "Глава",
|
||||
ZONE_LEFT_ARM = "Лява ръка",
|
||||
ZONE_RIGHT_ARM = "Дясна ръка",
|
||||
ZONE_LEFT_LEG = "Ляв крак",
|
||||
ZONE_RIGHT_LEG = "Десен крак"
|
||||
},
|
||||
apply = "Прилагане",
|
||||
delete = "Премахване",
|
||||
deleteAll = "Премахване на всички татуировки",
|
||||
opacity = "Непрозрачност"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Управление на дрехите",
|
||||
jobText = "Управление на дрехите за работа",
|
||||
gangText = "Управление на дрехите за банда"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Отменена персонализация",
|
||||
description = "Персонализацията не е запазена"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Въведете код за дрехата",
|
||||
menuTitle = "Импортиране на дрехата",
|
||||
description = "Импортиране на дреха от код за споделяне",
|
||||
name = {
|
||||
label = "Име на дрехата",
|
||||
placeholder = "Хубава дреха",
|
||||
default = "Импортирана дреха"
|
||||
},
|
||||
code = {
|
||||
label = "Код за дрехата"
|
||||
},
|
||||
success = {
|
||||
title = "Дрехата е импортирана",
|
||||
description = "Можете сега да се смените към дрехата, използвайки менюто за дрехите"
|
||||
},
|
||||
failure = {
|
||||
title = "Грешка при импортирането",
|
||||
description = "Невалиден код за дрехата"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Генериране на код за дрехата",
|
||||
description = "Генериране на код за дреха за споделяне",
|
||||
failure = {
|
||||
title = "Нещо се обърка",
|
||||
description = "Генерирането на код не бе успешно за дрехата"
|
||||
},
|
||||
success = {
|
||||
title = "Кодът за дрехата е генериран",
|
||||
description = "Ето вашия код за дрехата"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Запазете текущата дреха",
|
||||
menuDescription = "Запазете текущата ви дреха като %s дреха",
|
||||
description = "Запазете текущата ви дреха",
|
||||
title = "Именувайте вашата дреха",
|
||||
managementTitle = "Управление на детайлите за дрехата",
|
||||
name = {
|
||||
label = "Име на дрехата",
|
||||
placeholder = "Много хубава дреха"
|
||||
},
|
||||
gender = {
|
||||
label = "Пол",
|
||||
male = "Мъж",
|
||||
female = "Жена"
|
||||
},
|
||||
rank = {
|
||||
label = "Минимален ранг"
|
||||
},
|
||||
failure = {
|
||||
title = "Запазването е неуспешно",
|
||||
description = "Дреха с това име вече съществува"
|
||||
},
|
||||
success = {
|
||||
title = "Успешно",
|
||||
description = "Дреха %s е запазена"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Обновяване на дреха",
|
||||
description = "Запазете текущото ви дрехоподобрение в съществуваща дреха",
|
||||
failure = {
|
||||
title = "Обновяването е неуспешно",
|
||||
description = "Тази дреха не съществува"
|
||||
},
|
||||
success = {
|
||||
title = "Успешно",
|
||||
description = "Дреха %s е обновена"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Смени дрехата",
|
||||
description = "Изберете от вашите запазени %s дрехи",
|
||||
pDescription = "Изберете от вашите запазени дрехи",
|
||||
failure = {
|
||||
title = "Нещо се обърка",
|
||||
description = "Дрехата, която се опитвате да смените, няма базов вид",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Изтрий дрехата",
|
||||
description = "Изтрийте запазен %s дреха",
|
||||
mDescription = "Изтрийте всяка от вашите запазени дрехи",
|
||||
item = {
|
||||
title = 'Изтрий "%s"',
|
||||
description = "Модел: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Успех",
|
||||
description = "Дрехата е изтрита"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Управлявай %s дрехи"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Работни Облекла",
|
||||
description = "Изберете от всяко едно от вашите работни облекла"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Върни се",
|
||||
title = "Облеклена Стая",
|
||||
outfitsTitle = "Играчеви Облекла",
|
||||
clothingShopTitle = "Магазин за Облекла",
|
||||
barberShopTitle = "Магазин за Фризьорство",
|
||||
tattooShopTitle = "Магазин за Татуси",
|
||||
surgeonShopTitle = "Магазин за Хирургия"
|
||||
},
|
||||
clothing = {
|
||||
title = "Купуване на Облекла - $%d",
|
||||
titleNoPrice = "Смяна на Облекло",
|
||||
options = {
|
||||
title = "👔 | Опции на Магазина за Облекла",
|
||||
description = "Изберете от голямо разнообразие на предмети за обличане"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Опции на Костюмите",
|
||||
civilian = {
|
||||
title = "Граждански Костюм",
|
||||
description = "Облечете се с вашите дрехи"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Презареждане на вашият персонаж",
|
||||
failure = {
|
||||
title = "Грешка",
|
||||
description = "В момента не може да използвате reloadskin"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Премахване на всички обекти, прикрепени към единицата",
|
||||
failure = {
|
||||
title = "Грешка",
|
||||
description = "В момента не може да използвате clearstuckprops"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Отваряне / Даване на Меню за Облекла",
|
||||
failure = {
|
||||
title = "Грешка",
|
||||
description = "Играчът не е на линия"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Отваря менюто за екипировка за работа"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Отваря менюто Gang Outfits"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Отваря менюто за управление на дрехи на шефа"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Магазин за Облекла - Цена: $%d",
|
||||
barber = "Фризьор - Цена: $%d",
|
||||
tattoo = "Магазин за Татуси - Цена: $%d",
|
||||
surgeon = "Хирург - Цена: $%d",
|
||||
clothingRoom = "Облеклена Стая",
|
||||
playerOutfitRoom = "Костюми на Играча"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Успех",
|
||||
description = "Миграцията завърши. Мигрирани са %s скина/скинове",
|
||||
descriptionSingle = "Мигриран Скин"
|
||||
},
|
||||
skip = {
|
||||
title = "Информация",
|
||||
description = "Пропуснат скин"
|
||||
},
|
||||
typeError = {
|
||||
title = "Грешка",
|
||||
description = "Невалиден тип"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Успех",
|
||||
description = "Купен е татус %s за %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Неуспешно нанасяне на татус",
|
||||
description = "Нямате достатъчно пари!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Успех",
|
||||
description = "Дадохте $%s на %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Експлоатация!",
|
||||
description = "Нямате достатъчно пари! Опит за експлоатиране на системата!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/cs.lua
Normal file
367
resources/[core]/illenium-appearance/locales/cs.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["cs"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Uložit přizpůsobení",
|
||||
description = "Zůstanete ošklivý/á"
|
||||
},
|
||||
exit = {
|
||||
title = "Ukončit přizpůsobení",
|
||||
description = "Změny nebudou uloženy"
|
||||
},
|
||||
accept = "Ano",
|
||||
decline = "Ne"
|
||||
},
|
||||
ped = {
|
||||
title = "Postava",
|
||||
model = "Model"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Dědičnost",
|
||||
shape = {
|
||||
title = "Obličej",
|
||||
firstOption = "Otec",
|
||||
secondOption = "Matka",
|
||||
mix = "Smíchání"
|
||||
},
|
||||
skin = {
|
||||
title = "Kůže",
|
||||
firstOption = "Otec",
|
||||
secondOption = "Matka",
|
||||
mix = "Smíchání"
|
||||
},
|
||||
race = {
|
||||
title = "Rasa",
|
||||
shape = "Obličej",
|
||||
skin = "Kůže",
|
||||
mix = "Smíchání"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Rysy obličeje",
|
||||
nose = {
|
||||
title = "Nos",
|
||||
width = "Šířka",
|
||||
height = "Výška",
|
||||
size = "Velikost",
|
||||
boneHeight = "Výška kosti",
|
||||
boneTwist = "Otočení kosti",
|
||||
peakHeight = "Výška hřbetu"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Obočí",
|
||||
height = "Výška",
|
||||
depth = "Hloubka"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Tváře",
|
||||
boneHeight = "Výška kosti",
|
||||
boneWidth = "Šířka kosti",
|
||||
width = "Šířka"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Oči a ústa",
|
||||
eyesOpening = "Otevření očí",
|
||||
lipsThickness = "Tloušťka rtů"
|
||||
},
|
||||
jaw = {
|
||||
title = "Brada",
|
||||
width = "Šířka",
|
||||
size = "Velikost"
|
||||
},
|
||||
chin = {
|
||||
title = "Brada",
|
||||
lowering = "Snižování",
|
||||
length = "Délka",
|
||||
size = "Velikost",
|
||||
hole = "Velikost díry"
|
||||
},
|
||||
neck = {
|
||||
title = "Krk",
|
||||
thickness = "Tloušťka"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Vzhled",
|
||||
hair = {
|
||||
title = "Vlasy",
|
||||
style = "Styl",
|
||||
color = "Barva",
|
||||
highlight = "Zvýraznění",
|
||||
texture = "Textura",
|
||||
fade = "Blednutí"
|
||||
},
|
||||
opacity = "Průhlednost",
|
||||
style = "Styl",
|
||||
color = "Barva",
|
||||
secondColor = "Druhá barva",
|
||||
blemishes = "Vady",
|
||||
beard = "Vousy",
|
||||
eyebrows = "Obočí",
|
||||
ageing = "Stárnutí",
|
||||
makeUp = "Líčení",
|
||||
blush = "Rouge",
|
||||
complexion = "Kožní vada",
|
||||
sunDamage = "Poškození sluncem",
|
||||
lipstick = "Rtěnka",
|
||||
moleAndFreckles = "Mateřské znaménko a pihy",
|
||||
chestHair = "Hrstka na hrudi",
|
||||
bodyBlemishes = "Vady těla",
|
||||
eyeColor = "Barva očí"
|
||||
},
|
||||
components = {
|
||||
title = "Oblečení",
|
||||
drawable = "Vykreslování",
|
||||
texture = "Textura",
|
||||
mask = "Maska",
|
||||
upperBody = "Horní část těla",
|
||||
lowerBody = "Spodní část těla",
|
||||
bags = "Tašky a padáky",
|
||||
shoes = "Boty",
|
||||
scarfAndChains = "Šála a řetízky",
|
||||
shirt = "Košile",
|
||||
bodyArmor = "Tělesná zbroj",
|
||||
decals = "Nálepky",
|
||||
jackets = "Bundy",
|
||||
head = "Hlava"
|
||||
},
|
||||
props = {
|
||||
title = "Rekvizity",
|
||||
drawable = "Vykreslování",
|
||||
texture = "Textura",
|
||||
hats = "Klobouky a přilby",
|
||||
glasses = "Brýle",
|
||||
ear = "Ucho",
|
||||
watches = "Hodinky",
|
||||
bracelets = "Náramky"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tetování",
|
||||
items = {
|
||||
ZONE_TORSO = "Tělo",
|
||||
ZONE_HEAD = "Hlava",
|
||||
ZONE_LEFT_ARM = "Levá paže",
|
||||
ZONE_RIGHT_ARM = "Pravá paže",
|
||||
ZONE_LEFT_LEG = "Levá noha",
|
||||
ZONE_RIGHT_LEG = "Pravá noha"
|
||||
},
|
||||
apply = "Aplikovat",
|
||||
delete = "Odstranit",
|
||||
deleteAll = "Odstranit všechna tetování",
|
||||
opacity = "Průhlednost"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Správa oděvů",
|
||||
jobText = "Spravujte oděvy pro práci",
|
||||
gangText = "Spravujte oděvy pro gang"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Zrušené přizpůsobení",
|
||||
description = "Přizpůsobení neuloženo"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Zadat kód oděvu",
|
||||
menuTitle = "Importovat oděv",
|
||||
description = "Importovat oděv pomocí sdíleného kódu",
|
||||
name = {
|
||||
label = "Pojmenujte oděv",
|
||||
placeholder = "Pěkný oděv",
|
||||
default = "Importovaný oděv"
|
||||
},
|
||||
code = {
|
||||
label = "Kód oděvu"
|
||||
},
|
||||
success = {
|
||||
title = "Oděv importován",
|
||||
description = "Nyní můžete změnit oděv pomocí menu oděvů"
|
||||
},
|
||||
failure = {
|
||||
title = "Chyba importu",
|
||||
description = "Neplatný kód oděvu"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Generovat kód oděvu",
|
||||
description = "Generovat kód oděvu pro sdílení",
|
||||
failure = {
|
||||
title = "Něco se pokazilo",
|
||||
description = "Generace kódu oděvu selhala"
|
||||
},
|
||||
success = {
|
||||
title = "Kód oděvu vygenerován",
|
||||
description = "Zde je váš kód oděvu"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Uložit aktuální oděv",
|
||||
menuDescription = "Uložit aktuální oděv jako %s oděv",
|
||||
description = "Uložit aktuální oděv",
|
||||
title = "Pojmenujte svůj oděv",
|
||||
managementTitle = "Podrobnosti o uloženém oděvu",
|
||||
name = {
|
||||
label = "Název oděvu",
|
||||
placeholder = "Velmi pěkný oděv"
|
||||
},
|
||||
gender = {
|
||||
label = "Pohlaví",
|
||||
male = "Muž",
|
||||
female = "Žena"
|
||||
},
|
||||
rank = {
|
||||
label = "Minimální hodnost"
|
||||
},
|
||||
failure = {
|
||||
title = "Uložení selhalo",
|
||||
description = "Oděv s tímto názvem již existuje"
|
||||
},
|
||||
success = {
|
||||
title = "Úspěch",
|
||||
description = "Oděv %s byl uložen"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Aktualizovat oděv",
|
||||
description = "Uložit aktuální oblečení do existujícího oděvu",
|
||||
failure = {
|
||||
title = "Aktualizace selhala",
|
||||
description = "Tento oděv neexistuje"
|
||||
},
|
||||
success = {
|
||||
title = "Úspěch",
|
||||
description = "Oděv %s byl aktualizován"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Změnit oděv",
|
||||
description = "Vyberte si ze svých aktuálně uložených %s oděvů",
|
||||
pDescription = "Vyberte si ze svých aktuálně uložených oděvů",
|
||||
failure = {
|
||||
title = "Něco se pokazilo",
|
||||
description = "Oděv, který se pokoušíte změnit, nemá základní vzhled",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Smazat oděv",
|
||||
description = "Smazat uložený %s oděv",
|
||||
mDescription = "Smazat libovolný uložený oděv",
|
||||
item = {
|
||||
title = 'Smazat "%s"',
|
||||
description = "Model: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Úspěch",
|
||||
description = "Oděv byl smazán"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Spravovat %s oděvů"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Pracovní oděvy",
|
||||
description = "Vyberte si z vašich pracovních oděvů"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Zpět",
|
||||
title = "Místnost s oblečením",
|
||||
outfitsTitle = "Oděvy hráče",
|
||||
clothingShopTitle = "Obchod s oblečením",
|
||||
barberShopTitle = "Holičství",
|
||||
tattooShopTitle = "Tattoo Studio",
|
||||
surgeonShopTitle = "Plastická chirurgie"
|
||||
},
|
||||
clothing = {
|
||||
title = "Nákup oblečení - $%d",
|
||||
titleNoPrice = "Změna oblečení",
|
||||
options = {
|
||||
title = "👔 | Možnosti obchodu s oblečením",
|
||||
description = "Vyberte si z široké škály položek k nošení"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Možnosti oděvů",
|
||||
civilian = {
|
||||
title = "Civilní oděv",
|
||||
description = "Oblečte se"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Obnovení vaší postavy",
|
||||
failure = {
|
||||
title = "Chyba",
|
||||
description = "Nemůžete použít příkaz 'reloadskin' v tuto chvíli"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Odstranění všech připevněných rekvizit k entitě",
|
||||
failure = {
|
||||
title = "Chyba",
|
||||
description = "Nemůžete použít příkaz 'clearstuckprops' v tuto chvíli"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Otevřít / Dát menu oblečení",
|
||||
failure = {
|
||||
title = "Chyba",
|
||||
description = "Hráč není online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Otevřít menu pracovních oděvů"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Otevřít menu oděvů gangu"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Otevřít menu oděvů spravovaných bossem"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Obchod s oblečením - Cena: $%d",
|
||||
barber = "Holičství - Cena: $%d",
|
||||
tattoo = "Tattoo Studio - Cena: $%d",
|
||||
surgeon = "Plastická chirurgie - Cena: $%d",
|
||||
clothingRoom = "Místnost s oblečením",
|
||||
playerOutfitRoom = "Oděvy hráče"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Úspěch",
|
||||
description = "Migrace dokončena. Migrace %s skinů dokončena",
|
||||
descriptionSingle = "Migrace skinu dokončena"
|
||||
},
|
||||
skip = {
|
||||
title = "Informace",
|
||||
description = "Přeskočeno migrace skinu"
|
||||
},
|
||||
typeError = {
|
||||
title = "Chyba",
|
||||
description = "Neplatný typ"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Úspěch",
|
||||
description = "Zakoupeno tetování %s za %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Chyba aplikace tetování",
|
||||
description = "Nemáte dostatek peněz!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Úspěch",
|
||||
description = "Dali jste $%s komu: %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploit!",
|
||||
description = "Neměli jste dost peněz! Pokusili jste se zneužít systém!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/de.lua
Normal file
367
resources/[core]/illenium-appearance/locales/de.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["de"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Anpassungen speichern",
|
||||
description = "Du wirst hässlich bleiben"
|
||||
},
|
||||
exit = {
|
||||
title = "Beenden der Anpassung",
|
||||
description = "Es werden keine Änderungen gespeichert"
|
||||
},
|
||||
accept = "Ja",
|
||||
decline = "Nein"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Model"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Vererbung",
|
||||
shape = {
|
||||
title = "Gesicht",
|
||||
firstOption = "Vater",
|
||||
secondOption = "Mutter",
|
||||
mix = "Ähnlichkeit"
|
||||
},
|
||||
skin = {
|
||||
title = "Hautfarbe",
|
||||
firstOption = "Vater",
|
||||
secondOption = "Mutter",
|
||||
mix = "Ähnlichkeit"
|
||||
},
|
||||
race = {
|
||||
title = "Rasse",
|
||||
shape = "Form",
|
||||
skin = "Hautfarbe",
|
||||
mix = "Ähnlichkeit"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Gesichtsmerkmale",
|
||||
nose = {
|
||||
title = "Nase",
|
||||
width = "Breite",
|
||||
height = "Höhe",
|
||||
size = "Größe",
|
||||
boneHeight = "Knochenhöhe",
|
||||
boneTwist = "Knochendrehung",
|
||||
peakHeight = "Höhe der Spitze"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Augenbrauen",
|
||||
height = "Höhe",
|
||||
depth = "Tiefe"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Wangen",
|
||||
boneHeight = "Knochenhöhe",
|
||||
boneWidth = "Breite des Knochens",
|
||||
width = "Breite"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Augen und Mund",
|
||||
eyesOpening = "Augengröße",
|
||||
lipsThickness = "Dicke der Lippen"
|
||||
},
|
||||
jaw = {
|
||||
title = "Kiefer",
|
||||
width = "Breite",
|
||||
size = "Größe"
|
||||
},
|
||||
chin = {
|
||||
title = "Kinn",
|
||||
lowering = "Kinnhöhe",
|
||||
length = "Kinntiefe",
|
||||
size = "Größe",
|
||||
hole = "Kinneinzug"
|
||||
},
|
||||
neck = {
|
||||
title = "Hals",
|
||||
thickness = "Halsumfang"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Aussehen",
|
||||
hair = {
|
||||
title = "Haare",
|
||||
style = "Stil",
|
||||
color = "Farbe",
|
||||
highlight = "Highlight",
|
||||
texture = "Textur",
|
||||
fade = "Fade"
|
||||
},
|
||||
opacity = "Deckkraft",
|
||||
style = "Stil",
|
||||
color = "Farbe",
|
||||
secondColor = "Sekundärfarbe",
|
||||
blemishes = "Unreinheiten",
|
||||
beard = "Bart",
|
||||
eyebrows = "Augenbrauen",
|
||||
ageing = "Alterung",
|
||||
makeUp = "Schminke",
|
||||
blush = "Erröten",
|
||||
complexion = "Teint",
|
||||
sunDamage = "Sonnenschäden",
|
||||
lipstick = "Lippenstift",
|
||||
moleAndFreckles = "Muttermal und Sommersprossen",
|
||||
chestHair = "Brustbehaarung",
|
||||
bodyBlemishes = "Körperliche Unreinheiten",
|
||||
eyeColor = "Augenfarbe"
|
||||
},
|
||||
components = {
|
||||
title = "Kleidung",
|
||||
drawable = "Nummer",
|
||||
texture = "Textur",
|
||||
mask = "Masken",
|
||||
upperBody = "Arme",
|
||||
lowerBody = "Hosen",
|
||||
bags = "Taschen",
|
||||
shoes = "Schuhe",
|
||||
scarfAndChains = "Ketten",
|
||||
shirt = "Shirts",
|
||||
bodyArmor = "Westen",
|
||||
decals = "Aufkleber",
|
||||
jackets = "Jacken",
|
||||
head = "Kopf"
|
||||
},
|
||||
props = {
|
||||
title = "Accessoires",
|
||||
drawable = "Nummer",
|
||||
texture = "Textur",
|
||||
hats = "Hüte und Helme",
|
||||
glasses = "Brillen",
|
||||
ear = "Ohrringe",
|
||||
watches = "Uhren",
|
||||
bracelets = "Armbänder"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tätowierungen",
|
||||
items = {
|
||||
ZONE_TORSO = "Oberkörper",
|
||||
ZONE_HEAD = "Kopf",
|
||||
ZONE_LEFT_ARM = "Linker Arm",
|
||||
ZONE_RIGHT_ARM = "Rechter Arm",
|
||||
ZONE_LEFT_LEG = "Linkes Bein",
|
||||
ZONE_RIGHT_LEG = "Rechtes Bein"
|
||||
},
|
||||
apply = "Anwenden",
|
||||
delete = "Entfernen",
|
||||
deleteAll = "Alle Tattoos entfernen",
|
||||
opacity = "Deckkraft"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Kostümverwaltung",
|
||||
jobText = "Verwalten Sie Kostüme für den Job",
|
||||
gangText = "Verwalten Sie Kostüme für die Gang"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Benutzerdefinierte Anpassung abgebrochen",
|
||||
description = "Anpassung nicht gespeichert"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Geben Sie den Kostüm-Code ein",
|
||||
menuTitle = "Kostüm importieren",
|
||||
description = "Importieren Sie ein Kostüm aus einem Sharing-Code",
|
||||
name = {
|
||||
label = "Nennen Sie das Kostüm",
|
||||
placeholder = "Ein schönes Kostüm",
|
||||
default = "Importiertes Kostüm"
|
||||
},
|
||||
code = {
|
||||
label = "Kostüm-Code"
|
||||
},
|
||||
success = {
|
||||
title = "Kostüm importiert",
|
||||
description = "Sie können jetzt das Kostüm über das Kostüm-Menü ändern"
|
||||
},
|
||||
failure = {
|
||||
title = "Importfehler",
|
||||
description = "Ungültiger Kostüm-Code"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Generiere Kostüm-Code",
|
||||
description = "Generieren Sie einen Kostüm-Code zum Teilen",
|
||||
failure = {
|
||||
title = "Etwas ist schief gelaufen",
|
||||
description = "Die Code-Generierung für das Kostüm ist fehlgeschlagen"
|
||||
},
|
||||
success = {
|
||||
title = "Kostüm-Code generiert",
|
||||
description = "Hier ist Ihr Kostüm-Code"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Aktuelles Kostüm speichern",
|
||||
menuDescription = "Speichern Sie Ihr aktuelles Kostüm als %s Kostüm",
|
||||
description = "Speichern Sie Ihr aktuelles Kostüm",
|
||||
title = "Benennen Sie Ihr Kostüm",
|
||||
managementTitle = "Management Kostüm Details",
|
||||
name = {
|
||||
label = "Kostümname",
|
||||
placeholder = "Sehr cooles Kostüm"
|
||||
},
|
||||
gender = {
|
||||
label = "Geschlecht",
|
||||
male = "Männlich",
|
||||
female = "Weiblich"
|
||||
},
|
||||
rank = {
|
||||
label = "Mindestrang"
|
||||
},
|
||||
failure = {
|
||||
title = "Speichern fehlgeschlagen",
|
||||
description = "Ein Kostüm mit diesem Namen existiert bereits"
|
||||
},
|
||||
success = {
|
||||
title = "Erfolg",
|
||||
description = "Kostüm %s wurde gespeichert"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Kostüm aktualisieren",
|
||||
description = "Speichern Sie Ihre aktuelle Kleidung in einem vorhandenen Kostüm",
|
||||
failure = {
|
||||
title = "Aktualisierung fehlgeschlagen",
|
||||
description = "Dieses Kostüm existiert nicht"
|
||||
},
|
||||
success = {
|
||||
title = "Erfolg",
|
||||
description = "Kostüm %s wurde aktualisiert"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Kostüm ändern",
|
||||
description = "Wählen Sie eines Ihrer %s gespeicherten Kostüme aus",
|
||||
pDescription = "Wählen Sie eines Ihrer gespeicherten Kostüme aus",
|
||||
failure = {
|
||||
title = "Etwas ist schief gelaufen",
|
||||
description = "Das Kostüm, zu dem Sie wechseln möchten, hat kein Basiselement",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Kostüm löschen",
|
||||
description = "Löschen Sie ein gespeichertes %s Kostüm",
|
||||
mDescription = "Löschen Sie jedes Ihrer gespeicherten Kostüme",
|
||||
item = {
|
||||
title = 'Löschen von "%s"',
|
||||
description = "Modell: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Erfolg",
|
||||
description = "Kostüm gelöscht"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Verwalten von %s Kostümen"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Arbeitskleidung",
|
||||
description = "Wählen Sie eines Ihrer Arbeitsoutfits aus"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Zurück",
|
||||
title = "Kleiderzimmer",
|
||||
outfitsTitle = "Spieler Kostüme",
|
||||
clothingShopTitle = "Kleidungsgeschäft",
|
||||
barberShopTitle = "Friseur",
|
||||
tattooShopTitle = "Tattoo-Shop",
|
||||
surgeonShopTitle = "Schönheitschirurg"
|
||||
},
|
||||
clothing = {
|
||||
title = "Kleidung kaufen - $%d",
|
||||
titleNoPrice = "Kleidung ändern",
|
||||
options = {
|
||||
title = "👔 | Kleidungsgeschäft-Optionen",
|
||||
description = "Wählen Sie aus einer breiten Palette von Kleidungsstücken"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Kostüm Optionen",
|
||||
civilian = {
|
||||
title = "Zivilist Kostüm",
|
||||
description = "Zieh deine Kleider an"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Charakter wird neu geladen",
|
||||
failure = {
|
||||
title = "Fehler",
|
||||
description = "Du kannst reloadskin im Moment nicht verwenden"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Entfernt alle Objekte, die an der Einheit befestigt sind",
|
||||
failure = {
|
||||
title = "Fehler",
|
||||
description = "Du kannst clearstuckprops im Moment nicht verwenden"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Kleidungsmenü öffnen / geben",
|
||||
failure = {
|
||||
title = "Fehler",
|
||||
description = "Spieler ist nicht online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Öffnet das Job-Outfits-Menü"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Öffnet das Gang-Outfits-Menü"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Öffnet das Menü für verwaltete Outfits des Chefs"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Kleidungsgeschäft - Preis: $%d",
|
||||
barber = "Friseur - Preis: $%d",
|
||||
tattoo = "Tattoo-Shop - Preis: $%d",
|
||||
surgeon = "Schönheitschirurg - Preis: $%d",
|
||||
clothingRoom = "Kleiderzimmer",
|
||||
playerOutfitRoom = "Kostüme"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Erfolg",
|
||||
description = "Migration abgeschlossen. %s Skins migriert",
|
||||
descriptionSingle = "Migrierter Skin"
|
||||
},
|
||||
skip = {
|
||||
title = "Information",
|
||||
description = "Skin übersprungen"
|
||||
},
|
||||
typeError = {
|
||||
title = "Fehler",
|
||||
description = "Ungültiger Typ"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Erfolg",
|
||||
description = "%s Tattoo gekauft für %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Tattoo konnte nicht aufgetragen werden",
|
||||
description = "Du hast nicht genug Geld!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Erfolg",
|
||||
description = "$%s an %s gegeben!"
|
||||
},
|
||||
failure = {
|
||||
title = "Ausnutzung!",
|
||||
description = "Du hast nicht genug Geld! Versuchst das System auszunutzen!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/en.lua
Normal file
367
resources/[core]/illenium-appearance/locales/en.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["en"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Save customization",
|
||||
description = "You will remain ugly"
|
||||
},
|
||||
exit = {
|
||||
title = "Exit customization",
|
||||
description = "No changes will be saved"
|
||||
},
|
||||
accept = "Yes",
|
||||
decline = "No"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Model"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Inheritance",
|
||||
shape = {
|
||||
title = "Face",
|
||||
firstOption = "Father",
|
||||
secondOption = "Mother",
|
||||
mix = "Mix"
|
||||
},
|
||||
skin = {
|
||||
title = "Skin",
|
||||
firstOption = "Father",
|
||||
secondOption = "Mother",
|
||||
mix = "Mix"
|
||||
},
|
||||
race = {
|
||||
title = "Race",
|
||||
shape = "Shape",
|
||||
skin = "Skin",
|
||||
mix = "Mix"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Face Features",
|
||||
nose = {
|
||||
title = "Nose",
|
||||
width = "Width",
|
||||
height = "Height",
|
||||
size = "Size",
|
||||
boneHeight = "Bone height",
|
||||
boneTwist = "Bone twist",
|
||||
peakHeight = "Peak height"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Eyebrows",
|
||||
height = "Height",
|
||||
depth = "Depth"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Cheeks",
|
||||
boneHeight = "Bone height",
|
||||
boneWidth = "Bone width",
|
||||
width = "Width"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Eyes and Mouth",
|
||||
eyesOpening = "Eyes opening",
|
||||
lipsThickness = "Lip thickness"
|
||||
},
|
||||
jaw = {
|
||||
title = "Jaw",
|
||||
width = "Width",
|
||||
size = "Size"
|
||||
},
|
||||
chin = {
|
||||
title = "Chin",
|
||||
lowering = "Lowering",
|
||||
length = "Length",
|
||||
size = "Size",
|
||||
hole = "Hole size"
|
||||
},
|
||||
neck = {
|
||||
title = "Neck",
|
||||
thickness = "Thickness"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Appearance",
|
||||
hair = {
|
||||
title = "Hair",
|
||||
style = "Style",
|
||||
color = "Color",
|
||||
highlight = "Highlight",
|
||||
texture = "Texture",
|
||||
fade = "Fade"
|
||||
},
|
||||
opacity = "Opacity",
|
||||
style = "Style",
|
||||
color = "Color",
|
||||
secondColor = "Secondary Color",
|
||||
blemishes = "Blemishes",
|
||||
beard = "Beard",
|
||||
eyebrows = "Eyebrows",
|
||||
ageing = "Ageing",
|
||||
makeUp = "Make up",
|
||||
blush = "Blush",
|
||||
complexion = "Complexion",
|
||||
sunDamage = "Sun damage",
|
||||
lipstick = "Lipstick",
|
||||
moleAndFreckles = "Mole and Freckles",
|
||||
chestHair = "Chest hair",
|
||||
bodyBlemishes = "Body blemishes",
|
||||
eyeColor = "Eye color"
|
||||
},
|
||||
components = {
|
||||
title = "Clothes",
|
||||
drawable = "Drawable",
|
||||
texture = "Texture",
|
||||
mask = "Mask",
|
||||
upperBody = "Hands",
|
||||
lowerBody = "Legs",
|
||||
bags = "Bags and parachute",
|
||||
shoes = "Shoes",
|
||||
scarfAndChains = "Scarf and chains",
|
||||
shirt = "Shirt",
|
||||
bodyArmor = "Body armor",
|
||||
decals = "Decals",
|
||||
jackets = "Jackets",
|
||||
head = "Head"
|
||||
},
|
||||
props = {
|
||||
title = "Props",
|
||||
drawable = "Drawable",
|
||||
texture = "Texture",
|
||||
hats = "Hats and helmets",
|
||||
glasses = "Glasses",
|
||||
ear = "Ear",
|
||||
watches = "Watches",
|
||||
bracelets = "Bracelets"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tattoos",
|
||||
items = {
|
||||
ZONE_TORSO = "Torso",
|
||||
ZONE_HEAD = "Head",
|
||||
ZONE_LEFT_ARM = "Left arm",
|
||||
ZONE_RIGHT_ARM = "Right arm",
|
||||
ZONE_LEFT_LEG = "Left leg",
|
||||
ZONE_RIGHT_LEG = "Right leg"
|
||||
},
|
||||
apply = "Apply",
|
||||
delete = "Remove",
|
||||
deleteAll = "Remove all Tattoos",
|
||||
opacity = "Opacity"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Outfit Management",
|
||||
jobText = "Manage outfits for Job",
|
||||
gangText = "Manage outfits for Gang"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Cancelled Customization",
|
||||
description = "Customization not saved"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Enter outfit code",
|
||||
menuTitle = "Import Outfit",
|
||||
description = "Import an outfit from a sharing code",
|
||||
name = {
|
||||
label = "Name the Outfit",
|
||||
placeholder = "A nice outfit",
|
||||
default = "Imported Outfit"
|
||||
},
|
||||
code = {
|
||||
label = "Outfit Code"
|
||||
},
|
||||
success = {
|
||||
title = "Outfit Imported",
|
||||
description = "You can now change to the outfit using the outfit menu"
|
||||
},
|
||||
failure = {
|
||||
title = "Import Failure",
|
||||
description = "Invalid outfit code"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Generate Outfit Code",
|
||||
description = "Generate an outfit code for sharing",
|
||||
failure = {
|
||||
title = "Something went wrong",
|
||||
description = "Code generation failed for the outfit"
|
||||
},
|
||||
success = {
|
||||
title = "Outfit Code Generated",
|
||||
description = "Here is your outfit code"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Save current Outfit",
|
||||
menuDescription = "Save your current outfit as %s outfit",
|
||||
description = "Save your current outfit",
|
||||
title = "Name your outfit",
|
||||
managementTitle = "Management Outfit Details",
|
||||
name = {
|
||||
label = "Outfit Name",
|
||||
placeholder = "Very cool outfit"
|
||||
},
|
||||
gender = {
|
||||
label = "Gender",
|
||||
male = "Male",
|
||||
female = "Female"
|
||||
},
|
||||
rank = {
|
||||
label = "Minimum Rank"
|
||||
},
|
||||
failure = {
|
||||
title = "Save Failed",
|
||||
description = "Outfit with this name already exists"
|
||||
},
|
||||
success = {
|
||||
title = "Success",
|
||||
description = "Outfit %s has been saved"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Update Outfit",
|
||||
description = "Save your current clothing to an existing outfit",
|
||||
failure = {
|
||||
title = "Update Failed",
|
||||
description = "That outfit does not exist"
|
||||
},
|
||||
success = {
|
||||
title = "Success",
|
||||
description = "Outfit %s has been updated"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Change Outfit",
|
||||
description = "Pick from any of your currently saved %s outfits",
|
||||
pDescription = "Pick from any of your currently saved outfits",
|
||||
failure = {
|
||||
title = "Something went wrong",
|
||||
description = "The outfit that you're trying to change to, does not have a base appearance",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Delete Outfit",
|
||||
description = "Delete a saved %s outfit",
|
||||
mDescription = "Delete any of your saved outfits",
|
||||
item = {
|
||||
title = 'Delete "%s"',
|
||||
description = "Model: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Success",
|
||||
description = "Outfit Deleted"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Manage %s Outfits"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Work Outfits",
|
||||
description = "Pick from any of your work outfits"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Return",
|
||||
title = "Clothing Room",
|
||||
outfitsTitle = "Player Outfits",
|
||||
clothingShopTitle = "Clothing Shop",
|
||||
barberShopTitle = "Barber Shop",
|
||||
tattooShopTitle = "Tattoo Shop",
|
||||
surgeonShopTitle = "Surgeon Shop"
|
||||
},
|
||||
clothing = {
|
||||
title = "Buy Clothing - $%d",
|
||||
titleNoPrice = "Change Clothing",
|
||||
options = {
|
||||
title = "👔 | Clothing Store Options",
|
||||
description = "Pick from a wide range of items to wear"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Outfit Options",
|
||||
civilian = {
|
||||
title = "Civilian Outfit",
|
||||
description = "Put on your clothes"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Reloads your character",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "You cannot use reloadskin right now"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Removes all the props attached to the entity",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "You cannot use clearstuckprops right now"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Open / Give Clothing Menu",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "Player not online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Opens Job Outfits Menu"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Opens Gang Outfits Menu"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Opens Boss Managed Outfits Menu"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Clothing Store - Price: $%d",
|
||||
barber = "Barber - Price: $%d",
|
||||
tattoo = "Tattoo Shop - Price: $%d",
|
||||
surgeon = "Plastic Surgeon - Price: $%d",
|
||||
clothingRoom = "Clothing Room",
|
||||
playerOutfitRoom = "Outfits"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Success",
|
||||
description = "Migration finished. %s skins migrated",
|
||||
descriptionSingle = "Migrated Skin"
|
||||
},
|
||||
skip = {
|
||||
title = "Information",
|
||||
description = "Skipped skin"
|
||||
},
|
||||
typeError = {
|
||||
title = "Error",
|
||||
description = "Invalid type"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Success",
|
||||
description = "Purchased %s tattoo for %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Tattoo apply failed",
|
||||
description = "You don't have enough money!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Success",
|
||||
description = "Gave $%s to %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploit!",
|
||||
description = "You didn't have enough money! Tried to exploit the system!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/es-ES.lua
Normal file
367
resources/[core]/illenium-appearance/locales/es-ES.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["es-ES"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Guardar personalización",
|
||||
description = "Seguirás siendo feo"
|
||||
},
|
||||
exit = {
|
||||
title = "Salir de la personalización",
|
||||
description = "No se guardarán los cambios"
|
||||
},
|
||||
accept = "Si",
|
||||
decline = "No"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Modelo"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Herencia",
|
||||
shape = {
|
||||
title = "Rostro",
|
||||
firstOption = "Padre",
|
||||
secondOption = "Madre",
|
||||
mix = "Mezcla"
|
||||
},
|
||||
skin = {
|
||||
title = "Piel",
|
||||
firstOption = "Padre",
|
||||
secondOption = "Madre",
|
||||
mix = "Mezcla"
|
||||
},
|
||||
race = {
|
||||
title = "Raza",
|
||||
shape = "Rostro",
|
||||
skin = "Piel",
|
||||
mix = "Mezcla"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Características de la cara",
|
||||
nose = {
|
||||
title = "Nariz",
|
||||
width = "Ancho",
|
||||
height = "Altura",
|
||||
size = "Tamaño",
|
||||
boneHeight = "Altura del hueso",
|
||||
boneTwist = "Girar hueso",
|
||||
peakHeight = "Altura máxima"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Cejas",
|
||||
height = "Altura",
|
||||
depth = "Profundidad"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Mejillas",
|
||||
boneHeight = "Altura del hueso",
|
||||
boneWidth = "Ancho del hueso",
|
||||
width = "Ancho"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Ojos y Boca",
|
||||
eyesOpening = "Apertura de ojos",
|
||||
lipsThickness = "Grosor del labio"
|
||||
},
|
||||
jaw = {
|
||||
title = "Mandíbula",
|
||||
width = "Ancho",
|
||||
size = "Tamaño"
|
||||
},
|
||||
chin = {
|
||||
title = "Barbilla",
|
||||
lowering = "Bajar",
|
||||
length = "Largo",
|
||||
size = "Tamaño",
|
||||
hole = "Tamaño del agujero"
|
||||
},
|
||||
neck = {
|
||||
title = "Cuello",
|
||||
thickness = "Grosor"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Apariencia",
|
||||
hair = {
|
||||
title = "Pelo",
|
||||
style = "Estilo",
|
||||
color = "Color",
|
||||
highlight = "Resalte",
|
||||
texture = "Textura",
|
||||
fade = "Degradado"
|
||||
},
|
||||
opacity = "Opacidad",
|
||||
style = "Estilo",
|
||||
color = "Color",
|
||||
secondColor = "Color secundario",
|
||||
blemishes = "Manchas",
|
||||
beard = "Barba",
|
||||
eyebrows = "Cejas",
|
||||
ageing = "Arrugas",
|
||||
makeUp = "Maquillaje",
|
||||
blush = "Rubor",
|
||||
complexion = "Tez",
|
||||
sunDamage = "Daño del sol",
|
||||
lipstick = "Lápiz labial",
|
||||
moleAndFreckles = "Huecos y Pecas",
|
||||
chestHair = "Pelo en el pecho",
|
||||
bodyBlemishes = "Manchas corporales",
|
||||
eyeColor = "Color de ojos"
|
||||
},
|
||||
components = {
|
||||
title = "Ropa",
|
||||
drawable = "Prenda",
|
||||
texture = "Textura",
|
||||
mask = "Máscaras",
|
||||
upperBody = "Brazos",
|
||||
lowerBody = "Piernas",
|
||||
bags = "Bolsas y Paracaídas",
|
||||
shoes = "Zapatos",
|
||||
scarfAndChains = "Bufandas y Cadenas",
|
||||
shirt = "Camisetas",
|
||||
bodyArmor = "Chalecos",
|
||||
decals = "Calcomanías",
|
||||
jackets = "Chaquetas",
|
||||
head = "Cabeza"
|
||||
},
|
||||
props = {
|
||||
title = "Accesorios",
|
||||
drawable = "Prenda",
|
||||
texture = "Textura",
|
||||
hats = "Gorras y Cascos",
|
||||
glasses = "Gafas",
|
||||
ear = "Aretes",
|
||||
watches = "Relojes",
|
||||
bracelets = "Brazaletes"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tatuajes",
|
||||
items = {
|
||||
ZONE_TORSO = "Torso",
|
||||
ZONE_HEAD = "Cabeza",
|
||||
ZONE_LEFT_ARM = "Brazo izquierdo",
|
||||
ZONE_RIGHT_ARM = "Brazo derecho",
|
||||
ZONE_LEFT_LEG = "Pierna izquierda",
|
||||
ZONE_RIGHT_LEG = "Pierna derecha"
|
||||
},
|
||||
apply = "Aplicar",
|
||||
delete = "Borrar",
|
||||
deleteAll = "Borrar todo",
|
||||
opacity = "Opacidad"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Gestión de atuendos",
|
||||
jobText = "Administrar atuendos para trabajo",
|
||||
gangText = "Administrar atuendos de pandilla"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Personalización cancelada",
|
||||
description = "Personalización no guardada"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Ingresar código de atuendo",
|
||||
menuTitle = "Importar atuendo",
|
||||
description = "Importar un atuendo a partir de un código de intercambio",
|
||||
name = {
|
||||
label = "Nombrar el atuendo",
|
||||
placeholder = "Un atuendo agradable",
|
||||
default = "Atuendo importado"
|
||||
},
|
||||
code = {
|
||||
label = "Código de atuendo"
|
||||
},
|
||||
success = {
|
||||
title = "Atuendo importado",
|
||||
description = "Ahora puedes cambiar al atuendo utilizando el menú de atuendos"
|
||||
},
|
||||
failure = {
|
||||
title = "Fallo en la importación",
|
||||
description = "Código de atuendo no válido"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Generar código de atuendo",
|
||||
description = "Generar un código de atuendo para compartir",
|
||||
failure = {
|
||||
title = "Algo salió mal",
|
||||
description = "La generación de código falló para el atuendo"
|
||||
},
|
||||
success = {
|
||||
title = "Código de atuendo generado",
|
||||
description = "Aquí está tu código de atuendo"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Guardar Vestimenta Actual",
|
||||
menuDescription = "Guarda tu vestimenta actual como %s",
|
||||
description = "Guarda tu vestimenta actual",
|
||||
title = "Nombre de la Vestimenta",
|
||||
managementTitle = "Detalles de la Gestión de Vestimentas",
|
||||
name = {
|
||||
label = "Nombre de la Vestimenta",
|
||||
placeholder = "Vestimenta muy elegante"
|
||||
},
|
||||
gender = {
|
||||
label = "Género",
|
||||
male = "Masculino",
|
||||
female = "Femenino"
|
||||
},
|
||||
rank = {
|
||||
label = "Rango Mínimo"
|
||||
},
|
||||
failure = {
|
||||
title = "Fallo al Guardar",
|
||||
description = "Ya existe una vestimenta con este nombre"
|
||||
},
|
||||
success = {
|
||||
title = "Éxito",
|
||||
description = "La vestimenta %s ha sido guardada"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Actualizar atuendo",
|
||||
description = "Guarda tu ropa actual en un atuendo existente",
|
||||
failure = {
|
||||
title = "Error al actualizar",
|
||||
description = "Ese atuendo no existe"
|
||||
},
|
||||
success = {
|
||||
title = "Éxito",
|
||||
description = "El atuendo %s ha sido actualizado"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Cambiar atuendo",
|
||||
description = "Elige de entre tus atuendos guardados actuales %s",
|
||||
pDescription = "Elige de entre tus atuendos guardados actuales",
|
||||
failure = {
|
||||
title = "Algo salió mal",
|
||||
description = "El atuendo que estás tratando de cambiar no tiene una apariencia base",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Eliminar traje",
|
||||
description = "Eliminar un %s traje guardado",
|
||||
mDescription = "Eliminar cualquiera de tus trajes guardados",
|
||||
item = {
|
||||
title = 'Eliminar "%s"',
|
||||
description = "Modelo: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Éxito",
|
||||
description = "Traje eliminado"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Administrar trajes %s"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Trajes de trabajo",
|
||||
description = "Elige entre cualquiera de tus trajes de trabajo"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Volver",
|
||||
title = "Vestuario",
|
||||
outfitsTitle = "Atuendos del Jugador",
|
||||
clothingShopTitle = "Tienda de Ropa",
|
||||
barberShopTitle = "Barbería",
|
||||
tattooShopTitle = "Tienda de Tatuajes",
|
||||
surgeonShopTitle = "Cirugía Estética"
|
||||
},
|
||||
clothing = {
|
||||
title = "Comprar Ropa - $%d",
|
||||
titleNoPrice = "Cambiar Ropa",
|
||||
options = {
|
||||
title = "👔 | Opciones de la Tienda de Ropa",
|
||||
description = "Elija entre una amplia gama de artículos para vestir"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Opciones de Atuendos",
|
||||
civilian = {
|
||||
title = "Atuendo Civil",
|
||||
description = "Ponte tu ropa"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Recarga a tu personaje",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "No puedes usar reloadskin en este momento"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Elimina todos los objetos atascados en la entidad",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "No puedes usar clearstuckprops en este momento"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Abrir / Dar menú de ropa",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "Jugador no en línea"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Abre el menú de atuendos de trabajo"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Abre el menú de atuendos de pandillas"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Abre el menú de conjuntos gestionados por el jefe"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Tienda de ropa - Precio: $%d",
|
||||
barber = "Barbero - Precio: $%d",
|
||||
tattoo = "Tienda de tatuajes - Precio: $%d",
|
||||
surgeon = "Cirujano plástico - Precio: $%d",
|
||||
clothingRoom = "Vestidor",
|
||||
playerOutfitRoom = "Atuendos"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Éxito",
|
||||
description = "Migración finalizada. Se migraron %s skins",
|
||||
descriptionSingle = "Skin migrado"
|
||||
},
|
||||
skip = {
|
||||
title = "Información",
|
||||
description = "Skin saltado"
|
||||
},
|
||||
typeError = {
|
||||
title = "Error",
|
||||
description = "Tipo inválido"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Éxito",
|
||||
description = "Tatuaje %s comprado por %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Fallo en la aplicación del tatuaje",
|
||||
description = "¡No tienes suficiente dinero!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Éxito",
|
||||
description = "¡Se entregaron $%s a %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "¡Explotación!",
|
||||
description = "¡No tienes suficiente dinero! Intentó explotar el sistema."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/fr.lua
Normal file
367
resources/[core]/illenium-appearance/locales/fr.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["fr"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Enregistrer",
|
||||
description = "tu resteras moche"
|
||||
},
|
||||
exit = {
|
||||
title = "Quitter",
|
||||
description = "Aucun changement ne sera enregistré"
|
||||
},
|
||||
accept = "Oui",
|
||||
decline = "Non"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Modèle"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Héritage",
|
||||
shape = {
|
||||
title = "Visage",
|
||||
firstOption = "Père",
|
||||
secondOption = "Mère",
|
||||
mix = "Mix"
|
||||
},
|
||||
skin = {
|
||||
title = "Peau",
|
||||
firstOption = "Père",
|
||||
secondOption = "Mère",
|
||||
mix = "Mix"
|
||||
},
|
||||
race = {
|
||||
title = "Race",
|
||||
shape = "Visage",
|
||||
skin = "Peau",
|
||||
mix = "Mix"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Caractéristiques du visage",
|
||||
nose = {
|
||||
title = "Nez",
|
||||
width = "Largeur",
|
||||
height = "Hauteur",
|
||||
size = "Taille",
|
||||
boneHeight = "Hauteur",
|
||||
boneTwist = "Torsion",
|
||||
peakHeight = "Hauteur maximale"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Sourcils",
|
||||
height = "Hauteur",
|
||||
depth = "Profondeur"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Joues",
|
||||
boneHeight = "Hauteur",
|
||||
boneWidth = "Largeur 1",
|
||||
width = "Largeur 2"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Yeux et bouche",
|
||||
eyesOpening = "Ouverture des yeux",
|
||||
lipsThickness = "Épaisseur des lèvres"
|
||||
},
|
||||
jaw = {
|
||||
title = "Mâchoire",
|
||||
width = "Largeur",
|
||||
size = "Taille"
|
||||
},
|
||||
chin = {
|
||||
title = "Menton",
|
||||
lowering = "Abaissement",
|
||||
length = "Longueur",
|
||||
size = "Taille",
|
||||
hole = "Taille du Creux"
|
||||
},
|
||||
neck = {
|
||||
title = "Cou",
|
||||
thickness = "Épaisseur"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Apparence",
|
||||
hair = {
|
||||
title = "Cheveux",
|
||||
style = "Style",
|
||||
color = "Couleur",
|
||||
highlight = "Highlight",
|
||||
texture = "Texture",
|
||||
fade = "Fade"
|
||||
},
|
||||
opacity = "Opacité",
|
||||
style = "Style",
|
||||
color = "Couleur",
|
||||
secondColor = "Couleur de base",
|
||||
blemishes = "Imperfections",
|
||||
beard = "Barbe",
|
||||
eyebrows = "Sourcils",
|
||||
ageing = "Vieillissement",
|
||||
makeUp = "Maquillage",
|
||||
blush = "Blush",
|
||||
complexion = "Complexion",
|
||||
sunDamage = "Dégâts du soleil",
|
||||
lipstick = "Lipstick",
|
||||
moleAndFreckles = "Taches de rousseur",
|
||||
chestHair = "Poils du torse",
|
||||
bodyBlemishes = "Imperfections corporelles",
|
||||
eyeColor = "Couleur des yeux"
|
||||
},
|
||||
components = {
|
||||
title = "Vêtements",
|
||||
drawable = "Drawable",
|
||||
texture = "Texture",
|
||||
mask = "Masque",
|
||||
upperBody = "Haut du Corps",
|
||||
lowerBody = "Bas du Corps",
|
||||
bags = "Sacs et parachute",
|
||||
shoes = "Chaussures",
|
||||
scarfAndChains = "Écharpe et chaînes",
|
||||
shirt = "T-Shirt",
|
||||
bodyArmor = "Body armor",
|
||||
decals = "Decals",
|
||||
jackets = "Vestes",
|
||||
head = "Tête"
|
||||
},
|
||||
props = {
|
||||
title = "Props",
|
||||
drawable = "Drawable",
|
||||
texture = "Texture",
|
||||
hats = "Chapeaux et casques",
|
||||
glasses = "Lunettes",
|
||||
ear = "Accessoires d'oreille",
|
||||
watches = "Montres",
|
||||
bracelets = "Bracelets"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tattoos",
|
||||
items = {
|
||||
ZONE_TORSO = "Torso",
|
||||
ZONE_HEAD = "Tête",
|
||||
ZONE_LEFT_ARM = "Bras gauche",
|
||||
ZONE_RIGHT_ARM = "Bras droit",
|
||||
ZONE_LEFT_LEG = "Jambe gauche",
|
||||
ZONE_RIGHT_LEG = "Jambe droite"
|
||||
},
|
||||
apply = "Appliquer",
|
||||
delete = "Supprimer",
|
||||
deleteAll = "Supprimer tous les tatouages",
|
||||
opacity = "Opacité"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Gestion de tenues",
|
||||
jobText = "Gérer les tenues pour le travail",
|
||||
gangText = "Gérer les tenues pour le gang"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Personnalisation annulée",
|
||||
description = "Personnalisation non enregistrée"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Entrer le code de la tenue",
|
||||
menuTitle = "Importer la tenue",
|
||||
description = "Importer une tenue à partir d'un code de partage",
|
||||
name = {
|
||||
label = "Nom de la tenue",
|
||||
placeholder = "Une belle tenue",
|
||||
default = "Tenue importée"
|
||||
},
|
||||
code = {
|
||||
label = "Code de la tenue"
|
||||
},
|
||||
success = {
|
||||
title = "Tenue importée",
|
||||
description = "Vous pouvez maintenant changer de tenue en utilisant le menu des tenues"
|
||||
},
|
||||
failure = {
|
||||
title = "Échec de l'importation",
|
||||
description = "Code de tenue non valide"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Générer un code de tenue",
|
||||
description = "Générer un code de tenue pour le partage",
|
||||
failure = {
|
||||
title = "Quelque chose s'est mal passé",
|
||||
description = "La génération du code a échoué pour la tenue"
|
||||
},
|
||||
success = {
|
||||
title = "Code de tenue généré",
|
||||
description = "Voici votre code de tenue"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Enregistrer la tenue actuelle",
|
||||
menuDescription = "Enregistrer votre tenue actuelle en tant que tenue %s",
|
||||
description = "Enregistrer votre tenue actuelle",
|
||||
title = "Nommez votre tenue",
|
||||
managementTitle = "Détails de gestion des tenues",
|
||||
name = {
|
||||
label = "Nom de la tenue",
|
||||
placeholder = "Tenue très cool"
|
||||
},
|
||||
gender = {
|
||||
label = "Genre",
|
||||
male = "Homme",
|
||||
female = "Femme"
|
||||
},
|
||||
rank = {
|
||||
label = "Rang minimum"
|
||||
},
|
||||
failure = {
|
||||
title = "Échec de l'enregistrement",
|
||||
description = "Une tenue avec ce nom existe déjà"
|
||||
},
|
||||
success = {
|
||||
title = "Succès",
|
||||
description = "Tenue %s enregistrée"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Mettre à jour la tenue",
|
||||
description = "Enregistrer vos vêtements actuels dans une tenue existante",
|
||||
failure = {
|
||||
title = "Échec de la mise à jour",
|
||||
description = "Cette tenue n'existe pas"
|
||||
},
|
||||
success = {
|
||||
title = "Succès",
|
||||
description = "La tenue %s a été mise à jour"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Changer de tenue",
|
||||
description = "Choisissez parmi toutes vos tenues %s enregistrées",
|
||||
pDescription = "Choisissez parmi toutes vos tenues enregistrées",
|
||||
failure = {
|
||||
title = "Quelque chose s'est mal passé",
|
||||
description = "La tenue que vous essayez de changer n'a pas d'apparence de base",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Supprimer la tenue",
|
||||
description = "Supprimer une tenue enregistrée %s",
|
||||
mDescription = "Supprimer n'importe laquelle de vos tenues enregistrées",
|
||||
item = {
|
||||
title = 'Supprimer "%s"',
|
||||
description = "Modèle : %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Succès",
|
||||
description = "Tenue supprimée"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Gérer les tenues %s"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Tenues de travail",
|
||||
description = "Choisissez parmi toutes vos tenues de travail"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Retour",
|
||||
title = "Chambre de vêtements",
|
||||
outfitsTitle = "Tenues du joueur",
|
||||
clothingShopTitle = "Magasin de vêtements",
|
||||
barberShopTitle = "Salon de coiffure",
|
||||
tattooShopTitle = "Salon de tatouage",
|
||||
surgeonShopTitle = "Chirurgien esthétique"
|
||||
},
|
||||
clothing = {
|
||||
title = "Acheter des vêtements - %d $",
|
||||
titleNoPrice = "Changer de vêtements",
|
||||
options = {
|
||||
title = "👔 | Options de magasin de vêtements",
|
||||
description = "Choisissez parmi une large gamme d'articles à porter"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Options de tenue",
|
||||
civilian = {
|
||||
title = "Tenue civile",
|
||||
description = "Mettre vos vêtements"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Recharger votre personnage",
|
||||
failure = {
|
||||
title = "Erreur",
|
||||
description = "Vous ne pouvez pas utiliser reloadskin pour le moment"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Supprimer tous les accessoires attachés à l'entité",
|
||||
failure = {
|
||||
title = "Erreur",
|
||||
description = "Vous ne pouvez pas utiliser clearstuckprops pour le moment"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Ouvrir / Donner le menu de vêtements",
|
||||
failure = {
|
||||
title = "Erreur",
|
||||
description = "Joueur non connecté"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Ouvre le menu des tenues de travail"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Ouvre le menu des tenues de gang"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Ouvre le menu des tenues gérées par le patron"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Magasin de vêtements - Prix : %s $",
|
||||
barber = "Barbier - Prix : %s $",
|
||||
tattoo = "Boutique de tatouages - Prix : %s $",
|
||||
surgeon = "Chirurgien plasticien - Prix : %s $",
|
||||
clothingRoom = "Chambre d'habillage",
|
||||
playerOutfitRoom = "Tenues"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Succès",
|
||||
description = "%s skins ont été migrées",
|
||||
descriptionSingle = "Skin migré"
|
||||
},
|
||||
skip = {
|
||||
title = "Information",
|
||||
description = "Skin ignoré"
|
||||
},
|
||||
typeError = {
|
||||
title = "Erreur",
|
||||
description = "Type invalide"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Succès",
|
||||
description = "Tatouage %s acheté pour %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Échec de l'application du tatouage",
|
||||
description = "Vous n'avez pas assez d'argent !"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Succès",
|
||||
description = "Don de %s$ à %s !"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploitation !",
|
||||
description = "Vous n'avez pas assez d'argent ! Vous avez essayé d'exploiter le système !"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
364
resources/[core]/illenium-appearance/locales/hu.lua
Normal file
364
resources/[core]/illenium-appearance/locales/hu.lua
Normal file
@ -0,0 +1,364 @@
|
||||
Locales["hu"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Változtatás Mentése",
|
||||
description = "Csúnya maradtál"
|
||||
},
|
||||
exit = {
|
||||
title = "Kilépés a testreszabásból",
|
||||
description = "Nincs változtatás elmentve"
|
||||
},
|
||||
accept = "Igen",
|
||||
decline = "Nem"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Model"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Öröklődés",
|
||||
shape = {
|
||||
title = "Arc",
|
||||
firstOption = "Apa",
|
||||
secondOption = "Anya",
|
||||
mix = "Vegyes"
|
||||
},
|
||||
skin = {
|
||||
title = "Bőrszín",
|
||||
firstOption = "Apa",
|
||||
secondOption = "Anya",
|
||||
mix = "Vegyes"
|
||||
},
|
||||
race = {
|
||||
title = "Rassz",
|
||||
shape = "Alak",
|
||||
skin = "Bőrszín",
|
||||
mix = "Vegyes"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Arci Jellemzők",
|
||||
nose = {
|
||||
title = "Orr",
|
||||
width = "Szélesség",
|
||||
height = "Magasság",
|
||||
size = "Méret",
|
||||
boneHeight = "Magasság",
|
||||
boneTwist = "Csavarás",
|
||||
peakHeight = "Maximális Magasság"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Szemöldök",
|
||||
height = "Magasság",
|
||||
depth = "Mélység"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Száj",
|
||||
boneHeight = "Magasság",
|
||||
boneWidth = "Szélesség",
|
||||
width = "Szélesség"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Szemek és Száj",
|
||||
eyesOpening = "Szem Kinyitása",
|
||||
lipsThickness = "Száj Típusok"
|
||||
},
|
||||
jaw = {
|
||||
title = "Állkapocs",
|
||||
width = "Szélesség",
|
||||
size = "Méret"
|
||||
},
|
||||
chin = {
|
||||
title = "Áll",
|
||||
lowering = "Leeresztés",
|
||||
length = "Hosszúság",
|
||||
size = "Méret",
|
||||
hole = "Méret"
|
||||
},
|
||||
neck = {
|
||||
title = "Nyak",
|
||||
thickness = "Vastagság"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Kinézet",
|
||||
hair = {
|
||||
title = "Haj",
|
||||
style = "Stílus",
|
||||
color = "Szín",
|
||||
highlight = "Kiemelt",
|
||||
texture = "Kinézet",
|
||||
fade = "Halvány"
|
||||
},
|
||||
opacity = "Átlátszóság",
|
||||
style = "Stílus",
|
||||
color = "Szín",
|
||||
secondColor = "Másodlagos Szín",
|
||||
blemishes = "Foltok",
|
||||
beard = "Szakáll",
|
||||
eyebrows = "Szemöldök",
|
||||
ageing = "Öregedés",
|
||||
makeUp = "Smink",
|
||||
blush = "Elpirulás",
|
||||
complexion = "Arcszín",
|
||||
sunDamage = "Napfény okozta bőröregedés",
|
||||
lipstick = "Rúzs",
|
||||
moleAndFreckles = "Anyajegyek és Szeplők",
|
||||
chestHair = "Mellszőrzet",
|
||||
bodyBlemishes = "Bőrhibák",
|
||||
eyeColor = "Szemszín"
|
||||
},
|
||||
components = {
|
||||
title = "Ruhák",
|
||||
drawable = "Rajzolható",
|
||||
texture = "Kinézet",
|
||||
mask = "Maszk",
|
||||
upperBody = "Kezek",
|
||||
lowerBody = "Lábak",
|
||||
bags = "Táskák és ejtőernyő",
|
||||
shoes = "Cipők",
|
||||
scarfAndChains = "Sál és Láncok",
|
||||
shirt = "Póló",
|
||||
bodyArmor = "Test páncél",
|
||||
decals = "Matricák",
|
||||
jackets = "Kabátok",
|
||||
head = "Fej"
|
||||
},
|
||||
props = {
|
||||
title = "Kellékek",
|
||||
drawable = "Rajzolható",
|
||||
texture = "Kinézet",
|
||||
hats = "Sapkák",
|
||||
glasses = "Szemüvegek",
|
||||
ear = "Fül",
|
||||
watches = "órák",
|
||||
bracelets = "Karkötők"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tetoválások",
|
||||
items = {
|
||||
ZONE_TORSO = "Törzs",
|
||||
ZONE_HEAD = "Fej",
|
||||
ZONE_LEFT_ARM = "Bal Kar",
|
||||
ZONE_RIGHT_ARM = "Jobb Kar",
|
||||
ZONE_LEFT_LEG = "Bal Láb",
|
||||
ZONE_RIGHT_LEG = "Jobb Láb"
|
||||
},
|
||||
apply = "Mentés",
|
||||
delete = "Törlés",
|
||||
deleteAll = "Összes tetkó törlése",
|
||||
opacity = "Átlátszóság"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Ruházat Kezelése",
|
||||
jobText = "Munkaruha Kezelése",
|
||||
gangText = "Bandaruha Kezelése"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Testreszabás Visszavonva",
|
||||
description = "Testreszabás Nincs Mentve"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Írd be az ruházat kódját",
|
||||
menuTitle = "Ruházat Berakása",
|
||||
description = "Ruházat importálása megosztási kóddal",
|
||||
name = {
|
||||
label = "Ruházat Elnevezése",
|
||||
placeholder = "Egy szép öltözet",
|
||||
default = "Berakot Ruházat"
|
||||
},
|
||||
code = {
|
||||
label = "Ruházat Kódja"
|
||||
},
|
||||
success = {
|
||||
title = "Ruházat Importálva",
|
||||
description = "Most át tudsz öltözni az ruházat menü használatával"
|
||||
},
|
||||
failure = {
|
||||
title = "Sikertelen Importálás",
|
||||
description = "Hibás ruházat kód"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Ruházat kód generálása",
|
||||
description = "Ruházat kód generálása megosztáshoz",
|
||||
failure = {
|
||||
title = "Hiba történt",
|
||||
description = "Nem sikerült kódot létrehozni az ruházathoz"
|
||||
},
|
||||
success = {
|
||||
title = "Ruházat kód legenerálva",
|
||||
description = "Itt az ruházat kódod"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Ruha mentése",
|
||||
menuDescription = "Jelenlegi ruha mentése mint %s ruházat",
|
||||
description = "Jelenlegi ruházat lementve",
|
||||
title = "Ruházat elnevezése",
|
||||
managementTitle = "Ruházat részletek kezelése",
|
||||
name = {
|
||||
label = "Ruházat Neve",
|
||||
placeholder = "Nagyon szép ruházat"
|
||||
},
|
||||
gender = {
|
||||
label = "Nem",
|
||||
male = "Férfi",
|
||||
female = "Nő"
|
||||
},
|
||||
rank = {
|
||||
label = "Minimális Rang"
|
||||
},
|
||||
failure = {
|
||||
title = "Sikertelen Mentés",
|
||||
description = "Ezzel a nével már létezik ruházat"
|
||||
},
|
||||
success = {
|
||||
title = "Sikeres",
|
||||
description = "%s nevű ruházat mentve"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Ruházat Frissítése",
|
||||
description = "Jelenlegi ruhák mentése egy meglévő ruházat helyére",
|
||||
failure = {
|
||||
title = "Frissités Sikertelen",
|
||||
description = "Ez a ruházat nem létezik"
|
||||
},
|
||||
success = {
|
||||
title = "Sikeres",
|
||||
description = "%s nevű ruházat frissítve"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Ruházat Megváltoztatása",
|
||||
description = "Válasz a jelenlegi %s ruházatod közül",
|
||||
pDescription = "Válasz a jelenlegi ruházataid közül",
|
||||
failure = {
|
||||
title = "Hiba történt",
|
||||
description = "A ruházatnak, amibe próbálsz átöltözni, nincs alap megjelenítése",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Ruházat Törlése",
|
||||
description = "Egy mentett %s ruházat törlése",
|
||||
mDescription = "Egy mentett ruházatod törlése",
|
||||
item = {
|
||||
title = '"%s" törlése',
|
||||
description = "Model: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Sikeres",
|
||||
description = "Ruházat Törölve"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | %s Ruházatok Kezelése"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Munkaruhák",
|
||||
description = "Válasz egy munkaruhát"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Vissza",
|
||||
title = "Ruhatár",
|
||||
outfitsTitle = "Játékos Ruházatok",
|
||||
clothingShopTitle = "Ruhabolt",
|
||||
barberShopTitle = "Fodrászat",
|
||||
tattooShopTitle = "Tetováló Szalon",
|
||||
surgeonShopTitle = "Sebészet"
|
||||
},
|
||||
clothing = {
|
||||
title = "Ruha Vásárlás - $%d",
|
||||
titleNoPrice = "Ruha Váltása",
|
||||
options = {
|
||||
title = "👔 | Ruhabolt Beállítások",
|
||||
description = "Válasszon a ruhák széles kínálatából"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Ruházat Beállítások",
|
||||
civilian = {
|
||||
title = "Civil Ruházat",
|
||||
description = "Ruházat felvétele"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Karakter újratöltése",
|
||||
failure = {
|
||||
title = "Hiba",
|
||||
description = "Ezt most nem használhatod"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Eltávolítja az entitáshoz csatolt összes kelléket",
|
||||
failure = {
|
||||
title = "Hiba",
|
||||
description = "Ezt most nem használhatod"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Ruházati Menü Megnyitása",
|
||||
failure = {
|
||||
title = "Hiba",
|
||||
description = "A játékos nem online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Munkaruházati menü megnyitása"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Bandaruházati menü megnyitása"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Ruhabolt - Ár: $%d",
|
||||
barber = "Fodrászat - Ár: $%d",
|
||||
tattoo = "Tetováló Szalon - Ár: $d",
|
||||
surgeon = "Sebészet - Ár: $%d",
|
||||
clothingRoom = "Ruhatár",
|
||||
playerOutfitRoom = "Ruházatok"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Sikeres",
|
||||
description = "Áthelyezés sikeres. %s kinézet(ek) áthelyezve",
|
||||
descriptionSingle = "Kinézet áthelyezve"
|
||||
},
|
||||
skip = {
|
||||
title = "Információ",
|
||||
description = "Kinézet kihagyva"
|
||||
},
|
||||
typeError = {
|
||||
title = "Hiba",
|
||||
description = "Nem létező típus"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Sikeres",
|
||||
description = "Megvásárolt %s tetoválás ennyiért: $%s"
|
||||
},
|
||||
failure = {
|
||||
title = "Tetoválás alkalmazása sikertelen",
|
||||
description = "Nincs elég pénzed!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Sikeres",
|
||||
description = "Ennyit fizettél: $%s" --"Gave $100 to clothing" doesn't really make sense, I just removed the second %s
|
||||
},
|
||||
failure = {
|
||||
title = "Hiba",
|
||||
description = "Nincs elég pénzed! Megpróbáltad kihasználni a rendszert!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/id.lua
Normal file
367
resources/[core]/illenium-appearance/locales/id.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["id"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Simpan Perubahan",
|
||||
description = "Kamu akan tetap jelek"
|
||||
},
|
||||
exit = {
|
||||
title = "Keluar",
|
||||
description = "Tidak ada perubahan yang akan di simpan"
|
||||
},
|
||||
accept = "Iya",
|
||||
decline = "Tidak"
|
||||
},
|
||||
ped = {
|
||||
title = "Karakter",
|
||||
model = "Pilihan"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Bagian Kepala",
|
||||
shape = {
|
||||
title = "Muka",
|
||||
firstOption = "Ayah",
|
||||
secondOption = "Ibu",
|
||||
mix = "Campuran"
|
||||
},
|
||||
skin = {
|
||||
title = "Kulit",
|
||||
firstOption = "Ayah",
|
||||
secondOption = "Ibu",
|
||||
mix = "Campuran"
|
||||
},
|
||||
race = {
|
||||
title = "Ras",
|
||||
shape = "Bentuk",
|
||||
skin = "Kulit",
|
||||
mix = "Campuran"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Fitur Wajah",
|
||||
nose = {
|
||||
title = "Hidung",
|
||||
width = "Lebar",
|
||||
height = "Tinggi",
|
||||
size = "Besar",
|
||||
boneHeight = "Tinggi Tulang",
|
||||
boneTwist = "Lengkuk Tulang",
|
||||
peakHeight = "Kemancungan"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Alis",
|
||||
height = "Tinggi",
|
||||
depth = "Kedalaman"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Pipi",
|
||||
boneHeight = "Tinggi Tulang",
|
||||
boneWidth = "Lebar Tulang",
|
||||
width = "Lebar"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Mata Dan Mulut",
|
||||
eyesOpening = "Buka Mata",
|
||||
lipsThickness = "Ketebalan Bibir"
|
||||
},
|
||||
jaw = {
|
||||
title = "Rahang",
|
||||
width = "Lebar Rahang",
|
||||
size = "Besar"
|
||||
},
|
||||
chin = {
|
||||
title = "Dagu",
|
||||
lowering = "Penurunan",
|
||||
length = "Panjang",
|
||||
size = "Besar",
|
||||
hole = "Ukuran Lubang"
|
||||
},
|
||||
neck = {
|
||||
title = "Leher",
|
||||
thickness = "Ketebalan"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Penampilan",
|
||||
hair = {
|
||||
title = "Rambut",
|
||||
style = "Gaya",
|
||||
color = "Warna",
|
||||
highlight = "Highlight",
|
||||
texture = "Tekstur",
|
||||
fade = "Memudar"
|
||||
},
|
||||
opacity = "Kegelapan",
|
||||
style = "Gaya",
|
||||
color = "Warna",
|
||||
secondColor = "Warna Sekunder",
|
||||
blemishes = "Noda",
|
||||
beard = "Jenggot",
|
||||
eyebrows = "Alis",
|
||||
ageing = "Penuaan",
|
||||
makeUp = "Make up",
|
||||
blush = "Kemerahan Pipi",
|
||||
complexion = "Corak",
|
||||
sunDamage = "Kersakan Muka Akibat Sinar Matahari",
|
||||
lipstick = "Lipstik",
|
||||
moleAndFreckles = "Tahi Lalat dan Bintik-bintik",
|
||||
chestHair = "Bulu dada",
|
||||
bodyBlemishes = "Noda tubuh",
|
||||
eyeColor = "Warna mata"
|
||||
},
|
||||
components = {
|
||||
title = "Pakaian",
|
||||
drawable = "Pilihan",
|
||||
texture = "Tekstur Baju",
|
||||
mask = "Masker",
|
||||
upperBody = "Lengan",
|
||||
lowerBody = "Celana",
|
||||
bags = "Tas Dan Parasut",
|
||||
shoes = "Sepatu",
|
||||
scarfAndChains = "Syal Dan Kalung",
|
||||
shirt = "Baju",
|
||||
bodyArmor = "Bodi Armor",
|
||||
decals = "Stiker",
|
||||
jackets = "Jaket",
|
||||
head = "Topi"
|
||||
},
|
||||
props = {
|
||||
title = "Atribut",
|
||||
drawable = "Pilihan",
|
||||
texture = "Tekstur",
|
||||
hats = "Topi Dan Helm",
|
||||
glasses = "Kacamata",
|
||||
ear = "Aksesoris Telinga",
|
||||
watches = "Jam",
|
||||
bracelets = "Gelang"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tato",
|
||||
items = {
|
||||
ZONE_TORSO = "Badan",
|
||||
ZONE_HEAD = "Kepala",
|
||||
ZONE_LEFT_ARM = "Tangan Kiri",
|
||||
ZONE_RIGHT_ARM = "Tangan Kanan",
|
||||
ZONE_LEFT_LEG = "Kaki Kiri",
|
||||
ZONE_RIGHT_LEG = "Kaki Kanan"
|
||||
},
|
||||
apply = "Terapkan",
|
||||
delete = "Hapus",
|
||||
deleteAll = "Hapus Semua Tato",
|
||||
opacity = "Kegelapan"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Pakaian Pekerjaan",
|
||||
jobText = "Atur pakaian untuk pekerja",
|
||||
gangText = "Atur pakaian untuk anggota gang"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Kostumisasi di batalkan",
|
||||
description = "Kustomisasi tidak disimpan"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Mauskkan kode pakaian",
|
||||
menuTitle = "Impor Pakaian",
|
||||
description = "Impor pakaian dari kode yang di bagikan",
|
||||
name = {
|
||||
label = "Nama Pakaian",
|
||||
placeholder = "Pakaian yang bagus",
|
||||
default = "Pakaian Impor"
|
||||
},
|
||||
code = {
|
||||
label = "Kode Pakaian"
|
||||
},
|
||||
success = {
|
||||
title = "Berhasil",
|
||||
description = "Anda sekarang dapat mengganti pakaian menggunakan menu pakaian"
|
||||
},
|
||||
failure = {
|
||||
title = "Gagal",
|
||||
description = "Kode pakaian tidak valid"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Lihat Kode Pakaian",
|
||||
description = "Lihat kode pakaian untuk di bagikan.",
|
||||
failure = {
|
||||
title = "Ada yang salah",
|
||||
description = "Pembuatan kode gagal untuk pakaian tersebut"
|
||||
},
|
||||
success = {
|
||||
title = "Kode Pakaian Dihasilkan",
|
||||
description = "Ini kode pakaianmu"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Simpan Pakaian saat ini",
|
||||
menuDescription = "Simpan pakaian Anda saat ini sebagai pakaian %s",
|
||||
description = "Simpan pakaian Anda saat ini",
|
||||
title = "Beri nama pakaian Anda",
|
||||
managementTitle = "Detail Pakaian Pekerjaan",
|
||||
name = {
|
||||
label = "Nama Pakaian",
|
||||
placeholder = "Pakaian yang bagus"
|
||||
},
|
||||
gender = {
|
||||
label = "Jenis Kelamin",
|
||||
male = "Laki-Laki",
|
||||
female = "Perempuan"
|
||||
},
|
||||
rank = {
|
||||
label = "Pangkat Minimal"
|
||||
},
|
||||
failure = {
|
||||
title = "Gagal Menyimpan",
|
||||
description = "Pakaian dengan nama ini sudah ada"
|
||||
},
|
||||
success = {
|
||||
title = "Berhasil Menyimpan",
|
||||
description = "Pakaian dengan nama %s berhasil di simpan"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Perbarui Pakaian",
|
||||
description = "Simpan pakaian Anda saat ini ke pakaian yang sudah ada",
|
||||
failure = {
|
||||
title = "Gagal Memperbarui",
|
||||
description = "Pakaian itu tidak ada"
|
||||
},
|
||||
success = {
|
||||
title = "Berhasil Memperbarui",
|
||||
description = "Pakaian dengan nama %s telah di perbarui"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Ganti Pakaian",
|
||||
description = "Pilih dari %s pakaian yang Anda simpan saat ini",
|
||||
pDescription = "Pilih dari salah satu pakaian yang Anda simpan saat ini",
|
||||
failure = {
|
||||
title = "Ada yang salah",
|
||||
description = "Pakaian yang ingin Anda ganti tidak memiliki tampilan dasar",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Hapus Pakaian",
|
||||
description = "Hapus pakaian %s yang disimpan",
|
||||
mDescription = "Hapus semua pakaian yang Anda simpan",
|
||||
item = {
|
||||
title = 'Hapus "%s"',
|
||||
description = "Model: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Berhasil",
|
||||
description = "Pakaian di hapus"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Atur %s Pakaian"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Pakaian Pekerjaan",
|
||||
description = "Pilih dari salah satu pakaian kerja Anda"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Kembali",
|
||||
title = "Ruang Pakaian",
|
||||
outfitsTitle = "Menu Pakaian",
|
||||
clothingShopTitle = "Toko Pakaian",
|
||||
barberShopTitle = "Toko Rambut",
|
||||
tattooShopTitle = "Toko Tato",
|
||||
surgeonShopTitle = "Operasi Plastik"
|
||||
},
|
||||
clothing = {
|
||||
title = "Beli Pakaian - $%d",
|
||||
titleNoPrice = "Ganti Pakaian",
|
||||
options = {
|
||||
title = "👔 | Pilihan Toko Pakaian",
|
||||
description = "Pilih dari beragam item untuk dikenakan"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Pilihan Pakaian",
|
||||
civilian = {
|
||||
title = "Pakaian Sipil",
|
||||
description = "Pakai baju mu"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Muat ulang karakter Anda",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "Anda tidak dapat menggunakan reloadskin saat ini"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Menghapus semua props yang melekat pada anda",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "Anda tidak dapat menggunakan clearstuckprops saat ini"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Buka / Berikan Menu Pakaian",
|
||||
failure = {
|
||||
title = "Error",
|
||||
description = "Pemain tidak online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Buka Menu Pakaian Pekerjaan"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Buka Menu Pakaian Gang"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Membuka Menu Pakaian yang Dikelola Bos"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Tokok Pakaian - Price: $%d",
|
||||
barber = "Salon - Price: $%d",
|
||||
tattoo = "Tato - Price: $%d",
|
||||
surgeon = "Operasi Plastik - Price: $%d",
|
||||
clothingRoom = "Ruang Pakaian",
|
||||
playerOutfitRoom = "Pakaian"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Berhasil",
|
||||
description = "Migrasi selesai. %s kulit bermigrasi",
|
||||
descriptionSingle = "Kulit yang Bermigrasi"
|
||||
},
|
||||
skip = {
|
||||
title = "Informasi",
|
||||
description = "Melewatkan kulit"
|
||||
},
|
||||
typeError = {
|
||||
title = "Error",
|
||||
description = "Jenis tidak valid"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Berhasil",
|
||||
description = "Membuat %s tato dengan harga %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Penerapan Tato Gagal",
|
||||
description = "Kamu tidak memiliki cukup uang!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Berhasil",
|
||||
description = "Telah memberi $%s ke %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploit!",
|
||||
description = "Anda tidak punya cukup uang! Mencoba mengeksploitasi sistem!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/it.lua
Normal file
367
resources/[core]/illenium-appearance/locales/it.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["it"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Salva",
|
||||
description = "Rimarrai sempre brutto"
|
||||
},
|
||||
exit = {
|
||||
title = "Esci",
|
||||
description = "Nessun cambiamento verrà salvato"
|
||||
},
|
||||
accept = "Si",
|
||||
decline = "No"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Modello"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Eredità",
|
||||
shape = {
|
||||
title = "Faccia",
|
||||
firstOption = "Padre",
|
||||
secondOption = "Madre",
|
||||
mix = "Mix"
|
||||
},
|
||||
skin = {
|
||||
title = "Pelle",
|
||||
firstOption = "Padre",
|
||||
secondOption = "Madre",
|
||||
mix = "Mix"
|
||||
},
|
||||
race = {
|
||||
title = "Mix",
|
||||
shape = "Forma",
|
||||
skin = "Pelle",
|
||||
mix = "Mix"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Caratteristiche del viso",
|
||||
nose = {
|
||||
title = "Naso",
|
||||
width = "Larghezza",
|
||||
height = "Altezza",
|
||||
size = "Dimensione",
|
||||
boneHeight = "Altezza dell'osso",
|
||||
boneTwist = "Torsione ossea",
|
||||
peakHeight = "Altezza della punta"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Sopracciglia",
|
||||
height = "Altezza",
|
||||
depth = "Profondità"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Guance",
|
||||
boneHeight = "Altezza dell'osso",
|
||||
boneWidth = "Larghezza dell'osso",
|
||||
width = "Larghezza"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Occhi e Bocca",
|
||||
eyesOpening = "Apertura degli occhi",
|
||||
lipsThickness = "Spessore delle labbra"
|
||||
},
|
||||
jaw = {
|
||||
title = "Mascella",
|
||||
width = "Larghezza",
|
||||
size = "Dimensione"
|
||||
},
|
||||
chin = {
|
||||
title = "Mento",
|
||||
lowering = "Altezza",
|
||||
length = "Lunghezza",
|
||||
size = "Dimensione",
|
||||
hole = "Mento a culo"
|
||||
},
|
||||
neck = {
|
||||
title = "Collo",
|
||||
thickness = "Spessore"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Aspetto",
|
||||
hair = {
|
||||
title = "Capelli",
|
||||
style = "Stile",
|
||||
color = "Colore",
|
||||
highlight = "Highlight",
|
||||
texture = "Variante",
|
||||
fade = "Sfumatura"
|
||||
},
|
||||
opacity = "Opacità",
|
||||
style = "Stile",
|
||||
color = "Colore",
|
||||
secondColor = "Colore Secondario",
|
||||
blemishes = "Macchie",
|
||||
beard = "Barba",
|
||||
eyebrows = "Sopracciglia",
|
||||
ageing = "Invecchiamento",
|
||||
makeUp = "Trucco",
|
||||
blush = "Arrossamento",
|
||||
complexion = "Carnagione",
|
||||
sunDamage = "Danno dal Sole",
|
||||
lipstick = "Rossetto",
|
||||
moleAndFreckles = "Lentigini",
|
||||
chestHair = "Peli del Petto",
|
||||
bodyBlemishes = "Inestetismi del Corpo",
|
||||
eyeColor = "Colore degli Occhi"
|
||||
},
|
||||
components = {
|
||||
title = "Vestiti",
|
||||
drawable = "Modello",
|
||||
texture = "Variante",
|
||||
mask = "Maschera",
|
||||
upperBody = "Braccia",
|
||||
lowerBody = "Pantaloni",
|
||||
bags = "Borse",
|
||||
shoes = "Scarpe",
|
||||
scarfAndChains = "Sciarpa e Collane",
|
||||
shirt = "Maglia",
|
||||
bodyArmor = "Giubbotto",
|
||||
decals = "Decalcomanie",
|
||||
jackets = "Giacca",
|
||||
head = "Capo"
|
||||
},
|
||||
props = {
|
||||
title = "Accessori",
|
||||
drawable = "Modello",
|
||||
texture = "Variante",
|
||||
hats = "Cappelli e Caschi",
|
||||
glasses = "Occhiali",
|
||||
ear = "Orecchie",
|
||||
watches = "Orologi",
|
||||
bracelets = "Bracciali"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tatuaggi",
|
||||
items = {
|
||||
ZONE_TORSO = "Petto",
|
||||
ZONE_HEAD = "Testa",
|
||||
ZONE_LEFT_ARM = "Braccio Sinistro",
|
||||
ZONE_RIGHT_ARM = "Braccio Destro",
|
||||
ZONE_LEFT_LEG = "Gamba Sinistra",
|
||||
ZONE_RIGHT_LEG = "Gamba Destra"
|
||||
},
|
||||
apply = "Applica",
|
||||
delete = "Rimuovi",
|
||||
deleteAll = "Rimuovi tutti i Tatuaggi",
|
||||
opacity = "Opacità"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Gestione Outfit",
|
||||
jobText = "Gestisci outfit per il Lavoro",
|
||||
gangText = "Gestisci outfit per la Gang"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Personalizzazione Annullata",
|
||||
description = "Personalizzazione non salvata"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Inserisci il codice dell'abbigliamento",
|
||||
menuTitle = "Importa l'abbigliamento",
|
||||
description = "Importa un abbigliamento da un codice di condivisione",
|
||||
name = {
|
||||
label = "Nome dell'abbigliamento",
|
||||
placeholder = "Un bel vestito",
|
||||
default = "Vestito importato"
|
||||
},
|
||||
code = {
|
||||
label = "Codice abbigliamento"
|
||||
},
|
||||
success = {
|
||||
title = "Abbigliamento importato",
|
||||
description = "Ora puoi cambiare l'abbigliamento utilizzando il menu dell'abbigliamento"
|
||||
},
|
||||
failure = {
|
||||
title = "Importazione fallita",
|
||||
description = "Codice abbigliamento non valido"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Genera il codice dell'abbigliamento",
|
||||
description = "Genera un codice abbigliamento per la condivisione",
|
||||
failure = {
|
||||
title = "Qualcosa è andato storto",
|
||||
description = "La generazione del codice per l'abbigliamento è fallita"
|
||||
},
|
||||
success = {
|
||||
title = "Codice abbigliamento generato",
|
||||
description = "Ecco il tuo codice abbigliamento"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Salva l'abbigliamento attuale",
|
||||
menuDescription = "Salva il tuo abbigliamento attuale come abbigliamento %s",
|
||||
description = "Salva il tuo abbigliamento attuale",
|
||||
title = "Dai un nome al tuo abbigliamento",
|
||||
managementTitle = "Dettagli di gestione dell'abbigliamento",
|
||||
name = {
|
||||
label = "Nome abbigliamento",
|
||||
placeholder = "Vestito molto bello"
|
||||
},
|
||||
gender = {
|
||||
label = "Genere",
|
||||
male = "Maschio",
|
||||
female = "Femmina"
|
||||
},
|
||||
rank = {
|
||||
label = "Grado minimo"
|
||||
},
|
||||
failure = {
|
||||
title = "Salvataggio fallito",
|
||||
description = "L'abbigliamento con questo nome esiste già"
|
||||
},
|
||||
success = {
|
||||
title = "Successo",
|
||||
description = "L'abbigliamento %s è stato salvato"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Aggiorna abbigliamento",
|
||||
description = "Salva il tuo abbigliamento corrente in un abbigliamento esistente",
|
||||
failure = {
|
||||
title = "Aggiornamento fallito",
|
||||
description = "Quell'abbigliamento non esiste"
|
||||
},
|
||||
success = {
|
||||
title = "Successo",
|
||||
description = "L'abbigliamento %s è stato aggiornato"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Cambia abbigliamento",
|
||||
description = "Scegli tra i tuoi abbigliamenti %s salvati",
|
||||
pDescription = "Scegli tra i tuoi abbigliamenti salvati",
|
||||
failure = {
|
||||
title = "Qualcosa è andato storto",
|
||||
description = "L'abbigliamento che stai cercando di cambiare non ha un aspetto di base",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Elimina abbigliamento",
|
||||
description = "Elimina un abbigliamento salvato %s",
|
||||
mDescription = "Elimina qualsiasi outfit salvato",
|
||||
item = {
|
||||
title = 'Elimina "%s"',
|
||||
description = "Modello: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Successo",
|
||||
description = "Outfit eliminato"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Gestisci %s Outfits"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Abbigliamento da lavoro",
|
||||
description = "Scegli tra i tuoi abbigliamenti da lavoro"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Indietro",
|
||||
title = "Stanza dell'abbigliamento",
|
||||
outfitsTitle = "Abbigliamenti del giocatore",
|
||||
clothingShopTitle = "Negozio di abbigliamento",
|
||||
barberShopTitle = "Barbiere",
|
||||
tattooShopTitle = "Negozio di tatuaggi",
|
||||
surgeonShopTitle = "Chirurgo plastico"
|
||||
},
|
||||
clothing = {
|
||||
title = "Acquista abbigliamento - %d $",
|
||||
titleNoPrice = "Cambia abbigliamento",
|
||||
options = {
|
||||
title = "👔 | Opzioni del negozio di abbigliamento",
|
||||
description = "Scegli tra una vasta gamma di oggetti da indossare"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Opzioni outfit",
|
||||
civilian = {
|
||||
title = "Abbigliamento civile",
|
||||
description = "Metti i tuoi vestiti"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Ricarica il tuo personaggio",
|
||||
failure = {
|
||||
title = "Errore",
|
||||
description = "Non puoi usare reloadskin in questo momento"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Rimuovi tutti gli oggetti attaccati all'entità",
|
||||
failure = {
|
||||
title = "Errore",
|
||||
description = "Non puoi usare clearstuckprops in questo momento"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Apri / Condividi menu abbigliamento",
|
||||
failure = {
|
||||
title = "Errore",
|
||||
description = "Giocatore non connesso"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Apre il menu degli abiti da lavoro"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Apre il menu degli abiti da gang"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Apre il menu delle outfit gestite dal capo"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Negozio di abbigliamento - Prezzo: $%d",
|
||||
barber = "Barbiere - Prezzo: $%d",
|
||||
tattoo = "Negozio di tatuaggi - Prezzo: $%d",
|
||||
surgeon = "Chirurgo plastico - Prezzo: $%d",
|
||||
clothingRoom = "Sala degli abiti",
|
||||
playerOutfitRoom = "Outfits"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Successo",
|
||||
description = "Migrazione completata. %s skins migrate",
|
||||
descriptionSingle = "Pelle migrata"
|
||||
},
|
||||
skip = {
|
||||
title = "Informazioni",
|
||||
description = "Skin saltata"
|
||||
},
|
||||
typeError = {
|
||||
title = "Errore",
|
||||
description = "Tipo non valido"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Successo",
|
||||
description = "Tatuaggio %s acquistato per %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Errore applicazione tatuaggio",
|
||||
description = "Non hai abbastanza soldi!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Successo",
|
||||
description = "Hai dato $%s a %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Sfruttamento!",
|
||||
description = "Non hai abbastanza soldi! Ha cercato di sfruttare il sistema!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
resources/[core]/illenium-appearance/locales/locales.lua
Normal file
17
resources/[core]/illenium-appearance/locales/locales.lua
Normal file
@ -0,0 +1,17 @@
|
||||
Locales = {}
|
||||
|
||||
function _L(key)
|
||||
local lang = GetConvar("illenium-appearance:locale", "en")
|
||||
if not Locales[lang] then
|
||||
lang = "en"
|
||||
end
|
||||
local value = Locales[lang]
|
||||
for k in key:gmatch("[^.]+") do
|
||||
value = value[k]
|
||||
if not value then
|
||||
print("Missing locale for: " .. key)
|
||||
return ""
|
||||
end
|
||||
end
|
||||
return value
|
||||
end
|
||||
367
resources/[core]/illenium-appearance/locales/nl.lua
Normal file
367
resources/[core]/illenium-appearance/locales/nl.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["nl"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Veranderingen Toepassen",
|
||||
description = "Je blijft lelijk"
|
||||
},
|
||||
exit = {
|
||||
title = "Menu Verlaten",
|
||||
description = "Veranderingen worden niet opgeslagen"
|
||||
},
|
||||
accept = "Ja",
|
||||
decline = "Nee"
|
||||
},
|
||||
ped = {
|
||||
title = "Persoon",
|
||||
model = "Model"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Erfenis",
|
||||
shape = {
|
||||
title = "Gezicht",
|
||||
firstOption = "Vader",
|
||||
secondOption = "Moeder",
|
||||
mix = "Mix"
|
||||
},
|
||||
skin = {
|
||||
title = "Huid",
|
||||
firstOption = "Vader",
|
||||
secondOption = "Moeder",
|
||||
mix = "Mix"
|
||||
},
|
||||
race = {
|
||||
title = "Ras",
|
||||
shape = "Vorm",
|
||||
skin = "Huid",
|
||||
mix = "Mix"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Gezichtskenmerken",
|
||||
nose = {
|
||||
title = "Neus",
|
||||
width = "Breedte",
|
||||
height = "Hoogte",
|
||||
size = "Groote",
|
||||
boneHeight = "Bot hoogte",
|
||||
boneTwist = "Bot twist",
|
||||
peakHeight = "Neus hoogte"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Wenkbrouwen",
|
||||
height = "Hoogte",
|
||||
depth = "Diepte"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Wangen",
|
||||
boneHeight = "Bot hoogte",
|
||||
boneWidth = "Bone width",
|
||||
width = "Breedte"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Ogen en Mond",
|
||||
eyesOpening = "Oog opening",
|
||||
lipsThickness = "Lip dikte"
|
||||
},
|
||||
jaw = {
|
||||
title = "Kaak",
|
||||
width = "Breedte",
|
||||
size = "Groote"
|
||||
},
|
||||
chin = {
|
||||
title = "Kin",
|
||||
lowering = "Verlaging",
|
||||
length = "Lengte",
|
||||
size = "Groote",
|
||||
hole = "Gat groote"
|
||||
},
|
||||
neck = {
|
||||
title = "Nek",
|
||||
thickness = "Dikte"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Uiterlijk",
|
||||
hair = {
|
||||
title = "Haar",
|
||||
style = "Stijl",
|
||||
color = "Kleur",
|
||||
highlight = "Highlight",
|
||||
texture = "Textuur",
|
||||
fade = "Fade"
|
||||
},
|
||||
opacity = "Helderheid",
|
||||
style = "Stijl",
|
||||
color = "Kleur",
|
||||
secondColor = "Secundaire Kleur",
|
||||
blemishes = "Vlekken",
|
||||
beard = "Baard",
|
||||
eyebrows = "Wenkbrouwen",
|
||||
ageing = "Veroudering",
|
||||
makeUp = "Make up",
|
||||
blush = "Blush",
|
||||
complexion = "Tint",
|
||||
sunDamage = "Zonnebrand",
|
||||
lipstick = "Lippenstift",
|
||||
moleAndFreckles = "Wrat en Sproeten",
|
||||
chestHair = "Borst haar",
|
||||
bodyBlemishes = "Lichaamelijke vlekken",
|
||||
eyeColor = "Oog kleur"
|
||||
},
|
||||
components = {
|
||||
title = "Kleding",
|
||||
drawable = "Tekenbaar",
|
||||
texture = "Textuur",
|
||||
mask = "Masker",
|
||||
upperBody = "Handen",
|
||||
lowerBody = "Benen",
|
||||
bags = "Tassen en parachute",
|
||||
shoes = "Schoenen",
|
||||
scarfAndChains = "Sjaal en kettingen",
|
||||
shirt = "Shirt",
|
||||
bodyArmor = "Vesten",
|
||||
decals = "Stickers",
|
||||
jackets = "Jassen",
|
||||
head = "Hoofd"
|
||||
},
|
||||
props = {
|
||||
title = "Sieraden",
|
||||
drawable = "Tekenbaar",
|
||||
texture = "Textuur",
|
||||
hats = "Hoeden en helmen",
|
||||
glasses = "Brillen",
|
||||
ear = "Oor",
|
||||
watches = "Horloges",
|
||||
bracelets = "Armbanden"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tattoos",
|
||||
items = {
|
||||
ZONE_TORSO = "Borstkas",
|
||||
ZONE_HEAD = "Hoofd",
|
||||
ZONE_LEFT_ARM = "Linker arm",
|
||||
ZONE_RIGHT_ARM = "Rechter arm",
|
||||
ZONE_LEFT_LEG = "Linker been",
|
||||
ZONE_RIGHT_LEG = "Rechter been"
|
||||
},
|
||||
apply = "Toepassen",
|
||||
delete = "Verwijder",
|
||||
deleteAll = "Verwijder alle Tattoos",
|
||||
opacity = "Helderheid"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Outfit Beheer",
|
||||
jobText = "Beheer outfits voor Baan",
|
||||
gangText = "Beheer outfits voor Bende"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Customisatie Geannuleerd",
|
||||
description = "Customisatie niet opgeslagen"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Voer outfit code in",
|
||||
menuTitle = "Outfit Importeren",
|
||||
description = "Importeer een outfit van een deelcode",
|
||||
name = {
|
||||
label = "Geef de outfit een naam",
|
||||
placeholder = "Een mooie outfit",
|
||||
default = "Geïmporteerde outfit"
|
||||
},
|
||||
code = {
|
||||
label = "Outfit code"
|
||||
},
|
||||
success = {
|
||||
title = "Outfit Geïmporteerd",
|
||||
description = "Je kunt nu de outfit gebruiken via het outfit menu"
|
||||
},
|
||||
failure = {
|
||||
title = "Import Mislukt",
|
||||
description = "Ongeldige outfit code"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Genereer outfit-code",
|
||||
description = "Genereer een outfit-code om te delen",
|
||||
failure = {
|
||||
title = "Er is iets fout gegaan",
|
||||
description = "Generatie van code voor de outfit is mislukt"
|
||||
},
|
||||
success = {
|
||||
title = "Outfit-code gegenereerd",
|
||||
description = "Hier is je outfit-code"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Huidige outfit opslaan",
|
||||
menuDescription = "Sla je huidige outfit op als %s outfit",
|
||||
description = "Sla je huidige outfit op",
|
||||
title = "Geef je outfit een naam",
|
||||
managementTitle = "Outfitbeheer details",
|
||||
name = {
|
||||
label = "Outfitnaam",
|
||||
placeholder = "Heel gave outfit"
|
||||
},
|
||||
gender = {
|
||||
label = "Geslacht",
|
||||
male = "Man",
|
||||
female = "Vrouw"
|
||||
},
|
||||
rank = {
|
||||
label = "Minimumrang"
|
||||
},
|
||||
failure = {
|
||||
title = "Opslaan mislukt",
|
||||
description = "Outfit met deze naam bestaat al"
|
||||
},
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Outfit %s is opgeslagen"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Outfit bijwerken",
|
||||
description = "Sla je huidige kleding op naar een bestaande outfit",
|
||||
failure = {
|
||||
title = "Bijwerken mislukt",
|
||||
description = "Die outfit bestaat niet"
|
||||
},
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Outfit %s is bijgewerkt"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Outfit wijzigen",
|
||||
description = "Kies uit een van je momenteel opgeslagen %s outfits",
|
||||
pDescription = "Kies uit een van je momenteel opgeslagen outfits",
|
||||
failure = {
|
||||
title = "Er is iets fout gegaan",
|
||||
description = "De outfit waar je naar probeert te wijzigen, heeft geen basisuiterlijk",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Outfit verwijderen",
|
||||
description = "Verwijder een opgeslagen %s outfit",
|
||||
mDescription = "Verwijder een van je opgeslagen outfits",
|
||||
item = {
|
||||
title = 'Verwijder "%s"',
|
||||
description = "Model: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Outfit verwijderd"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Beheer %s outfits"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Werkoutfits",
|
||||
description = "Kies uit een van je werkoutfits"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Terug",
|
||||
title = "Kledingkamer",
|
||||
outfitsTitle = "Speleroutfits",
|
||||
clothingShopTitle = "Kledingwinkel",
|
||||
barberShopTitle = "Kapper",
|
||||
tattooShopTitle = "Tatoeëerder",
|
||||
surgeonShopTitle = "Plastisch chirurg"
|
||||
},
|
||||
clothing = {
|
||||
title = "Kleding kopen - $%d",
|
||||
titleNoPrice = "Kleding wijzigen",
|
||||
options = {
|
||||
title = "👔 | Opties kledingwinkel",
|
||||
description = "Kies uit een breed scala aan kledingstukken om te dragen"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Opties outfit",
|
||||
civilian = {
|
||||
title = "Gewone outfit",
|
||||
description = "Trek je eigen kleding aan"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Laadt je personage opnieuw",
|
||||
failure = {
|
||||
title = "Fout",
|
||||
description = "Je kunt reloadskin nu niet gebruiken"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Verwijdert alle props die aan de entiteit zijn bevestigd",
|
||||
failure = {
|
||||
title = "Fout",
|
||||
description = "Je kunt clearstuckprops nu niet gebruiken"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Open / Geef kledingmenu",
|
||||
failure = {
|
||||
title = "Fout",
|
||||
description = "Speler niet online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Opent het menu Joboutfits"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Opent het menu Bende-outfits"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Opent het menu met door de baas beheerde outfits"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Kledingwinkel - Prijs: $%d",
|
||||
barber = "Kapper - Prijs: $%d",
|
||||
tattoo = "Tattooshop - Prijs: $%d",
|
||||
surgeon = "Plastisch Chirurg - Prijs: $%d",
|
||||
clothingRoom = "Kleedkamer",
|
||||
playerOutfitRoom = "Outfits"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Migratie voltooid. %s skins gemigreerd",
|
||||
descriptionSingle = "Gemigreerde huid"
|
||||
},
|
||||
skip = {
|
||||
title = "Informatie",
|
||||
description = "Overgeslagen skin"
|
||||
},
|
||||
typeError = {
|
||||
title = "Fout",
|
||||
description = "Ongeldig type"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Gekocht %s tattoo voor %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Tatoeage toepassen mislukt",
|
||||
description = "Je hebt niet genoeg geld!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "$%s gegeven aan %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploit!",
|
||||
description = "Je had niet genoeg geld! Probeerde het systeem te misbruiken!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/pt-BR.lua
Normal file
367
resources/[core]/illenium-appearance/locales/pt-BR.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["pt-BR"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Salvar customização",
|
||||
description = "Você continuará feio."
|
||||
},
|
||||
exit = {
|
||||
title = "Sair da customização",
|
||||
description = "Nenhuma mudança será salva"
|
||||
},
|
||||
accept = "Sim",
|
||||
decline = "Não"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Modelo"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Herança",
|
||||
shape = {
|
||||
title = "Face",
|
||||
firstOption = "Pai",
|
||||
secondOption = "Mãe",
|
||||
mix = "Mistura"
|
||||
},
|
||||
skin = {
|
||||
title = "Pele",
|
||||
firstOption = "Pai",
|
||||
secondOption = "Mãe",
|
||||
mix = "Mistura"
|
||||
},
|
||||
race = {
|
||||
title = "Raça",
|
||||
shape = "Face",
|
||||
skin = "Pele",
|
||||
mix = "Mistura"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Características faciais",
|
||||
nose = {
|
||||
title = "Nariz",
|
||||
width = "Largura",
|
||||
height = "Altura",
|
||||
size = "Tamanho",
|
||||
boneHeight = "Tamanho do osso",
|
||||
boneTwist = "Desvio do osso",
|
||||
peakHeight = "Altura da ponta"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Sobrancelhas",
|
||||
height = "Altura",
|
||||
depth = "Profundidade"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Bochecha",
|
||||
boneHeight = "Altura do osso",
|
||||
boneWidth = "Largura do osso",
|
||||
width = "Largura"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Olhos e boca",
|
||||
eyesOpening = "Abertura dos olhos",
|
||||
lipsThickness = "Espesurra dos lábios"
|
||||
},
|
||||
jaw = {
|
||||
title = "Mandíbula",
|
||||
width = "Largura",
|
||||
size = "Tamanho"
|
||||
},
|
||||
chin = {
|
||||
title = "Queixo",
|
||||
lowering = "Altura",
|
||||
length = "Comprimento",
|
||||
size = "Tamanho",
|
||||
hole = "Tamanho do furo"
|
||||
},
|
||||
neck = {
|
||||
title = "Pescoço",
|
||||
thickness = "Espessura"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Aparência",
|
||||
hair = {
|
||||
title = "Cabelo",
|
||||
style = "Estilo",
|
||||
color = "Cor",
|
||||
highlight = "Reflexo",
|
||||
texture = "Estilo",
|
||||
fade = "Degradê"
|
||||
},
|
||||
opacity = "Opacidade",
|
||||
style = "Estilo",
|
||||
color = "Cor",
|
||||
secondColor = "Cor Secundária",
|
||||
blemishes = "Manchas",
|
||||
beard = "Barba",
|
||||
eyebrows = "Sobrancelhas",
|
||||
ageing = "Envelhecimento",
|
||||
makeUp = "Maquiagem",
|
||||
blush = "Blush",
|
||||
complexion = "Aspecto",
|
||||
sunDamage = "Dano solar",
|
||||
lipstick = "Batom",
|
||||
moleAndFreckles = "Verruga e sardas",
|
||||
chestHair = "Cabelo do peito",
|
||||
bodyBlemishes = "Manchas corporais",
|
||||
eyeColor = "Cor dos olhos"
|
||||
},
|
||||
components = {
|
||||
title = "Roupas",
|
||||
drawable = "Modelo",
|
||||
texture = "Textura",
|
||||
mask = "Máscaras",
|
||||
upperBody = "Mãos",
|
||||
lowerBody = "Pernas",
|
||||
bags = "Mochilas e paraquedas",
|
||||
shoes = "Sapatos",
|
||||
scarfAndChains = "Lenços e correntes",
|
||||
shirt = "Camisa",
|
||||
bodyArmor = "Colete",
|
||||
decals = "Decalques",
|
||||
jackets = "Jaquetas",
|
||||
head = "Cabeça"
|
||||
},
|
||||
props = {
|
||||
title = "Acessórios",
|
||||
drawable = "Modelo",
|
||||
texture = "Textura",
|
||||
hats = "Chapéus e capacetes",
|
||||
glasses = "Óculos",
|
||||
ear = "Brincos",
|
||||
watches = "Relógios",
|
||||
bracelets = "Braceletes"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Tatuagens",
|
||||
items = {
|
||||
ZONE_TORSO = "Tronco",
|
||||
ZONE_HEAD = "Cabeça",
|
||||
ZONE_LEFT_ARM = "Braço esquerdo",
|
||||
ZONE_RIGHT_ARM = "Braço direito",
|
||||
ZONE_LEFT_LEG = "Perna esquerda",
|
||||
ZONE_RIGHT_LEG = "Perna direita"
|
||||
},
|
||||
apply = "Aplicar",
|
||||
delete = "Apagar",
|
||||
deleteAll = "Apagar tudo",
|
||||
opacity = "Opacidade"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Gerenciamento de Roupas",
|
||||
jobText = "Gerenciar roupas para trabalho",
|
||||
gangText = "Gerenciar roupas para gangue"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Personalização Cancelada",
|
||||
description = "Personalização não salva"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Inserir código da roupa",
|
||||
menuTitle = "Importar roupa",
|
||||
description = "Importar uma roupa usando um código de compartilhamento",
|
||||
name = {
|
||||
label = "Nome da Roupa",
|
||||
placeholder = "Uma roupa legal",
|
||||
default = "Roupa Importada"
|
||||
},
|
||||
code = {
|
||||
label = "Código da Roupa"
|
||||
},
|
||||
success = {
|
||||
title = "Roupa Importada",
|
||||
description = "Agora você pode trocar para a roupa usando o menu de roupas"
|
||||
},
|
||||
failure = {
|
||||
title = "Falha na Importação",
|
||||
description = "Código da roupa inválido"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Gerar Código de Roupa",
|
||||
description = "Gerar um código para compartilhar sua roupa",
|
||||
failure = {
|
||||
title = "Algo deu errado",
|
||||
description = "Falha na geração de código para a roupa"
|
||||
},
|
||||
success = {
|
||||
title = "Código de Roupa Gerado",
|
||||
description = "Aqui está o código da sua roupa"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Salvar Outfit Atual",
|
||||
menuDescription = "Salve seu outfit atual como um outfit %s",
|
||||
description = "Salve seu outfit atual",
|
||||
title = "Nomeie seu outfit",
|
||||
managementTitle = "Detalhes do Outfit de Gerenciamento",
|
||||
name = {
|
||||
label = "Nome do Outfit",
|
||||
placeholder = "Outfit muito legal"
|
||||
},
|
||||
gender = {
|
||||
label = "Gênero",
|
||||
male = "Masculino",
|
||||
female = "Feminino"
|
||||
},
|
||||
rank = {
|
||||
label = "Classificação Mínima"
|
||||
},
|
||||
failure = {
|
||||
title = "Falha ao Salvar",
|
||||
description = "Outfit com este nome já existe"
|
||||
},
|
||||
success = {
|
||||
title = "Sucesso",
|
||||
description = "Outfit %s foi salvo"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Atualizar Outfit",
|
||||
description = "Salve sua roupa atual em um outfit existente",
|
||||
failure = {
|
||||
title = "Falha na Atualização",
|
||||
description = "Aquele outfit não existe"
|
||||
},
|
||||
success = {
|
||||
title = "Sucesso",
|
||||
description = "Outfit %s foi atualizado"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Mudar Outfit",
|
||||
description = "Escolha entre seus %s outfits salvos atualmente",
|
||||
pDescription = "Escolha entre seus outfits salvos atualmente",
|
||||
failure = {
|
||||
title = "Algo deu errado",
|
||||
description = "O outfit que você está tentando mudar não tem uma aparência base",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Deletar roupa",
|
||||
description = "Deletar uma roupa salva %s",
|
||||
mDescription = "Deletar qualquer roupa salva",
|
||||
item = {
|
||||
title = 'Deletar "%s"',
|
||||
description = "Modelo: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Sucesso",
|
||||
description = "Roupa deletada"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Gerenciar roupas %s"
|
||||
},
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Roupas de Trabalho",
|
||||
description = "Escolha entre suas roupas de trabalho"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Voltar",
|
||||
title = "Vestuário",
|
||||
outfitsTitle = "Roupas do Jogador",
|
||||
clothingShopTitle = "Loja de Roupas",
|
||||
barberShopTitle = "Barbearia",
|
||||
tattooShopTitle = "Estúdio de Tatuagem",
|
||||
surgeonShopTitle = "Cirurgião Plástico"
|
||||
},
|
||||
clothing = {
|
||||
title = "Comprar Roupas - $%d",
|
||||
titleNoPrice = "Mudar Roupas",
|
||||
options = {
|
||||
title = "👔 | Opções da loja de roupas",
|
||||
description = "Escolha entre uma ampla variedade de itens para vestir"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Opções de roupas",
|
||||
civilian = {
|
||||
title = "Roupa Civil",
|
||||
description = "Vista suas roupas"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Recarrega seu personagem",
|
||||
failure = {
|
||||
title = "Erro",
|
||||
description = "Você não pode usar reloadskin agora"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Remove todos os acessórios presos à entidade",
|
||||
failure = {
|
||||
title = "Erro",
|
||||
description = "Você não pode usar clearstuckprops agora"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Abrir / Dar Menu de Roupas",
|
||||
failure = {
|
||||
title = "Erro",
|
||||
description = "Jogador não está online"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Abre o Menu de Trajes de Trabalho"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Abre o menu de trajes de gangue"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Abre o menu de roupas gerenciadas pelo chefe"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Loja de Roupas - Preço: $%d",
|
||||
barber = "Barbeiro - Preço: $%d",
|
||||
tattoo = "Tatuador - Preço: $%d",
|
||||
surgeon = "Cirurgião Plástico - Preço: $%d",
|
||||
clothingRoom = "Sala de Roupas",
|
||||
playerOutfitRoom = "Trajes"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Sucesso",
|
||||
description = "Migração finalizada. %s skins migradas",
|
||||
descriptionSingle = "Pele migrada"
|
||||
},
|
||||
skip = {
|
||||
title = "Informação",
|
||||
description = "Pele ignorada"
|
||||
},
|
||||
typeError = {
|
||||
title = "Erro",
|
||||
description = "Tipo inválido"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Sucesso",
|
||||
description = "Comprado tatuagem %s por %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Falha na aplicação da tatuagem",
|
||||
description = "Você não tem dinheiro suficiente!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Sucesso",
|
||||
description = "Deu $%s para %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploração!",
|
||||
description = "Você não tinha dinheiro suficiente! Tentou explorar o sistema!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/ro-RO.lua
Normal file
367
resources/[core]/illenium-appearance/locales/ro-RO.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["ro-RO"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "Salveaza modificarile",
|
||||
description = "Arati mult mai bine acum :)"
|
||||
},
|
||||
exit = {
|
||||
title = "Iesi din meniul de customizare",
|
||||
description = "Nicio schimbare nu o sa se salveze"
|
||||
},
|
||||
accept = "Da",
|
||||
decline = "Nu"
|
||||
},
|
||||
ped = {
|
||||
title = "Ped",
|
||||
model = "Model"
|
||||
},
|
||||
headBlend = {
|
||||
title = "Aparente",
|
||||
shape = {
|
||||
title = "Fata",
|
||||
firstOption = "Tata",
|
||||
secondOption = "Mama",
|
||||
mix = "Mix"
|
||||
},
|
||||
skin = {
|
||||
title = "Pielea",
|
||||
firstOption = "Tata",
|
||||
secondOption = "Mama",
|
||||
mix = "Mix"
|
||||
},
|
||||
race = {
|
||||
title = "Rasă",
|
||||
shape = "Fata",
|
||||
skin = "Pielea",
|
||||
mix = "Mix"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "Optiuni fizionomie",
|
||||
nose = {
|
||||
title = "Nas",
|
||||
width = "Latime",
|
||||
height = "Inaltime",
|
||||
size = "Marime",
|
||||
boneHeight = "Inaltimea nasului",
|
||||
boneTwist = "Rasucire nasului",
|
||||
peakHeight = "Varful nasului"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "Sprancene",
|
||||
height = "Inaltime",
|
||||
depth = "Adancime"
|
||||
},
|
||||
cheeks = {
|
||||
title = "Pometi",
|
||||
boneHeight = "Inaltime",
|
||||
boneWidth = "Latime",
|
||||
width = "Latime pometi"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "Ochi si gura",
|
||||
eyesOpening = "Deschidere ochi",
|
||||
lipsThickness = "Grosime buze"
|
||||
},
|
||||
jaw = {
|
||||
title = "Falca",
|
||||
width = "Latime",
|
||||
size = "Marime"
|
||||
},
|
||||
chin = {
|
||||
title = "Barbie",
|
||||
lowering = "Latime",
|
||||
length = "Lungime",
|
||||
size = "Marime",
|
||||
hole = "Marime gropita"
|
||||
},
|
||||
neck = {
|
||||
title = "Gatul",
|
||||
thickness = "Grosimea gatului"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "Optiuni aspect",
|
||||
hair = {
|
||||
title = "Par",
|
||||
style = "Stil",
|
||||
color = "Culoare",
|
||||
highlight = "Highlight",
|
||||
texture = "Textura",
|
||||
fade = "Fade (tuns pierdut sau ras)"
|
||||
},
|
||||
opacity = "Opacitate",
|
||||
style = "Stil",
|
||||
color = "Culoare",
|
||||
secondColor = "A doua culoare",
|
||||
blemishes = "Pete piele",
|
||||
beard = "Barba",
|
||||
eyebrows = "Sprancene",
|
||||
ageing = "Varsta",
|
||||
makeUp = "Machiaj",
|
||||
blush = "Fard",
|
||||
complexion = "Complexitate",
|
||||
sunDamage = "Daune solare",
|
||||
lipstick = "Ruj",
|
||||
moleAndFreckles = "Alunite si pistrui",
|
||||
chestHair = "Parul de pe piept",
|
||||
bodyBlemishes = "Pete corporale",
|
||||
eyeColor = "Culoare ochi"
|
||||
},
|
||||
components = {
|
||||
title = "Optiuni haine",
|
||||
drawable = "Purtabile",
|
||||
texture = "Texturi",
|
||||
mask = "Masca",
|
||||
upperBody = "Maini",
|
||||
lowerBody = "Picioare",
|
||||
bags = "Genti si parasute",
|
||||
shoes = "Incaltaminte",
|
||||
scarfAndChains = "Esarfe (gat) si optionale",
|
||||
shirt = "Tricou",
|
||||
bodyArmor = "Veste antiglont",
|
||||
decals = "Imprimeuri",
|
||||
jackets = "Jachete",
|
||||
head = "Cap"
|
||||
},
|
||||
props = {
|
||||
title = "Optiuni recuzita",
|
||||
drawable = "Purtabile",
|
||||
texture = "Texturi",
|
||||
hats = "Sepci, caciuli si casti",
|
||||
glasses = "Ochelari",
|
||||
ear = "Pentru urechi",
|
||||
watches = "Ceasuri",
|
||||
bracelets = "Bratari"
|
||||
},
|
||||
tattoos = {
|
||||
title = "Optiuni tatuaje",
|
||||
items = {
|
||||
ZONE_TORSO = "Pentru corp (fata-spate)",
|
||||
ZONE_HEAD = "Pentru cap",
|
||||
ZONE_LEFT_ARM = "Mana stanga",
|
||||
ZONE_RIGHT_ARM = "Mana dreapta",
|
||||
ZONE_LEFT_LEG = "Piciorul stang",
|
||||
ZONE_RIGHT_LEG = "Piciorul drept"
|
||||
},
|
||||
apply = "Aplica",
|
||||
delete = "Sterge",
|
||||
deleteAll = "Sterge toate tatuajele",
|
||||
opacity = "Opacitate"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "Gestionarea outfit-urilor",
|
||||
jobText = "Gestionați outfit-urile pentru job",
|
||||
gangText = "Gestionați outfit-urile pentru bandă"
|
||||
},
|
||||
cancelled = {
|
||||
title = "Personalizare anulată",
|
||||
description = "Personalizarea nu a fost salvată"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "Introduceți codul outfit-ului",
|
||||
menuTitle = "Importați outfit-ul",
|
||||
description = "Importați un outfit folosind un cod de distribuire",
|
||||
name = {
|
||||
label = "Denumiți outfit-ul",
|
||||
placeholder = "Un outfit frumos",
|
||||
default = "Outfit importat"
|
||||
},
|
||||
code = {
|
||||
label = "Codul outfit-ului"
|
||||
},
|
||||
success = {
|
||||
title = "Outfit-ul a fost importat",
|
||||
description = "Acum puteți schimba outfit-ul folosind meniul pentru outfit-uri"
|
||||
},
|
||||
failure = {
|
||||
title = "Eșec la importare",
|
||||
description = "Cod de outfit invalid"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "Generează cod pentru outfit",
|
||||
description = "Generează un cod pentru a distribui outfit-ul",
|
||||
failure = {
|
||||
title = "Ceva nu a mers bine",
|
||||
description = "Generarea codului a eșuat pentru outfit"
|
||||
},
|
||||
success = {
|
||||
title = "Codul outfit-ului a fost generat",
|
||||
description = "Aici este codul pentru outfit-ul tău"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "Salvează outfit-ul curent",
|
||||
menuDescription = "Salvează outfit-ul tău curent ca outfit %s",
|
||||
description = "Salvează outfit-ul tău curent",
|
||||
title = "Denumiți outfit-ul",
|
||||
managementTitle = "Detalii de management outfit",
|
||||
name = {
|
||||
label = "Nume outfit",
|
||||
placeholder = "Outfit foarte fain"
|
||||
},
|
||||
gender = {
|
||||
label = "Gen",
|
||||
male = "Bărbat",
|
||||
female = "Femeie"
|
||||
},
|
||||
rank = {
|
||||
label = "Rang minim"
|
||||
},
|
||||
failure = {
|
||||
title = "Salvarea a eșuat",
|
||||
description = "Outfit-ul cu acest nume deja există"
|
||||
},
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Outfit-ul %s a fost salvat"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "Actualizare outfit",
|
||||
description = "Salvați îmbrăcămintea actuală într-un outfit existent",
|
||||
failure = {
|
||||
title = "Actualizare eșuată",
|
||||
description = "Acel outfit nu există"
|
||||
},
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Outfit-ul %s a fost actualizat"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "Schimbă outfit",
|
||||
description = "Alegeți oricare dintre outfit-urile %s salvate",
|
||||
pDescription = "Alegeți oricare dintre outfit-urile salvate",
|
||||
failure = {
|
||||
title = "Ceva nu a mers bine",
|
||||
description = "Outfit-ul către care încercați să faceți schimb nu are un aspect de bază",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "Șterge outfit",
|
||||
description = "Ștergeți un outfit %s salvat",
|
||||
mDescription = "Ștergeți oricare dintre outfit-urile salvate",
|
||||
item = {
|
||||
title = 'Ștergeți "%s"',
|
||||
description = "Model: %s%s"
|
||||
},
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Outfit-ul a fost șters"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | Gestionați outfit-urile %s"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "Outfit-uri de serviciu",
|
||||
description = "Alegeți oricare din outfit-urile de serviciu"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "Înapoi",
|
||||
title = "Cameră pentru haine",
|
||||
outfitsTitle = "Outfit-uri ale jucătorului",
|
||||
clothingShopTitle = "Magazin de haine",
|
||||
barberShopTitle = "Frizerie",
|
||||
tattooShopTitle = "Magazin de tatuaje",
|
||||
surgeonShopTitle = "Cabinet de chirurgie plastică"
|
||||
},
|
||||
clothing = {
|
||||
title = "Cumpără haine - %d$",
|
||||
titleNoPrice = "Schimbă hainele",
|
||||
options = {
|
||||
title = "👔 | Opțiuni magazin de haine",
|
||||
description = "Alege dintr-o gamă largă de articole de îmbrăcăminte"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | Opțiuni outfit-uri",
|
||||
civilian = {
|
||||
title = "Outfit civil",
|
||||
description = "Pune-ți hainele"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "Reîncarcă personajul",
|
||||
failure = {
|
||||
title = "Eroare",
|
||||
description = "Nu poți folosi reloadskin în acest moment"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "Înlătură toate obiectele atașate de entitate",
|
||||
failure = {
|
||||
title = "Eroare",
|
||||
description = "Nu poți folosi clearstuckprops în acest moment"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "Deschide / Dă meniul pentru haine",
|
||||
failure = {
|
||||
title = "Eroare",
|
||||
description = "Jucătorul nu este conectat"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "Deschide meniul ținute pentru locuri de muncă"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "Deschide meniul Gang Outfits"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "Deschide meniul pentru outfit-urile administrate de șef"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "Magazin de haine - Preț: %d$",
|
||||
barber = "Frizerie - Preț: %d$",
|
||||
tattoo = "Magazin de tatuaje - Preț: %d$",
|
||||
surgeon = "Cabinet de chirurgie plastică - Preț: %d$",
|
||||
clothingRoom = "Cameră pentru haine",
|
||||
playerOutfitRoom = "Outfit-uri"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Migrația s-a încheiat. %s skin-uri au fost migrați",
|
||||
descriptionSingle = "Un singur skin migrat"
|
||||
},
|
||||
skip = {
|
||||
title = "Informație",
|
||||
description = "Skin omis"
|
||||
},
|
||||
typeError = {
|
||||
title = "Eroare",
|
||||
description = "Tip invalid"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "Ai cumpărat tatuajul %s pentru %s$"
|
||||
},
|
||||
failure = {
|
||||
title = "Aplicarea tatuajului a eșuat",
|
||||
description = "Nu ai destui bani!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "Succes",
|
||||
description = "I-ai dat %s$ lui %s!"
|
||||
},
|
||||
failure = {
|
||||
title = "Exploit!",
|
||||
description = "Nu ai destui bani! Ai încercat să exploatezi sistemul!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/zh-CN.lua
Normal file
367
resources/[core]/illenium-appearance/locales/zh-CN.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["zh-CN"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "保存定制",
|
||||
description = "您还是那么丑"
|
||||
},
|
||||
exit = {
|
||||
title = "退出定制",
|
||||
description = "不会保存任何更改"
|
||||
},
|
||||
accept = "是",
|
||||
decline = "否"
|
||||
},
|
||||
ped = {
|
||||
title = "角色",
|
||||
model = "模型"
|
||||
},
|
||||
headBlend = {
|
||||
title = "遗传",
|
||||
shape = {
|
||||
title = "面部",
|
||||
firstOption = "父亲",
|
||||
secondOption = "母亲",
|
||||
mix = "混合"
|
||||
},
|
||||
skin = {
|
||||
title = "肤色",
|
||||
firstOption = "父亲",
|
||||
secondOption = "母亲",
|
||||
mix = "混合"
|
||||
},
|
||||
race = {
|
||||
title = "种族",
|
||||
shape = "形状",
|
||||
skin = "肤色",
|
||||
mix = "混合"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "面部特征",
|
||||
nose = {
|
||||
title = "鼻子",
|
||||
width = "宽度",
|
||||
height = "高度",
|
||||
size = "大小",
|
||||
boneHeight = "骨骼高度",
|
||||
boneTwist = "骨骼扭曲",
|
||||
peakHeight = "峰值高度"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "眉毛",
|
||||
height = "高度",
|
||||
depth = "深度"
|
||||
},
|
||||
cheeks = {
|
||||
title = "脸颊",
|
||||
boneHeight = "骨骼高度",
|
||||
boneWidth = "骨骼宽度",
|
||||
width = "宽度"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "眼睛和嘴巴",
|
||||
eyesOpening = "眼睛张开",
|
||||
lipsThickness = "嘴唇厚度"
|
||||
},
|
||||
jaw = {
|
||||
title = "下巴",
|
||||
width = "宽度",
|
||||
size = "大小"
|
||||
},
|
||||
chin = {
|
||||
title = "下颚",
|
||||
lowering = "下降",
|
||||
length = "长度",
|
||||
size = "大小",
|
||||
hole = "孔的大小"
|
||||
},
|
||||
neck = {
|
||||
title = "脖子",
|
||||
thickness = "厚度"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "外貌",
|
||||
hair = {
|
||||
title = "发型",
|
||||
style = "风格",
|
||||
color = "颜色",
|
||||
highlight = "亮色",
|
||||
texture = "贴图",
|
||||
fade = "淡出"
|
||||
},
|
||||
opacity = "透明度",
|
||||
style = "风格",
|
||||
color = "颜色",
|
||||
secondColor = "次要颜色",
|
||||
blemishes = "瑕疵",
|
||||
beard = "胡须",
|
||||
eyebrows = "眉毛",
|
||||
ageing = "衰老",
|
||||
makeUp = "化妆",
|
||||
blush = "腮红",
|
||||
complexion = "肤色",
|
||||
sunDamage = "晒伤",
|
||||
lipstick = "口红",
|
||||
moleAndFreckles = "痣和雀斑",
|
||||
chestHair = "胸毛",
|
||||
bodyBlemishes = "身体瑕疵",
|
||||
eyeColor = "眼睛颜色"
|
||||
},
|
||||
components = {
|
||||
title = "服装",
|
||||
drawable = "服装编号",
|
||||
texture = "贴图",
|
||||
mask = "面具",
|
||||
upperBody = "上身",
|
||||
lowerBody = "下身",
|
||||
bags = "背包和降落伞",
|
||||
shoes = "鞋子",
|
||||
scarfAndChains = "围巾和链子",
|
||||
shirt = "衬衫",
|
||||
bodyArmor = "防弹衣",
|
||||
decals = "贴花",
|
||||
jackets = "夹克",
|
||||
head = "头部"
|
||||
},
|
||||
props = {
|
||||
title = "挂饰",
|
||||
drawable = "挂饰编号",
|
||||
texture = "贴图",
|
||||
hats = "帽子和头盔",
|
||||
glasses = "眼镜",
|
||||
ear = "耳朵",
|
||||
watches = "手表",
|
||||
bracelets = "手镯"
|
||||
},
|
||||
tattoos = {
|
||||
title = "纹身",
|
||||
items = {
|
||||
ZONE_TORSO = "躯干",
|
||||
ZONE_HEAD = "头部",
|
||||
ZONE_LEFT_ARM = "左臂",
|
||||
ZONE_RIGHT_ARM = "右臂",
|
||||
ZONE_LEFT_LEG = "左腿",
|
||||
ZONE_RIGHT_LEG = "右腿"
|
||||
},
|
||||
apply = "应用",
|
||||
delete = "移除",
|
||||
deleteAll = "移除所有纹身",
|
||||
opacity = "透明度"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "服装管理",
|
||||
jobText = "管理职业服装",
|
||||
gangText = "管理帮派服装"
|
||||
},
|
||||
cancelled = {
|
||||
title = "取消定制",
|
||||
description = "未保存定制"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "输入服装代码",
|
||||
menuTitle = "导入服装",
|
||||
description = "从共享代码导入服装",
|
||||
name = {
|
||||
label = "命名服装",
|
||||
placeholder = "一个不错的服装",
|
||||
default = "导入的服装"
|
||||
},
|
||||
code = {
|
||||
label = "服装代码"
|
||||
},
|
||||
success = {
|
||||
title = "导入服装成功",
|
||||
description = "现在您可以使用服装菜单切换到该服装"
|
||||
},
|
||||
failure = {
|
||||
title = "导入失败",
|
||||
description = "无效的服装代码"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "生成服装代码",
|
||||
description = "生成一个共享的服装代码",
|
||||
failure = {
|
||||
title = "出现问题",
|
||||
description = "生成服装代码失败"
|
||||
},
|
||||
success = {
|
||||
title = "生成服装代码成功",
|
||||
description = "这是您的服装代码"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "保存当前服装",
|
||||
menuDescription = "将当前服装保存为%s服装",
|
||||
description = "保存当前服装",
|
||||
title = "命名您的服装",
|
||||
managementTitle = "管理服装细节",
|
||||
name = {
|
||||
label = "服装名称",
|
||||
placeholder = "非常酷的服装"
|
||||
},
|
||||
gender = {
|
||||
label = "性别",
|
||||
male = "男性",
|
||||
female = "女性"
|
||||
},
|
||||
rank = {
|
||||
label = "最低等级"
|
||||
},
|
||||
failure = {
|
||||
title = "保存失败",
|
||||
description = "同名的服装已存在"
|
||||
},
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "已保存服装%s"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "更新服装",
|
||||
description = "将当前服装保存到现有的服装中",
|
||||
failure = {
|
||||
title = "更新失败",
|
||||
description = "该服装不存在"
|
||||
},
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "已更新服装%s"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "切换服装",
|
||||
description = "从当前保存的%s服装中选择",
|
||||
pDescription = "从当前保存的服装中选择",
|
||||
failure = {
|
||||
title = "出现问题",
|
||||
description = "您尝试切换到的服装没有基本外观",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "删除服装",
|
||||
description = "删除保存的%s服装",
|
||||
mDescription = "删除任意保存的服装",
|
||||
item = {
|
||||
title = '删除"%s"',
|
||||
description = "模型:%s%s"
|
||||
},
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "已删除服装"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | 管理%s服装"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "工作服装",
|
||||
description = "从您的工作服装中选择"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "返回",
|
||||
title = "更衣室",
|
||||
outfitsTitle = "玩家服装",
|
||||
clothingShopTitle = "服装商店",
|
||||
barberShopTitle = "理发店",
|
||||
tattooShopTitle = "纹身店",
|
||||
surgeonShopTitle = "整容店"
|
||||
},
|
||||
clothing = {
|
||||
title = "购买服装 - $%d",
|
||||
titleNoPrice = "更换服装",
|
||||
options = {
|
||||
title = "👔 | 服装商店选项",
|
||||
description = "从各种各样的服装中选择"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | 服装选项",
|
||||
civilian = {
|
||||
title = "民用服装",
|
||||
description = "穿上您的衣服"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "重新加载您的角色",
|
||||
failure = {
|
||||
title = "错误",
|
||||
description = "您现在不能重新加载角色"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "移除附加到实体的所有挂饰",
|
||||
failure = {
|
||||
title = "错误",
|
||||
description = "您现在不能移除挂饰"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "打开/给予服装菜单",
|
||||
failure = {
|
||||
title = "错误",
|
||||
description = "玩家不在线"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "打开工作服装菜单"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "打开帮派服装菜单"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "打开老板管理的服装菜单"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "服装商店 - 价格:%d$",
|
||||
barber = "理发店 - 价格:%d$",
|
||||
tattoo = "纹身店 - 价格:%d$",
|
||||
surgeon = "整容店 - 价格:%d$",
|
||||
clothingRoom = "更衣室",
|
||||
playerOutfitRoom = "服装"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "迁移完成。已迁移%s个外观",
|
||||
descriptionSingle = "已迁移的外观"
|
||||
},
|
||||
skip = {
|
||||
title = "信息",
|
||||
description = "跳过外观编辑"
|
||||
},
|
||||
typeError = {
|
||||
title = "错误",
|
||||
description = "无效的类型"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "购买%s纹身,价格%s$"
|
||||
},
|
||||
failure = {
|
||||
title = "纹身应用失败",
|
||||
description = "您没有足够的钱!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "将%s$给予%s!"
|
||||
},
|
||||
failure = {
|
||||
title = "利用漏洞!",
|
||||
description = "作弊夸技巧,贫贱露真貌,钱少心更扰,空赢世人笑。"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
367
resources/[core]/illenium-appearance/locales/zh-TW.lua
Normal file
367
resources/[core]/illenium-appearance/locales/zh-TW.lua
Normal file
@ -0,0 +1,367 @@
|
||||
Locales["zh-TW"] = {
|
||||
UI = {
|
||||
modal = {
|
||||
save = {
|
||||
title = "儲存客製化",
|
||||
description = "您還是一樣醜"
|
||||
},
|
||||
exit = {
|
||||
title = "退出客製化",
|
||||
description = "不會儲存任何更改"
|
||||
},
|
||||
accept = "是",
|
||||
decline = "否"
|
||||
},
|
||||
ped = {
|
||||
title = "角色",
|
||||
model = "模型"
|
||||
},
|
||||
headBlend = {
|
||||
title = "遺傳",
|
||||
shape = {
|
||||
title = "臉部",
|
||||
firstOption = "父親",
|
||||
secondOption = "母親",
|
||||
mix = "混合"
|
||||
},
|
||||
skin = {
|
||||
title = "膚色",
|
||||
firstOption = "父親",
|
||||
secondOption = "母親",
|
||||
mix = "混合"
|
||||
},
|
||||
race = {
|
||||
title = "種族",
|
||||
shape = "形狀",
|
||||
skin = "膚色",
|
||||
mix = "混合"
|
||||
}
|
||||
},
|
||||
faceFeatures = {
|
||||
title = "臉部特徵",
|
||||
nose = {
|
||||
title = "鼻子",
|
||||
width = "寬度",
|
||||
height = "高度",
|
||||
size = "大小",
|
||||
boneHeight = "骨骼高度",
|
||||
boneTwist = "骨骼扭曲",
|
||||
peakHeight = "峰值高度"
|
||||
},
|
||||
eyebrows = {
|
||||
title = "眉毛",
|
||||
height = "高度",
|
||||
depth = "深度"
|
||||
},
|
||||
cheeks = {
|
||||
title = "臉頰",
|
||||
boneHeight = "骨骼高度",
|
||||
boneWidth = "骨骼寬度",
|
||||
width = "寬度"
|
||||
},
|
||||
eyesAndMouth = {
|
||||
title = "眼睛和嘴巴",
|
||||
eyesOpening = "眼睛張開",
|
||||
lipsThickness = "嘴唇厚度"
|
||||
},
|
||||
jaw = {
|
||||
title = "下巴",
|
||||
width = "寬度",
|
||||
size = "大小"
|
||||
},
|
||||
chin = {
|
||||
title = "下顎",
|
||||
lowering = "下降",
|
||||
length = "長度",
|
||||
size = "大小",
|
||||
hole = "孔的大小"
|
||||
},
|
||||
neck = {
|
||||
title = "脖子",
|
||||
thickness = "厚度"
|
||||
}
|
||||
},
|
||||
headOverlays = {
|
||||
title = "外貌",
|
||||
hair = {
|
||||
title = "髮型",
|
||||
style = "風格",
|
||||
color = "顏色",
|
||||
highlight = "亮色",
|
||||
texture = "貼圖",
|
||||
fade = "淡出"
|
||||
},
|
||||
opacity = "透明度",
|
||||
style = "風格",
|
||||
color = "顏色",
|
||||
secondColor = "次要顏色",
|
||||
blemishes = "瑕疵",
|
||||
beard = "鬍鬚",
|
||||
eyebrows = "眉毛",
|
||||
ageing = "衰老",
|
||||
makeUp = "化妝",
|
||||
blush = "腮紅",
|
||||
complexion = "膚色",
|
||||
sunDamage = "曬傷",
|
||||
lipstick = "口紅",
|
||||
moleAndFreckles = "痣和雀斑",
|
||||
chestHair = "胸毛",
|
||||
bodyBlemishes = "身體瑕疵",
|
||||
eyeColor = "眼睛顏色"
|
||||
},
|
||||
components = {
|
||||
title = "服裝",
|
||||
drawable = "服裝編號",
|
||||
texture = "貼圖",
|
||||
mask = "面具",
|
||||
upperBody = "上身",
|
||||
lowerBody = "下身",
|
||||
bags = "背包和降落傘",
|
||||
shoes = "鞋子",
|
||||
scarfAndChains = "圍巾和鏈子",
|
||||
shirt = "襯衫",
|
||||
bodyArmor = "防彈衣",
|
||||
decals = "貼花",
|
||||
jackets = "夾克",
|
||||
head = "頭部"
|
||||
},
|
||||
props = {
|
||||
title = "掛飾",
|
||||
drawable = "掛飾編號",
|
||||
texture = "貼圖",
|
||||
hats = "帽子和頭盔",
|
||||
glasses = "眼鏡",
|
||||
ear = "耳朵",
|
||||
watches = "手錶",
|
||||
bracelets = "手鐲"
|
||||
},
|
||||
tattoos = {
|
||||
title = "紋身",
|
||||
items = {
|
||||
ZONE_TORSO = "軀幹",
|
||||
ZONE_HEAD = "頭部",
|
||||
ZONE_LEFT_ARM = "左臂",
|
||||
ZONE_RIGHT_ARM = "右臂",
|
||||
ZONE_LEFT_LEG = "左腿",
|
||||
ZONE_RIGHT_LEG = "右腿"
|
||||
},
|
||||
apply = "應用",
|
||||
delete = "移除",
|
||||
deleteAll = "移除所有紋身",
|
||||
opacity = "透明度"
|
||||
}
|
||||
},
|
||||
outfitManagement = {
|
||||
title = "服裝管理",
|
||||
jobText = "管理職業服裝",
|
||||
gangText = "管理幫派服裝"
|
||||
},
|
||||
cancelled = {
|
||||
title = "取消客製化",
|
||||
description = "未儲存客製化"
|
||||
},
|
||||
outfits = {
|
||||
import = {
|
||||
title = "輸入服裝代碼",
|
||||
menuTitle = "匯入服裝",
|
||||
description = "從共享代碼匯入服裝",
|
||||
name = {
|
||||
label = "命名服裝",
|
||||
placeholder = "一個不錯的服裝",
|
||||
default = "匯入的服裝"
|
||||
},
|
||||
code = {
|
||||
label = "服裝代碼"
|
||||
},
|
||||
success = {
|
||||
title = "匯入服裝成功",
|
||||
description = "現在您可以使用服裝菜單切換到該服裝"
|
||||
},
|
||||
failure = {
|
||||
title = "匯入失敗",
|
||||
description = "無效的服裝代碼"
|
||||
}
|
||||
},
|
||||
generate = {
|
||||
title = "生成服裝代碼",
|
||||
description = "生成一個共享的服裝代碼",
|
||||
failure = {
|
||||
title = "出現問題",
|
||||
description = "生成服裝代碼失敗"
|
||||
},
|
||||
success = {
|
||||
title = "生成服裝代碼成功",
|
||||
description = "這是您的服裝代碼"
|
||||
}
|
||||
},
|
||||
save = {
|
||||
menuTitle = "儲存當前服裝",
|
||||
menuDescription = "將當前服裝儲存為%s服裝",
|
||||
description = "儲存當前服裝",
|
||||
title = "命名您的服裝",
|
||||
managementTitle = "管理服裝細節",
|
||||
name = {
|
||||
label = "服裝名稱",
|
||||
placeholder = "非常酷的服裝"
|
||||
},
|
||||
gender = {
|
||||
label = "性別",
|
||||
male = "男性",
|
||||
female = "女性"
|
||||
},
|
||||
rank = {
|
||||
label = "最低等級"
|
||||
},
|
||||
failure = {
|
||||
title = "儲存失敗",
|
||||
description = "同名的服裝已存在"
|
||||
},
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "已儲存服裝%s"
|
||||
}
|
||||
},
|
||||
update = {
|
||||
title = "更新服裝",
|
||||
description = "將當前服裝儲存到現有的服裝中",
|
||||
failure = {
|
||||
title = "更新失敗",
|
||||
description = "該服裝不存在"
|
||||
},
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "已更新服裝%s"
|
||||
}
|
||||
},
|
||||
change = {
|
||||
title = "切換服裝",
|
||||
description = "從當前儲存的%s服裝中選擇",
|
||||
pDescription = "從當前儲存的服裝中選擇",
|
||||
failure = {
|
||||
title = "出現問題",
|
||||
description = "您嘗試切換到的服裝沒有基本外觀",
|
||||
}
|
||||
},
|
||||
delete = {
|
||||
title = "刪除服裝",
|
||||
description = "刪除儲存的%s服裝",
|
||||
mDescription = "刪除任意儲存的服裝",
|
||||
item = {
|
||||
title = '刪除"%s"',
|
||||
description = "模型:%s%s"
|
||||
},
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "已刪除服裝"
|
||||
}
|
||||
},
|
||||
manage = {
|
||||
title = "👔 | 管理%s服裝"
|
||||
}
|
||||
},
|
||||
jobOutfits = {
|
||||
title = "工作服裝",
|
||||
description = "從您的工作服裝中選擇"
|
||||
},
|
||||
menu = {
|
||||
returnTitle = "返回",
|
||||
title = "更衣室",
|
||||
outfitsTitle = "玩家服裝",
|
||||
clothingShopTitle = "服裝商店",
|
||||
barberShopTitle = "理髮店",
|
||||
tattooShopTitle = "紋身店",
|
||||
surgeonShopTitle = "整容店"
|
||||
},
|
||||
clothing = {
|
||||
title = "購買服裝 - $%d",
|
||||
titleNoPrice = "更換服裝",
|
||||
options = {
|
||||
title = "👔 | 服裝商店選項",
|
||||
description = "從各種各樣的服裝中選擇"
|
||||
},
|
||||
outfits = {
|
||||
title = "👔 | 服裝選項",
|
||||
civilian = {
|
||||
title = "民用服裝",
|
||||
description = "穿上您的衣服"
|
||||
}
|
||||
}
|
||||
},
|
||||
commands = {
|
||||
reloadskin = {
|
||||
title = "重新加載您的角色",
|
||||
failure = {
|
||||
title = "錯誤",
|
||||
description = "您現在不能重新加載角色"
|
||||
}
|
||||
},
|
||||
clearstuckprops = {
|
||||
title = "移除附加到實體的所有道具",
|
||||
failure = {
|
||||
title = "錯誤",
|
||||
description = "您現在不能移除掛飾"
|
||||
}
|
||||
},
|
||||
pedmenu = {
|
||||
title = "打開/給予服裝菜單",
|
||||
failure = {
|
||||
title = "錯誤",
|
||||
description = "玩家不在線"
|
||||
}
|
||||
},
|
||||
joboutfits = {
|
||||
title = "打開工作服裝菜單"
|
||||
},
|
||||
gangoutfits = {
|
||||
title = "打開幫派服裝菜單"
|
||||
},
|
||||
bossmanagedoutfits = {
|
||||
title = "打開老闆管理的服裝菜單"
|
||||
}
|
||||
},
|
||||
textUI = {
|
||||
clothing = "服裝商店 - 價格:%d$",
|
||||
barber = "理髮店 - 價格:%d$",
|
||||
tattoo = "紋身店 - 價格:%d$",
|
||||
surgeon = "整容店 - 價格:%d$",
|
||||
clothingRoom = "更衣室",
|
||||
playerOutfitRoom = "服裝"
|
||||
},
|
||||
migrate = {
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "遷移完成。已遷移%s個外觀",
|
||||
descriptionSingle = "已遷移的外觀"
|
||||
},
|
||||
skip = {
|
||||
title = "信息",
|
||||
description = "跳過外觀編輯"
|
||||
},
|
||||
typeError = {
|
||||
title = "錯誤",
|
||||
description = "無效的類型"
|
||||
}
|
||||
},
|
||||
purchase = {
|
||||
tattoo = {
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "購買%s紋身,價格%s$"
|
||||
},
|
||||
failure = {
|
||||
title = "紋身應用失敗",
|
||||
description = "您沒有足夠的錢!"
|
||||
}
|
||||
},
|
||||
store = {
|
||||
success = {
|
||||
title = "成功",
|
||||
description = "將%s$給予%s!"
|
||||
},
|
||||
failure = {
|
||||
title = "利用漏洞!",
|
||||
description = "作弊夸技巧,貧賤露真貌,錢少心更擾,空贏世人笑。"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
Database = {}
|
||||
@ -0,0 +1,5 @@
|
||||
Database.JobGrades = {}
|
||||
|
||||
function Database.JobGrades.GetByJobName(name)
|
||||
return MySQL.query.await("SELECT grade,name,label FROM job_grades WHERE job_name = ?", {name})
|
||||
end
|
||||
@ -0,0 +1,30 @@
|
||||
Database.ManagementOutfits = {}
|
||||
|
||||
function Database.ManagementOutfits.GetAllByJob(type, jobName, gender)
|
||||
local query = "SELECT * FROM management_outfits WHERE type = ? AND job_name = ?"
|
||||
local queryArgs = {type, jobName}
|
||||
|
||||
if gender then
|
||||
query = query .. " AND gender = ?"
|
||||
queryArgs[#queryArgs + 1] = gender
|
||||
end
|
||||
|
||||
return MySQL.query.await(query, queryArgs)
|
||||
end
|
||||
|
||||
function Database.ManagementOutfits.Add(outfitData)
|
||||
return MySQL.insert.await("INSERT INTO management_outfits (job_name, type, minrank, name, gender, model, props, components) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", {
|
||||
outfitData.JobName,
|
||||
outfitData.Type,
|
||||
outfitData.MinRank,
|
||||
outfitData.Name,
|
||||
outfitData.Gender,
|
||||
outfitData.Model,
|
||||
json.encode(outfitData.Props),
|
||||
json.encode(outfitData.Components)
|
||||
})
|
||||
end
|
||||
|
||||
function Database.ManagementOutfits.DeleteByID(id)
|
||||
MySQL.query.await("DELETE FROM management_outfits WHERE id = ?", {id})
|
||||
end
|
||||
@ -0,0 +1,17 @@
|
||||
Database.PlayerOutfitCodes = {}
|
||||
|
||||
function Database.PlayerOutfitCodes.GetByCode(code)
|
||||
return MySQL.single.await("SELECT * FROM player_outfit_codes WHERE code = ?", {code})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfitCodes.GetByOutfitID(outfitID)
|
||||
return MySQL.single.await("SELECT * FROM player_outfit_codes WHERE outfitID = ?", {outfitID})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfitCodes.Add(outfitID, code)
|
||||
return MySQL.insert.await("INSERT INTO player_outfit_codes (outfitid, code) VALUES (?, ?)", {outfitID, code})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfitCodes.DeleteByOutfitID(id)
|
||||
MySQL.query.await("DELETE FROM player_outfit_codes WHERE outfitid = ?", {id})
|
||||
end
|
||||
@ -0,0 +1,36 @@
|
||||
Database.PlayerOutfits = {}
|
||||
|
||||
function Database.PlayerOutfits.GetAllByCitizenID(citizenid)
|
||||
return MySQL.query.await("SELECT * FROM player_outfits WHERE citizenid = ?", {citizenid})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfits.GetByID(id)
|
||||
return MySQL.single.await("SELECT * FROM player_outfits WHERE id = ?", {id})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfits.GetByOutfit(name, citizenid) -- for validate duplicate name before insert
|
||||
return MySQL.single.await("SELECT * FROM player_outfits WHERE outfitname = ? AND citizenid = ?", {name, citizenid})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfits.Add(citizenID, outfitName, model, components, props)
|
||||
return MySQL.insert.await("INSERT INTO player_outfits (citizenid, outfitname, model, components, props) VALUES (?, ?, ?, ?, ?)", {
|
||||
citizenID,
|
||||
outfitName,
|
||||
model,
|
||||
components,
|
||||
props
|
||||
})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfits.Update(outfitID, model, components, props)
|
||||
return MySQL.update.await("UPDATE player_outfits SET model = ?, components = ?, props = ? WHERE id = ?", {
|
||||
model,
|
||||
components,
|
||||
props,
|
||||
outfitID
|
||||
})
|
||||
end
|
||||
|
||||
function Database.PlayerOutfits.DeleteByID(id)
|
||||
MySQL.query.await("DELETE FROM player_outfits WHERE id = ?", {id})
|
||||
end
|
||||
@ -0,0 +1,5 @@
|
||||
Database.Players = {}
|
||||
|
||||
function Database.Players.GetAll()
|
||||
return MySQL.query.await("SELECT * FROM players")
|
||||
end
|
||||
@ -0,0 +1,34 @@
|
||||
Database.PlayerSkins = {}
|
||||
|
||||
function Database.PlayerSkins.UpdateActiveField(citizenID, active)
|
||||
MySQL.update.await("UPDATE playerskins SET active = ? WHERE citizenid = ?", {active, citizenID}) -- Make all the skins inactive / active
|
||||
end
|
||||
|
||||
function Database.PlayerSkins.DeleteByModel(citizenID, model)
|
||||
MySQL.query.await("DELETE FROM playerskins WHERE citizenid = ? AND model = ?", {citizenID, model})
|
||||
end
|
||||
|
||||
function Database.PlayerSkins.Add(citizenID, model, appearance, active)
|
||||
MySQL.insert.await("INSERT INTO playerskins (citizenid, model, skin, active) VALUES (?, ?, ?, ?)", {citizenID, model, appearance, active})
|
||||
end
|
||||
|
||||
function Database.PlayerSkins.GetByCitizenID(citizenID, model)
|
||||
local query = "SELECT skin FROM playerskins WHERE citizenid = ?"
|
||||
local queryArgs = {citizenID}
|
||||
if model ~= nil then
|
||||
query = query .. " AND model = ?"
|
||||
queryArgs[#queryArgs + 1] = model
|
||||
else
|
||||
query = query .. " AND active = ?"
|
||||
queryArgs[#queryArgs + 1] = 1
|
||||
end
|
||||
return MySQL.scalar.await(query, queryArgs)
|
||||
end
|
||||
|
||||
function Database.PlayerSkins.DeleteByCitizenID(citizenID)
|
||||
MySQL.query.await("DELETE FROM playerskins WHERE citizenid = ?", { citizenID })
|
||||
end
|
||||
|
||||
function Database.PlayerSkins.GetAll()
|
||||
return MySQL.query.await("SELECT * FROM playerskins")
|
||||
end
|
||||
@ -0,0 +1,13 @@
|
||||
Database.Users = {}
|
||||
|
||||
function Database.Users.UpdateSkinForUser(citizenID, skin)
|
||||
return MySQL.update.await("UPDATE users SET skin = ? WHERE identifier = ?", {skin, citizenID})
|
||||
end
|
||||
|
||||
function Database.Users.GetSkinByCitizenID(citizenID)
|
||||
return MySQL.single.await("SELECT skin FROM users WHERE identifier = ?", {citizenID})
|
||||
end
|
||||
|
||||
function Database.Users.GetAll()
|
||||
return MySQL.query.await("SELECT * FROM users")
|
||||
end
|
||||
@ -0,0 +1,18 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
local ESX = exports["ui_core"]:getSharedObject()
|
||||
|
||||
ESX.RegisterServerCallback("esx_skin:getPlayerSkin", function(source, cb)
|
||||
local Player = ESX.GetPlayerFromId(source)
|
||||
|
||||
local appearance = Framework.GetAppearance(Player.identifier)
|
||||
|
||||
cb(appearance, {
|
||||
skin_male = Player.job.skin_male,
|
||||
skin_female = Player.job.skin_female
|
||||
})
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:esx:getGradesForJob", function(_, jobName)
|
||||
return Database.JobGrades.GetByJobName(jobName)
|
||||
end)
|
||||
@ -0,0 +1,63 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
local ESX = exports["ui_core"]:getSharedObject()
|
||||
|
||||
function Framework.GetPlayerID(src)
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
if Player then
|
||||
return Player.identifier
|
||||
end
|
||||
end
|
||||
|
||||
function Framework.HasMoney(src, type, money)
|
||||
if type == "cash" then
|
||||
type = "money"
|
||||
end
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
return Player.getAccount(type).money >= money
|
||||
end
|
||||
|
||||
function Framework.RemoveMoney(src, type, money)
|
||||
if type == "cash" then
|
||||
type = "money"
|
||||
end
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
if Player.getAccount(type).money >= money then
|
||||
Player.removeAccountMoney(type, money)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function normalizeGrade(job)
|
||||
job.grade = {
|
||||
level = job.grade
|
||||
}
|
||||
return job
|
||||
end
|
||||
|
||||
function Framework.GetJob(src)
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
return normalizeGrade(Player.getJob())
|
||||
end
|
||||
|
||||
function Framework.GetGang(src)
|
||||
local Player = ESX.GetPlayerFromId(src)
|
||||
return normalizeGrade(Player.getJob())
|
||||
end
|
||||
|
||||
function Framework.SaveAppearance(appearance, citizenID)
|
||||
Database.Users.UpdateSkinForUser(citizenID, json.encode(appearance))
|
||||
end
|
||||
|
||||
function Framework.GetAppearance(citizenID)
|
||||
local user = Database.Users.GetSkinByCitizenID(citizenID)
|
||||
if user then
|
||||
local skin = json.decode(user.skin)
|
||||
if skin then
|
||||
skin.sex = skin.model == "mp_m_freemode_01" and 0 or 1
|
||||
return skin
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
@ -0,0 +1,28 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
if Config.BossManagedOutfits then
|
||||
function isBoss(grades, grade)
|
||||
local highestGrade = grades[1].grade
|
||||
for i = 2, #grades do
|
||||
if grades[i].grade > highestGrade then
|
||||
highestGrade = grades[i].grade
|
||||
end
|
||||
end
|
||||
return highestGrade == grade
|
||||
end
|
||||
lib.addCommand("bossmanagedoutfits", { help = _L("commands.bossmanagedoutfits.title"), }, function(source)
|
||||
local job = Framework.GetJob(source)
|
||||
local grades = Database.JobGrades.GetByJobName(job.name)
|
||||
if not grades then
|
||||
return
|
||||
end
|
||||
|
||||
if not isBoss(grades, job.grade.level) then
|
||||
return
|
||||
end
|
||||
|
||||
TriggerClientEvent("illenium-appearance:client:OutfitManagementMenu", source, {
|
||||
type = "Job"
|
||||
})
|
||||
end)
|
||||
end
|
||||
@ -0,0 +1,156 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
local function tofloat(num)
|
||||
return num + 0.0
|
||||
end
|
||||
|
||||
local function convertSkinToNewFormat(oldSkin, gender)
|
||||
local skin = {
|
||||
components = Framework.ConvertComponents(oldSkin),
|
||||
eyeColor = oldSkin.eye_color,
|
||||
faceFeatures = {
|
||||
chinBoneLenght = tofloat((oldSkin.chin_2 or 0) / 10),
|
||||
noseBoneTwist = tofloat((oldSkin.nose_6 or 0) / 10),
|
||||
nosePeakHigh = tofloat((oldSkin.nose_2 or 0) / 10),
|
||||
jawBoneWidth = tofloat((oldSkin.jaw_1 or 0) / 10),
|
||||
cheeksWidth = tofloat((oldSkin.cheeks_3 or 0) / 10),
|
||||
eyeBrownHigh = tofloat((oldSkin.eyebrows_5 or 0) / 10),
|
||||
chinHole = tofloat((oldSkin.chin_4 or 0) / 10),
|
||||
jawBoneBackSize = tofloat((oldSkin.jaw_2 or 0) / 10),
|
||||
eyesOpening = tofloat((oldSkin.eye_squint or 0) / 10),
|
||||
lipsThickness = tofloat((oldSkin.lip_thickness or 0) / 10),
|
||||
nosePeakSize = tofloat((oldSkin.nose_3 or 0) / 10),
|
||||
eyeBrownForward = tofloat((oldSkin.eyebrows_6 or 0) / 10),
|
||||
neckThickness = tofloat((oldSkin.neck_thickness or 0) / 10),
|
||||
chinBoneSize = tofloat((oldSkin.chin_3 or 0) / 10),
|
||||
chinBoneLowering = tofloat((oldSkin.chin_1 or 0) / 10),
|
||||
cheeksBoneWidth = tofloat((oldSkin.cheeks_2 or 0) / 10),
|
||||
nosePeakLowering = tofloat((oldSkin.nose_5 or 0) / 10),
|
||||
noseBoneHigh = tofloat((oldSkin.nose_4 or 0) / 10),
|
||||
cheeksBoneHigh = tofloat((oldSkin.cheeks_1 or 0) / 10),
|
||||
noseWidth = tofloat((oldSkin.nose_1 or 0) / 10)
|
||||
},
|
||||
hair = {
|
||||
highlight = oldSkin.hair_color_2 or 0,
|
||||
texture = oldSkin.hair_2 or 0,
|
||||
style = oldSkin.hair_1 or 0,
|
||||
color = oldSkin.hair_color_1 or 0
|
||||
},
|
||||
headBlend = {
|
||||
thirdMix = 0,
|
||||
skinSecond = oldSkin.dad or 0,
|
||||
skinMix = tofloat((oldSkin.skin_md_weight or 0) / 100),
|
||||
skinThird = 0,
|
||||
shapeFirst = oldSkin.mom or 0,
|
||||
shapeThird = 0,
|
||||
shapeMix = tofloat((oldSkin.face_md_weight or 0) / 100),
|
||||
shapeSecond = oldSkin.dad or 0,
|
||||
skinFirst = oldSkin.mom or 0
|
||||
},
|
||||
headOverlays = {
|
||||
complexion = {
|
||||
opacity = tofloat((oldSkin.complexion_2 or 0) / 10),
|
||||
color = 0,
|
||||
style = oldSkin.complexion_1 or 0,
|
||||
secondColor = 0
|
||||
},
|
||||
lipstick = {
|
||||
opacity = tofloat((oldSkin.lipstick_2 or 0) / 10),
|
||||
color = oldSkin.lipstick_3 or 0,
|
||||
style = oldSkin.lipstick_1 or 0,
|
||||
secondColor = oldSkin.lipstick_4 or 0
|
||||
},
|
||||
eyebrows = {
|
||||
opacity = tofloat((oldSkin.eyebrows_2 or 0) / 10),
|
||||
color = oldSkin.eyebrows_3 or 0,
|
||||
style = oldSkin.eyebrows_1 or 0,
|
||||
secondColor = oldSkin.eyebrows_4 or 0
|
||||
},
|
||||
beard = {
|
||||
opacity = tofloat((oldSkin.beard_2 or 0) / 10),
|
||||
color = oldSkin.beard_3 or 0,
|
||||
style = oldSkin.beard_1 or 0,
|
||||
secondColor = oldSkin.beard_4 or 0
|
||||
},
|
||||
blush = {
|
||||
opacity = tofloat((oldSkin.blush_2 or 0) / 10),
|
||||
color = oldSkin.blush_3 or 0,
|
||||
style = oldSkin.blush_1 or 0,
|
||||
secondColor = oldSkin.blush_4 or 0
|
||||
},
|
||||
ageing = {
|
||||
opacity = tofloat((oldSkin.age_2 or 0) / 10),
|
||||
color = 0,
|
||||
style = oldSkin.age_1 or 0,
|
||||
secondColor = 0
|
||||
},
|
||||
blemishes = {
|
||||
opacity = tofloat((oldSkin.blemishes_2 or 0) / 10),
|
||||
color = 0,
|
||||
style = oldSkin.blemishes_1 or 0,
|
||||
secondColor = 0
|
||||
},
|
||||
chestHair = {
|
||||
opacity = tofloat((oldSkin.chest_2 or 0) / 10),
|
||||
color = oldSkin.chest_3 or 0,
|
||||
style = oldSkin.chest_1 or 0,
|
||||
secondColor = 0
|
||||
},
|
||||
bodyBlemishes = {
|
||||
opacity = tofloat((oldSkin.bodyb_2 or 0) / 10),
|
||||
color = oldSkin.bodyb_3 or 0,
|
||||
style = oldSkin.bodyb_1 or 0,
|
||||
secondColor = oldSkin.bodyb_4 or 0
|
||||
},
|
||||
moleAndFreckles = {
|
||||
opacity = tofloat((oldSkin.moles_2 or 0) / 10),
|
||||
color = 0,
|
||||
style = oldSkin.moles_1 or 0,
|
||||
secondColor = 0
|
||||
},
|
||||
sunDamage = {
|
||||
opacity = tofloat((oldSkin.sun_2 or 0) / 10),
|
||||
color = 0,
|
||||
style = oldSkin.sun_1 or 0,
|
||||
secondColor = 0
|
||||
},
|
||||
makeUp = {
|
||||
opacity = tofloat((oldSkin.makeup_2 or 0) / 10),
|
||||
color = oldSkin.makeup_3 or 0,
|
||||
style = oldSkin.makeup_1 or 0,
|
||||
secondColor = oldSkin.makeup_4 or 0
|
||||
}
|
||||
},
|
||||
model = gender == "m" and "mp_m_freemode_01" or "mp_f_freemode_01",
|
||||
props = Framework.ConvertProps(oldSkin),
|
||||
tattoos = {}
|
||||
}
|
||||
|
||||
return skin
|
||||
end
|
||||
|
||||
lib.addCommand("migrateskins", { help = "Migrate skins", restricted = "group.admin" }, function(source)
|
||||
local users = Database.Users.GetAll()
|
||||
local convertedSkins = 0
|
||||
if users then
|
||||
for i = 1, #users do
|
||||
local user = users[i]
|
||||
if user.skin then
|
||||
local oldSkin = json.decode(user.skin)
|
||||
if oldSkin.hair_1 then -- Convert only if its an old skin
|
||||
local skin = json.encode(convertSkinToNewFormat(oldSkin, user.sex))
|
||||
local affectedRows = Database.Users.UpdateSkinForUser(user.identifier, skin)
|
||||
if affectedRows then
|
||||
convertedSkins += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
lib.notify(source, {
|
||||
title = _L("migrate.success.title"),
|
||||
description = string.format(_L("migrate.success.description"), tostring(convertedSkins)),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end)
|
||||
@ -0,0 +1,36 @@
|
||||
if not Framework.Ox() then return end
|
||||
|
||||
local Ox = require '@ox_core.lib.init'
|
||||
|
||||
function Framework.GetPlayerID(playerId)
|
||||
return Ox.GetPlayer(playerId).charId
|
||||
end
|
||||
|
||||
function Framework.HasMoney(playerId, item, amount)
|
||||
return exports.ox_inventory:GetItemCount(playerId, item) >= amount
|
||||
end
|
||||
|
||||
function Framework.RemoveMoney(playerId, type, amount)
|
||||
return exports.ox_inventory:RemoveItem(playerId, type, amount)
|
||||
end
|
||||
|
||||
function Framework.GetJob()
|
||||
return ---@todo
|
||||
end
|
||||
|
||||
function Framework.GetGang()
|
||||
return ---@todo
|
||||
end
|
||||
|
||||
function Framework.SaveAppearance(appearance, charId)
|
||||
Database.PlayerSkins.UpdateActiveField(charId, 0)
|
||||
Database.PlayerSkins.DeleteByModel(charId, appearance.model)
|
||||
Database.PlayerSkins.Add(charId, appearance.model, json.encode(appearance), 1)
|
||||
end
|
||||
|
||||
function Framework.GetAppearance(charId, model)
|
||||
local result = Database.PlayerSkins.GetByCitizenID(charId, model)
|
||||
if result then
|
||||
return json.decode(result)
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,43 @@
|
||||
if not Framework.QBCore() then return end
|
||||
|
||||
local QBCore = exports["qb-core"]:GetCoreObject()
|
||||
|
||||
function Framework.GetPlayerID(src)
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
if Player then
|
||||
return Player.PlayerData.citizenid
|
||||
end
|
||||
end
|
||||
|
||||
function Framework.HasMoney(src, type, money)
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
return Player.PlayerData.money[type] >= money
|
||||
end
|
||||
|
||||
function Framework.RemoveMoney(src, type, money)
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
return Player.Functions.RemoveMoney(type, money)
|
||||
end
|
||||
|
||||
function Framework.GetJob(src)
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
return Player.PlayerData.job
|
||||
end
|
||||
|
||||
function Framework.GetGang(src)
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
return Player.PlayerData.gang
|
||||
end
|
||||
|
||||
function Framework.SaveAppearance(appearance, citizenID)
|
||||
Database.PlayerSkins.UpdateActiveField(citizenID, 0)
|
||||
Database.PlayerSkins.DeleteByModel(citizenID, appearance.model)
|
||||
Database.PlayerSkins.Add(citizenID, appearance.model, json.encode(appearance), 1)
|
||||
end
|
||||
|
||||
function Framework.GetAppearance(citizenID, model)
|
||||
local result = Database.PlayerSkins.GetByCitizenID(citizenID, model)
|
||||
if result then
|
||||
return json.decode(result)
|
||||
end
|
||||
end
|
||||
@ -0,0 +1,97 @@
|
||||
if not Framework.QBCore() then return end
|
||||
|
||||
local continue = false
|
||||
|
||||
local function MigrateFivemAppearance(source)
|
||||
local allPlayers = Database.Players.GetAll()
|
||||
local playerSkins = {}
|
||||
for i=1, #allPlayers, 1 do
|
||||
if allPlayers[i].skin then
|
||||
playerSkins[#playerSkins+1] = {
|
||||
citizenID = allPlayers[i].citizenid,
|
||||
skin = allPlayers[i].skin
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
for i=1, #playerSkins, 1 do
|
||||
Database.PlayerSkins.Add(playerSkins[i].citizenID, json.decode(playerSkins[i].skin).model, playerSkins[i].skin, 1)
|
||||
end
|
||||
lib.notify(source, {
|
||||
title = _L("migrate.success.title"),
|
||||
description = string.format(_L("migrate.success.description"), tostring(#playerSkins)),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
|
||||
local function MigrateQBClothing(source)
|
||||
local allPlayerSkins = Database.PlayerSkins.GetAll()
|
||||
local migrated = 0
|
||||
for i=1, #allPlayerSkins, 1 do
|
||||
if not tonumber(allPlayerSkins[i].model) then
|
||||
lib.notify(source, {
|
||||
title = _L("migrate.skip.title"),
|
||||
description = _L("migrate.skip.description"),
|
||||
type = "inform",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
else
|
||||
TriggerClientEvent("illenium-appearance:client:migration:load-qb-clothing-skin", source, allPlayerSkins[i])
|
||||
while not continue do
|
||||
Wait(10)
|
||||
end
|
||||
continue = false
|
||||
migrated = migrated + 1
|
||||
end
|
||||
end
|
||||
TriggerClientEvent("illenium-appearance:client:reloadSkin", source)
|
||||
|
||||
lib.notify(source, {
|
||||
title = _L("migrate.success.title"),
|
||||
description = string.format(_L("migrate.success.description"), tostring(migrated)),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:migrate-qb-clothing-skin", function(citizenid, appearance)
|
||||
local src = source
|
||||
Database.PlayerSkins.DeleteByCitizenID(citizenid)
|
||||
Database.PlayerSkins.Add(citizenid, appearance.model, json.encode(appearance), 1)
|
||||
continue = true
|
||||
lib.notify(src, {
|
||||
id = "illenium_appearance_skin_migrated",
|
||||
title = _L("migrate.success.title"),
|
||||
description = _L("migrate.success.descriptionSingle"),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end)
|
||||
|
||||
lib.addCommand("migrateskins", {
|
||||
help = "Migrate skins",
|
||||
params = {
|
||||
{
|
||||
name = "resourceName",
|
||||
type = "string",
|
||||
},
|
||||
},
|
||||
restricted = "group.god"
|
||||
}, function(source, args)
|
||||
local resourceName = args.resourceName
|
||||
if resourceName == "fivem-appearance" then
|
||||
MigrateFivemAppearance(source)
|
||||
elseif resourceName == "qb-clothing" then
|
||||
CreateThread(function()
|
||||
MigrateQBClothing(source)
|
||||
end)
|
||||
else
|
||||
lib.notify(source, {
|
||||
title = _L("migrate.typeError.title"),
|
||||
description = _L("migrate.typeError.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
end)
|
||||
11
resources/[core]/illenium-appearance/server/permissions.lua
Normal file
11
resources/[core]/illenium-appearance/server/permissions.lua
Normal file
@ -0,0 +1,11 @@
|
||||
lib.callback.register("illenium-appearance:server:GetPlayerAces", function()
|
||||
local src = source
|
||||
local allowedAces = {}
|
||||
for i = 1, #Config.Aces do
|
||||
local ace = Config.Aces[i]
|
||||
if IsPlayerAceAllowed(src, ace) then
|
||||
allowedAces[#allowedAces+1] = ace
|
||||
end
|
||||
end
|
||||
return allowedAces
|
||||
end)
|
||||
354
resources/[core]/illenium-appearance/server/server.lua
Normal file
354
resources/[core]/illenium-appearance/server/server.lua
Normal file
@ -0,0 +1,354 @@
|
||||
local outfitCache = {}
|
||||
local uniformCache = {}
|
||||
|
||||
local function getMoneyForShop(shopType)
|
||||
local money = 0
|
||||
if shopType == "clothing" then
|
||||
money = Config.ClothingCost
|
||||
elseif shopType == "barber" then
|
||||
money = Config.BarberCost
|
||||
elseif shopType == "tattoo" then
|
||||
money = Config.TattooCost
|
||||
elseif shopType == "surgeon" then
|
||||
money = Config.SurgeonCost
|
||||
end
|
||||
|
||||
return money
|
||||
end
|
||||
|
||||
local function getOutfitsForPlayer(citizenid)
|
||||
outfitCache[citizenid] = {}
|
||||
local result = Database.PlayerOutfits.GetAllByCitizenID(citizenid)
|
||||
for i = 1, #result, 1 do
|
||||
outfitCache[citizenid][#outfitCache[citizenid] + 1] = {
|
||||
id = result[i].id,
|
||||
name = result[i].outfitname,
|
||||
model = result[i].model,
|
||||
components = json.decode(result[i].components),
|
||||
props = json.decode(result[i].props)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
local function GenerateUniqueCode()
|
||||
local code, exists
|
||||
repeat
|
||||
code = GenerateNanoID(Config.OutfitCodeLength)
|
||||
exists = Database.PlayerOutfitCodes.GetByCode(code)
|
||||
until not exists
|
||||
return code
|
||||
end
|
||||
|
||||
-- Callback(s)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:generateOutfitCode", function(_, outfitID)
|
||||
local existingOutfitCode = Database.PlayerOutfitCodes.GetByOutfitID(outfitID)
|
||||
if not existingOutfitCode then
|
||||
local code = GenerateUniqueCode()
|
||||
local id = Database.PlayerOutfitCodes.Add(outfitID, code)
|
||||
if not id then
|
||||
print("Something went wrong while generating outfit code")
|
||||
return
|
||||
end
|
||||
return code
|
||||
end
|
||||
return existingOutfitCode.code
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:importOutfitCode", function(source, outfitName, outfitCode)
|
||||
local citizenID = Framework.GetPlayerID(source)
|
||||
local existingOutfitCode = Database.PlayerOutfitCodes.GetByCode(outfitCode)
|
||||
if not existingOutfitCode then
|
||||
return nil
|
||||
end
|
||||
|
||||
local playerOutfit = Database.PlayerOutfits.GetByID(existingOutfitCode.outfitid)
|
||||
if not playerOutfit then
|
||||
return
|
||||
end
|
||||
|
||||
if playerOutfit.citizenid == citizenID then return end -- Validation when someone tried to duplicate own outfit
|
||||
if Database.PlayerOutfits.GetByOutfit(outfitName, citizenID) then return end -- Validation duplicate outfit name, if validate on local id, someone can "spam error" server-sided
|
||||
|
||||
local id = Database.PlayerOutfits.Add(citizenID, outfitName, playerOutfit.model, playerOutfit.components, playerOutfit.props)
|
||||
|
||||
if not id then
|
||||
print("Something went wrong while importing the outfit")
|
||||
return
|
||||
end
|
||||
|
||||
outfitCache[citizenID][#outfitCache[citizenID] + 1] = {
|
||||
id = id,
|
||||
name = outfitName,
|
||||
model = playerOutfit.model,
|
||||
components = json.decode(playerOutfit.components),
|
||||
props = json.decode(playerOutfit.props)
|
||||
}
|
||||
|
||||
return true
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:getAppearance", function(source, model)
|
||||
local citizenID = Framework.GetPlayerID(source)
|
||||
return Framework.GetAppearance(citizenID, model)
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:hasMoney", function(source, shopType)
|
||||
local money = getMoneyForShop(shopType)
|
||||
if Framework.HasMoney(source, "cash", money) then
|
||||
return true, money
|
||||
else
|
||||
return false, money
|
||||
end
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:payForTattoo", function(source, tattoo)
|
||||
local src = source
|
||||
local cost = tattoo.cost or Config.TattooCost
|
||||
|
||||
if Framework.RemoveMoney(src, "cash", cost) then
|
||||
lib.notify(src, {
|
||||
title = _L("purchase.tattoo.success.title"),
|
||||
description = string.format(_L("purchase.tattoo.success.description"), tattoo.label, cost),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return true
|
||||
else
|
||||
lib.notify(src, {
|
||||
title = _L("purchase.tattoo.failure.title"),
|
||||
description = _L("purchase.tattoo.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return false
|
||||
end
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:getOutfits", function(source)
|
||||
local citizenID = Framework.GetPlayerID(source)
|
||||
if outfitCache[citizenID] == nil then
|
||||
getOutfitsForPlayer(citizenID)
|
||||
end
|
||||
return outfitCache[citizenID]
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:getManagementOutfits", function(source, mType, gender)
|
||||
local job = Framework.GetJob(source)
|
||||
if mType == "Gang" then
|
||||
job = Framework.GetGang(source)
|
||||
end
|
||||
|
||||
local grade = tonumber(job.grade.level)
|
||||
local managementOutfits = {}
|
||||
local result = Database.ManagementOutfits.GetAllByJob(mType, job.name, gender)
|
||||
|
||||
for i = 1, #result, 1 do
|
||||
if grade >= result[i].minrank then
|
||||
managementOutfits[#managementOutfits + 1] = {
|
||||
id = result[i].id,
|
||||
name = result[i].name,
|
||||
model = result[i].model,
|
||||
gender = result[i].gender,
|
||||
components = json.decode(result[i].components),
|
||||
props = json.decode(result[i].props)
|
||||
}
|
||||
end
|
||||
end
|
||||
return managementOutfits
|
||||
end)
|
||||
|
||||
lib.callback.register("illenium-appearance:server:getUniform", function(source)
|
||||
return uniformCache[Framework.GetPlayerID(source)]
|
||||
end)
|
||||
|
||||
RegisterServerEvent("illenium-appearance:server:saveAppearance", function(appearance)
|
||||
local src = source
|
||||
local citizenID = Framework.GetPlayerID(src)
|
||||
if appearance ~= nil then
|
||||
Framework.SaveAppearance(appearance, citizenID)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterServerEvent("illenium-appearance:server:chargeCustomer", function(shopType)
|
||||
local src = source
|
||||
local money = getMoneyForShop(shopType)
|
||||
if Framework.RemoveMoney(src, "cash", money) then
|
||||
lib.notify(src, {
|
||||
title = _L("purchase.store.success.title"),
|
||||
description = string.format(_L("purchase.store.success.description"), money, shopType),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
else
|
||||
lib.notify(src, {
|
||||
title = _L("purchase.store.failure.title"),
|
||||
description = _L("purchase.store.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:saveOutfit", function(name, model, components, props)
|
||||
local src = source
|
||||
local citizenID = Framework.GetPlayerID(src)
|
||||
if outfitCache[citizenID] == nil then
|
||||
getOutfitsForPlayer(citizenID)
|
||||
end
|
||||
if model and components and props then
|
||||
local id = Database.PlayerOutfits.Add(citizenID, name, model, json.encode(components), json.encode(props))
|
||||
if not id then
|
||||
return
|
||||
end
|
||||
outfitCache[citizenID][#outfitCache[citizenID] + 1] = {
|
||||
id = id,
|
||||
name = name,
|
||||
model = model,
|
||||
components = components,
|
||||
props = props
|
||||
}
|
||||
lib.notify(src, {
|
||||
title = _L("outfits.save.success.title"),
|
||||
description = string.format(_L("outfits.save.success.description"), name),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:updateOutfit", function(id, model, components, props)
|
||||
local src = source
|
||||
local citizenID = Framework.GetPlayerID(src)
|
||||
if outfitCache[citizenID] == nil then
|
||||
getOutfitsForPlayer(citizenID)
|
||||
end
|
||||
if model and components and props then
|
||||
if not Database.PlayerOutfits.Update(id, model, json.encode(components), json.encode(props)) then return end
|
||||
local outfitName = ""
|
||||
for i = 1, #outfitCache[citizenID], 1 do
|
||||
local outfit = outfitCache[citizenID][i]
|
||||
if outfit.id == id then
|
||||
outfit.model = model
|
||||
outfit.components = components
|
||||
outfit.props = props
|
||||
outfitName = outfit.name
|
||||
break
|
||||
end
|
||||
end
|
||||
lib.notify(src, {
|
||||
title = _L("outfits.update.success.title"),
|
||||
description = string.format(_L("outfits.update.success.description"), outfitName),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:saveManagementOutfit", function(outfitData)
|
||||
local src = source
|
||||
local id = Database.ManagementOutfits.Add(outfitData)
|
||||
if not id then
|
||||
return
|
||||
end
|
||||
|
||||
lib.notify(src, {
|
||||
title = _L("outfits.save.success.title"),
|
||||
description = string.format(_L("outfits.save.success.description"), outfitData.Name),
|
||||
type = "success",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:deleteManagementOutfit", function(id)
|
||||
Database.ManagementOutfits.DeleteByID(id)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:syncUniform", function(uniform)
|
||||
local src = source
|
||||
uniformCache[Framework.GetPlayerID(src)] = uniform
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:deleteOutfit", function(id)
|
||||
local src = source
|
||||
local citizenID = Framework.GetPlayerID(src)
|
||||
Database.PlayerOutfitCodes.DeleteByOutfitID(id)
|
||||
Database.PlayerOutfits.DeleteByID(id)
|
||||
|
||||
for k, v in ipairs(outfitCache[citizenID]) do
|
||||
if v.id == id then
|
||||
table.remove(outfitCache[citizenID], k)
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:resetOutfitCache", function()
|
||||
local src = source
|
||||
local citizenID = Framework.GetPlayerID(src)
|
||||
if citizenID then
|
||||
outfitCache[citizenID] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:ChangeRoutingBucket", function()
|
||||
local src = source
|
||||
SetPlayerRoutingBucket(src, src)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("illenium-appearance:server:ResetRoutingBucket", function()
|
||||
local src = source
|
||||
SetPlayerRoutingBucket(src, 0)
|
||||
end)
|
||||
|
||||
if Config.EnablePedMenu then
|
||||
lib.addCommand("pedmenu", {
|
||||
help = _L("commands.pedmenu.title"),
|
||||
params = {
|
||||
{
|
||||
name = "playerID",
|
||||
type = "number",
|
||||
help = "Target player's server id",
|
||||
optional = true
|
||||
},
|
||||
},
|
||||
restricted = Config.PedMenuGroup
|
||||
}, function(source, args)
|
||||
local target = source
|
||||
if args.playerID then
|
||||
local citizenID = Framework.GetPlayerID(args.playerID)
|
||||
if citizenID then
|
||||
target = args.playerID
|
||||
else
|
||||
lib.notify(source, {
|
||||
title = _L("commands.pedmenu.failure.title"),
|
||||
description = _L("commands.pedmenu.failure.description"),
|
||||
type = "error",
|
||||
position = Config.NotifyOptions.position
|
||||
})
|
||||
return
|
||||
end
|
||||
end
|
||||
TriggerClientEvent("illenium-appearance:client:openClothingShopMenu", target, true)
|
||||
end)
|
||||
end
|
||||
|
||||
if Config.EnableJobOutfitsCommand then
|
||||
lib.addCommand("joboutfits", { help = _L("commands.joboutfits.title"), }, function(source)
|
||||
TriggerClientEvent("illenium-apearance:client:outfitsCommand", source, true)
|
||||
end)
|
||||
|
||||
lib.addCommand("gangoutfits", { help = _L("commands.gangoutfits.title"), }, function(source)
|
||||
TriggerClientEvent("illenium-apearance:client:outfitsCommand", source)
|
||||
end)
|
||||
end
|
||||
|
||||
lib.addCommand("reloadskin", { help = _L("commands.reloadskin.title") }, function(source)
|
||||
TriggerClientEvent("illenium-appearance:client:reloadSkin", source)
|
||||
end)
|
||||
|
||||
lib.addCommand("clearstuckprops", { help = _L("commands.clearstuckprops.title") }, function(source)
|
||||
TriggerClientEvent("illenium-appearance:client:ClearStuckProps", source)
|
||||
end)
|
||||
|
||||
lib.versionCheck("iLLeniumStudios/illenium-appearance")
|
||||
12
resources/[core]/illenium-appearance/server/util.lua
Normal file
12
resources/[core]/illenium-appearance/server/util.lua
Normal file
@ -0,0 +1,12 @@
|
||||
math.randomseed(os.time())
|
||||
|
||||
local urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"
|
||||
|
||||
function GenerateNanoID(size)
|
||||
local id = ""
|
||||
for _ = 1, size do
|
||||
local randomIndex = math.random(64)
|
||||
id = id .. urlAlphabet:sub(randomIndex,randomIndex)
|
||||
end
|
||||
return id
|
||||
end
|
||||
46
resources/[core]/illenium-appearance/shared/blacklist.lua
Normal file
46
resources/[core]/illenium-appearance/shared/blacklist.lua
Normal file
@ -0,0 +1,46 @@
|
||||
Config.Blacklist = {
|
||||
male = {
|
||||
hair = {},
|
||||
components = {
|
||||
masks = {},
|
||||
upperBody = {},
|
||||
lowerBody = {},
|
||||
bags = {},
|
||||
shoes = {},
|
||||
scarfAndChains = {},
|
||||
shirts = {},
|
||||
bodyArmor = {},
|
||||
decals = {},
|
||||
jackets = {}
|
||||
},
|
||||
props = {
|
||||
hats = {},
|
||||
glasses = {},
|
||||
ear = {},
|
||||
watches = {},
|
||||
bracelets = {}
|
||||
}
|
||||
},
|
||||
female = {
|
||||
hair = {},
|
||||
components = {
|
||||
masks = {},
|
||||
upperBody = {},
|
||||
lowerBody = {},
|
||||
bags = {},
|
||||
shoes = {},
|
||||
scarfAndChains = {},
|
||||
shirts = {},
|
||||
bodyArmor = {},
|
||||
decals = {},
|
||||
jackets = {}
|
||||
},
|
||||
props = {
|
||||
hats = {},
|
||||
glasses = {},
|
||||
ear = {},
|
||||
watches = {},
|
||||
bracelets = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
1137
resources/[core]/illenium-appearance/shared/config.lua
Normal file
1137
resources/[core]/illenium-appearance/shared/config.lua
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,96 @@
|
||||
if not Framework.ESX() then return end
|
||||
|
||||
function Framework.ConvertComponents(oldSkin, components)
|
||||
return {
|
||||
{
|
||||
component_id = 0,
|
||||
drawable = (components and components[1].drawable) or 0,
|
||||
texture = (components and components[1].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 1,
|
||||
drawable = oldSkin.mask_1 or (components and components[2].drawable) or 0,
|
||||
texture = oldSkin.mask_2 or (components and components[2].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 2,
|
||||
drawable = (components and components[3].drawable) or 0,
|
||||
texture = (components and components[3].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 3,
|
||||
drawable = oldSkin.arms or (components and components[4].drawable) or 0,
|
||||
texture = oldSkin.arms_2 or (components and components[4].texture) or 0,
|
||||
},
|
||||
{
|
||||
component_id = 4,
|
||||
drawable = oldSkin.pants_1 or (components and components[5].drawable) or 0,
|
||||
texture = oldSkin.pants_2 or (components and components[5].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 5,
|
||||
drawable = oldSkin.bags_1 or (components and components[6].drawable) or 0,
|
||||
texture = oldSkin.bags_2 or (components and components[6].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 6,
|
||||
drawable = oldSkin.shoes_1 or (components and components[7].drawable) or 0,
|
||||
texture = oldSkin.shoes_2 or (components and components[7].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 7,
|
||||
drawable = oldSkin.chain_1 or (components and components[8].drawable) or 0,
|
||||
texture = oldSkin.chain_2 or (components and components[8].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 8,
|
||||
drawable = oldSkin.tshirt_1 or (components and components[9].drawable) or 0,
|
||||
texture = oldSkin.tshirt_2 or (components and components[9].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 9,
|
||||
drawable = oldSkin.bproof_1 or (components and components[10].drawable) or 0,
|
||||
texture = oldSkin.bproof_2 or (components and components[10].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 10,
|
||||
drawable = oldSkin.decals_1 or (components and components[11].drawable) or 0,
|
||||
texture = oldSkin.decals_2 or (components and components[11].texture) or 0
|
||||
},
|
||||
{
|
||||
component_id = 11,
|
||||
drawable = oldSkin.torso_1 or (components and components[12].drawable) or 0,
|
||||
texture = oldSkin.torso_2 or (components and components[12].texture) or 0
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
function Framework.ConvertProps(oldSkin, props)
|
||||
return {
|
||||
{
|
||||
texture = oldSkin.helmet_2 or (props and props[1].texture) or -1,
|
||||
drawable = oldSkin.helmet_1 or (props and props[1].drawable) or -1,
|
||||
prop_id = 0
|
||||
},
|
||||
{
|
||||
texture = oldSkin.glasses_2 or (props and props[2].texture) or -1,
|
||||
drawable = oldSkin.glasses_1 or (props and props[2].drawable) or -1,
|
||||
prop_id = 1
|
||||
},
|
||||
{
|
||||
texture = oldSkin.ears_2 or (props and props[3].texture) or -1,
|
||||
drawable = oldSkin.ears_1 or (props and props[3].drawable) or -1,
|
||||
prop_id = 2
|
||||
},
|
||||
{
|
||||
texture = oldSkin.watches_2 or (props and props[4].texture) or -1,
|
||||
drawable = oldSkin.watches_1 or (props and props[4].drawable) or -1,
|
||||
prop_id = 6
|
||||
},
|
||||
{
|
||||
texture = oldSkin.bracelets_2 or (props and props[5].texture) or -1,
|
||||
drawable = oldSkin.bracelets_1 or (props and props[5].drawable) or -1,
|
||||
prop_id = 7
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -0,0 +1,13 @@
|
||||
Framework = {}
|
||||
|
||||
function Framework.ESX()
|
||||
return GetResourceState("es_extended") ~= "missing"
|
||||
end
|
||||
|
||||
function Framework.QBCore()
|
||||
return GetResourceState("qb-core") ~= "missing"
|
||||
end
|
||||
|
||||
function Framework.Ox()
|
||||
return GetResourceState("ox_core") ~= "missing"
|
||||
end
|
||||
1059
resources/[core]/illenium-appearance/shared/peds.lua
Normal file
1059
resources/[core]/illenium-appearance/shared/peds.lua
Normal file
File diff suppressed because it is too large
Load Diff
6968
resources/[core]/illenium-appearance/shared/tattoos.lua
Normal file
6968
resources/[core]/illenium-appearance/shared/tattoos.lua
Normal file
File diff suppressed because it is too large
Load Diff
61
resources/[core]/illenium-appearance/shared/theme.lua
Normal file
61
resources/[core]/illenium-appearance/shared/theme.lua
Normal file
@ -0,0 +1,61 @@
|
||||
Config.Theme = {
|
||||
currentTheme = "qb-core",
|
||||
themes = {
|
||||
{
|
||||
id = "default",
|
||||
borderRadius = "4px",
|
||||
fontColor = "255, 255, 255",
|
||||
fontColorHover = "255, 255, 255",
|
||||
fontColorSelected = "0, 0, 0",
|
||||
fontFamily = "Inter",
|
||||
primaryBackground = "0, 0, 0",
|
||||
primaryBackgroundSelected = "255, 255, 255",
|
||||
secondaryBackground = "0, 0, 0",
|
||||
scaleOnHover = false,
|
||||
sectionFontWeight = "normal",
|
||||
smoothBackgroundTransition = false
|
||||
},
|
||||
{
|
||||
id = "qb-core",
|
||||
borderRadius = "3vh",
|
||||
fontColor = "255, 255, 255",
|
||||
fontColorHover = "255, 255, 255",
|
||||
fontColorSelected = "255, 255, 255",
|
||||
fontFamily = "Poppins",
|
||||
primaryBackground = "220, 20, 60",
|
||||
primaryBackgroundSelected = "220, 20, 60",
|
||||
secondaryBackground = "23, 23, 23",
|
||||
scaleOnHover = true,
|
||||
sectionFontWeight = "bold",
|
||||
smoothBackgroundTransition = true
|
||||
},
|
||||
{
|
||||
id = "project-sloth",
|
||||
borderRadius = "6vh",
|
||||
fontColor = "255, 255, 255",
|
||||
fontColorHover = "255, 255, 255",
|
||||
fontColorSelected = "255, 255, 255",
|
||||
fontFamily = "Inter",
|
||||
primaryBackground = "2, 241, 181",
|
||||
primaryBackgroundSelected = "2, 241, 181",
|
||||
secondaryBackground = "27, 24, 69",
|
||||
scaleOnHover = true,
|
||||
sectionFontWeight = "bold",
|
||||
smoothBackgroundTransition = false
|
||||
},
|
||||
{
|
||||
id = "not-heavily-inspired",
|
||||
borderRadius = "10vh",
|
||||
fontColor = "255, 255, 255",
|
||||
fontColorHover = "255, 255, 255",
|
||||
fontColorSelected = "255, 255, 255",
|
||||
fontFamily = "Inter",
|
||||
primaryBackground = "149, 239, 119",
|
||||
primaryBackgroundSelected = "242, 163, 101",
|
||||
secondaryBackground = "25, 46, 70",
|
||||
scaleOnHover = true,
|
||||
sectionFontWeight = "bold",
|
||||
smoothBackgroundTransition = false
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
CREATE TABLE IF NOT EXISTS `management_outfits` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`job_name` varchar(50) NOT NULL,
|
||||
`type` varchar(50) NOT NULL,
|
||||
`minrank` int(11) NOT NULL DEFAULT 0,
|
||||
`name` varchar(50) NOT NULL DEFAULT 'Cool Outfit',
|
||||
`gender` varchar(50) NOT NULL DEFAULT 'male',
|
||||
`model` varchar(50) DEFAULT NULL,
|
||||
`props` varchar(1000) DEFAULT NULL,
|
||||
`components` varchar(1500) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;
|
||||
@ -0,0 +1,22 @@
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `player_outfit_codes` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`outfitid` int(11) NOT NULL,
|
||||
`code` varchar(50) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `FK_player_outfit_codes_player_outfits` (`outfitid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;
|
||||
24
resources/[core]/illenium-appearance/sql/player_outfits.sql
Normal file
24
resources/[core]/illenium-appearance/sql/player_outfits.sql
Normal file
@ -0,0 +1,24 @@
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `player_outfits` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`citizenid` varchar(50) DEFAULT NULL,
|
||||
`outfitname` varchar(50) NOT NULL DEFAULT '0',
|
||||
`model` varchar(50) DEFAULT NULL,
|
||||
`props` varchar(1000) DEFAULT NULL,
|
||||
`components` varchar(1500) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `citizenid_outfitname_model` (`citizenid`,`outfitname`,`model`),
|
||||
KEY `citizenid` (`citizenid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;
|
||||
10
resources/[core]/illenium-appearance/sql/playerskins.sql
Normal file
10
resources/[core]/illenium-appearance/sql/playerskins.sql
Normal file
@ -0,0 +1,10 @@
|
||||
CREATE TABLE IF NOT EXISTS `playerskins` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`citizenid` varchar(255) NOT NULL,
|
||||
`model` varchar(255) NOT NULL,
|
||||
`skin` text NOT NULL,
|
||||
`active` tinyint(4) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `citizenid` (`citizenid`),
|
||||
KEY `active` (`active`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
|
||||
599
resources/[core]/illenium-appearance/web/dist/assets/index.b8e72b46.js
vendored
Normal file
599
resources/[core]/illenium-appearance/web/dist/assets/index.b8e72b46.js
vendored
Normal file
File diff suppressed because one or more lines are too long
17
resources/[core]/illenium-appearance/web/dist/index.html
vendored
Normal file
17
resources/[core]/illenium-appearance/web/dist/index.html
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>UI</title>
|
||||
<script type="module" crossorigin src="./assets/index.b8e72b46.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@ -18,7 +18,7 @@ Config.Accounts = {
|
||||
},
|
||||
}
|
||||
|
||||
Config.StartingAccountMoney = { bank = 50000 }
|
||||
Config.StartingAccountMoney = { bank = 15000 }
|
||||
|
||||
Config.StartingInventoryItems = false -- table/false
|
||||
|
||||
@ -41,7 +41,7 @@ Config.EnableSocietyPayouts = false -- pay from the society account that the pla
|
||||
Config.MaxWeight = 24 -- the max inventory weight without a backpack
|
||||
Config.PaycheckInterval = 7 * 60000 -- how often to receive paychecks in milliseconds
|
||||
Config.EnableDebug = false -- Use Debug options?
|
||||
Config.EnableDefaultInventory = true -- Display the default Inventory ( F2 )
|
||||
Config.EnableDefaultInventory = false -- Display the default Inventory ( F2 )
|
||||
Config.EnableWantedLevel = false -- Use Normal GTA wanted Level?
|
||||
Config.EnablePVP = true -- Allow Player to player combat
|
||||
|
||||
|
||||
@ -77,3 +77,5 @@ dependencies {
|
||||
'oxmysql',
|
||||
'spawnmanager',
|
||||
}
|
||||
|
||||
provides { "es_extended" }
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user