# Настройка CXG-GTFAT

Измените `config.lua` и перезапустите `CXG_GTFAT`. Вес указывается в килограммах и должен соответствовать настроенной сетке шагов.

## Язык и вес

```lua
Config.Locale = 'ru'

Config.Weight = {
    minKg = 50,
    maxKg = 180,
    defaultKg = 75,
    fatThresholdKg = 100,
    stepKg = 0.5,
}
```

Доступны языки en, es, `pt-BR`, fr, de, it, pl, ru, tr, th, ar, sv и br. br содержит старые тексты на бразильском португальском; для обычного выбора рекомендуется `pt-BR`.

Начальный диапазон составляет 50–180 кг, значение по умолчанию — 75 кг, а Fat включается при достижении 100 кг включительно. `minKg` должен быть не меньше нуля, `stepKg` — положительным, а условие `minKg` <= `defaultKg` <= `maxKg` должно выполняться. Порог должен быть выше минимума и не превышать максимум. Значение по умолчанию, порог и максимум должны попадать в сетку от `minKg`; например, при минимуме 50 кг и шаге 0,5 кг допустимы 75 и 100 кг. Некорректная конфигурация отключает операции с весом.

Единица LB пересчитывает только отображение. Сервер хранит и проверяет значения в кг.

## Команды и разрешения

```lua
Config.Commands = {
    enabled = true,
    access = 'ace',
    ace = 'cxg_gtfat.use',
    job = nil,
    group = nil,
    custom = nil,
    open = 'fatweight',
    control = 'fatdecal',
}
```

Если команды включены, регистрируются настроенные команды. Команда открытия по умолчанию — `/fatweight`, команда управления — `/fatdecal`. Управляющая команда принимает on, off, status или ui. on устанавливает вес не ниже порога Fat; off — не выше, чем на один шаг ниже порога. Это не отдельные переключатели внешнего вида.

| access | Поведение |
| --- | --- |
| ace | Требует разрешение `ACE`, указанное в ace. Это режим по умолчанию. |
| everyone | Разрешает использование любому игроку, прошедшему проверки сервера. |
| jobs, groups, custom | Требуется реализовать политику в `bridge/server.lua`; автоматического подключения к фреймворку нет. |

Чтобы выдать администраторам доступ `ACE`:

```cfg
add_ace group.admin cxg_gtfat.use allow
```

Меню или target может запросить открытие интерфейса, но сервер всё равно проверяет права. Отключение регистрации команд не мешает другому серверному ресурсу вызвать export `OpenWeightUI`.

## Станции

После установки физические весы не включены. Добавьте запись станции в `Config.Stations`, задайте уникальный ключ, укажите реальные координаты и включите станцию.

```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,
    },
}
```

Замените примерные координаты. Поддерживается расстояние до 5 метров. `bucket` должен совпадать с routing bucket станции; обычно это 0. Для каждой станции задаётся собственная политика `access`.

| Режим | Параметры | Результат |
| --- | --- | --- |
| Точка без объекта | model = false, `spawnProp` = false | Невидимое взаимодействие по заданным координатам. |
| Существующий объект | model = 'имя_модели', `spawnProp` = false | Объект этой модели должен находиться не дальше 1 м от координат. Ресурс его не удаляет. |
| Локально создаваемый объект | model = 'имя_модели', `spawnProp` = true | Создаёт рядом замороженный локальный объект и удаляет его при уходе или остановке ресурса. |

Точка взаимодействия не ставит объект на землю автоматически. Укажите в `coords` фактическое начало координат объекта, а в `heading` — его направление. Подсказка по умолчанию использует E; игрок может переназначить «Использовать весы» в настройках FiveM > Назначение клавиш.

Стандартный адаптер поддерживает ace и everyone. Для остальных режимов требуется серверная реализация. Подсказка или объект не выдаёт разрешение: сервер повторно проверяет права доступа и близость.

## Сохранение веса по персонажу

```lua
Config.Persistence = { framework = 'none' }
```

| Режим | Использование |
| --- | --- |
| none | По умолчанию. Только текущая сессия; после повторного подключения или перезапуска используется `defaultKg`. |
| qb | Определяет персонажа через qb-core и его citizenid. |
| esx | Определяет персонажа через es_extended и его идентификатор. |
| custom | Использует `GTFatCustomCharacterId(source)` из `identity.lua`. |

Ресурс не определяет Qbox автоматически. Для нескольких персонажей задайте каждому стабильный уникальный идентификатор с помощью совместимой опции или собственного адаптера. Не используйте один идентификатор для разных персонажей и не принимайте идентификатор, присланный клиентом. В режиме custom возвращайте nil до загрузки персонажа.

Сохранённый вес хранится отдельно от одежды и комплектов. Сохраняйте имя ресурса `CXG_GTFAT` и включайте хранилище сервера `KVP` в резервные копии остальных постоянных данных.
