Свой сервер

Выделенный сервер KF2: справка по официальной вики (порты, параметры запуска, INI, Workshop, Takeover)

Это сжатая версия страницы официальной вики Killing Floor 2 о выделенных серверах, переложенная в формат справочника. Пошаговые руководства — в статьях Выделенный сервер KF2 через SteamCMD и Запуск выделенного сервера KF2.

Установка и обновление через SteamCMD

Аккаунт с купленной KF2 не нужен: входите анонимно.

Steam> login anonymous
Steam> force_install_dir .\KF2Server\
Steam> app_update 232130 validate
Steam> quit
  • app_update 232130 обновляет существующую установку; validate дополнительно проверяет файлы.
  • app_update 232130 -beta "имя ветки" ставит бета-ветку, если Tripwire её запускает.

Автоматизация одной строкой:

SteamCmd +force_install_dir ./KF2Server +login anonymous +app_update 232130 validate +exit

Или скрипт, который запускается через SteamCmd +runscript kf2_ds.txt:

force_install_dir ./KF2Server
login anonymous
app_update 232130 validate
exit

validate при каждом обновлении перезаписывает KF2Server.bat. Если вы его правили, запускайте сервер своим bat-файлом.

В Linux: sudo apt install steamcmd, те же команды в скрипт с абсолютным путём в force_install_dir, запуск steamcmd +runscript /путь/update.txt.

Запуск сервера

start .\Binaries\win64\kfserver kf-bioticslab
./Binaries/Win64/KFGameSteamServer.bin.x86_64 kf-bioticslab

Входящий в комплект .bat в Linux не работает.

Чтобы сервер на Windows сам поднимался после падения, запускайте его в цикле (скрипт SuSpeCT с форума killingfloor.ru):

@echo off
title KF2 ANTICRASH
:loop
echo (%time%) Server started.
start /wait .\Binaries\win64\kfserver.exe kf-bioticslab?MaxPlayers=6?Difficulty=1
echo (%time%) WARNING: server closed or crashed, restarting.
goto loop

Чтобы остановить сервер насовсем, сначала закройте окно скрипта, потом окно сервера.

Если в логе повторяется Attempting server re-register now... и Waiting for Steam Server UID: закройте игры Steam на этой машине, проверьте файлы и установите UE3Redist.exe из Binaries\Redist.

Порты

ПортПо умолчаниюПротоколНазначение
Игровой7777UDPОсновной игровой трафик
Query27015UDPМастер-сервер Steam
Web Admin8080TCPВеб-админка, если включена
Steam20560UDPSteam
NTP123UDPТолько Weekly Outbreak: время из интернета, чтобы выбрать нужный ивент

Режимы игры

По умолчанию запускается Survival (6 игроков). Остальные выбираются через ?Game= или во вкладке Change Map в WebAdmin:

РежимДобавка к URL запускаИгроков
Versus Survival?Game=KFGameContent.KFGameInfo_VersusSurvival?maxplayers=12до 12
Weekly Outbreak?Game=KFGameContent.KFGameInfo_WeeklySurvival6
Endless?Game=KFGameContent.KFGameInfo_Endless6

На момент написания вики Versus поддерживал карты BurningParis, BioticsLab, Prison, VolterManor и Farmhouse.

Параметры командной строки

Сначала запустите сервер один раз: он создаст файлы конфигурации из шаблонов. Файлы Default* никогда не правьте.

URL-аргументы (kf-bioticslab?AdminPassword=x?MaxPlayers=6):

АргументСмысл
AdminName=Имя пользователя WebAdmin при настройке из командной строки
AdminPassword=Пароль администратора сервера
MaxPlayers=Лимит игроков
Difficulty=0 Нормально, 1 Сложно, 2 Самоубийственно, 3 Ад на земле

Ключи (kf-bioticslab -Port=7787):

КлючСмысл
-Port=Игровой порт. При смене query-порт сдвигается на ту же величину, если не задан -QueryPort
-QueryPort=Порт запросов Steam (по умолчанию 27015)
-WebAdminPort=Порт WebAdmin (в вики помечен как бета)
-Multihome=Привязывает сервер к одному IP на машине с несколькими адресами
-PREFERREDPROCESSOR=Привязывает процесс к одному ядру/потоку
-ConfigSubDir=Читает INI из подпапки KFGame/Config, чтобы у нескольких серверов были свои настройки

PCServer-KFGame.ini

СекцияКлючСмысл
[Engine.AccessControl]AdminPasswordПароль администратора, он же пароль WebAdmin для пользователя Admin
[Engine.AccessControl]GamePasswordПароль для входа игроков
[Engine.GameReplicationInfo]ServerNameНазвание в браузере и в игре
[Engine.GameReplicationInfo]AdminContactКонтакт, который показывается в браузере
секция игрыbUseMapList=TrueИспользовать свой список карт вместо всех
секция игрыGameLength=0 короткая (4 волны), 1 обычная (7), 2 длинная (10)

