Server queries

From Valve Developer Community
< Ru
Jump to: navigation, search
English (en)Français (fr)Русский (ru)Translate (Translate)


Вы можете запросить информацию с работающего игрового сервера, используя пакеты UDP/IP. В этой статье описывается формат различных пакетов, которые могут быть отправлены или получены, а также протокол, используемый для их маршрутизации.

Типы данных

Все запросы сервера состоят из пяти основных типов данных, упакованных вместе в поток данных. Все типы имеют порядок байтов little endian.

Тип Описание
byte(en) 8-битный символ или беззнаковое целое число
short(en) 16-битное знаковое целое число
long(en) 32-битное знаковое целое число
float(en) 32-битное число с плавающей запятой
long(en) long(en) 64-битное беззнаковое целое число
string(en) Нуль-терминированное байтовое поле переменное длины, кодировка UTF-8

Протокол

Размер пакета, используемого протоколом опроса, составляет 1400 байт (без учета заголовка UDP/IP). Каждый ответ содержит заголовок, зависящий от протокола, но если ответ требует более одного пакета, то он будет разделен, и каждый пакет будет содержать дополнительный заголовок.

Пример ответа

Данные Тип Комментарий
Header long(en) Всегда равно -1 (0xFFFFFFFFF)
Содержимое

Формат мультипакетного ответа

Goldsource(en) сервер

Данные Тип Комментарий
Header long(en) Всегда равно -2 (0xFFFFFFFE)
ID long(en) Уникальный номер, присваиваемый сервером на каждый ответ
Packet number byte(en) Верхние 4 бита обозначают количество текущего пакета (начиная с 0), а нижние 4 бита - общее количество пакетов (от 2 до 15).
Содержимое

Source(en) сервер

Данные Тип Комментарий
Header long(en) Всегда равно -2 (0xFFFFFFFE)
ID long(en) То же значение, что и для сервера Goldsource(en). Однако, если Wikipedia icon most significant bit равен 1, то ответ был сжат алгоритмом Wikipedia icon Bzip2 и после получения необходимо распаковать ответ прежде чем он будет обработан
Total byte(en) Общее количество пакетов в ответе
Number byte(en) Номер пакета. Начинается с 0
Size short(en) Присутствует только в новой версии движка Source(en), это максимальный размер пакета, который может быть принят до того, как произойдет коммутация пакетов. Это касается только игрового протокола, в протоколе запросов к серверу невозможно запросить пакеты размером меньше, чем размер по умолчанию

Значение по умолчанию - 1248 байт (0x04E0)

Это присутствует только в первом пакете ответа и только в том случае, если ответ сжат
Данные Тип Комментарий
Size long(en) Размер всего ответа после его распаковки
CRC32 sum long(en) Контрольная сумма CRC32 несжатого ответа.
Содержимое

Так как UDP-пакеты могут прибывать в разном порядке и/или с задержкой, каждый пакет должен быть проверен своим "ID" и "Number", чтобы убедиться, что он всегда один и тот же ответ и что все пакеты прибыли.

Запросы

Сервер отвечает на 5 запросов:

A2S_INFO
Основная информация о сервере
A2S_PLAYER
Подробности о каждом игроке на сервере
A2S_RULES
Правила, которые использует сервер
A2A_PING
Пинг сервера. (УСТАРЕЛО)
A2S_SERVERQUERY_GETCHALLENGE
Возвращает номер вызова для использования в запросе игрока и правила. (УСТАРЕЛО)

Запросы должны отправляться в UDP-пакетах.

A2S_INFO

Получает информацию о сервере, включая, но не ограничиваясь: его название, карту, на которой он играет в настоящее время, и количество игроков.

Формат запроса

Данные Тип Значение
Header byte(en) 'T' (0x54)
Payload string(en) "Source Engine Query\0"
Challenge long(en) 4-byte challenge (опционально -- смотрите ниже)
FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69    ÿÿÿÿTSource Engi
6E 65 20 51 75 65 72 79 00                         ne Query.

Пример использования числа "challenge":

Если ответ сервера:

FF FF FF FF 41 0A 08 5E EA

Требуется повторить запрос с добавлением "challenge" числа в конец запроса:

FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 6E 65 20 51 75 65 72 79 00 0A 08 5E EA

