# Configurer CXG-GTFAT

Modifiez `config.lua`, puis redémarrez `CXG_GTFAT`. Les valeurs de poids sont définies en kilogrammes et doivent respecter la grille du pas configuré.

## Langue et poids

```lua
Config.Locale = 'fr'

Config.Weight = {
    minKg = 50,
    maxKg = 180,
    defaultKg = 75,
    fatThresholdKg = 100,
    stepKg = 0.5,
}
```

Langues disponibles : en, es, `pt-BR`, fr, de, it, pl, ru, tr, th, ar, sv et br. br conserve les anciens textes en portugais brésilien ; `pt-BR` est recommandé pour un usage normal.

La plage initiale va de 50 à 180 kg, la valeur par défaut est 75 kg et Fat s’active à partir de 100 kg inclus. `minKg` doit être supérieur ou égal à zéro ; `stepKg` doit être positif ; et `minKg` <= `defaultKg` <= `maxKg`. Le seuil doit dépasser le minimum et ne pas dépasser le maximum. La valeur par défaut, le seuil et le maximum doivent appartenir à la grille commençant à `minKg` ; par exemple, avec un minimum de 50 kg et un pas de 0,5 kg, 75 et 100 kg sont valides. Une configuration invalide désactive les opérations de poids.

L’unité LB ne convertit que l’affichage. Le serveur stocke et valide les valeurs en kg.

## Commandes et permissions

```lua
Config.Commands = {
    enabled = true,
    access = 'ace',
    ace = 'cxg_gtfat.use',
    job = nil,
    group = nil,
    custom = nil,
    open = 'fatweight',
    control = 'fatdecal',
}
```

Lorsque les commandes sont activées, celles définies dans la configuration sont enregistrées. La commande d’ouverture par défaut est `/fatweight` et la commande de contrôle est `/fatdecal`. Le contrôle accepte on, off, status ou ui. on règle le poids au moins au seuil Fat ; off le règle au maximum un pas en dessous. Ce ne sont pas des interrupteurs visuels indépendants.

| access | Comportement |
| --- | --- |
| ace | Exige la permission `ACE` définie par ace. C’est la valeur par défaut. |
| everyone | Autorise tout joueur qui passe les contrôles du serveur. |
| jobs, groups, custom | Nécessite l’implémentation d’une politique dans `bridge/server.lua` ; la connexion au framework n’est pas automatique. |

Pour accorder l’accès `ACE` aux administrateurs :

```cfg
add_ace group.admin cxg_gtfat.use allow
```

Un menu ou un target peut demander l’ouverture de l’interface, mais le serveur vérifie toujours l’autorisation. Désactiver l’enregistrement des commandes n’empêche pas une autre ressource serveur d’appeler l’export `OpenWeightUI`.

## Stations

Aucune balance physique n’est activée à l’installation. Ajoutez une entrée de station à `Config.Stations`, utilisez une clé unique, saisissez les coordonnées réelles et activez-la.

```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,
    },
}
```

Remplacez les coordonnées d’exemple. La distance est limitée à 5 mètres. `bucket` doit correspondre au routing bucket de la station ; sa valeur est généralement 0. Chaque station a sa propre politique `access`.

| Mode | Paramètres | Résultat |
| --- | --- | --- |
| Point sans objet | model = false, `spawnProp` = false | Interaction invisible aux coordonnées configurées. |
| Objet existant | model = 'nom_du_modèle', `spawnProp` = false | Nécessite un modèle correspondant à moins d’un mètre des coordonnées. La ressource ne le supprime pas. |
| Objet créé localement | model = 'nom_du_modèle', `spawnProp` = true | Crée un objet local figé à proximité et le retire lorsque vous partez ou arrêtez la ressource. |

Le point d’interaction ne pose pas automatiquement l’objet au sol. Définissez `coords` sur l’origine réelle de l’objet et `heading` sur son orientation. L’invite utilise E par défaut ; le joueur peut réattribuer « Utiliser la balance » dans Paramètres FiveM > Attributions des touches.

L’adaptateur par défaut autorise ace et everyone. Les autres modes nécessitent une implémentation serveur. Afficher une invite ou un objet ne donne aucun droit ; le serveur revérifie l’accès et la proximité.

## Persistance par personnage

```lua
Config.Persistence = { framework = 'none' }
```

| Mode | Utilisation |
| --- | --- |
| none | Valeur par défaut. Session uniquement ; une reconnexion ou un redémarrage utilise `defaultKg`. |
| qb | Résout le personnage via qb-core et son citizenid. |
| esx | Résout le personnage via es_extended et son identifiant. |
| custom | Utilise `GTFatCustomCharacterId(source)` dans `identity.lua`. |

La ressource ne détecte pas Qbox automatiquement. Pour les serveurs à personnages multiples, configurez un identifiant stable et unique pour chaque personnage via une option compatible ou votre propre adaptateur. Ne partagez pas un identifiant entre personnages et n’acceptez pas une identité envoyée par le client. En mode custom, renvoyez nil tant que le personnage n’est pas chargé.

Le poids persistant est stocké séparément des vêtements et des tenues. Conservez le nom de ressource `CXG_GTFAT` et sauvegardez le stockage `KVP` du serveur avec ses autres données persistantes.
