# Configurar o CXG-GTFAT

Edite `config.lua` e reinicie `CXG_GTFAT`. Os valores de peso são definidos em quilogramas e precisam se encaixar na grade do incremento configurado.

## Idioma e peso

~~~lua
Config.Locale = 'pt-BR'

Config.Weight = {
    minKg = 50,
    maxKg = 180,
    defaultKg = 75,
    fatThresholdKg = 100,
    stepKg = 0.5,
}
~~~

Idiomas disponíveis: en, es, `pt-BR`, fr, de, it, pl, ru, tr, th, ar, sv e br. br mantém os textos antigos em português brasileiro; para a seleção normal, recomenda-se `pt-BR`.

A faixa inicial é de 50 a 180 kg, o peso padrão é 75 kg e Fat é ativado a partir de 100 kg, inclusive. `minKg` deve ser no mínimo zero; `stepKg` deve ser positivo; e `minKg` <= `defaultKg` <= `maxKg`. O limite Fat deve ser maior que o mínimo e não pode ultrapassar o máximo. O peso padrão, o limite e o máximo devem pertencer à grade iniciada em `minKg`; por exemplo, com mínimo de 50 kg e incremento de 0,5 kg, 75 e 100 kg são válidos. Uma configuração inválida desativa as operações de peso.

A unidade LB converte somente o valor exibido. O servidor armazena e valida os valores em kg.

## Comandos e permissões

~~~lua
Config.Commands = {
    enabled = true,
    access = 'ace',
    ace = 'cxg_gtfat.use',
    job = nil,
    group = nil,
    custom = nil,
    open = 'fatweight',
    control = 'fatdecal',
}
~~~

Quando ativados, os comandos configurados são registrados. O comando padrão para abrir é `/fatweight`; o comando de controle é `/fatdecal`. O controle aceita on, off, status ou ui. on ajusta o peso para pelo menos o limite Fat; off o deixa no máximo um incremento abaixo. Não são interruptores visuais separados.

| access | Comportamento |
| --- | --- |
| ace | Exige a permissão `ACE` especificada por ace. É o padrão. |
| everyone | Permite o uso por qualquer jogador aprovado pelas verificações do servidor. |
| jobs, groups, custom | Exige implementar a política em `bridge/server.lua`; a conexão com o framework não é automática. |

Para conceder acesso `ACE` aos administradores:

~~~cfg
add_ace group.admin cxg_gtfat.use allow
~~~

Um menu ou target pode solicitar a abertura da interface, mas o servidor continua verificando a autorização. Desativar o registro dos comandos não impede que outro recurso do servidor use o export `OpenWeightUI`.

## Estações

Nenhuma balança física é ativada na instalação. Copie a entrada `academia` para `Config.Stations`, use uma chave exclusiva, informe as coordenadas reais e ative a estação.

~~~lua
Config.Interaction = {
    key = 'E',
    streamDistance = 60.0,
}

Config.Stations = {
    academia = {
        enabled = true,
        coords = { x = 0.0, y = 0.0, z = 0.0 },
        heading = 0.0,
        distance = 1.8,
        bucket = 0,
        access = 'ace',
        ace = 'cxg_gtfat.use',
        job = nil,
        group = nil,
        custom = nil,
        model = false,
        spawnProp = false,
    },
}
~~~

Substitua as coordenadas de exemplo. A distância aceita até 5 metros. `bucket` deve corresponder ao routing bucket da estação; normalmente é 0. Cada estação tem sua própria política `access`.

| Modalidade | Configuração | Resultado |
| --- | --- | --- |
| Ponto sem objeto | model = false, `spawnProp` = false | Interação invisível nas coordenadas configuradas. |
| Objeto existente | model = 'nome_do_modelo', `spawnProp` = false | Exige encontrar esse modelo a até 1 metro das coordenadas. O recurso não o remove. |
| Objeto criado localmente | model = 'nome_do_modelo', `spawnProp` = true | Cria um objeto local congelado ao se aproximar e o remove ao sair ou parar o recurso. |

O ponto de interação não posiciona automaticamente o objeto no chão. Ajuste `coords` para a origem real do objeto e `heading` para a orientação dele. O aviso usa E por padrão, e o jogador pode reatribuir “Usar balança” em Configurações do FiveM > Mapeamento de teclas.

O adaptador padrão permite ace e everyone. As outras modalidades exigem uma implementação no servidor. Mostrar um aviso ou prop não concede permissão; o servidor verifica novamente o acesso e a proximidade.

## Persistência por personagem

~~~lua
Config.Persistence = { framework = 'none' }
~~~

| Modo | Uso |
| --- | --- |
| none | Padrão. Somente durante a sessão; ao reconectar ou reiniciar, usa `defaultKg`. |
| qb | Resolve o personagem pelo qb-core e seu citizenid. |
| esx | Resolve o personagem pelo es_extended e seu identificador. |
| custom | Usa `GTFatCustomCharacterId(source)` em `identity.lua`. |

O recurso não detecta Qbox automaticamente. Em servidores com vários personagens, configure um identificador estável e exclusivo para cada um com uma opção compatível ou um adaptador próprio. Não compartilhe o identificador entre personagens nem aceite uma identidade enviada pelo cliente. No modo custom, retorne nil até o personagem carregar.

O peso persistido é armazenado separadamente das roupas e dos outfits. Mantenha o nome do recurso `CXG_GTFAT` e faça backup do armazenamento `KVP` do servidor junto com os outros dados persistentes.
