Свой сервер

Кастомный сервер KF2 (JP-гайд): Workshop, ротация карт, WebAdmin

Это перевод японского руководства, где автор собрал всё, что узнал при создании кастомного сервера KF2. Предполагается, что базовая установка уже сделана (см. руководство по выделенному серверу KF2 (японское)). Открывайте порты в брандмауэре Windows, антивирусе и роутере, а у компьютера-хоста задайте статический IP, чтобы не переделывать проброс. Если не получается, перезагрузите роутер и ПК.

Связь сервера с Workshop

Проще всего добавлять карты и мутаторы так, чтобы и сервер, и игроки скачивали их из Workshop.

  1. Откройте kf2server\KFGame\Config\PCServer-KFEngine.ini.
  2. В секции [IpDrv.TcpNetDriver] добавьте DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload и поставьте строку первой среди DownloadManagers. Если вы используете только Workshop, остальные можно удалить; если загрузка не идёт, удалите их.
  3. В той же секции увеличьте MaxDownloadSize=1024000 до MaxDownloadSize=102400000.
  4. В [IpDrv.HTTPDownload] задайте RedirectToURL=http://steamcommunity.com/app/232090/workshop/, так как адрес по умолчанию слишком медленный.

Что скачивать

Всё в том же PCServer-KFEngine.ini добавьте секцию [OnlineSubsystemSteamworks.KFWorkshopSteamworks] и впишите ID:

ServerSubscribedWorkshopItems=1554427429 // ControlledDifficulty

ID - последняя часть ссылки на страницу Workshop. При запуске сервера файлы скачиваются в kf2server\KFGame\Cache. Комментарии через // допустимы.

Настройка кастомных карт

В PCServer-KFGame.ini создайте секцию для каждой карты по образцу существующих:

[KF-BioticsLab KFMapSummary]
MapName=KF-BioticsLab

Берите реальное имя .kfm-файла из папки Cache.

Секция карты в PCServer-KFGame.ini Записи карт в PCServer-KFGame.ini.

Запустите сервер, откройте WebAdmin, Settings > Map Cycles и перетащите новые карты из AVAILABLE MAPS в MAP CYCLE. После этого они появятся в списке голосования.

Параметры запуска и мутаторы

Моды режимов и мутаторы задаются в строке запуска. В kf2server.bat по умолчанию стоит start .\Binaries\Win64\kf2server kf-bioticslab?adminpassword=123. Опции добавляются через знак вопроса:

start .\Binaries\Win64\kf2server kf-corridor?game=ControlledDifficulty_Eternal.CD_Survival?difficulty=3?gamelength=2?maxmonsters=50?spawncycle=dtf_v1?mutator=ClassicScoreboard.ClassicSCMut,FriendlyHUD.FriendlyHUDMutator

Несколько мутаторов разделяются запятыми.

Параметры запуска в bat-файле Файл kf2server.bat с параметрами запуска.

Удобно держать несколько bat-файлов с разными именами под разные конфигурации. Но несколько файлов не дают несколько серверов: для этого нужны разные порты. Учтите: Change Map в WebAdmin сбрасывает мод режима и мутаторы, а выбор карты в голосовании после матча - нет.

Порядок в списке карт

В PCServer-KFGame.ini, секция [KFGame.KFGameInfo], есть ActiveMapCycle=0 (номер активного цикла, счёт с нуля) и GameMapCycles=(Maps=(...)). Цикл можно править здесь, а не в WebAdmin. Если добавить в цикл фиктивные карты вроде "-------KF1-------", получатся заголовки в списке; при выборе такой записи откроется карта по умолчанию (BioticsLab).

Состояния предметов и предупреждения

При старте в чёрном окне консоли видны строки вида NetComeGo: Item State is 0:

  • 0: ещё не скачано, будет скачано.
  • 4: скачано и обновлено.
  • 12: скачано, нужно обновление, будет обновлено.
  • 20: проверка не удалась или потеряна связь с Workshop, нужен перезапуск сервера.
  • 8 и 36: автор не уверен (8 возможно проблема проверки обновлений, 36 вроде бы безвредно).

Предупреждение "Steam does not appear to be running" значит, что связь с Workshop потеряна и сервер нужно перезапустить. "Unable to download workshop item" значит, что предмет приватный или ID неверный.

Значки серверов

В браузере серверов обычный значок Ranked означает, что опыт набирается, мутаторов и кастомных настроек нет (кастомные карты возможны). Ranked Stock: опыт набирается, но используются мутаторы из белого списка или настройки вроде дружественного огня. Unranked: опыт не набирается, используются мутаторы или моды не из белого списка либо настройки, снимающие ранг.

