# Configurare CXG-GTFAT

Modificare `config.lua` e riavviare `CXG_GTFAT`. I valori di peso sono espressi in chilogrammi e devono rispettare la griglia dell’incremento configurato.

## Lingua e peso

```lua
Config.Locale = 'it'

Config.Weight = {
    minKg = 50,
    maxKg = 180,
    defaultKg = 75,
    fatThresholdKg = 100,
    stepKg = 0.5,
}
```

Lingue disponibili: en, es, `pt-BR`, fr, de, it, pl, ru, tr, th, ar, sv e br. br conserva i vecchi testi in portoghese brasiliano; per la selezione normale si consiglia `pt-BR`.

L’intervallo iniziale va da 50 a 180 kg, il valore predefinito è 75 kg e Fat si attiva da 100 kg inclusi. `minKg` deve essere almeno zero, `stepKg` deve essere positivo e `minKg` <= `defaultKg` <= `maxKg`. La soglia deve essere superiore al minimo e non oltrepassare il massimo. Valore predefinito, soglia e massimo devono rientrare nella griglia che parte da `minKg`; per esempio, con minimo 50 kg e incremento 0,5 kg, 75 e 100 kg sono validi. Una configurazione non valida disattiva le operazioni sul peso.

LB converte solo il valore mostrato. Il server memorizza e convalida i valori in kg.

## Comandi e permessi

```lua
Config.Commands = {
    enabled = true,
    access = 'ace',
    ace = 'cxg_gtfat.use',
    job = nil,
    group = nil,
    custom = nil,
    open = 'fatweight',
    control = 'fatdecal',
}
```

Se attivati, i comandi configurati vengono registrati. Il comando predefinito di apertura è `/fatweight`, quello di controllo è `/fatdecal`. Il controllo accetta on, off, status o ui. on imposta il peso almeno alla soglia Fat; off lo porta al massimo un incremento sotto. Non sono interruttori visivi separati.

| access | Comportamento |
| --- | --- |
| ace | Richiede il permesso `ACE` indicato da ace. È il valore predefinito. |
| everyone | Consente l’uso a qualsiasi giocatore che superi i controlli del server. |
| jobs, groups, custom | Richiede l’implementazione della policy in `bridge/server.lua`; non si collega automaticamente al framework. |

Per concedere agli amministratori l’accesso `ACE`:

```cfg
add_ace group.admin cxg_gtfat.use allow
```

Un menu o un target può richiedere l’apertura dell’interfaccia, ma il server verifica comunque l’autorizzazione. Disabilitare la registrazione dei comandi non impedisce a un’altra risorsa server di chiamare l’export `OpenWeightUI`.

## Stazioni

Dopo l’installazione non è attivata alcuna bilancia fisica. Aggiungere una voce di stazione a `Config.Stations`, usare una chiave univoca, inserire le coordinate effettive e attivarla.

```lua
Config.Interaction = {
    key = 'E',
    streamDistance = 60.0,
}

Config.Stations = {
    gimnasio = {
        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,
    },
}
```

Sostituire le coordinate di esempio. La distanza supporta fino a 5 metri. `bucket` deve corrispondere al routing bucket della stazione; di solito è 0. Ogni stazione ha una propria policy `access`.

| Modalità | Impostazioni | Risultato |
| --- | --- | --- |
| Punto senza oggetto | model = false, `spawnProp` = false | Interazione invisibile alle coordinate configurate. |
| Oggetto esistente | model = 'nome_modello', `spawnProp` = false | Il modello deve trovarsi entro 1 metro dalle coordinate. La risorsa non lo rimuove. |
| Oggetto creato localmente | model = 'nome_modello', `spawnProp` = true | Crea un oggetto locale congelato quando si è vicini e lo rimuove all’allontanamento o all’arresto della risorsa. |

Il punto d’interazione non posiziona automaticamente l’oggetto a terra. Impostare `coords` sull’origine effettiva dell’oggetto e `heading` sul suo orientamento. L’avviso usa E per impostazione predefinita; il giocatore può riassegnare “Usa bilancia” in Impostazioni FiveM > Associazione tasti.

L’adattatore predefinito consente ace ed everyone. Le altre modalità richiedono un’implementazione server. Un avviso o un prop non concede l’accesso: il server verifica di nuovo autorizzazione e prossimità.

## Persistenza per personaggio

```lua
Config.Persistence = { framework = 'none' }
```

| Modalità | Uso |
| --- | --- |
| none | Predefinita. Solo sessione; alla riconnessione o al riavvio viene usato `defaultKg`. |
| qb | Risolve il personaggio tramite qb-core e il relativo citizenid. |
| esx | Risolve il personaggio tramite es_extended e il relativo identificatore. |
| custom | Usa `GTFatCustomCharacterId(source)` in `identity.lua`. |

La risorsa non rileva Qbox automaticamente. Per server multicharacter, configurare un identificatore stabile e univoco per ogni personaggio con un’opzione compatibile o un adattatore proprio. Non condividere l’identificatore tra personaggi e non accettare un’identità inviata dal client. In modalità custom, restituire nil finché il personaggio non è caricato.

Il peso persistente viene memorizzato separatamente da abiti e outfit. Mantenere il nome risorsa `CXG_GTFAT` e includere il salvataggio `KVP` del server nei backup degli altri dati persistenti.
