Свой сервер

Выделенный сервер KF1: SteamCMD, порты, админка, редирект

Это практическая справка по запуску выделенного сервера Killing Floor 1 на основе гайда из вики сообщества. Здесь точные порты, установка через SteamCMD, основные настройки KillingFloor.ini, строка запуска, настройка админов, редирект карт и мутаторы. Общая картина (когда выделенный сервер нужен, типичные ошибки) - в статье Выделенный сервер Killing Floor, её лучше прочитать сначала.

Выделенный сервер пригодится для игр по локальной сети или чтобы держать сервер для друзей при хорошем канале. Запустить его можно двумя способами:

  1. Быстро: в игре откройте Host Game, настройте матч и нажмите Dedicated в правом нижнем углу.
  2. Подробно: установите отдельный сервер, как описано ниже. Так вы получаете полный контроль, а настройки сохраняются между сессиями.

Порты

Порты по умолчанию:

ПортПротоколНазначение
7707UDPИгра
7708UDPЗапросы (Query)
7717UDPGameSpy
8075TCPWebAdmin
20560UDPSteam
28852TCP и UDPБраузер мастер-сервера

Если сдвинуть игровой порт, все остальные порты сдвигаются на ту же величину. При игровом порте 7709 (+2) получится 7709, 7710, 7719, 8077, 20562 и 28854.

Обычно это нужно только при нескольких серверах на одной машине; в остальных случаях оставьте значения по умолчанию. Чтобы их изменить, правьте KillingFloor.ini сервера:

[URL]
Port=7707

[IpDrv.UdpGamespyQuery]
OldQueryPortNumber=7717

[UWeb.WebServer]
ListenPort=8075

Остальные порты подстроятся сами. Настройка роутера и файрвола - в статье Порты и NAT, несколько экземпляров - в статье Несколько серверов в одной папке.

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

С мая 2012 года сервер ставится и обновляется через SteamCMD - консольный клиент Valve, заменивший старый HLDSUpdateTool.

  1. Создайте отдельный аккаунт Steam для сервера. Игры на нём не нужны, он используется только для загрузки файлов сервера.
  2. Скачайте SteamCMD для Windows с вики разработчиков Valve и распакуйте в пустую папку, например C:\SteamCMD\.
  3. Создайте папку для сервера, например C:\killingfloor\.
  4. В Блокноте напишите одну строку:
steamcmd +login <user> <password> +force_install_dir C:\killingfloor\ +app_update 215350 +exit
  1. Замените <user> и <password> данными серверного аккаунта, а путь - своей папкой.
  2. Сохраните файл в папку SteamCMD с расширением .bat и запустите двойным щелчком.

SteamCMD обновит себя, скачает файлы сервера и закроется. Если включён Steam Guard, нужно будет ввести код из письма. Для обновления остановите сервер и снова запустите тот же .bat.

Если SteamCMD не качает

Советы из темы «Создание выделенного сервера для Windows через steamcmd» (форум killingfloor.ru, 2012):

  • Пароль без пробелов. С пробелом в пароле SteamCMD сообщал о неверном пароле, автору одного из советов пришлось завести другой аккаунт.
  • Окно сразу закрывается. Создайте рядом с steamcmd.exe батник, чтобы увидеть текст ошибки:
steamcmd.exe
pause
  • Steam Guard. Либо отключите его на серверном аккаунте, либо, если команды хранятся в файле сценария, первой строкой добавьте set_steam_guard_code <код_Steam_Guard>.
  • Сценарий вместо длинной строки. Команды можно сложить в текстовый файл (например, steamcmd.txt) и запускать steamcmd.exe +runscript steamcmd.txt, например через ярлык. Тот же ярлык и скачивает, и обновляет сервер.
  • ERROR! Failed to request AppInfo update, not online or not logged into Steam. По вики Valve, которую цитировали на форуме, нужно удалить папку Steam из корня диска: rd /s c:\Steam.
  • Конкретную версию сервера выбрать нельзя: всегда скачивается последняя.
  • Папку сервера лучше выбирать без русских букв и пробелов. В строке установки можно добавить validate (+app_update 215350 validate), чтобы проверить файлы.
  • Путь к самому SteamCMD тоже без кириллицы, иначе при запуске будет ошибка [ 0%] !!! Fatal Error: %appname% cannot run from a folder path that includes non-English characters. Вход под anonymous для сервера KF не подходит, нужен Steam-аккаунт. Если пропустить force_install_dir, сервер установится в .\steamapps\common (Flame, тема «[цикл статей] Создание сервера Killing Floor», форум killingfloor.ru).

