# Настройка

Параметры этой страницы находятся в `config.lua`. Изменяйте поля существующих таблиц и перезапустите ресурс, чтобы применить изменения.

## Начальные значения и сохранённые настройки

Магазины и правила прогрессии в файле служат начальными настройками. После сохранения через административную панель их действующие значения сохраняются между перезапусками. Изменение файла автоматически не заменяет сохранённые данные: обновляйте магазины, правила и параметры уже инициализированной системы через панель.

Язык, providers, bridge-модули, камера и одежда для предпросмотра настраиваются в файле. Источники и татуировки описаны в разделе [Каталог и наборы](https://docs.cxgstudios.com/docs/ru/01-cxg-tattoos/04-catalogo.md).

## Общий язык

```lua
Config.Locale = 'es'
Config.LocaleFallback = 'en'
```

`Locale` задаёт язык интерфейса и сообщений для всех игроков. После его изменения перезапустите ресурс; игрок не может менять язык через NUI. `LocaleFallback` задаёт резервный язык.

Доступны языки: `en`, `es`, `pt-BR`, `fr`, `de`, `it`, `pl`, `ru`, `tr`, `th` и `ar`. Для арабского интерфейса используется направление письма справа налево.

## Система идентификации

`Config.Identity` настраивает интеграцию с системой идентификации сервера. Здесь задаётся способ получения идентификатора персонажа или учётной записи, который ресурс использует для сохранения и загрузки татуировок, XP и чертежей.

```lua
Config.Identity.mode = 'auto'
Config.Identity.qbxResource = 'qbx_core'
```

| Режим | Назначение |
| --- | --- |
| `auto` | В Qbox используется идентификатор активного персонажа (`citizenid`). На других серверах — стабильный идентификатор FiveM. |
| `qbx_character` | Явно использует идентификатор персонажа Qbox (`citizenid`). |
| `license` | Использует лицензию FiveM как идентификатор учётной записи. Персонажи одной учётной записи используют общие татуировки, XP и чертежи. |

Выберите режим до того, как открыть ресурс игрокам. После смены режима данные будут запрашиваться по другому идентификатору; автоматического переноса данных между режимами не происходит. Не выбирайте `license`, если татуировки должны храниться отдельно для каждого персонажа учётной записи.

## Подсказка взаимодействия

```lua
Config.HelpText.enabled = true
Config.HelpText.provider = 'auto'
Config.HelpText.position = 'left-center'
```

| Поле | Значения или эффект |
| --- | --- |
| `enabled` | Показывает или скрывает подсказку взаимодействия у магазина с маркером. |
| `provider` | `auto`, `ox_lib` или `native`. `auto` использует TextUI, если он доступен, иначе — встроенную подсказку. |
| `position` | Для TextUI: `left-center`, `right-center`, `top-center` или `bottom-center`. |
| `style` | Цвета, граница, тень, шрифт и внутренние отступы TextUI. |

Пример стиля:

```lua
Config.HelpText.style.backgroundColor = '#172328'
Config.HelpText.style.color = '#eef3f3'
Config.HelpText.style.fontSize = '15px'
```

## Начальные магазины

В `Config.Shops` указаны шесть местоположений. Чтобы изменить начальную запись, сохраните её структуру:

```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 },
    },
},
```

| Поле | Назначение |
| --- | --- |
| `label` | Название магазина. |
| `coords`, `heading` | Положение и направление. |
| `drawDistance` | Дистанция отображения маркера. |
| `interactDistance` | Дистанция взаимодействия. |
| `shopRadius` | Радиус, в пределах которого разрешены операции магазина. |
| `marker.type`, `scale`, `color` | Внешний вид маркера. |

Значение `interactDistance` не должно превышать `shopRadius`. Для уже созданных магазинов используйте раздел магазинов в административной панели; изменение файла не пересоздаст и не заменит такие магазины.

## Уровни и XP

| Параметр `Config.Levels` | Начальное значение | Назначение |
| --- | --- | --- |
| `enabled` | `true` | Включает прогрессию, требования и скидки. |
| `maxLevel` | `10` | Максимальный уровень. |
| `defaultXpPerTattoo` | `10` | XP за татуировку, для которой не указано `Xp`. |
| `thresholds` | Уровни с 1 по 10 | Накопленное количество XP, необходимое для каждого уровня. |
| `formula.base`, `formula.exponent` | `100`, `1.5` | Параметры альтернативной формулы порогов. |
| `zoneRequirements` | `1` для каждой зоны | Требование для зоны, если для татуировки не задано отдельное. |
| `discounts` | Включены, `3` за уровень, максимум `25` | Скидка в процентах. |
| `blueprintSlots` | Основа `5`, прирост `3` | Количество слотов чертежей в зависимости от уровня. |

Пороги должны начинаться с уровня 1 и 0 XP, идти без пропусков, а необходимое количество XP должно возрастать:

```lua
Config.Levels.thresholds = {
    { level = 1, xpRequired = 0 },
    { level = 2, xpRequired = 100 },
    { level = 3, xpRequired = 250 },
}
Config.Levels.maxLevel = 3
```

Размер скидки рассчитывается как `уровень × perLevel` и ограничивается значением `maxDiscount`. При начальных настройках на 5-м уровне скидка составляет 15 %, максимальная — 25 %.

Количество слотов рассчитывается как `base + (уровень - 1) × perLevel`. При начальных настройках на 1-м уровне доступно 5 слотов, на 5-м — 17.

Индивидуальный `RequiredLevel` в каталоге имеет приоритет над требованием зоны. См. раздел [Поля каталога](https://docs.cxgstudios.com/docs/ru/01-cxg-tattoos/04-catalogo.md).

При отключении уровней не применяются ограничения по уровню, XP и скидки; лимит чертежей задаётся через `Config.Blueprints.maxPerPlayer`. Отключение системы сохраняет накопленные XP. В уже настроенных установках обновите также действующий статус через панель.

## Чертежи

Чертежи сохраняют группы татуировок и позволяют делиться ими с помощью кодов. Начальные ограничения находятся в `Config.Blueprints`:

| Поле | Начальное значение | Назначение |
| --- | --- | --- |
| `enabled` | `true` | Включает систему. |
| `codePrefix` | `INK` | Префикс кодов, например `INK-A3X9`. |
| `codeLength` | `4` | Число символов после префикса. |
| `maxPerPlayer` | `20` | Число слотов при отключённой прогрессии. |
| `maxTattoosPerBlueprint` | `50` | Максимум татуировок в одной группе. |
| `nameMaxLength` | `60` | Максимальная длина названия. |

Активация кода подготавливает татуировки к покупке, но не предоставляет бесплатную покупку. Экономика настраивается в разделе [Интеграции](https://docs.cxgstudios.com/docs/ru/01-cxg-tattoos/05-integraciones.md).

## Камера

| Таблица | Что настраивает |
| --- | --- |
| `CameraOffsets` | Целевую кость, расстояние, смещения и поле зрения для каждой зоны. |
| `CameraFraming` | Общую композицию и смещение точки фокусировки. |
| `CameraFramingBySide` | Дополнительные настройки вида спереди и сзади. |
| `CameraManualControls` | Ручное управление, шаги перемещения, вращение, масштабирование и ограничения. |

Настроены зоны `ZONE_HEAD`, `ZONE_TORSO`, `ZONE_LEFT_ARM`, `ZONE_RIGHT_ARM`, `ZONE_LEFT_LEG` и `ZONE_RIGHT_LEG`.

Примеры точечных изменений:

```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
```

Положительное значение `screenOffset` смещает персонажа влево, освобождая место для меню справа. Параметр `lookAtOffsetX/Y/Z` меняет точку фокусировки; `camOffsetX/Y/Z` в настройках сторон меняет положение камеры.

Для ручного управления параметры `horizontalDegrees` и `rotationStepDegrees` задают вращение. `ranges.y/z`, `radialClamp` и `maxDistance` ограничивают смещения. `zoomCompositionMinBias` настраивает центрирование при приближении. Изменяйте по одному значению и проверяйте все шесть зон на мужских и женских персонажах.

## Одежда для предпросмотра

`Config.PreviewOutfit` позволяет освободить области с татуировками, пока открыт интерфейс:

```lua
Config.PreviewOutfit.enabled = true
Config.PreviewOutfit.useDefaultVariation = false
Config.PreviewOutfit.presets['mp_m_freemode_01'].components[11] = {
    drawable = 15,
    texture = 0,
}
```

Включённые пресеты различаются для `mp_m_freemode_01` и `mp_f_freemode_01`. Для каждого компонента указываются `drawable` и `texture`; `clearProps` снимает аксессуары на время предпросмотра. Настройте индексы в соответствии с одеждой на сервере. Оставьте `useDefaultVariation = false`, если нужно применить только компоненты пресета, не сбрасывая внешний вид целиком.

## Права доступа, экономика и Qbox

Параметры `Config.Permissions`, `Config.AdminCommand`, `Config.Purchases` и `Config.QbxMulticharacterPreview` описаны в разделе [Интеграции](https://docs.cxgstudios.com/docs/ru/01-cxg-tattoos/05-integraciones.md). Укажите фактические имена ресурсов, если они отличаются от используемых по умолчанию.

## Диагностика

`Config.Debug` включает общую диагностику. `Config.Permissions.debug` помогает проверять решения о доступе. После проверки отключите оба параметра.

`Config.DebugCommands.clientTattooCommand` изначально отключён. Включайте эту визуальную команду только для тестирования: она не сохраняет татуировки и не заменяет покупку.

[Перейти к каталогу](https://docs.cxgstudios.com/docs/ru/01-cxg-tattoos/04-catalogo.md).
