> For the complete documentation index, see [llms.txt](https://docs.bestway.com.ua/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bestway.com.ua/gem-rts-v1-ru/nastroiki-igrovykh-parametrov/metagame/kampanii.md).

# Кампании

## Основные параметры

Данные для настройки кампаний лежат в файле **global\backend\meta\campaign.json** или в папке **campaign\*.json**

{% hint style="info" %}
В модах настройки параметров Кампаний для Metagame может находиться в папке **global\interface\campaings\\\*json**
{% endhint %}

<table><thead><tr><th width="202" valign="top">Параметр</th><th width="111" valign="top">Тип данных</th><th valign="top">Описание</th></tr></thead><tbody><tr><td valign="top"><code>_id</code></td><td valign="top">string</td><td valign="top">Идентификатор кампании</td></tr><tr><td valign="top"><code>tags</code></td><td valign="top">array of string</td><td valign="top">Ярлыки (теги) карты, используется опционально</td></tr><tr><td valign="top"><code>category</code></td><td valign="top">string</td><td valign="top"><p>Тип кампании - используется для распределения кампаний в интерфейсе на соответствующих вкладках:</p><ul><li><code>story</code> - сюжетная кампания с героями</li><li><code>historical</code> - кампания по историческим событиям</li><li><code>raid</code> - Рейд</li><li><code>conquest</code> - Завоевание.<br>Для типа кампании <strong>сonquest</strong> разработан отдельный интерфейс, использующий собственную логику обработки данных.</li></ul></td></tr><tr><td valign="top"><code>display_order</code></td><td valign="top">integer</td><td valign="top">Порядок отображения кампании в интерфейсе Metagame.<br>Чем меньше значение параметра, тем кампания выше находится в списке кампаний</td></tr><tr><td valign="top"><code>online</code></td><td valign="top">string</td><td valign="top">Признак возможности полноценной работы кампании в online режиме.<br>Значение участвует в множественных проверках на backend.<br><strong>Примечание</strong>: для модификаций, которые работают в offline режиме, необходимо выставить значение в <code>false</code>, чтобы уведомить интерфейс Metagame об отсутствии кампании в online режиме.</td></tr><tr><td valign="top"><code>phase</code></td><td valign="top">string</td><td valign="top"><p>Начальная фаза в кампании.<br>Используется только для кампаний типа <strong>conquest</strong>.</p><ul><li><code>attack</code> - фаза атаки;</li><li><code>defence</code> - фаза защиты</li></ul></td></tr><tr><td valign="top"><code>currency</code></td><td valign="top">string</td><td valign="top"><p>валюта кампании (опционально):</p><ul><li><code>rem</code> - рейхмарки Германии;</li><li><code>usd</code> - доллары США;</li><li><code>rub</code> - рубли СССР.</li></ul></td></tr><tr><td valign="top"><code>mission_results</code></td><td valign="top">string</td><td valign="top"><p>Задает способ учета завершенных миссий в кампании:</p><ul><li><p><code>only_first_win</code></p><ul><li>используется в кампаниях, в которых игрок получает опыт и внутриигровую валюту;</li><li>учет только первой победы в указанной миссии.</li></ul></li><li><p><code>degrade_on_each_win</code></p><ul><li>используется в Рейде и кампаниях с прокачкой игрока;</li><li>учет повторно запущенных миссий, каждый новый запуск миссии уменьшает получаемую за нее прохождение награду.</li></ul></li><li><p><code>complete_once</code></p><ul><li>используется в Завоевании;</li><li>означает, что матч можно сыграть только один раз; если игрок отказался играть, то считается, что он проиграл.</li></ul></li></ul></td></tr><tr><td valign="top"><code>money</code></td><td valign="top">integer</td><td valign="top">Стартовые значения свободного опыта <code>freeXp</code>и внутриигровой валюты <code>silver</code> в начале кампании, используется для кампаний с прокачкой игрока.</td></tr><tr><td valign="top"><code>node</code></td><td valign="top">object с ключом nodeId</td><td valign="top">Описание структуры узлов в кампании</td></tr></tbody></table>

## Описание структуры узлов в кампании

<table><thead><tr><th width="155" valign="top">Параметр</th><th width="149" valign="top">Тип данных</th><th valign="top">Описание</th></tr></thead><tbody><tr><td valign="top"><code>tree_x</code></td><td valign="top">number</td><td valign="top">Координата <strong>х</strong> узла в графе кампании, работает по аналогии с деревом технологий. Используется для отображения графа кампании в интерфейсе.</td></tr><tr><td valign="top"><code>tree_y</code></td><td valign="top">number</td><td valign="top">Координаты <strong>у</strong> узла в графе кампании.</td></tr><tr><td valign="top"><code>map</code></td><td valign="top">array of string</td><td valign="top">Список <strong>id</strong> карт для рандомного выбора.<br>Примечание: указанные карты должны быть в списке карт.</td></tr><tr><td valign="top"><code>map_groups</code></td><td valign="top">array of object</td><td valign="top"><p>Список <strong>id</strong> групп карт для рандомного выбора:</p><ul><li><code>attack</code> : array of string<br>список id карт для рандомного выбора для атаки;</li><li><code>defence</code> : array of string<br>список id карт для рандомного выбора для защиты</li></ul><p>Примечание: опционально, только для <strong>conquest</strong></p></td></tr><tr><td valign="top"><code>level</code></td><td valign="top">number</td><td valign="top">Технологический уровень вражеских батальонов.</td></tr><tr><td valign="top"><code>open</code></td><td valign="top">boolean</td><td valign="top">Открыт ли узел со старта кампании (опционально).</td></tr><tr><td valign="top"><code>open_up</code></td><td valign="top">array of string</td><td valign="top">Список <strong>id узлов</strong>, в которые можно перейти из этого узла (опционально).</td></tr><tr><td valign="top"><code>opened_by</code></td><td valign="top">array of string</td><td valign="top">Список <strong>id узлов</strong>, из которых можно перейти в этот узел (опционально).<br>Примечание: если есть связь из <code>open_up</code>, то в обязательном порядке должна быть прописана обратная связь через <code>opened_by</code>.</td></tr><tr><td valign="top"><code>hidden</code></td><td valign="top">boolean</td><td valign="top">Некоторые узлы могут быть изначально скрытыми в интерфейсе.<br>Узлы становятся видимыми, когда выставлен флаг <code>open</code> (опционально).</td></tr><tr><td valign="top"><code>bonus</code></td><td valign="top">boolean</td><td valign="top">Признак того, что узел является бонусным, а не сюжетной развилкой.<br>Если узел содержит сюжетную развилку, то при выполнении миссии в этом узле альтернативные узлы закрываются.<br>Примечание: по умолчанию узлы являются сюжетными развилками (опционально).</td></tr><tr><td valign="top"><code>type</code></td><td valign="top">string</td><td valign="top"><p>Тип узла (опционально, только для <strong>conquest</strong>):</p><ul><li><code>hq</code> - штаб;</li><li><code>land</code> - обычная территория.</li></ul></td></tr><tr><td valign="top"><code>owner</code></td><td valign="top">string</td><td valign="top"><p>Начальный владелец узла (опционально, только для <strong>conquest</strong>):</p><ul><li><code>player</code>- игрок,</li><li><code>enemy</code> - враг.</li></ul></td></tr><tr><td valign="top"><code>final</code></td><td valign="top">boolean</td><td valign="top">Признак, что это финальная миссия, по прохождении которой кампания считается пройденной (опционально).<br>Примечание: в настоящий момент не используется.</td></tr></tbody></table>

## Примеры настройки Кампании для Metagame

<details>

<summary>Пример настройки общих параметров кампании</summary>

```json
{
    "_id": "example",
    "category": "historical",
    "currency": "rub",
    "display_order": 7,
    "enabled": true,
    "in_progress": false,
    "mission_results": "degrade_on_each_win",
    "money": {
        "freeXp": 250,
        "silver": 1000
    },
    "online": true,
    "tags": ["rus"]
}
```

Пояснения:

* `_id` – уникальный идентификатор кампании, в данном случае "example".
* `category` – категория кампании, здесь "historical", что указывает на историческую кампанию.
* `currency` – валюта, используемая в кампании, здесь "rub" (рубли).
* `display_order` – порядок отображения кампании в интерфейсе, чем меньше число, тем выше в списке.
* `enabled` – кампания активна (`true`).
* `in_progress` – кампания в процессе выполнения (`false` – означает, что кампания ещё не начата).
* `mission_results` – тип расчета результатов миссий: `degrade_on_each_win` – означает, что награды уменьшаются при каждом перезапуске.
* `money` – стартовые бонусы:
  * `freeXp` – 250 единиц свободного опыта.
  * `silver` – 1000 серебра (игровая валюта).
* `online` – `true` означает, что кампания поддерживает **online** режим (примечание: для модификаций, которые работают только в **offline** режиме, необходимо выставить значение в `false`)
* `tags` – теги, помогающие классифицировать кампанию:
  * `"rus"` – кампания за СССР.

</details>

<details>

<summary>Пример настройки узлов кампании</summary>

```json
"node": {
    "start": {
        "bonus": true,
        "level": 3,
        "map": ["start_mission"],
        "open": true,
        "open_up": ["line2", "line2_2"],
        "tree_x": 2.5,
        "tree_y": 1
    },
    "line2": {
        "bonus": true,
        "level": 3,
        "map": ["second_line_mission_1"],
        "open": false,
        "open_up": ["finish"],
        "opened_by": ["start"],
        "tree_x": 2.5,
        "tree_y": 2
    },
    "line2_2": {
        "bonus": true,
        "level": 5,
        "map": ["second_line_mission_2"],
        "open": false,
        "opened_by": ["start"],
        "tree_x": 3.5,
        "tree_y": 2
    },
    "finish": {
        "bonus": true,
        "level": 6,
        "map": ["finish_mission"],
        "open": false,
        "opened_by": ["line2"],
        "tree_x": 2.5,
        "tree_y": 3
    }
```

Раздел `"node"` определяет дерево миссий, их взаимосвязи и условия открытия.

Каждый узел (миссия) имеет следующие параметры:

* Название узла – идентификатор, например, `start`, `line2`, `line2_2`, `finish`.
* `bonus` – миссия является бонусной, а не сюжетной развилкой (`true`).
* `level` – технологический уровень вражеских батальонов

  (3, 4, 5 и т.д.).
* `map` – название карты, на которой проходит миссия ("start\_mission", "line2\_mission\_1" и т.д.).
* `open` – открыта ли миссия сразу (`true` – доступна, `false` – заблокирована).
* `open_up` – список узлов, которые откроются после выполнения данной миссии.
* `opened_by` – какие узлы открывают данную миссию.
* `tree_x`, `tree_y` – координаты узла на древе кампании.

**Дерево миссий**

`start` *→* `line2` *→* `finish`\
↓\
`line2_2`\\

</details>

{% hint style="warning" %}
Для типа кампании **сonquest** разработан отдельный интерфейс, использующий собственную логику обработки данных.
{% endhint %}
