Самый быстрый способ привести игроков на сервер - не список серверов. Это ссылка или команда, ведущая прямо на адрес: steam://connect/203.0.113.10:27015 одним кликом открывает Steam и подключает к игровому серверу Steam, connect 203.0.113.10:27015 делает то же из консоли игры на Source, а почти в каждой игре для всего остального есть поле «подключиться по IP». Вместе со ссылкой можно передать и пароль - steam://connect/203.0.113.10:27015/secret, - это удобно, но значит, что у любого, у кого есть ссылка, есть и пароль. Подвохи мелкие, но реальные: некоторые чат-приложения не делают ссылки steam:// кликабельными, одним играм нужен query-порт, другим - игровой, а горстка игр вообще игнорирует ссылку и требует собственного синтаксиса.
Три пути на сервер#
Игроки попадают на сервер одним из трёх способов, и каждый ломается по-своему.
- Список серверов. Зависит от регистрации на мастер-сервере, открытого query-порта и фильтров игрока. Когда он не работает, причины - в статье почему сервер не виден в списке серверов.
- Прямое подключение. Игрок вводит адрес и порт. Нужен только игровой порт, и это самый надёжный способ из существующих.
- Ссылка. URL
steam://или собственный URL игры, который запускает игру и подключается. Это прямое подключение с меньшим количеством ввода и несколькими особенностями платформ сверху.
Когда список медленный или капризный, прямое подключение и ссылки - то, что позволяет сообществу продолжать играть. Они же работают для серверов, которые намеренно не публикуются в списке.
Ссылки steam://connect#
Steam регистрирует себя как обработчик URL steam://. Форма для подключения документирована Valve:
steam://connect/<address>[:<port>][/<password>]Адресом может быть IP-адрес или имя хоста. Несколько примеров:
steam://connect/203.0.113.10:27015steam://connect/203.0.113.10:27015/herring-barrel-42steam://connect/play.example.com:27015Когда игрок кликает по такой ссылке, Steam опрашивает сервер, показывает небольшое окно с названием сервера, картой и числом игроков и запускает нужную игру с командой подключения. Для игр на движке Source - CS2, Team Fortress 2, Garry's Mod, Left 4 Dead 2 - это просто работает, потому что игровой порт и query-порт у них совпадают.
Для игр, где они различаются, поведение бывает разным. Окно Steam общается с query-портом, а игре нужен игровой порт, и разные игры решают это по-разному. Если ссылка на игровой порт показывает «server not responding», а сама игра по IP подключается нормально, попробуйте указать в ссылке query-порт. Проверьте на своей игре, прежде чем публиковать ссылку для двухсот человек. Пары портов для популярных игр - в статье query-порты и A2S.
Пароль из ссылки передаётся игре при подключении. Символы, имеющие особый смысл в URL, - пробелы, #, ?, /, % - ломают ссылку или искажаются; если собираетесь вставлять пароль в ссылку, составьте его из букв, цифр и дефисов.
steam://run с аргументами запуска
Вторая полезная форма запускает игру по её app id с аргументами, что позволяет передать собственные параметры подключения игры:
steam://run/<app id>//<arguments>/steam://run/730//+connect%20203.0.113.10:27015/Аргументы кодируются как в URL, поэтому пробел становится %20. В основном это полезно для игр, которые игнорируют steam://connect, но принимают параметр подключения в командной строке. Помните, что app id здесь - это app id клиента игры, а не выделенного сервера; та же путаница описана в статье токены игровых серверов Steam.
Где ссылки работают, а где нет#
Ссылка steam:// работает только там, где что-то передаёт её операционной системе, а та - Steam.
- Веб-браузеры в первый раз спрашивают («Open Steam?»), а затем открывают. Работает.
- Чат Steam и оверлей Steam обрабатывают их сами. Работает.
- Discord не превращает ссылки
steam://в кликабельные в сообщениях. Их можно скопировать и вставить в адресную строку браузера - это работает, но неуклюже. - Многие форумы и конструкторы сайтов ради безопасности вырезают из ссылок неизвестные схемы URL.
Телефоны ломаются тише. Игрок, читающий Discord с телефона, нажимает на ссылку, ничего полезного не происходит, и он решает, что ссылка сломана. Ссылки помогают только на той машине, где будет запущена игра. То же касается игроков на консолях: у Xbox или PlayStation нет клиента Steam, которому можно передать ссылку, поэтому для кроссплей-сервера рядом со ссылкой простыми словами нужно написать собственный способ подключения консоли - код, внутриигровой список или приглашение от друга.
Обычный обходной путь - обычный адрес https://, который перенаправляет на ссылку Steam. Подойдёт всё, что умеет отправлять редирект. С nginx:
location = /join { return 302 steam://connect/203.0.113.10:27015;}Теперь https://example.com/join кликабелен везде, на мгновение открывает браузер и передаёт управление Steam. Цель позже можно поменять, не редактируя каждое сообщение со ссылкой. Не вставляйте пароль в редирект, по которому может пройти кто угодно в интернете, по той же причине, по которой вы не публиковали бы его открыто.
Прямое подключение в разных играх#
В каждой игре свой способ ввести адрес. Вот самые распространённые.
| Игра | Как подключиться напрямую | Пример |
|---|---|---|
| CS2, TF2, Garry's Mod, L4D2 | Консоль разработчика | connect 203.0.113.10:27015 |
| Minecraft Java | Multiplayer, Direct Connection | play.example.com или 203.0.113.10:25570 |
| Valheim | Join Game, Add server | 203.0.113.10:2456 (игровой порт) |
| Rust | Консоль F1 | client.connect 203.0.113.10:28015 |
| FiveM | Консоль F8 или ссылка | connect 203.0.113.10:30120 |
| Arma 3 | Параметры лаунчера | -connect=203.0.113.10 -port=2302 -password=secret |
| Terraria | Multiplayer, Join via IP | Адрес, затем порт 7777 |
| 7 Days to Die | Connect to IP | Адрес и порт 26900 |
Несколько деталей из этой таблицы стоит расписать.
Игры на Source и пароли. Задайте пароль до подключения: password "herring-barrel-42", затем connect 203.0.113.10:27015. Если сначала подключиться, сервер вас отклонит, и придётся повторить. Консоль разработчика должна быть включена в настройках игры.
Minecraft вообще никак не связан со Steam. Клиент сначала пробует SRV-запись для имени, затем имя или адрес на порту 25565, если вы не добавите порт. Начиная с 1.20 лаунчер также поддерживает Quick Play, который может запустить игру и подключиться к серверу прямо из профиля лаунчера с --quickPlayMultiplayer "play.example.com". Как спрятать нестандартный порт за именем, объясняет статья SRV-записи для Minecraft.
Valheim подключается по IP на игровой порт, по умолчанию 2456, и спрашивает пароль в отдельном окне. Игроки с кроссплеем на Xbox или из Microsoft Store вообще не могут подключиться по IP; они используют шестизначный код подключения из лога сервера.
У FiveM свои ссылки. fivem://connect/203.0.113.10:30120 открывает клиент и подключается, а серверы из списка Cfx.re получают короткий адрес cfx.re/join/, который работает в браузере и не раскрывает в самой ссылке голый IP.
Rust подключается через консоль F1 с client.connect - именно это стоит за кнопками «connect» в большинстве списков серверов Rust. В ванильном Rust пароля на вход нет; приватные серверы полагаются на плагины или на то, что их нет в списке.
Arma 3 сложнее, потому что клиенту обычно нужно загрузить моды сервера, прежде чем он сможет подключиться. Параметры командной строки из таблицы работают, но большинству игроков удобнее прямое подключение в лаунчере Arma 3 на его вкладке Servers: он читает список модов сервера и предлагает загрузить подходящие. Для модифицированного милсим-сервера раздавайте вместе с адресом файл пресета модов; как держать их в синхроне, описано в статье сервер Arma 3 и моды.
Подключение через друга
В списке друзей Steam есть третий путь, которому адрес вообще не нужен. Когда друг на сервере, по правому клику на нём может появиться «Join Game». Это работает, когда игра сообщает Steam, где находится игрок, - игры на движке Source это делают, как и многие другие, - и использует тот же путь подключения, что и ссылка. Часто это самый простой способ для нового игрока: его друг уже на сервере, он кликает - и он внутри. Пароли при этом учитываются, так что сервер с паролем всё равно его спросит. И именно поэтому «приватный» сервер без пароля не очень-то приватен: любой из списка друзей игрока может зайти следом за ним.
Пароли: как задать и передать#
Ссылка для прямого подключения - только половина дела, если на сервере есть пароль на вход. Каждая игра хранит его на стороне сервера в своём месте:
| Игра | Настройка на сервере |
|---|---|
| Игры на Source | sv_password "secret" в server.cfg |
| Valheim | Аргумент запуска -password (минимум 5 символов) |
| Arma 3 | password = "secret"; в server.cfg |
| Terraria | password=secret в serverconfig.txt |
| Factorio | game_password в server-settings.json |
| 7 Days to Die | ServerPassword в serverconfig.xml |
| Project Zomboid | Password= в servertest.ini |
В Minecraft пароля на вход нет; доступ вместо этого управляется белым списком, и это в любом случае лучшая модель, потому что она работает на уровне отдельного игрока. Об этом - статья белый список и права в Minecraft.
Общий пароль - слабый механизм контроля. У каждого, кто его когда-либо получал, он так и остаётся, он путешествует на скриншотах и в пересланных сообщениях, и отозвать его для одного человека нельзя. Для всего, что больше небольшой компании друзей, предпочитайте белый список, привязанный к ID игроков, а пароль считайте фильтром от случайных сканеров, а не защитой. Когда кто-то уходит со скандалом, смените пароль и отправьте новую ссылку только тем, кому она нужна.
Имена вместо цифр#
IP-адрес в ссылке ломается в тот день, когда сервер переезжает. Имя это переживает. Направьте A-запись вроде play.example.com на адрес сервера и используйте имя в ссылках и сообщениях; steam://connect принимает имена хостов, как и поля прямого подключения почти во всех играх. Запись и способ её проверить показаны в статье привязка домена к игровому серверу.
Порт - это то, что имена не переносят. SRV-записи читают лишь немногие клиенты - самый важный из них Minecraft Java, - поэтому для большинства игр в ссылке по-прежнему нужен :27015 или какой там у вас порт. Держите номер в ссылке; не рассчитывайте, что игроки его запомнят.
На RE:NODE адрес сервера и выделенные порты находятся на странице сервера в панели. Адрес остаётся неизменным на всё время жизни сервера, а смена тарифа не пересобирает сервер и не меняет его адрес, так что ссылка, которой вы поделились сегодня, продолжит работать и после апгрейда.
Страница подключения, которая всегда актуальна#
Для сообщества с несколькими серверами или игроками на нескольких платформах одно место со всеми адресами лучше россыпи закреплённых сообщений. Оно может быть очень простым: одна страница или один канал в Discord, где на каждый сервер есть блок с названием, адресом и портом, ссылкой для подключения через ваш редирект, правилом про пароль («спросите модератора», а не сам пароль) и тем, какой способ использовать на какой платформе.
Два улучшения делают его намного полезнее. Во-первых, показывайте, работает ли каждый сервер и насколько он заполнен. Это запрос по таймеру - тот же запрос A2S, который отправляет список серверов, - и он превращает вопрос «сервер лежит?» в чате в то, что люди могут увидеть сами. Как публиковать это из короткого скрипта, показывает статья вебхуки Discord для статуса сервера. Во-вторых, держите адреса за именами и редиректами, которыми управляете вы, чтобы переезд сервера был одним изменением на вашей стороне, а не неделей, в течение которой люди пользуются старым адресом.
Сайты со списками серверов снаружи работают так же: хранят ваш адрес, опрашивают его по таймеру и дают игрокам кнопку подключения, за которой обычно стоит ссылка steam://connect или собственный аналог игры. Если список показывает ваш сервер офлайн, когда на нём есть игроки, значит, список опрашивает порт, который не отвечает, - обычно игровой вместо query-порта.
Что делать, если ссылка ничего не делает#
| Симптом | Вероятная причина |
|---|---|
| Клик вообще ничего не делает | Приложение не передаёт ссылки steam:// дальше; вставьте её в браузер |
| Браузер говорит, что ни одно приложение не может открыть ссылку | Steam не установлен или потерялся обработчик протокола - перезапуск Steam обычно его восстанавливает |
| Окно Steam пишет, что сервер не отвечает | В ссылке игровой порт там, где Steam нужен query-порт, или query-порт закрыт |
| Игра открывается, но остаётся в главном меню | Игра не поддерживает steam://connect; используйте её собственный синтаксис подключения |
| Подключается, затем «bad password» | Специальные символы в пароле исказились в URL |
| Ссылка работала в прошлом месяце, а теперь нет | Сервер переехал или сменился порт; имя в ссылке это бы пережило |
Если ссылка не работает, а ввод адреса в игре работает, с сервером всё в порядке, и проблема исключительно в ссылке. Если не работает ни то, ни другое, это проблема подключения, и пошаговая версия - статья почему игроки не могут подключиться к вашему серверу.
FAQ#
Можно ли включить пароль в ссылку steam://connect?
Да - steam://connect/address:port/password. Пароль есть у любого, кто видит ссылку, поэтому делитесь ей только в закрытых каналах и не используйте в самом пароле символы вроде #, ? и /, потому что они ломают URL.
Почему в Discord нельзя кликнуть по ссылкам steam://?
Discord не делает ссылки steam:// кликабельными в сообщениях. Вставьте ссылку в браузер или настройте обычный адрес https://, который перенаправляет на ссылку Steam, и делитесь им.
Какой порт указывать в ссылке Steam - игровой или query?
В играх на Source они совпадают. В других играх окно подключения Steam общается с query-портом, поэтому, если ссылка с игровым портом пишет, что сервер не отвечает, попробуйте query-порт. Проверьте, прежде чем делиться.
Можно ли использовать доменное имя в steam://connect?
Да. Steam перед подключением резолвит имя хоста в адрес. SRV-записи он не читает, поэтому указывайте порт в ссылке, если игра использует не порт по умолчанию.
Нужна ли игрокам Minecraft ссылка Steam?
Нет. Minecraft Java вообще не использует Steam. Игроки добавляют сервер в разделе Multiplayer с адресом и, при необходимости, портом, а профиль лаунчера может подключаться автоматически через Quick Play.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.