# Подбор игроков

Быстро начните работу с подбором игроков и изучите примеры сценариев для различных жанров.

Следуйте вместе с этим видео, чтобы начать работу с нашим сервисом Matchmaker:

{% embed url="<https://youtu.be/HxtvzvJ1FTk>" %}

## ✔️ Подготовка

### Архитектура подбора игроков

В этом руководстве мы сосредоточимся на **Matchmaking API и Backfill API**.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fp2QpL1MXYtwSWB2VJN2A%2Fimage.png?alt=media&#x26;token=ecc73799-c2e6-4884-965f-48e4c125659c" alt=""><figcaption></figcaption></figure>

При подборе игроков существует четыре (4) важных потока данных:

1. [Matchmaking API](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-api) **используется игровыми клиентами для связи с Matchmaker:**
   1. для управления группами, назначения серверов и мониторинга,
   2. для измерения пинга с [ping-beacons](https://docs.edgegap.com/ru/learn/orkestraciya/ping-beacons "mention").
2. [deployments](https://docs.edgegap.com/ru/learn/orkestraciya/deployments "mention") API используется для развертывания, масштабирования и управления вашими выделенными серверами с помощью Matchmaker.
3. [Netcode Transports](https://docs.edgegap.com/ru/docs/sample-projects) используются для связи между игровыми клиентами и выделенными серверами.
4. [#backfill-match](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#backfill-match "mention") **для замены или добавления игроков на работающий сервер.**

{% hint style="info" %}
После релиза, **ваш Matchmaker должен работать 24/7** чтобы игроки со всего мира могли подключаться к серверам.
{% endhint %}

## 🍀 Простой пример

Начните с простого примера и проверьте базовый поток подбора игроков:

* создание экземпляра matchmaker на общем [#hosting-cluster](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#hosting-cluster "mention"),
* определение правил и настроек в вашем matchmaker [#configuration](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#configuration "mention"),
* тестирование потока игроков и управление билетами с помощью [#matchmaking-api](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-api "mention").

### 1. Настройка на бесплатном тарифе

☑️ [Зарегистрируйте бесплатную учетную запись Edgegap](https://app.edgegap.com/auth/register) и откройте [страницу панели Matchmaker](https://app.edgegap.com/matchmaker-management-v2/matchmakers/list).

☑️ Нажмите на **Create Matchmaker** сначала, затем введите:

* имя matchmaker — для вашего удобства, например `quickstart-dev` ,
* загрузите нашу JSON-конфигурацию Simple Example.

🍀 **Simple Example (Минимальная рекомендуемая конфигурация):**

{% hint style="danger" %}
**Обязательно измените приложение** **`имя`**  **и** **`версию`**  **в соответствии с вашим** [application-and-versions](https://docs.edgegap.com/ru/learn/orkestraciya/application-and-versions "mention").
{% endhint %}

<pre class="language-json"><code class="lang-json">{
  "version": "3.2.2",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "simple-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m",
      "application": {
        "name": "<a data-footnote-ref href="#user-content-fn-1">my-game-server</a>",
        "version": "<a data-footnote-ref href="#user-content-fn-2">2024.01.30-16.23.00-UTC</a>"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "min_team_size": 2,
              "max_team_size": 2
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 100,
              "max_latency": 200
            }
          }
        },
        "expansions": {}
      }
    }
  }
}
</code></pre>

**Устранение неполадок и FAQ:**

☑️ Если ошибок проверки не отображается, нажмите **Create and Start** и дождитесь завершения процесса. В результате будет запущен новый бесплатный кластер с вашим matchmaker Simple Example.

✅ Теперь вы можете перейти к следующему шагу.

### 2. Изучение конфигурации

По мере выпуска обновлений Matchmaker каждая новая версия использует [семантическое версионирование](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#changelog) чтобы наглядно сообщать о влиянии изменений через формат `major.minor.patch`:

* 🔥 `major` версии включают несовместимые изменения и требуют проверки интеграции,
* 🌟 `minor` версии включают значительные обратносуместимые улучшения,
* 🩹 `patch` версии включают исправления ошибок и небольшие улучшения.

[Проверяйте билеты](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-api) чтобы лучше понимать и отлаживать возможные потоки подбора игроков во время разработки. Мы рекомендуем отключить inspect API для вашего рабочего matchmaker.

**Некоторые** [**развертывания могут приводить к ошибкам**](https://docs.edgegap.com/ru/orkestraciya/deployments#id-4.-deployment-error)**.** Мы пытаемся решить это, автоматически повторяя развертывание до `max_deployment_retry_count` раз(а) без подтверждения клиента).

Чтобы неожиданные сбои клиента или брошенные билеты не оставались надолго и не занимали ресурсы вашего matchmaker, неподобранные билеты будут отменены после `ticket_expiration_period` в результате их статус изменится на `CANCELLED` и затем будут окончательно удалены после `ticket_removal_period` .

{% hint style="info" %}
[Узнайте, как Matchmaker максимизирует коэффициент заполнения матчей и сокращает время ожидания в очереди до менее чем 10 секунд.](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#find-match)
{% endhint %}

Основа нашей логики подбора игроков настраивается в [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention"). Каждый профиль — это полностью изолированная очередь подбора игроков, указывающая на [#app-versions](https://docs.edgegap.com/ru/orkestraciya/application-and-versions#app-versions "mention") с заранее заданным количеством необходимых ресурсов CPU и памяти (RAM).

[#matchmaking-rules](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-rules "mention") в начальном наборе правил должны быть выполнены, чтобы игроки были сгруппированы вместе; каждое определяется тремя свойствами:

* имя на ваш выбор, например - `размер матча`,
* тип правила, также известный как оператор, например - `player_count`,
* и наконец атрибуты оператора, например `team_count` или `max_team_size`.

**Правило количества игроков**

Это специальное правило, определяющее, сколько игроков должно совпасть, чтобы инициировать назначение:

* `team_count` относится к числу команд; 1 команда может использоваться для кооперативных режимов или режима каждый сам за себя,
* `min_team_size` относится к минимальному числу игроков в команде.
* `max_team_size` относится к максимальному числу игроков в команде.

Наш простой пример демонстрирует кооперативную игру с 2 игроками.

{% hint style="warning" %}
Правило количества игроков **обязательно и может быть определено только один раз** в правилах вашей начальной конфигурации.
{% endhint %}

**Правило задержек**

✅ Теперь вы можете перейти к следующему шагу.

### 3. Просмотр сведений об экземпляре

☑️ Просмотрите сведения о вашем новом matchmaker в панели управления после его инициализации:

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FY4Byy46pgEoXXmrtH92n%2Fimage.png?alt=media&#x26;token=3fb5fd0e-526e-4f89-ac9a-9ee6809aeaf1" alt=""><figcaption></figcaption></figure>

* **Статус** указывает на состояние сервиса и может быть ONLINE, OFFLINE или ERROR.
* **Идентификатор** помогает сотрудникам Edgegap быстро найти ваш matchmaker, если вам понадобится помощь в устранении неполадок.
* **Запущено в** может быть полезно для определения времени последнего обновления.
* **Размер** соответствует одному из наших [тарифных планов](https://edgegap.com/resources/pricing#matchmaker).
* **API URL** будет использоваться игровыми клиентами и игровыми серверами для связи с вашим matchmaker.
* **Swagger URL** — это удобный GUI спецификации openAPI, который мы предоставляем для изучения схемы API.
* **Auth Token** — это уникальный секретный токен, используемый игровыми клиентами и игровым сервером для аутентификации.

{% hint style="danger" %}
**Сотрудники Edgegap никогда не будут запрашивать ваши токены. Перегенерируйте токен, если подозреваете нарушение безопасности.**
{% endhint %}

Чтобы протестировать ваш новый matchmaker, **вам понадобятся Swagger URL, API URL и Auth Token**.

✅ Теперь вы можете перейти к следующему шагу.

{% hint style="info" %}
Чтобы обновить правила вашего matchmaker в процессе разработки, измените конфигурацию и перезапустите его.
{% endhint %}

{% hint style="success" %}
См. [#rolling-updates-and-ab-tests](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#rolling-updates-and-ab-tests "mention") для живых игр и обновлений без простоя.
{% endhint %}

### 4. Тестирование Tickets API

{% hint style="info" %}
**Пожалуйста, подождите до 5 минут** после запуска вашего matchmaker, чтобы завершилась DNS-пропагация.
{% endhint %}

☑️ Сначала **откройте ваш Swagger URL** чтобы просмотреть схему openAPI в GUI swagger:

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FyFErlc8rw9KHMOqloIUF%2Fimage.png?alt=media&#x26;token=5a806adf-d644-4af6-b65e-9af82232bfcd" alt=""><figcaption></figcaption></figure>

☑️ Нажмите на **Authorize** 🔒, вставьте ваш **Auth Token**и подтвердите, нажав **Authorize**.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FWnFM0p4UwDuo6Z5IOiUf%2Fimage.png?alt=media&#x26;token=7cbdff75-7f6b-467c-8df3-fa568b846dac" alt=""><figcaption></figcaption></figure>

☑️ Прокрутите вниз до **Ticket API** **- POST /tickets**, разверните и нажмите **Try it out**.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FpxA3FxrxhlelzSWvb5CO%2Fimage.png?alt=media&#x26;token=8fc4fa97-44d5-48e3-8c02-c2dd49c6cd74" alt=""><figcaption></figcaption></figure>

☑️ Предварительно просмотрите ваш запрос:

* обратите внимание `player_ip` установлен в `null` — это заставит Matchmaker использовать IP-адрес, автоматически добавленный в ваш запрос (см. [#server-to-server-api](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#server-to-server-api "mention") для альтернатив),
* `profile` относится к вашему [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention"),
* `attributes` включают значения для правил вашего matchmaker, в данном случае для правила `latencies` ,
  * rule `player_count` — это единственное правило, которое не требует никаких атрибутов в билетах игроков.

☑️ Нажмите **Execute** и просмотрите ответ на запрос билета игрока:

* `id` — это ваш уникальный ID билета подбора игроков; сохраните его, чтобы позже проверить билет,
* `profile` подтверждая выбор [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention"),
* `group_id` — это уникальный [ID группы, выдаваемый каждому билету; одиночный игрок представлен как группа из 1](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up),
* `team_id` — это уникальный ID команды, выдаваемый каждому игроку после того, как `TEAM_FOUND` достигается статус,
  * [каждая команда может содержать несколько групп, не превышая настроенный размер команды](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-rules),
* `player_ip` — это определенный публичный IP-адрес игрока, независимо от метода идентификации,
* `assignment` установлен в `null` чтобы указать, что билет не был подобран или назначен на сервер,
* `created_at` содержит информацию о том, когда билет игрока был создан, для использования в игровом UI,
* `status` указывает текущий статус билета; все билеты начинают в `SEARCHING` .

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FZauPhgT9t1roetX4yc7g%2Fimage.png?alt=media&#x26;token=7834faf8-ce73-42dc-bae0-0293f05f1ea1" alt=""><figcaption></figcaption></figure>

☑️ Создайте второй билет, нажав **Execute** снова, чтобы наши два игрока совпали и был запущен сервер.

☑️ Сверните POST /tickets и откройте **GET /tickets/{ticketId}**, затем нажмите **Try it out**.

☑️ Введите ID билета из ответа на предыдущем шаге и нажмите **Execute**.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FNznf5aHqhWefs77SFbzJ%2Fimage.png?alt=media&#x26;token=1d04803c-fbe6-4a19-9ef7-f814ea87affe" alt=""><figcaption></figcaption></figure>

☑️ Просмотрите обновленное назначение для вашего билета игрока:

* статус изменился на `MATCH_FOUND` сначала, при этом сохраняя `assignment` установлен в `null` чтобы показать, что игроки совпали и сервер назначается,

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FGzBkyUepbqP71lFWG052%2Fimage.png?alt=media&#x26;token=a0412446-cc4f-4070-a14c-fef79046f3f7" alt=""><figcaption></figcaption></figure>

☑️ Нажмите **Execute** снова, чтобы проверить ваш билет, и просмотрите обновленное назначение для вашего билета:

* статус изменился на `HOST_ASSIGNED` с `assignment` содержащим сведения о назначенном сервере.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FWnbG4B1KFoxttkz5bALl%2Fimage.png?alt=media&#x26;token=12a10044-2117-4a6d-845a-76c243231552" alt=""><figcaption></figcaption></figure>

<details>

<summary>Устранение неполадок и FAQ</summary>

Мой билет застрял в `SEARCHING` .

* Пожалуйста, проверьте, что вы создали достаточное количество билетов с пересекающимися критериями, соответствующими вашей конфигурации.

***

Мой билет застрял, переключаясь между `MATCH_FOUND` и `TEAM_FOUND` повторно.

* Учетные записи Free Tier ограничены 1 развертыванием одновременно. Рассмотрите возможность обновления тарифа или остановите текущее развертывание, чтобы запустить новое.

***

Мой билет сразу переходит в `CANCELLED`.

* Срок действия вашего билета истек. Создайте новый билет или увеличьте период истечения в вашей конфигурации для тестирования.

***

Я получаю HTTP 404 Not Found при проверке моего билета.

* Ваш билет был удален либо запросом DELETE, либо по достижении периода удаления (начинается после истечения срока действия билета и определяется в вашей конфигурации). Создайте новый билет или увеличьте периоды истечения/удаления в вашей конфигурации для тестирования.

</details>

☑️ [Просмотрите ваше новое развертывание в нашей панели управления](https://app.edgegap.com/deployment-management/deployments/list):

* обратите внимание, что каждое развертывание помечено всеми ID билетов и профилем для дополнительной отслеживаемости.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FG4Ear9NrMHhgFH6T4ODB%2Fimage.png?alt=media&#x26;token=acc9831c-a9d2-4eb2-8c39-c81b8e61ddd2" alt=""><figcaption></figcaption></figure>

☑️ Попробуйте подключиться из вашего игрового клиента к назначенному серверу.

{% hint style="warning" %}
Если у вас высокая задержка, возможно, ваша интеграция netcode настроена на имитацию сетевой задержки. **Отключите VPN во время тестирования** для более реалистичных условий и получите [развертывание с низкой задержкой](https://docs.edgegap.com/ru/orkestraciya/deployments#server-placement).
{% endhint %}

☑️ Когда вы убедитесь, что можете без проблем подключиться к вашему развертыванию и закончите тестирование, **Остановите ваше развертывание** чтобы освободить ресурсы в вашей учетной записи для следующей сборки.

✅ Теперь вы можете перейти к следующему шагу.

{% hint style="info" %}
Найдите спецификацию openAPI для тестирования по адресу `{matchmaker-url}/swagger/v1/swagger.json`.
{% endhint %}

### 5. Интеграция игры

Matchmaker интегрируется с:

* **Игровым клиентом**, чтобы [управлять группами, участием, назначениями и билетами](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up),
* **Выделенным сервером**, чтобы [#backfill-match](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#backfill-match "mention") после того, как игрок уходит.

☑️ В **Игровым клиентом**, мы рекомендуем предоставлять игрокам обновления статуса билета с помощью внутриигрового интерфейса для наилучшего игрового опыта. См.:

☑️ В **Игровым клиентом**, убедитесь, что вы обрабатываете повторяемые `429 Too Many Requests`  ошибки с экспоненциальной задержкой и повторной попыткой, давая matchmaker время восстановиться во время резких всплесков трафика.

☑️ В **Игровым клиентом**, убедитесь, что вы обрабатываете неповторяемые ошибки:

* `404 Not Found` — билет был удален,
* `500 Internal Server Error` — временный сбой сервиса.

☑️ В **Игровой сервер**, считывать предпочтения игроков и начальный контекст сервера:

1. [Injected Variables (Matchmaker)](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#injected-environment-variables) **чтобы получить начальные данные подбора игроков для игроков.**
2. [Injected Variables (App Versions)](https://docs.edgegap.com/ru/orkestraciya/application-and-versions#other-parameters-optional) для параметров версии, настроек и секретов.
3. [Injected Variables (Deployment)](https://docs.edgegap.com/ru/orkestraciya/deployments#injected-environment-variables) для информации о развертывании, IP, местоположении и т. д...

☑️ После подключения игроков, **Игровой сервер и игровые клиенты** запускают сцену загрузки — 3D-сцену, социальный UI в стиле лобби или экран загрузки с индикатором прогресса, чтобы показать, что инициализация продолжается.

☑️ Убедитесь, что ваше [развертывание будет остановлено](https://docs.edgegap.com/docs/deployment#stop-a-deployment) корректно после завершения матча.

🙌 Поздравляем, вы завершили интеграцию Matchmaking! Чтобы узнать больше, продолжайте читать.

## 🏁 Продвинутый пример

Полноценная конфигурация, использующая все функции подбора игроков, включая [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention"), [#matchmaking-rules](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-rules "mention")и [#rule-expansion](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#rule-expansion "mention") может выглядеть так:

## 🎾 Пользовательский лобби

Пользовательские лобби (приватные лобби, sandbox-уровни) — очень популярный вариант для игры на одном устройстве и тестирования новых функций в играх до того, как они попадут в основные игровые режимы. Обычно требуют наименьшего количества ограничений, но при этом нужно обеспечить, чтобы игроки могли [#group-up](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up "mention").

{% hint style="info" %}
Для приватных лобби без публичного доступа установите `"team_size": 1`  и пусть владелец группы запускает игру в одиночку. Владелец может передать сведения о группе и назначенном хосте любому числу участников, чтобы они могли присоединиться.
{% endhint %}

{% hint style="success" %}
Добавьте `custom-lobby-example`  profile **в ваш существующий matchmaker** чтобы поддерживать пользовательские лобби.
{% endhint %}

## 🥛 Демонстрация Backfill

Опираясь на [#simple-example](#simple-example "mention")эта конфигурация демонстрирует [Backfill](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#backfill-match) с [Группы](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up).

## ⚔️ Соревновательные игры

Соревновательные игры сосредоточены на том, чтобы игроки состязались друг с другом за победу, будь то как отдельные игроки (free for all) или как команды. Обеспечьте честные и сбалансированные матчи, подбирая игроков или команды со схожим уровнем навыков, и поддерживайте темп игры, быстро находя честных соперников.

Вы можете **определить несколько команд по 1 или более игроков в каждой**, например:

<table><thead><tr><th width="300">Режим игры</th><th>Количество команд</th><th>Размер команды</th><th>Всего игроков</th></tr></thead><tbody><tr><td>5v5 FPS</td><td>2</td><td>5</td><td><strong>10</strong></td></tr><tr><td>5v5 MOBA</td><td>2</td><td>5</td><td><strong>10</strong></td></tr><tr><td>20x3 Battle Royale</td><td>20</td><td>3</td><td><strong>60</strong></td></tr><tr><td>10p Free For All</td><td>1</td><td>10</td><td><strong>10</strong></td></tr></tbody></table>

Определите несколько [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention") для правил и настроек, специфичных для игрового режима, и [расширяйте по мере необходимости](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#rule-expansion).

* **Для всех матчей:**
  * ограничьте [задержку подбора игроков](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#ping-optimization) чтобы не подбирать игроков слишком далеко друг от друга,
  * [#group-up](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up "mention") для заранее собранных групп и чтобы не превышать размеры команд,
  * постепенно ослабляйте ограничения по задержке со временем, чтобы находить больше игроков,
  * выделяйте больше CPU или памяти с помощью разных [#app-versions](https://docs.edgegap.com/ru/orkestraciya/application-and-versions#app-versions "mention") для конкретных профилей,
* **Для казуальных матчей:**
  * уберите ограничения по рангу, чтобы максимизировать скорость подбора и коэффициент заполнения матчей,
  * позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую для всех,
  * укажите размер группы backfill, чтобы заменять вышедших игроков, не превышая размеры команд,
  * снимите ограничения по задержке, чтобы гарантировать матч через 3 минуты (180 с) ожидания в очереди.
* **Для соревновательных матчей:**
  * ограничьте ранг, чтобы допускать только соперников со схожим уровнем навыков,
  * используйте ранги повышения или понижения, чтобы подбирать игроков на крайних уровнях лиги.
* **Для топ-1% матчей высокого уровня (челленджеры):**
  * используйте числовые рейтинги навыка (ELO), чтобы получить точный контроль над распределением навыков в матчах,
  * ждите дольше, прежде чем ослаблять требования к задержке, из-за меньшего количества игроков.

{% hint style="success" %}
Использование нескольких профилей для **разделения казуальных игровых режимов, соревновательных игровых режимов и игроков высшего уровня — челленджеров** позволяет настраивать правила и расширения отдельно для каждого типа игроков.
{% endhint %}

## 🤝 Кооперативные игры

Кооперативные игры требуют, чтобы игроки работали вместе как команда для достижения общей цели или против ИИ-соперника. Сопоставляйте игроков со схожими предпочтениями и игровыми привычками. Заменяйте ушедших игроков и улучшайте [#connection-quality](https://docs.edgegap.com/ru/orkestraciya/ping-beacons#connection-quality "mention") чтобы обеспечить отзывчивый игровой опыт.

При количестве команд 1 и максимальном размере команды 4, **требуется до 4 игроков на матч**.

Определите несколько [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention") для правил и настроек, специфичных для игрового режима:

* начинайте минимум с 4 игроков, чтобы удерживать игроков в очереди и максимизировать коэффициент заполнения матча,
* ограничьте [задержку подбора игроков](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#ping-optimization) чтобы не подбирать игроков слишком далеко друг от друга,
* позвольте игрокам выбирать определенную сложность игры, подходящую для уровня навыков каждого,
* позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую для всех,
* ограничьте разницу в уровнях игроков, чтобы требовать схожий уровень прогресса в игре,
* укажите размер группы backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,
* используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей аудитории,
* [#group-up](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up "mention") для заранее собранных групп и чтобы заполнять команды, не превышая емкость сервера,
* выделяйте больше CPU или памяти, используя разные [#app-versions](https://docs.edgegap.com/ru/orkestraciya/application-and-versions#app-versions "mention") для других профилей.

Начните с идеальных условий и [расширяйте ограничения](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#rule-expansion) чтобы обеспечить быстрые матчи:

* ослабляйте ограничения по задержке со временем, чтобы находить больше игроков,
* увеличивайте допустимую разницу в уровнях игроков, чтобы находить больше игроков,
* уменьшайте минимальный размер команды, чтобы требовалось меньше игроков и игра начиналась раньше,
  * сервер может заполнять пустые слоты ИИ-напарниками,
  * или [#backfill-match](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#backfill-match "mention") чтобы добавить игроков позже,
* установите минимальный размер команды 1, чтобы запускать игру в одиночку после 150 с ожидания в очереди

## 🎈 Социальные игры

Социальные игры сосредоточены на построении связей и отношений между игроками через сотрудничество, общение и общий опыт. Поддерживайте большое количество игроков, максимизируйте коэффициент заполнения матча и учитывайте предпочтения и игровые привычки игроков. Заменяйте ушедших игроков и обеспечьте высокое [#connection-quality](https://docs.edgegap.com/ru/orkestraciya/ping-beacons#connection-quality "mention") чтобы обеспечить отзывчивый игровой опыт.

При количестве команд 1 (free for all) и максимальном размере команды 50, **требуется до 50 игроков на матч**.

Определите [#matchmaking-profiles](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#matchmaking-profiles "mention") для правил и настроек, специфичных для игрового режима:

* ограничьте [задержку подбора игроков](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#ping-optimization) чтобы не подбирать игроков слишком далеко друг от друга,
* позвольте игрокам указывать предпочтения по режиму игры и находить режим, подходящий для всех,
* укажите размер группы backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,
* используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей аудитории,
* [#group-up](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#group-up "mention") для заранее собранных лобби или чтобы заполнять команды, не превышая емкость сервера,
* выделяйте больше CPU или памяти, используя разные [#app-versions](https://docs.edgegap.com/ru/orkestraciya/application-and-versions#app-versions "mention") для других профилей.

Начните с идеальных условий и [расширяйте ограничения](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#rule-expansion) чтобы обеспечить быстрые матчи:

* ослабляйте ограничения по задержке со временем, чтобы находить больше игроков,
* постепенно уменьшайте минимальный размер команды, чтобы требовалось меньше игроков и игра начиналась раньше,
  * сервер может заполнять пустые слоты ИИ-игроками,
  * или [#backfill-match](https://docs.edgegap.com/ru/learn/matchmaker-in-depth#backfill-match "mention") чтобы добавить игроков позже,
* установите минимальный размер команды 1, чтобы запускать игру в одиночку после 150 с ожидания в очереди.

[^1]: замените на собственное имя приложения

[^2]: замените на собственную версию приложения
