Браузер Серверов

Материал из ARK Wiki
Перейти к навигации Перейти к поиску

На этой странице описывается, как получить список всех онлайн-серверов ARK и запросить их текущий статус, как это делает браузер серверов в игре.

Получение списка серверов

Официальные сервера и неофициальные сервера приобретаются отдельно. Чтобы получить список официальных серверов, вы должны использовать Ark's Web API. Ark использует Valve's Master Server Query Protocol для получения списка неофициальных серверов.

Запрос информации о сервере

Информация о сервере получается с помощью Valve's Server Query Protocol. Описания полей протокола без изменений (плагины Steam Workshop не учитываются). Серверы Ark используют следующие ниже. Модифицированные серверы Ark, конечно, могут подделывать или изменять значение любого из полей и добавлять дополнительные поля.

Информационные запросы

Поле Тип Описание
Версия протокола Байт Версия протокола сервера Ark. На данный момент 17.
Имя сервера Строка Имя сервера Ark. Для немодифицированных серверов это может включать номер версии. (описано ниже).
Карта Строка Название карты. Карта по умолчанию называется "TheIsland".
Папка Строка Всегда равно "ark_survival_evolved"
Игра Строка Всегда соответствует "ARK: Survival Evolved"
AppID Короткий Неиспользуемый - всегда равен 0.
Количество игроков Байт Количество игроков, которые сейчас онлайн.
Максимальное количество игроков Байт Максимальное количество игроков.
Количество ботов Байт Неиспользуемый - всегда равен 0.
Тип сервера Байт 0x64 для выделенного сервера, 0x6C для невыделенного сервера.
Платформа Байт 0x6C для Linux, 0x6F для Mac или 0x77 для Windows.
Частный? Байт 0 для общедоступных серверов, 1 для частных серверов. Серверы с 1 не показаны.
VAC? Байт 1, если только сервер не запущен с параметром -insecure.
Версия Строка Неиспользуемый - всегда равен "1.0.0.0".
Флаг дополнительных данных (EDF) Байт Битовое поле, описывающее, какие дополнительные поля следуют (см. ниже). Обычно равен 0xB1.
Дополнительные данные Байты Байтовое поле переменной длины. См. формат ниже.

Таким образом, ответ от немодифицированного сервера будет выглядеть примерно так (поля не показаны в их правильном размере):

[A2S Заголовок] 49 11 [Имя сервера] [Название карты] 61 72 6B 5F 73 75 72 76 69 76 61
6C 5F 65 76 6F 6C 76 65 64 00 41 52 4B 3A 20 53 75 72 76 69 76 61 6C 20 45 76 6F
6C 76 65 64 00 00 00 [Количество игроков] [Максимум игроков] 00 [Тип сервера] [Платформа] 
[Частный? ] 01 31 2E 30 2E 30 2E 30 00 B1 [Порт] [SteamID  ] [Ключевые слова] C3 BE
47 05 00 00 00 00 00

Имя сервера

