RE:NODE

Руководства11 мин чтения

Выделенный сервер Left 4 Dead 2: установка и настройки лобби

Выделенный сервер L4D2: установка, server.cfg и cvar Director, лобби и sv_search_key, пользовательские кампании, больше четырёх игроков и решение проблем.

Обновлено

0 прочтений

Большинство сессий Left 4 Dead 2 идут на чьём-то listen-сервере, и это работает, пока у хозяина не случится неудачный вечер, из-за которого вся кампания пропадает. Выделенный сервер здесь стоит совсем недорого - игра нетребовательна, четыре игрока и ИИ-Director укладываются в 2 ГБ - и он убирает главную причину, по которой забег заканчивается раньше времени. Чего он не убирает - это матчмейкинг L4D2, построенный вокруг лобби и официальных серверов, который охотно проигнорирует только что оплаченный вами сервер, если не сказать ему иначе. Этой части в руководстве посвящено больше всего места, потому что именно она ставит людей в тупик.

Listen-серверы, выделенные серверы и лобби#

В Left 4 Dead 2 есть три способа собрать четырёх человек в кампанию, и ведут они себя по-разному.

  • Listen-сервер - один игрок, хостящий внутри собственной игры. Это вариант по умолчанию, когда вы приглашаете друзей и нажимаете «играть». Машина хозяина выполняет симуляцию и ИИ-Director, его исходящий канал несёт всех, и его сбой заканчивает кампанию.
  • Локальный выделенный сервер - это srcds на той же машине, запущенный из консоли. Лучше, но всё ещё привязан к чьей-то одной машине.
  • Настоящий выделенный сервер работает где-то ещё, всё время, и ничей alt-tab не стоит группе финала.

Сложность в том, что в L4D2 нет простой схемы «зайти на этот сервер» для кооператива. Группа собирает лобби, лидер лобби нажимает старт, и матчмейкер выбирает сервер - обычно официальный сервер Valve. Одно то, что у вас есть свой сервер, этого само по себе не меняет. Меняют два cvar:

  • sv_search_key на сервере и то же значение, введённое в консоль лидера лобби перед стартом. Тогда матчмейкер рассматривает только серверы с этим ключом, то есть на практике ваш.
  • mm_dedicated_force_servers "203.0.113.10:27015" на клиенте, который направляет лобби на конкретный адрес.

Третий путь - прямой: sv_allow_lobby_connect_only 0 в конфиге сервера, и тогда любой может ввести connect 203.0.113.10:27015 в консоли разработчика вообще без лобби. По умолчанию стоит 1, и поэтому сервер, выглядящий совершенно здоровым, отклоняет каждое прямое подключение. Если вы возьмёте из этого руководства что-то одно, возьмите эту строку.

Требования и потребление ресурсов#

КонфигурацияRAMCPUПримечания
Кооператив на 4 игрока1-2 ГБ1 ядроDirector плюс три-четыре бота
Versus на 8 игроков2 ГБ1 ядроВдвое больше игроков, нагрузка почти та же
10-16 игроков с плагинами2-3 ГБ1-1,5 ядраРазблокированные слоты и SourceMod
Установлены пользовательские кампании2 ГБ1 ядроСтоит места на диске, а не памяти

L4D2 - игра на Source 2009 года, и это проявляется в лучшую сторону: объём памяти крошечный, и одного ядра хватает. Важны две вещи.

Первая - диск. Установка выделенного сервера занимает заметно больше десяти гигабайт, а пользовательские кампании - по 100-400 МБ каждая. Подбирайте диск, а не RAM.

Вторая - где находится машина. L4D2 работает на 30 тиках в секунду - вдвое реже, чем большинство шутеров на Source, - и игра полагается на клиентское предсказание, чтобы это скрыть. Добавьте к этому 90 мс задержки, и разница между тем, попадёт по вам Charger или промахнётся, становится лотереей. Выбирайте локацию рядом с вашей группой, а не посередине карты, а если игра ощущается плохо, измерьте, прежде чем покупать: задержка, джиттер и потеря пакетов объясняет, какая из трёх проблем у вас на самом деле, а выбор места для сервера описывает компромисс, когда группа разбросана.

Установка сервера и строка запуска#

Выделенный сервер - это app id 222860, устанавливается анонимно:

bash
$ steamcmd +force_install_dir /home/l4d2/server +login anonymous \    +app_update 222860 validate +quit$ cd /home/l4d2/server$ ./srcds_run -game left4dead2 -console -usercon -port 27015 \    +map c1m1_hotel +exec server.cfg

App id клиента - 550, и именно его нужно использовать при скачивании предметов Workshop через SteamCMD - деталь, на которой спотыкаются те, кто думает, что идентификатор сервера годится везде. Про app id, validate и скрипты обновления в целом рассказывает SteamCMD простыми словами.

Несколько стартовых карт кампаний, поскольку консоли нужно внутреннее имя, а не название:

КампанияПервая карта
Dead Centerc1m1_hotel
Dark Carnivalc2m1_highway
The Parishc5m1_waterfront
No Mercyc8m1_apartment

