В API подбора матчей есть множество возможностей для поиска пользователей на основе их мастерства. Больше информации об основном наборе функций для подбора матчей доступно
здесь.
Введение
Распространённой проблемой при подборе игроков в многопользовательском режиме является поиск пользователей с одинаковым уровнем мастерства или стилем игры, чтобы они могли получать максимум от каждого матча. Чтобы решить эту проблему, Steamworks предлагает разнообразные возможности для поиска матчей, основанные на системе лобби Steam, а также API статистики.
Процесс подбора матчей
Обычно процесс составления групп для игры таков:
- В игре пользователь указывает, что хочет играть в многопользовательском режиме, а также тип многопользовательского режима (правила, сценарий и т. д.). Он также указывает уровень мастерства пользователей, которых хотел бы найти.
- Игра ищет лобби, для которых установлены схожие правила, используя API поиска лобби. Одним из параметров будет желаемый уровень мастерства.
- Если лобби найдено, игра присоединяет к нему пользователя, если нет — создаёт новое.
- После этого владелец лобби может обновить требования к мастерству, исходя из среднего мастерства игроков в лобби (или на основе других параметров).
- Как только матч завершится, в статистике каждого игрока можно обновить значение его мастерства.
Создание и обновление уровня мастерства
Чтобы отслеживать уровень мастерства игрока, необходимо создать новую статистику (этот процесс описан на странице API статистик). По желанию можно создать несколько статистик для отслеживания отдельных показателей мастерства. Рекомендуем установить для этих статистик параметр «Только приращение» (Increment Only), который означает, что серверы Steam позволяют только увеличивать показатель мастерства — так пользователь не сможет занижать свои результаты, чтобы играть против слабых соперников. Значения могут быть любыми. Обычно они варьируются в диапазоне от 0 до 100, но это не обязательно. Статистику мастерства следует использовать для поиска и настройки матча, а после его завершения — обновлять её. Крайне рекомендуем отметить эту статистику как задаваемую только официальными игровыми серверами (Official GS), чтобы игроки не могли искажать её.
Для этого выполните следующее:
- Создайте статистику с параметром «Только приращение» для каждого показателя мастерства, который хотите отслеживать, во вкладке «Статистика» раздела управления данными приложения.
- В игре узнайте уровень мастерства пользователя, вызвав ISteamUserStats::GetStat для каждого пункта статистики, а затем используйте полученные данные для подбора матча.
- После завершения матча обновите значения мастерства, последовательно вызвав ISteamUserStats::SetStat для каждого пункта статистики, а затем вызвав ISteamUserStats::StoreStats.
Поиск игровой сессии на основе мастерства
Чтобы лобби предназначалось для игроков с определённым уровнем мастерства, после его создания владелец должен добавить в его метаданные все показатели своего мастерства, вызвав
ISteamMatchmaking::SetLobbyData. Разыскивая игровую сессию с помощью API поиска лобби, другой пользователь сможет использовать
ISteamMatchmaking::AddRequestLobbyListNearValueFilter, чтобы найти различные лобби со схожим уровнем мастерства. Результат возвращается как список, отсортированный по наилучшему совпадению. Если показателей мастерства несколько, вы можете добавить несколько фильтров, учитывающих близость отдельных значений, — причём чем раньше фильтр задан, тем выше его приоритет при сортировке результатов поиска. При поиске также можно задать максимальный и минимальный уровень мастерства.
Как избежать малого числа результатов при поиске
В других системах подбора матчей часто возникает ситуация, когда поиск возвращает настолько малое число результатов, что трудно найти матч в принципе, а тем более — хорошо подходящий для пользователя. Это часто происходит в многопользовательских играх, где у игровой сессии есть строгое время начала и конца (к примеру, в стратегиях в реальном времени), когда пользователи не могут присоединиться по ходу игры. В итоге число пользователей, ищущих матч ровно в ту же секунду, может быть невелико. В Steam эта проблема решается благодаря очень быстрому поиску — обычно результат выдаётся через несколько сотен миллисекунд. Это означает, что вы можете начать поиск с относительно строгими фильтрами и ослабить их в последующих итерациях. Таким образом, за отведённое для поиска время увеличивается шанс найти хорошее совпадение, а у игры остаётся контроль над тем, сколько пользователю придется ждать начала матча.
Подбор по игровому стилю
Подбор матчей с помощью Steamworks не ограничен одним показателем: вы можете задать несколько параметров для поиска. Это позволяет подбирать матчи исходя из игрового стиля, а также по-разному измерять уровень мастерства в разных игровых режимах. Для этого нужно создать несколько статистик, задать несколько параметров поиска в создаваемых лобби и добавить несколько фильтров по близости значения.