# Configuração

Os ajustes desta página ficam em `config.lua`. Altere os campos das tabelas existentes e reinicie o recurso para aplicar as mudanças.

## Valores iniciais e ajustes salvos

As lojas e regras de progressão do arquivo servem como configuração inicial. Depois que forem salvos pelo painel administrativo, os valores efetivos são mantidos entre reinicializações. Alterá-los no arquivo não substitui automaticamente o que foi salvo: use o painel para atualizar lojas, regras e opções do sistema já inicializadas.

Idioma, providers, bridges, câmera e roupa de prévia são configurados no arquivo. As fontes e tatuagens estão descritas em [catálogo e packs](https://docs.cxgstudios.com/docs/pt-BR/01-cxg-tattoos/04-catalogo.md).

## Idioma global

```lua
Config.Locale = 'es'
Config.LocaleFallback = 'en'
```

`Locale` define o idioma da interface e das mensagens para todos os jogadores. Reinicie o recurso após alterá-lo; o jogador não pode mudá-lo pela NUI. `LocaleFallback` é o idioma de reserva.

Idiomas incluídos: `en`, `es`, `pt-BR`, `fr`, `de`, `it`, `pl`, `ru`, `tr`, `th` e `ar`. A interface em árabe usa direção de leitura da direita para a esquerda.

## Sistema de identidades

`Config.Identity` configura a integração com o sistema de identidades do servidor. Define como obter o identificador do personagem ou da conta usado pelo recurso para salvar e recuperar tatuagens, XP e blueprints.

```lua
Config.Identity.mode = 'auto'
Config.Identity.qbxResource = 'qbx_core'
```

| Modo | Uso |
| --- | --- |
| `auto` | No Qbox, usa o identificador do personagem ativo (`citizenid`). Em outros servidores, usa o identificador estável do FiveM. |
| `qbx_character` | Usa explicitamente o identificador de personagem do Qbox (`citizenid`). |
| `license` | Usa a licença do FiveM como identificador da conta. Os personagens dessa conta compartilham tatuagens, XP e blueprints. |

Escolha o modo antes de abrir o recurso aos jogadores. Alterá-lo depois muda a identidade consultada; os dados não são transferidos automaticamente entre modos. Não escolha `license` se quiser separar as tatuagens por personagem de uma conta.

## Aviso de interação

```lua
Config.HelpText.enabled = true
Config.HelpText.provider = 'auto'
Config.HelpText.position = 'left-center'
```

| Campo | Valores ou efeito |
| --- | --- |
| `enabled` | Mostra ou oculta o aviso de interação das lojas com marcador. |
| `provider` | `auto`, `ox_lib` ou `native`. `auto` usa TextUI quando disponível e o aviso nativo caso contrário. |
| `position` | `left-center`, `right-center`, `top-center` ou `bottom-center`, para TextUI. |
| `style` | Cores, borda, sombra, tipografia e espaçamento interno do TextUI. |

Exemplo de estilo:

```lua
Config.HelpText.style.backgroundColor = '#172328'
Config.HelpText.style.color = '#eef3f3'
Config.HelpText.style.fontSize = '15px'
```

## Lojas iniciais

`Config.Shops` inclui seis locais. Para alterar uma entrada inicial, preserve sua estrutura:

```lua
{
    label = 'Tattoo Studio',
    coords = vector3(322.62, 180.34, 103.59),
    heading = 156.2,
    drawDistance = 10.0,
    interactDistance = 1.5,
    shopRadius = 4.0,
    marker = {
        type = 1,
        scale = vector3(1.0, 1.0, 1.0),
        color = { r = 255, g = 100, b = 0, a = 100 },
    },
},
```

| Campo | Uso |
| --- | --- |
| `label` | Nome da loja. |
| `coords`, `heading` | Posição e orientação. |
| `drawDistance` | Distância de exibição do marcador. |
| `interactDistance` | Distância para interagir. |
| `shopRadius` | Raio dentro do qual a operação da loja é autorizada. |
| `marker.type`, `scale`, `color` | Aparência do marcador. |

Mantenha `interactDistance` dentro de `shopRadius`. Para lojas já criadas, use a seção de lojas do painel administrativo; editar o arquivo não recria nem substitui essas lojas.

## Níveis e XP

| Ajuste de `Config.Levels` | Valor inicial | Uso |
| --- | --- | --- |
| `enabled` | `true` | Ativa progressão, requisitos e descontos. |
| `maxLevel` | `10` | Limite de nível. |
| `defaultXpPerTattoo` | `10` | XP para tatuagens sem `Xp` definido. |
| `thresholds` | Níveis 1 a 10 | XP acumulado necessário para cada nível. |
| `formula.base`, `formula.exponent` | `100`, `1.5` | Parâmetros da fórmula alternativa de limiares de XP. |
| `zoneRequirements` | `1` para cada zona | Requisito por zona quando não há requisito individual. |
| `discounts` | Ativado, `3` por nível e máximo `25` | Desconto percentual. |
| `blueprintSlots` | Base `5`, incremento `3` | Vagas de blueprints conforme o nível. |

Os limiares de XP devem começar no nível 1 com 0 XP, seguir sem lacunas e aumentar a XP necessária:

```lua
Config.Levels.thresholds = {
    { level = 1, xpRequired = 0 },
    { level = 2, xpRequired = 100 },
    { level = 3, xpRequired = 250 },
}
Config.Levels.maxLevel = 3
```

O desconto é calculado como `nível × perLevel`, limitado por `maxDiscount`. Com os valores iniciais, o nível 5 recebe 15%, e o desconto máximo é 25%.

As vagas são calculadas como `base + (nível - 1) × perLevel`. Na configuração inicial, o nível 1 tem 5 vagas e o nível 5 tem 17.

Um `RequiredLevel` individual do catálogo tem prioridade sobre o requisito da zona. Consulte [campos do catálogo](https://docs.cxgstudios.com/docs/pt-BR/01-cxg-tattoos/04-catalogo.md).

Ao desativar os níveis, não há bloqueios por nível, XP nem descontos; o limite de blueprints usa `Config.Blueprints.maxPerPlayer`. Desativar o sistema preserva a XP salva. Em instalações já inicializadas, atualize também o estado efetivo pelo painel.

## Blueprints

Os blueprints armazenam grupos de tatuagens e permitem compartilhá-los por códigos. Os limites iniciais estão em `Config.Blueprints`:

| Campo | Valor inicial | Uso |
| --- | --- | --- |
| `enabled` | `true` | Ativa o sistema. |
| `codePrefix` | `INK` | Prefixo dos códigos, por exemplo `INK-A3X9`. |
| `codeLength` | `4` | Número de caracteres após o prefixo. |
| `maxPerPlayer` | `20` | Vagas usadas quando não há progressão ativa. |
| `maxTattoosPerBlueprint` | `50` | Máximo de tatuagens por grupo. |
| `nameMaxLength` | `60` | Comprimento máximo do nome. |

Resgatar um código prepara as tatuagens no fluxo de compra; isso não concede uma compra grátis. A economia é configurada em [integrações](https://docs.cxgstudios.com/docs/pt-BR/01-cxg-tattoos/05-integraciones.md).

## Câmera

| Tabela | O que controla |
| --- | --- |
| `CameraOffsets` | Osso-alvo, distância, offsets e campo de visão por zona. |
| `CameraFraming` | Composição geral e deslocamento do ponto de foco. |
| `CameraFramingBySide` | Ajustes adicionais para vistas frontal e traseira. |
| `CameraManualControls` | Controles manuais, incrementos de movimento, rotação, zoom e limites. |

As zonas configuradas são `ZONE_HEAD`, `ZONE_TORSO`, `ZONE_LEFT_ARM`, `ZONE_RIGHT_ARM`, `ZONE_LEFT_LEG` e `ZONE_RIGHT_LEG`.

Exemplos de alterações pontuais:

```lua
Config.CameraOffsets['ZONE_TORSO'].fov = 50.0
Config.CameraFraming.screenOffset = 0.35
Config.CameraManualControls.enabled = true
Config.CameraManualControls.step = 0.035
Config.CameraManualControls.zoomStep = 0.08
```

Um `screenOffset` positivo posiciona o personagem à esquerda, reservando espaço para o menu à direita. `lookAtOffsetX/Y/Z` altera o ponto de foco; `camOffsetX/Y/Z` dos ajustes por lado altera a posição da câmera.

Nos controles manuais, `horizontalDegrees` e `rotationStepDegrees` ajustam a rotação. `ranges.y/z`, `radialClamp` e `maxDistance` limitam deslocamentos. `zoomCompositionMinBias` ajusta a centralização ao aproximar o zoom. Altere um valor por vez e teste as seis zonas com personagens masculinos e femininos.

## Roupa de prévia

`Config.PreviewOutfit` permite liberar as áreas tatuadas enquanto a interface está aberta:

```lua
Config.PreviewOutfit.enabled = true
Config.PreviewOutfit.useDefaultVariation = false
Config.PreviewOutfit.presets['mp_m_freemode_01'].components[11] = {
    drawable = 15,
    texture = 0,
}
```

Os presets incluídos diferenciam `mp_m_freemode_01` e `mp_f_freemode_01`. Cada componente indica `drawable` e `texture`; `clearProps` remove acessórios durante a prévia. Ajuste os índices às roupas instaladas no servidor. Mantenha `useDefaultVariation = false` se quiser aplicar apenas os componentes do preset, sem redefinir a aparência globalmente.

## Permissões, economia e Qbox

`Config.Permissions`, `Config.AdminCommand`, `Config.Purchases` e `Config.QbxMulticharacterPreview` são explicados em [integrações](https://docs.cxgstudios.com/docs/pt-BR/01-cxg-tattoos/05-integraciones.md). Configure os nomes reais dos recursos quando forem diferentes dos valores padrão.

## Diagnóstico

`Config.Debug` ativa o diagnóstico geral. `Config.Permissions.debug` permite revisar decisões de acesso. Mantenha ambos desativados ao terminar.

`Config.DebugCommands.clientTattooCommand` vem desativado. Ative esse comando visual apenas para testes: ele não salva tatuagens nem substitui uma compra.

[Continue para o catálogo](https://docs.cxgstudios.com/docs/pt-BR/01-cxg-tattoos/04-catalogo.md).
