Limitações e Considerações

🔒 Restrições Técnicas

Tipos de Dados

  • Sempre Strings: Todos os valores são armazenados e retornados como strings

  • JSON Suportado: Desenvolvedor pode usar JSON para dados complexos

  • Conversão Manual: Cabe ao desenvolvedor converter tipos conforme necessário

-- ✅ Dados complexos usando JSON (recomendado para o desenvolvedor)
FEATURE_CONFIG = '{"premium":{"enabled":true,"max_users":50},"debug":{"level":2,"remote_log":true}}'

local function getFeatureConfig()
    local configJson = LockSystem.Envs.Get("FEATURE_CONFIG")
    if not configJson then return {} end
    
    local success, config = pcall(fromJSON, configJson)
    return success and config or {}
end

-- ✅ Alternativa - múltiplas variáveis simples
FEATURE_PREMIUM_ENABLED = "true"
FEATURE_PREMIUM_MAX_USERS = "50"
DEBUG_LEVEL = "2"
DEBUG_REMOTE_LOG = "true"

Limitações de Tamanho

  • Nome da Variável: Máximo 64 caracteres

  • Valor: Máximo 1024 caracteres por variável

  • Quantidade: Máximo 100 variáveis por resource

-- ❌ Nome muito longo
CONFIGURACAO_MUITO_LONGA_DO_SISTEMA_DE_ECONOMIA_AVANCADO = "valor"

-- ✅ Nome conciso
ECONOMIA_CONFIG_AVANCADA = "valor"

⚠️ Considerações de Performance

Cache e Frequência de Acesso

-- ❌ Evitar - consultas excessivas em loops
for i = 1, 1000 do
    local config = LockSystem.Envs.Get("ALGUMA_CONFIG")  -- Ineficiente
    -- processar...
end

-- ✅ Recomendado - cache local
local config = LockSystem.Envs.Get("ALGUMA_CONFIG")
for i = 1, 1000 do
    -- usar config cached
    -- processar...
end

Inicialização vs Runtime

-- ✅ Carregar configurações na inicialização
local serverConfigs = {}

addEventHandler("onResourceStart", resourceRoot, function()
    serverConfigs.nome = LockSystem.Envs.Get("SERVIDOR_NOME")
    serverConfigs.maxPlayers = tonumber(LockSystem.Envs.Get("MAX_PLAYERS"))
    serverConfigs.economia = tonumber(LockSystem.Envs.Get("MULTIPLICADOR_ECONOMIA"))
end)

-- ✅ Usar configurações pré-carregadas
local function aplicarBonus(player)
    local bonus = serverConfigs.economia or 1.0
    -- aplicar bonus...
end

🚫 O que NÃO é Possível

-- ❌ Modificar variáveis pelo código
LockSystem.Envs.Set("NOVA_VAR", "valor")  -- Não existe

-- ❌ Listar todas as variáveis
local todasVars = LockSystem.Envs.GetAll()  -- Não existe

-- ❌ Verificar se variável existe sem acessá-la
local existe = LockSystem.Envs.Exists("VAR_NAME")  -- Não existe

-- ❌ Observar mudanças instantâneas
LockSystem.Envs.OnChange("VAR_NAME", callback)  -- Não existe
-- Alterações são sincronizadas a cada 10 minutos

💡 Alternativas para Limitações

Para Dados Complexos - Use JSON Strings

-- Desenvolvedor define configurações complexas da resource:
-- SYSTEM_CONFIG = '{"security":{"level":2,"anti_crack":true},"features":{"premium":true,"beta":false},"limits":{"max_users":100,"timeout":30}}'

local function getSystemConfig()
    local jsonStr = LockSystem.Envs.Get("SYSTEM_CONFIG")
    if not jsonStr then return {} end
    
    local success, config = pcall(fromJSON, jsonStr)
    return success and config or {}
end

local systemConfig = getSystemConfig()
local securityLevel = systemConfig.security and systemConfig.security.level or 1
local premiumEnabled = systemConfig.features and systemConfig.features.premium or false
local maxUsers = systemConfig.limits and systemConfig.limits.max_users or 50

Para Arrays - Use Strings Separadas

-- No painel:
-- ADMINS_LISTA = "Admin1,SuperAdmin,Moderador1"
-- VEICULOS_VIP = "Infernus,Cheetah,Banshee"

local function parseList(listStr)
    if not listStr then return {} end
    
    local list = {}
    for item in listStr:gmatch("([^,]+)") do
        table.insert(list, item:trim())
    end
    return list
end

local adminsList = parseList(LockSystem.Envs.Get("ADMINS_LISTA"))
local vipVehicles = parseList(LockSystem.Envs.Get("VEICULOS_VIP"))

Atualizado