structura foldere

mutat kq- folders in un singur folder [kq]
This commit is contained in:
2026-03-30 01:55:03 +03:00
parent af1286d583
commit c291b81f26
2319 changed files with 0 additions and 14 deletions
@@ -0,0 +1,7 @@
if not Config.Debug then return end
Debug('`gizmo` debug command initialized')
RegisterCommand('gizmo', function(source, args, raw)
currentlyInGarage = 'Pillbox Hill Garage'
decorate:open()
end)
@@ -0,0 +1,213 @@
if Config.Framework ~= 'esx' then
return
end
ESX = exports['es_extended']:getSharedObject()
RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(playerData)
PlayerData = playerData
Debug('player loaded', json.encode(playerData))
end)
CreateThread(function()
PlayerData = GetPlayerData()
Debug('init playerData')
end)
RegisterNetEvent('esx:setJob', function(jobData)
PlayerData.job = jobData
end)
function TriggerServerCallback(name, cb, ...)
ESX.TriggerServerCallback(name, cb, ...)
end
function GetPlayerData()
return ESX.GetPlayerData()
end
function GetPlayers()
return ESX.Game.GetPlayers()
end
function GetPlayerIdentifier()
return GetPlayerData().identifier
end
function GetJobName()
return PlayerData?.job?.name or 'unemployed'
end
function GetJobGrade()
return PlayerData?.job?.grade or 0
end
local hasGang = GetResourceState('qs-gangs') == 'started'
Gang = nil
if hasGang then
RegisterNetEvent('gangs:setGang', function(gang)
Gang = gang
end)
end
function GetGang()
if not hasGang then
return {
name = '',
grades = {}
}
end
if Gang then
return Gang
end
local gang = exports['qs-gangs']:GetGang()
Gang = gang
if not gang then
return {
name = '',
grades = {}
}
end
return gang
end
function DrawMarkerZone(x, y, z)
DrawMarker(1, x, y, z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 4.0, 0.8, 255, 255, 255, 150, false, false, false, true, false, false, false)
end
function SpawnGiveVehicle(model, generatedPlate, playerID, playerName, vehicleType, addcommand)
local playerPed = cache.ped
local coords = GetEntityCoords(playerPed)
ESX.Game.SpawnVehicle(model, coords, 0.0, function(vehicle)
if DoesEntityExist(vehicle) then
local carExist = true
SetEntityVisible(vehicle, false)
SetEntityCollision(vehicle, false)
local newPlate = generatedPlate
local vehicleProps = ESX.Game.GetVehicleProperties(vehicle)
vehicleProps.plate = newPlate
TriggerServerEvent('advancedgarages:server:setVehicle', vehicleProps, model, playerID, vehicleType, addcommand)
end
end)
end
function SpawnVehicleEvents(vehicle, plate)
if GetResourceState(Config.Framework .. '-wheelstancer') == 'started' then
-- You can ignore this, it only works with tuff-wheelstancer
TriggerServerCallback('advancedgarages:server:GetStanceValues', function(stance_value)
if stance_value ~= nil then
Wait(500)
local veh = cache.vehicle
TriggerServerEvent('Stancer_sv:LoadStanceValues', stance_value, VehToNet(veh))
end
end, plate)
end
-- You can add your events here when the vehicle spawns
end
function GetVehiclePropertiesFramework(vehicle)
return ESX.Game.GetVehicleProperties(vehicle)
end
function SetVehiclePropertiesFramework(vehicle, props)
ESX.Game.SetVehicleProperties(vehicle, props)
end
function ToggleHud(show)
if GetResourceState('qs-interface') == 'started' then
exports['qs-interface']:ToggleHud(show)
end
end
function Notification(msg, type)
SendReactMessage('notification', {
msg = msg,
type = type
})
-- if GetResourceState('qs-interface') == 'started' then
-- if type == 'info' then
-- exports['qs-interface']:AddNotify(msg, 'Inform', 2500, 'fas fa-file')
-- elseif type == 'error' then
-- exports['qs-interface']:AddNotify(msg, 'Error', 2500, 'fas fa-bug')
-- elseif type == 'success' then
-- exports['qs-interface']:AddNotify(msg, 'Success', 2500, 'fas fa-thumbs-up')
-- end
-- return
-- end
-- if type == 'info' then
-- lib.notify({
-- title = 'Garages',
-- description = msg,
-- type = 'info'
-- })
-- elseif type == 'error' then
-- lib.notify({
-- title = 'Garages',
-- description = msg,
-- type = 'error'
-- })
-- elseif type == 'success' then
-- lib.notify({
-- title = 'Garages',
-- description = msg,
-- type = 'success'
-- })
-- end
end
function ShowHelpNotification(msg, thisFrame, beep, duration)
AddTextEntry('HelpNotification', msg)
if thisFrame then
DisplayHelpTextThisFrame('HelpNotification', false)
else
if beep == nil then
beep = true
end
BeginTextCommandDisplayHelp('HelpNotification')
EndTextCommandDisplayHelp(0, false, beep, duration or -1)
end
end
local texts = {}
if GetResourceState('qs-textui') == 'started' then
function DrawText3D(x, y, z, text, id, key, theme)
local _id = key
if not texts[_id] then
CreateThread(function()
texts[_id] = 5
while texts[_id] > 0 do
texts[_id] = texts[_id] - 1
Wait(0)
end
texts[_id] = nil
exports['qs-textui']:DeleteDrawText3D(id)
Debug('Deleted text', id)
end)
Debug('Created text', id)
TriggerEvent('textui:DrawText3D', x, y, z, text, id, key, theme)
end
texts[_id] = 5
end
else
function DrawText3D(x, y, z, text)
SetTextScale(0.35, 0.35)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
SetTextEntry('STRING')
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(x, y, z, 0)
DrawText(0.0, 0.0)
local factor = text:len() / 370
DrawRect(0.0, 0.0 + 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
end
@@ -0,0 +1,207 @@
if Config.Framework ~= 'qb' then
return
end
QBCore = exports['qb-core']:GetCoreObject()
RegisterNetEvent('QBCore:Client:OnPlayerLoaded')
AddEventHandler('QBCore:Client:OnPlayerLoaded', function()
PlayerData = GetPlayerData()
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(jobData)
PlayerData.job = jobData
end)
CreateThread(function()
PlayerData = GetPlayerData()
end)
function TriggerServerCallback(name, cb, ...)
QBCore.Functions.TriggerCallback(name, cb, ...)
end
function GetPlayerData()
return QBCore.Functions.GetPlayerData()
end
function GetPlayers()
return QBCore.Functions.GetPlayers()
end
function GetPlayerIdentifier()
return GetPlayerData().citizenid
end
function GetJobName()
return PlayerData?.job?.name or 'unemployed'
end
function GetJobGrade()
return PlayerData?.job?.grade?.level or 0
end
local hasGang = GetResourceState('qs-gangs') == 'started'
Gang = nil
if hasGang then
RegisterNetEvent('gangs:setGang', function(gang)
Gang = gang
end)
end
function GetGang()
if not hasGang then
return {
name = '',
grades = {}
}
end
if Gang then
return Gang
end
local gang = exports['qs-gangs']:GetGang()
Gang = gang
if not gang then
return {
name = '',
grades = {}
}
end
return gang
end
function DrawMarkerZone(x, y, z)
DrawMarker(1, x, y, z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 4.0, 0.8, 255, 255, 255, 150, false, false, false, true, false, false, false)
end
function SpawnGiveVehicle(model, generatedPlate, playerID, playerName, vehicleType, addcommand)
QBCore.Functions.SpawnVehicle(model, function(vehicle)
if DoesEntityExist(vehicle) then
local carExist = true
SetEntityVisible(vehicle, false)
SetEntityCollision(vehicle, false)
local newPlate = generatedPlate
local vehicleProps = QBCore.Functions.GetVehicleProperties(vehicle)
vehicleProps.plate = newPlate
TriggerServerEvent('advancedgarages:server:setVehicle', vehicleProps, model, playerID, vehicleType, addcommand)
end
end, coords, true)
end
function SpawnVehicleEvents(vehicle, plate)
if GetResourceState(Config.Framework .. '-wheelstancer') == 'started' then
-- You can ignore this, it only works with tuff-wheelstancer
TriggerServerCallback('advancedgarages:server:GetStanceValues', function(stance_value)
if stance_value ~= nil then
Wait(500)
local veh = cache.vehicle
TriggerServerEvent('Stancer_sv:LoadStanceValues', stance_value, VehToNet(veh))
end
end, plate)
end
-- You can add your events here when the vehicle spawns
end
function GetVehiclePropertiesFramework(vehicle)
return QBCore.Functions.GetVehicleProperties(vehicle)
end
function SetVehiclePropertiesFramework(vehicle, props)
QBCore.Functions.SetVehicleProperties(vehicle, props)
end
function ToggleHud(show)
if GetResourceState('qs-interface') == 'started' then
exports['qs-interface']:ToggleHud(show)
end
end
function Notification(msg, type)
SendReactMessage('notification', {
msg = msg,
type = type
})
-- if GetResourceState('qs-interface') == 'started' then
-- if type == 'info' then
-- exports['qs-interface']:AddNotify(msg, 'Inform', 2500, 'fas fa-file')
-- elseif type == 'error' then
-- exports['qs-interface']:AddNotify(msg, 'Error', 2500, 'fas fa-bug')
-- elseif type == 'success' then
-- exports['qs-interface']:AddNotify(msg, 'Success', 2500, 'fas fa-thumbs-up')
-- end
-- return
-- end
-- if type == 'info' then
-- lib.notify({
-- title = 'Garages',
-- description = msg,
-- type = 'info'
-- })
-- elseif type == 'error' then
-- lib.notify({
-- title = 'Garages',
-- description = msg,
-- type = 'error'
-- })
-- elseif type == 'success' then
-- lib.notify({
-- title = 'Garages',
-- description = msg,
-- type = 'success'
-- })
-- end
end
function ShowHelpNotification(msg, thisFrame, beep, duration)
AddTextEntry('HelpNotification', msg)
if thisFrame then
DisplayHelpTextThisFrame('HelpNotification', false)
else
if beep == nil then
beep = true
end
BeginTextCommandDisplayHelp('HelpNotification')
EndTextCommandDisplayHelp(0, false, beep, duration or -1)
end
end
local texts = {}
if GetResourceState('qs-textui') == 'started' then
function DrawText3D(x, y, z, text, id, key, theme)
local _id = key
if not texts[_id] then
CreateThread(function()
texts[_id] = 5
while texts[_id] > 0 do
texts[_id] = texts[_id] - 1
Wait(0)
end
texts[_id] = nil
exports['qs-textui']:DeleteDrawText3D(id)
Debug('Deleted text', id)
end)
Debug('Created text', id)
TriggerEvent('textui:DrawText3D', x, y, z, text, id, key, theme)
end
texts[_id] = 5
end
else
function DrawText3D(x, y, z, text)
SetTextScale(0.35, 0.35)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
SetTextEntry('STRING')
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(x, y, z, 0)
DrawText(0.0, 0.0)
local factor = text:len() / 370
DrawRect(0.0, 0.0 + 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'BigDaddy-Fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['BigDaddy-Fuel']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['BigDaddy-Fuel']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'LegacyFuel' then
return 100.0
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['LegacyFuel']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['LegacyFuel']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'cdn-fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['cdn-fuel']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['cdn-fuel']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'esx-sna-fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['esx-sna-fuel']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['esx-sna-fuel']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'lc_fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports["lc_fuel"]:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports["lc_fuel"]:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'lj-fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['lj-fuel']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['lj-fuel']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'okokGasStation' then
return 100.0
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['okokGasStation']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['okokGasStation']:GetFuel(vehicle)
end
@@ -0,0 +1,11 @@
if Config.Fuel ~= 'ox_fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
Entity(vehicle).state.fuel = fuelLevel
end
function GetFuel(vehicle)
return Entity(vehicle).state.fuel
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'ps-fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['ps-fuel']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['ps-fuel']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'qs-fuelstations' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['qs-fuelstations']:SetFuel(vehicle, fuelLevel)
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['qs-fuelstations']:GetFuel(vehicle)
end
@@ -0,0 +1,18 @@
if Config.Fuel ~= 'ti_fuel' then
return
end
function SetFuel(vehicle, fuelLevel)
local success, error = pcall(function()
exports['ti_fuel']:setFuel(vehicle, fuelLevel, 'RON91')
end)
if not success then
Debug('You did not configure your fuel system and it is set to 100.0 in fuel, check in Config.Fuel')
return 100.0
end
end
function GetFuel(vehicle)
return exports['ti_fuel']:getFuel(vehicle)
end
@@ -0,0 +1,11 @@
if Config.Inventory ~= 'inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
local maxweight = data.maxweight or 10000
TriggerEvent('inventory:openInventory', { type = 'stash', id = uniq, title = 'Stash_' .. uniq, weight = maxweight, delay = 100, save = true })
end
@@ -0,0 +1,15 @@
if Config.Inventory ~= 'codem-inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = tostring(uniq or 'garage'):gsub('-', '_')
local name = 'stash_' .. uniq
local maxweight = data.maxweight or 10000
local slots = data.slots or 30
print('[INFO] Open stash CodeM:', name, 'MaxWeight:', maxweight, 'Slots:', slots)
TriggerServerEvent('codem-inventory:server:openstash', name, slots, maxweight, name)
end
@@ -0,0 +1,10 @@
if Config.Inventory ~= 'core_inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
TriggerServerEvent('core_inventory:server:openInventory', tostring(uniq):gsub(':', ''):gsub('#', ''):gsub(' ', ''), 'stash', nil, nil)
end
@@ -0,0 +1,10 @@
if Config.Inventory ~= 'origen_inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
TriggerServerEvent('inventory:server:OpenInventory', 'stash', 'stash_house' .. uniq .. '', data)
end
@@ -0,0 +1,19 @@
if Config.Inventory ~= 'ox_inventory' then
return
end
local ox_inventory = exports.ox_inventory
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
uniq = uniq:gsub('-', '_')
local maxweight = data.maxweight or 10000
local slot = data.slots or 30
if ox_inventory:openInventory('stash', uniq) == false then
TriggerServerEvent('garages:ox:registerStash', uniq, slot, maxweight)
ox_inventory:openInventory('stash', uniq)
Debug('Ox Stash', 'Registering new stash', uniq)
end
end
@@ -0,0 +1,15 @@
if Config.Inventory ~= 'ps-inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
TriggerServerEvent('inventory:server:OpenInventory', 'stash', uniq, data)
TriggerEvent('inventory:client:SetCurrentStash', uniq)
end
RegisterNetEvent('inventory:client:SetCurrentStash', function(stash)
CurrentStash = stash
end)
@@ -0,0 +1,13 @@
if Config.Inventory ~= 'qb-inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
-- if you use old qb-inventory version, uncomment here and remove 'housing:openStash' trigger.
-- TriggerServerEvent('inventory:server:OpenInventory', 'stash', uniq, data)
-- TriggerEvent('inventory:client:SetCurrentStash', uniq)
TriggerServerEvent('garages:openStash', uniq, data)
end
@@ -0,0 +1,11 @@
if Config.Inventory ~= 'qs-inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
TriggerServerEvent('inventory:server:OpenInventory', 'stash', uniq, data)
TriggerEvent('inventory:client:SetCurrentStash', uniq)
end
@@ -0,0 +1,14 @@
if Config.Inventory ~= 'tgiann-inventory' then
return
end
function openStash(customData, uniq)
local data = customData or Config.DefaultStashData
uniq = uniq or currentlyInGarage
uniq = uniq:gsub('-', '_')
local maxweight = data.maxweight or 10000
exports['tgiann-inventory']:OpenInventory('stash', uniq, {
maxweight = maxweight,
slots = data.slots or 100,
})
end
@@ -0,0 +1,243 @@
if Config.Menu ~= 'esx_context' then
return
end
function OpenManagementMenu()
local Elements = {
{
unselectable = true,
title = 'Management',
},
{
title = 'Give Key',
name = 'givekey',
},
{
title = 'Key Holders',
name = 'keyholders',
},
{
title = 'Sell Garage',
name = 'sell',
},
}
ESX.OpenContext('right', Elements,
function(menu, element)
if element.name == 'givekey' then
TriggerEvent('advancedgarages:openGiveKeyMenu')
ESX.CloseContext()
end
if element.name == 'keyholders' then
TriggerEvent('advancedgarages:openKeyHoldersMenu')
ESX.CloseContext()
end
if element.name == 'sell' then
TriggerEvent('advancedgarages:sellGarage')
ESX.CloseContext()
end
end, function(menu)
ESX.CloseContext()
end)
end
function openGiveKeyMenu(vehicleList)
local Elements = {}
table.insert(Elements, {
unselectable = true,
title = 'Give Key',
})
for k, v in pairs(vehicleList) do
table.insert(Elements, {
title = 'Player: ' .. v.name.firstName .. ' ' .. v.name.lastName,
name = 'givekey',
data = {
id = v.id,
garage = ClosestGarage
}
})
end
ESX.OpenContext('right', Elements, function(menu, element)
if element.name == 'givekey' then
local selectedData = element.data
local data = {
id = selectedData.id,
garage = selectedData.garage
}
TriggerServerEvent('advancedgarages:giveKey', data)
ESX.CloseContext()
end
end,
function(menu)
ESX.CloseContext()
end)
end
function openTakeKeyMenu()
local Elements = {}
local holders = lib.callback.await('advancedgarages:getGarageKeyHolders', false, ClosestGarage)
if not holders or #holders == 0 then
Notification(i18n.t('keyholders.empty_list'), 'info')
return
end
table.insert(Elements, {
unselectable = true,
title = 'Take Key',
})
for k, v in pairs(holders) do
table.insert(Elements, {
title = 'Player: ' .. v.firstname .. ' ' .. v.lastname,
name = 'keyholders',
data = {
id = v.identifier,
garage = ClosestGarage
}
})
end
ESX.OpenContext('right', Elements, function(menu, element)
if element.name == 'keyholders' then
local selectedData = element.data
local data = {
id = selectedData.id,
garage = selectedData.garage
}
TriggerServerEvent('advancedgarages:takeKey', data)
ESX.CloseContext()
end
end,
function(menu)
ESX.CloseContext()
end)
end
function HandleKeyboard(callback)
local Elements = {
{
title = 'Set a Price',
input = true,
inputType = 'number',
inputValue = 1,
inputPlaceholder = 'Garage Price...',
name = 'price',
},
{
title = 'Continue',
name = 'next',
},
}
ESX.OpenContext('right', Elements, function(menu, element)
local amount = menu.eles[1].inputValue
if amount == 0 or amount == nil then return end
if element.name == 'next' then
ESX.CloseContext()
callback(amount)
end
end, function(menu)
ESX.CloseContext()
end)
end
function HandleGarageJob()
local promise = promise.new()
local Elements = {
{
title = 'Job Name (you can leave it blank for everyone)',
input = true,
inputType = 'text',
inputValue = '',
inputPlaceholder = 'Job Name...',
name = 'Job Name',
},
{
title = 'Continue',
name = 'next',
},
}
ESX.OpenContext('right', Elements, function(menu, element)
local jobName = menu.eles[1].inputValue
if jobName == nil then
return promise:resolve(false)
end
if element.name == 'next' then
ESX.CloseContext()
promise:resolve(jobName)
end
end, function(menu)
ESX.CloseContext()
end)
return Citizen.Await(promise)
end
function OpenRecoveryMenu(vehicleList)
local Elements = {}
table.insert(Elements, {
unselectable = true,
title = 'Recovery Vehicle (OUT)',
})
for k, v in pairs(vehicleList) do
table.insert(Elements, {
title = v.plate,
plate = v.plate,
type = v.type,
name = 'recovery',
data = {
plate = v.plate,
type = v.type
}
})
end
ESX.OpenContext('right', Elements, function(menu, element)
if element.name == 'recovery' then
local selectedData = element.data
TriggerServerEvent('advancedgarages:RecoveryVehicle', selectedData)
ESX.CloseContext()
end
end,
function(menu)
ESX.CloseContext()
end)
end
function OpenDeleteJobVehicleMenu(garage, job)
local Elements = {}
local vehicles = lib.callback.await('advancedgarages:getJobVehicles', false, garage, job)
if not vehicles or #vehicles == 0 then
Notification(i18n.t('keyholders.empty_out'), 'info')
return
end
table.insert(Elements, {
unselectable = true,
title = 'Delete work vehicles',
})
for k, v in pairs(vehicles) do
table.insert(Elements, {
title = v.plate,
name = 'next',
data = {
plate = v.plate,
garage = garage
}
})
end
ESX.OpenContext('right', Elements, function(menu, element)
if element.name == 'next' then
local selectedData = element.data
TriggerServerEvent('advancedgarages:deleteJobVehicle', selectedData)
ESX.CloseContext()
end
end, function(menu)
ESX.CloseContext()
end)
end
@@ -0,0 +1,203 @@
if Config.Menu ~= 'esx_menu_default' then
return
end
function OpenManagementMenu()
local elementsList = {}
table.insert(elementsList, { label = 'Give Key', value = 'givekey' })
table.insert(elementsList, { label = 'Key Holders', value = 'keyholders' })
table.insert(elementsList, { label = 'Sell Garage', value = 'sell' })
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'management', {
title = 'Management',
align = 'right',
elements = elementsList
}, function(data, menu)
if data.current.value == 'givekey' then
menu.close()
TriggerEvent('advancedgarages:openGiveKeyMenu')
end
if data.current.value == 'keyholders' then
menu.close()
TriggerEvent('advancedgarages:openKeyHoldersMenu')
end
if data.current.value == 'sell' then
menu.close()
TriggerEvent('advancedgarages:sellGarage')
end
end, function(data, menu)
menu.close()
end)
end
function openGiveKeyMenu(players)
local elementsList = {}
for k, v in pairs(players) do
table.insert(elementsList, {
label = 'Player: ' .. v.name.firstName .. ' ' .. v.name.lastName,
value = {
id = v.id,
garage = ClosestGarage
}
})
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'givekey', {
title = 'Give Key',
align = 'right',
elements = elementsList
}, function(data, menu)
if data.current.value then
menu.close()
local selectedData = data.current.value
local data = {
id = selectedData.id,
garage = selectedData.garage
}
TriggerServerEvent('advancedgarages:giveKey', data)
end
end, function(data, menu)
menu.close()
end)
end
function openTakeKeyMenu()
local elementsList = {}
local holders = lib.callback.await('advancedgarages:getGarageKeyHolders', false, ClosestGarage)
if not holders or #holders == 0 then
Notification(i18n.t('keyholders.empty_list'), 'info')
return
end
for k, v in pairs(holders) do
table.insert(elementsList, {
label = 'Player: ' .. v.firstname .. ' ' .. v.lastname,
value = {
id = v.identifier,
garage = ClosestGarage
}
})
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'keyholders', {
title = 'Recovery',
align = 'right',
elements = elementsList
}, function(data, menu)
if data.current.value then
menu.close()
local selectedData = data.current.value
local data = {
id = selectedData.id,
garage = selectedData.garage
}
TriggerServerEvent('advancedgarages:takeKey', data)
end
end, function(data, menu)
menu.close()
end)
end
function HandleKeyboard(callback)
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'price',
{
title = ('Set a price')
},
function(data, menu)
local amount = tonumber(data.value)
if amount == nil then
Notification('Invalid Amount', 'error')
else
menu.close()
callback(amount)
end
end,
function(data, menu)
menu.close()
end)
end
function HandleGarageJob()
local promise = promise.new()
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'job',
{
title = ('Job Name (you can leave it blank for everyone)')
},
function(data, menu)
local jobName = data.value
if jobName == nil then
menu.close()
return promise:resolve(false)
end
promise:resolve(jobName)
menu.close()
end,
function(data, menu)
menu.close()
end)
return Citizen.Await(promise)
end
function OpenRecoveryMenu(vehicleList)
local elementsList = {}
for k, v in pairs(vehicleList) do
table.insert(elementsList, {
label = v.plate,
type = v.type,
value = {
plate = v.plate,
type = v.type
}
})
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'recovery', {
title = 'Recovery Vehicle (OUT)',
align = 'right',
elements = elementsList
}, function(data, menu)
if data.current.value then
menu.close()
local selectedData = data.current.value
TriggerServerEvent('advancedgarages:RecoveryVehicle', selectedData)
end
end, function(data, menu)
menu.close()
end)
end
function OpenDeleteJobVehicleMenu(garage, job)
local elementsList = {}
local vehicles = lib.callback.await('advancedgarages:getJobVehicles', false, garage, job)
if not vehicles or #vehicles == 0 then
Notification(i18n.t('keyholders.empty_out'), 'info')
return
end
for k, v in pairs(vehicles) do
table.insert(elementsList, {
label = v.plate,
value = {
plate = v.plate,
garage = garage
}
})
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'deletejob', {
title = 'Delete work vehicles',
align = 'right',
elements = elementsList
}, function(data, menu)
local selectedData = data.current.value
if selectedData then
TriggerServerEvent('advancedgarages:deleteJobVehicle', selectedData)
menu.close()
end
end, function(data, menu)
menu.close()
end)
end
@@ -0,0 +1,145 @@
if Config.Menu ~= 'nh-context' then
return
end
function OpenManagementMenu()
TriggerEvent('nh-context:createMenu', {
{
header = 'Management',
},
{
header = 'Give Key',
event = 'advancedgarages:openGiveKeyMenu',
},
{
header = 'Key Holders',
event = 'advancedgarages:openKeyHoldersMenu',
},
{
header = 'Sell Garage',
event = 'advancedgarages:sellGarage',
}
})
end
function openGiveKeyMenu(players)
local Elements = {
{
header = 'Give Key',
}
}
for k, v in pairs(players) do
local data = {
id = v.id,
garage = ClosestGarage
}
table.insert(Elements, {
header = 'Give Key',
context = 'Player: ' .. v.name.firstName .. ' ' .. v.name.lastName,
event = 'advancedgarages:giveKey',
server = true,
args = {
data
}
})
end
TriggerEvent('nh-context:createMenu', Elements)
end
function openTakeKeyMenu()
local Elements = {
{
header = 'Take Key',
}
}
local holders = lib.callback.await('advancedgarages:getGarageKeyHolders', false, ClosestGarage)
if not holders or #holders == 0 then
Notification(i18n.t('keyholders.empty_list'), 'info')
return
end
for k, v in pairs(holders) do
local data = {
id = v.identifier,
garage = ClosestGarage
}
table.insert(Elements, {
header = 'Take Key',
context = 'Player: ' .. v.firstname .. ' ' .. v.lastname,
event = 'advancedgarages:takeKey',
server = true,
args = {
data
}
})
end
TriggerEvent('nh-context:createMenu', Elements)
end
function HandleKeyboard(callback)
local keyboard, value = exports['nh-keyboard']:Keyboard({
header = 'Set a Price',
rows = { 'Price' }
})
if keyboard then
callback(value)
end
end
function HandleGarageJob()
local keyboard, value = exports['nh-keyboard']:Keyboard({
header = 'Job Name (you can leave it blank for everyone)',
rows = { 'Job Name' }
})
if keyboard then
return value
end
end
function OpenRecoveryMenu(vehicleList)
local menu = {}
table.insert(menu, {
header = 'Recovery Vehicle (OUT)'
})
for k, v in pairs(vehicleList) do
table.insert(menu, {
header = v.plate,
event = 'advancedgarages:RecoveryVehicle',
server = true,
args = {
v
}
})
end
TriggerEvent('nh-context:createMenu', menu)
end
function OpenDeleteJobVehicleMenu(garage, job)
local menu = {}
local vehicles = lib.callback.await('advancedgarages:getJobVehicles', false, garage, job)
if not vehicles or #vehicles == 0 then
Notification(i18n.t('keyholders.empty_out'), 'info')
return
end
table.insert(menu, {
header = 'Delete work vehicles'
})
for k, v in pairs(vehicles) do
local data = {
plate = v.plate,
garage = garage
}
table.insert(menu, {
header = v.plate,
event = 'advancedgarages:deleteJobVehicle',
server = true,
args = {
data
}
})
end
TriggerEvent('nh-context:createMenu', menu)
end
@@ -0,0 +1,152 @@
if Config.Menu ~= 'ox_lib' then
return
end
function OpenManagementMenu()
local elements = {
{
title = 'Give Key',
onSelect = function(args)
TriggerEvent('advancedgarages:openGiveKeyMenu')
end
},
{
title = 'Key Holders',
onSelect = function(args)
TriggerEvent('advancedgarages:openKeyHoldersMenu')
end
},
{
title = 'Sell Garage',
onSelect = function(args)
TriggerEvent('advancedgarages:sellGarage')
end
}
}
lib.registerContext({
id = 'management',
title = 'Management',
options = elements
})
lib.showContext('management')
end
function openGiveKeyMenu(players)
local elements = {}
for k, v in pairs(players) do
table.insert(elements, {
title = 'Player: ' .. v.name.firstName .. ' ' .. v.name.lastName,
onSelect = function(args)
local data = {
id = v.id,
garage = ClosestGarage
}
TriggerServerEvent('advancedgarages:giveKey', data)
end
})
end
lib.registerContext({
id = 'givekey',
title = 'Give Keys',
options = elements
})
lib.showContext('givekey')
end
function openTakeKeyMenu()
local elements = {}
local holders = lib.callback.await('advancedgarages:getGarageKeyHolders', false, ClosestGarage)
if not holders or #holders == 0 then
Notification(i18n.t('keyholders.empty_list'), 'info')
return
end
for k, v in pairs(holders) do
table.insert(elements, {
title = 'Player: ' .. v.firstname .. ' ' .. v.lastname,
onSelect = function(args)
local data = {
id = v.identifier,
garage = ClosestGarage
}
TriggerServerEvent('advancedgarages:takeKey', data)
end
})
end
lib.registerContext({
id = 'keyholders',
title = 'Key Holders',
options = elements
})
lib.showContext('keyholders')
end
function HandleKeyboard(callback)
local input = lib.inputDialog('Set a Price', { 'Garage Price...' })
if not input then return end
local price = tonumber(input[1])
if price then
local amount = price
if amount == nil then
Notification('Invalid Amount', 'error')
else
if amount >= 0 then
callback(amount)
else
Notification('Invalid Amount', 'error')
end
end
end
end
function HandleGarageJob()
local input = lib.inputDialog('Job Name (you can leave it blank for everyone)', { 'Job Name' })
if not input or input[1] == '' then return false end
return input[1]
end
function OpenRecoveryMenu(vehicleList)
local menu = {}
for k, v in pairs(vehicleList) do
table.insert(menu, {
title = v.plate,
onSelect = function(args)
TriggerServerEvent('advancedgarages:RecoveryVehicle', { plate = v.plate, type = v.type })
end,
})
end
lib.registerContext({
id = 'recovery',
title = 'Recovery Vehicle (OUT)',
options = menu
})
lib.showContext('recovery')
end
function OpenDeleteJobVehicleMenu(garage, job)
local menu = {}
local vehicles = lib.callback.await('advancedgarages:getJobVehicles', false, garage, job)
if not vehicles or #vehicles == 0 then
Notification(i18n.t('keyholders.empty_out'), 'info')
return
end
for k, v in pairs(vehicles) do
local data = {
plate = v.plate,
garage = garage
}
table.insert(menu, {
title = v.plate,
onSelect = function(args)
TriggerServerEvent('advancedgarages:deleteJobVehicle', data)
end,
})
end
lib.registerContext({
id = 'deletejobvehicle',
title = 'Delete work vehicles',
options = menu
})
lib.showContext('deletejobvehicle')
end
@@ -0,0 +1,176 @@
if Config.Menu ~= 'qb-menu' then
return
end
function OpenManagementMenu()
local elementsList = {
{
header = 'Management',
isMenuHeader = true,
},
{
header = 'Give Key',
params = {
event = 'advancedgarages:openGiveKeyMenu',
}
},
{
header = 'Key Holders',
params = {
event = 'advancedgarages:openKeyHoldersMenu',
}
}
}
exports['qb-menu']:openMenu(elementsList)
end
function openGiveKeyMenu(players)
local elementsList = {}
table.insert(elementsList, {
header = 'Give Key',
isMenuHeader = true,
})
for k, v in pairs(players) do
table.insert(elementsList, {
header = 'Player: ' .. v.name.firstName .. ' ' .. v.name.lastName,
params = {
isServer = true,
event = 'advancedgarages:giveKey',
args = {
id = v.id,
garage = ClosestGarage
}
}
})
end
exports['qb-menu']:openMenu(elementsList)
end
function openTakeKeyMenu()
local elementsList = {}
local holders = lib.callback.await('advancedgarages:getGarageKeyHolders', false, ClosestGarage)
if not holders or #holders == 0 then
Notification(i18n.t('keyholders.empty_list'), 'info')
return
end
table.insert(elementsList, {
header = 'Take Key',
isMenuHeader = true,
})
for k, v in pairs(holders) do
table.insert(elementsList, {
header = 'Player: ' .. v.firstname .. ' ' .. v.lastname,
params = {
isServer = true,
event = 'advancedgarages:takeKey',
args = {
id = v.identifier,
garage = ClosestGarage
}
}
})
end
exports['qb-menu']:openMenu(elementsList)
end
function HandleKeyboard(callback)
local dialog = exports['qb-input']:ShowInput({
header = 'Set a Price',
submitText = 'Continue',
inputs = {
{
text = 'Garage Price...',
name = 'price',
type = 'number',
isRequired = true,
}
},
})
if dialog ~= nil then
for k, v in pairs(dialog) do
callback(v)
end
end
end
function HandleGarageJob()
local dialog = exports['qb-input']:ShowInput({
header = 'Job Name (you can leave it blank for everyone)',
submitText = 'Continue',
inputs = {
{
text = 'Job Name...',
name = 'Job public garage',
type = 'text',
isRequired = false,
}
},
})
if dialog ~= nil then
for k, v in pairs(dialog) do
if v and v ~= '' then
return v
end
return nil
end
end
end
function OpenRecoveryMenu(vehicleList)
local elementsList = {}
table.insert(elementsList, {
header = 'Recovery Vehicle (OUT)',
isMenuHeader = true,
})
for k, v in pairs(vehicleList) do
table.insert(elementsList, {
header = v.plate,
params = {
isServer = true,
event = 'advancedgarages:RecoveryVehicle',
args = {
plate = v.plate,
type = v.type
}
}
})
end
exports['qb-menu']:openMenu(elementsList)
end
function OpenDeleteJobVehicleMenu(garage, job)
local menu = {}
local vehicles = lib.callback.await('advancedgarages:getJobVehicles', false, garage, job)
if not vehicles or #vehicles == 0 then
Notification(i18n.t('keyholders.empty_out'), 'info')
return
end
table.insert(menu, {
header = 'Delete work vehicles'
})
for k, v in pairs(vehicles) do
table.insert(menu, {
header = v.plate,
params = {
isServer = true,
event = 'advancedgarages:deleteJobVehicle',
args = {
plate = v.plate,
garage = garage
}
}
})
end
exports['qb-menu']:openMenu(menu)
end
@@ -0,0 +1,352 @@
if Config.UseTarget ~= 'ox_target' then
return
end
local function storeVehicleZone2()
local id = exports.ox_target:addGlobalVehicle({
{
name = 'garages:storeVehicle',
icon = 'fas fa-car',
label = 'Store Vehicle',
-- bones = { 'door_dside_f', 'seat_dside_f' },
canInteract = function(entity, distance, coords, name)
if IsNearbyJobGarage() then return true end
if CurrentShellGarage then return false end
local _garage = ClosestGarage
if not _garage then
return false
end
local garage = Config.Garages[_garage]
if not CheckGarageAuthorization(garage.jobs, garage.gangs) then return end
if not garage then
return false
end
local distance = #(coords - vec3(garage.coords.spawnCoords.x, garage.coords.spawnCoords.y, garage.coords.spawnCoords.z))
if distance > 50.0 then
return false
end
return true
end,
onSelect = function(data)
local jobGarage = IsNearbyJobGarage()
if jobGarage then
StoreVehicle(jobGarage, true, data.entity)
return
end
if CurrentShellGarage and existKey then
nearbyGarageType = 'vehicle'
StoreVehicle(CurrentShellGarage, false, data.entity)
return
end
StoreVehicle(ClosestGarage, false, data.entity)
end
}
})
return id
end
storeVehicleZone2()
local function storeVehicleZone(garage, garageName, isJob)
local options = {
{
onSelect = function()
if isJob then
StoreVehicle(garage, isJob)
return
end
StoreVehicle(ClosestGarage or garageName, isJob)
end,
canInteract = function()
return (isJob and CheckGarageAuthorization(garage.jobs, garage.gangs) and cache.vehicle) or (not garage.isImpound and (IsGarageOwner or garage.available or IsKeyHolder) and cache.vehicle)
end,
distance = 150.0,
icon = 'fas fa-car',
label = 'Store Vehicle'
}
}
local id = exports.ox_target:addBoxZone({
coords = garage.coords.spawnCoords,
distance = 150.0,
rotation = 180.0,
options = options,
debug = Config.ZoneDebug
})
return id
end
local boxZones = {}
function InitZones()
if #boxZones > 0 then
for k, v in pairs(boxZones) do
exports.ox_target:removeZone(v)
end
boxZones = {}
end
Wait(100)
for k, garage in pairs(Config.Garages) do
local options = {}
if garage.type ~= 'plane' or garage.isImpound then
table.insert(options, {
onSelect = function()
OpenGarageMenu(k, garage.isImpound, nil, garage.type == 'boat')
end,
canInteract = function()
local job = CheckGarageAuthorization(garage.jobs, garage.gangs)
return (IsGarageOwner or garage.available or IsKeyHolder) and job
end,
distance = 5.0,
icon = 'fas fa-car',
label = 'Open Garage'
})
end
if not garage.isImpound then
local garageType = garage.type
if garageType == 'vehicle' or garageType == 'plane' then
if garageType == 'plane' or (garageType == 'vehicle' and (Config.EnablePublicInteriors or not garage.available)) then
table.insert(options, {
onSelect = function()
GotoShellGarage(k, garage.coords.spawnCoords, garage.shell)
end,
canInteract = function()
local job = CheckGarageAuthorization(garage.jobs, garage.gangs)
return (IsGarageOwner or garage.available or IsKeyHolder) and job
end,
icon = 'fas fa-warehouse',
label = 'Enter the Garage',
distance = 5.0
})
end
end
end
if not garage.owner or garage.owner == '' and not garage.isImpound then
table.insert(options, {
onSelect = function()
local price = garage.price
TriggerServerEvent('advancedgarages:buyGarage', k, price)
end,
canInteract = function()
local job = CheckGarageAuthorization(garage.jobs, garage.gangs)
return job
end,
distance = 5.0,
icon = 'fas fa-store',
label = 'Buy Garage',
debug = true
})
end
local id = exports.ox_target:addBoxZone({
coords = garage.coords.menuCoords,
distance = 5.5,
rotation = 180.0,
name = 'garage:' .. k,
id = k,
index = k,
options = options,
debug = Config.ZoneDebug,
})
table.insert(boxZones, id)
local otherId = storeVehicleZone(garage, k, false)
table.insert(boxZones, otherId)
end
end
local shellBoxes = {}
function InitShellGarages()
for k, v in pairs(shellBoxes) do
exports.ox_target:removeZone(v)
shellBoxes = {}
end
for k, garage in pairs(ShellGarages) do
if not garage.takeVehicle or not garage.takeVehicle.x then goto continue end
local options = {}
table.insert(options, {
onSelect = function()
local shell = garage?.shell
nearbyGarageType = 'vehicle'
GotoGarage(CurrentShellGarage, vec4(garage.takeVehicle.x, garage.takeVehicle.y, garage.takeVehicle.z, garage.takeVehicle.h), shell)
end,
distance = 5.0,
canInteract = function()
return CurrentShellGarage == k and existKey
end,
icon = 'fas fa-warehouse',
label = 'Enter the garage'
})
table.insert(options, {
onSelect = function()
local shell = garage?.shell
nearbyGarageType = 'vehicle'
SaveVehicle(k, true)
-- GotoGarage(k, vec4(garage.takeVehicle.x, garage.takeVehicle.y, garage.takeVehicle.z, garage.takeVehicle.h), shell?.shell)
end,
distance = 5.0,
icon = 'fas fa-car',
label = 'Store Vehicle',
canInteract = function()
return CurrentShellGarage == k and existKey and cache.vehicle
end,
})
local id = exports.ox_target:addBoxZone({
coords = vec3(garage.takeVehicle.x, garage.takeVehicle.y, garage.takeVehicle.z),
distance = 5.5,
rotation = 180.0,
name = 'shell-garage:' .. k,
id = 'shell-' .. k,
index = k,
options = options,
debug = Config.ZoneDebug,
})
shellBoxes[k] = id
::continue::
end
end
CreateThread(function()
for k, garage in pairs(Config.JobGarages) do
local job = garage.job or garage.gang
local options = {}
table.insert(options, {
onSelect = function()
local serverVehicles = lib.callback.await('advancedgarages:getJobVehicles', false, garage.name, job)
local vehicleList = serverVehicles
local garageIsAvailable = lib.callback.await('advancedgarages:isGarageAvailable', false, k)
if not garageIsAvailable then return Notification(i18n.t('garage_not_available'), 'error') end
for _, veh in pairs(vehicleList) do
veh.vehicle = json.encode(veh.vehicle)
end
for a, model in ipairs(garage.vehicles) do
local plate = tostring(job .. math.random(111, 999))
table.insert(vehicleList, {
id = #vehicleList + 1,
vehicle = json.encode({
model = model,
plate = plate
}),
plate = plate,
})
end
TriggerServerEvent('advancedgarages:setInJobGarage', k, true)
OpenGarageMenu(k, garage.isImpound, vehicleList)
end,
canInteract = function()
return CheckJob(garage.job, garage.grade)
end,
distance = 5.0,
icon = 'fas fa-car',
label = 'Open Garage'
})
exports.ox_target:addBoxZone({
coords = garage.coords.menuCoords,
distance = 5.5,
rotation = 180.0,
name = 'job-garage:' .. k,
id = k,
index = k,
options = options,
debug = Config.ZoneDebug,
})
storeVehicleZone(garage, k, true)
end
end)
CreateThread(function()
for k, types in pairs(Config.VehicleShowRooms) do
for a, v in pairs(types) do
local options = {}
table.insert(options, {
onSelect = function()
ExitGarage()
end,
distance = 5.0,
icon = 'fas fa-warehouse',
label = 'Exit Garage'
})
exports.ox_target:addBoxZone({
coords = vec3(v.entry.x, v.entry.y, v.entry.z),
distance = 5.5,
rotation = 180.0,
name = 'exit-garage:' .. k,
id = k,
index = k,
options = options,
debug = Config.ZoneDebug,
})
end
end
end)
---@param coords vector4
function InitShellExit(coords)
exports.ox_target:addBoxZone({
coords = coords,
distance = 5.5,
rotation = 180.0,
name = 'exit-shell-garage',
id = 'exit-shell-garage',
options = {
{
onSelect = function()
ExitGarage()
end,
distance = 5.0,
icon = 'fas fa-warehouse',
label = 'Exit Garage'
}
},
})
end
function RemoveShellExit()
exports.ox_target:removeZone('exit-shell-garage')
end
CreateThread(function()
for k, v in pairs(Config.Recovery.coords) do
local options = {}
table.insert(options, {
onSelect = function()
local vehicleList = lib.callback.await('advancedgarages:getRecoveryVehicles', false)
if #vehicleList == 0 then
return Notification(i18n.t('keyholders.empty_out'), 'info')
end
OpenRecoveryMenu(vehicleList)
end,
distance = 5.0,
icon = 'fas fa-car-on',
label = 'Recover vehicle $' .. Config.Recovery.price
})
exports.ox_target:addBoxZone({
coords = v,
size = vec3(2.0, 2.0, 2.0),
rotation = 180.0,
name = 'recovery-garage:' .. k,
id = k,
index = k,
options = options,
debug = Config.ZoneDebug,
})
end
end)
CreateThread(function()
local function checkMenu()
local sleep = 500
if not ClosestGarage then return sleep end
local garage = Config.Garages[ClosestGarage]
if not IsGarageOwner and not garage.available and not IsKeyHolder then return sleep end
if not CheckGarageAuthorization(garage.jobs, garage.gangs) then return sleep end
if garage.isImpound then return sleep end
if cache.vehicle then
sleep = 0
DrawMarkerZone(garage.coords.spawnCoords.x, garage.coords.spawnCoords.y, garage.coords.spawnCoords.z)
-- DrawMarker(1, garage.coords.spawnCoords.x, garage.coords.spawnCoords.y, garage.coords.spawnCoords.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 4.0, 0.8, 255, 255, 255, 150, false, false, false, true, false, false, false)
end
return sleep
end
while true do
local sleep = checkMenu()
Wait(sleep)
end
end)
@@ -0,0 +1,181 @@
if Config.UseTarget ~= 'qb-radialmenu' then
return
end
local menuItems = {}
local function AddRadialOption()
RemoveRadialOptions()
local garage, garageJobName
if ClosestGarage then
garage = Config.Garages[ClosestGarage]
end
if garage then
if not cache.vehicle and (garage.available or IsGarageOwner or IsKeyHolder) then
if not CheckGarageAuthorization(garage.jobs, garage.gangs) then goto continue end
if garage.type ~= 'plane' and not cache.vehicle then
table.insert(menuItems, {
id = 'radialOpenMenu',
title = 'Open Garage',
icon = 'car',
type = 'client',
event = 'advancedgarages:client:radialOpenMenu',
shouldClose = true
})
end
if garage.type == 'plane' or ((Config.EnablePublicInteriors or not garage.available) and garage.type ~= 'boat' and not garage.isImpound and not cache.vehicle) then
table.insert(menuItems, {
id = 'radialEnterShell',
title = 'Enter Garage',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialEnterShell',
shouldClose = true
})
end
end
::continue::
end
if cache.vehicle and ClosestGarage and not garage.isImpound then
if not CheckGarageAuthorization(garage.jobs, garage.gangs) then goto continue end
table.insert(menuItems, {
id = 'radialSaveVehicle',
title = 'Store Vehicle',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialSaveVehicle',
garage = ClosestGarage,
shouldClose = true
})
::continue::
end
local nearbyElevator = nearbyElevator()
if nearbyElevator and nearbyElevator == 0 then
table.insert(menuItems, {
id = 'radialExitShell',
title = 'Exit',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialExitShell',
shouldClose = true
})
end
local recover = checkMenu()
if recover == 0 then
table.insert(menuItems, {
id = 'radialRecoverVehicle',
title = 'Recover',
icon = 'car',
type = 'client',
event = 'advancedgarages:client:radialRecoverVehicle',
shouldClose = true
})
end
if IsGarageOwner and not cache.vehicle then
table.insert(menuItems, {
id = 'radialGarageManagement',
title = 'Management',
icon = 'bars-progress',
type = 'client',
event = 'advancedgarages:client:radialGarageManagement',
shouldClose = true
})
end
local nearbyHouseGarage = CheckNearbyGarage()
if nearbyHouseGarage and nearbyHouseGarage == 0 and cache.vehicle then
table.insert(menuItems, {
id = 'save_vehicle',
title = 'Store Vehicle',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialSaveHousingGarage',
shouldClose = true
})
end
if nearbyHouseGarage and nearbyHouseGarage == 0 and not cache.vehicle then
table.insert(menuItems, {
id = 'enter_garage_shell',
title = 'Enter Garage',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialEnterHousingGarage',
shouldClose = true
})
end
local job = GetJobName()
if IsJobAllowed(job, 'impound') and not cache.vehicle then
table.insert(menuItems, {
id = 'radialImpoundVehicle',
title = 'Impound vehicle',
icon = 'car-side',
type = 'client',
event = 'advancedgarages:client:radialImpoundVehicle',
shouldClose = true
})
end
local playerCoords = GetEntityCoords(cache.ped)
for k, garage in pairs(Config.JobGarages) do
local access = CheckJob(garage.job, garage.grade)
if access then
local dst = #(playerCoords - vec3(garage.coords.menuCoords.x, garage.coords.menuCoords.y, garage.coords.menuCoords.z))
if dst < 15.0 and not cache.vehicle then
table.insert(menuItems, {
id = 'radialOpenJobGarage',
title = 'Open Garage',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialOpenJobGarage',
garage = k,
shouldClose = true
})
end
if dst < 15.0 and cache.vehicle then
table.insert(menuItems, {
id = 'radialSaveVehicle',
title = 'Save Vehicle',
icon = 'warehouse',
type = 'client',
event = 'advancedgarages:client:radialSaveVehicle',
garage = k,
isJob = true,
shouldClose = true
})
end
end
end
for _, item in ipairs(menuItems) do
item.id = exports['qb-radialmenu']:AddOption(item)
end
end
function RemoveRadialOptions()
for _, item in ipairs(menuItems) do
exports['qb-radialmenu']:RemoveOption(item.id)
end
menuItems = {}
Debug('The qb-radialmenu table has been cleaned!')
end
RegisterNetEvent('qb-radialmenu:client:onRadialmenuOpen', function()
AddRadialOption()
end)
AddEventHandler('onResourceStop', function(resourceName)
if (resourceName == 'qs-advancedgarages') then
RemoveRadialOptions()
end
end)
@@ -0,0 +1,483 @@
if Config.UseTarget ~= 'qs-radialmenu' then
return
end
-- ============================================================
-- State
-- ============================================================
local shellExitCoords = nil
local nearestGarage = nil
-- ============================================================
-- Self-contained proximity detection
-- Maintains nearestGarage independently of the escrowed code,
-- so garage items appear even when ClosestGarage is not set.
-- ============================================================
CreateThread(function()
while true do
local playerCoords = GetEntityCoords(cache.ped)
local closest, closestDist = nil, 10.0
for k, g in pairs(Config.Garages) do
if g.coords and g.coords.menuCoords then
local mc = g.coords.menuCoords
local d = #(playerCoords - vec3(mc.x, mc.y, mc.z))
if d < closestDist then
closest = k
closestDist = d
end
end
end
nearestGarage = closest
Wait(closest and 250 or 1000)
end
end)
local function getClosestGarage()
return ClosestGarage or nearestGarage
end
-- ============================================================
-- Lifecycle hooks (same interface as ox_target.lua)
-- The escrowed code calls these at key moments.
-- ============================================================
function InitZones() end
function InitShellGarages() end
---@param coords vector4
function InitShellExit(coords)
shellExitCoords = coords
end
function RemoveShellExit()
shellExitCoords = nil
end
-- ============================================================
-- Provider: getRadialItems export
-- Called synchronously by qs-radialmenu before building menu.
-- Returns a plain table of items — no cross-resource closures.
-- ============================================================
exports('getRadialItems', function()
local items = {}
local playerCoords = GetEntityCoords(cache.ped)
local garageName = getClosestGarage()
local garage = garageName and Config.Garages[garageName] or nil
local authorized = false
if garage then
local jobOk = type(CheckGarageAuthorization) ~= 'function' or CheckGarageAuthorization(garage.jobs, garage.gangs)
authorized = jobOk and (IsGarageOwner or garage.available or IsKeyHolder)
end
-- ── 1. Open Garage (on foot, authorized)
if garage and not cache.vehicle and authorized then
if garage.type ~= 'plane' or garage.isImpound then
table.insert(items, {
id = 'radialOpenMenu',
title = 'Open Garage',
icon = 'Car',
type = 'client',
event = 'qs-radialmenu:garages:openGarage',
shouldClose = true
})
end
end
-- ── 2. Enter Garage interior (on foot, authorized)
if garage and not cache.vehicle and authorized and not garage.isImpound then
local gt = garage.type
if gt == 'plane' or (gt == 'vehicle' and (Config.EnablePublicInteriors or not garage.available)) then
table.insert(items, {
id = 'radialEnterShell',
title = 'Enter Garage',
icon = 'Warehouse',
type = 'client',
event = 'qs-radialmenu:garages:enterShell',
shouldClose = true
})
end
end
-- ── 3. Buy Garage (no owner, authorized)
if garage and not garage.isImpound and (not garage.owner or garage.owner == '') then
local jobOk = type(CheckGarageAuthorization) ~= 'function' or CheckGarageAuthorization(garage.jobs, garage.gangs)
if jobOk then
table.insert(items, {
id = 'radialBuyGarage',
title = 'Buy Garage',
icon = 'Store',
type = 'client',
event = 'qs-radialmenu:garages:buyGarage',
shouldClose = true
})
end
end
-- ── 4. Store Vehicle regular garage (in vehicle)
if cache.vehicle and not CurrentShellGarage then
local canStore = false
if type(IsNearbyJobGarage) == 'function' and IsNearbyJobGarage() then
canStore = true
elseif garage and not garage.isImpound and authorized then
local sp = garage.coords.spawnCoords
local dst = #(playerCoords - vec3(sp.x, sp.y, sp.z))
if dst <= 50.0 then
canStore = true
end
end
if canStore then
table.insert(items, {
id = 'radialStoreVehicle',
title = 'Store Vehicle',
icon = 'Car',
type = 'client',
event = 'qs-radialmenu:garages:storeVehicle',
shouldClose = true
})
end
end
-- ── 5. Shell garage options
if CurrentShellGarage and existKey then
local shellData = type(ShellGarages) == 'table' and ShellGarages[CurrentShellGarage] or nil
if shellData and shellData.takeVehicle and shellData.takeVehicle.x then
if not cache.vehicle then
table.insert(items, {
id = 'radialEnterShellGarage',
title = 'Enter Garage',
icon = 'Warehouse',
type = 'client',
event = 'qs-radialmenu:garages:enterShellGarage',
shouldClose = true
})
else
table.insert(items, {
id = 'radialStoreShellVehicle',
title = 'Store Vehicle',
icon = 'Car',
type = 'client',
event = 'qs-radialmenu:garages:storeShellVehicle',
shouldClose = true
})
end
end
end
-- ── 6. Exit Garage (shell exit or VehicleShowRooms)
local showExit = false
if shellExitCoords then
showExit = true
end
if not showExit and Config.VehicleShowRooms then
for _, types in pairs(Config.VehicleShowRooms) do
for _, v in pairs(types) do
if v.entry and v.entry.x then
local dst = #(playerCoords - vec3(v.entry.x, v.entry.y, v.entry.z))
if dst <= 5.5 then
showExit = true
break
end
end
end
if showExit then break end
end
end
if showExit then
table.insert(items, {
id = 'radialExitGarage',
title = 'Exit',
icon = 'DoorOpen',
type = 'client',
event = 'qs-radialmenu:garages:exitGarage',
shouldClose = true
})
end
-- ── 7. Recover Vehicle
if Config.Recovery and Config.Recovery.coords then
for _, v in pairs(Config.Recovery.coords) do
local dst = #(playerCoords - vec3(v.x, v.y, v.z))
if dst <= 5.0 then
table.insert(items, {
id = 'radialRecoverVehicle',
title = 'Recover $' .. (Config.Recovery.price or 0),
icon = 'Car',
type = 'client',
event = 'qs-radialmenu:garages:recoverVehicle',
shouldClose = true
})
break
end
end
end
-- ── 8. Garage Management (owner only, on foot)
if IsGarageOwner and not cache.vehicle then
table.insert(items, {
id = 'radialGarageManagement',
title = 'Management',
icon = 'Settings',
type = 'client',
event = 'qs-radialmenu:garages:management',
shouldClose = true
})
end
-- ── 9. Impound Vehicle (allowed job, on foot)
if not cache.vehicle then
local job = type(GetJobName) == 'function' and GetJobName() or nil
if job and type(IsJobAllowed) == 'function' and IsJobAllowed(job, 'impound') then
table.insert(items, {
id = 'radialImpoundVehicle',
title = 'Impound Vehicle',
icon = 'Car',
type = 'client',
event = 'qs-radialmenu:garages:impoundVehicle',
shouldClose = true
})
end
end
-- ── 10. Job Garages
if Config.JobGarages then
for k, jGarage in pairs(Config.JobGarages) do
local access = type(CheckJob) == 'function' and CheckJob(jGarage.job, jGarage.grade) or false
if access then
local mc = jGarage.coords.menuCoords
local dst = #(playerCoords - vec3(mc.x, mc.y, mc.z))
if dst <= 15.0 then
if not cache.vehicle then
table.insert(items, {
id = 'radialOpenJobGarage_' .. k,
title = 'Open Garage',
icon = 'Warehouse',
type = 'client',
event = 'qs-radialmenu:garages:openJobGarage',
shouldClose = true
})
else
table.insert(items, {
id = 'radialStoreJobVehicle_' .. k,
title = 'Store Vehicle',
icon = 'Warehouse',
type = 'client',
event = 'qs-radialmenu:garages:storeJobVehicle',
shouldClose = true
})
end
end
end
end
end
return items
end)
-- ============================================================
-- Register as an item provider once qs-radialmenu is ready
-- ============================================================
CreateThread(function()
local attempts = 0
while attempts < 60 do
local ok = pcall(function()
exports['qs-radialmenu']:RegisterItemProvider(GetCurrentResourceName())
end)
if ok then return end
attempts = attempts + 1
Wait(500)
end
end)
-- ============================================================
-- Bridge events — call escrowed functions directly
-- (mirrors ox_target onSelect callbacks)
-- Use getClosestGarage() so bridge events also benefit from
-- the self-contained proximity fallback.
-- ============================================================
RegisterNetEvent('qs-radialmenu:garages:openGarage', function()
local gName = getClosestGarage()
if not gName then return end
local garage = Config.Garages[gName]
if not garage then return end
if type(OpenGarageMenu) == 'function' then
OpenGarageMenu(gName, garage.isImpound, nil, garage.type == 'boat')
end
end)
RegisterNetEvent('qs-radialmenu:garages:enterShell', function()
local gName = getClosestGarage()
if not gName then return end
local garage = Config.Garages[gName]
if not garage then return end
if type(GotoShellGarage) == 'function' then
GotoShellGarage(gName, garage.coords.spawnCoords, garage.shell)
end
end)
RegisterNetEvent('qs-radialmenu:garages:buyGarage', function()
local gName = getClosestGarage()
if not gName then return end
local garage = Config.Garages[gName]
if not garage then return end
TriggerServerEvent('advancedgarages:buyGarage', gName, garage.price)
end)
RegisterNetEvent('qs-radialmenu:garages:storeVehicle', function()
if type(StoreVehicle) ~= 'function' then return end
local jobGarage = type(IsNearbyJobGarage) == 'function' and IsNearbyJobGarage() or nil
if jobGarage then
StoreVehicle(jobGarage, true, cache.vehicle)
return
end
local gName = getClosestGarage()
StoreVehicle(gName, false, cache.vehicle)
end)
RegisterNetEvent('qs-radialmenu:garages:enterShellGarage', function()
if not CurrentShellGarage or not existKey then return end
local shellData = type(ShellGarages) == 'table' and ShellGarages[CurrentShellGarage] or nil
if not shellData or not shellData.takeVehicle then return end
nearbyGarageType = 'vehicle'
if type(GotoGarage) == 'function' then
GotoGarage(CurrentShellGarage, vec4(shellData.takeVehicle.x, shellData.takeVehicle.y, shellData.takeVehicle.z, shellData.takeVehicle.h), shellData.shell)
end
end)
RegisterNetEvent('qs-radialmenu:garages:storeShellVehicle', function()
if not CurrentShellGarage or not existKey then return end
nearbyGarageType = 'vehicle'
if type(SaveVehicle) == 'function' then
SaveVehicle(CurrentShellGarage, true)
end
end)
RegisterNetEvent('qs-radialmenu:garages:exitGarage', function()
if type(ExitGarage) == 'function' then
ExitGarage()
end
end)
RegisterNetEvent('qs-radialmenu:garages:recoverVehicle', function()
local vehicleList = lib.callback.await('advancedgarages:getRecoveryVehicles', false)
if not vehicleList or #vehicleList == 0 then
if type(Notification) == 'function' then
Notification(i18n.t('keyholders.empty_out'), 'info')
end
return
end
if type(OpenRecoveryMenu) == 'function' then
OpenRecoveryMenu(vehicleList)
end
end)
RegisterNetEvent('qs-radialmenu:garages:management', function()
TriggerEvent('advancedgarages:client:radialGarageManagement')
end)
RegisterNetEvent('qs-radialmenu:garages:impoundVehicle', function()
TriggerEvent('advancedgarages:client:radialImpoundVehicle')
end)
RegisterNetEvent('qs-radialmenu:garages:openJobGarage', function()
if not Config.JobGarages then return end
local playerCoords = GetEntityCoords(cache.ped)
for k, jGarage in pairs(Config.JobGarages) do
local access = type(CheckJob) == 'function' and CheckJob(jGarage.job, jGarage.grade) or false
if access then
local mc = jGarage.coords.menuCoords
local dst = #(playerCoords - vec3(mc.x, mc.y, mc.z))
if dst <= 15.0 then
local job = jGarage.job or jGarage.gang
local serverVehicles = lib.callback.await('advancedgarages:getJobVehicles', false, jGarage.name, job)
local vehicleList = serverVehicles or {}
local garageIsAvailable = lib.callback.await('advancedgarages:isGarageAvailable', false, k)
if not garageIsAvailable then
if type(Notification) == 'function' then Notification(i18n.t('garage_not_available'), 'error') end
return
end
for _, veh in pairs(vehicleList) do
veh.vehicle = json.encode(veh.vehicle)
end
if jGarage.vehicles then
for _, model in ipairs(jGarage.vehicles) do
local plate = tostring(job .. math.random(111, 999))
table.insert(vehicleList, {
id = #vehicleList + 1,
vehicle = json.encode({ model = model, plate = plate }),
plate = plate,
})
end
end
TriggerServerEvent('advancedgarages:setInJobGarage', k, true)
if type(OpenGarageMenu) == 'function' then
OpenGarageMenu(k, jGarage.isImpound, vehicleList)
end
return
end
end
end
end)
RegisterNetEvent('qs-radialmenu:garages:storeJobVehicle', function()
if not Config.JobGarages or type(StoreVehicle) ~= 'function' then return end
local playerCoords = GetEntityCoords(cache.ped)
for k, jGarage in pairs(Config.JobGarages) do
local access = type(CheckJob) == 'function' and CheckJob(jGarage.job, jGarage.grade) or false
if access then
local mc = jGarage.coords.menuCoords
local dst = #(playerCoords - vec3(mc.x, mc.y, mc.z))
if dst <= 15.0 then
StoreVehicle(jGarage, true)
return
end
end
end
end)
-- ============================================================
-- Cleanup
-- ============================================================
AddEventHandler('onResourceStop', function(resourceName)
if resourceName == 'qs-advancedgarages' then
pcall(function()
exports['qs-radialmenu']:UnregisterItemProvider(GetCurrentResourceName())
end)
end
end)
-- ============================================================
-- Marker thread (mirrors ox_target lines 333-352)
-- Uses getClosestGarage() for proximity fallback.
-- ============================================================
CreateThread(function()
local function checkStoreMarker()
local sleep = 500
local gName = getClosestGarage()
if not gName then return sleep end
local garage = Config.Garages[gName]
if not garage then return sleep end
if not IsGarageOwner and not garage.available and not IsKeyHolder then return sleep end
if type(CheckGarageAuthorization) == 'function' and not CheckGarageAuthorization(garage.jobs, garage.gangs) then return sleep end
if garage.isImpound then return sleep end
if cache.vehicle then
sleep = 0
if type(DrawMarkerZone) == 'function' then
DrawMarkerZone(garage.coords.spawnCoords.x, garage.coords.spawnCoords.y, garage.coords.spawnCoords.z)
end
end
return sleep
end
while true do
Wait(checkStoreMarker())
end
end)
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'F_RealCarKeysSystem' then
return
end
function AddVehiclekeys(vehicle, plate, item)
TriggerServerEvent('F_RealCarKeysSystem:generateVehicleKeys', plate)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'MrNewbVehicleKeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
exports.MrNewbVehicleKeys:GiveKeysByPlate(plate)
end
function RemoveVehiclekeys(vehicle, plate)
exports.MrNewbVehicleKeys:RemoveKeysByPlate(plate)
end
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'fivecode_carkeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
DecorSetInt(vehicle, 'owner', GetPlayerServerId(PlayerId()))
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,15 @@
if Config.Vehiclekeys ~= 'glfp10_carkeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
if not item then return end
if type(vehicle) ~= 'string' then return end
local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicle))
TriggerServerEvent('carkeys:server:buyKey', plate, model)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'jc_vehiclekeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
exports['jc_vehiclekeys']:GiveKeys(plate)
end
function RemoveVehiclekeys(vehicle, plate)
exports['jc_vehiclekeys']:RemoveKeys(plate)
end
@@ -0,0 +1,14 @@
if Config.Vehiclekeys ~= 'mono_carkeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
if not item then return end
if type(vehicle) ~= 'string' then return end
TriggerServerEvent('mono_carkeys:CreateKey', plate)
end
function RemoveVehiclekeys(vehicle, plate)
if type(vehicle) ~= 'string' then return end
TriggerServerEvent('mono_carkeys:DeleteKey', 1, plate)
end
@@ -0,0 +1,12 @@
if Config.Vehiclekeys ~= 'qb-vehiclekeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
Wait(100)
TriggerEvent('vehiclekeys:client:SetOwner', plate)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,12 @@
if Config.Vehiclekeys ~= 'qbx_vehiclekeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
Wait(100)
TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', plate)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,14 @@
if Config.Vehiclekeys ~= 'qs-vehiclekeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
if not item then
return
end
exports['qs-vehiclekeys']:GiveKeys(plate, vehicle, item)
end
function RemoveVehiclekeys(vehicle, plate)
exports['qs-vehiclekeys']:RemoveKeys(plate, vehicle)
end
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'ti_vehicleKeys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
exports['ti_vehicleKeys']:addTemporaryVehicle(plate)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'vehicles_keys' then
return
end
function AddVehiclekeys(vehicle, plate, item)
TriggerServerEvent('vehicles_keys:selfGiveVehicleKeys', plate)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,33 @@
if Config.Vehiclekeys ~= 'wasabi_carlock' then
return
end
local givenKeys = {}
function AddVehiclekeys(vehicle, plate, item)
if not plate or plate == '' then
print('[WARNING] Invalid plate, unable to give key.')
return
end
if givenKeys[plate] then
print('[INFO] Key already given for: ' .. plate)
return
end
givenKeys[plate] = true
print('[DEBUG] Giving key via wasabi_carlock for plate: ' .. plate)
exports.wasabi_carlock:GiveKey(plate)
end
function RemoveVehiclekeys(vehicle, plate)
if not plate or plate == '' then
print('[WARNING] Invalid plate, unable to remove key.')
return
end
givenKeys[plate] = nil
print('[DEBUG] Removing key via wasabi_carlock for plate: ' .. plate)
exports.wasabi_carlock:RemoveKey(plate)
end
@@ -0,0 +1,11 @@
if Config.Vehiclekeys ~= 'xd_locksystem' then
return
end
function AddVehiclekeys(vehicle, plate, item)
exports['xd_locksystem']:givePlayerKeys(plate)
end
function RemoveVehiclekeys(vehicle, plate)
return
end
@@ -0,0 +1,8 @@
if Config.Wardrobe ~= 'ak47_clothing' then
return
end
function openWardrobe()
exports['ak47_clothing']:openOutfit() -- if it doesn't work with this export use other event
-- TriggerEvent('ak47_clothing:openOutfitMenu') -- Use this only if the first export doesn't work, depend of you'r version
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'codem-appearance' then
return
end
function openWardrobe()
TriggerEvent('codem-apperance:OpenWardrobe')
end
@@ -0,0 +1,78 @@
if Config.Wardrobe ~= 'default' then
return
end
function openWardrobe()
if Config.Framework == 'qb' then
return TriggerEvent('qb-clothing:client:openOutfitMenu')
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'room', {
title = Lang('HOUSING_MENU_WARDROBE_DEFAULT_TITLE'),
align = 'right',
elements = {
{ label = Lang('HOUSING_MENU_CLOTHES_MENU'), value = 'player_dressing' },
{ label = Lang('HOUSING_MENU_DELETE_CLOTHES'), value = 'remove_cloth' }
}
}, function(data, menu)
if data.current.value == 'player_dressing' then
menu.close()
TriggerServerCallback('qb-houses:server:getPlayerDressing', function(dressing)
elements = {}
for i = 1, #dressing, 1 do
table.insert(elements, {
label = dressing[i],
value = i
})
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'player_dressing',
{
title = Lang('HOUSING_MENU_WARDROBE_DEFAULT_TITLE'),
align = 'right',
elements = elements
}, function(data2, menu2)
TriggerEvent('skinchanger:getSkin', function(skin)
TriggerServerCallback('qb-houses:server:getPlayerOutfit', function(clothes)
TriggerEvent('skinchanger:loadClothes', skin, clothes)
TriggerEvent('esx_skin:setLastSkin', skin)
TriggerEvent('skinchanger:getSkin', function(skin)
TriggerServerEvent('esx_skin:save', skin)
end)
end, data2.current.value)
end)
end, function(data2, menu2)
menu2.close()
end)
end)
elseif data.current.value == 'remove_cloth' then
menu.close()
TriggerServerCallback('qb-houses:server:getPlayerDressing', function(dressing)
elements = {}
for i = 1, #dressing, 1 do
table.insert(elements, {
label = dressing[i],
value = i
})
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'remove_cloth', {
title = Lang('HOUSING_MENU_DELETE_CLOTHES'),
align = 'right',
elements = elements
}, function(data2, menu2)
menu2.close()
TriggerServerEvent('qb-houses:server:removeOutfit', data2.current.value)
Notification(Lang('HOUSING_NOTIFICATION_OUTFIT_DELETE'), 'inform')
end, function(data2, menu2)
menu2.close()
end)
end)
end
end, function(data, menu)
menu.close()
end)
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'fivem-appearance' then
return
end
function openWardrobe()
exports['fivem-appearance']:openWardrobe()
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'illenium-appearance' then
return
end
function openWardrobe()
TriggerEvent('illenium-appearance:client:openOutfitMenu')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'mAppearance' then
return
end
function openWardrobe()
TriggerEvent('codem-appearance:OpenWardrobe')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'p_appearance' then
return
end
function openWardrobe()
exports['p_appearance']:openOutfits()
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'qb-clothing' then
return
end
function openWardrobe()
TriggerEvent('qb-clothing:client:openOutfitMenu')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'qs-appearance' then
return
end
function openWardrobe()
TriggerEvent('clothing:openOutfitMenu')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'raid_clothes' then
return
end
function openWardrobe()
TriggerEvent('raid_clothes:openmenu')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'rcore_clothes' then
return
end
function openWardrobe()
TriggerEvent('rcore_clothes:openOutfits')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'rcore_clothing' then
return
end
function openWardrobe()
TriggerEvent('rcore_clothing:openChangingRoom')
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'sleek-clothestore' then
return
end
function openWardrobe()
exports['sleek-clothestore']:OpenWardrobe()
end
@@ -0,0 +1,7 @@
if Config.Wardrobe ~= 'tgiann-clothing' then
return
end
function openWardrobe()
TriggerEvent('tgiann-clothing:openOutfitMenu')
end
@@ -0,0 +1,27 @@
--[[
Here you have the weather tyme configuration, you can modify it or even
create your own! In case your inventory is not here, you can ask the
creator to create a file following this example and add it!
]]
if Config.Weather ~= 'cd_easytime' then
return
end
RegisterNetEvent('advancedgarages:GetWeatherSync')
AddEventHandler('advancedgarages:GetWeatherSync', function(bool, time)
if bool then
Wait(150)
TriggerEvent('cd_easytime:PauseSync', true)
NetworkOverrideClockTime(time, 0, 0)
ClearOverrideWeather()
ClearWeatherTypePersist()
SetWeatherTypePersist('CLEAR')
SetWeatherTypeNow('CLEAR')
SetWeatherTypeNowPersist('CLEAR')
else
Wait(150)
TriggerEvent('cd_easytime:PauseSync', false)
Debug('Time was resynchronized to the original')
end
end)
@@ -0,0 +1,27 @@
--[[
Here you have the weather tyme configuration, you can modify it or even
create your own! In case your inventory is not here, you can ask the
creator to create a file following this example and add it!
]]
if Config.Weather ~= 'qb-weathersync' then
return
end
RegisterNetEvent('advancedgarages:GetWeatherSync')
AddEventHandler('advancedgarages:GetWeatherSync', function(bool, time)
if bool then
Wait(150)
TriggerEvent('qb-weathersync:client:DisableSync')
NetworkOverrideClockTime(time, 0, 0)
ClearOverrideWeather()
ClearWeatherTypePersist()
SetWeatherTypePersist('CLEAR')
SetWeatherTypeNow('CLEAR')
SetWeatherTypeNowPersist('CLEAR')
else
Wait(150)
TriggerEvent('qb-weathersync:client:EnableSync')
Debug('Time was resynchronized to the original')
end
end)
@@ -0,0 +1,28 @@
--[[
Here you have the weather tyme configuration, you can modify it or even
create your own! In case your inventory is not here, you can ask the
creator to create a file following this example and add it!
]]
if Config.Weather ~= 'vSync' then
return
end
RegisterNetEvent('advancedgarages:GetWeatherSync')
AddEventHandler('advancedgarages:GetWeatherSync', function(bool, time)
if bool then
Wait(150)
TriggerEvent('vSync:updateWeather', 'EXTRASUNNY', false)
NetworkOverrideClockTime(time, 0, 0)
ClearOverrideWeather()
ClearWeatherTypePersist()
SetWeatherTypePersist('CLEAR')
SetWeatherTypeNow('CLEAR')
SetWeatherTypeNowPersist('CLEAR')
else
Wait(150)
TriggerEvent('vSync:toggle', true)
TriggerServerEvent('vSync:requestSync')
Debug('Time was resynchronized to the original')
end
end)
@@ -0,0 +1,366 @@
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] Safe for users to modify. Adjust these values as needed.
-- • [INFO] Informational note describing what the variable or block does.
-- • [ADV] Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] Core functionality. Do not modify unless you are a developer.
-- • [AUTO] Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
Config = Config or {} -- [CORE]
Locales = Locales or {} -- [CORE]
--──────────────────────────────────────────────────────────────────────────────
-- Language & UI Paths [EDIT]
-- [INFO] Select the locale and NUI base path used by the web UI.
--──────────────────────────────────────────────────────────────────────────────
-- Languages available by default:
-- 'ar','bg','cs','da','de','el','en','es','fa','fr','he','hi','hu','it',
-- 'jp','ko','nl','no','pl','pt','ro','ru','sl','sv','tk','tr','zh-CN'
Config.Locale = 'ro' -- [EDIT] Default language code.
Config.Path = 'nui://qs-advancedgarages/web/' -- [ADV] Base NUI path (keep if you didn't move /web).
Config.ImagePath = Config.Path .. 'images/' -- [ADV] Asset path for images.
Config.MaxPlateLength = 7 -- [EDIT] Maximum plate length.
--──────────────────────────────────────────────────────────────────────────────
-- Framework Detection [AUTO]
-- [INFO] Automatically detects ESX/QB. If renamed, add adapters and set manually.
--──────────────────────────────────────────────────────────────────────────────
local frameworks = { -- [CORE]
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb',
}
Config.Framework = DependencyCheck(frameworks) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Inventory System Detection [AUTO]
-- [INFO] Automatically detects the active inventory system. Extend via adapters.
--──────────────────────────────────────────────────────────────────────────────
local inventories = { -- [CORE]
['qs-inventory'] = 'qs-inventory',
['qb-inventory'] = 'qb-inventory',
['ps-inventory'] = 'ps-inventory',
['ox_inventory'] = 'ox_inventory',
['core_inventory'] = 'core_inventory',
['codem-inventory'] = 'codem-inventory',
['inventory'] = 'inventory',
['origen_inventory'] = 'origen_inventory',
['tgiann-inventory'] = 'tgiann-inventory',
}
Config.Inventory = DependencyCheck(inventories) or 'default' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Wardrobe / Appearance Detection [AUTO]
-- [INFO] Detects your clothing/appearance system automatically.
--──────────────────────────────────────────────────────────────────────────────
local wardrobes = { -- [CORE]
['qs-appearance'] = 'qs-appearance',
['qb-clothing'] = 'qb-clothing',
['codem-appearance'] = 'codem-appearance',
['ak47_clothing'] = 'ak47_clothing',
['fivem-appearance'] = 'fivem-appearance',
['illenium-appearance'] = 'illenium-appearance',
['raid_clothes'] = 'raid_clothes',
['rcore_clothes'] = 'rcore_clothes',
['rcore_clothing'] = 'rcore_clothing',
['sleek-clothestore'] = 'sleek-clothestore',
['tgiann-clothing'] = 'tgiann-clothing',
['p_appearance'] = 'p_appearance',
}
Config.Wardrobe = DependencyCheck(wardrobes) or 'default' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Menu / Target Systems [EDIT]
-- [INFO] Choose your interaction menu system and optional target/radial.
--──────────────────────────────────────────────────────────────────────────────
-- Menu options: 'esx_menu_default','nh-context','ox_lib','qb-menu','esx_context'
-- Target options: 'ox_target','qb-radialmenu','none'
Config.Menu = 'ox_lib' -- [EDIT] Recommended: 'ox_lib'
Config.UseTarget = 'none' -- [EDIT] 'ox_target','qb-radialmenu' or 'none' (no qb-target).
--──────────────────────────────────────────────────────────────────────────────
-- Fuel / Weather / Vehicle Keys Detection [AUTO]
-- [INFO] Auto-detect common auxiliary systems. Avoid running duplicates.
--──────────────────────────────────────────────────────────────────────────────
local fuels = { -- [CORE]
['qs-fuelstations'] = 'qs-fuelstations',
['LegacyFuel'] = 'LegacyFuel',
['okokGasStation'] = 'okokGasStation',
['esx-sna-fuel'] = 'esx-sna-fuel',
['ps-fuel'] = 'ps-fuel',
['lj-fuel'] = 'lj-fuel',
['ox_fuel'] = 'ox_fuel',
['ti_fuel'] = 'ti_fuel',
['FRFuel'] = 'FRFuel',
['ND_Fuel'] = 'ND_Fuel',
['cdn-fuel'] = 'cdn-fuel',
['BigDaddy-Fuel'] = 'BigDaddy-Fuel',
}
Config.Fuel = DependencyCheck(fuels) or 'none' -- [AUTO]
local weathers = { -- [CORE]
['cd_easytime'] = 'cd_easytime',
['qb-weathersync'] = 'qb-weathersync',
['vSync'] = 'vSync',
}
Config.Weather = DependencyCheck(weathers) or 'none' -- [AUTO]
local vehicleKeys = { -- [CORE]
['qs-vehiclekeys'] = 'qs-vehiclekeys',
['qb-vehiclekeys'] = 'qb-vehiclekeys',
['F_RealCarKeysSystem'] = 'F_RealCarKeysSystem',
['fivecode_carkeys'] = 'fivecode_carkeys',
['glfp10_carkeys'] = 'glfp10_carkeys',
['jc_vehiclekeys'] = 'jc_vehiclekeys',
['mono_carkeys'] = 'mono_carkeys',
['ti_vehicleKeys'] = 'ti_vehicleKeys',
['vehicles_keys'] = 'vehicles_keys',
['wasabi_carlock'] = 'wasabi_carlock',
['xd_locksystem'] = 'xd_locksystem',
['qbx_vehiclekeys'] = 'qbx_vehiclekeys',
['MrNewbVehicleKeys'] = 'MrNewbVehicleKeys',
}
Config.Vehiclekeys = DependencyCheck(vehicleKeys) or 'none' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Map Blips & Tags [EDIT]
-- [INFO] Customize sprites/colors for garage categories and quick tags.
--──────────────────────────────────────────────────────────────────────────────
Config.BlipSprites = { -- [EDIT]
plane = { owned = 423, notOwned = 372, size = 0.6, color = 67 },
vehicle = { owned = 357, notOwned = 369, size = 0.6, color = 67 },
boat = { owned = 410, notOwned = 371, size = 0.6, color = 67 },
impound = { color = 6 },
}
Config.Tags = { 'Favorite', 'Fast', 'Safe', 'Luxury', 'Sports', 'Family', 'Special', 'Classic' } -- [EDIT]
Config.Shells = {
{
model = 'sp_illegal_01_subhampro_tebex_io'
},
{
model = 'sp_illegal_02_subhampro_tebex_io'
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Economy & Behavior [EDIT]
-- [INFO] Fees, behavior toggles, persistence and visual preferences.
--──────────────────────────────────────────────────────────────────────────────
Config.TransferGaragePrice = 500 -- [EDIT] Fee to withdraw vehicles from shell.
Config.TransferBlacklist = { -- [EDIT] Vehicle models that cannot be transferred to another player.
-- 'adder',
-- 'zentorno',
-- 't20',
}
Config.GarageSellTax = 1.3 -- [EDIT] Creator's profit multiplier on sale.
Config.ImpoundPrice = 500 -- [EDIT] Default impound release fee.
Config.RepairKit = false -- [EDIT] Enable 'repairkit' usage in garages.
Config.DisableBlips = false -- [EDIT] Hide all blips if true.
Config.ShortNames = false -- [EDIT] Shorten blip names.
Config.IdleDuration = 10000 -- [EDIT] AFK cinematic camera ms (30s).
Config.PlayerToVehicleAnimation = true -- [EDIT] Play enter-vehicle animation.
Config.SetEntityAlpha = true -- [EDIT] Fade effects while saving.
Config.GarageSync = true -- [EDIT] Share slots/vehicles across same shell.
Config.PersistentVehicles = true -- [EDIT] Keep vehicles persistent on map.
Config.PersistentVehiclesLocked = false -- [EDIT] Spawn persistent vehicles locked?
Config.EnablePublicInteriors = false -- [EDIT] Allow entry to public interiors.
Config.EnabledButtons = {
['favorite'] = true,
['tag'] = true,
['send'] = true,
['transfer'] = true,
['bring'] = true
}
--──────────────────────────────────────────────────────────────────────────────
-- Decoration & Lighting [EDIT]
-- [INFO] Money source, FiveGuard integration, and default light intensity.
--──────────────────────────────────────────────────────────────────────────────
Config.SellObjectCommision = 0.3 -- [EDIT] Furniture sale commission.
Config.MoneyType = 'money' -- [EDIT] 'money' | 'bank'
Config.FiveGuard = false -- [EDIT] false | 'your-fiveguard-resource-name'
Config.DefaultLightIntensity = 40.0 -- [EDIT] Default shell light intensity.
--──────────────────────────────────────────────────────────────────────────────
-- Music & SFX [EDIT]
-- [INFO] Background music inside garages and menu click sounds.
--──────────────────────────────────────────────────────────────────────────────
Config.Sounds = true -- [EDIT] Enable ambient music.
Config.SoundVolume = 0.1 -- [EDIT] Suggested 0.010.05 for ambient.
Config.SoundFiles = { 'A$AP_Rocky_-_Shittin_Me' } -- [ADV] Add more in web/sounds/*.ogg
Config.MenuSounds = true -- [EDIT] UI/menu sound effects.
-- DECORATE MUSIC
Config.Music = 'A$AP_Rocky_-_Shittin_Me' -- [EDIT] false to disable music
Config.MusicVolume = 0.01
--──────────────────────────────────────────────────────────────────────────────
-- FurniCreator · Client Graphics & Capture [EDIT]
-- [INFO] Interval between thumbnail captures (increase on low-end PCs).
--──────────────────────────────────────────────────────────────────────────────
Config.FurniCreator = { interval = 300 } -- [EDIT] ms between captures.
Config.FurniCreatorCommand = 'garagefurniture'
--──────────────────────────────────────────────────────────────────────────────
-- Job Permissions [EDIT]
-- [INFO] Whitelist who can create garages or impound vehicles.
--──────────────────────────────────────────────────────────────────────────────
Config.AllowedJobs = { 'mechanic', 'realestate' } -- [EDIT]
Config.ImpoundJobs = { 'police' } -- [EDIT]
Config.CreatorJobs = { -- [EDIT]
{ job = 'mechanic', grade = { 1, 2 } },
}
Config.DisableSounds = false -- [EDIT] Mute all garage sounds.
Config.EnableF3Shop = true
--──────────────────────────────────────────────────────────────────────────────
-- Recovery Points & Blip [EDIT]
-- [INFO] Locations to recover vehicles and associated blip settings.
--──────────────────────────────────────────────────────────────────────────────
Config.Recovery = { -- [EDIT]
coords = {
vec3(408.975830, -1622.887939, 29.279907),
vec3(944.373657, -463.318665, 61.547241),
},
blip = { sprite = 67, color = 6, scale = 0.6, name = 'Recovery', shortRange = true, active = true },
price = 5000,
}
Config.ZoneRadius = 50.0 -- [EDIT] PolyZone radius for interactions.
--──────────────────────────────────────────────────────────────────────────────
-- Default Vehicle/Boat/Plane Camera Presets [EDIT]
-- [INFO] Fallback cameras used for personal garages or missing configs.
--──────────────────────────────────────────────────────────────────────────────
Config.vehicleCamera = { -- [EDIT]
vehicleCoords = vec4(-148.628571, -594.474731, 166.723755, 155.905502),
camera = {
coords = vec3(-146.56, -596.43, 166.93),
rotation = vec3(-2.0, 7.0, 59.0),
ped = vec4(-147.84, -595.20, 167.00, 226.34),
},
}
Config.BoatCamera = { -- [EDIT]
vehicleCoords = vec4(-859.648376, -1476.923096, 0.432983, 291.968506),
camera = {
coords = vec3(-857.762634, -1471.569214, 1.629272),
rotation = vec3(-10.0, 2.0, 178.0),
ped = vec4(-865.13, -1484.44, 1.60, 351.98),
},
}
Config.PlaneCamera = { -- [EDIT]
vehicleCoords = vec4(1729.635132, 3298.760498, 40.788330, 359.661407),
camera = {
coords = vec3(1733.762695, 3303.072510, 41.209473),
rotation = vec3(-5.0, 2.0, 145.0),
ped = vec4(1725.16, 3294.45, 41.22, 317.20),
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Currency & Intl Formatting [EDIT]
-- [INFO] Purely visual. Affects how prices/dates appear in the NUI.
--──────────────────────────────────────────────────────────────────────────────
Config.Intl = {
locales = 'en-US', -- [EDIT] Format locale (e.g. en-US, pt-BR, es-ES, fr-FR, etc.)
options = {
style = 'currency', -- [EDIT] Display style: 'decimal', 'currency', 'percent', 'unit'
currency = 'USD', -- [EDIT] Currency code (e.g. USD, EUR, BRL, RUB, CNY)
minimumFractionDigits = 0 -- [EDIT] Number of decimal places shown.
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Creator / Editor Controls [EDIT]
-- [INFO] Minimum polygon length and camera/editor control sensitivities.
--──────────────────────────────────────────────────────────────────────────────
Config.MinPointLength = 70.0 -- [EDIT] Minimum total poly length.
Config.MinZOffset = 30 -- [EDIT] Minimum shell Z spawn offset
Config.CreatorAlpha = 200 -- [EDIT] Creator ghost alpha (visual aid)
Config.NeedToBeInsidePoints = { -- [EDIT]
['entry'] = true, -- [INFO] Require to be inside entry poly to interact.
['shell'] = false -- [INFO] Force shell interactions inside shell poly.
}
CameraOptions = { -- [EDIT]
lookSpeedX = 1000.0, -- Horizontal camera speed.
lookSpeedY = 1000.0, -- Vertical camera speed.
moveSpeed = 20.0, -- Free-move speed.
climbSpeed = 10.0, -- Up/down speed.
rotateSpeed = 20.0, -- Rotation speed.
}
ActionControls = { -- [EDIT] Change labels/keys at your own risk.
leftClick = { label = 'Left Click', codes = { 24 } },
rightClick = { label = 'Right Click', codes = { 25 } },
forward = { label = 'Forward +/-', codes = { 33, 32 } },
right = { label = 'Right +/-', codes = { 35, 34 } },
up = { label = 'Up +/-', codes = { 52, 51 } },
add_point = { label = 'Add Point', codes = { 24 } },
undo_point = { label = 'Undo Last', codes = { 25 } },
rotate_z = { label = 'RotateZ +/-', codes = { 20, 73 } },
rotate_z_scroll = { label = 'RotateZ +/-', codes = { 17, 16 } },
offset_z = { label = 'Offset Z +/-', codes = { 44, 46 } },
boundary_height = { label = 'Z Boundary +/-', codes = { 20, 73 } },
done = { label = 'Done', codes = { 191 } },
cancel = { label = 'Cancel', codes = { 194 } },
arrow_left = { label = 'Previous', codes = { 174 } },
arrow_right = { label = 'Next', codes = { 175 } },
-- Decorate (Modern Mode)
place_object_on_ground = { label = 'Place Object on Ground', codes = { 47 } },
toggle_free_mode = { label = 'Toggle Free Mode', codes = { 167 } },
toggle_cursor = { label = 'Toggle Cursor', codes = { 166 } },
toggle_editor_mode = { label = 'Toggle Translate/Rotate', codes = { 311 } },
toggle_gizmo_mode = { label = 'Toggle Gizmo Mode', codes = { 244 } },
toggle_free_camera = { label = 'Toggle Free Camera', codes = { 170 } },
focus_free_camera = { label = 'Focus Object', codes = { 49 } },
zoom = { label = 'Zoom +/-', codes = { 17, 16 } },
increase_z = { label = 'Z Boundary +/-', codes = { 180, 181 } },
decrease_z = { label = 'Z Boundary +/-', codes = { 21, 180, 181 } },
change_shell = { label = 'Change Shell +/-', codes = { 189, 190 } },
}
--──────────────────────────────────────────────────────────────────────────────
-- Showcase Camera Sequencer [EDIT]
-- [INFO] Randomized cinematic camera passes around vehicles in the shell.
--──────────────────────────────────────────────────────────────────────────────
Config.RandomizedPositions = true -- [EDIT] Randomize camera sequence order.
Config.CameraDuration = 10000 -- [EDIT] ms shown per transition.
-- [INFO] Positions: 'front-left','front-middle','front-right','back-left','back-middle','back-right',
-- 'left','right','top-left','top-middle','top-right','center','front-left-diagonal','front-right-diagonal',
-- 'back-left-diagonal','back-right-diagonal'
Config.CameraAnimations = { -- [EDIT] Needs ≥ 2 entries to work.
{ distance = 4.0, fovFrom = 20.0, fovTo = 35.0, from = 'front-middle', to = 'front-left' },
{ distance = 5.0, fovFrom = 30.0, fovTo = 40.0, from = 'front-left', to = 'left' },
{ distance = 6.0, fovFrom = 40.0, fovTo = 35.0, from = 'back-middle', to = 'back-right' },
{ distance = 5.0, fovFrom = 30.0, fovTo = 30.0, from = 'back-right', to = 'right' },
{ distance = 5.0, fovFrom = 35.0, fovTo = 40.0, from = 'right', to = 'front-right' },
{ distance = 8.0, fovFrom = 50.0, fovTo = 50.0, from = 'top-middle', to = 'front-middle' },
{ distance = 7.0, fovFrom = 30.0, fovTo = 50.0, from = 'left', to = 'top-middle' },
{ distance = 4.5, fovFrom = 40.0, fovTo = 35.0, from = 'back-left', to = 'back-right' },
{ distance = 3.5, fovFrom = 25.0, fovTo = 30.0, from = 'right', to = 'back-right' },
{ distance = 6.5, fovFrom = 45.0, fovTo = 50.0, from = 'back-middle', to = 'top-middle' },
}
--──────────────────────────────────────────────────────────────────────────────
-- Debug [EDIT]
-- [INFO] Verbose logging for development. Keep disabled in production.
--──────────────────────────────────────────────────────────────────────────────
Config.Debug = false -- [EDIT]
Config.ZoneDebug = false -- [EDIT]
@@ -0,0 +1,13 @@
-- Decoration / Distances and Access Rules [EDIT]
-- [INFO] Controls object spawn radius, maximum decoration distance, and
-- who is allowed to decorate properties.
Config.SpawnDistance = 30.0 -- [EDIT] Object spawn radius in meters.
Config.MaximumDistanceForDecorate = 350.0 -- [EDIT] Max distance allowed for decoration; set to false to disable the limit.
Config.DecorateOnlyAccessForOwner = true -- [EDIT] Only the property owner can decorate (recommended: true).
Config.HideRadarInDecorate = true -- [EDIT] Hides the minimap while in decoration mode.
-- Dynamic Doors [EDIT]
-- [INFO] Enables the creation and management of dynamic doors from the editor.
-- [ADV] Requires in server.cfg: setr game_enableDynamicDoorCreation "true"
Config.DynamicDoors = true -- [EDIT] Enable dynamic doors?
@@ -0,0 +1 @@
Config.FiveManageToken = 'gTtArEFWn8nRyzuvrXBBDNO56WkqhLtb' -- [EDIT] Add your FiveManage token here.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,989 @@
-- Garages Registry [EDIT]
-- [INFO] Define impounds and regular garages. Keep at least one impound entry.
Config.Garages = {
--──────────────────────────────────────────────────────────────────────────
-- Impound Garages [EDIT]
-- [INFO] Keep at least one impound; the system depends on it.
--──────────────────────────────────────────────────────────────────────────
['Hayes Autos'] = {
owner = true, -- [EDIT] If public, set false.
available = true, -- [EDIT] If public, set true.
isImpound = true, -- [EDIT] Mark as impound yard.
type = 'vehicle', -- [EDIT] 'vehicle' | 'boat' | 'plane'
shell = {
-- [INFO] Shell preset used for the interior.
shell = 1
},
coords = {
-- [EDIT] Menu marker and spawn position.
menuCoords = vec3(483.75, -1312.29, 29.21),
spawnCoords = vec4(493.279114, -1329.283569, 29.027100, 328.818909)
},
vehicleCamera = {
-- [EDIT] Cinematic camera for preview.
vehicleCoords = vec4(493.279114, -1329.283569, 29.027100, 328.818909),
camera = {
coords = vec3(496.29, -1329.01, 29.34),
rotation = vec3(-5.0, -6.0, 103.0),
ped = vec4(494.67, -1329.35, 29.34, 256.84)
}
}
},
['Airport Impound Hangar'] = {
owner = true,
available = true,
isImpound = true,
type = 'plane',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(-1299.520874, -3407.564941, 13.929688),
spawnCoords = vec4(-1271.512085, -3380.808838, 13.929688, 331.653534)
},
vehicleCamera = {
vehicleCoords = vec4(-1271.512085, -3380.822021, 13.643188, 331.653534),
camera = {
coords = vec3(-1273.885742, -3375.032959, 13.929688),
rotation = vec3(-2.0, 2.0, 213.0),
ped = vec4(-1274.268188, -3381.243896, 13.929688, -10.000000)
}
}
},
['Boat Impound Pier'] = {
owner = true,
available = true,
isImpound = true,
type = 'boat',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(-858.039551, -1470.685669, 1.629272),
spawnCoords = vec4(-859.621948, -1476.909912, 0.432983, 291.968506)
},
vehicleCamera = {
vehicleCoords = vec4(-859.648376, -1476.923096, 0.432983, 291.968506),
camera = {
coords = vec3(-856.14, -1470.95, 1.63),
rotation = vec3(-10.0, 2.0, 174.0),
ped = vec4(-864.89, -1484.37, 1.60, 338.73)
}
}
},
--──────────────────────────────────────────────────────────────────────────
-- Regular Vehicle Garages [EDIT]
-- [INFO] Customize positions and camera paths as needed.
--──────────────────────────────────────────────────────────────────────────
['Legion Square'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- [EDIT] Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- [INFO] Big Public Garage
},
coords = {
menuCoords = vec3(215.446167, -809.802185, 30.728882),
spawnCoords = vec4(232.931870, -790.087891, 29.454932, 158.740158)
},
vehicleCamera = {
vehicleCoords = vec4(251.406601, -752.479126, 34.301147, 289.133850),
camera = {
coords = vec3(253.938461, -749.986816, 34.421216),
rotation = vec3(2.0, 6.0, 155.0),
ped = vec4(251.48, -751.13, 34.64, 330.67)
}
}
},
['Pillbox Hill Garage'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- [EDIT] Price to store a vehicle
-- jobs = { -- [ADV] Restrict access by job (example).
-- {
-- name = 'police',
-- grades = { 1, 2 }
-- },
-- {
-- name = 'ambulance',
-- grades = false -- all grades
-- }
-- },
type = 'vehicle',
shell = {
shell = 7 -- [INFO] Big Public Garage
},
coords = {
menuCoords = vec3(100.99, -1071.73, 29.23),
spawnCoords = vec4(113.87, -1071.64, 28.19, 85.48)
},
vehicleCamera = {
vehicleCoords = vec4(142.008789, -1081.094482, 28.487915, 56.692913),
camera = {
coords = vec3(141.13, -1077.71, 29.19),
rotation = vec3(-5.0, -7.0, 200.0),
ped = vec4(141.55, -1079.35, 29.19, 17.46)
}
}
},
['Vinewood West'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
jobs = {
{
name = 'police',
grades = { 1, 2 }
},
{
name = 'ambulance',
grades = false -- all grades
}
},
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(-338.769226, 267.428589, 85.709839),
spawnCoords = vec4(-334.443939, 283.410980, 84.777344, 178.582672)
},
vehicleCamera = {
vehicleCoords = vec4(-348.646149, 269.630768, 85.103271, 308.976379),
camera = {
coords = vec3(-348.36, 272.81, 85.06),
rotation = vec3(-1.2, 8.0, 193.0),
ped = vec4(-349.06, 270.87, 85.14, 32.27)
}
}
},
['Vinewood Center'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(70.074722, 12.342858, 68.944336),
spawnCoords = vec4(75.890114, 19.292309, 67.927490, 158.740158)
},
vehicleCamera = {
vehicleCoords = vec4(60.830769, 19.872530, 69.163330, 357.165344),
camera = {
coords = vec3(59.01, 22.49, 69.45),
rotation = vec3(-4.0, 8.0, 234.0),
ped = vec4(59.72, 20.57, 69.43, 96.60)
}
}
},
['Penitentiary'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- Big Public Garage
},
coords = {
menuCoords = vec3(1899.138428, 2602.852783, 45.742188),
spawnCoords = vec4(1892.400024, 2601.349365, 44.287231, 269.291351)
},
vehicleCamera = {
vehicleCoords = vec4(1849.186768, 2608.773682, 45.169189, 215.433090),
camera = {
coords = vec3(1852.30, 2609.05, 45.57),
rotation = vec3(-2.3, 7.0, 110.0),
ped = vec4(1850.14, 2609.54, 45.60, 311.53)
}
}
},
['Motel Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(273.705505, -344.241760, 44.916504),
spawnCoords = vec4(285.428558, -347.894501, 43.950195, 161.574799)
},
vehicleCamera = {
vehicleCoords = vec4(288.804382, -346.127472, 44.427856, 354.330719),
camera = {
coords = vec3(286.79, -343.75, 44.82),
rotation = vec3(-1.5, 5.0, 240.0),
ped = vec4(287.73, -345.23, 44.92, 95.15)
}
}
},
['Spanish Ave Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(-1160.347290, -740.967041, 19.675415),
spawnCoords = vec4(-1151.973633, -749.512085, 17.929663, 223.937012)
},
vehicleCamera = {
vehicleCoords = vec4(-1161.916504, -726.395630, 19.928223, 65.196854),
camera = {
coords = vec3(-1164.67, -727.76, 20.44),
rotation = vec3(2.0, 7.0, 315.0),
ped = vec4(-1162.45, -727.52, 20.54, 152.68)
}
}
},
['Little Seoul Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- Big Public Garage
},
coords = {
menuCoords = vec3(-350.861542, -874.839539, 31.065918),
spawnCoords = vec4(-357.771423, -883.226379, 29.893042, 0.000000)
},
vehicleCamera = {
vehicleCoords = vec4(-327.151642, -911.683533, 30.509888, 243.779526),
camera = {
coords = vec3(-325.40, -914.50, 30.90),
rotation = vec3(-1.3, 7.0, 36.0),
ped = vec4(-326.63, -913.22, 31.08, 199.41)
}
}
},
['Laguna Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(364.074738, 297.903290, 103.486450),
spawnCoords = vec4(367.503296, 296.004395, 102.195654, 348.661407)
},
vehicleCamera = {
vehicleCoords = vec4(374.769226, 283.450562, 102.559692, 51.023624),
camera = {
coords = vec3(374.06, 286.73, 103.12),
rotation = vec3(-4.5, -7.0, 195.0),
ped = vec4(374.74, 284.89, 103.20, 333.09)
}
}
},
['Airport Los Santos'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- Big Public Garage
},
coords = {
menuCoords = vec3(-796.865906, -2024.663696, 8.874756),
spawnCoords = vec4(-790.153870, -2022.949463, 7.719800, 56.692913)
},
vehicleCamera = {
vehicleCoords = vec4(-761.287903, -2049.336182, 8.470337, 14.173228),
camera = {
coords = vec3(-759.89, -2046.60, 8.81),
rotation = vec3(-2.0, -2.0, 155.0),
ped = vec4(-760.36, -2048.29, 8.92, 287.70)
}
}
},
['San Andreas Beach'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(-1183.226318, -1510.958252, 4.359009),
spawnCoords = vec4(-1183.516479, -1501.912109, 3.254590, 218.267715)
},
vehicleCamera = {
vehicleCoords = vec4(-1194.250488, -1499.221924, 3.954590, 240.944885),
camera = {
coords = vec3(-1191.36, -1497.84, 4.38),
rotation = vec3(-3.0, 8.0, 132.0),
ped = vec4(-1193.84, -1498.22, 4.38, 344.99)
}
}
},
['The Motor Hotel'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(1142.123047, 2663.934082, 38.159668),
spawnCoords = vec4(1137.441772, 2654.175781, 36.919409, 0.000000)
},
vehicleCamera = {
vehicleCoords = vec4(1126.166992, 2659.569336, 37.620483, 53.858269),
camera = {
coords = vec3(1125.75, 2662.66, 38.00),
rotation = vec3(-9.0, -4.0, 191.0),
ped = vec4(1126.69, 2660.52, 38.00, 330.01)
}
}
},
['Alamo Sea Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 1 -- Single Garage
},
coords = {
menuCoords = vec3(959.683533, 3618.975830, 32.666626),
spawnCoords = vec4(950.703308, 3615.586914, 31.610596, 90.708656)
},
vehicleCamera = {
vehicleCoords = vec4(963.679138, 3653.736328, 31.571411, 102.047249),
camera = {
coords = vec3(962.01, 3651.13, 32.14),
rotation = vec3(-6.0, 8.0, -14),
ped = vec4(963.33, 3652.56, 32.10, 201.57)
}
}
},
['Sandy Shore Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(1737.942871, 3709.199951, 34.132568),
spawnCoords = vec4(1737.797852, 3718.839600, 32.876538, 19.842520)
},
vehicleCamera = {
vehicleCoords = vec4(1726.562622, 3723.639648, 33.576538, 76.535431),
camera = {
coords = vec3(1726.06, 3726.81, 34.02),
rotation = vec3(-4.0, -5.0, 196.0),
ped = vec4(1726.90, 3724.70, 34.08, 346.17)
}
}
},
['Paleto Bay Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- Big Public Garage
},
coords = {
menuCoords = vec3(84.725281, 6421.437500, 31.520874),
spawnCoords = vec4(85.200005, 6427.846191, 30.214307, 45.354328)
},
vehicleCamera = {
vehicleCoords = vec4(88.338463, 6366.949219, 30.813232, 323.149597),
camera = {
coords = vec3(87.11, 6369.65, 31.23),
rotation = vec3(-4.0, 5.0, 222.0),
ped = vec4(87.65, 6367.93, 31.23, 62.12)
}
}
},
['Elysian Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(204.646149, -3132.843994, 5.774414),
spawnCoords = vec4(203.498901, -3129.336182, 4.753149, 87.874016)
},
vehicleCamera = {
vehicleCoords = vec4(190.404404, -3172.800049, 5.336304, 17.007874),
camera = {
coords = vec3(187.26, -3172.24, 5.79),
rotation = vec3(-4.0, 5.0, 275.4),
ped = vec4(189.547256, -3173.947266, 5.774414, 73.700790)
}
}
},
['Airport Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- Big Public Garage
},
coords = {
menuCoords = vec3(-992.281311, -2699.393311, 13.828613),
spawnCoords = vec4(-982.325256, -2700.131836, 12.660034, 56.692913)
},
vehicleCamera = {
vehicleCoords = vec4(-1013.657166, -2691.177979, 13.339966, 215.433090),
camera = {
coords = vec3(-1015.12, -2694.31, 13.98),
rotation = vec3(-4.0, -5.0, 343.0),
ped = vec4(-1014.04, -2692.45, 13.98, 124.43)
}
}
},
['Centro Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(-352.879120, -676.470337, 32.043213),
spawnCoords = vec4(-349.028564, -688.101074, 31.628516, 0.000000)
},
vehicleCamera = {
vehicleCoords = vec4(-334.628571, -776.716492, 38.345093, 102.047249),
camera = {
coords = vec3(-336.80, -774.47, 38.73),
rotation = vec3(-6.0, -6.0, 228.5),
ped = vec4(-335.80, -775.93, 38.78, 14.00)
}
}
},
['Cypress Flats Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(722.228577, -2016.342896, 29.279907),
spawnCoords = vec4(740.479126, -2016.553833, 28.291260, 263.622070)
},
vehicleCamera = {
vehicleCoords = vec4(732.672546, -1983.639526, 28.791260, 25.511812),
camera = {
coords = vec3(729.77, -1982.57, 29.29),
rotation = vec3(-5.0, 5.0, 268.4),
ped = vec4(731.45, -1983.74, 29.29, 117.93)
}
}
},
['El Burro Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(1384.325317, -2079.876953, 52.397827),
spawnCoords = vec4(1382.320923, -2052.065918, 50.893408, 36.850395)
},
vehicleCamera = {
vehicleCoords = vec4(1358.360474, -2095.160400, 51.572144, 334.488190),
camera = {
coords = vec3(1356.49, -2092.52, 52.03),
rotation = vec3(-2.0, 7.0, 232.0),
ped = vec4(1357.12, -2094.76, 52.00, 34.26)
}
}
},
['La Mesa Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(903.665955, -1575.890137, 30.813232),
spawnCoords = vec4(871.437378, -1567.081299, 29.488623, 104.881889)
},
vehicleCamera = {
vehicleCoords = vec4(923.327454, -1560.356079, 30.324585, 25.511812),
camera = {
coords = vec3(920.08, -1560.13, 30.75),
rotation = vec3(-2.0, 7.0, 281.5),
ped = vec4(922.378052, -1561.239502, 30.745728, 93.543304)
}
}
},
['Big Ranch Station'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(345.151642, -1687.424194, 32.515015),
spawnCoords = vec4(357.125275, -1691.419800, 31.393750, 138.897629)
},
vehicleCamera = {
vehicleCoords = vec4(358.180237, -1690.997803, 47.865234, 82.204727),
camera = {
coords = vec3(355.81, -1693.17, 48.30),
rotation = vec3(-3.0, 7.0, 331.0),
ped = vec4(358.22, -1692.14, 48.30, 163.09)
}
}
},
['Rancho Garage'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 1 -- Single Garage
},
coords = {
menuCoords = vec3(450.448364, -1981.714233, 24.393433),
spawnCoords = vec4(461.037354, -1993.648315, 21.888306, 130.393707)
},
vehicleCamera = {
vehicleCoords = vec4(437.802185, -1960.615356, 22.405151, 334.488190),
camera = {
coords = vec3(436.37, -1957.72, 23.08),
rotation = vec3(-5.0, 6.0, 224.5),
ped = vec4(437.02, -1959.73, 23.06, 67.61)
}
}
},
['La Mesa Mechanics'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(807.006592, -810.000000, 26.196289),
spawnCoords = vec4(814.892334, -822.725281, 24.840259, 93.543304)
},
vehicleCamera = {
vehicleCoords = vec4(797.037354, -818.254944, 25.657104, 34.015747),
camera = {
coords = vec3(794.04, -818.18, 26.17),
rotation = vec3(-3.0, 7.0, 286.0),
ped = vec4(795.81, -818.45, 26.22, 125.75)
}
}
},
['Mirror Park Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(1038.092285, -764.320862, 57.924561),
spawnCoords = vec4(1040.676880, -775.608765, 56.822290, 8.503937)
},
vehicleCamera = {
vehicleCoords = vec4(1021.556030, -656.017578, 58.413208, 354.330719),
camera = {
coords = vec3(1019.50, -653.83, 58.76),
rotation = vec3(-3.0, 7.0, 243.0),
ped = vec4(1020.56, -655.39, 58.81, 65.64)
}
}
},
['Del Perro Private'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 7 -- Big Public Garage
},
coords = {
menuCoords = vec3(-1562.742798, -540.210999, 33.593384),
spawnCoords = vec4(-1542.975830, -564.421997, 24.669653, 36.850395)
},
vehicleCamera = {
vehicleCoords = vec4(-1543.608765, -568.430786, 25.269653, 147.401581),
camera = {
coords = vec3(-1542.02, -571.14, 25.71),
rotation = vec3(-5.0, 7.0, 46.0),
ped = vec4(-1542.65, -569.01, 25.71, 187.99)
}
}
},
['Vinewood Small Park'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 6 -- Small Public Garage
},
coords = {
menuCoords = vec3(-570.382446, 311.301086, 84.479858),
spawnCoords = vec4(-559.345032, 327.336273, 83.374365, 269.291351)
},
vehicleCamera = {
vehicleCoords = vec4(-573.415405, 335.129669, 84.159668, 235.275589),
camera = {
coords = vec3(-572.87, 331.88, 84.57),
rotation = vec3(-5.0, 8.0, 372.5),
ped = vec4(-573.44, 333.72, 84.59, 158.05)
}
}
},
['Gran Señora Desert'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(180.632965, 2793.375732, 45.640991),
spawnCoords = vec4(192.290115, 2787.613281, 44.802881, 280.629913)
},
vehicleCamera = {
vehicleCoords = vec4(261.679138, 2846.333984, 43.197754, 65.196854),
camera = {
coords = vec3(258.93, 2844.48, 43.69),
rotation = vec3(-5.0, 7.0, 320.0),
ped = vec4(261.47, 2845.23, 43.66, 155.03)
}
}
},
['Small Paleto Park'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 1 -- Single Garage
},
coords = {
menuCoords = vec3(-379.556030, 6062.175781, 31.487183),
spawnCoords = vec4(-398.597809, 6051.204590, 30.515381, 133.228333),
polyzone = {
points = {
vec3(-410.756042, 6048.870117, 31.4),
vec3(-398.492310, 6036.870117, 31.4),
vec3(-372.804382, 6064.101074, 31.4),
vec3(-386.676910, 6076.430664, 31.4)
},
thickness = 25.0
}
},
vehicleCamera = {
vehicleCoords = vec4(-447.600006, 6052.562500, 30.863770, 147.401581),
camera = {
coords = vec3(-446.11, 6049.60, 31.34),
rotation = vec3(-5.0, 7.0, 42.0),
ped = vec4(-446.68, 6051.98, 31.34, 235.24)
}
}
},
['Grapeseed Parking'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(2564.320801, 4680.435059, 34.065186),
spawnCoords = vec4(2550.817627, 4682.188965, 32.740698, 17.007874),
polyzone = {
points = {
vec3(2563.885742, 4703.261719, 33.1),
vec3(2578.048340, 4691.960449, 33.1),
vec3(2548.720947, 4663.041992, 33.1),
vec3(2539.173584, 4681.252930, 33.1)
},
thickness = 25.0
}
},
vehicleCamera = {
vehicleCoords = vec4(2561.828613, 4688.333984, 33.593384, 96.377945),
camera = {
coords = vec3(2559.12, 4689.93, 33.98),
rotation = vec3(-5.0, 7.0, 242.5),
ped = vec4(2561.07, 4689.37, 34.04, 8.69)
}
}
},
['Grapeseed Village Park'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'vehicle',
shell = {
shell = 5 -- Mechanic Garage
},
coords = {
menuCoords = vec3(1707.230713, 4791.890137, 41.967773),
spawnCoords = vec4(1697.195557, 4804.549316, 40.744360, 141.732285),
polyzone = {
points = {
vec3(1717.279175, 4790.479004, 41.8),
vec3(1716.909912, 4811.116699, 41.8),
vec3(1688.360474, 4811.894531, 41.8),
vec3(1689.454956, 4789.450684, 41.8)
},
thickness = 25.0
}
},
vehicleCamera = {
vehicleCoords = vec4(1690.694458, 4786.865723, 41.445435, 127.559052),
camera = {
coords = vec3(1687.05, 4787.37, 41.92),
rotation = vec3(-5.0, -7.0, 270.0),
ped = vec4(1689.42, 4787.26, 41.92, 40.24)
}
}
},
--[[
Boat garages, there are multiple set up, you
can customize them, but it requires you to
change positions and cinematic cam.
]]
['La Puerta Pier'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'boat',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(-789.1887, -1490.7750, 1.5952),
spawnCoords = vec4(-796.127441, -1502.109863, 0.112793, 110.551186),
polyzone = {
points = {
vec3(-805.951660, -1496.690063, 1.5),
vec3(-799.780212, -1513.833008, 1.5),
vec3(-777.929688, -1506.158203, 1.5),
vec3(-786.026367, -1487.749390, 1.5)
},
thickness = 25.0
}
},
vehicleCamera = {
vehicleCoords = vec4(-794.874695, -1501.833008, 0.348755, 291.968506),
camera = {
coords = vec3(-791.525269, -1497.138428, 1.476929),
rotation = vec3(-5.0, 3.0, 169.0),
ped = vec4(-791.28, -1509.18, 1.60, 14.74)
}
}
},
['Paleto Cove Pier'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'boat',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(-1605.323120, 5258.281250, 2.067383),
spawnCoords = vec4(-1600.457153, 5263.279297, 0.348755, 22.677164),
polyzone = {
points = {
vec3(-1614.738403, 5261.604492, 0.2),
vec3(-1608.501099, 5245.542969, 0.2),
vec3(-1585.885742, 5257.424316, 0.2),
vec3(-1593.151611, 5273.617676, 0.2)
},
thickness = 25.0
}
},
vehicleCamera = {
vehicleCoords = vec4(-1600.760498, 5260.602051, 0.331909, 0.000000),
camera = {
coords = vec3(-1597.872559, 5266.628418, 1.850537),
rotation = vec3(-15.0, 3.0, 157.0),
ped = vec4(-1604.624146, 5256.685547, 2.067383, 328.818909)
}
}
},
['Paleto Bay Pier'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'boat',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(-243.059341, 6598.101074, 7.391968),
spawnCoords = vec4(-288.553833, 6617.802246, -0.399292, 48.188972)
},
vehicleCamera = {
vehicleCoords = vec4(-292.378021, 6618.764648, 0.365601, 70.866142),
camera = {
coords = vec3(-299.050537, 6615.534180, 1.153174),
rotation = vec3(-3.0, 3.0, 316.0),
ped = vec4(-287.82, 6629.09, 7.18, 226.20)
}
}
},
['Pacific Small Pier'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'boat',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(3852.725342, 4459.898926, 1.865234),
spawnCoords = vec4(3855.388916, 4454.347168, 0.115063, 269.291351)
},
vehicleCamera = {
vehicleCoords = vec4(3857.986816, 4446.975586, 0.247559, 272.125977),
camera = {
coords = vec3(3864.804443, 4442.637207, 1.241699),
rotation = vec3(-3.0, 3.0, 57.0),
ped = vec4(3855.85, 4461.55, 1.85, 173.57)
}
}
},
--[[
Aircraft hangars, there are multiple configured,
you can customize them, but it requires you to
change positions and cinematic cam.
]]
['Airport Hangar'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'plane',
shell = {
shell = 1
},
radius = 100.0,
coords = {
menuCoords = vec3(-940.958252, -2954.043945, 13.929688),
spawnCoords = vec4(-980.228577, -2997.375732, 13.929688, 59.527554)
},
vehicleCamera = {
vehicleCoords = vec4(-980.228577, -2997.375732, 12.929688, 59.527554),
camera = {
coords = vec3(-985.674744, -2999.604492, 13.929688),
rotation = vec3(0.0, 2.0, -52.0),
ped = vec4(-980.571411, -2999.446045, 13.929688, 87.874016)
}
}
},
['Trevor Hangar'] = {
owner = true,
available = true,
isImpound = false,
-- storePrice = 5000, -- Price to store a vehicle
type = 'plane',
shell = {
shell = 1
},
coords = {
menuCoords = vec3(1759.199951, 3298.562744, 41.714966),
spawnCoords = vec4(1740.224121, 3277.740723, 40.191553, 144.566910)
},
vehicleCamera = {
vehicleCoords = vec4(1740.210938, 3277.740723, 40.805176, 141.732285),
camera = {
coords = vec3(1741.239502, 3269.248291, 41.209473),
rotation = vec3(0.0, 2.0, 23.0),
ped = vec4(1742.162598, 3277.292236, 41.108398, 201.259842)
}
}
},
['Garaj Cazino'] = {
owner = true,
available = true,
isImpound = false,
type = 'vehicle',
shell = {
shell = 7
},
coords = {
menuCoords = vec3(934.10, -2.14, 78.75),
spawnCoords = vec4(907.69, -31.24, 77.75, 243.78)
},
vehicleCamera = {
vehicleCoords = vec4(907.69, -31.24, 77.75, 243.78),
camera = {
coords = vec3(911.50, -28.50, 78.75),
rotation = vec3(-5.0, 0.0, 200.0),
ped = vec4(909.50, -30.00, 77.75, 60.0)
}
}
}
}
@@ -0,0 +1,678 @@
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle Showrooms / Interiors [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Add interiors/shells/MLOs for showroom-style garages.
-- Do not remove boat-specific entries if present in your build.
--──────────────────────────────────────────────────────────────────────────────
Config.VehicleShowRooms = {
['vehicle'] = {
{
name = 'Executive Garage', -- [EDIT] Display name
coords = vec3(220.602203, -1006.654968, -99.014648), -- [EDIT] Camera/anchor position inside
rotation = vec3(-10.0, 2.0, 324.0), -- [EDIT] Camera rotation
entry = vec4(240.98, -1004.85, -98.98, 41.0), -- [EDIT] Entry/exit spawn for player
vehicleCoords = {
-- [EDIT] Vehicle pedestals/slots
{
coords = vec4(223.36, -978.79, -99.0, 228.04)
},
{
coords = vec4(223.45, -982.46, -99.0, 229.92)
},
{
coords = vec4(223.46, -986.29, -99.0, 231.25)
},
{
coords = vec4(223.49, -989.61, -99.0, 236.1)
},
{
coords = vec4(223.69, -992.84, -99.0, 235.97)
},
{
coords = vec4(223.47, -996.26, -99.0, 228.69)
},
{
coords = vec4(223.37, -999.75, -99.0, 227.55)
},
{
coords = vec4(233.94, -983.54, -99.0, 121.12)
},
{
coords = vec4(233.89, -986.94, -99.0, 129.12)
},
{
coords = vec4(234.09, -990.32, -99.0, 126.85)
},
{
coords = vec4(234.14, -993.66, -99.0, 121.42)
},
{
coords = vec4(233.71, -997.02, -99.0, 116.13)
},
{
coords = vec4(233.71, -1000.58, -99.0, 113.28)
}
}
},
{
name = 'Single Garage',
coords = vec3(178.905502, -1007.683533, -99.014648),
rotation = vec3(-10.0, 2.0, 58.0),
entry = vec4(178.800003, -1005.257141, -99.014648, 184.251968),
vehicleCoords = {
{
coords = vec4(174.923080, -1003.424194, -99.435913, 178.582672)
},
{
coords = vec4(171.389008, -1003.450562, -99.435913, 178.582672)
}
}
},
{
name = 'Standard Garage',
coords = vec3(190.232971, -994.048340, -99.014648),
rotation = vec3(-10.0, 2.0, 230.0),
entry = vec4(207.204407, -999.349426, -99.014648, 87.874016),
vehicleCoords = {
{
coords = vec4(193.094513, -1000.285706, -99.435913, 198.425201)
},
{
coords = vec4(196.496704, -1000.074707, -99.435913, 195.590546)
},
{
coords = vec4(199.925278, -999.916504, -99.435913, 198.425201)
},
{
coords = vec4(203.169235, -999.547241, -99.419067, 198.425201)
}
}
},
{
name = 'Luxury Garage',
coords = vec3(-193.780212, -569.802185, 135.989746),
rotation = vec3(-10.0, 2.0, 223.0),
entry = vec4(-198.738464, -580.799988, 135.989746, 260.787415),
vehicleCoords = {
{
coords = vec4(-171.71, -583.98, 136.0, 73.34)
},
{
coords = vec4(-173.47, -576.83, 136.0, 112.36)
},
{
coords = vec4(-178.72, -571.6, 136.0, 161.51)
},
{
coords = vec4(-186.01, -572.75, 136.0, 207.31)
},
{
coords = vec4(-172.56, -584.52, 141.35, 73.78)
},
{
coords = vec4(-172.81, -576.9, 141.35, 112.05)
},
{
coords = vec4(-178.7, -572.12, 141.35, 154.23)
},
{
coords = vec4(-185.19, -572.73, 141.35, 186.1)
},
{
coords = vec4(-173.18, -583.66, 146.69, 75.81)
},
{
coords = vec4(-174.06, -577.88, 146.69, 106.39)
},
{
coords = vec4(-179.29, -573.27, 146.69, 159.6)
},
{
coords = vec4(-185.83, -573.07, 146.69, 202.07)
}
}
},
{
name = 'Mechanic Garage',
coords = vec3(1002.580200, -2989.279053, -39.652710),
rotation = vec3(-10.0, 2.0, 135.0),
entry = vec4(1004.624207, -2997.666016, -39.652710, 90.708656),
vehicleCoords = {
{
coords = vec4(1005.903320, -3004.140625, -40.073975, 59.527554)
},
{
coords = vec4(1005.942871, -3007.938477, -40.073975, 62.362206)
},
{
coords = vec4(993.217590, -3027.415283, -40.073975, 0.000000)
},
{
coords = vec4(998.558228, -3027.230713, -40.073975, 0.000000)
},
{
coords = vec4(1004.096680, -3027.098877, -40.073975, 0.000000)
},
{
coords = vec4(1009.239563, -3026.914307, -40.073975, 0.000000)
},
{
coords = vec4(978.065918, -3001.964844, -40.040283, 272.125977)
},
{
coords = vec4(954.764832, -3018.540771, -40.073975, 269.291351)
},
{
coords = vec4(954.580200, -3023.670410, -40.073975, 272.125977)
},
{
coords = vec4(954.738464, -3028.707764, -40.073975, 269.291351)
},
{
coords = vec4(959.419800, -3036.026367, -40.073975, 0.000000)
},
{
coords = vec4(963.534058, -3036.079102, -40.073975, 0.000000)
},
{
coords = vec4(967.793396, -3036.079102, -40.073975, 0.000000)
},
{
coords = vec4(971.696716, -3036.079102, -40.073975, 0.000000)
},
{
coords = vec4(976.087891, -3036.158203, -40.073975, 0.000000)
},
{
coords = vec4(980.215393, -3035.947266, -40.073975, 0.000000)
},
{
coords = vec4(969.850586, -3026.795654, -40.073975, 59.527554)
},
{
coords = vec4(969.982422, -3022.918701, -40.073975, 56.692913)
}
}
},
{
name = 'Small Public Garage',
coords = vec3(1276.483521, 220.562637, -49.071777),
rotation = vec3(-6.0, 2.0, 320.0),
entry = vec4(1295.393433, 217.635162, -49.071777, 0.000000),
vehicleCoords = {
{
coords = vec4(1280.874756, 241.740662, -49.493042, 272.125977)
},
{
coords = vec4(1280.716431, 249.731873, -49.493042, 274.960632)
},
{
coords = vec4(1280.861572, 258.000000, -49.493042, 272.125977)
},
{
coords = vec4(1309.885742, 231.257141, -49.493042, 87.874016)
},
{
coords = vec4(1309.898926, 241.450546, -49.493042, 87.874016)
},
{
coords = vec4(1309.898926, 249.837372, -49.493042, 87.874016)
},
{
coords = vec4(1309.608765, 257.920898, -49.493042, 93.543304)
},
{
coords = vec4(1295.538452, 250.101105, -49.493042, 147.401581)
},
{
coords = vec4(1295.525269, 241.542862, -49.493042, 147.401581)
},
{
coords = vec4(1295.696655, 231.560440, -49.493042, 150.236221)
}
}
},
{
name = 'Big Public Garage',
coords = vec3(1361.024170, 181.041763, -49.004395),
rotation = vec3(-6.0, 2.0, 320.0),
entry = vec4(1380.158203, 178.180222, -49.004395, 0.000000),
vehicleCoords = {
{
coords = vec4(1365.586792, 200.307693, -49.425659, 272.125977)
},
{
coords = vec4(1365.441772, 204.540665, -49.425659, 272.125977)
},
{
coords = vec4(1365.665894, 208.509888, -49.425659, 272.125977)
},
{
coords = vec4(1365.309937, 212.808792, -49.425659, 272.125977)
},
{
coords = vec4(1365.494507, 217.028564, -49.425659, 272.125977)
},
{
coords = vec4(1365.402222, 221.156052, -49.425659, 272.125977)
},
{
coords = vec4(1365.626343, 225.230774, -49.425659, 272.125977)
},
{
coords = vec4(1365.771484, 229.674728, -49.425659, 272.125977)
},
{
coords = vec4(1365.626343, 233.657150, -49.425659, 272.125977)
},
{
coords = vec4(1365.679077, 238.101105, -49.425659, 269.291351)
},
{
coords = vec4(1365.784668, 242.189011, -49.425659, 272.125977)
},
{
coords = vec4(1365.679077, 246.210999, -49.425659, 272.125977)
},
{
coords = vec4(1366.417603, 250.219788, -49.004395, 272.125977)
},
{
coords = vec4(1365.890137, 254.742859, -49.425659, 269.291351)
},
{
coords = vec4(1394.874756, 200.254944, -49.425659, 87.874016)
},
{
coords = vec4(1394.835205, 204.356049, -49.425659, 87.874016)
},
{
coords = vec4(1394.887939, 208.760437, -49.425659, 90.708656)
},
{
coords = vec4(1394.769287, 212.782425, -49.425659, 87.874016)
},
{
coords = vec4(1394.914307, 216.791214, -49.425659, 90.708656)
},
{
coords = vec4(1394.663696, 221.090103, -49.425659, 87.874016)
},
{
coords = vec4(1394.769287, 225.362640, -49.425659, 87.874016)
},
{
coords = vec4(1394.650513, 229.503296, -49.425659, 90.708656)
},
{
coords = vec4(1394.624146, 233.749451, -49.425659, 87.874016)
},
{
coords = vec4(1394.756104, 237.797806, -49.425659, 90.708656)
},
{
coords = vec4(1394.518677, 241.964844, -49.425659, 87.874016)
},
{
coords = vec4(1394.624146, 246.105499, -49.425659, 87.874016)
},
{
coords = vec4(1394.756104, 250.272522, -49.425659, 87.874016)
},
{
coords = vec4(1395.085693, 254.610992, -49.425659, 87.874016)
},
{
coords = vec4(1380.276978, 208.549454, -49.695190, 87.874016)
},
{
coords = vec4(1380.184570, 212.610992, -49.695190, 272.125977)
},
{
coords = vec4(1380.421997, 217.054947, -49.695190, 87.874016)
},
{
coords = vec4(1380.329712, 221.142853, -49.695190, 272.125977)
},
{
coords = vec4(1380.395630, 225.283524, -49.695190, 87.874016)
},
{
coords = vec4(1379.947266, 229.516479, -49.695190, 272.125977)
},
{
coords = vec4(1380.540649, 233.775818, -49.712036, 87.874016)
},
{
coords = vec4(1379.894531, 237.837372, -49.695190, 272.125977)
},
{
coords = vec4(1380.079102, 241.991211, -49.695190, 90.708656)
},
{
coords = vec4(1379.894531, 246.092316, -49.712036, 272.125977)
}
}
},
{
name = 'Truck Garage',
coords = vec3(1230.501099, -2283.811035, -49.004395),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(1240.997803, -2292.316406, -47.926025, 90.708656),
vehicleCoords = {
{
coords = vec4(1222.800049, -2285.591309, -49.425659, 0.000000)
},
{
coords = vec4(1219.397827, -2285.617676, -49.425659, 0.000000)
},
{
coords = vec4(1233.283569, -2285.683594, -49.425659, 0.000000)
}
}
},
{
name = 'Expensive Millionaire Garage',
coords = vec3(-1073.129639, -75.850548, -94.599976),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(-1067.024170, -88.272522, -99.014648, 357.165344),
vehicleCoords = {
{
coords = vec4(-1079.736206, -84.646149, -99.435913, 269.291351)
},
{
coords = vec4(-1079.630737, -80.967033, -99.435913, 269.291351)
},
{
coords = vec4(-1079.498901, -76.589005, -99.435913, 272.125977)
},
{
coords = vec4(-1079.802246, -73.028564, -99.435913, 269.291351)
},
{
coords = vec4(-1079.775879, -68.109886, -99.435913, 272.125977)
},
{
coords = vec4(-1065.534058, -64.509888, -99.435913, 87.874016)
},
{
coords = vec4(-1065.494507, -68.360435, -99.435913, 85.039368)
},
{
coords = vec4(-1065.481323, -73.002197, -99.435913, 87.874016)
},
{
coords = vec4(-1065.520874, -76.496704, -99.435913, 90.708656)
},
{
coords = vec4(-1065.613159, -81.151642, -99.435913, 87.874016)
},
{
coords = vec4(-1079.696655, -84.817581, -95.038086, 272.125977)
},
{
coords = vec4(-1079.868164, -81.428574, -95.038086, 269.291351)
},
{
coords = vec4(-1079.749390, -77.063736, -95.038086, 269.291351)
},
{
coords = vec4(-1079.630737, -73.068130, -95.038086, 272.125977)
},
{
coords = vec4(-1079.709839, -68.241760, -95.038086, 272.125977)
},
{
coords = vec4(-1065.665894, -64.641754, -95.038086, 87.874016)
},
{
coords = vec4(-1065.692261, -68.241760, -95.038086, 87.874016)
},
{
coords = vec4(-1065.599976, -72.962631, -95.038086, 87.874016)
},
{
coords = vec4(-1065.534058, -76.654938, -95.038086, 85.039368)
},
{
coords = vec4(-1065.507690, -81.230766, -95.038086, 87.874016)
},
{
coords = vec4(-1079.604370, -84.923073, -90.640259, 269.291351)
},
{
coords = vec4(-1079.683472, -81.125275, -90.640259, 272.125977)
},
{
coords = vec4(-1079.657104, -76.589005, -90.640259, 269.291351)
},
{
coords = vec4(-1079.723022, -73.068130, -90.640259, 272.125977)
},
{
coords = vec4(-1079.591187, -68.334061, -90.640259, 272.125977)
},
{
coords = vec4(-1064.967041, -74.703293, -90.640259, 87.874016)
}
}
},
{
name = 'Red Auto Parts',
coords = vec3(1077.276, -2274.876, -50.000),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(1099.041748, -2266.483398, -49.004395, 175.748032),
vehicleCoords = {
{
coords = vec4(1093.318726, -2281.740723, -49.425659, 0.000000)
},
{
coords = vec4(1089.784668, -2281.806641, -49.425659, 0.000000)
},
{
coords = vec4(1085.472534, -2281.780273, -49.425659, 0.000000)
},
{
coords = vec4(1082.202148, -2281.701172, -49.425659, 0.000000)
}
}
},
{
name = 'Small Mechanic Garage',
coords = vec3(999.745056, -3166.443848, -38.911377),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(997.081299, -3158.043945, -38.911377, 269.291351),
vehicleCoords = {
{
coords = vec4(1002.975830, -3171.837402, -39.332642, 0.000000)
},
{
coords = vec4(999.929688, -3171.705566, -39.332642, 0.000000)
},
{
coords = vec4(1004.492310, -3159.336182, -39.332642, 87.874016)
},
{
coords = vec4(1004.545044, -3162.382324, -39.332642, 87.874016)
}
}
},
{
name = 'Deluxe Sport Garage',
coords = vec3(1193.986816, -3253.556152, -49.004395),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(1180.945068, -3260.901123, -48.010254, 0.000000),
vehicleCoords = {
{
coords = vec4(1182.356079, -3252.540771, -49.425659, 206.929138)
},
{
coords = vec4(1194.013184, -3258.290039, -49.425659, 0.000000)
},
{
coords = vec4(1198.483521, -3258.237305, -49.425659, 0.000000)
},
{
coords = vec4(1202.518677, -3258.118652, -49.425659, 0.000000)
},
{
coords = vec4(1207.068115, -3258.171387, -49.425659, 0.000000)
},
{
coords = vec4(1194.210938, -3246.606689, -49.425659, 184.251968)
},
{
coords = vec4(1198.523071, -3246.764893, -49.425659, 178.582672)
},
{
coords = vec4(1202.597778, -3246.672607, -49.425659, 175.748032)
},
{
coords = vec4(1206.830811, -3246.936279, -49.425659, 178.582672)
},
{
coords = vec4(1211.076904, -3246.909912, -49.425659, 181.417328)
}
}
},
{
name = 'Gang Graffiti Garage',
coords = vec3(569.301086, -417.402191, -69.611694),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(556.180237, -433.147247, -69.662231, 269.291351),
vehicleCoords = {
{
coords = vec4(572.624207, -406.931854, -70.066650, 87.874016)
},
{
coords = vec4(572.439575, -411.217590, -70.066650, 87.874016)
},
{
coords = vec4(572.400024, -416.690094, -70.032959, 87.874016)
},
{
coords = vec4(572.518677, -422.993408, -70.066650, 87.874016)
},
{
coords = vec4(572.281311, -426.685699, -70.066650, 90.708656)
}
}
},
{
name = 'Luxury Small Garage',
coords = vec3(520.707703, -2625.296631, -49.004395),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(532.64, -2637.65, -49.0, 85.039368),
vehicleCoords = {
{
coords = vec4(525.230774, -2633.037354, -49.425659, 68.031494)
},
{
coords = vec4(525.389038, -2629.463623, -49.425659, 65.196854)
},
{
coords = vec4(525.072510, -2625.613281, -49.425659, 68.031494)
},
{
coords = vec4(525.032959, -2622.105469, -49.425659, 65.196854)
},
{
coords = vec4(525.336243, -2618.531982, -49.425659, 62.362206)
},
{
coords = vec4(514.430786, -2633.314209, -49.425659, 291.968506)
},
{
coords = vec4(514.404419, -2629.437256, -49.425659, 289.133850)
},
{
coords = vec4(514.312073, -2625.718750, -49.425659, 289.133850)
},
{
coords = vec4(514.536255, -2621.920898, -49.425659, 294.803162)
},
{
coords = vec4(514.285706, -2618.426270, -49.425659, 294.803162)
},
{
coords = vec4(514.417603, -2614.958252, -49.425659, 291.968506)
}
}
},
{
name = 'Motor Bar Garage',
coords = vec3(1107.04, -3157.399, -37.51859),
rotation = vec3(-10.0, 2.0, 324.0),
entry = vec4(1120.997803, -3152.518555, -37.074707, 0.000000),
vehicleCoords = {
{
coords = vec4(1099.595581, -3145.582520, -37.950928, 178.582672)
},
{
coords = vec4(1103.393433, -3145.344971, -37.950928, 181.417328)
},
{
coords = vec4(1102.114258, -3156.949463, -37.950928, 272.125977)
},
{
coords = vec4(1109.129639, -3162.672607, -37.950928, 0.000000)
}
}
}
},
['plane'] = {
{
name = 'Plane 1',
coords = vec3(-1283.156006, -3045.257080, -48.498901),
rotation = vec3(0.0, 2.0, 327.0),
entry = vec4(-1265.02, -3049.97, -48.49, 356.79),
vehicleCoords = {
{
coords = vec4(-1255.82, -3023.08, -48.49, 126.79)
},
{
coords = vec4(-1258.95, -3006.17, -48.49, 129.25)
},
{
coords = vec4(-1259.77, -2974.96, -48.49, 175.28)
},
{
coords = vec4(-1276.32, -2976.64, -48.49, 192.54)
},
{
coords = vec4(-1280.67, -3006.53, -48.49, 234.1)
},
{
coords = vec4(-1282.07, -3021.8, -48.49, 230.88)
}
}
}
},
['boat'] = {
{
name = 'Boat 1',
coords = vec3(-1267.0, -3013.135, -49.5),
entry = vec4(-1265.02, -3049.97, -48.49, 356.79),
vehicleCoords = {
{
coords = vec4(-1255.82, -3023.08, -48.49, 126.79)
},
{
coords = vec4(-1258.95, -3006.17, -48.49, 129.25)
},
{
coords = vec4(-1259.77, -2974.96, -48.49, 175.28)
},
{
coords = vec4(-1276.32, -2976.64, -48.49, 192.54)
},
{
coords = vec4(-1280.67, -3006.53, -48.49, 234.1)
},
{
coords = vec4(-1282.07, -3021.8, -48.49, 230.88)
}
}
}
}
}
@@ -0,0 +1,142 @@
-- Workers Job Garages [EDIT]
-- [INFO] Assign per-job parking spots with pricing, spawn points, allowed vehicles,
-- liveries/tuning/extras and a preview camera. If using qs-gangs, replace `job` with `gang`.
-- Example for gangs:
-- -- job = 'police',
-- -- gang = 'families',
Config.JobGarages = {
{
job = 'police', -- [EDIT] Job/gang identifier
name = 'police-1', -- [EDIT] Unique garage name
grade = 1, -- [EDIT] Minimum grade required (number)
price = 100, -- [EDIT] Rental price (0 for free)
coords = { -- [EDIT] Menu & vehicle spawn positions
menuCoords = vec3(457.9, -1017.28, 28.28),
spawnCoords = vec4(446.48, -1019.35, 27.55, 91.14),
},
vehicles = { -- [EDIT] Allowed vehicle models (hash/backtick form)
`police`,
`police2`,
},
liveries = { -- [ADV] Default livery per model
[`police`] = 1
},
tuning = { -- [ADV] Mods applied when spawning each model
[`police`] = {
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1
}
},
extras = { -- [ADV] Toggle vehicle extras per model
[`police`] = {
['1'] = true,
['2'] = true,
['3'] = true,
['4'] = true,
['5'] = true,
['6'] = true,
['7'] = true,
['8'] = true,
['9'] = true,
['10'] = true,
['11'] = true,
['12'] = true,
['13'] = true,
}
},
vehicleCamera = { -- [EDIT] Cinematic preview camera
vehicleCoords = vec4(436.694519, -1020.843933, 28.319458, 320.314972),
camera = {
coords = vec3(440.40, -1020.42, 28.61),
rotation = vec3(-2.0, 8.0, 97.0),
ped = vec4(438.62, -1020.60, 28.70, 273.42)
}
}
},
{
job = 'ambulance',
name = 'ambulance-1',
grade = 0,
price = 100, -- [EDIT]
coords = {
menuCoords = vec3(294.356049, -606.052734, 43.315796),
spawnCoords = vec4(294.356049, -606.052734, 42.315796, 99.212593),
},
vehicles = {
`ambulance`,
},
liveries = {
[`ambulance`] = 3
},
tuning = {
[`ambulance`] = {
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1
}
},
extras = {}, -- [EDIT] No extras configured for this model
vehicleCamera = {
vehicleCoords = vec4(283.107697, -605.182434, 42.894531, 79.370079),
camera = {
coords = vec3(280.21, -608.26, 43.08),
rotation = vec3(3.0, 7.0, -26.0),
ped = vec4(282.065948, -606.870300, 43.113525, 127.881889)
}
}
},
{
job = 'mechanic',
name = 'mechanic-1',
grade = 0,
price = 100, -- [EDIT]
coords = {
menuCoords = vec3(-192.712082, -1290.448364, 31.285034),
spawnCoords = vec4(-184.035156, -1290.698853, 30.285034, 175.748032),
},
vehicles = {
`slamtruck`,
`flatbed`,
},
liveries = {
[`slamtruck`] = 1
},
tuning = {
[`slamtruck`] = {
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1
},
[`flatbed`] = {
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1
}
},
extras = {}, -- [EDIT]
vehicleCamera = {
vehicleCoords = vec4(-197.353851, -1304.004395, 30.981689, 291.968506),
camera = {
coords = vec3(-195.24, -1299.90, 31.14),
rotation = vec3(3.0, 8.0, 170.0),
ped = vec4(-197.17, -1302.36, 31.30, 334.51)
}
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,83 @@
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
version '5.0.20'
name 'qs-advancedgarages'
author 'Quasar Store'
data_file 'DLC_ITYP_REQUEST' 'stream/qs_gradient_00.ytyp'
ui_page 'web/build/index.html'
-- ui_page 'http://localhost:3005/' -- dev
files {
'web/build/**',
'web/images/**',
'web/sounds/**',
'locales/*.json',
}
ox_libs {
'table',
'math'
}
shared_scripts {
'@ox_lib/init.lua',
'shared/*.lua',
'config/config.lua',
'config/decorate.lua',
'config/furniture.lua',
'config/garages.lua',
'config/interiors.lua',
'config/jobgarages.lua',
'config/vehicles.lua',
'locales/*.lua',
}
client_scripts {
'client/custom/**',
'client/*.lua',
'client/modules/**'
}
server_scripts {
'@oxmysql/lib/MySQL.lua',
'config/fivemanage.lua',
'server/custom/**/**.lua',
'server/modules/db/main.lua',
'server/modules/db/creator.lua',
'server/modules/db/decorate.lua',
'server/modules/db/furniture.lua',
'server/*.lua',
'server/modules/*.lua'
}
escrow_ignore {
'config/*.lua',
'client/custom/**',
'server/custom/**',
}
dependencies {
'/gameBuild:2802', -- requires at least game build 2189
'/server:5895', -- required last artifacts
'/native:0x6AE51D4B', -- required last artifacts
'/onesync', -- requires onesync
'VehicleDeformation',
'ox_lib',
'bob74_ipl',
'screenshot-basic'
}
dependency '/assetpacks'
@@ -0,0 +1,628 @@
{
"empty_list": "لم يتم العثور على عناصر",
"cancel": "إلغاء",
"delete": "حذف",
"clear": "مسح",
"no_garage_slots": "لا توجد مساحة فارغة في هذا الجراج...",
"no_vehicle_owner": "نحن لا ندعم المركبات التي ليست ملكك!",
"no_house_nearby": "لا يوجد منزل قريب",
"buy_garage": "شراء جراج مقابل: ${{price}}",
"you_are_not_police": "أنت لست ضابط شرطة",
"no_vehicle_nearby": "لا توجد مركبة قريبة",
"garage_not_available": "الجراج غير متاح أو مشغول، حاول مرة أخرى...",
"garage_not_found": "لم يتم العثور على الجراج",
"garage_not_found_job": "لم يتم العثور على جراج الوظيفة",
"garage_empty": "الجراج فارغ",
"cannot_store_vehicle": "لا يمكنك تخزين هذه المركبة هنا!",
"not_driver": "ممنوع قيادة المركبة",
"vehicle_not_spawned": "استخدمت الجراج في نفس الوقت الذي استخدمه فيه لاعب آخر. حاول مرة أخرى!",
"timeout_expired": "انتهت مهلة الانتظار",
"no_money": "ليس لديك ما يكفي من المال! ${{price}}",
"not_correct_job": "ليس لديك الوظيفة الصحيحة",
"not_correct_grade": "ليس لديك الرتبة الصحيحة",
"not_in_vehicle": "أنت لست داخل مركبة!",
"job_vehicle_added": "تم إضافة المركبة إلى جراج الوظيفة!",
"no_vehicle_data": "لم يتم العثور على بيانات المركبة",
"you_are_already_in_garage": "أنت بالفعل داخل جراج!",
"sound_enabled": "تم تفعيل الصوت",
"sound_disabled": "تم تعطيل الصوت",
"sell_garage": "تم أخذ المال لبيع جراج: ${{price}}",
"garage_purchase": "لقد اشتريت جراجًا جديدًا مقابل: ${{price}}",
"player_not_found": "لم يتم العثور على اللاعب",
"transfer_success": "لقد تلقيت مركبة من لاعب آخر، تم إرسال المركبة إلى: {{garage}}",
"transfer_success_to": "لقد أرسلت سيارة إلى لاعب آخر، تم إرسال المركبة إلى: {{garage}}",
"transfer_blacklisted": "لا يمكن نقل هذه المركبة إلى لاعب آخر",
"give_recovery": "لقد استعدت سيارة مفقودة، تم إرسالها إلى: {{garage}}، تم خصم منك إجمالي: ${{price}}",
"impound_pay": "لم تعد المركبة محجوزة، لقد دفعت: ${{price}}",
"missing_type": "لم يتم العثور على جراج لنوع المركبة: {{type}}",
"vehicle_removed": "تم حذف المركبة!",
"vehicle_impounded": "تم حجز المركبة بنجاح، تم إرسالها إلى: {{garage}}",
"all_vehicles_impounded": "تم إرسال جميع المركبات الموجودة على الخريطة إلى الحجز!",
"repair": {
"repaired": "تم إصلاح المركبة {{plate}}"
},
"log": {
"save_vehicle": {
"title": "حفظ المركبة",
"description": "**اللاعب:** {{player}} \n**المركبة:** {{model}} \n**اللوحة:** {{plate}} \n**الجراج:** {{garage}}"
},
"take_vehicle": {
"title": "إخراج المركبة",
"description": "**اللاعب:** {{player}} \n**المركبة:** {{model}} \n**اللوحة:** {{plate}}"
},
"recovery_vehicle": {
"title": "استعادة المركبة",
"description": "**اللاعب:** {{player}} \n**المركبة:** {{model}} \n**اللوحة:** {{plate}} \n**الجراج:** {{garage}} \n**السعر:** {{price}}"
},
"give_vehicle": {
"title": "إعطاء المركبة",
"description": "**اللاعب:** {{player}} \n**اللاعب المستلم:** {{receivedPlayer}} \n**المركبة:** {{model}} \n**اللوحة:** {{plate}} \n**نوع المركبة:** {{vehicleType}}"
},
"impound_vehicle": {
"title": "حجز المركبة",
"description": "**اللاعب:** {{player}} \n**الوظيفة:** {{job}} \n**اللوحة:** {{plate}} \n**الجراج:** {{garage}}"
}
},
"drawtext": {
"store_vehicle": "[E] - تخزين المركبة",
"open_garage": "[E] - فتح الجراج",
"enter_garage": "[E] - دخول الجراج",
"public_garage": "[G] - دخول الجراج العام",
"recovery": "[E] - استعادة المركبة المفقودة (خارج): ${{price}}",
"back_garage": "[E] - رجوع",
"dynamic": "[E] - تفاعل",
"stash": "[E] - فتح المخزن",
"gardrobe": "[E] - فتح خزانة الملابس",
"delete_illegal": "[E] - حذف العنصر غير القانوني",
"exit_point": "[E] - نقطة الخروج",
"entry_point": "[E] - نقطة الدخول",
"board_point": "[E] - نقطة الصعود",
"shell_point": "[E] - نقطة الصدفة",
"house_point": "[E] - نقطة المنزل"
},
"management": {
"no_garage_nearby": "لا يوجد جراج قريب",
"no_garage_owner": "أنت لست مالك هذا الجراج",
"garage_price": "سعر الجراج: ${{price}}",
"garage_sell_tax": "ضريبة بيع الجراج: {{tax}}%",
"garage_sell_tax_description": "سيتم ضرب سعر الجراج في نسبة الضريبة",
"no_player": "لا يوجد لاعب قريب",
"not_relate_state": "هذا الأمر حصري لوكلاء العقارات"
},
"keyholders": {
"empty_list": "لم يتم العثور على حاملي مفاتيح",
"empty_out": "لا توجد سيارات في الشوارع لتستعيدها!",
"took_keys": "لقد أخذت المفاتيح",
"already_keys": "هذا اللاعب لديه بالفعل مفاتيح هذا الجراج",
"gave_keys": "لقد أعطيت مفاتيح {{garage}} لـ {{player}}",
"received_keys": "تم استلام مفاتيح {{garage}}"
},
"give_vehicle": {
"info": "تم تسليم المركبة: {{model}} بلوحة: {{plate}} إلى اللاعب: {{player}}",
"invalid_type": "تأكد من استخدام الأمر الصحيح لهذه المركبة",
"invalid_model": "الطراز المحدد غير موجود...",
"no_player_online": "اللاعب المحدد غير متصل...",
"plate_in_use": "هذه اللوحة مستخدمة بالفعل في مركبة أخرى",
"give_info": "تم تسليم المركبة: {{model}} بلوحة: {{plate}} إلى اللاعب: {{player}}"
},
"creator": {
"title": "منشئ الجراجات",
"description": "يمكنك إدارة الجراجات من هنا.",
"complete_creator": "يجب عليك إكمال المنشئ قبل فتحه مرة أخرى",
"garage_created": "تم إنشاء الجراج بنجاح",
"garage_updated": "تم تحديث الجراج بنجاح",
"select_menu": "حدد موقع القائمة",
"select_zone": "حدد نقطة داخل المنطقة",
"select_positions": "حدد 3 نقاط على الأقل...",
"menu_location": "موقع الدخول",
"spawn_location": "موقع الظهور",
"create_guide": "اضغط ~INPUT_CELLPHONE_RIGHT~ لتدوير المركبة يمينًا \nاضغط ~INPUT_CELLPHONE_LEFT~ لتدوير المركبة يسارًا",
"polyzone_nearby": "النقطة ليست داخل المنطقة",
"available_slots": "{{name}}، المساحات المتاحة: {{slots}}",
"teleported_to_garage": "تم نقلك إلى {{garage}}",
"select_garage": "اختر الجراج",
"select_garage_description": "اختر الجراج الذي تريد إنشاءه",
"fill_all_fields": "يرجى ملء جميع الحقول",
"shell_selector": {
"title": "داخل الجراج",
"description": "اختر القشرة الداخلية للجراج الخاص بك",
"select": "اختر الداخلية",
"selected": "تم الاختيار",
"vehicle_slots": "مساحات المركبات",
"change": "تغيير",
"no_shell_selected": "لم يتم اختيار داخلية",
"select_shell": "اختر داخلية الجراج",
"quick_select": "اختيار سريع",
"view_all": "عرض الكل",
"all_shells": "جميع الداخليات المتاحة",
"help_text": "استخدم مفاتيح الأسهم يسار/يمين لتصفح الداخليات في العرض. اضغط Enter للتأكيد أو Backspace للإلغاء.",
"no_shells_available": "لا توجد قشور متاحة. يرجى إضافة قشرة في Config.Shells"
},
"price": {
"title": "سعر الشراء",
"description": "حدد السعر الذي يجب على اللاعبين دفعه لشراء هذا الجراج"
},
"store_price": {
"enable": "تفعيل رسوم تخزين المركبات",
"description": "حدد رسوم يجب على اللاعبين دفعها لتخزين مركباتهم في هذا الجراج"
},
"garage_type_selector": {
"title": "نوع الجراج",
"vehicle": "مركبات",
"vehicle_description": "جراج للمركبات",
"plane": "طائرات",
"plane_description": "جراج للطائرات",
"boat": "قوارب",
"boat_description": "جراج للقوارب"
},
"left_panel": {
"search_garages_placeholder": "البحث عن جراجات...",
"create_garage": "إنشاء جراج",
"filters": "الفلاتر",
"results": "{{count}} نتيجة{{plural}}",
"all_garages": "الكل",
"vehicle": "مركبات",
"plane": "طائرات",
"boat": "قوارب",
"teleport_to_garage": "الانتقال إلى الجراج",
"teleport": "انتقال",
"garage_type": "نوع الجراج",
"public": "عام",
"private": "خاص",
"impound": "حجز",
"no_garages_found": "لم يتم العثور على جراجات",
"no_garages_available": "لا توجد جراجات متاحة",
"try_adjusting_search": "جرب تعديل معايير البحث أو إنشاء جراج جديد",
"create_first_garage_description": "أنشئ جراجك الأول للبدء في نظام إدارة الجراجات",
"status": "الحالة"
},
"garage_access_selector": {
"title": "صلاحية الوصول للجراج",
"public": "عام",
"public_description": "سيكون الجراج متاحًا للجميع",
"private": "خاص",
"private_description": "سيكون الجراج متاحًا للمالك فقط",
"impound": "حجز",
"impound_description": "سيكون الجراج متاحًا للحجز فقط"
},
"interior_type_selector": {
"title": "نوع الداخلية",
"ipl": "IPL",
"ipl_description": "استخدام IPL (قائمة العناصر الداخلية) للداخلية",
"shell": "قشرة",
"shell_description": "استخدام قشرة لداخلية مخصصة"
},
"form": {
"create_garage": "إنشاء جراج",
"edit_garage": "تعديل الجراج {{name}}",
"garage_type": "نوع الجراج",
"select": "اختر",
"remove": "إزالة",
"save": "حفظ",
"no_location_selected": "لم يتم اختيار موقع",
"no_location_selected_description": "انقر على 'اختر' لتحديد موقع",
"location_required": "{{label}} مطلوب",
"location": {
"title": "إعدادات الموقع",
"zone_points": "نقاط المنطقة",
"zone_points_description": "تحديد منطقة الجراج",
"menu_coords": "إحداثيات القائمة",
"spawn_coords": "إحداثيات الظهور"
},
"access_control": {
"title": "التحكم في الوصول",
"jobs_section": "الوظائف",
"gangs_section": "العصابات",
"select_job": "اختر وظيفة لإضافتها",
"select_gang": "اختر عصابة لإضافتها",
"job": "وظيفة",
"gang": "عصابة",
"grades": "الرتب",
"empty_list": "لا توجد عناصر متاحة",
"no_jobs_added": "لم تتم إضافة وظائف بعد. أضف وظائف لتقييد الوصول إلى الجراج.",
"no_gangs_added": "لم تتم إضافة عصابات بعد. أضف عصابات لتقييد الوصول إلى الجراج.",
"info": "أضف عدة وظائف وعصابات برتب محددة للتحكم في من يمكنه الوصول إلى هذا الجراج. إذا لم تتم إضافة وظائف أو عصابات، سيكون الجراج متاحًا للجميع."
}
},
"remove": {
"title": "حذف الجراج",
"description": "هل أنت متأكد من حذف هذا الجراج؟",
"confirm": "حذف"
},
"cancel": {
"title": "إلغاء إنشاء الجراج",
"description": "هل أنت متأكد من إلغاء إنشاء الجراج؟",
"confirm": "تأكيد"
},
"raycast": {
"info": "تأكد من تحديد منطقة الجراج بالكامل. وإلا قد تواجه مشكلة في منطقة الجراج.",
"done": "تم",
"add_point": "إضافة نقطة",
"rotate_z": "تدوير الاتجاه +/-",
"rotate_z_scroll": "تدوير الاتجاه +/-",
"increase_z": "حدود Z +/-",
"completed": "لقد أكملت جميع النقاط",
"selected_point": "لقد حددت {{count}} نقاط",
"no_point_selected": "لم تحدد أي نقطة",
"point_size": "حجم النقطة +/-",
"select_entity": "اختر كيان",
"not_valid_entity": "أنت لا تختار كيانًا صالحًا. يرجى اختيار {{entityType}}",
"selected_entity": "لقد حددت {{count}} كيانات",
"entity_disabled": "لا يمكنك اختيار هذا الكيان",
"select_entity_info": "يرجى اختيار {{entityType}}",
"model_is_not_valid": "النموذج {{model}} غير صالح",
"must_be_completed": "يجب إكمال الـ raycast قبل فتح المنشئ",
"not_in_points": "النقطة التي اخترتها ليست داخل منطقة الجراج",
"point_in_another_zone": "النقطة التي اخترتها في منطقة أخرى.",
"press_enter_to_select": "اضغط Enter للاختيار",
"undo": "تراجع"
}
},
"blip": {
"impound": "محجوز",
"garage": "جراج للبيع",
"plane": "هنق للبيع",
"boat": "رصيف للبيع"
},
"menu": {
"vehicle_loading": "جاري التحميل",
"vehicle_loading_subtitle": "تحضير المركبة...",
"preview_mode_active": "وضع المعاينة مفعل",
"preview_mode_subtitle": "تدوير بالفأرة • اضغط F9 للخروج",
"empty_garage": "جراج فارغ",
"empty_garage_description": "لا توجد مركبة في هذا الجراج. استخدم 'جلب المركبة' للحصول على مركبة",
"take_vehicle_out": "إخراج المركبة",
"take_vehicle_out_description": "هل أنت متأكد من إخراج هذه المركبة؟",
"take_vehicle_out_price": "سيتم خصم {{price}} من المال",
"take_vehicle_out_free": "يمكنك إخراج هذه المركبة مجانًا",
"cancel": "إلغاء",
"confirm": "تأكيد",
"power": "القوة",
"acceleration": "التسارع",
"traction": "الثبات",
"brakes": "الفرامل",
"no_vehicle_selected": "لم يتم اختيار مركبة",
"header": {
"favorite_button": "مفضلة",
"total_vehicles": "إجمالي المركبات",
"balance": "الرصيد: {{balance}}",
"balance_title": "الرصيد",
"balance_badge": "$",
"set_star": "وضع نجمة",
"set_tag": "وضع وسم",
"send_vehicle": "إرسال المركبة",
"transfer_vehicle": "نقل المركبة",
"bring_vehicle": "جلب المركبة",
"vehicle_transfer_success": "تم نقل المركبة إلى {{garage}}",
"money_not_enough": "ليس لديك ما يكفي من المال لنقل المركبة {{price}}",
"vehicle_transfer_player_success": "تم نقل المركبة {{plate}} إلى {{player}}",
"no_slot_available": "لا توجد مساحة متاحة في الجراج",
"vehicle_brought": "تم جلب المركبة {{vehicle}}",
"marked_as_favorite": "لقد قمت بوضعها كمفضلة",
"unmarked_as_favorite": "لقد قمت بإزالة المفضلة"
},
"empty": {
"title": "القائمة فارغة",
"description": "لم يتم العثور على عناصر",
"search_title": "لا توجد نتائج",
"search_description": "لا يوجد نتيجة لبحثك '{{searchQuery}}'",
"search_helper": "جرب مصطلح بحث مختلف",
"empty_helper": "حاول مرة أخرى لاحقًا"
},
"footer": {
"previous_vehicle": "المركبة السابقة",
"previous_vehicle_description": "اضغط السهم الأيسر للذهاب إلى المركبة السابقة",
"next_vehicle": "المركبة التالية",
"next_vehicle_description": "اضغط السهم الأيمن للذهاب إلى المركبة التالية",
"preview_mode": "وضع المعاينة",
"preview_mode_description": "فحص المركبة ثلاثي الأبعاد",
"music_mode": "وضع الموسيقى",
"music_mode_description": "تشغيل/إيقاف الموسيقى",
"exit_garage": "الخروج من الجراج",
"exit_garage_description": "اضغط ESC للخروج من الجراج"
},
"out_vehicles_modal": {
"title": "المركبات الخارجية",
"description": "اختر المركبة التي تريد جلبها",
"search_placeholder": "ابحث عن مركبة بالاسم أو الماركة",
"search_helper": "جرب مصطلح بحث مختلف",
"empty_helper": "حاول مرة أخرى لاحقًا",
"list_title": "قائمة المركبات",
"list_description": "تم العثور على {{count}} مركبة",
"list_helper": "جرب مصطلح بحث مختلف",
"list_empty_helper": "حاول مرة أخرى لاحقًا",
"cancel": "إلغاء",
"bring_vehicle": "جلب المركبة",
"loading": "جاري تحميل المركبات...",
"loading_helper": "الرجاء الانتظار",
"selected": "تم الاختيار"
},
"player_list_modal": {
"title": "قائمة اللاعبين",
"description": "اختر اللاعب الذي تريد نقل المركبة إليه",
"search_placeholder": "ابحث عن لاعب بالاسم",
"search_helper": "جرب مصطلح بحث مختلف",
"empty_helper": "حاول مرة أخرى لاحقًا",
"list_title": "قائمة اللاعبين",
"list_description": "تم العثور على {{count}} لاعب",
"list_helper": "جرب مصطلح بحث مختلف",
"list_empty_helper": "حاول مرة أخرى لاحقًا",
"cancel": "إلغاء",
"transfer_vehicle": "نقل المركبة",
"loading": "جاري تحميل اللاعبين...",
"loading_helper": "الرجاء الانتظار",
"selected": "تم الاختيار"
},
"loading": {
"title": "جاري التحميل",
"description": "الرجاء الانتظار",
"helper": "الرجاء الانتظار"
},
"send_vehicle_modal": {
"title": "إرسال المركبة",
"description": "اختر الجراج الذي تريد إرسال المركبة إليه",
"search_placeholder": "ابحث عن جراج بالاسم",
"search_helper": "جرب مصطلح بحث مختلف",
"empty_helper": "حاول مرة أخرى لاحقًا",
"list_title": "قائمة الجراجات",
"list_description": "تم العثور على {{count}} جراج",
"list_helper": "جرب مصطلح بحث مختلف",
"list_empty_helper": "حاول مرة أخرى لاحقًا",
"cancel": "إلغاء",
"send_vehicle": "إرسال المركبة",
"loading": "جاري تحميل الجراجات...",
"loading_helper": "الرجاء الانتظار",
"selected": "تم الاختيار",
"garage_description": "سيتم إرسال المركبة إلى الجراج المحدد"
},
"tag_modal": {
"title": "وسم",
"description": "تعيين وسم للمركبة {{name}}",
"current_tag": "الوسم الحالي",
"new_tag": "وسم جديد",
"new_tag_placeholder": "أدخل الوسم الجديد",
"popular_tags": "الوسوم الشائعة",
"save": "حفظ",
"cancel": "إلغاء",
"notification": "لقد قمت بتحديث الوسم! الوسم الجديد: {{tag}}"
},
"impound_info": {
"title": "معلومات الحجز",
"description": "معلومات الحجز",
"current_tag": "الوسم الحالي",
"new_tag": "وسم جديد",
"new_tag_placeholder": "أدخل الوسم الجديد",
"time_left": "الوقت المتبقي",
"price": "السعر",
"garage": "الجراج",
"pay_fine": "دفع الغرامة",
"pay_fine_description": "فقط ادفع الغرامة لإطلاق سراح المركبة",
"pay_fine_button": "دفع الغرامة",
"pay_fine_button_description": "يجب عليك الانتظار حتى يمر الوقت لدفع الغرامة",
"yes": "نعم",
"no": "لا",
"note": "ملاحظة"
},
"impound_modal": {
"title": "الحجز",
"description": "حجز المركبة",
"cancel": "إلغاء",
"confirm": "تأكيد",
"impound_garage": "جراج الحجز",
"impound_time": "مدة الحجز",
"pay_to_release": "الدفع للإفراج",
"pay_to_release_description": "إذا قمت بتعيين هذا على نعم، يمكن للاعب دفع الغرامة وإطلاق المركبة دون انتظار انتهاء الوقت",
"impound_fee": "رسوم الحجز",
"note": "ملاحظة",
"note_placeholder": "أدخل الملاحظة",
"summary": "ملخص",
"selected_garage": "الجراج المحدد",
"select_garage": "اختر الجراج",
"time": "الوقت",
"fee": "الرسوم",
"send_to_impound": "إرسال إلى الحجز",
"yes": "نعم",
"no": "لا",
"error": {
"select_garage": "الرجاء اختيار جراج",
"select_time": "الرجاء اختيار وقت",
"submit": "حدث خطأ أثناء إرسال المركبة إلى الحجز"
},
"not_selected": "غير محدد",
"minutes": "دقائق",
"seconds": "ثواني"
},
"info_card": {
"engine_health": "صحة المحرك",
"body_health": "صحة الهيكل",
"fuel_level": "مستوى الوقود",
"brakes": "الفرامل",
"acceleration": "التسارع",
"top_speed": "السرعة القصوى",
"traction": "الثبات",
"close": "إغلاق"
}
},
"decorate_ui": {
"price": "${{price}}",
"clear": "مسح",
"items_found": "تم العثور على {{count}} عنصر",
"cancel": "إلغاء",
"confirm": "تأكيد",
"item_list": {
"stash": "مخزن",
"gardrobe": "خزانة ملابس",
"empty": {
"title": "لم يتم اختيار عنصر",
"description": "اختر فئة العنصر للديكور. يمكنك البدء باختيار نوع العنصر من القائمة اليسرى.",
"helper": "اختر فئة عنصر من القائمة اليسرى",
"search_title": "لا توجد نتائج",
"search_description": "لا يوجد نتيجة لبحثك '{{searchQuery}}'",
"search_helper": "جرب مصطلح بحث مختلف"
}
},
"header": {
"search_placeholder": "البحث عن عناصر الأثاث"
},
"help": {
"title": "التحكم والمساعدة",
"description": "جميع عناصر التحكم المستخدمة في وضع الديكور",
"mouse_control": "تحكم الفأرة",
"mouse_control_description": "تحريك الأثاث بالفأرة",
"keyboard_control": "تحكم لوحة المفاتيح",
"f5_description": "إخفاء/إظهار المؤشر",
"f6_description": "تفعيل/تعطيل حركة الكاميرا الحرة",
"wasd_description": "تحريك الأثاث بلوحة المفاتيح",
"esc_description": "الخروج من قائمة الديكور دون حفظ",
"important_tips": "نصائح مهمة",
"important_tips_description": "بعض الأثاث يتضمن خيارات <typeColor>النوع واللون</typeColor>، وقد يحتوي على ميزات <storageWardrobe>تخزين أو خزانة ملابس</storageWardrobe>."
},
"furniture_info": {
"select_color": "اختر اللون",
"edit_mode": "وضع التعديل",
"translate": "تحريك",
"rotate": "تدوير"
},
"buy": {
"price_info": "معلومات السعر",
"selected_color": "اللون المحدد",
"price": "السعر",
"buy": "شراء - ${{price}}",
"title": "هل أنت متأكد من شراء هذا العنصر؟",
"description": "عند شراء هذا العنصر، ستحصل على ${{price}}"
},
"categories": {
"dynamic": "ديناميكي",
"objects": "كائنات",
"stash": "مخزن"
},
"stash": {
"no_selected_item": "لا يوجد عنصر محدد",
"no_selected_item_description": "اختر عنصرًا من القائمة على اليمين لعرض التفاصيل. سيتم عرض جميع عناصر الديكور الخاصة بك هنا.",
"in_stash": "في المخزن",
"not_in_stash": "ليس في المخزن",
"furniture_management": "إدارة الأثاث",
"put_in_stash": "وضع في المخزن",
"put_in_stash_description": "وضع العنصر في المخزن",
"remove_from_stash": "إزالة من المخزن",
"remove_from_stash_description": "إزالة العنصر من المخزن",
"sell": "بيع الأثاث",
"sell_description": "بيع العنصر مقابل ${{price}}",
"are_sure_sell": "هل أنت متأكد من بيع هذا العنصر؟",
"are_sure_sell_description": "عند بيع هذا العنصر، ستحصل على ${{price}}",
"save_location": "حفظ الموقع",
"save_location_description": "حفظ العنصر في الموقع",
"save": "حفظ"
},
"objects": {
"selected_categories": "تم اختيار: {{count}} فئة",
"search_category": "البحث عن فئة"
}
},
"decorate": {
"no_money": "ليس لديك ما يكفي من المال! ${{price}}",
"invalid_data": "بيانات غير صالحة",
"invalid_object": "كائن غير صالح",
"failed_update": "فشل التحديث",
"sold_furniture": "لقد بعت الأثاث مقابل ${{price}}",
"failed_sell": "فشل البيع",
"gizmo_mode_toggled": "تم تبديل وضع Gizmo إلى {{mode}}",
"focused": "مركّز",
"unfocused": "غير مركّز",
"focus_object_not_supported": "الكائن المركّز غير مدعوم في وضع الديكور بالفأرة",
"too_far": "أنت بعيد جدًا عن منطقة الديكور",
"not_in_garage": "أنت لست داخل جراج",
"invalid_garage": "جراج غير صالح",
"not_support_decoration": "هذا الجراج لا يدعم الديكور",
"not_owner": "أنت لست مالك هذا الجراج",
"not_key_holder": "أنت لست حامل مفتاح لهذا الجراج",
"decoration_not_available": "الديكور غير متاح، شخص آخر يستخدمه",
"you_cant_select_entity": "تحديد الكيان معطل، تحتاج إلى الذهاب إلى فئة 'المخزن' أولاً"
},
"furniture_creator": {
"page_title": "منشئ الأثاث",
"page_description": "إنشاء وإدارة عناصر الأثاث المخصصة لسيرفرك",
"select_category": "اختر فئة",
"select_category_description": "اختر فئة الأثاث لبدء إدارة العناصر",
"select_item": "اختر عنصرًا للتعديل",
"select_item_description": "اختر عنصرًا موجودًا من القائمة أو أنشئ واحدًا جديدًا",
"search_placeholder": "البحث عن أثاث...",
"statistics": "الإحصائيات",
"categories": "فئات",
"total_items": "العناصر",
"dynamic": "ديناميكي",
"colors": "الألوان",
"items": "عناصر",
"no_results": "لا توجد نتائج",
"try_different_search": "جرب تعديل استعلام البحث",
"create_item": "إنشاء عنصر أثاث",
"edit_item": "تعديل عنصر الأثاث",
"category": "الفئة",
"basic_info": "المعلومات الأساسية",
"advanced": "متقدم",
"object_name": "اسم الكائن",
"label": "التسمية",
"item_description": "الوصف",
"price": "السعر",
"color_label": "تسمية اللون",
"image": "صورة",
"image_description": "قدّم رابط صورة لهذا العنصر",
"stash": "مخزن",
"stash_description": "تفعيل وظيفة التخزين",
"slots": "الخانات",
"max_weight": "الوزن الأقصى",
"gardrobe": "خزانة ملابس",
"gardrobe_description": "تفعيل تخزين الملابس",
"offset": "إزاحة الموضع",
"preview": "معاينة مباشرة",
"unnamed": "عنصر بدون اسم",
"no_description": "لا يوجد وصف",
"delete": "حذف",
"save": "حفظ",
"create": "إنشاء",
"add": "إضافة",
"fill_all_fields": "يرجى ملء جميع الحقول المطلوبة",
"object_label_required": "اسم الكائن والتسمية مطلوبان",
"color_variations": "تنويعات الألوان",
"color_variations_description": "أضف تنويعات لونية مختلفة لهذا العنصر",
"add_color": "إضافة لون",
"add_color_description": "أضف تنويع لون جديد لهذا العنصر",
"edit_color": "تعديل تنويع اللون",
"edit_color_description": "تعديل تنويع اللون لهذا العنصر",
"no_colors": "لا توجد تنويعات ألوان بعد",
"add_first_color": "انقر على إضافة لون لإنشاء التنويع الأول",
"image_url": "رابط الصورة",
"image_error": "فشل تحميل الصورة",
"no_image": "لا توجد صورة",
"image_tips": "نصائح",
"image_tip_1": "استخدم روابط صور مباشرة (تنتهي بـ .png، .jpg، إلخ)",
"image_tip_2": "الحجم الموصى به: 512x512 بكسل أو أعلى",
"image_tip_3": "صيغة PNG مع شفافية تعمل بشكل أفضل",
"category_manager": "مدير الفئات",
"category_manager_description": "إنشاء وإدارة فئات الأثاث",
"add_category": "إضافة فئة",
"edit_category": "تعديل الفئة",
"no_categories": "لا توجد فئات بعد",
"category_key": "مفتاح الفئة",
"dynamic_icon": "أيقونة ديناميكية",
"dynamic_description": "تفعيل الوضع الديناميكي",
"navigation": "ترتيب التنقل",
"css_settings": "إعدادات CSS",
"item_created": "تم إنشاء عنصر الأثاث بنجاح",
"item_create_failed": "فشل إنشاء عنصر الأثاث",
"item_updated": "تم تحديث عنصر الأثاث بنجاح",
"item_update_failed": "فشل تحديث عنصر الأثاث",
"item_removed": "تم حذف عنصر الأثاث بنجاح",
"item_remove_failed": "فشل حذف عنصر الأثاث",
"category_created": "تم إنشاء فئة الأثاث بنجاح",
"cannot_delete_config_item": "لا يمكن حذف عناصر الإعدادات، فقط عناصر قاعدة البيانات",
"object_is_not_valid": "اسم الكائن غير صالح، هل أنت متأكد أنه موجود في اللعبة؟ {{object}}",
"screenshot_cancelled": "تم إلغاء لقطة الشاشة",
"screenshot_completed": "تمت لقطة الشاشة بنجاح",
"token_not_set": "لم يتم تعيين توكن FiveManage. يرجى تعيينه في config/fivemanage.lua.",
"uploading_image": "جاري رفع الصورة إلى FiveManage...",
"image_uploaded": "تم رفع الصورة إلى FiveManage بنجاح",
"object_required": "الكائن مطلوب",
"object_already_in_category": "اسم الكائن {{object}} موجود بالفعل في هذه الفئة. {{category}}."
}
}
@@ -0,0 +1,628 @@
{
"empty_list": "Няма намерени елементи",
"cancel": "Отказ",
"delete": "Изтриване",
"clear": "Изчистване",
"no_garage_slots": "Няма свободно място в този гараж...",
"no_vehicle_owner": "Не поддържаме превозни средства, които не са ваши!",
"no_house_nearby": "Няма къща наблизо",
"buy_garage": "Купи гараж за: ${{price}}",
"you_are_not_police": "Вие не сте полицай",
"no_vehicle_nearby": "Няма превозно средство наблизо",
"garage_not_available": "Гаражът не е наличен или е зает, опитайте отново...",
"garage_not_found": "Гаражът не е намерен",
"garage_not_found_job": "Служебен гараж не е намерен",
"garage_empty": "Гаражът е празен",
"cannot_store_vehicle": "Не можете да приберете това превозно средство тук!",
"not_driver": "Забранено е да шофирате превозното средство",
"vehicle_not_spawned": "Използвахте гаража едновременно с друг потребител. Опитайте отново!",
"timeout_expired": "Времето изтече",
"no_money": "Нямате достатъчно пари! ${{price}}",
"not_correct_job": "Нямате правилната професия",
"not_correct_grade": "Нямате правилния ранг",
"not_in_vehicle": "Вие не сте в превозно средство!",
"job_vehicle_added": "Превозното средство е добавено в служебния гараж!",
"no_vehicle_data": "Няма намерени данни за превозното средство",
"you_are_already_in_garage": "Вие вече сте в гараж!",
"sound_enabled": "Звукът е включен",
"sound_disabled": "Звукът е изключен",
"sell_garage": "Получени пари от продажба на гараж: ${{price}}",
"garage_purchase": "Купихте нов гараж за: ${{price}}",
"player_not_found": "Играчът не е намерен",
"transfer_success": "Получихте превозно средство от друг играч, изпратено е в: {{garage}}",
"transfer_success_to": "Изпратихте превозно средство на друг играч, изпратено е в: {{garage}}",
"transfer_blacklisted": "Това превозно средство не може да бъде прехвърлено на друг играч",
"give_recovery": "Възстановихте изгубено превозно средство, изпратено е в: {{garage}}, таксата е: ${{price}}",
"impound_pay": "Превозното средство вече не е конфискувано, платихте: ${{price}}",
"missing_type": "Няма гараж за тип превозно средство: {{type}}",
"vehicle_removed": "Превозното средство е премахнато!",
"vehicle_impounded": "Превозното средство е успешно конфискувано и изпратено в: {{garage}}",
"all_vehicles_impounded": "Всички превозни средства от картата са изпратени в конфискуване!",
"repair": {
"repaired": "Превозното средство е поправено {{plate}}"
},
"log": {
"save_vehicle": {
"title": "Запазване на превозно средство",
"description": "**Играч:** {{player}} \n**Превозно средство:** {{model}} \n**Регистрационен номер:** {{plate}} \n**Гараж:** {{garage}}"
},
"take_vehicle": {
"title": "Изкарване на превозно средство",
"description": "**Играч:** {{player}} \n**Превозно средство:** {{model}} \n**Регистрационен номер:** {{plate}}"
},
"recovery_vehicle": {
"title": "Възстановяване на превозно средство",
"description": "**Играч:** {{player}} \n**Превозно средство:** {{model}} \n**Регистрационен номер:** {{plate}} \n**Гараж:** {{garage}} \n**Цена:** {{price}}"
},
"give_vehicle": {
"title": "Предаване на превозно средство",
"description": "**Играч:** {{player}} \n**Получател:** {{receivedPlayer}} \n**Превозно средство:** {{model}} \n**Регистрационен номер:** {{plate}} \n**Тип превозно средство:** {{vehicleType}}"
},
"impound_vehicle": {
"title": "Конфискуване на превозно средство",
"description": "**Играч:** {{player}} \n**Професия:** {{job}} \n**Регистрационен номер:** {{plate}} \n**Гараж:** {{garage}}"
}
},
"drawtext": {
"store_vehicle": "[E] - Прибери превозно средство",
"open_garage": "[E] - Отвори гараж",
"enter_garage": "[E] - Влез в гараж",
"public_garage": "[G] - Влез в обществен гараж",
"recovery": "[E] - Възстанови изгубено превозно средство (ИЗВЪН): ${{price}}",
"back_garage": "[E] - Назад",
"dynamic": "[E] - Взаимодействие",
"stash": "[E] - Отвори склад",
"gardrobe": "[E] - Отвори гардероб",
"delete_illegal": "[E] - Изтрий незаконен предмет",
"exit_point": "[E] - Точка на изход",
"entry_point": "[E] - Точка на вход",
"board_point": "[E] - Точка на качване",
"shell_point": "[E] - Точка на черупка",
"house_point": "[E] - Точка на къща"
},
"management": {
"no_garage_nearby": "Няма гараж наблизо",
"no_garage_owner": "Вие не сте собственик на този гараж",
"garage_price": "Цена на гаража: ${{price}}",
"garage_sell_tax": "Данък при продажба на гараж: {{tax}}%",
"garage_sell_tax_description": "Цената на гаража ще бъде умножена по процента на данъка",
"no_player": "Няма играч наблизо",
"not_relate_state": "Тази команда е само за брокери на недвижими имоти"
},
"keyholders": {
"empty_list": "Няма намерени притежатели на ключове",
"empty_out": "Няма превозни средства по улиците, които да възстановите!",
"took_keys": "Взехте ключовете",
"already_keys": "Този играч вече има ключове за този гараж",
"gave_keys": "Дадохте ключовете за {{garage}} на {{player}}",
"received_keys": "Получихте ключовете за {{garage}}"
},
"give_vehicle": {
"info": "Превозното средство: {{model}} с регистрационен номер: {{plate}} е предадено на играча: {{player}}",
"invalid_type": "Уверете се, че използвате правилната команда за това превозно средство",
"invalid_model": "Избраният модел не съществува...",
"no_player_online": "Избраният играч не е онлайн...",
"plate_in_use": "Този регистрационен номер вече се използва от друго превозно средство",
"give_info": "Превозното средство: {{model}} с регистрационен номер: {{plate}} е предадено на играча: {{player}}"
},
"creator": {
"title": "Създател на гаражи",
"description": "От тук можете да управлявате гаражите.",
"complete_creator": "Трябва да довършите създателя, преди да го отворите отново",
"garage_created": "Гаражът е създаден успешно",
"garage_updated": "Гаражът е обновен успешно",
"select_menu": "Изберете местоположението на менюто",
"select_zone": "Изберете точка в зоната",
"select_positions": "Изберете поне 3 точки...",
"menu_location": "Място за вход",
"spawn_location": "Място за появяване",
"create_guide": "Натиснете ~INPUT_CELLPHONE_RIGHT~ за завъртане надясно \nНатиснете ~INPUT_CELLPHONE_LEFT~ за завъртане наляво",
"polyzone_nearby": "Точката не е в зоната",
"available_slots": "{{name}}, свободни места: {{slots}}",
"teleported_to_garage": "Телепортиран в {{garage}}",
"select_garage": "Избери гараж",
"select_garage_description": "Изберете гаража, който искате да създадете",
"fill_all_fields": "Моля, попълнете всички полета",
"shell_selector": {
"title": "Интериор на гаража",
"description": "Изберете интериорната обвивка за вашия гараж",
"select": "Избери интериор",
"selected": "Избран",
"vehicle_slots": "места за превозни средства",
"change": "Промяна",
"no_shell_selected": "Няма избран интериор",
"select_shell": "Избери интериор на гаража",
"quick_select": "Бърз избор",
"view_all": "Виж всички",
"all_shells": "Всички налични интериори",
"help_text": "Използвайте стрелките наляво/надясно за прелистване. Натиснете Enter за потвърждение или Backspace за отмяна.",
"no_shells_available": "Няма налични обвивки. Моля, добавете в Config.Shells"
},
"price": {
"title": "Цена за покупка",
"description": "Задайте цената, която играчите трябва да платят за този гараж"
},
"store_price": {
"enable": "Активирай такса за съхранение",
"description": "Задайте такса за съхранение на превозни средства в този гараж"
},
"garage_type_selector": {
"title": "Тип гараж",
"vehicle": "Автомобил",
"vehicle_description": "Гараж за автомобили",
"plane": "Самолет",
"plane_description": "Гараж за самолети",
"boat": "Лодка",
"boat_description": "Гараж за лодки"
},
"left_panel": {
"search_garages_placeholder": "Търсене на гаражи...",
"create_garage": "Създай гараж",
"filters": "Филтри",
"results": "{{count}} резултат{{plural}}",
"all_garages": "Всички",
"vehicle": "Автомобил",
"plane": "Самолет",
"boat": "Лодка",
"teleport_to_garage": "Телепорт до гараж",
"teleport": "Телепорт",
"garage_type": "Тип гараж",
"public": "Обществен",
"private": "Частен",
"impound": "Конфискуване",
"no_garages_found": "Няма намерени гаражи",
"no_garages_available": "Няма налични гаражи",
"try_adjusting_search": "Опитайте да промените критериите за търсене или създайте нов гараж",
"create_first_garage_description": "Създайте първия си гараж, за да започнете",
"status": "Статус"
},
"garage_access_selector": {
"title": "Достъп до гаража",
"public": "Обществен",
"public_description": "Гаражът ще бъде достъпен за всички",
"private": "Частен",
"private_description": "Гаражът ще бъде достъпен само за собственика",
"impound": "Конфискуване",
"impound_description": "Гаражът ще бъде достъпен само за конфискуваните превозни средства"
},
"interior_type_selector": {
"title": "Тип интериор",
"ipl": "IPL",
"ipl_description": "Използване на IPL (Interior Prop List)",
"shell": "Обвивка",
"shell_description": "Използване на обвивка за персонализиран интериор"
},
"form": {
"create_garage": "Създай гараж",
"edit_garage": "Редактирай гараж {{name}}",
"garage_type": "Тип гараж",
"select": "Избери",
"remove": "Премахни",
"save": "Запази",
"no_location_selected": "Няма избрано местоположение",
"no_location_selected_description": "Кликнете „Избери“ за избор на местоположение",
"location_required": "{{label}} е задължително",
"location": {
"title": "Настройки на местоположението",
"zone_points": "Точки на зоната",
"zone_points_description": "Определете зоната на гаража",
"menu_coords": "Координати на менюто",
"spawn_coords": "Координати за появяване"
},
"access_control": {
"title": "Контрол на достъпа",
"jobs_section": "Професии",
"gangs_section": "Банди",
"select_job": "Изберете професия за добавяне",
"select_gang": "Изберете банда за добавяне",
"job": "Професия",
"gang": "Банда",
"grades": "Рангове",
"empty_list": "Няма налични елементи",
"no_jobs_added": "Все още няма добавени професии. Добавете, за да ограничите достъпа.",
"no_gangs_added": "Все още няма добавени банди. Добавете, за да ограничите достъпа.",
"info": "Добавете професии и банди с конкретни рангове, за да контролирате достъпа. Ако няма нищо добавено – достъпът е за всички."
}
},
"remove": {
"title": "Изтриване на гараж",
"description": "Сигурни ли сте, че искате да изтриете този гараж?",
"confirm": "Изтрий"
},
"cancel": {
"title": "Отказ от създаване на гараж",
"description": "Сигурни ли сте, че искате да отмените създаването?",
"confirm": "Потвърди"
},
"raycast": {
"info": "Уверете се, че сте избрали цялата зона на гаража, иначе може да има проблеми.",
"done": "Готово",
"add_point": "Добави точка",
"rotate_z": "Завъртане на посоката +/-",
"rotate_z_scroll": "Завъртане на посоката +/-",
"increase_z": "Граници по Z +/-",
"completed": "Завършихте всички точки",
"selected_point": "Избрахте {{count}} точки",
"no_point_selected": "Не сте избрали точка",
"point_size": "Размер на точката +/-",
"select_entity": "Избери обект",
"not_valid_entity": "Не избирате валиден обект. Моля, изберете {{entityType}}",
"selected_entity": "Избрахте {{count}} обекта",
"entity_disabled": "Не можете да изберете този обект",
"select_entity_info": "Моля, изберете {{entityType}}",
"model_is_not_valid": "Моделът {{model}} не е валиден",
"must_be_completed": "Трябва да завършите raycast преди да отворите създателя",
"not_in_points": "Избраната точка не е в зоната на гаража",
"point_in_another_zone": "Избраната точка е в друга зона.",
"press_enter_to_select": "Натиснете Enter за избор",
"undo": "Отмяна"
}
},
"blip": {
"impound": "Конфискувано",
"garage": "Гараж за продажба",
"plane": "Хангар за продажба",
"boat": "Пристан за продажба"
},
"menu": {
"vehicle_loading": "Зареждане",
"vehicle_loading_subtitle": "Подготовка на превозното средство...",
"preview_mode_active": "Режим на преглед активен",
"preview_mode_subtitle": "Завъртане с мишката • F9 за изход",
"empty_garage": "Празен гараж",
"empty_garage_description": "Няма превозно средство в гаража. Използвайте „Донеси превозно средство“",
"take_vehicle_out": "Изкарай превозно средство",
"take_vehicle_out_description": "Сигурни ли сте, че искате да изкарате това превозно средство?",
"take_vehicle_out_price": "Ще ви бъде начислено {{price}}",
"take_vehicle_out_free": "Можете да изкарате превозното средство безплатно",
"cancel": "Отказ",
"confirm": "Потвърди",
"power": "Мощност",
"acceleration": "Ускорение",
"traction": "Сцепление",
"brakes": "Спирачки",
"no_vehicle_selected": "Няма избрано превозно средство",
"header": {
"favorite_button": "Любимо",
"total_vehicles": "Общо превозни средства",
"balance": "Баланс: {{balance}}",
"balance_title": "Баланс",
"balance_badge": "$",
"set_star": "Постави звезда",
"set_tag": "Постави етикет",
"send_vehicle": "Изпрати превозно средство",
"transfer_vehicle": "Прехвърли превозно средство",
"bring_vehicle": "Донеси превозно средство",
"vehicle_transfer_success": "Превозното средство е прехвърлено в {{garage}}",
"money_not_enough": "Нямате достатъчно пари за прехвърляне {{price}}",
"vehicle_transfer_player_success": "Превозно средство {{plate}} е прехвърлено на {{player}}",
"no_slot_available": "Няма свободно място в гаража",
"vehicle_brought": "Превозното средство {{vehicle}} е донесено",
"marked_as_favorite": "Маркирано като любимо",
"unmarked_as_favorite": "Премахнато от любимите"
},
"empty": {
"title": "Списъкът е празен",
"description": "Няма намерени елементи",
"search_title": "Няма резултати",
"search_description": "няма резултат за '{{searchQuery}}'",
"search_helper": "Опитайте различен термин",
"empty_helper": "Опитайте по-късно"
},
"footer": {
"previous_vehicle": "Предишно превозно средство",
"previous_vehicle_description": "Стрелка наляво за предишното",
"next_vehicle": "Следващо превозно средство",
"next_vehicle_description": "Стрелка надясно за следващото",
"preview_mode": "Режим на преглед",
"preview_mode_description": "3D преглед на превозното средство",
"music_mode": "Музикален режим",
"music_mode_description": "Вкл./изкл. музика",
"exit_garage": "Изход от гаража",
"exit_garage_description": "ESC за изход"
},
"out_vehicles_modal": {
"title": "Превозни средства навън",
"description": "Изберете превозното средство, което искате да донесете",
"search_placeholder": "Търсене по име или марка",
"search_helper": "Опитайте различен термин",
"empty_helper": "Опитайте по-късно",
"list_title": "Списък с превозни средства",
"list_description": "Намерени {{count}} превозно средство",
"list_helper": "Опитайте различен термин",
"list_empty_helper": "Опитайте по-късно",
"cancel": "Отказ",
"bring_vehicle": "Донеси превозно средство",
"loading": "Зареждане на превозни средства...",
"loading_helper": "Моля, изчакайте",
"selected": "Избрано"
},
"player_list_modal": {
"title": "Списък с играчи",
"description": "Изберете играча, на когото да прехвърлите превозното средство",
"search_placeholder": "Търсене по име",
"search_helper": "Опитайте различен термин",
"empty_helper": "Опитайте по-късно",
"list_title": "Списък с играчи",
"list_description": "Намерени {{count}} играч",
"list_helper": "Опитайте различен термин",
"list_empty_helper": "Опитайте по-късно",
"cancel": "Отказ",
"transfer_vehicle": "Прехвърли превозно средство",
"loading": "Зареждане на играчи...",
"loading_helper": "Моля, изчакайте",
"selected": "Избрано"
},
"loading": {
"title": "Зареждане",
"description": "Моля, изчакайте",
"helper": "Моля, изчакайте"
},
"send_vehicle_modal": {
"title": "Изпрати превозно средство",
"description": "Изберете гаража, в който да изпратите превозното средство",
"search_placeholder": "Търсене по име на гараж",
"search_helper": "Опитайте различен термин",
"empty_helper": "Опитайте по-късно",
"list_title": "Списък с гаражи",
"list_description": "Намерени {{count}} гараж",
"list_helper": "Опитайте различен термин",
"list_empty_helper": "Опитайте по-късно",
"cancel": "Отказ",
"send_vehicle": "Изпрати превозно средство",
"loading": "Зареждане на гаражи...",
"loading_helper": "Моля, изчакайте",
"selected": "Избрано",
"garage_description": "Превозното средство ще бъде изпратено в избрания гараж"
},
"tag_modal": {
"title": "Етикет",
"description": "Задайте етикет за превозното средство {{name}}",
"current_tag": "Текущ етикет",
"new_tag": "Нов етикет",
"new_tag_placeholder": "Въведете нов етикет",
"popular_tags": "Популярни етикети",
"save": "Запази",
"cancel": "Отказ",
"notification": "Етикетът е обновен! Нов етикет: {{tag}}"
},
"impound_info": {
"title": "Информация за конфискуване",
"description": "Информация за конфискуване",
"current_tag": "Текущ етикет",
"new_tag": "Нов етикет",
"new_tag_placeholder": "Въведете нов етикет",
"time_left": "Оставащо време",
"price": "Цена",
"garage": "Гараж",
"pay_fine": "Плати глобата",
"pay_fine_description": "Просто платете глобата, за да освободите превозното средство",
"pay_fine_button": "Плати глобата",
"pay_fine_button_description": "Трябва да изчакате времето да мине, за да платите",
"yes": "Да",
"no": "Не",
"note": "Бележка"
},
"impound_modal": {
"title": "Конфискуване",
"description": "Конфискувайте превозното средство",
"cancel": "Отказ",
"confirm": "Потвърди",
"impound_garage": "Гараж за конфискувани",
"impound_time": "Време за конфискуване",
"pay_to_release": "Плащане за освобождаване",
"pay_to_release_description": "Ако е „Да“, играчът може да плати и да освободи без да чака времето",
"impound_fee": "Такса за конфискуване",
"note": "Бележка",
"note_placeholder": "Въведете бележка",
"summary": "Обобщение",
"selected_garage": "Избран гараж",
"select_garage": "Избери гараж",
"time": "Време",
"fee": "Такса",
"send_to_impound": "Изпрати в конфискуване",
"yes": "Да",
"no": "Не",
"error": {
"select_garage": "Моля, изберете гараж",
"select_time": "Моля, изберете време",
"submit": "Възникна грешка при изпращане в конфискуване"
},
"not_selected": "Не е избрано",
"minutes": "Минути",
"seconds": "Секунди"
},
"info_card": {
"engine_health": "Състояние на двигателя",
"body_health": "Състояние на каросерията",
"fuel_level": "Ниво на горивото",
"brakes": "Спирачки",
"acceleration": "Ускорение",
"top_speed": "Максимална скорост",
"traction": "Сцепление",
"close": "Затвори"
}
},
"decorate_ui": {
"price": "${{price}}",
"clear": "Изчисти",
"items_found": "Намерени {{count}} елемента",
"cancel": "Отказ",
"confirm": "Потвърди",
"item_list": {
"stash": "Склад",
"gardrobe": "Гардероб",
"empty": {
"title": "Няма избран елемент",
"description": "Изберете категория за декорация. Започнете от лявото меню.",
"helper": "Изберете категория от лявото меню",
"search_title": "Няма резултати",
"search_description": "Няма резултат за '{{searchQuery}}'",
"search_helper": "Опитайте различен термин"
}
},
"header": {
"search_placeholder": "Търсене на мебели"
},
"help": {
"title": "Управление и помощ",
"description": "Всички контроли в режим декорация",
"mouse_control": "Управление с мишка",
"mouse_control_description": "Преместване на мебелите с мишката",
"keyboard_control": "Клавиатура",
"f5_description": "Скриване/показване на курсора",
"f6_description": "Свободна камера",
"wasd_description": "Движение с WASD",
"esc_description": "Изход без запазване",
"important_tips": "Важни съвети",
"important_tips_description": "Някои мебели имат опции за <typeColor>тип и цвят</typeColor> и функции <storageWardrobe>склад/гардероб</storageWardrobe>."
},
"furniture_info": {
"select_color": "Избери цвят",
"edit_mode": "Режим на редакция",
"translate": "Преместване",
"rotate": "Завъртане"
},
"buy": {
"price_info": "Информация за цената",
"selected_color": "Избран цвят",
"price": "Цена",
"buy": "Купи - ${{price}}",
"title": "Сигурни ли сте, че искате да купите този елемент?",
"description": "След покупка ще получите ${{price}}"
},
"categories": {
"dynamic": "Динамични",
"objects": "Обекти",
"stash": "Склад"
},
"stash": {
"no_selected_item": "Няма избран елемент",
"no_selected_item_description": "Изберете елемент от списъка вдясно. Тук ще се показват всичките ви декорации.",
"in_stash": "В склада",
"not_in_stash": "Не е в склада",
"furniture_management": "Управление на мебели",
"put_in_stash": "Сложи в склада",
"put_in_stash_description": "Сложи елемента в склада",
"remove_from_stash": "Извади от склада",
"remove_from_stash_description": "Извади елемента от склада",
"sell": "Продай мебел",
"sell_description": "Продай за ${{price}}",
"are_sure_sell": "Сигурни ли сте, че искате да продадете?",
"are_sure_sell_description": "След продажба ще получите ${{price}}",
"save_location": "Запази позицията",
"save_location_description": "Запази позицията на елемента",
"save": "Запази"
},
"objects": {
"selected_categories": "Избрани: {{count}} категория",
"search_category": "Търсене на категория"
}
},
"decorate": {
"no_money": "Нямате достатъчно пари! ${{price}}",
"invalid_data": "Невалидни данни",
"invalid_object": "Невалиден обект",
"failed_update": "Неуспешно обновяване",
"sold_furniture": "Продадохте мебел за ${{price}}",
"failed_sell": "Неуспешна продажба",
"gizmo_mode_toggled": "Режимът Gizmo е променен на {{mode}}",
"focused": "Фокусиран",
"unfocused": "Нефокусиран",
"focus_object_not_supported": "Фокусирането не се поддържа в режим с мишка",
"too_far": "Твърде сте далеч от зоната за декорация",
"not_in_garage": "Не сте в гараж",
"invalid_garage": "Невалиден гараж",
"not_support_decoration": "Този гараж не поддържа декорация",
"not_owner": "Вие не сте собственик на гаража",
"not_key_holder": "Нямате ключ за този гараж",
"decoration_not_available": "Декорацията не е налична – някой друг я използва",
"you_cant_select_entity": "Изборът на обекти е забранен, първо отидете в категория „склад“"
},
"furniture_creator": {
"page_title": "Създател на мебели",
"page_description": "Създаване и управление на персонализирани мебели за сървъра",
"select_category": "Избери категория",
"select_category_description": "Изберете категория мебели",
"select_item": "Изберете елемент за редакция",
"select_item_description": "Изберете съществуващ или създайте нов",
"search_placeholder": "Търсене на мебели...",
"statistics": "Статистика",
"categories": "категории",
"total_items": "Елементи",
"dynamic": "Динамични",
"colors": "Цветове",
"items": "елемента",
"no_results": "Няма резултати",
"try_different_search": "Опитайте различно търсене",
"create_item": "Създай мебел",
"edit_item": "Редактирай мебел",
"category": "Категория",
"basic_info": "Основна информация",
"advanced": "Разширени",
"object_name": "Име на обекта",
"label": "Етикет",
"item_description": "Описание",
"price": "Цена",
"color_label": "Етикет на цвета",
"image": "Изображение",
"image_description": "Добавете URL на изображение",
"stash": "Склад",
"stash_description": "Активирай функция за съхранение",
"slots": "Слотове",
"max_weight": "Максимален товар",
"gardrobe": "Гардероб",
"gardrobe_description": "Активирай съхранение на дрехи",
"offset": "Отместване на позицията",
"preview": "Преглед на живо",
"unnamed": "Без име",
"no_description": "Няма описание",
"delete": "Изтрий",
"save": "Запази",
"create": "Създай",
"add": "Добави",
"fill_all_fields": "Попълнете всички задължителни полета",
"object_label_required": "Име на обект и етикет са задължителни",
"color_variations": "Цветови вариации",
"color_variations_description": "Добавете различни цветове",
"add_color": "Добави цвят",
"add_color_description": "Добавете нов цветови вариант",
"edit_color": "Редактирай цвят",
"edit_color_description": "Редактиране на цветовия вариант",
"no_colors": "Все още няма цветови варианти",
"add_first_color": "Кликнете „Добави цвят“ за първия вариант",
"image_url": "URL на изображението",
"image_error": "Неуспешно зареждане на изображението",
"no_image": "Няма изображение",
"image_tips": "Съвети",
"image_tip_1": "Използвайте директни линкове (.png, .jpg и др.)",
"image_tip_2": "Препоръчителен размер: 512x512px или по-голям",
"image_tip_3": "PNG с прозрачност работи най-добре",
"category_manager": "Мениджър на категории",
"category_manager_description": "Създаване и управление на категории",
"add_category": "Добави категория",
"edit_category": "Редактирай категория",
"no_categories": "Все още няма категории",
"category_key": "Ключ на категорията",
"dynamic_icon": "Динамична икона",
"dynamic_description": "Активирай динамично поставяне",
"navigation": "Ред на навигация",
"css_settings": "CSS настройки",
"item_created": "Мебелът е създаден успешно",
"item_create_failed": "Неуспешно създаване",
"item_updated": "Мебелът е обновен успешно",
"item_update_failed": "Неуспешно обновяване",
"item_removed": "Мебелът е изтрит успешно",
"item_remove_failed": "Неуспешно изтриване",
"category_created": "Категорията е създадена успешно",
"cannot_delete_config_item": "Не можете да изтриете конфигурационни елементи, само от базата данни",
"object_is_not_valid": "Името на обекта не е валидно. Съществува ли в играта? {{object}}",
"screenshot_cancelled": "Снимката е отменена",
"screenshot_completed": "Снимката е направена успешно",
"token_not_set": "FiveManage токенът не е зададен. Задайте го в config/fivemanage.lua.",
"uploading_image": "Качване на изображение в FiveManage...",
"image_uploaded": "Изображението е качено успешно",
"object_required": "Обектът е задължителен",
"object_already_in_category": "Обектът {{object}} вече съществува в категория {{category}}."
}
}
@@ -0,0 +1,628 @@
{
"empty_list": "Nebyly nalezeny žádné položky",
"cancel": "Zrušit",
"delete": "Smazat",
"clear": "Vymazat",
"no_garage_slots": "V této garáži není volné místo...",
"no_vehicle_owner": "Nepodporujeme vozidla, která vám nepatří!",
"no_house_nearby": "V okolí není žádný dům",
"buy_garage": "Koupit garáž za: ${{price}}",
"you_are_not_police": "Nejste policista",
"no_vehicle_nearby": "V okolí není žádné vozidlo",
"garage_not_available": "Garáž není dostupná nebo je obsazená, zkuste to znovu...",
"garage_not_found": "Garáž nebyla nalezena",
"garage_not_found_job": "Pracovní garáž nebyla nalezena",
"garage_empty": "Garáž je prázdná",
"cannot_store_vehicle": "Toto vozidlo zde nemůžete uložit!",
"not_driver": "Je zakázáno řídit toto vozidlo",
"vehicle_not_spawned": "Použili jste garáž současně s jiným hráčem. Zkuste to znovu!",
"timeout_expired": "Čas vypršel",
"no_money": "Nemáte dost peněz! ${{price}}",
"not_correct_job": "Nemáte správnou práci",
"not_correct_grade": "Nemáte správnou hodnost",
"not_in_vehicle": "Nejste ve vozidle!",
"job_vehicle_added": "Vozidlo bylo přidáno do pracovní garáže!",
"no_vehicle_data": "Nebyly nalezeny žádné údaje o vozidle",
"you_are_already_in_garage": "Již jste v garáži!",
"sound_enabled": "Zvuk zapnut",
"sound_disabled": "Zvuk vypnut",
"sell_garage": "Peníze získané z prodeje garáže: ${{price}}",
"garage_purchase": "Koupili jste novou garáž za: ${{price}}",
"player_not_found": "Hráč nebyl nalezen",
"transfer_success": "Obdrželi jste vozidlo od jiného hráče, bylo odesláno do: {{garage}}",
"transfer_success_to": "Poslali jste vozidlo jinému hráči, bylo odesláno do: {{garage}}",
"transfer_blacklisted": "Toto vozidlo nelze převést na jiného hráče",
"give_recovery": "Obnovili jste ztracené vozidlo, bylo odesláno do: {{garage}}, bylo vám účtováno celkem: ${{price}}",
"impound_pay": "Vozidlo již není zabaveno, zaplatili jste: ${{price}}",
"missing_type": "Nebyla nalezena garáž pro typ vozidla: {{type}}",
"vehicle_removed": "Vozidlo odstraněno!",
"vehicle_impounded": "Vozidlo úspěšně zabaveno a odesláno do: {{garage}}",
"all_vehicles_impounded": "Všechna vozidla na mapě byla odeslána do zabavení!",
"repair": {
"repaired": "Vozidlo bylo opraveno {{plate}}"
},
"log": {
"save_vehicle": {
"title": "Uložit vozidlo",
"description": "**Hráč:** {{player}} \n**Vozidlo:** {{model}} \n**SPZ:** {{plate}} \n**Garáž:** {{garage}}"
},
"take_vehicle": {
"title": "Vyjet vozidlem",
"description": "**Hráč:** {{player}} \n**Vozidlo:** {{model}} \n**SPZ:** {{plate}}"
},
"recovery_vehicle": {
"title": "Obnova vozidla",
"description": "**Hráč:** {{player}} \n**Vozidlo:** {{model}} \n**SPZ:** {{plate}} \n**Garáž:** {{garage}} \n**Cena:** {{price}}"
},
"give_vehicle": {
"title": "Předat vozidlo",
"description": "**Hráč:** {{player}} \n**Příjemce:** {{receivedPlayer}} \n**Vozidlo:** {{model}} \n**SPZ:** {{plate}} \n**Typ vozidla:** {{vehicleType}}"
},
"impound_vehicle": {
"title": "Zabavit vozidlo",
"description": "**Hráč:** {{player}} \n**Práce:** {{job}} \n**SPZ:** {{plate}} \n**Garáž:** {{garage}}"
}
},
"drawtext": {
"store_vehicle": "[E] - Uložit vozidlo",
"open_garage": "[E] - Otevřít garáž",
"enter_garage": "[E] - Vstoupit do garáže",
"public_garage": "[G] - Vstoupit do veřejné garáže",
"recovery": "[E] - Obnovit ztracené vozidlo (VENKU): ${{price}}",
"back_garage": "[E] - Zpět",
"dynamic": "[E] - Interakce",
"stash": "[E] - Otevřít úložiště",
"gardrobe": "[E] - Otevřít šatník",
"delete_illegal": "[E] - Smazat nelegální předmět",
"exit_point": "[E] - Bod výstupu",
"entry_point": "[E] - Bod vstupu",
"board_point": "[E] - Bod nástupu",
"shell_point": "[E] - Bod skořápky",
"house_point": "[E] - Bod domu"
},
"management": {
"no_garage_nearby": "V okolí není žádná garáž",
"no_garage_owner": "Nejste vlastníkem této garáže",
"garage_price": "Cena garáže: ${{price}}",
"garage_sell_tax": "Daň z prodeje garáže: {{tax}}%",
"garage_sell_tax_description": "Cena garáže bude vynásobena procentem daně",
"no_player": "V okolí není žádný hráč",
"not_relate_state": "Tento příkaz je určen pouze pro realitní makléře"
},
"keyholders": {
"empty_list": "Nebyli nalezeni žádní držitelé klíčů",
"empty_out": "Na ulici nejsou žádná vozidla k obnovení!",
"took_keys": "Vzali jste klíče",
"already_keys": "Tento hráč již má klíče k této garáži",
"gave_keys": "Předali jste klíče od {{garage}} hráči {{player}}",
"received_keys": "Obdrželi jste klíče od {{garage}}"
},
"give_vehicle": {
"info": "Vozidlo: {{model}} s SPZ: {{plate}} bylo předáno hráči: {{player}}",
"invalid_type": "Ujistěte se, že používáte správný příkaz pro toto vozidlo",
"invalid_model": "Vybraný model neexistuje...",
"no_player_online": "Vybraný hráč není online...",
"plate_in_use": "Tato SPZ je již použita na jiném vozidle",
"give_info": "Vozidlo: {{model}} s SPZ: {{plate}} bylo předáno hráči: {{player}}"
},
"creator": {
"title": "Tvůrce garáží",
"description": "Zde můžete spravovat garáže.",
"complete_creator": "Před dalším otevřením musíte tvůrce dokončit",
"garage_created": "Garáž úspěšně vytvořena",
"garage_updated": "Garáž úspěšně aktualizována",
"select_menu": "Vyberte umístění menu",
"select_zone": "Vyberte bod uvnitř zóny",
"select_positions": "Vyberte alespoň 3 body...",
"menu_location": "Místo vstupu",
"spawn_location": "Místo spawnování",
"create_guide": "Stiskněte ~INPUT_CELLPHONE_RIGHT~ pro otočení doprava \nStiskněte ~INPUT_CELLPHONE_LEFT~ pro otočení doleva",
"polyzone_nearby": "Bod není v zóně",
"available_slots": "{{name}}, volná místa: {{slots}}",
"teleported_to_garage": "Teleportován do {{garage}}",
"select_garage": "Vybrat garáž",
"select_garage_description": "Vyberte garáž, kterou chcete vytvořit",
"fill_all_fields": "Vyplňte prosím všechna pole",
"shell_selector": {
"title": "Interiér garáže",
"description": "Vyberte interiérovou skořepinu pro vaši garáž",
"select": "Vybrat interiér",
"selected": "Vybráno",
"vehicle_slots": "místa pro vozidla",
"change": "Změnit",
"no_shell_selected": "Není vybrán žádný interiér",
"select_shell": "Vybrat interiér garáže",
"quick_select": "Rychlý výběr",
"view_all": "Zobrazit vše",
"all_shells": "Všechny dostupné interiéry",
"help_text": "Pomocí šipek doleva/doprava procházejte interiéry. Enter pro potvrzení, Backspace pro zrušení.",
"no_shells_available": "Nejsou dostupné žádné skořepiny. Přidejte je do Config.Shells"
},
"price": {
"title": "Koupní cena",
"description": "Nastavte cenu, kterou hráči zaplatí za tuto garáž"
},
"store_price": {
"enable": "Povolit poplatek za uložení vozidla",
"description": "Nastavte poplatek za uložení vozidel v této garáži"
},
"garage_type_selector": {
"title": "Typ garáže",
"vehicle": "Auto",
"vehicle_description": "Garáž pro auta",
"plane": "Letadlo",
"plane_description": "Garáž pro letadla",
"boat": "Loď",
"boat_description": "Garáž pro lodě"
},
"left_panel": {
"search_garages_placeholder": "Hledat garáže...",
"create_garage": "Vytvořit garáž",
"filters": "Filtry",
"results": "{{count}} výsledek{{plural}}",
"all_garages": "Vše",
"vehicle": "Auto",
"plane": "Letadlo",
"boat": "Loď",
"teleport_to_garage": "Teleport do garáže",
"teleport": "Teleport",
"garage_type": "Typ garáže",
"public": "Veřejná",
"private": "Soukromá",
"impound": "Zabavení",
"no_garages_found": "Nebyly nalezeny žádné garáže",
"no_garages_available": "Nejsou dostupné žádné garáže",
"try_adjusting_search": "Zkuste upravit kritéria vyhledávání nebo vytvořit novou garáž",
"create_first_garage_description": "Vytvořte svou první garáž a začněte se systémem správy garáží",
"status": "Stav"
},
"garage_access_selector": {
"title": "Přístup do garáže",
"public": "Veřejná",
"public_description": "Garáž bude přístupná všem",
"private": "Soukromá",
"private_description": "Garáž bude přístupná pouze vlastníkovi",
"impound": "Zabavení",
"impound_description": "Garáž bude přístupná pouze pro zabavená vozidla"
},
"interior_type_selector": {
"title": "Typ interiéru",
"ipl": "IPL",
"ipl_description": "Použít IPL (Interior Prop List) pro interiér",
"shell": "Skořepina",
"shell_description": "Použít skořepinu pro vlastní interiér"
},
"form": {
"create_garage": "Vytvořit garáž",
"edit_garage": "Upravit garáž {{name}}",
"garage_type": "Typ garáže",
"select": "Vybrat",
"remove": "Odstranit",
"save": "Uložit",
"no_location_selected": "Není vybráno umístění",
"no_location_selected_description": "Klikněte na „Vybrat“ pro výběr umístění",
"location_required": "{{label}} je povinné",
"location": {
"title": "Nastavení umístění",
"zone_points": "Body zóny",
"zone_points_description": "Definujte oblast garáže",
"menu_coords": "Souřadnice menu",
"spawn_coords": "Souřadnice spawnování"
},
"access_control": {
"title": "Řízení přístupu",
"jobs_section": "Práce",
"gangs_section": "Gangy",
"select_job": "Vyberte práci k přidání",
"select_gang": "Vyberte gang k přidání",
"job": "Práce",
"gang": "Gang",
"grades": "Hodnosti",
"empty_list": "Nejsou dostupné žádné položky",
"no_jobs_added": "Zatím nebyly přidány žádné práce. Přidejte je pro omezení přístupu.",
"no_gangs_added": "Zatím nebyly přidány žádné gangy. Přidejte je pro omezení přístupu.",
"info": "Přidejte více prací a gangů s konkrétními hodnostmi pro kontrolu přístupu. Pokud nic nepřidáte, garáž bude přístupná všem."
}
},
"remove": {
"title": "Smazat garáž",
"description": "Opravdu chcete tuto garáž smazat?",
"confirm": "Smazat"
},
"cancel": {
"title": "Zrušit vytváření garáže",
"description": "Opravdu chcete zrušit vytváření garáže?",
"confirm": "Potvrdit"
},
"raycast": {
"info": "Ujistěte se, že vybíráte celou oblast garáže. Jinak může dojít k problémům.",
"done": "Hotovo",
"add_point": "Přidat bod",
"rotate_z": "Otočit směr +/-",
"rotate_z_scroll": "Otočit směr +/-",
"increase_z": "Hranice Z +/-",
"completed": "Dokončili jste všechny body",
"selected_point": "Vybrali jste {{count}} bodů",
"no_point_selected": "Nevybrali jste žádný bod",
"point_size": "Velikost bodu +/-",
"select_entity": "Vybrat entitu",
"not_valid_entity": "Nevybíráte platnou entitu. Vyberte prosím {{entityType}}",
"selected_entity": "Vybrali jste {{count}} entit",
"entity_disabled": "Tuto entitu nelze vybrat",
"select_entity_info": "Vyberte prosím {{entityType}}",
"model_is_not_valid": "Model {{model}} není platný",
"must_be_completed": "Před otevřením tvůrce musíte dokončit raycast",
"not_in_points": "Vybraný bod není v oblasti garáže",
"point_in_another_zone": "Vybraný bod je v jiné zóně.",
"press_enter_to_select": "Stiskněte Enter pro výběr",
"undo": "Zpět"
}
},
"blip": {
"impound": "Zabaveno",
"garage": "Garáž na prodej",
"plane": "Hangár na prodej",
"boat": "Přístav na prodej"
},
"menu": {
"vehicle_loading": "Načítání",
"vehicle_loading_subtitle": "Příprava vozidla...",
"preview_mode_active": "Režim náhledu aktivní",
"preview_mode_subtitle": "Otáčení myší • F9 pro ukončení",
"empty_garage": "Prázdná garáž",
"empty_garage_description": "V této garáži není žádné vozidlo. Použijte „Přivést vozidlo“",
"take_vehicle_out": "Vyjet vozidlem",
"take_vehicle_out_description": "Opravdu chcete toto vozidlo vyjet?",
"take_vehicle_out_price": "Bude vám účtováno {{price}}",
"take_vehicle_out_free": "Toto vozidlo můžete vyjet zdarma",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"power": "Výkon",
"acceleration": "Zrychlení",
"traction": "Přilnavost",
"brakes": "Brzdy",
"no_vehicle_selected": "Není vybráno žádné vozidlo",
"header": {
"favorite_button": "Oblíbené",
"total_vehicles": "Celkem vozidel",
"balance": "Zůstatek: {{balance}}",
"balance_title": "Zůstatek",
"balance_badge": "$",
"set_star": "Přidat hvězdičku",
"set_tag": "Nastavit štítek",
"send_vehicle": "Poslat vozidlo",
"transfer_vehicle": "Převést vozidlo",
"bring_vehicle": "Přivést vozidlo",
"vehicle_transfer_success": "Vozidlo převedeno do {{garage}}",
"money_not_enough": "Nemáte dost peněz na převod vozidla {{price}}",
"vehicle_transfer_player_success": "Vozidlo {{plate}} převedeno hráči {{player}}",
"no_slot_available": "V garáži není volné místo",
"vehicle_brought": "Vozidlo {{vehicle}} přivezeno",
"marked_as_favorite": "Označeno jako oblíbené",
"unmarked_as_favorite": "Odebráno z oblíbených"
},
"empty": {
"title": "Seznam je prázdný",
"description": "Nebyly nalezeny žádné položky",
"search_title": "Nebyly nalezeny žádné výsledky",
"search_description": "pro váš dotaz „{{searchQuery}}“ není žádný výsledek",
"search_helper": "Zkuste jiný výraz",
"empty_helper": "Zkuste to později"
},
"footer": {
"previous_vehicle": "Předchozí vozidlo",
"previous_vehicle_description": "Šipka doleva pro předchozí vozidlo",
"next_vehicle": "Další vozidlo",
"next_vehicle_description": "Šipka doprava pro další vozidlo",
"preview_mode": "Režim náhledu",
"preview_mode_description": "3D prohlídka vozidla",
"music_mode": "Hudební režim",
"music_mode_description": "Zapnout/vypnout hudbu",
"exit_garage": "Opustit garáž",
"exit_garage_description": "ESC pro opuštění garáže"
},
"out_vehicles_modal": {
"title": "Vozidla venku",
"description": "Vyberte vozidlo, které chcete přivést",
"search_placeholder": "Hledat vozidlo podle názvu nebo značky",
"search_helper": "Zkuste jiný výraz",
"empty_helper": "Zkuste to později",
"list_title": "Seznam vozidel",
"list_description": "Nalezeno {{count}} vozidlo",
"list_helper": "Zkuste jiný výraz",
"list_empty_helper": "Zkuste to později",
"cancel": "Zrušit",
"bring_vehicle": "Přivést vozidlo",
"loading": "Načítání vozidel...",
"loading_helper": "Čekejte prosím",
"selected": "Vybráno"
},
"player_list_modal": {
"title": "Seznam hráčů",
"description": "Vyberte hráče, kterému chcete vozidlo převést",
"search_placeholder": "Hledat hráče podle jména",
"search_helper": "Zkuste jiný výraz",
"empty_helper": "Zkuste to později",
"list_title": "Seznam hráčů",
"list_description": "Nalezeno {{count}} hráč",
"list_helper": "Zkuste jiný výraz",
"list_empty_helper": "Zkuste to později",
"cancel": "Zrušit",
"transfer_vehicle": "Převést vozidlo",
"loading": "Načítání hráčů...",
"loading_helper": "Čekejte prosím",
"selected": "Vybráno"
},
"loading": {
"title": "Načítání",
"description": "Čekejte prosím",
"helper": "Čekejte prosím"
},
"send_vehicle_modal": {
"title": "Poslat vozidlo",
"description": "Vyberte garáž, do které chcete vozidlo poslat",
"search_placeholder": "Hledat garáž podle názvu",
"search_helper": "Zkuste jiný výraz",
"empty_helper": "Zkuste to později",
"list_title": "Seznam garáží",
"list_description": "Nalezeno {{count}} garáž",
"list_helper": "Zkuste jiný výraz",
"list_empty_helper": "Zkuste to později",
"cancel": "Zrušit",
"send_vehicle": "Poslat vozidlo",
"loading": "Načítání garáží...",
"loading_helper": "Čekejte prosím",
"selected": "Vybráno",
"garage_description": "Vozidlo bude odesláno do vybrané garáže"
},
"tag_modal": {
"title": "Štítek",
"description": "Nastavit štítek pro vozidlo {{name}}",
"current_tag": "Aktuální štítek",
"new_tag": "Nový štítek",
"new_tag_placeholder": "Zadejte nový štítek",
"popular_tags": "Oblíbené štítky",
"save": "Uložit",
"cancel": "Zrušit",
"notification": "Štítek byl aktualizován! Nový štítek: {{tag}}"
},
"impound_info": {
"title": "Informace o zabavení",
"description": "Informace o zabavení",
"current_tag": "Aktuální štítek",
"new_tag": "Nový štítek",
"new_tag_placeholder": "Zadejte nový štítek",
"time_left": "Zbývající čas",
"price": "Cena",
"garage": "Garáž",
"pay_fine": "Zaplatit pokutu",
"pay_fine_description": "Stačí zaplatit pokutu a vozidlo bude uvolněno",
"pay_fine_button": "Zaplatit pokutu",
"pay_fine_button_description": "Musíte počkat, až uplyne čas, než budete moci zaplatit",
"yes": "Ano",
"no": "Ne",
"note": "Poznámka"
},
"impound_modal": {
"title": "Zabavení",
"description": "Zabavit vozidlo",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"impound_garage": "Garáž pro zabavená vozidla",
"impound_time": "Doba zabavení",
"pay_to_release": "Zaplatit za uvolnění",
"pay_to_release_description": "Pokud nastavíte ano, hráč může zaplatit pokutu a uvolnit vozidlo bez čekání",
"impound_fee": "Poplatek za zabavení",
"note": "Poznámka",
"note_placeholder": "Zadejte poznámku",
"summary": "Shrnutí",
"selected_garage": "Vybraná garáž",
"select_garage": "Vybrat garáž",
"time": "Čas",
"fee": "Poplatek",
"send_to_impound": "Odeslat do zabavení",
"yes": "Ano",
"no": "Ne",
"error": {
"select_garage": "Vyberte prosím garáž",
"select_time": "Vyberte prosím čas",
"submit": "Při odesílání vozidla do zabavení došlo k chybě"
},
"not_selected": "Nevybráno",
"minutes": "Minut",
"seconds": "Sekund"
},
"info_card": {
"engine_health": "Stav motoru",
"body_health": "Stav karoserie",
"fuel_level": "Stav paliva",
"brakes": "Brzdy",
"acceleration": "Zrychlení",
"top_speed": "Maximální rychlost",
"traction": "Přilnavost",
"close": "Zavřít"
}
},
"decorate_ui": {
"price": "${{price}}",
"clear": "Vymazat",
"items_found": "Nalezeno {{count}} položek",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"item_list": {
"stash": "Úložiště",
"gardrobe": "Šatník",
"empty": {
"title": "Není vybrána žádná položka",
"description": "Vyberte kategorii položek pro dekoraci. Můžete začít výběrem typu položky z levého menu.",
"helper": "Vyberte kategorii položek z levého menu",
"search_title": "Nebyly nalezeny žádné výsledky",
"search_description": "Pro váš dotaz „{{searchQuery}}“ neexistuje žádný výsledek",
"search_helper": "Zkuste jiný výraz"
}
},
"header": {
"search_placeholder": "Hledat nábytek"
},
"help": {
"title": "Ovládání a nápověda",
"description": "Všechny ovládací prvky používané v režimu dekorace",
"mouse_control": "Ovládání myší",
"mouse_control_description": "Pohyb nábytku myší",
"keyboard_control": "Klávesnice",
"f5_description": "Skrýt/zobrazit kurzor",
"f6_description": "Zapnout/vypnout volný pohyb kamery",
"wasd_description": "Pohyb nábytku klávesami",
"esc_description": "Opustit menu dekorace bez uložení",
"important_tips": "Důležité tipy",
"important_tips_description": "Některý nábytek obsahuje možnosti <typeColor>typu a barvy</typeColor> a může mít funkce <storageWardrobe>úložiště nebo šatník</storageWardrobe>."
},
"furniture_info": {
"select_color": "Vybrat barvu",
"edit_mode": "Režim úprav",
"translate": "Posunout",
"rotate": "Otočit"
},
"buy": {
"price_info": "Informace o ceně",
"selected_color": "Vybraná barva",
"price": "Cena",
"buy": "Koupit - ${{price}}",
"title": "Opravdu chcete koupit tuto položku?",
"description": "Po zakoupení obdržíte ${{price}}"
},
"categories": {
"dynamic": "Dynamické",
"objects": "Objekty",
"stash": "Úložiště"
},
"stash": {
"no_selected_item": "Není vybrána žádná položka",
"no_selected_item_description": "Vyberte položku ze seznamu vpravo pro zobrazení detailů. Zde se zobrazí všechny vaše dekorace.",
"in_stash": "V úložišti",
"not_in_stash": "Není v úložišti",
"furniture_management": "Správa nábytku",
"put_in_stash": "Vložit do úložiště",
"put_in_stash_description": "Vložit položku do úložiště",
"remove_from_stash": "Vybrat z úložiště",
"remove_from_stash_description": "Vybrat položku z úložiště",
"sell": "Prodat nábytek",
"sell_description": "Prodat položku za ${{price}}",
"are_sure_sell": "Opravdu chcete prodat tuto položku?",
"are_sure_sell_description": "Po prodeji obdržíte ${{price}}",
"save_location": "Uložit pozici",
"save_location_description": "Uložit položku na tuto pozici",
"save": "Uložit"
},
"objects": {
"selected_categories": "Vybráno: {{count}} kategorií",
"search_category": "Hledat kategorii"
}
},
"decorate": {
"no_money": "Nemáte dost peněz! ${{price}}",
"invalid_data": "Neplatná data",
"invalid_object": "Neplatný objekt",
"failed_update": "Aktualizace selhala",
"sold_furniture": "Prodali jste nábytek za ${{price}}",
"failed_sell": "Prodej selhal",
"gizmo_mode_toggled": "Režim Gizmo přepnut na {{mode}}",
"focused": "Zaostřeno",
"unfocused": "Odostřeno",
"focus_object_not_supported": "Zaostření objektu není podporováno v režimu dekorace myší",
"too_far": "Jste příliš daleko od oblasti dekorace",
"not_in_garage": "Nejste v garáži",
"invalid_garage": "Neplatná garáž",
"not_support_decoration": "Tato garáž nepodporuje dekorace",
"not_owner": "Nejste vlastníkem této garáže",
"not_key_holder": "Nemáte klíče od této garáže",
"decoration_not_available": "Dekorace není dostupná, někdo ji právě používá",
"you_cant_select_entity": "Výběr entit je zakázán, nejprve přejděte do kategorie „úložiště“"
},
"furniture_creator": {
"page_title": "Tvůrce nábytku",
"page_description": "Vytvářejte a spravujte vlastní nábytek pro váš server",
"select_category": "Vyberte kategorii",
"select_category_description": "Vyberte kategorii nábytku pro správu položek",
"select_item": "Vyberte položku k úpravě",
"select_item_description": "Vyberte existující položku nebo vytvořte novou",
"search_placeholder": "Hledat nábytek...",
"statistics": "Statistiky",
"categories": "kategorie",
"total_items": "Položky",
"dynamic": "Dynamické",
"colors": "Barvy",
"items": "položek",
"no_results": "Nebyly nalezeny žádné výsledky",
"try_different_search": "Zkuste upravit vyhledávací dotaz",
"create_item": "Vytvořit položku nábytku",
"edit_item": "Upravit položku nábytku",
"category": "Kategorie",
"basic_info": "Základní informace",
"advanced": "Pokročilé",
"object_name": "Název objektu",
"label": "Označení",
"item_description": "Popis",
"price": "Cena",
"color_label": "Označení barvy",
"image": "Obrázek",
"image_description": "Zadejte URL obrázku pro tuto položku",
"stash": "Úložiště",
"stash_description": "Povolit funkci úložiště",
"slots": "Sloty",
"max_weight": "Maximální váha",
"gardrobe": "Šatník",
"gardrobe_description": "Povolit úložiště oblečení",
"offset": "Posun pozice",
"preview": "Živý náhled",
"unnamed": "Nepojmenovaná položka",
"no_description": "Bez popisu",
"delete": "Smazat",
"save": "Uložit",
"create": "Vytvořit",
"add": "Přidat",
"fill_all_fields": "Vyplňte prosím všechna povinná pole",
"object_label_required": "Název objektu a označení jsou povinné",
"color_variations": "Barevné varianty",
"color_variations_description": "Přidejte různé barevné varianty této položky",
"add_color": "Přidat barvu",
"add_color_description": "Přidat novou barevnou variantu",
"edit_color": "Upravit barevnou variantu",
"edit_color_description": "Upravit barevnou variantu položky",
"no_colors": "Zatím žádné barevné varianty",
"add_first_color": "Klikněte na Přidat barvu pro vytvoření první varianty",
"image_url": "URL obrázku",
"image_error": "Načtení obrázku selhalo",
"no_image": "Žádný obrázek",
"image_tips": "Tipy",
"image_tip_1": "Používejte přímé odkazy na obrázky (.png, .jpg atd.)",
"image_tip_2": "Doporučená velikost: 512×512 px nebo větší",
"image_tip_3": "PNG s průhledností funguje nejlépe",
"category_manager": "Správce kategorií",
"category_manager_description": "Vytvářejte a spravujte kategorie nábytku",
"add_category": "Přidat kategorii",
"edit_category": "Upravit kategorii",
"no_categories": "Zatím žádné kategorie",
"category_key": "Klíč kategorie",
"dynamic_icon": "Dynamická ikona",
"dynamic_description": "Povolit dynamické umístění",
"navigation": "Pořadí navigace",
"css_settings": "Nastavení CSS",
"item_created": "Položka nábytku úspěšně vytvořena",
"item_create_failed": "Vytvoření položky nábytku selhalo",
"item_updated": "Položka nábytku úspěšně aktualizována",
"item_update_failed": "Aktualizace položky nábytku selhala",
"item_removed": "Položka nábytku úspěšně odstraněna",
"item_remove_failed": "Odstranění položky nábytku selhalo",
"category_created": "Kategorie nábytku úspěšně vytvořena",
"cannot_delete_config_item": "Nelze mazat položky z konfigurace, pouze z databáze",
"object_is_not_valid": "Název objektu není platný, je opravdu ve hře? {{object}}",
"screenshot_cancelled": "Snímek obrazovky zrušen",
"screenshot_completed": "Snímek obrazovky úspěšně dokončen",
"token_not_set": "Token FiveManage není nastaven. Nastavte jej v config/fivemanage.lua.",
"uploading_image": "Nahrávání obrázku na FiveManage...",
"image_uploaded": "Obrázek úspěšně nahrán na FiveManage",
"object_required": "Objekt je povinný",
"object_already_in_category": "Objekt {{object}} již existuje v kategorii {{category}}."
}
}
@@ -0,0 +1,628 @@
{
"empty_list": "Ingen genstande fundet",
"cancel": "Annuller",
"delete": "Slet",
"clear": "Ryd",
"no_garage_slots": "Der er ingen ledig plads i denne garage...",
"no_vehicle_owner": "Vi understøtter ikke køretøjer, der ikke tilhører dig!",
"no_house_nearby": "Ingen hus i nærheden",
"buy_garage": "Køb garage for: ${{price}}",
"you_are_not_police": "Du er ikke politibetjent",
"no_vehicle_nearby": "Intet køretøj i nærheden",
"garage_not_available": "Garagen er ikke tilgængelig eller optaget, prøv igen...",
"garage_not_found": "Garagen blev ikke fundet",
"garage_not_found_job": "Jobgarage blev ikke fundet",
"garage_empty": "Garagen er tom",
"cannot_store_vehicle": "Du kan ikke opbevare dette køretøj her!",
"not_driver": "Det er forbudt at køre køretøjet",
"vehicle_not_spawned": "Du brugte garagen samtidig med en anden spiller. Prøv igen!",
"timeout_expired": "Tidsfristen udløb",
"no_money": "Du har ikke penge nok! ${{price}}",
"not_correct_job": "Du har ikke det rigtige job",
"not_correct_grade": "Du har ikke den rigtige rang",
"not_in_vehicle": "Du sidder ikke i et køretøj!",
"job_vehicle_added": "Køretøj tilføjet til jobgarage!",
"no_vehicle_data": "Ingen køretøjsdata fundet",
"you_are_already_in_garage": "Du er allerede i en garage!",
"sound_enabled": "Lyd aktiveret",
"sound_disabled": "Lyd deaktiveret",
"sell_garage": "Penge modtaget for salg af garage: ${{price}}",
"garage_purchase": "Du har købt en ny garage for: ${{price}}",
"player_not_found": "Spiller ikke fundet",
"transfer_success": "Du har modtaget et køretøj fra en anden spiller, det blev sendt til: {{garage}}",
"transfer_success_to": "Du sendte et køretøj til en anden spiller, det blev sendt til: {{garage}}",
"transfer_blacklisted": "Dette køretøj kan ikke overføres til en anden spiller",
"give_recovery": "Du har genfundet et tabt køretøj, det blev sendt til: {{garage}}, du blev opkrævet i alt: ${{price}}",
"impound_pay": "Køretøjet er ikke længere beslaglagt, du betalte: ${{price}}",
"missing_type": "Ingen garage fundet til køretøjstypen: {{type}}",
"vehicle_removed": "Køretøj fjernet!",
"vehicle_impounded": "Køretøj beslaglagt og sendt til: {{garage}}",
"all_vehicles_impounded": "Alle køretøjer på kortet blev sendt til beslaglæggelse!",
"repair": {
"repaired": "Køretøjet blev repareret {{plate}}"
},
"log": {
"save_vehicle": {
"title": "Gem køretøj",
"description": "**Spiller:** {{player}} \n**Køretøj:** {{model}} \n**Nummerplade:** {{plate}} \n**Garage:** {{garage}}"
},
"take_vehicle": {
"title": "Tag køretøj ud",
"description": "**Spiller:** {{player}} \n**Køretøj:** {{model}} \n**Nummerplade:** {{plate}}"
},
"recovery_vehicle": {
"title": "Genfinding af køretøj",
"description": "**Spiller:** {{player}} \n**Køretøj:** {{model}} \n**Nummerplade:** {{plate}} \n**Garage:** {{garage}} \n**Pris:** {{price}}"
},
"give_vehicle": {
"title": "Giv køretøj",
"description": "**Spiller:** {{player}} \n**Modtager:** {{receivedPlayer}} \n**Køretøj:** {{model}} \n**Nummerplade:** {{plate}} \n**Køretøjstype:** {{vehicleType}}"
},
"impound_vehicle": {
"title": "Beslaglæg køretøj",
"description": "**Spiller:** {{player}} \n**Job:** {{job}} \n**Nummerplade:** {{plate}} \n**Garage:** {{garage}}"
}
},
"drawtext": {
"store_vehicle": "[E] - Opbevar køretøj",
"open_garage": "[E] - Åbn garage",
"enter_garage": "[E] - Gå ind i garage",
"public_garage": "[G] - Gå ind i offentlig garage",
"recovery": "[E] - Genfind tabt køretøj (UDENFOR): ${{price}}",
"back_garage": "[E] - Tilbage",
"dynamic": "[E] - Interager",
"stash": "[E] - Åbn stash",
"gardrobe": "[E] - Åbn garderobe",
"delete_illegal": "[E] - Slet ulovlig genstand",
"exit_point": "[E] - Udgangspunkt",
"entry_point": "[E] - Indgangspunkt",
"board_point": "[E] - Board-punkt",
"shell_point": "[E] - Shell-punkt",
"house_point": "[E] - Huspunkt"
},
"management": {
"no_garage_nearby": "Ingen garage i nærheden",
"no_garage_owner": "Du er ikke ejer af denne garage",
"garage_price": "Garagepris: ${{price}}",
"garage_sell_tax": "Salgsafgift på garage: {{tax}}%",
"garage_sell_tax_description": "Garageprisen bliver ganget med afgiftsprocenten",
"no_player": "Ingen spiller i nærheden",
"not_relate_state": "Denne kommando er kun for ejendomsmæglere"
},
"keyholders": {
"empty_list": "Ingen nøgleholdere fundet",
"empty_out": "Der er ingen biler på gaden, du kan genfinde!",
"took_keys": "Du tog nøglerne",
"already_keys": "Denne spiller har allerede nøgler til garagen",
"gave_keys": "Du gav nøglerne til {{garage}} til {{player}}",
"received_keys": "Modtog nøgler til {{garage}}"
},
"give_vehicle": {
"info": "Køretøjet: {{model}} med nummerplade: {{plate}} blev overdraget til spilleren: {{player}}",
"invalid_type": "Sørg for at bruge den rigtige kommando til dette køretøj",
"invalid_model": "Den valgte model findes ikke...",
"no_player_online": "Den valgte spiller er ikke online...",
"plate_in_use": "Denne nummerplade bruges allerede på et andet køretøj",
"give_info": "Køretøjet: {{model}} med nummerplade: {{plate}} blev overdraget til spilleren: {{player}}"
},
"creator": {
"title": "Garage-opretter",
"description": "Her kan du administrere garager.",
"complete_creator": "Du skal fuldføre opretteren, før du åbner den igen",
"garage_created": "Garage oprettet succesfuldt",
"garage_updated": "Garage opdateret succesfuldt",
"select_menu": "Vælg menuposition",
"select_zone": "Vælg et punkt inden for zonen",
"select_positions": "Vælg mindst 3 punkter...",
"menu_location": "Indgangsplacering",
"spawn_location": "Spawnplacering",
"create_guide": "Tryk ~INPUT_CELLPHONE_RIGHT~ for at dreje køretøjet til højre \nTryk ~INPUT_CELLPHONE_LEFT~ for at dreje til venstre",
"polyzone_nearby": "Punktet er ikke i zonen",
"available_slots": "{{name}}, ledige pladser: {{slots}}",
"teleported_to_garage": "Teleporteret til {{garage}}",
"select_garage": "Vælg garage",
"select_garage_description": "Vælg den garage, du vil oprette",
"fill_all_fields": "Udfyld venligst alle felter",
"shell_selector": {
"title": "Garage-interiør",
"description": "Vælg interiør-skal til din garage",
"select": "Vælg interiør",
"selected": "Valgt",
"vehicle_slots": "køretøjspladser",
"change": "Skift",
"no_shell_selected": "Intet interiør valgt",
"select_shell": "Vælg garage-interiør",
"quick_select": "Hurtigvalg",
"view_all": "Vis alle",
"all_shells": "Alle tilgængelige interiører",
"help_text": "Brug venstre/højre piletaster til at bladre. Tryk Enter for at bekræfte eller Backspace for at annullere.",
"no_shells_available": "Ingen skal tilgængelig. Tilføj en skal i Config.Shells"
},
"price": {
"title": "Købspris",
"description": "Angiv prisen spillere skal betale for at købe denne garage"
},
"store_price": {
"enable": "Aktivér opbevaringsgebyr",
"description": "Angiv et gebyr spillere skal betale for at opbevare deres køretøjer i denne garage"
},
"garage_type_selector": {
"title": "Garagetype",
"vehicle": "Køretøj",
"vehicle_description": "Garage til køretøjer",
"plane": "Fly",
"plane_description": "Garage til fly",
"boat": "Båd",
"boat_description": "Garage til både"
},
"left_panel": {
"search_garages_placeholder": "Søg garager...",
"create_garage": "Opret garage",
"filters": "Filtre",
"results": "{{count}} resultat{{plural}}",
"all_garages": "Alle",
"vehicle": "Køretøj",
"plane": "Fly",
"boat": "Båd",
"teleport_to_garage": "Teleport til garage",
"teleport": "Teleport",
"garage_type": "Garagetype",
"public": "Offentlig",
"private": "Privat",
"impound": "Beslaglæggelse",
"no_garages_found": "Ingen garager fundet",
"no_garages_available": "Ingen garager tilgængelige",
"try_adjusting_search": "Prøv at justere dine søgekriterier eller opret en ny garage",
"create_first_garage_description": "Opret din første garage for at komme i gang med garagesystemet",
"status": "Status"
},
"garage_access_selector": {
"title": "Garageadgang",
"public": "Offentlig",
"public_description": "Garagen vil være tilgængelig for alle",
"private": "Privat",
"private_description": "Garagen vil kun være tilgængelig for ejeren",
"impound": "Beslaglæggelse",
"impound_description": "Garagen vil kun være tilgængelig for beslaglagte køretøjer"
},
"interior_type_selector": {
"title": "Interiørtype",
"ipl": "IPL",
"ipl_description": "Brug IPL (Interior Prop List) til interiør",
"shell": "Skal",
"shell_description": "Brug skal til tilpasset interiør"
},
"form": {
"create_garage": "Opret garage",
"edit_garage": "Rediger garage {{name}}",
"garage_type": "Garagetype",
"select": "Vælg",
"remove": "Fjern",
"save": "Gem",
"no_location_selected": "Ingen placering valgt",
"no_location_selected_description": "Klik på 'Vælg' for at vælge en placering",
"location_required": "{{label}} er påkrævet",
"location": {
"title": "Placeringindstillinger",
"zone_points": "Zonepunkter",
"zone_points_description": "Definér garageområdet",
"menu_coords": "Menukoordinater",
"spawn_coords": "Spawnkoordinater"
},
"access_control": {
"title": "Adgangskontrol",
"jobs_section": "Jobs",
"gangs_section": "Bander",
"select_job": "Vælg et job at tilføje",
"select_gang": "Vælg en bande at tilføje",
"job": "Job",
"gang": "Bande",
"grades": "Rang",
"empty_list": "Ingen genstande tilgængelige",
"no_jobs_added": "Ingen jobs tilføjet endnu. Tilføj jobs for at begrænse adgang.",
"no_gangs_added": "Ingen bander tilføjet endnu. Tilføj bander for at begrænse adgang.",
"info": "Tilføj flere jobs og bander med specifikke rang for at kontrollere, hvem der kan få adgang til garagen. Hvis intet tilføjes, er garagen åben for alle."
}
},
"remove": {
"title": "Slet garage",
"description": "Er du sikker på, at du vil slette denne garage?",
"confirm": "Slet"
},
"cancel": {
"title": "Annuller garageoprettelse",
"description": "Er du sikker på, at du vil annullere oprettelsen?",
"confirm": "Bekræft"
},
"raycast": {
"info": "Sørg for at vælge hele garageområdet. Ellers kan der opstå problemer.",
"done": "Færdig",
"add_point": "Tilføj punkt",
"rotate_z": "Rotér retning +/-",
"rotate_z_scroll": "Rotér retning +/-",
"increase_z": "Z-grænse +/-",
"completed": "Du har fuldført alle punkter",
"selected_point": "Du har valgt {{count}} punkter",
"no_point_selected": "Du har ikke valgt noget punkt",
"point_size": "Punktstørrelse +/-",
"select_entity": "Vælg objekt",
"not_valid_entity": "Du vælger ikke et gyldigt objekt. Vælg venligst en {{entityType}}",
"selected_entity": "Du har valgt {{count}} objekter",
"entity_disabled": "Du kan ikke vælge dette objekt",
"select_entity_info": "Vælg venligst en {{entityType}}",
"model_is_not_valid": "Model {{model}} er ikke gyldig",
"must_be_completed": "Du skal fuldføre raycast før du åbner opretteren",
"not_in_points": "Det valgte punkt er ikke i garageområdet",
"point_in_another_zone": "Det valgte punkt er i en anden zone.",
"press_enter_to_select": "Tryk Enter for at vælge",
"undo": "Fortryd"
}
},
"blip": {
"impound": "Beslaglagt",
"garage": "Garage til salg",
"plane": "Hangar til salg",
"boat": "Havneplads til salg"
},
"menu": {
"vehicle_loading": "Indlæser",
"vehicle_loading_subtitle": "Forbereder køretøj...",
"preview_mode_active": "Forhåndsvisning aktiv",
"preview_mode_subtitle": "Rotér med mus • Tryk F9 for at afslutte",
"empty_garage": "Tom garage",
"empty_garage_description": "Der er ingen køretøjer i denne garage. Brug `Hent køretøj` for at få et",
"take_vehicle_out": "Tag køretøj ud",
"take_vehicle_out_description": "Er du sikker på, at du vil tage dette køretøj ud?",
"take_vehicle_out_price": "Du vil blive opkrævet {{price}}",
"take_vehicle_out_free": "Du kan tage dette køretøj ud gratis",
"cancel": "Annuller",
"confirm": "Bekræft",
"power": "Ydelse",
"acceleration": "Acceleration",
"traction": "Traktion",
"brakes": "Bremser",
"no_vehicle_selected": "Intet køretøj valgt",
"header": {
"favorite_button": "Favorit",
"total_vehicles": "Totale køretøjer",
"balance": "Saldo: {{balance}}",
"balance_title": "Saldo",
"balance_badge": "$",
"set_star": "Sæt stjerne",
"set_tag": "Sæt tag",
"send_vehicle": "Send køretøj",
"transfer_vehicle": "Overfør køretøj",
"bring_vehicle": "Hent køretøj",
"vehicle_transfer_success": "Køretøj overført til {{garage}}",
"money_not_enough": "Du har ikke penge nok til at overføre køretøj {{price}}",
"vehicle_transfer_player_success": "Køretøj {{plate}} overført til {{player}}",
"no_slot_available": "Der er ingen ledig plads i garagen",
"vehicle_brought": "Køretøj {{vehicle}} hentet",
"marked_as_favorite": "Markeret som favorit",
"unmarked_as_favorite": "Fjernet fra favoritter"
},
"empty": {
"title": "Listen er tom",
"description": "Ingen genstande fundet",
"search_title": "Ingen resultater fundet",
"search_description": "der er ingen resultater for '{{searchQuery}}'",
"search_helper": "Prøv et andet søgeord",
"empty_helper": "Prøv igen senere"
},
"footer": {
"previous_vehicle": "Forrige køretøj",
"previous_vehicle_description": "Tryk venstre pil for at gå til forrige køretøj",
"next_vehicle": "Næste køretøj",
"next_vehicle_description": "Tryk højre pil for at gå til næste køretøj",
"preview_mode": "Forhåndsvisning",
"preview_mode_description": "Undersøg køretøjet i 3D",
"music_mode": "Musiktilstand",
"music_mode_description": "Slå musik til/fra",
"exit_garage": "Forlad garage",
"exit_garage_description": "Tryk ESC for at forlade garagen"
},
"out_vehicles_modal": {
"title": "Køretøjer udenfor",
"description": "Vælg det køretøj, du vil hente",
"search_placeholder": "Søg efter køretøj efter navn eller mærke",
"search_helper": "Prøv et andet søgeord",
"empty_helper": "Prøv igen senere",
"list_title": "Køretøjsliste",
"list_description": "{{count}} køretøj fundet",
"list_helper": "Prøv et andet søgeord",
"list_empty_helper": "Prøv igen senere",
"cancel": "Annuller",
"bring_vehicle": "Hent køretøj",
"loading": "Indlæser køretøjer...",
"loading_helper": "Vent venligst",
"selected": "Valgt"
},
"player_list_modal": {
"title": "Spillerliste",
"description": "Vælg spilleren, du vil overføre køretøjet til",
"search_placeholder": "Søg efter spiller efter navn",
"search_helper": "Prøv et andet søgeord",
"empty_helper": "Prøv igen senere",
"list_title": "Spillerliste",
"list_description": "{{count}} spiller fundet",
"list_helper": "Prøv et andet søgeord",
"list_empty_helper": "Prøv igen senere",
"cancel": "Annuller",
"transfer_vehicle": "Overfør køretøj",
"loading": "Indlæser spillere...",
"loading_helper": "Vent venligst",
"selected": "Valgt"
},
"loading": {
"title": "Indlæser",
"description": "Vent venligst",
"helper": "Vent venligst"
},
"send_vehicle_modal": {
"title": "Send køretøj",
"description": "Vælg den garage, du vil sende køretøjet til",
"search_placeholder": "Søg efter garage efter navn",
"search_helper": "Prøv et andet søgeord",
"empty_helper": "Prøv igen senere",
"list_title": "Garageliste",
"list_description": "{{count}} garage fundet",
"list_helper": "Prøv et andet søgeord",
"list_empty_helper": "Prøv igen senere",
"cancel": "Annuller",
"send_vehicle": "Send køretøj",
"loading": "Indlæser garager...",
"loading_helper": "Vent venligst",
"selected": "Valgt",
"garage_description": "Køretøjet vil blive sendt til den valgte garage"
},
"tag_modal": {
"title": "Tag",
"description": "Sæt tag på køretøjet {{name}}",
"current_tag": "Nuværende tag",
"new_tag": "Nyt tag",
"new_tag_placeholder": "Indtast nyt tag",
"popular_tags": "Populære tags",
"save": "Gem",
"cancel": "Annuller",
"notification": "Du har opdateret tagget! Nyt tag: {{tag}}"
},
"impound_info": {
"title": "Beslaglæggelsesinfo",
"description": "Beslaglæggelsesinfo",
"current_tag": "Nuværende tag",
"new_tag": "Nyt tag",
"new_tag_placeholder": "Indtast nyt tag",
"time_left": "Tid tilbage",
"price": "Pris",
"garage": "Garage",
"pay_fine": "Betal bøde",
"pay_fine_description": "Betal blot bøden for at frigive køretøjet",
"pay_fine_button": "Betal bøde",
"pay_fine_button_description": "Du skal vente på, at tiden udløber, før du kan betale bøden",
"yes": "Ja",
"no": "Nej",
"note": "Notits"
},
"impound_modal": {
"title": "Beslaglæggelse",
"description": "Beslaglæg køretøjet",
"cancel": "Annuller",
"confirm": "Bekræft",
"impound_garage": "Beslaglæggelsesgarage",
"impound_time": "Beslaglæggelsestid",
"pay_to_release": "Betal for frigivelse",
"pay_to_release_description": "Hvis du sætter dette til ja, kan spilleren betale bøden og frigive køretøjet uden at vente",
"impound_fee": "Beslaglæggelsesgebyr",
"note": "Notits",
"note_placeholder": "Indtast notits",
"summary": "Opsummering",
"selected_garage": "Valgt garage",
"select_garage": "Vælg garage",
"time": "Tid",
"fee": "Gebyr",
"send_to_impound": "Send til beslaglæggelse",
"yes": "Ja",
"no": "Nej",
"error": {
"select_garage": "Vælg venligst en garage",
"select_time": "Vælg venligst en tid",
"submit": "Der opstod en fejl under afsendelse af køretøjet til beslaglæggelse"
},
"not_selected": "Ikke valgt",
"minutes": "Minutter",
"seconds": "Sekunder"
},
"info_card": {
"engine_health": "Motorens tilstand",
"body_health": "Karosseriets tilstand",
"fuel_level": "Brændstofniveau",
"brakes": "Bremser",
"acceleration": "Acceleration",
"top_speed": "Topfart",
"traction": "Traktion",
"close": "Luk"
}
},
"decorate_ui": {
"price": "${{price}}",
"clear": "Ryd",
"items_found": "{{count}} genstande fundet",
"cancel": "Annuller",
"confirm": "Bekræft",
"item_list": {
"stash": "Stash",
"gardrobe": "Garderobe",
"empty": {
"title": "Ingen genstand valgt",
"description": "Vælg genstandskategori til dekoration. Start med at vælge typen fra venstre menu.",
"helper": "Vælg en genstandskategori fra venstre menu",
"search_title": "Ingen resultater fundet",
"search_description": "Der er ingen resultater for '{{searchQuery}}'",
"search_helper": "Prøv et andet søgeord"
}
},
"header": {
"search_placeholder": "Søg møbler"
},
"help": {
"title": "Styring og hjælp",
"description": "Alle styringer i dekorationstilstand",
"mouse_control": "Musestyring",
"mouse_control_description": "Flyt møbler med musen",
"keyboard_control": "Tastaturstyring",
"f5_description": "Skjul/vis markør",
"f6_description": "Aktivér/deaktivér fri kamerabevægelse",
"wasd_description": "Flyt møbler med tastaturet",
"esc_description": "Forlad dekorationsmenu uden at gemme",
"important_tips": "Vigtige tips",
"important_tips_description": "Nogle møbler har <typeColor>type- og farvevalg</typeColor> og kan have <storageWardrobe>opbevaring eller garderobe</storageWardrobe>-funktioner."
},
"furniture_info": {
"select_color": "Vælg farve",
"edit_mode": "Redigeringstilstand",
"translate": "Flyt",
"rotate": "Rotér"
},
"buy": {
"price_info": "Prisinfo",
"selected_color": "Valgt farve",
"price": "Pris",
"buy": "Køb - ${{price}}",
"title": "Er du sikker på, at du vil købe denne genstand?",
"description": "Når du køber denne genstand, modtager du ${{price}}"
},
"categories": {
"dynamic": "Dynamisk",
"objects": "Objekter",
"stash": "Stash"
},
"stash": {
"no_selected_item": "Ingen genstand valgt",
"no_selected_item_description": "Vælg en genstand fra listen til højre for at se detaljer. Alle dine dekorationsgenstande vises her.",
"in_stash": "I stash",
"not_in_stash": "Ikke i stash",
"furniture_management": "Møbeladministration",
"put_in_stash": "Læg i stash",
"put_in_stash_description": "Læg genstanden i stash",
"remove_from_stash": "Fjern fra stash",
"remove_from_stash_description": "Fjern genstanden fra stash",
"sell": "Sælg møbel",
"sell_description": "Sælg genstanden for ${{price}}",
"are_sure_sell": "Er du sikker på, at du vil sælge denne genstand?",
"are_sure_sell_description": "Når du sælger denne genstand, modtager du ${{price}}",
"save_location": "Gem placering",
"save_location_description": "Gem genstanden på denne placering",
"save": "Gem"
},
"objects": {
"selected_categories": "Valgt: {{count}} kategori",
"search_category": "Søg kategori"
}
},
"decorate": {
"no_money": "Du har ikke penge nok! ${{price}}",
"invalid_data": "Ugyldige data",
"invalid_object": "Ugyldigt objekt",
"failed_update": "Opdatering mislykkedes",
"sold_furniture": "Du solgte møblet for ${{price}}",
"failed_sell": "Salg mislykkedes",
"gizmo_mode_toggled": "Gizmo-tilstand skiftet til {{mode}}",
"focused": "Fokuseret",
"unfocused": "Ikke fokuseret",
"focus_object_not_supported": "Fokus på objekt understøttes ikke i muse-dekorationstilstand",
"too_far": "Du er for langt væk fra dekorationsområdet",
"not_in_garage": "Du er ikke i en garage",
"invalid_garage": "Ugyldig garage",
"not_support_decoration": "Denne garage understøtter ikke dekoration",
"not_owner": "Du er ikke ejer af denne garage",
"not_key_holder": "Du har ikke nøgler til denne garage",
"decoration_not_available": "Dekoration er ikke tilgængelig, nogen bruger den lige nu",
"you_cant_select_entity": "Objektvalg er deaktiveret, du skal først gå til `stash`-kategorien"
},
"furniture_creator": {
"page_title": "Møbelopretter",
"page_description": "Opret og administrer tilpassede møbler til din server",
"select_category": "Vælg en kategori",
"select_category_description": "Vælg en møbelkategori for at administrere genstande",
"select_item": "Vælg en genstand at redigere",
"select_item_description": "Vælg en eksisterende genstand eller opret en ny",
"search_placeholder": "Søg møbler...",
"statistics": "Statistik",
"categories": "kategorier",
"total_items": "Genstande",
"dynamic": "Dynamisk",
"colors": "Farver",
"items": "genstande",
"no_results": "Ingen resultater fundet",
"try_different_search": "Prøv at ændre din søgning",
"create_item": "Opret møbelgenstand",
"edit_item": "Rediger møbelgenstand",
"category": "Kategori",
"basic_info": "Grundlæggende info",
"advanced": "Avanceret",
"object_name": "Objektnavn",
"label": "Etiket",
"item_description": "Beskrivelse",
"price": "Pris",
"color_label": "Farveetiket",
"image": "Billede",
"image_description": "Angiv et billed-URL til denne møbelgenstand",
"stash": "Stash",
"stash_description": "Aktivér opbevaringsfunktion",
"slots": "Pladser",
"max_weight": "Maks. vægt",
"gardrobe": "Garderobe",
"gardrobe_description": "Aktivér tøjopbevaring",
"offset": "Positionsforskydning",
"preview": "Live-forhåndsvisning",
"unnamed": "Unavngiven genstand",
"no_description": "Ingen beskrivelse",
"delete": "Slet",
"save": "Gem",
"create": "Opret",
"add": "Tilføj",
"fill_all_fields": "Udfyld venligst alle påkrævede felter",
"object_label_required": "Objekt og etiket er påkrævet",
"color_variations": "Farvevarianter",
"color_variations_description": "Tilføj forskellige farvevarianter af denne møbelgenstand",
"add_color": "Tilføj farve",
"add_color_description": "Tilføj en ny farvevariant",
"edit_color": "Rediger farvevariant",
"edit_color_description": "Rediger farvevarianten af denne genstand",
"no_colors": "Ingen farvevarianter endnu",
"add_first_color": "Klik på Tilføj farve for at oprette din første variant",
"image_url": "Billede-URL",
"image_error": "Kunne ikke indlæse billede",
"no_image": "Intet billede",
"image_tips": "Tips",
"image_tip_1": "Brug direkte billed-URL'er (slutter med .png, .jpg osv.)",
"image_tip_2": "Anbefalet størrelse: 512x512px eller større",
"image_tip_3": "PNG-format med gennemsigtighed fungerer bedst",
"category_manager": "Kategoriadministrator",
"category_manager_description": "Opret og administrer møbelkategorier",
"add_category": "Tilføj kategori",
"edit_category": "Rediger kategori",
"no_categories": "Ingen kategorier endnu",
"category_key": "Kategorinøgle",
"dynamic_icon": "Dynamisk ikon",
"dynamic_description": "Aktivér dynamisk placering",
"navigation": "Navigationsrækkefølge",
"css_settings": "CSS-indstillinger",
"item_created": "Møbelgenstand oprettet succesfuldt",
"item_create_failed": "Oprettelse af møbelgenstand mislykkedes",
"item_updated": "Møbelgenstand opdateret succesfuldt",
"item_update_failed": "Opdatering af møbelgenstand mislykkedes",
"item_removed": "Møbelgenstand fjernet succesfuldt",
"item_remove_failed": "Fjernelse af møbelgenstand mislykkedes",
"category_created": "Møbelkategori oprettet succesfuldt",
"cannot_delete_config_item": "Kan ikke slette konfigurationsgenstande, kun databasegenstande",
"object_is_not_valid": "Objektnavn er ikke gyldigt, er du sikker på, at det findes i spillet? {{object}}",
"screenshot_cancelled": "Skærmbillede annulleret",
"screenshot_completed": "Skærmbillede fuldført succesfuldt",
"token_not_set": "FiveManage-token er ikke sat. Sæt det i config/fivemanage.lua.",
"uploading_image": "Uploader billede til FiveManage...",
"image_uploaded": "Billede uploadet til FiveManage succesfuldt",
"object_required": "Objekt er påkrævet",
"object_already_in_category": "Objektnavnet {{object}} findes allerede i denne kategori. {{category}}."
}
}
@@ -0,0 +1,628 @@
{
"empty_list": "Keine Elemente gefunden",
"cancel": "Abbrechen",
"delete": "Löschen",
"clear": "Leeren",
"no_garage_slots": "In dieser Garage ist kein Platz frei...",
"no_vehicle_owner": "Wir unterstützen keine Fahrzeuge, die nicht dir gehören!",
"no_house_nearby": "Kein Haus in der Nähe",
"buy_garage": "Garage kaufen für: ${{price}}",
"you_are_not_police": "Du bist kein Polizist",
"no_vehicle_nearby": "Kein Fahrzeug in der Nähe",
"garage_not_available": "Garage nicht verfügbar oder belegt, versuche es erneut...",
"garage_not_found": "Garage nicht gefunden",
"garage_not_found_job": "Job-Garage nicht gefunden",
"garage_empty": "Garage leer",
"cannot_store_vehicle": "Du kannst dieses Fahrzeug hier nicht einlagern!",
"not_driver": "Es ist verboten, dieses Fahrzeug zu fahren",
"vehicle_not_spawned": "Du hast die Garage gleichzeitig mit einem anderen Spieler benutzt. Versuche es erneut!",
"timeout_expired": "Zeitüberschreitung",
"no_money": "Du hast nicht genug Geld! ${{price}}",
"not_correct_job": "Du hast nicht den richtigen Job",
"not_correct_grade": "Du hast nicht den richtigen Rang",
"not_in_vehicle": "Du sitzt nicht in einem Fahrzeug!",
"job_vehicle_added": "Fahrzeug zur Job-Garage hinzugefügt!",
"no_vehicle_data": "Keine Fahrzeugdaten gefunden",
"you_are_already_in_garage": "Du befindest dich bereits in einer Garage!",
"sound_enabled": "Ton aktiviert",
"sound_disabled": "Ton deaktiviert",
"sell_garage": "Geld aus Garagenverkauf erhalten: ${{price}}",
"garage_purchase": "Du hast eine neue Garage gekauft für: ${{price}}",
"player_not_found": "Spieler nicht gefunden",
"transfer_success": "Du hast ein Fahrzeug von einem anderen Spieler erhalten, es wurde gesendet an: {{garage}}",
"transfer_success_to": "Du hast ein Fahrzeug an einen anderen Spieler gesendet, es wurde gesendet an: {{garage}}",
"transfer_blacklisted": "Dieses Fahrzeug kann nicht auf einen anderen Spieler übertragen werden",
"give_recovery": "Du hast ein verlorenes Fahrzeug wiederhergestellt, es wurde gesendet an: {{garage}}, insgesamt abgebucht: ${{price}}",
"impound_pay": "Das Fahrzeug ist nicht mehr beschlagnahmt, du hast bezahlt: ${{price}}",
"missing_type": "Keine Garage für Fahrzeugtyp gefunden: {{type}}",
"vehicle_removed": "Fahrzeug entfernt!",
"vehicle_impounded": "Fahrzeug erfolgreich beschlagnahmt und gesendet an: {{garage}}",
"all_vehicles_impounded": "Alle Fahrzeuge auf der Karte wurden beschlagnahmt!",
"repair": {
"repaired": "Das Fahrzeug wurde repariert {{plate}}"
},
"log": {
"save_vehicle": {
"title": "Fahrzeug speichern",
"description": "**Spieler:** {{player}} \n**Fahrzeug:** {{model}} \n**Kennzeichen:** {{plate}} \n**Garage:** {{garage}}"
},
"take_vehicle": {
"title": "Fahrzeug herausnehmen",
"description": "**Spieler:** {{player}} \n**Fahrzeug:** {{model}} \n**Kennzeichen:** {{plate}}"
},
"recovery_vehicle": {
"title": "Fahrzeug wiederherstellen",
"description": "**Spieler:** {{player}} \n**Fahrzeug:** {{model}} \n**Kennzeichen:** {{plate}} \n**Garage:** {{garage}} \n**Preis:** {{price}}"
},
"give_vehicle": {
"title": "Fahrzeug übergeben",
"description": "**Spieler:** {{player}} \n**Empfänger:** {{receivedPlayer}} \n**Fahrzeug:** {{model}} \n**Kennzeichen:** {{plate}} \n**Fahrzeugtyp:** {{vehicleType}}"
},
"impound_vehicle": {
"title": "Fahrzeug beschlagnahmen",
"description": "**Spieler:** {{player}} \n**Job:** {{job}} \n**Kennzeichen:** {{plate}} \n**Garage:** {{garage}}"
}
},
"drawtext": {
"store_vehicle": "[E] - Fahrzeug einlagern",
"open_garage": "[E] - Garage öffnen",
"enter_garage": "[E] - Garage betreten",
"public_garage": "[G] - Öffentliche Garage betreten",
"recovery": "[E] - Verlorenes Fahrzeug wiederherstellen (AUSSEN): ${{price}}",
"back_garage": "[E] - Zurück",
"dynamic": "[E] - Interagieren",
"stash": "[E] - Lager öffnen",
"gardrobe": "[E] - Kleiderschrank öffnen",
"delete_illegal": "[E] - Illegales Item löschen",
"exit_point": "[E] - Ausgangspunkt",
"entry_point": "[E] - Eingangspunkt",
"board_point": "[E] - Board-Punkt",
"shell_point": "[E] - Shell-Punkt",
"house_point": "[E] - Hauspunkt"
},
"management": {
"no_garage_nearby": "Keine Garage in der Nähe",
"no_garage_owner": "Du bist nicht der Eigentümer dieser Garage",
"garage_price": "Garagenpreis: ${{price}}",
"garage_sell_tax": "Verkaufssteuer Garage: {{tax}}%",
"garage_sell_tax_description": "Der Garagenpreis wird mit dem Steuersatz multipliziert",
"no_player": "Kein Spieler in der Nähe",
"not_relate_state": "Dieser Befehl ist exklusiv für Immobilienmakler"
},
"keyholders": {
"empty_list": "Keine Schlüsselbesitzer gefunden",
"empty_out": "Auf der Straße gibt es keine Fahrzeuge, die du wiederherstellen kannst!",
"took_keys": "Du hast die Schlüssel genommen",
"already_keys": "Dieser Spieler hat bereits Schlüssel zu dieser Garage",
"gave_keys": "Du hast die Schlüssel von {{garage}} an {{player}} gegeben",
"received_keys": "Schlüssel von {{garage}} erhalten"
},
"give_vehicle": {
"info": "Das Fahrzeug: {{model}} mit Kennzeichen: {{plate}} wurde an den Spieler {{player}} übergeben",
"invalid_type": "Stelle sicher, dass du den richtigen Befehl für dieses Fahrzeug verwendest",
"invalid_model": "Das ausgewählte Modell existiert nicht...",
"no_player_online": "Der ausgewählte Spieler ist nicht online...",
"plate_in_use": "Dieses Kennzeichen wird bereits von einem anderen Fahrzeug verwendet",
"give_info": "Das Fahrzeug: {{model}} mit Kennzeichen: {{plate}} wurde an den Spieler {{player}} übergeben"
},
"creator": {
"title": "Garagen-Editor",
"description": "Hier kannst du Garagen verwalten.",
"complete_creator": "Du musst den Editor abschließen, bevor du ihn erneut öffnest",
"garage_created": "Garage erfolgreich erstellt",
"garage_updated": "Garage erfolgreich aktualisiert",
"select_menu": "Menüposition auswählen",
"select_zone": "Punkt innerhalb der Zone auswählen",
"select_positions": "Mindestens 3 Punkte auswählen...",
"menu_location": "Eingangsposition",
"spawn_location": "Spawnposition",
"create_guide": "Drücke ~INPUT_CELLPHONE_RIGHT~ zum Rechtsdrehen \nDrücke ~INPUT_CELLPHONE_LEFT~ zum Linksdrehen",
"polyzone_nearby": "Der Punkt liegt nicht in der Zone",
"available_slots": "{{name}}, verfügbare Plätze: {{slots}}",
"teleported_to_garage": "Zu {{garage}} teleportiert",
"select_garage": "Garage auswählen",
"select_garage_description": "Wähle die Garage aus, die du erstellen möchtest",
"fill_all_fields": "Bitte alle Felder ausfüllen",
"shell_selector": {
"title": "Garagen-Innenraum",
"description": "Wähle die Innenraum-Shell für deine Garage",
"select": "Innenraum auswählen",
"selected": "Ausgewählt",
"vehicle_slots": "Fahrzeugplätze",
"change": "Ändern",
"no_shell_selected": "Kein Innenraum ausgewählt",
"select_shell": "Garagen-Innenraum auswählen",
"quick_select": "Schnellauswahl",
"view_all": "Alle anzeigen",
"all_shells": "Alle verfügbaren Innenräume",
"help_text": "Mit Links-/Rechtspfeil durch Innenräume blättern. Enter zum Bestätigen, Backspace zum Abbrechen.",
"no_shells_available": "Keine Shells verfügbar. Bitte füge eine Shell in Config.Shells hinzu"
},
"price": {
"title": "Kaufpreis",
"description": "Lege den Preis fest, den Spieler für diese Garage zahlen müssen"
},
"store_price": {
"enable": "Fahrzeug-Einlagerungsgebühr aktivieren",
"description": "Lege eine Gebühr fest, die Spieler für das Einlagern ihrer Fahrzeuge zahlen müssen"
},
"garage_type_selector": {
"title": "Garagentyp",
"vehicle": "Fahrzeug",
"vehicle_description": "Eine Garage für Fahrzeuge",
"plane": "Flugzeug",
"plane_description": "Eine Garage für Flugzeuge",
"boat": "Boot",
"boat_description": "Eine Garage für Boote"
},
"left_panel": {
"search_garages_placeholder": "Garagen suchen...",
"create_garage": "Garage erstellen",
"filters": "Filter",
"results": "{{count}} Ergebnis{{plural}}",
"all_garages": "Alle",
"vehicle": "Fahrzeug",
"plane": "Flugzeug",
"boat": "Boot",
"teleport_to_garage": "Zu Garage teleportieren",
"teleport": "Teleport",
"garage_type": "Garagentyp",
"public": "Öffentlich",
"private": "Privat",
"impound": "Beschlagnahmt",
"no_garages_found": "Keine Garagen gefunden",
"no_garages_available": "Keine Garagen verfügbar",
"try_adjusting_search": "Versuche deine Suchkriterien anzupassen oder erstelle eine neue Garage",
"create_first_garage_description": "Erstelle deine erste Garage, um mit dem Garagen-Management zu beginnen",
"status": "Status"
},
"garage_access_selector": {
"title": "Garagenzugriff",
"public": "Öffentlich",
"public_description": "Die Garage ist für alle zugänglich",
"private": "Privat",
"private_description": "Die Garage ist nur für den Eigentümer zugänglich",
"impound": "Beschlagnahmt",
"impound_description": "Die Garage ist nur für beschlagnahmte Fahrzeuge zugänglich"
},
"interior_type_selector": {
"title": "Innenraumtyp",
"ipl": "IPL",
"ipl_description": "IPL (Interior Prop List) für Innenraum verwenden",
"shell": "Shell",
"shell_description": "Shell für benutzerdefinierten Innenraum verwenden"
},
"form": {
"create_garage": "Garage erstellen",
"edit_garage": "Garage bearbeiten {{name}}",
"garage_type": "Garagentyp",
"select": "Auswählen",
"remove": "Entfernen",
"save": "Speichern",
"no_location_selected": "Keine Position ausgewählt",
"no_location_selected_description": "Klicke auf 'Auswählen', um eine Position zu wählen",
"location_required": "{{label}} ist erforderlich",
"location": {
"title": "Positionseinstellungen",
"zone_points": "Zonenpunkte",
"zone_points_description": "Definiere den Garagenbereich",
"menu_coords": "Menü-Koordinaten",
"spawn_coords": "Spawn-Koordinaten"
},
"access_control": {
"title": "Zugangskontrolle",
"jobs_section": "Jobs",
"gangs_section": "Gangs",
"select_job": "Job zum Hinzufügen auswählen",
"select_gang": "Gang zum Hinzufügen auswählen",
"job": "Job",
"gang": "Gang",
"grades": "Ränge",
"empty_list": "Keine Elemente verfügbar",
"no_jobs_added": "Noch keine Jobs hinzugefügt. Füge Jobs hinzu, um den Zugang einzuschränken.",
"no_gangs_added": "Noch keine Gangs hinzugefügt. Füge Gangs hinzu, um den Zugang einzuschränken.",
"info": "Füge mehrere Jobs und Gangs mit bestimmten Rängen hinzu, um zu kontrollieren, wer Zugang hat. Wenn nichts hinzugefügt wird, ist die Garage für alle zugänglich."
}
},
"remove": {
"title": "Garage löschen",
"description": "Bist du sicher, dass du diese Garage löschen möchtest?",
"confirm": "Löschen"
},
"cancel": {
"title": "Garagenerstellung abbrechen",
"description": "Bist du sicher, dass du die Erstellung abbrechen möchtest?",
"confirm": "Bestätigen"
},
"raycast": {
"info": "Stelle sicher, dass du den gesamten Garagenbereich auswählst, sonst kann es Probleme geben.",
"done": "Fertig",
"add_point": "Punkt hinzufügen",
"rotate_z": "Ausrichtung drehen +/-",
"rotate_z_scroll": "Ausrichtung drehen +/-",
"increase_z": "Z-Grenze +/-",
"completed": "Alle Punkte abgeschlossen",
"selected_point": "Du hast {{count}} Punkte ausgewählt",
"no_point_selected": "Kein Punkt ausgewählt",
"point_size": "Punktgröße +/-",
"select_entity": "Objekt auswählen",
"not_valid_entity": "Du wählst kein gültiges Objekt aus. Bitte wähle ein {{entityType}}",
"selected_entity": "Du hast {{count}} Objekte ausgewählt",
"entity_disabled": "Dieses Objekt kann nicht ausgewählt werden",
"select_entity_info": "Bitte wähle ein {{entityType}}",
"model_is_not_valid": "Modell {{model}} ist ungültig",
"must_be_completed": "Du musst den Raycast abschließen, bevor du den Editor öffnest",
"not_in_points": "Der ausgewählte Punkt liegt nicht im Garagenbereich",
"point_in_another_zone": "Der ausgewählte Punkt liegt in einer anderen Zone.",
"press_enter_to_select": "Drücke Enter zum Auswählen",
"undo": "Rückgängig"
}
},
"blip": {
"impound": "Beschlagnahmt",
"garage": "Garage zum Verkauf",
"plane": "Hangar zum Verkauf",
"boat": "Anlegestelle zum Verkauf"
},
"menu": {
"vehicle_loading": "Lade",
"vehicle_loading_subtitle": "Fahrzeug wird vorbereitet...",
"preview_mode_active": "Vorschaumodus aktiv",
"preview_mode_subtitle": "Mit Maus drehen • F9 zum Beenden",
"empty_garage": "Leere Garage",
"empty_garage_description": "In dieser Garage befindet sich kein Fahrzeug. Nutze „Fahrzeug holen“",
"take_vehicle_out": "Fahrzeug herausnehmen",
"take_vehicle_out_description": "Bist du sicher, dass du dieses Fahrzeug herausnehmen möchtest?",
"take_vehicle_out_price": "Dir werden {{price}} berechnet",
"take_vehicle_out_free": "Du kannst dieses Fahrzeug kostenlos herausnehmen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"power": "Leistung",
"acceleration": "Beschleunigung",
"traction": "Haftung",
"brakes": "Bremsen",
"no_vehicle_selected": "Kein Fahrzeug ausgewählt",
"header": {
"favorite_button": "Favorit",
"total_vehicles": "Gesamte Fahrzeuge",
"balance": "Kontostand: {{balance}}",
"balance_title": "Kontostand",
"balance_badge": "$",
"set_star": "Stern setzen",
"set_tag": "Tag setzen",
"send_vehicle": "Fahrzeug senden",
"transfer_vehicle": "Fahrzeug übertragen",
"bring_vehicle": "Fahrzeug holen",
"vehicle_transfer_success": "Fahrzeug übertragen nach {{garage}}",
"money_not_enough": "Du hast nicht genug Geld, um das Fahrzeug zu übertragen {{price}}",
"vehicle_transfer_player_success": "Fahrzeug {{plate}} übertragen an {{player}}",
"no_slot_available": "In der Garage ist kein Platz frei",
"vehicle_brought": "Fahrzeug {{vehicle}} geholt",
"marked_as_favorite": "Als Favorit markiert",
"unmarked_as_favorite": "Favoritenmarkierung entfernt"
},
"empty": {
"title": "Liste leer",
"description": "Keine Elemente gefunden",
"search_title": "Keine Ergebnisse gefunden",
"search_description": "keine Ergebnisse für '{{searchQuery}}'",
"search_helper": "Versuche einen anderen Suchbegriff",
"empty_helper": "Versuche es später erneut"
},
"footer": {
"previous_vehicle": "Vorheriges Fahrzeug",
"previous_vehicle_description": "Linkspfeil für vorheriges Fahrzeug",
"next_vehicle": "Nächstes Fahrzeug",
"next_vehicle_description": "Rechtspfeil für nächstes Fahrzeug",
"preview_mode": "Vorschaumodus",
"preview_mode_description": "Fahrzeug in 3D betrachten",
"music_mode": "Musikmodus",
"music_mode_description": "Musik ein-/ausschalten",
"exit_garage": "Garage verlassen",
"exit_garage_description": "ESC zum Verlassen der Garage"
},
"out_vehicles_modal": {
"title": "Fahrzeuge draußen",
"description": "Wähle das Fahrzeug aus, das du holen möchtest",
"search_placeholder": "Suche nach Name oder Marke",
"search_helper": "Versuche einen anderen Suchbegriff",
"empty_helper": "Versuche es später erneut",
"list_title": "Fahrzeugliste",
"list_description": "{{count}} Fahrzeug gefunden",
"list_helper": "Versuche einen anderen Suchbegriff",
"list_empty_helper": "Versuche es später erneut",
"cancel": "Abbrechen",
"bring_vehicle": "Fahrzeug holen",
"loading": "Lade Fahrzeuge...",
"loading_helper": "Bitte warten",
"selected": "Ausgewählt"
},
"player_list_modal": {
"title": "Spielerliste",
"description": "Wähle den Spieler aus, an den du das Fahrzeug übertragen möchtest",
"search_placeholder": "Suche nach Spielernamen",
"search_helper": "Versuche einen anderen Suchbegriff",
"empty_helper": "Versuche es später erneut",
"list_title": "Spielerliste",
"list_description": "{{count}} Spieler gefunden",
"list_helper": "Versuche einen anderen Suchbegriff",
"list_empty_helper": "Versuche es später erneut",
"cancel": "Abbrechen",
"transfer_vehicle": "Fahrzeug übertragen",
"loading": "Lade Spieler...",
"loading_helper": "Bitte warten",
"selected": "Ausgewählt"
},
"loading": {
"title": "Lade",
"description": "Bitte warten",
"helper": "Bitte warten"
},
"send_vehicle_modal": {
"title": "Fahrzeug senden",
"description": "Wähle die Garage aus, in die das Fahrzeug gesendet werden soll",
"search_placeholder": "Suche nach Garagenname",
"search_helper": "Versuche einen anderen Suchbegriff",
"empty_helper": "Versuche es später erneut",
"list_title": "Garagenliste",
"list_description": "{{count}} Garage gefunden",
"list_helper": "Versuche einen anderen Suchbegriff",
"list_empty_helper": "Versuche es später erneut",
"cancel": "Abbrechen",
"send_vehicle": "Fahrzeug senden",
"loading": "Lade Garagen...",
"loading_helper": "Bitte warten",
"selected": "Ausgewählt",
"garage_description": "Das Fahrzeug wird in die ausgewählte Garage gesendet"
},
"tag_modal": {
"title": "Tag",
"description": "Tag für das Fahrzeug {{name}} setzen",
"current_tag": "Aktueller Tag",
"new_tag": "Neuer Tag",
"new_tag_placeholder": "Neuen Tag eingeben",
"popular_tags": "Beliebte Tags",
"save": "Speichern",
"cancel": "Abbrechen",
"notification": "Tag aktualisiert! Neuer Tag: {{tag}}"
},
"impound_info": {
"title": "Beschlagnahme-Info",
"description": "Beschlagnahme-Info",
"current_tag": "Aktueller Tag",
"new_tag": "Neuer Tag",
"new_tag_placeholder": "Neuen Tag eingeben",
"time_left": "Verbleibende Zeit",
"price": "Preis",
"garage": "Garage",
"pay_fine": "Strafe zahlen",
"pay_fine_description": "Zahle einfach die Strafe, um das Fahrzeug freizugeben",
"pay_fine_button": "Strafe zahlen",
"pay_fine_button_description": "Du musst warten, bis die Zeit abläuft, um die Strafe zu zahlen",
"yes": "Ja",
"no": "Nein",
"note": "Notiz"
},
"impound_modal": {
"title": "Beschlagnahme",
"description": "Fahrzeug beschlagnahmen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"impound_garage": "Beschlagnahme-Garage",
"impound_time": "Beschlagnahmezeit",
"pay_to_release": "Zahlung zur Freigabe",
"pay_to_release_description": "Wenn ja, kann der Spieler die Strafe zahlen und das Fahrzeug ohne Wartezeit freigeben",
"impound_fee": "Beschlagnahmegebühr",
"note": "Notiz",
"note_placeholder": "Notiz eingeben",
"summary": "Zusammenfassung",
"selected_garage": "Ausgewählte Garage",
"select_garage": "Garage auswählen",
"time": "Zeit",
"fee": "Gebühr",
"send_to_impound": "Zur Beschlagnahme senden",
"yes": "Ja",
"no": "Nein",
"error": {
"select_garage": "Bitte eine Garage auswählen",
"select_time": "Bitte eine Zeit auswählen",
"submit": "Fehler beim Senden des Fahrzeugs zur Beschlagnahme"
},
"not_selected": "Nicht ausgewählt",
"minutes": "Minuten",
"seconds": "Sekunden"
},
"info_card": {
"engine_health": "Motorgesundheit",
"body_health": "Karosseriegesundheit",
"fuel_level": "Tankfüllung",
"brakes": "Bremsen",
"acceleration": "Beschleunigung",
"top_speed": "Höchstgeschwindigkeit",
"traction": "Haftung",
"close": "Schließen"
}
},
"decorate_ui": {
"price": "${{price}}",
"clear": "Leeren",
"items_found": "{{count}} Elemente gefunden",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"item_list": {
"stash": "Lager",
"gardrobe": "Kleiderschrank",
"empty": {
"title": "Kein Element ausgewählt",
"description": "Wähle eine Kategorie für die Dekoration aus. Du kannst links mit der Auswahl des Elementtyps beginnen.",
"helper": "Wähle eine Elementkategorie aus dem linken Menü",
"search_title": "Keine Ergebnisse gefunden",
"search_description": "Keine Ergebnisse für '{{searchQuery}}'",
"search_helper": "Versuche einen anderen Suchbegriff"
}
},
"header": {
"search_placeholder": "Möbel suchen"
},
"help": {
"title": "Steuerung & Hilfe",
"description": "Alle Steuerungen im Dekorationsmodus",
"mouse_control": "Maussteuerung",
"mouse_control_description": "Möbel mit der Maus bewegen",
"keyboard_control": "Tastatursteuerung",
"f5_description": "Cursor verstecken/anzeigen",
"f6_description": "Freie Kamerabewegung ein-/ausschalten",
"wasd_description": "Möbel mit Tastatur bewegen",
"esc_description": "Dekorationsmenü ohne Speichern verlassen",
"important_tips": "Wichtige Hinweise",
"important_tips_description": "Einige Möbel haben <typeColor>Typ- und Farboptionen</typeColor> und können <storageWardrobe>Lager- oder Kleiderschrank</storageWardrobe>-Funktionen besitzen."
},
"furniture_info": {
"select_color": "Farbe wählen",
"edit_mode": "Bearbeitungsmodus",
"translate": "Verschieben",
"rotate": "Drehen"
},
"buy": {
"price_info": "Preisinfo",
"selected_color": "Ausgewählte Farbe",
"price": "Preis",
"buy": "Kaufen - ${{price}}",
"title": "Möchtest du diesen Gegenstand wirklich kaufen?",
"description": "Beim Kauf dieses Gegenstands erhältst du ${{price}}"
},
"categories": {
"dynamic": "Dynamisch",
"objects": "Objekte",
"stash": "Lager"
},
"stash": {
"no_selected_item": "Kein Element ausgewählt",
"no_selected_item_description": "Wähle ein Element rechts aus, um Details zu sehen. Hier werden alle deine Dekorationsobjekte angezeigt.",
"in_stash": "Im Lager",
"not_in_stash": "Nicht im Lager",
"furniture_management": "Möbelverwaltung",
"put_in_stash": "Ins Lager legen",
"put_in_stash_description": "Element ins Lager legen",
"remove_from_stash": "Aus Lager nehmen",
"remove_from_stash_description": "Element aus dem Lager nehmen",
"sell": "Möbel verkaufen",
"sell_description": "Element verkaufen für ${{price}}",
"are_sure_sell": "Möchtest du dieses Element wirklich verkaufen?",
"are_sure_sell_description": "Beim Verkauf dieses Elements erhältst du ${{price}}",
"save_location": "Position speichern",
"save_location_description": "Element an dieser Position speichern",
"save": "Speichern"
},
"objects": {
"selected_categories": "Ausgewählt: {{count}} Kategorie",
"search_category": "Kategorie suchen"
}
},
"decorate": {
"no_money": "Du hast nicht genug Geld! ${{price}}",
"invalid_data": "Ungültige Daten",
"invalid_object": "Ungültiges Objekt",
"failed_update": "Update fehlgeschlagen",
"sold_furniture": "Du hast Möbel verkauft für ${{price}}",
"failed_sell": "Verkauf fehlgeschlagen",
"gizmo_mode_toggled": "Gizmo-Modus umgeschaltet auf {{mode}}",
"focused": "Fokussiert",
"unfocused": "Nicht fokussiert",
"focus_object_not_supported": "Fokussieren des Objekts wird im Maus-Dekorationsmodus nicht unterstützt",
"too_far": "Du bist zu weit vom Dekorationsbereich entfernt",
"not_in_garage": "Du bist nicht in einer Garage",
"invalid_garage": "Ungültige Garage",
"not_support_decoration": "Diese Garage unterstützt keine Dekoration",
"not_owner": "Du bist nicht Eigentümer dieser Garage",
"not_key_holder": "Du hast keinen Schlüssel für diese Garage",
"decoration_not_available": "Dekoration nicht verfügbar, jemand benutzt sie gerade",
"you_cant_select_entity": "Objektauswahl deaktiviert, du musst zuerst in die `Lager`-Kategorie gehen"
},
"furniture_creator": {
"page_title": "Möbel-Editor",
"page_description": "Erstelle und verwalte eigene Möbel für deinen Server",
"select_category": "Kategorie auswählen",
"select_category_description": "Wähle eine Möbelkategorie zur Verwaltung aus",
"select_item": "Element zur Bearbeitung auswählen",
"select_item_description": "Wähle ein existierendes Element oder erstelle ein neues",
"search_placeholder": "Möbel suchen...",
"statistics": "Statistiken",
"categories": "Kategorien",
"total_items": "Elemente",
"dynamic": "Dynamisch",
"colors": "Farben",
"items": "Elemente",
"no_results": "Keine Ergebnisse gefunden",
"try_different_search": "Versuche eine andere Suche",
"create_item": "Möbelelement erstellen",
"edit_item": "Möbelelement bearbeiten",
"category": "Kategorie",
"basic_info": "Grundinfo",
"advanced": "Erweitert",
"object_name": "Objektname",
"label": "Bezeichnung",
"item_description": "Beschreibung",
"price": "Preis",
"color_label": "Farb-Bezeichnung",
"image": "Bild",
"image_description": "Bild-URL für dieses Möbelelement angeben",
"stash": "Lager",
"stash_description": "Lagerfunktion aktivieren",
"slots": "Slots",
"max_weight": "Max. Gewicht",
"gardrobe": "Kleiderschrank",
"gardrobe_description": "Kleidungsspeicher aktivieren",
"offset": "Positionsversatz",
"preview": "Live-Vorschau",
"unnamed": "Unbenanntes Element",
"no_description": "Keine Beschreibung",
"delete": "Löschen",
"save": "Speichern",
"create": "Erstellen",
"add": "Hinzufügen",
"fill_all_fields": "Bitte alle erforderlichen Felder ausfüllen",
"object_label_required": "Objekt und Bezeichnung sind erforderlich",
"color_variations": "Farbvarianten",
"color_variations_description": "Verschiedene Farbvarianten dieses Möbels hinzufügen",
"add_color": "Farbe hinzufügen",
"add_color_description": "Neue Farbvariante hinzufügen",
"edit_color": "Farbvariante bearbeiten",
"edit_color_description": "Farbvariante dieses Elements bearbeiten",
"no_colors": "Noch keine Farbvarianten",
"add_first_color": "Klicke auf Farbe hinzufügen, um die erste Variante zu erstellen",
"image_url": "Bild-URL",
"image_error": "Bild konnte nicht geladen werden",
"no_image": "Kein Bild",
"image_tips": "Tipps",
"image_tip_1": "Direkte Bild-URLs verwenden (Endung .png, .jpg usw.)",
"image_tip_2": "Empfohlene Größe: 512×512px oder größer",
"image_tip_3": "PNG mit Transparenz funktioniert am besten",
"category_manager": "Kategorienverwaltung",
"category_manager_description": "Erstelle und verwalte Möbelkategorien",
"add_category": "Kategorie hinzufügen",
"edit_category": "Kategorie bearbeiten",
"no_categories": "Noch keine Kategorien",
"category_key": "Kategorienschlüssel",
"dynamic_icon": "Dynamisches Icon",
"dynamic_description": "Dynamische Platzierung aktivieren",
"navigation": "Navigationsreihenfolge",
"css_settings": "CSS-Einstellungen",
"item_created": "Möbelelement erfolgreich erstellt",
"item_create_failed": "Erstellung des Möbelelements fehlgeschlagen",
"item_updated": "Möbelelement erfolgreich aktualisiert",
"item_update_failed": "Aktualisierung des Möbelelements fehlgeschlagen",
"item_removed": "Möbelelement erfolgreich entfernt",
"item_remove_failed": "Entfernung des Möbelelements fehlgeschlagen",
"category_created": "Möbelkategorie erfolgreich erstellt",
"cannot_delete_config_item": "Konfigurationselemente können nicht gelöscht werden, nur Datenbankelemente",
"object_is_not_valid": "Objektname ungültig, ist es wirklich im Spiel vorhanden? {{object}}",
"screenshot_cancelled": "Screenshot abgebrochen",
"screenshot_completed": "Screenshot erfolgreich erstellt",
"token_not_set": "FiveManage-Token nicht gesetzt. Bitte in config/fivemanage.lua setzen.",
"uploading_image": "Bild wird zu FiveManage hochgeladen...",
"image_uploaded": "Bild erfolgreich zu FiveManage hochgeladen",
"object_required": "Objekt ist erforderlich",
"object_already_in_category": "Der Objektname {{object}} existiert bereits in dieser Kategorie. {{category}}."
}
}
@@ -0,0 +1,628 @@
{
"empty_list": "Δεν βρέθηκαν αντικείμενα",
"cancel": "Ακύρωση",
"delete": "Διαγραφή",
"clear": "Εκκαθάριση",
"no_garage_slots": "Δεν υπάρχει ελεύθερος χώρος σε αυτό το γκαράζ...",
"no_vehicle_owner": "Δεν υποστηρίζουμε οχήματα που δεν είναι δικά σου!",
"no_house_nearby": "Δεν υπάρχει σπίτι κοντά",
"buy_garage": "Αγορά γκαράζ για: ${{price}}",
"you_are_not_police": "Δεν είσαι αστυνομικός",
"no_vehicle_nearby": "Δεν υπάρχει όχημα κοντά",
"garage_not_available": "Το γκαράζ δεν είναι διαθέσιμο ή κατειλημμένο, δοκίμασε ξανά...",
"garage_not_found": "Το γκαράζ δεν βρέθηκε",
"garage_not_found_job": "Το γκαράζ εργασίας δεν βρέθηκε",
"garage_empty": "Το γκαράζ είναι άδειο",
"cannot_store_vehicle": "Δεν μπορείς να αποθηκεύσεις αυτό το όχημα εδώ!",
"not_driver": "Απαγορεύεται η οδήγηση του οχήματος",
"vehicle_not_spawned": "Χρησιμοποίησες το γκαράζ ταυτόχρονα με άλλον παίκτη. Δοκίμασε ξανά!",
"timeout_expired": "Λήξη χρόνου",
"no_money": "Δεν έχεις αρκετά χρήματα! ${{price}}",
"not_correct_job": "Δεν έχεις τη σωστή εργασία",
"not_correct_grade": "Δεν έχεις τον σωστό βαθμό",
"not_in_vehicle": "Δεν βρίσκεσαι σε όχημα!",
"job_vehicle_added": "Το όχημα προστέθηκε στο γκαράζ εργασίας!",
"no_vehicle_data": "Δεν βρέθηκαν δεδομένα οχήματος",
"you_are_already_in_garage": "Βρίσκεσαι ήδη σε γκαράζ!",
"sound_enabled": "Ο ήχος ενεργοποιήθηκε",
"sound_disabled": "Ο ήχος απενεργοποιήθηκε",
"sell_garage": "Ελήφθησαν χρήματα από την πώληση γκαράζ: ${{price}}",
"garage_purchase": "Αγόρασες νέο γκαράζ για: ${{price}}",
"player_not_found": "Ο παίκτης δεν βρέθηκε",
"transfer_success": "Παρέλαβες όχημα από άλλον παίκτη, στάλθηκε στο: {{garage}}",
"transfer_success_to": "Έστειλες όχημα σε άλλον παίκτη, στάλθηκε στο: {{garage}}",
"transfer_blacklisted": "Αυτό το όχημα δεν μπορεί να μεταφερθεί σε άλλον παίκτη",
"give_recovery": "Ανακτήθηκε χαμένο όχημα, στάλθηκε στο: {{garage}}, χρεώθηκες συνολικά: ${{price}}",
"impound_pay": "Το όχημα δεν είναι πλέον κατασχεμένο, πλήρωσες: ${{price}}",
"missing_type": "Δεν βρέθηκε γκαράζ για τον τύπο οχήματος: {{type}}",
"vehicle_removed": "Το όχημα αφαιρέθηκε!",
"vehicle_impounded": "Το όχημα κατασχέθηκε επιτυχώς και στάλθηκε στο: {{garage}}",
"all_vehicles_impounded": "Όλα τα οχήματα του χάρτη στάλθηκαν στην κατάσχεση!",
"repair": {
"repaired": "Το όχημα επισκευάστηκε {{plate}}"
},
"log": {
"save_vehicle": {
"title": "Αποθήκευση Οχήματος",
"description": "**Παίκτης:** {{player}} \n**Όχημα:** {{model}} \n**Πινακίδα:** {{plate}} \n**Γκαράζ:** {{garage}}"
},
"take_vehicle": {
"title": "Βγάλε Όχημα",
"description": "**Παίκτης:** {{player}} \n**Όχημα:** {{model}} \n**Πινακίδα:** {{plate}}"
},
"recovery_vehicle": {
"title": "Ανάκτηση Οχήματος",
"description": "**Παίκτης:** {{player}} \n**Όχημα:** {{model}} \n**Πινακίδα:** {{plate}} \n**Γκαράζ:** {{garage}} \n**Τιμή:** {{price}}"
},
"give_vehicle": {
"title": "Δώσε Όχημα",
"description": "**Παίκτης:** {{player}} \n**Παραλήπτης:** {{receivedPlayer}} \n**Όχημα:** {{model}} \n**Πινακίδα:** {{plate}} \n**Τύπος Οχήματος:** {{vehicleType}}"
},
"impound_vehicle": {
"title": "Κατάσχεση Οχήματος",
"description": "**Παίκτης:** {{player}} \n**Εργασία:** {{job}} \n**Πινακίδα:** {{plate}} \n**Γκαράζ:** {{garage}}"
}
},
"drawtext": {
"store_vehicle": "[E] - Αποθήκευση οχήματος",
"open_garage": "[E] - Άνοιγμα γκαράζ",
"enter_garage": "[E] - Είσοδος γκαράζ",
"public_garage": "[G] - Είσοδος σε δημόσιο γκαράζ",
"recovery": "[E] - Ανάκτηση χαμένου οχήματος (ΕΞΩ): ${{price}}",
"back_garage": "[E] - Πίσω",
"dynamic": "[E] - Αλληλεπίδραση",
"stash": "[E] - Άνοιγμα αποθήκης",
"gardrobe": "[E] - Άνοιγμα ντουλάπας",
"delete_illegal": "[E] - Διαγραφή παράνομου αντικειμένου",
"exit_point": "[E] - Σημείο εξόδου",
"entry_point": "[E] - Σημείο εισόδου",
"board_point": "[E] - Σημείο επιβίβασης",
"shell_point": "[E] - Σημείο κελύφους",
"house_point": "[E] - Σημείο σπιτιού"
},
"management": {
"no_garage_nearby": "Κανένα γκαράζ κοντά",
"no_garage_owner": "Δεν είσαι ιδιοκτήτης αυτού του γκαράζ",
"garage_price": "Τιμή γκαράζ: ${{price}}",
"garage_sell_tax": "Φόρος πώλησης γκαράζ: {{tax}}%",
"garage_sell_tax_description": "Η τιμή του γκαράζ θα πολλαπλασιαστεί με το ποσοστό φόρου",
"no_player": "Κανένας παίκτης κοντά",
"not_relate_state": "Αυτή η εντολή είναι αποκλειστική για μεσίτες ακινήτων"
},
"keyholders": {
"empty_list": "Δεν βρέθηκαν κάτοχοι κλειδιών",
"empty_out": "Δεν υπάρχουν αυτοκίνητα στους δρόμους για ανάκτηση!",
"took_keys": "Πήρες τα κλειδιά",
"already_keys": "Αυτός ο παίκτης έχει ήδη κλειδιά για αυτό το γκαράζ",
"gave_keys": "Έδωσες τα κλειδιά του {{garage}} στον {{player}}",
"received_keys": "Παρέλαβες τα κλειδιά του {{garage}}"
},
"give_vehicle": {
"info": "Το όχημα: {{model}} με πινακίδα: {{plate}} παραδόθηκε στον παίκτη: {{player}}",
"invalid_type": "Βεβαιώσου ότι χρησιμοποιείς τη σωστή εντολή για αυτό το όχημα",
"invalid_model": "Το επιλεγμένο μοντέλο δεν υπάρχει...",
"no_player_online": "Ο επιλεγμένος παίκτης δεν είναι συνδεδεμένος...",
"plate_in_use": "Αυτή η πινακίδα χρησιμοποιείται ήδη σε άλλο όχημα",
"give_info": "Το όχημα: {{model}} με πινακίδα: {{plate}} παραδόθηκε στον παίκτη: {{player}}"
},
"creator": {
"title": "Δημιουργός Γκαράζ",
"description": "Μπορείς να διαχειριστείς γκαράζ από εδώ.",
"complete_creator": "Πρέπει να ολοκληρώσεις τη δημιουργία πριν το ξανανοίξεις",
"garage_created": "Το γκαράζ δημιουργήθηκε επιτυχώς",
"garage_updated": "Το γκαράζ ενημερώθηκε επιτυχώς",
"select_menu": "Επιλογή θέσης μενού",
"select_zone": "Επιλογή σημείου μέσα στη ζώνη",
"select_positions": "Επιλογή τουλάχιστον 3 σημείων...",
"menu_location": "Θέση εισόδου",
"spawn_location": "Θέση spawn",
"create_guide": "Πάτησε ~INPUT_CELLPHONE_RIGHT~ για περιστροφή δεξιά \nΠάτησε ~INPUT_CELLPHONE_LEFT~ για περιστροφή αριστερά",
"polyzone_nearby": "Το σημείο δεν είναι μέσα στη ζώνη",
"available_slots": "{{name}}, διαθέσιμες θέσεις: {{slots}}",
"teleported_to_garage": "Τηλεμεταφέρθηκες στο {{garage}}",
"select_garage": "Επιλογή Γκαράζ",
"select_garage_description": "Επίλεξε το γκαράζ που θέλεις να δημιουργήσεις",
"fill_all_fields": "Παρακαλώ συμπλήρωσε όλα τα πεδία",
"shell_selector": {
"title": "Εσωτερικό Γκαράζ",
"description": "Επίλεξε το εσωτερικό κέλυφος για το γκαράζ σου",
"select": "Επιλογή Εσωτερικού",
"selected": "Επιλεγμένο",
"vehicle_slots": "θέσεις οχημάτων",
"change": "Αλλαγή",
"no_shell_selected": "Δεν επιλέχθηκε εσωτερικό",
"select_shell": "Επιλογή Εσωτερικού Γκαράζ",
"quick_select": "Γρήγορη Επιλογή",
"view_all": "Προβολή Όλων",
"all_shells": "Όλα τα Διαθέσιμα Εσωτερικά",
"help_text": "Χρησιμοποίησε τα βελάκια αριστερά/δεξιά για πλοήγηση. Enter για επιβεβαίωση, Backspace για ακύρωση.",
"no_shells_available": "Δεν υπάρχουν διαθέσιμα κελύφη. Πρόσθεσε ένα στο Config.Shells"
},
"price": {
"title": "Τιμή Αγοράς",
"description": "Καθόρισε την τιμή που πρέπει να πληρώσουν οι παίκτες για να αγοράσουν αυτό το γκαράζ"
},
"store_price": {
"enable": "Ενεργοποίηση Χρέωσης Αποθήκευσης Οχήματος",
"description": "Καθόρισε χρέωση για την αποθήκευση οχημάτων σε αυτό το γκαράζ"
},
"garage_type_selector": {
"title": "Τύπος Γκαράζ",
"vehicle": "Όχημα",
"vehicle_description": "Γκαράζ για οχήματα",
"plane": "Αεροπλάνο",
"plane_description": "Γκαράζ για αεροπλάνα",
"boat": "Βάρκα",
"boat_description": "Γκαράζ για βάρκες"
},
"left_panel": {
"search_garages_placeholder": "Αναζήτηση γκαράζ...",
"create_garage": "Δημιουργία Γκαράζ",
"filters": "Φίλτρα",
"results": "{{count}} αποτέλεσμα{{plural}}",
"all_garages": "Όλα",
"vehicle": "Όχημα",
"plane": "Αεροπλάνο",
"boat": "Βάρκα",
"teleport_to_garage": "Τηλεμεταφορά σε Γκαράζ",
"teleport": "Τηλεμεταφορά",
"garage_type": "Τύπος Γκαράζ",
"public": "Δημόσιο",
"private": "Ιδιωτικό",
"impound": "Κατάσχεση",
"no_garages_found": "Δεν βρέθηκαν γκαράζ",
"no_garages_available": "Δεν υπάρχουν διαθέσιμα γκαράζ",
"try_adjusting_search": "Δοκίμασε να προσαρμόσεις τα κριτήρια αναζήτησης ή δημιούργησε νέο γκαράζ",
"create_first_garage_description": "Δημιούργησε το πρώτο σου γκαράζ για να ξεκινήσεις με το σύστημα διαχείρισης γκαράζ",
"status": "Κατάσταση"
},
"garage_access_selector": {
"title": "Πρόσβαση Γκαράζ",
"public": "Δημόσιο",
"public_description": "Το γκαράζ θα είναι προσβάσιμο σε όλους",
"private": "Ιδιωτικό",
"private_description": "Το γκαράζ θα είναι προσβάσιμο μόνο στον ιδιοκτήτη",
"impound": "Κατάσχεση",
"impound_description": "Το γκαράζ θα είναι προσβάσιμο μόνο για κατασχεμένα οχήματα"
},
"interior_type_selector": {
"title": "Τύπος Εσωτερικού",
"ipl": "IPL",
"ipl_description": "Χρήση IPL (Interior Prop List) για εσωτερικό",
"shell": "Κέλυφος",
"shell_description": "Χρήση κελύφους για προσαρμοσμένο εσωτερικό"
},
"form": {
"create_garage": "Δημιουργία γκαράζ",
"edit_garage": "Επεξεργασία γκαράζ {{name}}",
"garage_type": "Τύπος Γκαράζ",
"select": "Επιλογή",
"remove": "Αφαίρεση",
"save": "Αποθήκευση",
"no_location_selected": "Δεν επιλέχθηκε τοποθεσία",
"no_location_selected_description": "Κάνε κλικ στο 'Επιλογή' για να διαλέξεις τοποθεσία",
"location_required": "Το {{label}} είναι υποχρεωτικό",
"location": {
"title": "Ρυθμίσεις Τοποθεσίας",
"zone_points": "Σημεία Ζώνης",
"zone_points_description": "Καθόρισε την περιοχή του γκαράζ",
"menu_coords": "Συντεταγμένες Μενού",
"spawn_coords": "Συντεταγμένες Spawn"
},
"access_control": {
"title": "Έλεγχος Πρόσβασης",
"jobs_section": "Εργασίες",
"gangs_section": "Συμμορίες",
"select_job": "Επίλεξε εργασία για προσθήκη",
"select_gang": "Επίλεξε συμμορία για προσθήκη",
"job": "Εργασία",
"gang": "Συμμορία",
"grades": "Βαθμοί",
"empty_list": "Δεν υπάρχουν διαθέσιμα αντικείμενα",
"no_jobs_added": "Δεν έχουν προστεθεί ακόμα εργασίες. Πρόσθεσε για περιορισμό πρόσβασης.",
"no_gangs_added": "Δεν έχουν προστεθεί ακόμα συμμορίες. Πρόσθεσε για περιορισμό πρόσβασης.",
"info": "Πρόσθεσε πολλαπλές εργασίες και συμμορίες με συγκεκριμένους βαθμούς για να ελέγχεις την πρόσβαση. Αν δεν προστεθεί τίποτα, το γκαράζ είναι ανοιχτό σε όλους."
}
},
"remove": {
"title": "Διαγραφή γκαράζ",
"description": "Είσαι σίγουρος ότι θέλεις να διαγράψεις αυτό το γκαράζ;",
"confirm": "Διαγραφή"
},
"cancel": {
"title": "Ακύρωση δημιουργίας γκαράζ",
"description": "Είσαι σίγουρος ότι θέλεις να ακυρώσεις τη δημιουργία;",
"confirm": "Επιβεβαίωση"
},
"raycast": {
"info": "Βεβαιώσου ότι επιλέγεις ολόκληρη την περιοχή του γκαράζ. Διαφορετικά μπορεί να υπάρξουν προβλήματα.",
"done": "Έτοιμο",
"add_point": "Προσθήκη Σημείου",
"rotate_z": "Περιστροφή Κατεύθυνσης +/-",
"rotate_z_scroll": "Περιστροφή Κατεύθυνσης +/-",
"increase_z": "Όρια Z +/-",
"completed": "Ολοκλήρωσες όλα τα σημεία",
"selected_point": "Επέλεξες {{count}} σημεία",
"no_point_selected": "Δεν επέλεξες κανένα σημείο",
"point_size": "Μέγεθος Σημείου +/-",
"select_entity": "Επιλογή Αντικειμένου",
"not_valid_entity": "Δεν επιλέγεις έγκυρο αντικείμενο. Παρακαλώ επίλεξε {{entityType}}",
"selected_entity": "Επέλεξες {{count}} αντικείμενα",
"entity_disabled": "Δεν μπορείς να επιλέξεις αυτό το αντικείμενο",
"select_entity_info": "Παρακαλώ επίλεξε {{entityType}}",
"model_is_not_valid": "Το μοντέλο {{model}} δεν είναι έγκυρο",
"must_be_completed": "Πρέπει να ολοκληρώσεις το raycast πριν ανοίξεις τον δημιουργό",
"not_in_points": "Το επιλεγμένο σημείο δεν είναι στην περιοχή του γκαράζ",
"point_in_another_zone": "Το επιλεγμένο σημείο είναι σε άλλη ζώνη.",
"press_enter_to_select": "Πάτησε Enter για επιλογή",
"undo": "Αναίρεση"
}
},
"blip": {
"impound": "Κατασχεμένο",
"garage": "Γκαράζ προς πώληση",
"plane": "Αεροδρόμιο προς πώληση",
"boat": "Λιμάνι προς πώληση"
},
"menu": {
"vehicle_loading": "Φόρτωση",
"vehicle_loading_subtitle": "Προετοιμασία οχήματος...",
"preview_mode_active": "Λειτουργία Προεπισκόπησης Ενεργή",
"preview_mode_subtitle": "Περιστροφή με ποντίκι • F9 για έξοδο",
"empty_garage": "Άδειο Γκαράζ",
"empty_garage_description": "Δεν υπάρχει όχημα σε αυτό το γκαράζ. Χρησιμοποίησε το `Φέρε Όχημα`",
"take_vehicle_out": "Βγάλε Όχημα",
"take_vehicle_out_description": "Είσαι σίγουρος ότι θέλεις να βγάλεις αυτό το όχημα;",
"take_vehicle_out_price": "Θα χρεωθείς {{price}}",
"take_vehicle_out_free": "Μπορείς να βγάλεις αυτό το όχημα δωρεάν",
"cancel": "Ακύρωση",
"confirm": "Επιβεβαίωση",
"power": "Ισχύς",
"acceleration": "Επιτάχυνση",
"traction": "Πρόσφυση",
"brakes": "Φρένα",
"no_vehicle_selected": "Δεν επιλέχθηκε όχημα",
"header": {
"favorite_button": "Αγαπημένο",
"total_vehicles": "Συνολικά Οχήματα",
"balance": "Υπόλοιπο: {{balance}}",
"balance_title": "Υπόλοιπο",
"balance_badge": "$",
"set_star": "Βάλε Αστέρι",
"set_tag": "Βάλε Ετικέτα",
"send_vehicle": "Αποστολή Οχήματος",
"transfer_vehicle": "Μεταφορά Οχήματος",
"bring_vehicle": "Φέρε Όχημα",
"vehicle_transfer_success": "Το όχημα μεταφέρθηκε στο {{garage}}",
"money_not_enough": "Δεν έχεις αρκετά χρήματα για μεταφορά οχήματος {{price}}",
"vehicle_transfer_player_success": "Το όχημα {{plate}} μεταφέρθηκε στον {{player}}",
"no_slot_available": "Δεν υπάρχει διαθέσιμη θέση στο γκαράζ",
"vehicle_brought": "Το όχημα {{vehicle}} έφτασε",
"marked_as_favorite": "Ορίστηκε ως αγαπημένο",
"unmarked_as_favorite": "Αφαιρέθηκε από τα αγαπημένα"
},
"empty": {
"title": "Η λίστα είναι άδεια",
"description": "Δεν βρέθηκαν αντικείμενα",
"search_title": "Δεν βρέθηκαν αποτελέσματα",
"search_description": "δεν υπάρχει αποτέλεσμα για '{{searchQuery}}'",
"search_helper": "Δοκίμασε διαφορετικό όρο αναζήτησης",
"empty_helper": "Δοκίμασε αργότερα"
},
"footer": {
"previous_vehicle": "Προηγούμενο Όχημα",
"previous_vehicle_description": "Αριστερό βελάκι για προηγούμενο όχημα",
"next_vehicle": "Επόμενο Όχημα",
"next_vehicle_description": "Δεξί βελάκι για επόμενο όχημα",
"preview_mode": "Λειτουργία Προεπισκόπησης",
"preview_mode_description": "Εξέταση οχήματος σε 3D",
"music_mode": "Λειτουργία Μουσικής",
"music_mode_description": "Ενεργοποίηση/Απενεργοποίηση μουσικής",
"exit_garage": "Έξοδος από Γκαράζ",
"exit_garage_description": "ESC για έξοδο από το γκαράζ"
},
"out_vehicles_modal": {
"title": "Οχήματα Εξωτερικά",
"description": "Επίλεξε το όχημα που θέλεις να φέρεις",
"search_placeholder": "Αναζήτηση οχήματος ανά όνομα ή μάρκα",
"search_helper": "Δοκίμασε διαφορετικό όρο",
"empty_helper": "Δοκίμασε αργότερα",
"list_title": "Λίστα Οχημάτων",
"list_description": "Βρέθηκε {{count}} όχημα",
"list_helper": "Δοκίμασε διαφορετικό όρο",
"list_empty_helper": "Δοκίμασε αργότερα",
"cancel": "Ακύρωση",
"bring_vehicle": "Φέρε Όχημα",
"loading": "Φόρτωση οχημάτων...",
"loading_helper": "Παρακαλώ περίμενε",
"selected": "Επιλεγμένο"
},
"player_list_modal": {
"title": "Λίστα Παικτών",
"description": "Επίλεξε τον παίκτη στον οποίο θέλεις να μεταφέρεις το όχημα",
"search_placeholder": "Αναζήτηση παίκτη ανά όνομα",
"search_helper": "Δοκίμασε διαφορετικό όρο",
"empty_helper": "Δοκίμασε αργότερα",
"list_title": "Λίστα Παικτών",
"list_description": "Βρέθηκε {{count}} παίκτης",
"list_helper": "Δοκίμασε διαφορετικό όρο",
"list_empty_helper": "Δοκίμασε αργότερα",
"cancel": "Ακύρωση",
"transfer_vehicle": "Μεταφορά Οχήματος",
"loading": "Φόρτωση παικτών...",
"loading_helper": "Παρακαλώ περίμενε",
"selected": "Επιλεγμένο"
},
"loading": {
"title": "Φόρτωση",
"description": "Παρακαλώ περίμενε",
"helper": "Παρακαλώ περίμενε"
},
"send_vehicle_modal": {
"title": "Αποστολή Οχήματος",
"description": "Επίλεξε το γκαράζ στο οποίο θέλεις να στείλεις το όχημα",
"search_placeholder": "Αναζήτηση γκαράζ ανά όνομα",
"search_helper": "Δοκίμασε διαφορετικό όρο",
"empty_helper": "Δοκίμασε αργότερα",
"list_title": "Λίστα Γκαράζ",
"list_description": "Βρέθηκε {{count}} γκαράζ",
"list_helper": "Δοκίμασε διαφορετικό όρο",
"list_empty_helper": "Δοκίμασε αργότερα",
"cancel": "Ακύρωση",
"send_vehicle": "Αποστολή Οχήματος",
"loading": "Φόρτωση γκαράζ...",
"loading_helper": "Παρακαλώ περίμενε",
"selected": "Επιλεγμένο",
"garage_description": "Το όχημα θα σταλεί στο επιλεγμένο γκαράζ"
},
"tag_modal": {
"title": "Ετικέτα",
"description": "Ορισμός ετικέτας για το όχημα {{name}}",
"current_tag": "Τρέχουσα Ετικέτα",
"new_tag": "Νέα Ετικέτα",
"new_tag_placeholder": "Εισαγωγή νέας ετικέτας",
"popular_tags": "Δημοφιλείς Ετικέτες",
"save": "Αποθήκευση",
"cancel": "Ακύρωση",
"notification": "Η ετικέτα ενημερώθηκε! Νέα ετικέτα: {{tag}}"
},
"impound_info": {
"title": "Πληροφορίες Κατάσχεσης",
"description": "Πληροφορίες Κατάσχεσης",
"current_tag": "Τρέχουσα Ετικέτα",
"new_tag": "Νέα Ετικέτα",
"new_tag_placeholder": "Εισαγωγή νέας ετικέτας",
"time_left": "Χρόνος που απομένει",
"price": "Τιμή",
"garage": "Γκαράζ",
"pay_fine": "Πληρωμή Πρόστιμου",
"pay_fine_description": "Απλώς πλήρωσε το πρόστιμο για να απελευθερώσεις το όχημα",
"pay_fine_button": "Πληρωμή Πρόστιμου",
"pay_fine_button_description": "Πρέπει να περιμένεις να περάσει ο χρόνος για να πληρώσεις το πρόστιμο",
"yes": "Ναι",
"no": "Όχι",
"note": "Σημείωση"
},
"impound_modal": {
"title": "Κατάσχεση",
"description": "Κατάσχεση του οχήματος",
"cancel": "Ακύρωση",
"confirm": "Επιβεβαίωση",
"impound_garage": "Γκαράζ Κατάσχεσης",
"impound_time": "Χρόνος Κατάσχεσης",
"pay_to_release": "Πληρωμή για Απελευθέρωση",
"pay_to_release_description": "Αν το ορίσεις σε ναι, ο παίκτης μπορεί να πληρώσει και να απελευθερώσει το όχημα χωρίς να περιμένει",
"impound_fee": "Τέλος Κατάσχεσης",
"note": "Σημείωση",
"note_placeholder": "Εισαγωγή σημείωσης",
"summary": "Σύνοψη",
"selected_garage": "Επιλεγμένο Γκαράζ",
"select_garage": "Επιλογή Γκαράζ",
"time": "Χρόνος",
"fee": "Τέλος",
"send_to_impound": "Αποστολή σε Κατάσχεση",
"yes": "Ναι",
"no": "Όχι",
"error": {
"select_garage": "Παρακαλώ επίλεξε γκαράζ",
"select_time": "Παρακαλώ επίλεξε χρόνο",
"submit": "Παρουσιάστηκε σφάλμα κατά την αποστολή του οχήματος σε κατάσχεση"
},
"not_selected": "Μη Επιλεγμένο",
"minutes": "Λεπτά",
"seconds": "Δευτερόλεπτα"
},
"info_card": {
"engine_health": "Υγεία Κινητήρα",
"body_health": "Υγεία Αμαξώματος",
"fuel_level": "Επίπεδο Καυσίμου",
"brakes": "Φρένα",
"acceleration": "Επιτάχυνση",
"top_speed": "Μέγιστη Ταχύτητα",
"traction": "Πρόσφυση",
"close": "Κλείσιμο"
}
},
"decorate_ui": {
"price": "${{price}}",
"clear": "Εκκαθάριση",
"items_found": "Βρέθηκαν {{count}} αντικείμενα",
"cancel": "Ακύρωση",
"confirm": "Επιβεβαίωση",
"item_list": {
"stash": "Αποθήκη",
"gardrobe": "Ντουλάπα",
"empty": {
"title": "Δεν επιλέχθηκε αντικείμενο",
"description": "Επίλεξε κατηγορία αντικειμένων για διακόσμηση. Μπορείς να ξεκινήσεις επιλέγοντας τον τύπο από το αριστερό μενού.",
"helper": "Επίλεξε κατηγορία από το αριστερό μενού",
"search_title": "Δεν βρέθηκαν αποτελέσματα",
"search_description": "Δεν υπάρχει αποτέλεσμα για '{{searchQuery}}'",
"search_helper": "Δοκίμασε διαφορετικό όρο"
}
},
"header": {
"search_placeholder": "Αναζήτηση Επίπλων"
},
"help": {
"title": "Χειρισμός & Βοήθεια",
"description": "Όλοι οι χειρισμοί στη λειτουργία διακόσμησης",
"mouse_control": "Χειρισμός με Ποντίκι",
"mouse_control_description": "Μετακίνηση επίπλων με το ποντίκι",
"keyboard_control": "Χειρισμός με Πληκτρολόγιο",
"f5_description": "Απόκρυψη/Εμφάνιση δείκτη",
"f6_description": "Ενεργοποίηση/Απενεργοποίηση ελεύθερης κάμερας",
"wasd_description": "Μετακίνηση επίπλων με WASD",
"esc_description": "Έξοδος από το μενού διακόσμησης χωρίς αποθήκευση",
"important_tips": "Σημαντικές Συμβουλές",
"important_tips_description": "Κάποια έπιπλα περιλαμβάνουν επιλογές <typeColor>τύπου και χρώματος</typeColor> και μπορεί να έχουν λειτουργίες <storageWardrobe>αποθήκης ή ντουλάπας</storageWardrobe>."
},
"furniture_info": {
"select_color": "Επιλογή Χρώματος",
"edit_mode": "Λειτουργία Επεξεργασίας",
"translate": "Μετακίνηση",
"rotate": "Περιστροφή"
},
"buy": {
"price_info": "Πληροφορίες Τιμής",
"selected_color": "Επιλεγμένο Χρώμα",
"price": "Τιμή",
"buy": "Αγορά - ${{price}}",
"title": "Είσαι σίγουρος ότι θέλεις να αγοράσεις αυτό το αντικείμενο;",
"description": "Όταν αγοράσεις αυτό το αντικείμενο, θα λάβεις ${{price}}"
},
"categories": {
"dynamic": "Δυναμικό",
"objects": "Αντικείμενα",
"stash": "Αποθήκη"
},
"stash": {
"no_selected_item": "Δεν επιλέχθηκε αντικείμενο",
"no_selected_item_description": "Επίλεξε αντικείμενο από τη λίστα δεξιά για λεπτομέρειες. Εδώ εμφανίζονται όλα τα διακοσμητικά σου αντικείμενα.",
"in_stash": "Στην Αποθήκη",
"not_in_stash": "Εκτός Αποθήκης",
"furniture_management": "Διαχείριση Επίπλων",
"put_in_stash": "Βάλε στην Αποθήκη",
"put_in_stash_description": "Βάλε το αντικείμενο στην αποθήκη",
"remove_from_stash": "Βγάλε από την Αποθήκη",
"remove_from_stash_description": "Βγάλε το αντικείμενο από την αποθήκη",
"sell": "Πούλησε Έπιπλο",
"sell_description": "Πούλησε το αντικείμενο για ${{price}}",
"are_sure_sell": "Είσαι σίγουρος ότι θέλεις να πουλήσεις αυτό το αντικείμενο;",
"are_sure_sell_description": "Όταν πουλήσεις αυτό το αντικείμενο, θα λάβεις ${{price}}",
"save_location": "Αποθήκευση Θέσης",
"save_location_description": "Αποθήκευσε το αντικείμενο σε αυτή τη θέση",
"save": "Αποθήκευση"
},
"objects": {
"selected_categories": "Επιλεγμένες: {{count}} κατηγορία",
"search_category": "Αναζήτηση κατηγορίας"
}
},
"decorate": {
"no_money": "Δεν έχεις αρκετά χρήματα! ${{price}}",
"invalid_data": "Μη έγκυρα δεδομένα",
"invalid_object": "Μη έγκυρο αντικείμενο",
"failed_update": "Η ενημέρωση απέτυχε",
"sold_furniture": "Πούλησες έπιπλο για ${{price}}",
"failed_sell": "Η πώληση απέτυχε",
"gizmo_mode_toggled": "Η λειτουργία Gizmo άλλαξε σε {{mode}}",
"focused": "Εστιασμένο",
"unfocused": "Μη εστιασμένο",
"focus_object_not_supported": "Η εστίαση σε αντικείμενο δεν υποστηρίζεται στη λειτουργία διακόσμησης με ποντίκι",
"too_far": "Είσαι πολύ μακριά από την περιοχή διακόσμησης",
"not_in_garage": "Δεν βρίσκεσαι σε γκαράζ",
"invalid_garage": "Μη έγκυρο γκαράζ",
"not_support_decoration": "Αυτό το γκαράζ δεν υποστηρίζει διακόσμηση",
"not_owner": "Δεν είσαι ιδιοκτήτης αυτού του γκαράζ",
"not_key_holder": "Δεν έχεις κλειδιά για αυτό το γκαράζ",
"decoration_not_available": "Η διακόσμηση δεν είναι διαθέσιμη, κάποιος τη χρησιμοποιεί",
"you_cant_select_entity": "Η επιλογή αντικειμένων είναι απενεργοποιημένη, πήγαινε πρώτα στην κατηγορία `αποθήκη`"
},
"furniture_creator": {
"page_title": "Δημιουργός Επίπλων",
"page_description": "Δημιουργία και διαχείριση προσαρμοσμένων επίπλων για τον server σου",
"select_category": "Επιλογή κατηγορίας",
"select_category_description": "Επίλεξε κατηγορία επίπλων για διαχείριση αντικειμένων",
"select_item": "Επιλογή αντικειμένου για επεξεργασία",
"select_item_description": "Επίλεξε υπάρχον αντικείμενο ή δημιούργησε νέο",
"search_placeholder": "Αναζήτηση επίπλων...",
"statistics": "Στατιστικά",
"categories": "κατηγορίες",
"total_items": "Αντικείμενα",
"dynamic": "Δυναμικό",
"colors": "Χρώματα",
"items": "αντικείμενα",
"no_results": "Δεν βρέθηκαν αποτελέσματα",
"try_different_search": "Δοκίμασε διαφορετική αναζήτηση",
"create_item": "Δημιουργία Αντικειμένου Επίπλου",
"edit_item": "Επεξεργασία Αντικειμένου Επίπλου",
"category": "Κατηγορία",
"basic_info": "Βασικές Πληροφορίες",
"advanced": "Προχωρημένες",
"object_name": "Όνομα Αντικειμένου",
"label": "Ετικέτα",
"item_description": "Περιγραφή",
"price": "Τιμή",
"color_label": "Ετικέτα Χρώματος",
"image": "Εικόνα",
"image_description": "Παροχή URL εικόνας για αυτό το αντικείμενο",
"stash": "Αποθήκη",
"stash_description": "Ενεργοποίηση λειτουργίας αποθήκευσης",
"slots": "Θέσεις",
"max_weight": "Μέγιστο Βάρος",
"gardrobe": "Ντουλάπα",
"gardrobe_description": "Ενεργοποίηση αποθήκευσης ρούχων",
"offset": "Μετατόπιση Θέσης",
"preview": "Ζωντανή Προεπισκόπηση",
"unnamed": "Ανώνυμο Αντικείμενο",
"no_description": "Χωρίς περιγραφή",
"delete": "Διαγραφή",
"save": "Αποθήκευση",
"create": "Δημιουργία",
"add": "Προσθήκη",
"fill_all_fields": "Παρακαλώ συμπλήρωσε όλα τα υποχρεωτικά πεδία",
"object_label_required": "Το αντικείμενο και η ετικέτα είναι υποχρεωτικά",
"color_variations": "Παραλλαγές Χρώματος",
"color_variations_description": "Πρόσθεσε διαφορετικές χρωματικές παραλλαγές αυτού του αντικειμένου",
"add_color": "Προσθήκη Χρώματος",
"add_color_description": "Πρόσθεσε νέα χρωματική παραλλαγή",
"edit_color": "Επεξεργασία Χρωματικής Παραλλαγής",
"edit_color_description": "Επεξεργασία χρωματικής παραλλαγής αυτού του αντικειμένου",
"no_colors": "Δεν υπάρχουν ακόμα χρωματικές παραλλαγές",
"add_first_color": "Κάνε κλικ στο Προσθήκη Χρώματος για να δημιουργήσεις την πρώτη παραλλαγή",
"image_url": "URL Εικόνας",
"image_error": "Αποτυχία φόρτωσης εικόνας",
"no_image": "Χωρίς εικόνα",
"image_tips": "Συμβουλές",
"image_tip_1": "Χρησιμοποίησε απευθείας URL εικόνων (τελειώνουν σε .png, .jpg κλπ.)",
"image_tip_2": "Προτεινόμενο μέγεθος: 512x512px ή μεγαλύτερο",
"image_tip_3": "PNG με διαφάνεια λειτουργεί καλύτερα",
"category_manager": "Διαχειριστής Κατηγοριών",
"category_manager_description": "Δημιουργία και διαχείριση κατηγοριών επίπλων",
"add_category": "Προσθήκη Κατηγορίας",
"edit_category": "Επεξεργασία Κατηγορίας",
"no_categories": "Δεν υπάρχουν ακόμα κατηγορίες",
"category_key": "Κλειδί Κατηγορίας",
"dynamic_icon": "Δυναμικό Εικονίδιο",
"dynamic_description": "Ενεργοποίηση δυναμικής τοποθέτησης",
"navigation": "Σειρά Πλοήγησης",
"css_settings": "Ρυθμίσεις CSS",
"item_created": "Το αντικείμενο επίπλου δημιουργήθηκε επιτυχώς",
"item_create_failed": "Η δημιουργία αντικειμένου επίπλου απέτυχε",
"item_updated": "Το αντικείμενο επίπλου ενημερώθηκε επιτυχώς",
"item_update_failed": "Η ενημέρωση αντικειμένου επίπλου απέτυχε",
"item_removed": "Το αντικείμενο επίπλου αφαιρέθηκε επιτυχώς",
"item_remove_failed": "Η αφαίρεση αντικειμένου επίπλου απέτυχε",
"category_created": "Η κατηγορία επίπλων δημιουργήθηκε επιτυχώς",
"cannot_delete_config_item": "Δεν είναι δυνατή η διαγραφή αντικειμένων ρυθμίσεων, μόνο αντικειμένων βάσης δεδομένων",
"object_is_not_valid": "Το όνομα αντικειμένου δεν είναι έγκυρο, υπάρχει πραγματικά στο παιχνίδι; {{object}}",
"screenshot_cancelled": "Η λήψη οθόνης ακυρώθηκε",
"screenshot_completed": "Η λήψη οθόνης ολοκληρώθηκε επιτυχώς",
"token_not_set": "Το token FiveManage δεν έχει οριστεί. Ορίστε το στο config/fivemanage.lua.",
"uploading_image": "Ανέβασμα εικόνας στο FiveManage...",
"image_uploaded": "Η εικόνα ανέβηκε επιτυχώς στο FiveManage",
"object_required": "Το αντικείμενο είναι υποχρεωτικό",
"object_already_in_category": "Το όνομα αντικειμένου {{object}} υπάρχει ήδη σε αυτή την κατηγορία. {{category}}."
}
}

Some files were not shown because too many files have changed in this diff Show More