server.cfg: режим игры, сложность и Director#

left4dead2/cfg/server.cfg читается при запуске и при смене карты. Рабочая отправная точка:

left4dead2/cfg/server.cfg
hostname "Thursday night survivors"rcon_password "long-random-string"sv_password ""sv_lan 0sv_region 3sv_steamgroup ""sv_consistency 1sv_gametypes "coop,realism,survival,versus,teamversus,scavenge"mp_gamemode coopz_difficulty Normalsv_allow_lobby_connect_only 0sv_search_key thursdaycrewsv_alltalk 0sv_allowupload 0sv_allowdownload 1

Стоит понять, а не просто копировать:

  • sv_gametypes - список режимов, которые матчмейкеру разрешено размещать на этом сервере. Если режима в списке нет, лобби для него никогда не придут.
  • mp_gamemode - режим, который сервер запускает сейчас. Чтобы изменение вступило в силу, нужна смена карты.
  • z_difficulty принимает Easy, Normal, Hard или Impossible. Эксперт - это Impossible, что в первый раз всех удивляет.
  • sv_consistency 1 заставляет сервер проверять, что файлы клиента совпадают с его собственными. Это разница между тем, что несовпадающее дополнение приводит к понятному кику или к необъяснимому отключению посреди финала.
  • sv_steamgroup с идентификатором группы заставляет сервер появляться в этой группе Steam для её участников, а sv_steamgroup_exclusive 1 ограничивает его только ими. Это наименее болезненный механизм приватного сервера, который предлагает L4D2.

У ИИ-Director есть своё семейство cvar - z_common_limit для числа одновременно существующих заражённых, z_mob_spawn_min_size и z_mob_spawn_max_size для размера орды, director_no_bosses, чтобы Tank и Witch не появлялись. Прежде чем вписывать любой из них в конфиг, введите имя cvar само по себе в консоли сервера: оно выведет текущее значение, значение по умолчанию и флаги. Несколько cvar Director помечены как читы и ничего не делают, пока не включён sv_cheats или их не выставит внутри плагин, поэтому так много скопированных конфигов молча не имеют эффекта.

Порты и как привести группу на сервер#

ПортПротоколНазначение
27015UDPИгровой трафик и запросы Steam
27015TCPRCON, с -usercon
27005UDPИсходящий на клиенте, открывать ничего не нужно

Source ставит query на тот же порт, что и игру, так что достаточно одного выделения. Если сервер работает, но его никто не видит, дело в UDP 27015 или в sv_lan. Общий случай разобран в портах игровых серверов, а если вы всё-таки включаете RCON, то RCON без риска - пять минут, потраченные не зря: пароль - это вся аутентификация, а протокол его не скрывает.

запрашивает серверфильтрует кандидатовсовпадениесразу внутрьЛоббилидер жмёт стартConnect из консолинужен lobby_connect_only 0Матчмейкервыбирает серверsv_search_keyсовпадающее значениеВаш серверUDP 27015
Три способа привести группу на ваш сервер

На практике скажите группе сделать это один раз: открыть консоль разработчика, ввести sv_search_key thursdaycrew, затем создать лобби и нажать старт. Ключ сохраняется на время сессии. Тот, кто присоединяется позже, использует connect <ip>:27015, и это работает, потому что вы выставили sv_allow_lobby_connect_only 0.

Кампании-дополнения и sv_consistency#

Пользовательские кампании - это файлы .vpk. На сервере они лежат в left4dead2/addons/, и чтобы сервер их подхватил, его нужно перезапустить. Предметы Workshop скачиваются через SteamCMD по app id клиента:

bash
$ steamcmd +force_install_dir /home/l4d2/server +login anonymous \    +workshop_download_item 550 <workshop_id> +quit

Вот то, на чём хотя бы раз ошибается каждая группа: сервер не может отдать кампанию игроку, у которого её нет. В отличие от Garry's Mod, здесь нет пути быстрой загрузки, который установил бы VPK-кампанию на клиент. Все подписываются на один и тот же предмет Workshop, или никто в неё не играет. Опубликуйте ссылку на коллекцию в своём Discord, убедитесь, что все действительно перезапустили игру после подписки, и проверьте версию: кампания, обновлённая посреди недели, не совпадёт у тех, кто не перезапускал Steam. Как ведут себя такие загрузки вообще, описано в модах Steam Workshop на выделенных серверах.

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

SourceMod, L4DToolZ и больше четырёх игроков#

Versus нужно восемь слотов, что почти не меняет расчёт ресурсов. Кооператив с более чем четырьмя выжившими меняет куда больше, и это не параметр конфигурации - лимиты вшиты в код. Обычный путь - Metamod:Source с SourceMod сверху и L4DToolZ, плагином Metamod, вся работа которого состоит в снятии лимита игроков. Он добавляет:

CvarНазначение
sv_maxplayersСлоты для людей на сервере
sv_visiblemaxplayersСколько слотов показывает браузер
sv_removehumanlimitСнимает встроенный предел людей
sv_force_unreservedНе даёт серверу резервировать себя под лобби

Задавайте их в left4dead2/cfg/sourcemod/sourcemod.cfg, чтобы они применялись после загрузки плагинов. Будьте честны с собой насчёт того, что десять выживших делают с игрой: Director настраивали под четверых, кампании строили под четверых, и после восьми игроков кооперативный забег превращается в прогулку. Это весело, но это другая игра.

SourceMod - ещё и единственный способ вообще получить администрирование. Администраторы записываются в addons/sourcemod/configs/admins_simple.ini как Steam ID и набор флагов прав, sm_admin открывает внутриигровое меню, а sm plugins list показывает, что на самом деле загрузилось. Помнить нужно то же, что на любом сервере Source: обновление игры может сломать Metamod и SourceMod, пока оба не обновят, так что не ставьте набор плагинов за день до сессии.

Два cvar для ботов стоит знать даже на ванильном сервере. sb_all_bot_game 1 позволяет серверу проходить кампанию вообще без людей, что полезно для проверки пользовательской кампании. sb_stop 1 замораживает ботов на месте, и так проверяют, дело ли в поиске пути у ботов или в чём-то другом.

Решение проблем#

Лобби запускает игру на чужом сервере. Нет совпадающего sv_search_key или лидер его не выставил. Его нужно ввести на клиенте до создания лобби.

`connect` из консоли ничего не делает. sv_allow_lobby_connect_only всё ещё стоит на значении по умолчанию 1.

Игроков кикает при загрузке карты из-за несовпадения файлов. Дополнение есть у сервера и нет у клиента, или наоборот. У всех должны быть одни и те же VPK одной версии.

Кампания перезапускается с первой главы, когда уходит последний человек. Это возврат сервера в состояние лобби. Плагин SourceMod может удержать карту, но такое поведение заложено намеренно.

Боты-выжившие стоят на месте или ходят в стены. Пользовательские кампании со слабой навигационной сеткой. Сервер тут ничего не исправит; это заложено в самой карте.

Финал у всех подтормаживает. Tank плюс полная орда - самый тяжёлый момент в игре. Проверьте, что сервер не делит ядро с чем-то шумным и что ни один плагин не выполняет работу на каждый кадр. При 30 тиках запаса почти нет.

Сервер не виден в браузере. Браузер L4D2 и в лучшие времена ненадёжен. Сначала проверьте прямое подключение; если оно работает, прекратите отлаживать сервер.

Где его запускать#

В каталоге RE:NODE у Left 4 Dead 2 нет отдельной строки, так что готового тарифа L4D2 здесь нет. Честных варианта два: универсальная игровая панель с поддержкой этой игры или VDS, которым вы управляете сами, - VDS для L4D2 вполне достаточно, и остаётся место для голосового сервера или второй игры рядом. О портах, пользователях и поддержании процессов рассказывает несколько игровых серверов на одном VDS, а само решение - в выборе между VDS и игровой панелью: панель даёт консоль, бэкапы и расписания без администрирования Linux, VDS даёт всё и ответственность за это.

Что бы вы ни выбрали, список обслуживания L4D2 короткий. Обновляйте сервер, когда обновляется игра, держите папку дополнений в порядке, перезапускайте его раз в неделю и храните копию server.cfg где-нибудь вне сервера.

FAQ#

Нужен ли выделенный сервер для четверых друзей?

Строго говоря, нет, но он убирает сбой, которым заканчивается большинство сессий: падение игры хозяина или колебания его соединения. Он также означает, что кампания не привязана к тому, чтобы кто-то один был онлайн, и никому не нужно оставлять свою машину включённой.

Почему лобби постоянно отправляет нас на официальный сервер?

Потому что это поведение по умолчанию. Выставьте sv_search_key на своём сервере, попросите лидера лобби ввести тот же ключ в консоль перед стартом, и матчмейкер выберет ваш.

Могут ли в кооперативе играть больше четырёх человек?

Да, с плагином Metamod L4DToolZ, который разблокирует sv_maxplayers и связанные cvar. Игра сбалансирована под четверых, так что ждите более лёгкого забега, а не более трудного.

Должны ли игроки сами устанавливать пользовательские кампании?

Да. Сервер не может доставить VPK-кампанию клиенту. Все подписываются на один и тот же предмет Workshop и перезапускают игру до начала забега.

Сколько стоит содержание сервера L4D2?

По памяти очень мало - 2 ГБ покрывают почти всё, - но установка занимает больше десяти гигабайт, так что выбирайте тариф по диску, а не по RAM. При 30 тиках расположение важнее характеристик.

Из-за 30 тиков всё ощущается лагающим?

Отчасти. L4D2 создавалась на 30 тиках, и поддерживаемого способа это изменить нет, так что задержка между игроком и сервером - единственное, что вы реально можете контролировать. Измерьте маршрут, прежде чем считать сервер слабым.


Комментарии

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

0/2000