Сервер может ответить данными немедленно. Однако, это делает его уязвимым перед "Reflection Amplification Attack". Это происходит из-за того, что ответ сервера в разы больше, чем запрос. Поэтому, сервер может ответить на запрос "challenge" значением используя S2C_CHALLENGE ('A' - 0x41). Данное изменение было введено в декабре 2020 для исправления "Reflection Amplification Attack" и все клиенты получили поддержу нового протокола. Посмотрите этот пост, чтобы получить дополнительную информацию.

Формат ответа

Note.pngПримечание:Оба SiN 1 Multiplayer(en) и Rag Doll Kung Fu(en) используют этот протокол ответа.
Данные Тип Комментарий
Header byte(en) Всегда равно 'I' (0x49)
Protocol byte(en) Версия протокола, используемая сервером
Name string(en) Имя сервера
Map string(en) Карта сервера, загруженного в данный момент
Folder string(en) Название папки, содержащей игровые файлы
Game string(en) Полное название игры
ID short(en) Steam Application ID(en)
Players byte(en) Количество игроков на сервере
Max. Players byte(en) Максимальное количество игроков на сервере
Bots byte(en) Количество ботов на сервере
Server type byte(en) Указывает тип сервера:
  • 'd' для выделенного сервера
  • 'l' для не выделенного сервера
  • 'p' для SourceTV(en) реле (proxy)
Environment byte(en) Указывает на операционную систему сервера:
  • 'l' для Linux
  • 'w' для Windows
  • 'm' или 'o' для Mac (код изменился после L4D1)
Visibility byte(en) Указывает, требуется ли серверу пароль:
  • 0 для публичного
  • 1 для частного
VAC(en) byte(en) Указывает, использует ли сервер VAC:
  • 0 для небезопасного
  • 1 для безопасного
Эти поля существуют в ответе только в том случае, если сервер - The Ship(en):
Данные Тип Комментарий
Mode byte(en) Показывает игровой режим:
  • 0 для Hunt
  • 1 для Elimination
  • 2 для Duel
  • 3 для Deathmatch
  • 4 для VIP-команды
  • 5 для Team Elimination
Witnesses byte(en) Количество свидетелей, необходимых для ареста игрока
Duration byte(en) Время (в секундах) до того, как игрок будет арестован во время наблюдения
Version string(en) Версия игры установлена на сервере
Extra Data Flag (EDF) byte(en) Если присутствует, то это указывает, какие дополнительные поля данных будут включены
Только если if ( EDF & 0x80 ) истина:
Данные Тип Комментарий
Port short(en) The server's game port number.
Только если if ( EDF & 0x10 ) истина:
Данные Тип Комментарий
SteamID(en) long(en) long SteamID сервера
Только если if ( EDF & 0x40 ) истина:
Данные Тип Комментарий
Port short(en) Номер порта наблюдателя для SourceTV(en).
Name string(en) Имя сервера наблюдателя для SourceTV(en).
Только если if ( EDF & 0x20 ) истина:
Данные Тип Комментарий
Keywords string(en) Теги, которые описывают игру в соответствии с сервером (для дальнейшего использования)
Только если if ( EDF & 0x01 ) истина:
Данные Тип Комментарий
GameID long(en) long 64-битный GameID сервера. Если он присутствует, то более точный AppID присутствует в младших 24 битах. Предыдущий AppID мог быть обрезан, поскольку он был принудительно помещен в 16-разрядное хранилище.
Note.pngПримечание:Rag Doll Kung Fu(en) серверы всегда возвращают 0 для "Server type"



Пример ответа для Counter-Strike: Source(en):

FF FF FF FF 49 02 67 61 6D 65 32 78 73 2E 63 6F    ÿÿÿÿI.game2xs.co
6D 20 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65    m Counter-Strike
20 53 6F 75 72 63 65 20 23 31 00 64 65 5F 64 75     Source #1.de_du
73 74 00 63 73 74 72 69 6B 65 00 43 6F 75 6E 74    st.cstrike.Count
65 72 2D 53 74 72 69 6B 65 3A 20 53 6F 75 72 63    er-Strike: Sourc
65 00 F0 00 05 10 04 64 6C 00 00 31 2E 30 2E 30    e......dl..1.0.0
2E 32 32 00                                        .22.