Пример цикла карт:

GameMapCycles=(Maps=("KF-BurningParis","KF-Bioticslab","KF-Outpost","KF-VolterManor","KF-Catacombs","KF-EvacuationPoint"))

Больше 519 карт в ротации не ставьте: вики предупреждает, что это ломает сервер.

PCServer-KFEngine.ini: тикрейт и защита от DDoS

В секции [IpDrv.TcpNetDriver]:

КлючПо умолчаниюСмысл
NetServerMaxTickRate30Тикрейт сервера
EnableDDOSProtectionДолжен быть True, чтобы работали настройки ниже
MaxUnverifiedConnections1500Одновременные непроверенные подключения, после которых новые игнорируются
HandShakeTimeOutSec1Таймаут рукопожатия в секундах
EnableBlockListБлокировать IP со слишком большим числом непроверенных подключений
MaxUnverifiedConsWithSameIpToBlock16Непроверенных подключений с одного IP до блокировки
BlockListTimeSeconds60На сколько секунд блокируется IP

Подробнее о тикрейте: гайд по тикрейту KF2.

WebAdmin

  1. В KFWeb.ini, секция [IpDrv.WebServer], поставьте bEnabled=true. Если на одном IP несколько серверов, поменяйте ListenPort=8080.
  2. Откройте в браузере http://ip-сервера:8080. Пользователь Admin, пароль — AdminPassword из PCServer-KFGame.ini. Если пароль администратора не задан, войти не сможет никто.

Несколько админов: в KFWebAdmin.ini в секцию [WebAdmin.WebAdmin] добавьте AuthenticationClass=WebAdmin.MultiWebAdminAuth, запустите сервер один раз и добавляйте админов в WebAdmin или в созданном MultiAdmin.ini.

Карты из Workshop

При остановленном сервере (работающий сервер затрёт изменения):

; PCServer-KFEngine.ini
[OnlineSubsystemSteamworks.KFWorkshopSteamworks]
ServerSubscribedWorkshopItems=605633924
ServerSubscribedWorkshopItems=605551918

[IpDrv.TcpNetDriver]
DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload
  • Число — это id= из адреса страницы в Workshop.
  • Строка DownloadManagers должна быть первой в своей секции. Больше ничего там не удаляйте.
  • Запустите сервер, дождитесь загрузки, остановите его, затем найдите имя файла карты в KFGame\Cache\<id>\0\BrewedPC (без .kfm) и добавьте в цикл карт.
  • В Linux папка кэша сама не создаётся: mkdir -p KFGame/Cache.

Чтобы кастомная карта появилась в списке Change Map в WebAdmin, добавьте в PCServer-KFGame.ini запись:

[KF-Default KFMapSummary]
MapName=KF-Default
ScreenshotPathName=UI_MapPreview_TEX.UI_MapPreview_Placeholder

Старый HTTP-редирект ([IpDrv.HTTPDownload] с RedirectToURL=) вытеснен Workshop. Если вы всё ещё используете его на Linux, заканчивайте URL слешем и пишите имена карт в нижнем регистре, иначе клиенты получат пустые файлы по 1 КБ. См. также кастомные карты через nginx-редирект.

Экран приветствия

В PCServer-KFGame.ini при остановленном сервере:

BannerLink=http://example.com/banner.png
ServerMOTD=Welcome to our server. \n \n Have fun and good luck!
WebsiteLink=http://example.com/

Баннер должен быть в PNG. \n переносит строку. Если задать WebsiteLink через WebAdmin, после сохранения он обнуляется, поэтому правьте его в файле.

Server Takeover

Server Takeover позволяет игрокам из матчмейкинга, которые запускают приватную игру, «одолжить» свободный сервер, не отказавшийся от этой функции: сервер переключается на их настройки и становится приватным на время сессии, не раскрывая паролей администратора, а потом снова открывается. Чтобы отказаться:

; PCServer-KFEngine.ini
[Engine.GameEngine]
bUsedForTakeover=FALSE

Отключить можно и в общих настройках WebAdmin.

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

Как запретить игрокам захватывать мой сервер KF2 (Server Takeover)?
Добавьте bUsedForTakeover=FALSE в секцию [Engine.GameEngine] файла PCServer-KFEngine.ini. Сервер исключается из пула Server Takeover.
Почему сервер KF2 постоянно пишет 'Waiting for Steam Server UID'?
Закройте игры Steam на этой машине, проверьте файлы сервера через app_update 232130 validate и установите UE3Redist.exe из Binaries\Redist.