Базовая настройка

Все настройки - в KillingFloor.ini (где он лежит: Расположение KillingFloor.ini). В первую очередь меняют:

  • ServerName=
  • GamePassword=
  • GameDifficulty=

Значения GameDifficulty:

ЗначениеСложность
1.0Beginner
2.0Normal
4.0Hard
5.0Suicidal
7.0Hell on Earth

KFGameLength задаёт число волн:

ЗначениеДлина
0Short, 4 волны
1Normal, 7 волн
2Long, 10 волн
3Custom, берёт настройки песочницы из INI

Про длину Custom - в статье Песочница и настройки своей игры.

Голосование за карты настоятельно рекомендуется:

bMapVote=True
RepeatLimit=0
bUseMapList=True

Где находятся эти строки, по теме «Помогите включить голосование за карту» на форуме killingfloor.ru (ждущий сервер с мутатором KFMapVote, где галочки голосования в настройках сервера не сохранялись): bMapVote=True задаётся в разделе обработчика голосования (KFMapVote.ini, раздел [KFMapVote.KFVotingHandler]; в KillingFloor.ini обработчик выбирается строкой VotingHandlerType=KFMapVote.KFVotingHandler в [Engine.GameInfo]), а bUseMapList=False нужно заменить на bUseMapList=True в разделе [xVoting.DefaultMapListLoader] файла KillingFloor.ini. Тогда после окончания карты игроки голосуют только по выбранному вами списку карт, а не по всем картам, какие у вас есть.

Внимание: никогда не редактируйте Default.ini. Все изменения вносите в KillingFloor.ini.

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

В папке System сервера есть kf_server_launcher.bat. Двойной щелчок запускает сервер. Строка по умолчанию:

ucc server KF-Bedlam.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6

Сервер стартует на карте KF-Bedlam со стандартным режимом, включённым Valve Anti-Cheat и максимумом шесть игроков.

Чтобы запустить несколько экземпляров на машине с несколькими IP-адресами, добавьте в конец ?multihome=0.0.0.0 (с нужным IP):

ucc server KF-Bedlam.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?multihome=0.0.0.0

Для домашнего сервера или простой конфигурации multihome обычно не нужен.

Админы и WebAdmin

Включите и WebAdmin, и админку в игре - они дополняют друг друга. WebAdmin - веб-интерфейс, через который можно менять настройки сервера удалённо, не правя INI вручную; его стоит освоить как следует.

Один админ через строку запуска

Добавьте в строку запуска в kf_server_launcher.bat:

?AdminName=XXXXX?AdminPassword=XXXXX

Например:

ucc server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?AdminName=xxxx?AdminPassword=xxxxx

Несколько админов

Удобно для клановых серверов, где разным людям нужны разные права. В KillingFloor.ini укажите:

[Engine.GameInfo]
AccessControlClass=xAdmin.AccessControlIni

При следующем запуске сервер создаст xAdmin.ini в System; админов добавляют там или через WebAdmin. Важно: после этого изменения логин WebAdmin сбрасывается на пользователя Admin с паролем Admin. Смените его сразу после первого входа. Группы и права подробно: Администраторы с разными правами (xAdmin).

Как открыть WebAdmin

Откройте в браузере http://IP_ВАШЕГО_СЕРВЕРА:8075. Можно и через встроенный браузер оверлея Steam.

Вход как админ в игре