Пример ответа для The Ship(en):

FF FF FF FF 49 07 53 68 69 70 20 53 65 72 76 65    ÿÿÿÿI.Ship Serve
72 00 62 61 74 61 76 69 65 72 00 73 68 69 70 00    r.batavier.ship.
54 68 65 20 53 68 69 70 00 60 09 01 05 00 6C 77    The Ship.`....lw
00 00 01 03 03 31 2E 30 2E 30 2E 34 00             .....1.0.0.4.

Пример ответа для SiN 1 Multiplayer(en):

FF FF FF FF 49 2F 53 65 6E 73 65 6D 61 6E 6E 20    ÿÿÿÿI/Sensemann
53 69 4E 20 44 4D 00 70 61 72 61 64 6F 78 00 53    SiN DM.paradox.S
69 4E 20 31 00 53 69 4E 20 31 00 1D 05 00 10 00    iN 1.SiN 1......
6C 77 00 00 31 2E 30 2E 30 2E 30 00                lw..1.0.0.0.

Пример ответа для Rag Doll Kung Fu(en):

FF FF FF FF 49 FC 54 68 65 20 44 75 64 65 27 73     ÿÿÿÿIüThe Dude's
20 64 6F 6A 6F 00 53 6F 63 63 65 72 00 52 44 4B      dojo.Soccer.RDK
46 53 6F 63 63 65 72 00 52 61 67 44 6F 6C 6C 4B     FSoccer.RagDollK
75 6E 67 46 75 3A 20 53 6F 63 63 65 72 00 EA 03     ungFu: Soccer.ê.
01 04 00 00 77 00 00 32 2E 33 2E 30 2E 30 00        ....w..2.3.0.0.


Устаревший ответ GoldSource(en)

Серверы GoldSource отвечают тем же ответом, что и серверы Source. Более старые серверы и серверы до начала работы со Steam все еще отвечают в формате ответа, приведенном ниже. GoldSource можно отличить от Source с помощью AppID.

Данные Тип Комментарий
Header byte(en) Всегда равно 'm' (0x6D)
Address string(en) IP-адрес и порт сервера
Name string(en) Имя сервера
Map string(en) Карта сервера, загруженного в данный момент
Folder string(en) Название папки, содержащей игровые файлы
Game string(en) Полное название игры
Players byte(en) Количество игроков на сервере
Max. Players byte(en) Максимальное количество игроков на сервере
Protocol byte(en) Версия протокола, используемая сервером
Server type byte(en) Указывает тип сервера:
  • 'D' для выделенного сервера
  • 'L' для не выделенного сервера
  • 'P' для сервера HLTV
Environment byte(en) Указывает на операционную систему сервера:
  • 'L' для Linux
  • 'W' для Windows
Visibility byte(en) Указывает, требуется ли серверу пароль:
  • 0 для публичного
  • 1 для частного
Mod byte(en) Показывает, является ли игра модом:
Эти поля присутствуют в ответе только в том случае, если "Mod" равен 1:
Данные Тип Комментарий
Link string(en) URL на модный сайт
Download Link string(en) URL для загрузки мода
NULL byte(en) NULL байт (0x00)
Version long(en) Версия мода установлена на сервере
Size long(en) Пространство (в байтах) мода занимает
Type byte(en) Указывает тип мода:
  • 0 для одиночного и многопользовательского мода
  • 1 для только многопользовательского мода
DLL byte(en) Указывает, использует ли мод свою собственную DLL:
  • 0, если он использует Half-Life(en). DLL
  • 1 если он использует свою собственную DLL
VAC(en) byte(en) Указывает, использует ли сервер VAC:
  • 0 для небезопасного
  • 1 для безопасного
Bots byte(en) Количество ботов на сервере
Note.pngПримечание:HLTV серверы могут ответить запросом, который является либо неполным, либо неправильным, если количество слотов 255.


Пример ответа:

FF FF FF FF 6D 37 37 2E 31 31 31 2E 31 39 34 2E    ÿÿÿÿm77.111.194.
31 31 30 3A 32 37 30 31 35 00 46 52 20 2D 20 56    110:27015.FR - V
65 72 79 47 61 6D 65 73 2E 6E 65 74 20 2D 20 44    eryGames.net - D
65 61 74 6D 61 74 63 68 20 2D 20 6F 6E 6C 79 20    eatmatch - only
73 75 72 66 5F 73 6B 69 20 2D 20 6E 67 52 00 73    surf_ski - ngR.s
75 72 66 5F 73 6B 69 00 63 73 74 72 69 6B 65 00    urf_ski.cstrike.
43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 00 0C    Counter-Strike..
12 2F 64 6C 00 01 77 77 77 2E 63 6F 75 6E 74 65    ./dl..www.counte
72 2D 73 74 72 69 6B 65 2E 6E 65 74 00 00 00 01    r-strike.net....
00 00 00 00 9E F7 0A 00 01 01 00                   ....ž÷.....

A2S_PLAYER

В этом запросе запрашивается информация об игроках, находящихся в данный момент на сервере. Для получения номера вызова необходимо сделать первый шаг.

Note.pngПримечание:SourceTV(en) не отвечает на этот запрос.

Формат запроса

Данные Тип Значение
Header byte(en) 'U' (0x55)
Challenge int(en) Номер вызова или -1 (0xFFFFFFFFF) для получения номера вызова

Формат ответа на вызов:

Данные Тип Значение
Header byte(en) 'A' (0x41)
Challenge int(en) Номер вызова

Пример запроса на вызов:

FF FF FF FF 55 FF FF FF FF                         ÿÿÿÿUÿÿÿÿ"

Пример ответа на вызов:

FF FF FF FF 41 4B A1 D5 22                         ÿÿÿÿAÿÿÿÿ"

Пример запроса A2S_PLAYER с номером принятого вызова:

FF FF FF FF 55 4B A1 D5 22                         ÿÿÿÿUÿÿÿÿ"

Формат ответа

Данные Тип Комментарий
Header byte(en) Всегда равно 'D' (0x44)
Players byte(en) Количество игроков, чья информация была собрана
Для каждого игрока в "Players" есть этот фрагмент в ответе:
Данные Тип Комментарий
Index byte(en) Индекс игрока, начиная с 0
Name string(en) Имя игрока
Score long(en) Счет игрока
Duration float(en) Время (в секундах) того, как долго подключен игрок к серверу

The Ship(en) дополнительная информация об игроке (приходит после основной информации в пакете):

Данные Тип Комментарий
Deaths long(en) Смерти игрока
Money long(en) Деньги игрока
Note.pngПримечание:Когда игрок пытается подключиться к серверу, они записываются в количестве игроков. Однако, их не будет в списке информации об игроках.
Warning.pngПредупреждение:CS:GO Сервер по умолчанию возвращает только максимальное количество игроков и время работы сервера. Вы должны изменить серверный cvar "host_players_show" в server.cfg на значение "2", если хотите вернуться к старому формату со списком игроков.


Пример ответа:

FF FF FF FF 44 02 01 5B 44 5D 2D 2D 2D 2D 3E 54    ÿÿÿÿD..[D]---->T
2E 4E 2E 57 3C 2D 2D 2D 2D 00 0E 00 00 00 B4 97    .N.W<----.....´—
00 44 02 4B 69 6C 6C 65 72 20 21 21 21 00 05 00    .D.Killer !!!...
00 00 69 24 D9 43                                  ..i$ÙC

Пример ответа The Ship(en):

FF FF FF FF 44 13 00 53 68 69 70 6D 61 74 65 31    ▒▒▒▒D..Shipmate1
00 00 00 00 00 00 00 80 BF 01 53 68 69 70 6D 61    .......▒▒.Shipma
74 65 32 00 00 00 00 00 00 00 80 BF 02 53 68 69    te2.......▒▒.Shi
70 6D 61 74 65 33 00 00 00 00 00 00 00 80 BF 03    pmate3.......▒▒.
53 68 69 70 6D 61 74 65 34 00 00 00 00 00 00 00    Shipmate4.......
80 BF 04 53 68 69 70 6D 61 74 65 35 00 00 00 00    ▒▒.Shipmate5....
00 00 00 80 BF 07 28 31 29 4C 61 6E 64 4C 75 62    ...▒▒.(1)LandLub
62 65 72 00 00 00 00 00 D3 8E 68 45 00 00 00 00    ber.....ӎhE....
C4 09 00 00 00 00 00 00 C4 09 00 00 00 00 00 00    ▒.......▒.......
C4 09 00 00 00 00 00 00 C4 09 00 00 00 00 00 00    ▒.......▒.......
C4 09 00 00 00 00 00 00 C4 09 00 00                ▒.......▒...

A2S_RULES

Возвращает правила сервера или конфигурационные переменные в формате имя/значение. Этот запрос требует начального шага проверки.

Пример запроса

Данные Тип Комментарий
Header byte(en) Всегда равно 'V' (0x56)
Challenge long(en) Номер вызова или -1 (0xFFFFFFFFF) для получения номера вызова

Формат ответа на вызов:

Данные Тип Комментарий
Header byte(en) Всегда равно 'A' (0x41)
Challenge long(en) Номер вызова

Пример запроса на вызов:

FF FF FF FF 56 FF FF FF FF                         ÿÿÿÿVÿÿÿÿ"

Пример ответа на вызов:

FF FF FF FF 41 4B A1 D5 22                         ÿÿÿÿVK¡Õ"
Warning.pngПредупреждение:Некоторые серверы обходят ответ вызовом, и вместо этого немедленно посылают полный ответ по правилам. Это наблюдалось на нескольких серверах, которые изменили свой сетевой код, а также на серверах, работающих под управлением старых движков. Простой способ обнаружить такую ситуацию - если заголовок пакета равен -2 (0xFFFFFFFFE), или -1 (0xFFFFFFFFF) с заголовком сообщения 0x45 ('E').
Warning.pngПредупреждение:CS:GO Ответ по правилам нарушен с момента обновления CSGO 1.32.3.0 (21 февраля 2014 г.). До обновления правила урезались при превышении MTU, после обновления правила ответа не отправляются вообще. Также можно увидеть консольное сообщение: [NET] Cannot send connectionless packet to xxx.xxx.xxx.xxx:xxxxx '0x45' exceeding MTU (2644)

Окончательный запрос, включающий номер полученного вызова:

FF FF FF FF 56 4B A1 D5 22                         ÿÿÿÿVK¡Õ"

Формат ответа

Note.pngПримечание:Ответы к этому запросу обычно многопакетные.
Данные Тип Комментарий
Header byte(en) Всегда равно 'E' (0x45).
Rules short(en) Количество правил в ответе
Для каждого правила в "Rules" есть этот фрагмент в ответе:
Данные Тип Комментарий
Name string(en) Название правила
Value string(en) Значение правила
Warning.pngПредупреждение:Старые игры, обычно на Source SDK 2007, могут отвечать урезанным однопакетным ответом. В этом случае сообщение может быть прервано в середине строки или между name и value.

Пример ответа:

FE FF FF FF 56 0A 00 00 02 FF FF FF FF 45 5D 00    þÿÿÿV....ÿÿÿÿE].
5F 74 75 74 6F 72 5F 62 6F 6D 62 5F 76 69 65 77    _tutor_bomb_view
61 62 6C 65 5F 63 68 65 63 6B 5F 69 6E 74 65 72    able_check_inter
76 61 6C 00 30 2E 35 00 5F 74 75 74 6F 72 5F 64    val.0.5._tutor_d
65 62 75 67 5F 6C 65 76 65 6C 00 30 00 5F 74 75    ebug_level.0._tu
74 6F 72 5F 65 78 61 6D 69 6E 65 5F 74 69 6D 65    tor_examine_time
00 30 2E 35 00 5F 74 75 74 6F 72 5F 68 69 6E 74    .0.5._tutor_hint
5F 69 6E 74 65 72 76 61 6C 5F 74 69 6D 65 00 31    _interval_time.1
30 2E 30 00 5F 74 75 74 6F 72 5F 6C 6F 6F 6B 5F    0.0._tutor_look_
61 6E 67 6C 65 00 31 30 00 5F 74 75 74 6F 72 5F    angle.10._tutor_
6C 6F 6F 6B 5F 64 69 73 74 61 6E 63 65 00 32 30    look_distance.20
30 00 5F 74 75 74 6F 72 5F 6D 65 73 73 61 67 65    0._tutor_message
5F 63 68 61 72 61 63 74 65 72 5F 64 69 73 70 6C    _character_displ
61 79 5F 74 69 6D 65 5F 63 6F 65 66 66 69 63 69    ay_time_coeffici
65 6E 74 00 30 2E 30 37 00 5F 74 75 74 6F 72 5F    ent.0.07._tutor_
6D 65 73 73 61 67 65 5F 6D 69 6E 69 6D 75 6D 5F    message_minimum_
64 69 73 70 6C 61 79 5F 74 69 6D 65 00 31 00 5F    display_time.1._
74 75 74 6F 72 5F 6D 65 73 73 61 67 65 5F 72 65    tutor_message_re
70 65 61 74 73 00 35 00 5F 74 75 74 6F 72 5F 76    peats.5._tutor_v
69 65 77 5F 64 69 73 74 61 6E 63 65 00 31 30 30    iew_distance.100
30 00 61 6C 6C 6F 77 5F 73 70 65 63 74 61 74 6F    0.allow_spectato
72 73 00 31 00 61 6D 78 5F 63 6C 69 65 6E 74 5F    rs.1.amx_client_
6C 61 6E 67 75 61 67 65 73 00 31 00 61 6D 78 5F    languages.1.amx_
6C 61 6E 67 75 61 67 65 00 66 72 00 61 6D 78 5F    language.fr.amx_
6E 65 78 74 6D 61 70 00 64 65 5F 61 7A 74 65 63    nextmap.de_aztec
00 61 6D 78 5F 74 69 6D 65 6C 65 66 74 00 30 30    .amx_timeleft.00
3A 30 30 00 61 6D 78 6D 6F 64 78 5F 76 65 72 73    :00.amxmodx_vers
69 6F 6E 00 31 2E 37 36 64 00 63 6F 6F 70 00 30    ion.1.76d.coop.0
00 63 73 64 6D 5F 61 63 74 69 76 65 00 31 00 63    .csdm_active.1.c
73 64 6D 5F 76 65 72 73 69 6F 6E 00 32 2E 31 00    sdm_version.2.1.
64 65 61 74 68 6D 61 74 63 68 00 31 00 64 65 63    deathmatch.1.dec
61 6C 66 72 65 71 75 65 6E 63 79 00 36 30 00 65    alfrequency.60.e
64 67 65 66 72 69 63 74 69 6F 6E 00 32 00 68 6F    dgefriction.2.ho
73 74 61 67 65 5F 64 65 62 75 67 00 30 00 68 6F    stage_debug.0.ho
73 74 61 67 65 5F 73 74 6F 70 00 30 00 68 75 6D    stage_stop.0.hum
61 6E 73 5F 6A 6F 69 6E 5F 74 65 61 6D 00 61 6E    ans_join_team.an
79 00 6A 74 70 31 30 31 38 31 00 63 68 75 74 65    y.jtp10181.chute
00 6D 61 78 5F 71 75 65 72 69 65 73 5F 73 65 63    .max_queries_sec
00 31 00 6D 61 78 5F 71 75 65 72 69 65 73 5F 73    .1.max_queries_s
65 63 5F 67 6C 6F 62 61 6C 00 31 00 6D 61 78 5F    ec_global.1.max_
71 75 65 72 69 65 73 5F 77 69 6E 64 6F 77 00 31    queries_window.1
00 6D 65 74 61 6D 6F 64 5F 76 65 72 73 69 6F 6E    .metamod_version
00 31 2E 31 39 00 6D 70 5F 61 6C 6C 6F 77 6D 6F    .1.19.mp_allowmo
6E 73 74 65 72 73 00 30 00 6D 70 5F 61 75 74 6F    nsters.0.mp_auto
6B 69 63 6B 00 30 00 6D 70 5F 61 75 74 6F 74 65    kick.0.mp_autote
61 6D 62 61 6C 61 6E 63 65 00 30 00 6D 70 5F 62    ambalance.0.mp_b
75 79 74 69 6D 65 00 39 39 39 39 00 6D 70 5F 63    uytime.9999.mp_c
34 74 69 6D 65 72 00 33 35 00 6D 70 5F 63 68 61    4timer.35.mp_cha
74 74 69 6D 65 00 35 00 6D 70 5F 63 6F 6E 73 69    ttime.5.mp_consi
73 74 65 6E 63 79 00 31 00 6D 70 5F 66 61 64 65    stency.1.mp_fade
74 6F 62 6C 61 63 6B 00 30 00 6D 70 5F 66 6C 61    toblack.0.mp_fla
73 68 6C 69 67 68 74 00 31 00 6D 70 5F 66 6F 6F    shlight.1.mp_foo
74 73 74 65 70 73 00 31 00 6D 70 5F 66 6F 72 63    tsteps.1.mp_forc
65 63 61 6D 65 72 61 00 30 00 6D 70 5F 66 6F 72    ecamera.0.mp_for
63 65 63 68 61 73 65 63 61 6D 00 30 00 6D 70 5F    cechasecam.0.mp_
66 72 61 67 73 6C 65 66 74 00 30 00 6D 70 5F 66    fragsleft.0.mp_f
72 65 65 66 6F 72 61 6C 6C 00 30 00 6D 70 5F 66    reeforall.0.mp_f
72 65 65 7A 65 74 69 6D 65 00 32 00 6D 70 5F 66    reezetime.2.mp_f
72 69 65 6E 64 6C 79 66 69 72 65 00 30 00 6D 70    riendlyfire.0.mp
5F 67 68 6F 73 74 66 72 65 71 75 65 6E 63 79 00    _ghostfrequency.
30 2E 31 00 6D 70 5F 68 6F 73 74 61 67 65 70 65    0.1.mp_hostagepe
6E 61 6C 74 79 00 31 33 00 6D 70 5F 6B 69 63 6B    nalty.13.mp_kick
70 65 72 63 65 6E 74 00 30 00 6D 70 5F 6C 69 6D    percent.0.mp_lim
69 74 74 65 61 6D 73 00 30 00 6D 70 5F 6C 6F 67    itteams.0.mp_log
64 65 74 61 69 6C 00 33 00 6D 70 5F 6C 6F 67 66    detail.3.mp_logf
69 6C 65 00 31 00 6D 70 5F 6C 6F 67 6D 65 73 73    ile.1.mp_logmess
61 67 65 73 00 31 00 6D 70 5F 6D 61 70 76 6F 74    ages.1.mp_mapvot
65 72 61 74 69 6F 00 31 00 6D 70 5F 6D 61 78 72    eratio.1.mp_maxr
6F 75 6E 64 73 00 30 00 6D 70 5F 6D 69 72 72 6F    ounds.0.mp_mirro
72 64 61 6D 61 67 65 00 30 00 6D 70 5F 70 6C 61    rdamage.0.mp_pla
79 65 72 69 64 00 30 00 6D 70 5F 72 6F 75 6E 64    yerid.0.mp_round
74 69 6D 65 00 33 00 6D 70 5F 73 74 61 72 74 6D    time.3.mp_startm
6F 6E 65 79 00 38 30 30 00 6D 70 5F 74 69 6D 65    oney.800.mp_time
6C 65 66 74 00 30 00 6D 70 5F 74 69 6D 65 6C 69    left.0.mp_timeli
6D 69 74 00 30 00 6D 70 5F 74 6B 70 75 6E 69 73    mit.0.mp_tkpunis
68 00 30 00 6D 70 5F 77 69 6E 64 69 66 66 65 72    h.0.mp_windiffer
65 6E 63 65 00 31 00 6D 70 5F 77 69 6E 6C 69 6D    ence.1.mp_winlim
69 74 00 30 00 70 61 75 73 61 62 6C 65 00 31 00    it.0.pausable.1.
73 76 5F 61 63 63 65 6C 65 72 61 74 65 00 35 00    sv_accelerate.5.
73 76 5F 61 69 6D 00 30 00 73 76 5F 61 69 72 61    sv_aim.0.sv_aira
63 63 65 6C 65 72 61 74 65 00 31 30 30 00 73 76    ccelerate.100.sv
5F 61 69 72 6D 6F 76 65 00 31 00 73 76 5F 61 6C    _airmove.1.sv_al
6C 6F 77 75 70 6C 6F 61 64 00 31 00 73 76 5F 61    lowupload.1.sv_a
6C 6C 74 61 6C 6B 00 31 00 73 76 5F 62 6F 75 6E    lltalk.1.sv_boun
63 65 00 31 00 73 76 5F 63 68 65 61 74 73 00 30    ce.1.sv_cheats.0
00 73 76 5F 63 6C 69 65 6E 74 74 72 61 63 65 00    .sv_clienttrace.
31 00 73 76 5F 63 6C 69 70 6D 6F 64 65 00 30 00    1.sv_clipmode.0.
73 76 5F 63 6F 6E 74 61                            sv_conta
FE FF FF FF 56 0A 00 00 12 63 74 00 00 73 76 5F    þÿÿÿV....ct..sv_
66 72 69 63 74 69 6F 6E 00 34 00 73 76 5F 67 72    friction.4.sv_gr
61 76 69 74 79 00 37 35 30 00 73 76 5F 6C 6F 67    avity.750.sv_log
62 6C 6F 63 6B 73 00 30 00 73 76 5F 6D 61 78 72    blocks.0.sv_maxr
61 74 65 00 32 35 30 30 30 00 73 76 5F 6D 61 78    ate.25000.sv_max
73 70 65 65 64 00 33 32 30 00 73 76 5F 6D 69 6E    speed.320.sv_min
72 61 74 65 00 31 35 30 30 30 00 73 76 5F 70 61    rate.15000.sv_pa
73 73 77 6F 72 64 00 30 00 73 76 5F 70 72 6F 78    ssword.0.sv_prox
69 65 73 00 32 00 73 76 5F 72 65 67 69 6F 6E 00    ies.2.sv_region.
33 00 73 76 5F 72 65 73 74 61 72 74 00 30 00 73    3.sv_restart.0.s
76 5F 72 65 73 74 61 72 74 72 6F 75 6E 64 00 30    v_restartround.0
00 73 76 5F 73 74 65 70 73 69 7A 65 00 31 38 00    .sv_stepsize.18.
73 76 5F 73 74 6F 70 73 70 65 65 64 00 37 35 00    sv_stopspeed.75.
73 76 5F 75 70 6C 6F 61 64 6D 61 78 00 30 2E 35    sv_uploadmax.0.5
00 73 76 5F 76 6F 69 63 65 65 6E 61 62 6C 65 00    .sv_voiceenable.
31 00 73 76 5F 77 61 74 65 72 61 63 63 65 6C 65    1.sv_wateraccele
72 61 74 65 00 31 30 00 73 76 5F 77 61 74 65 72    rate.10.sv_water
66 72 69 63 74 69 6F 6E 00 31 00                   friction.1.

A2A_PING

Пингование сервера, чтобы узнать, существует ли он. Может быть использован для вычисления задержки на сервере.

Warning.pngПредупреждение:Согласно Valve (см. Talk Page), A2A_PING больше не поддерживается в Counter-Strike: Source и Team Fortress 2, и считается устаревшей функцией.

Пример запроса

Данные Тип Значение
Header byte(en) 'i' (0x69)
FF FF FF FF 69                                     ÿÿÿÿi

Формат ответа

Goldsource(en) сервер

Данные Тип Значение
Header byte(en) 'j' (0x6A)
Payload string(en) Null
FF FF FF FF 6A 00                                  ÿÿÿÿj.

Source(en) сервер

Данные Тип Значение
Heading byte(en) 'j' (0x6A)
Payload string(en) '00000000000000.'
FF FF FF FF 6A 30 30 30 30 30 30 30 30 30 30 30    ÿÿÿÿj00000000000
30 30 30 00                                        000.

A2S_SERVERQUERY_GETCHALLENGE

Запросы A2S_PLAYER и A2S_RULES требуют номера вызова. Раньше этот номер можно было получить с помощью запроса A2S_SERVERQUERY_GETCHALLENGE. В новых играх это больше не работает. Вместо этого, отправьте запросы A2S_PLAYER или A2S_RULES с начальным вызовом -1 (0xFFFFFFFF), чтобы получить используемый номер вызова.

На некоторых движках (подтвержденные AppID: 17510, 17530, 17740, 17550, 17700) она может быть использована. Формат:

Пример запроса

Данные Тип Значение
Header byte(en) 'W' (0x57)
FF FF FF FF 57                                     ÿÿÿÿW

Формат ответа

Данные Тип Комментарий
Header byte(en) Должен быть равен 'A' (0x41.)
Challenge long(en) Номер вызова для использования

Пример ответа:

FF FF FF FF 41 4B A1 D5 22                         ÿÿÿÿAK¡Õ"

Реализации

Смотрите так же