Настройки сервера (PCServer-KFGame.ini)

После правки перезапустите сервер. Эти параметры сохраняют статус Ranked:

  • ReadyUpDelay=90 секунд ожидания в лобби, когда готовы все кроме одного.
  • GameStartDelay=4 секунды от готовности всех до старта (минимум 1; при 0 игра не начнётся).
  • TimeBetweenFailedVotes=10, VoteTime=60.0, MaxSpectators=2.
  • KickVotePercentage=0.66 (0.83 равно 5 из 6 игроков).
  • bDisableTeamCollision=False, bEnableDeadToVOIP=true, bAdminCanPause=True, bDisableVOIP=False, bDisablePublicTextChat=False, bDisableMapVote=False, bDisableKickVote=False.
  • MaxIdleTime=0 (максимум 300 секунд до кика бездействующих).
  • bSilentAdminLogin=False, bPartitionSpectators=False.
  • bEnableMapObjectives=True (false убирает задания); ищите под [KFGameContent.KFGameInfo_Survival] или Endless, а под [KFGame.KFGameInfo] оставьте True.
  • В PCServer-KFEngine.ini: bUsedForTakeover=False (true позволяет матчмейкингу использовать сервер).

Эти настройки переводят сервер в Ranked Stock: bDisablePickups=True (коробки с патронами всё равно появляются) и FriendlyFireScale больше 0.

Правки WebAdmin

Файлы лежат в kf2server\KFGame\Web\ServerAdmin; сначала сделайте резервную копию. Изменения применяются после обновления страницы, перезапуск не нужен.

Показать номер волны в Endless:

  • В gamesummary.inc замените строки про TIME (7 и 8, последние) на <dt class="gs_wave">Wave <%wave.num%></dt> и <dd class="gs_wave"><%wave.monsters.dead%>/<%wave.monsters.total%></dd>.

Правка gamesummary.inc Правка gamesummary.inc для показа волны.

  • В current_rules.inc добавьте в начало <dt>Wave</dt> и <dd><%wave.num%></dd>, а если нет строки Difficulty, добавьте и её (<%rules.difficulty.text%>).

Показать уровень перка: правьте current.html (добавьте <th>Level</th> после строки Perk, строка 63), current_players.html (добавьте <th>Perk</th> и <th>Level</th> под Player Name), current_player_row.inc (добавьте <td class="right"><%player.perk.level%></td> под player.perk.name) и current_players_row.inc (добавьте <td><%player.perk.name%></td> и <td class="center"><%player.perk.level%></td> под player.name, а класс ping замените с right на center). Автор предупреждает, что у него все игроки показывались как 25 уровня, так что эта часть может быть неверной.

Столбцы перка и уровня в WebAdmin Столбцы перка и уровня в таблице игроков.

Серверы Controlled Difficulty

  • Клиентская часть: если не изменить собственный KFEngine.ini игрока (Documents\My Games\KillingFloor2\KFGame\Config), игра почти всегда вылетает со второго матча. Измените MaxObjectsNotConsideredByGC=179220 на 33476, а SizeOfPermanentObjectPool=179220 на 0.
  • Команды чата: команды !cd по умолчанию доступны только на чтение (READ). Чтобы разрешить WRITE всем, задайте DefaultAuthLevel=CDAUTH_WRITE в KFControlledDifficulty.ini. Для отдельных игроков переведите SteamID в формат STEAM_0:x:xxxx через сервис Steam ID Finder и добавьте AuthorizedUsers=(SteamID="STEAM_0:1:485188694",Comment="Asapi").

Смотрите также: Controlled Difficulty для начинающих.

Вопросы и ответы

Как заставить сервер KF2 скачивать контент из Workshop?
В PCServer-KFEngine.ini добавьте DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload в секцию [IpDrv.TcpNetDriver], а затем перечислите ID предметов в секции [OnlineSubsystemSteamworks.KFWorkshopSteamworks] через ServerSubscribedWorkshopItems.
Почему клиенты вылетают со второй игры на сервере Controlled Difficulty?
По гайду, в KFEngine.ini клиента нужно задать MaxObjectsNotConsideredByGC=33476 и SizeOfPermanentObjectPool=0 вместо значений по умолчанию 179220.
Как разрешить всем игрокам команды записи CD?
В KFControlledDifficulty.ini замените DefaultAuthLevel=CDAUTH_READ на CDAUTH_WRITE или перечислите конкретных пользователей через AuthorizedUsers и их SteamID.