Откройте консоль клавишей ~ (или ') и введите:

  • один админ: adminlogin <пароль_админа> (один пароль могут использовать несколько человек);
  • несколько админов: adminlogin <логин> <пароль> (у каждого свой).

Сейчас админам приходится входить заново после каждой смены карты, поэтому удобен бинд:

  • Способ 1: введите в консоли preferences и в окне расширенных настроек назначьте команду на клавишу.
  • Способ 2: в консоли, например для клавиши M: SET INPUT m adminlogin <пароль_админа> или SET INPUT m adminlogin <логин> <пароль>. В killingfloor\System\User.ini появится строка M=adminlogin <пароль>.
  • Способ 3: допишите строку прямо в User.ini, например N=adminlogin <логин> <пароль>. Такие бинды легко править или удалять вручную.

Ещё про бинды: Бинды для чата и Полезные бинды.

Команды админа

  • Принудительная смена карты: проголосуйте за карту в Map Vote (голос админа решающий) или введите admin map <имя_карты> (.rom писать не нужно).
  • Кик и бан: если включено голосование за кик, щёлкните правой кнопкой по имени игрока - у админа появится расширенный пункт Kick/Ban. Вошедшие админы защищены от вотекика.
  • Сообщение по центру экрана: admin adminsay <сообщение>.
  • Изменение свойств на лету: admin set <package>.<classname> <property> <value>, например admin set engine.gameinfo gamedifficulty 1 (Beginner) или ... gamedifficulty 2 (Normal). Следите за пробелами.
  • Пауза: включите bAdminCanPause=True в секции [Engine.GameInfo] (или в WebAdmin), войдите как админ и введите pause. Повторная команда или выстрел снимают паузу.

Полный список: Консольные команды админа.

Пользовательские карты через редирект

Карты, сделанные в KF SDK, игроки скачивают автоматически при заходе на сервер. Редирект делает это быстрым:

  1. Положите карту в папку Maps сервера.
  2. В System создайте .bat со строкой ucc compress ..\maps\<имя_карты>.rom. Получится <имя_карты>.rom.uz2. Например, KF-WestLondonNight сжимается с 10.7 MB до 1.78 MB - это экономит время загрузки и трафик. ucc.exe нужен свой: он лежит в System выделенного сервера, скачанного через SteamCMD, или редактора карт (SDK). В теме «Архивация файлов для KF в Uz2» (форум killingfloor.ru) отдельно скачанный ucc.exe требовал недостающие dll, и совет был именно такой: скачать сервер через SteamCMD или поставить редактор карт.
  3. Чтобы сжать все карты папки разом, сделайте батник, например compress_maps.bat:
for /f "tokens=*" %%a in ("C:\killingfloorServer\maps\*.rom") do ucc compress %%a

Он сожмёт и стандартные карты, но сэкономит время, если пользовательских много.

Обратная операция, если нужно достать карту из чужого .uz2: ucc decompress <файл>.uz2. На форуме killingfloor.ru для пакетной распаковки делали оболочку Decompress.exe (ALEX_GREEN). 4. Перенесите файлы .uz2 из Maps и загрузите на веб-хостинг, например в http://www.yourhost.com/maps/. 5. В KillingFloor.ini, в секции [IpDrv.HTTPDownload], укажите RedirectToURL=http://www.yourhost.com/maps/ (слеш в конце обязателен). UseCompression=True уже включено по умолчанию. 6. Добавьте карту в список карт. В первый раз удобнее через WebAdmin: Defaults > Maps, перенесите карты из "Maps Not In Cycle" в "Maps In Cycle" и сохраните. В конце INI появится блок вида:

[KFMod.KFMaplist]
MapNum=0
Maps=KF-<имя карты>
Maps=KF-<имя карты>
  1. Перезапустите карту или сервер и проголосуйте за новую карту.

    В старых версиях сервера (около 2011 года, по теме «Загрузка карт и доп. контента с сервера» с форума killingfloor.ru) список карт лежал в секции [DefaultKF MaplistRecord] файла KillingFloor.ini.

Дальше карты можно добавлять, просто правя этот блок. Если хостинга нет, для проверки подойдёт бесплатный файлообменник или собственный веб-сервер (например, Apache) на машине с сервером. Подробнее: Быстрая загрузка и Ручная установка карт.

Пользовательские мутаторы

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

Пример: KF Anti-Blocker отключает столкновения игроков во время торговли, чтобы никто не перекрывал дверь торговца.

  1. Скачайте мутатор.
  2. Скопируйте MutKFAntiBlocker.ucl и MutKFAntiBlocker.u в папку System сервера.
  3. Остановите сервер и либо добавьте ?Mutator=MutKFAntiBlocker.MutKFAntiBlocker в строку запуска, либо перезапустите сервер, включите мутатор в WebAdmin > Mutators, нажмите Set Selected Mutators и перезапустите карту.

WebAdmin видит мутатор, как только его файлы .u и .ucl лежат в System. Если он не появился, добавьте его вручную в секцию [Engine.GameEngine]:

ServerPackages=MutKFAntiBlocker

Подробнее: Как добавить мутатор на сервер.

Частые проблемы при запуске

Решения из тем форума killingfloor.ru; название темы указано в каждом пункте.

  • Failed to load 'KF_DLC': Can't find file for package 'KF_DLC', из-за чего следом не загружаются KFGui, ServerPerksV5 и ServerPerksMut. Возьмите KF_DLC.utx из клиента игры и положите в ту же папку на сервере. По словам Flame, сервер скачивается без этого файла начиная с версии 1044, и проблема одинакова для Windows и Linux (темы «serverperks» и «Помогите настроить сервер»).
  • Failed to load '2K4Menus': Can't find file for package '2K4Menus': на Linux-сервере не включался Server Veterancy Handler V3. Скопируйте 2K4Menus.utx из папки Textures клиента в папку Textures сервера и перезапустите сервер (тема «Проблема с Server Perks»).
  • Спам Failed to find object 'Class KFMod.AshHardingSpecies' и похожих (ChickenNatorspecies, SoldierSpeciesRobot, ReaperSpecies, CivilianSpecies...). В System сервера лежали файлы персонажей .upl (ash_harding.upl, Reaper.upl и т.д.), а движок подгружает их автоматически. После удаления этих файлов ошибки пропали, кроме Missing Class Class KFMod.KFVoicePackFemale. Совет Flame: не править KFMod; species, голосовые файлы и части тела скина кладут в его *Mod-пакет (например, AshHardingMod) (тема «Как узнать какому мутатору чего не хватает?»).
  • Сервер игнорирует длину игры и сложность и всегда стартует на «норме» с 4 волнами, а из KillingFloor.ini пропадает секция [KFMod.KFGameType] (если поставить файлу атрибут «только чтение», секция просто игнорируется). Помогло переименовать killingfloor.ini, например в killingfloor1.ini, и указать новый файл в строке запуска; атрибут «только чтение» трогать не нужно. Ещё один вариант - свой геймтайп (тема «Настройки количества волн стираются при запуске сервера»):
ucc server kf-Westlondon.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?Mutator=MutKFAntiBlocker.MutKFAntiBlocker?ini=killingfloor1.ini
  • В KillingFloor.ini нет KFGameLength. Если секции [KFMod.KFGameType] в файле нет совсем, скопируйте её целиком из default.ini в той же папке и добавьте в KillingFloor.ini: в ней есть и KFGameLength=. Dr_Killjoy советовал сразу работать с ini под своим именем (скопировать KillingFloor.ini в MyOwn.ini и запускать с -ini=MyOwn.ini), потому что патч иногда затирает старый ini (тема «Не могу разобраться с выделенным сервером»).
  • STEAMSTATS: SECURITY CHECK FAILED - ../System/MutKFAntiBlocker.u при старте означает, что мутатор не прошёл проверку (сервер не считает его белым), и прокачка перков отключена. Убрать само сообщение нельзя. Мутатор в строке запуска указывают как ?Mutator=MutKFAntiBlocker.MutKFAntiBlocker, а не через .ucl (темы «STEAMSTATS: SECURITY CHECK FAILED» и «Проблема с мутаторами»).
  • couldn't spawn collision tester, move this volume!!! в логе (речь о ZombieVolume карты), по словам Flame, проблем не создаёт. Если после смены карты игроки висят на подключении, почти всегда виноват перебор мутаторов и пакетов: объединяйте их в один пакет, см. Лимит загружаемых пакетов (тема «Тема»).
  • Бан диапазона IP. Запись диапазона вида 14.0.128.0-14.0.255.255 в KF не работает, банить можно только по маске подсети, отдельной строкой на каждую. Для настоящих диапазонов на форуме предлагали дописать свой AccessControl или мутатор, который получает адрес игрока функцией GetPlayerNetworkAddress() у PlayerController и проверяет его (тема «Как забанить диапазон IP»):
IPPolicies=DENY;14.0.128.*
IPPolicies=DENY;14.0.129.*
  • WebAdmin пишет In order to see the global ID for connected players, change the value for bBanbyID in the [Engine.AccessControl] section of your ini to 'True'. Чтобы видеть глобальные ID подключённых игроков, поставьте bBanbyID=True в секции [Engine.AccessControl] (тема «Настройка второго сервера»).
  • Свой геймтайп (например, SRGameType) в голосовании и списках карт. Если сервер со своим геймтайпом работает не так, как задумано, а в коде ошибки не видно, Proton советовал продублировать в разделе [xVoting.xVotingHandler] то, что указано в батнике запуска (тема «Снова про GameType»; автор темы подтвердил, что это помогло):
GameConfig=(GameClass="тут геймтип записать как в батнике",Prefix="KF",Acronym="KF",GameName="Killing Floor",Mutators="здесь то, что в батнике так, где мутаторы",Options=)

Для списков карт siriushard предлагал в [Engine.MaplistManager] привязать свой геймтайп к существующему списку карт строкой вида Games=(GameType="ServerPerksMut.SRGameType",ActiveMaplist="Default KF") и в секции этого списка ([... MaplistRecord]) указать DefaultGameType=ServerPerksMut.SRGameType (тема «Гейм тайп.»). Предупреждение WebAdmin Could not load gametype ServerPerksMut.SRGameType for maplist говорит, что геймтайп для списка карт не загрузился. У автора той темы совет не сработал: всё, что он вписывал в KillingFloor.ini, стиралось и перезаписывалось стандартными значениями, и решения в теме так и не нашлось.

  • Автоперезапуск после краша с сохранением лога. Батник от Dronis (тема «Снова про GameType») перезапускает сервер и копирует ucc.log с датой и временем в папку ucclog, которую нужно создать заранее:
@echo off
cls
echo protect crash
title log
:srcds
echo (%time%) KF server started.
start /wait ucc server Entry.rom?game=ServerPerks.GameType?VACSecured=True?AdminName=*?AdminPassword=*?Mutator=ServerPerks.ServerPerksMut?ini=KillingFloor.ini
echo (%time%) WARNING: srcds closed or crashed, restarting....
set datetemp=%date:~-10%
COPY ucc.log "..\ucclog\%datetemp%"."%time:~0,2%"."%time:~3,2%_ucc.log"
goto srcds

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

Какие порты использует сервер Killing Floor 1?
По умолчанию 7707 UDP (игра), 7708 UDP (запросы), 7717 UDP (GameSpy), 8075 TCP (WebAdmin), 20560 UDP (Steam) и 28852 TCP/UDP (мастер-сервер). Если сдвинуть игровой порт, все остальные сдвигаются на ту же величину.
Какой app ID у сервера KF1 в SteamCMD?
215350. Установка и обновление: +force_install_dir <папка> +app_update 215350 +exit.
Как войти как админ в игре?
Откройте консоль и введите adminlogin <пароль>, а если настроено несколько админов - adminlogin <логин> <пароль>. Входить нужно заново после каждой смены карты.
Как ускорить скачивание пользовательских карт игроками?
Сожмите карты командой ucc compress, загрузите файлы .uz2 на веб-хостинг и укажите RedirectToURL в секции [IpDrv.HTTPDownload] файла KillingFloor.ini.