Большинство сессий 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, и поэтому сервер, выглядящий совершенно здоровым, отклоняет каждое прямое подключение. Если вы возьмёте из этого руководства что-то одно, возьмите эту строку.
Требования и потребление ресурсов#
| Конфигурация | RAM | CPU | Примечания |
|---|---|---|---|
| Кооператив на 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, устанавливается анонимно:
$ 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.cfgApp id клиента - 550, и именно его нужно использовать при скачивании предметов Workshop через SteamCMD - деталь, на которой спотыкаются те, кто думает, что идентификатор сервера годится везде. Про app id, validate и скрипты обновления в целом рассказывает SteamCMD простыми словами.
Несколько стартовых карт кампаний, поскольку консоли нужно внутреннее имя, а не название:
| Кампания | Первая карта |
|---|---|
| Dead Center | c1m1_hotel |
| Dark Carnival | c2m1_highway |
| The Parish | c5m1_waterfront |
| No Mercy | c8m1_apartment |
server.cfg: режим игры, сложность и Director#
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 или их не выставит внутри плагин, поэтому так много скопированных конфигов молча не имеют эффекта.
Порты и как привести группу на сервер#
| Порт | Протокол | Назначение |
|---|---|---|
27015 | UDP | Игровой трафик и запросы Steam |
27015 | TCP | RCON, с -usercon |
27005 | UDP | Исходящий на клиенте, открывать ничего не нужно |
Source ставит query на тот же порт, что и игру, так что достаточно одного выделения. Если сервер работает, но его никто не видит, дело в UDP 27015 или в sv_lan. Общий случай разобран в портах игровых серверов, а если вы всё-таки включаете RCON, то RCON без риска - пять минут, потраченные не зря: пароль - это вся аутентификация, а протокол его не скрывает.
На практике скажите группе сделать это один раз: открыть консоль разработчика, ввести sv_search_key thursdaycrew, затем создать лобби и нажать старт. Ключ сохраняется на время сессии. Тот, кто присоединяется позже, использует connect <ip>:27015, и это работает, потому что вы выставили sv_allow_lobby_connect_only 0.
Кампании-дополнения и sv_consistency#
Пользовательские кампании - это файлы .vpk. На сервере они лежат в left4dead2/addons/, и чтобы сервер их подхватил, его нужно перезапустить. Предметы Workshop скачиваются через SteamCMD по app id клиента:
$ 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.