Немодифицированные серверы Ark ограничивают поле имени сервера до 63 символов. Они также добавляют версию сервера к имени своего сервера. Имя сервера и версия сервера разделяются пробелом-дефисом-пробелом-скобками -(, после чего номер версии можно прочитать до следующей правой скобки или до конца строки.

Дополнительные данные

EDF Маска Поле Тип Описание
0x80 Игровой порт Короткий Номер порта, на котором работает игровой сервер.
0x10 SteamID Длинный SteamID владельца сервера
0x40 Порт SourceTV Короткий Неиспользованный
0x40 Хост SourceTV Строка Неиспользованный
0x20 Переменные сервера Строка Формат см. в ниже.
0x01 Идентификатор игры Длинный Идентификатор игры в Steam. Меньше 24 бита всегда равны 346110.

Переменные сервера

Поле "Переменные" представляет собой строку, содержащую неупорядоченный список параметров сервера «Ключ:Значение», разделенных запятыми. Список всегда должен начинаться с запятой, но не ожидайте ее в соответствии с принципом надежности. В таблице ниже описаны известные ключи, тип и описание их наблюдаемых значений, которые могут измениться в любое время. Ключи могут быть чувствительны к регистру?

Ключ Тип Ценность
OWNINGID Целое Фактический владелец сервера, используемый в Steam Socket API.
OWNINGNAME Целое Отображается владелец сервера, используемый в Steam Socket API.
NUMOPENPUBCONN Целое Количество доступных публичных слотов для игроков.
P2PADDR Целое Адрес для подключения с помощью Steam Socket API.
P2PPORT Целое Номер порта для подключения с помощью Steam Socket API.
SESSIONFLAGS Целое Неизвестный??
ModId_l Целое Неизвестный? При задании всегда кажется равным нулю, даже если установлены моды.

Запросы игроков

Серверы Ark по запросу возвращают некоторую информацию об игроках, подключенных в данный момент.

Поле Тип Описание
Количество игроков Байт Количество игроков, подключенных в настоящее время.
Информация об игроке Байты Для каждого игрока включена запись игрока. См. формат ниже.

Вход игрока

Поле Тип Описание
Индекс Байт Неиспользованные - всегда ноль.
Имя Строка Имя игрока в кодировке UTF-8.
Оценка Длинный Неиспользованные - всегда ноль.
Продолжительность Поплавок Количество секунд, в течение которых игрок был в системе.

Запросы правил

Поле Тип Описание
Количество правил Байт Количество следующих записей правила. Ошибка: не доверяйте!! Попробуйте выполнить синтаксический анализ до конца пакета.
Правила Байты Для каждого правила включена запись правила. Формат см. в ниже.

Ввод правил

Правила сервера представляют собой список последовательностей Key:Value. Поля ключа и значения представляют собой строки, заканчивающиеся нулевым байтом. Список правил также включает серверные переменные из запроса информации о сервере, которые не повторяются в этой таблице. Как и переменные сервера в информационном запросе, не ожидайте присутствия каких-либо из них, и они могут измениться в любое время.

Ключ Тип Описание
CUSTOMSERVERNAME_s Строка имя сервера (без версии сервера) в нижнем регистре.
DAYTIME_s Строка Текущее время суток, обычно в формате ISO 8601 "чч:мм". Для игровых режимов SoTF начинается с "Лобби: " или "Матч: " чтобы указать, находится ли сервер в настоящее время в лобби или в матче, соответственно. Моды полной конверсии могут изменить это, как им нравится, поэтому обработка исключений является обязательной.
GameMode_s Строка Имя класса игрового режима UE4, который в данный момент воспроизводится на сервере. Класс ванильного игрового режима называется "TestGameMode_C". Поскольку одновременно на сервере может быть запущен только один активный игровой режим, им управляет первый мод в порядке модов сервера.
MATCHTIMEOUT_f Десятичный Неизвестно - всегда кажется равным 120,0.
Networking_i 0 / 1 Неизвестный?? Всегда кажется 0.
OFFICIALSERVER_i 0 / 1 1 для официального сервера, 0 для неофициального сервера. N.B. Даже если для сервера установлено значение 1, он не будет отображаться как официальный сервер, пока его IP-адрес не будет найден в файле officialservers.ini.
SEARCHKEYWORDS_s Строка Неиспользуемый - всегда равен "Пользовательский"
ServerPassword_b true / false True, если серверу требуется пароль для подключения, в противном случае false.
BUILDID Десятичный Текущая версия сервера, определяемая идентификатором сборки.
SERVERUSESBATTLEYE_b 0 / 1 True, если на сервере включен античит BattlEye.
ClusterId_s Строка Имя кластера, если сервер кластеризован.
LEGACY_i 0 / 1 True, если сервер является устаревшим официальным сервером.
SESSIONISPVE_i 0 / 1 True, если сервер PvE
ALLOWDOWNLOADITEMS_i 0 / 1 True, если сервер позволяет загружать элементы из облака.
ALLOWDOWNLOADCHARS_i 0 / 1 True, если сервер позволяет загружать персонажей из облака.

Запросы и Ping Challenge

Серверы Ark не поддерживают ни запросы ping, ни запросы вызовов (оба они сейчас считаются устаревшими). Запросы на вызов обрабатываются с помощью запросов информации или списка игроков. Большинство других игр получают задержку сервера, измеряя время прохождения туда и обратно других отправленных пакетов и деля его на два (не знаю, как это делает Ark).