Выделенный сервер KF1: SteamCMD, порты, админка, редирект
Это практическая справка по запуску выделенного сервера Killing Floor 1 на основе гайда из вики сообщества. Здесь точные порты, установка через SteamCMD, основные настройки KillingFloor.ini, строка запуска, настройка админов, редирект карт и мутаторы. Общая картина (когда выделенный сервер нужен, типичные ошибки) - в статье Выделенный сервер Killing Floor, её лучше прочитать сначала.
Выделенный сервер пригодится для игр по локальной сети или чтобы держать сервер для друзей при хорошем канале. Запустить его можно двумя способами:
- Быстро: в игре откройте Host Game, настройте матч и нажмите Dedicated в правом нижнем углу.
- Подробно: установите отдельный сервер, как описано ниже. Так вы получаете полный контроль, а настройки сохраняются между сессиями.
Порты
Порты по умолчанию:
| Порт | Протокол | Назначение |
|---|---|---|
| 7707 | UDP | Игра |
| 7708 | UDP | Запросы (Query) |
| 7717 | UDP | GameSpy |
| 8075 | TCP | WebAdmin |
| 20560 | UDP | Steam |
| 28852 | TCP и 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.
- Создайте отдельный аккаунт Steam для сервера. Игры на нём не нужны, он используется только для загрузки файлов сервера.
- Скачайте SteamCMD для Windows с вики разработчиков Valve и распакуйте в пустую папку, например
C:\SteamCMD\. - Создайте папку для сервера, например
C:\killingfloor\. - В Блокноте напишите одну строку:
steamcmd +login <user> <password> +force_install_dir C:\killingfloor\ +app_update 215350 +exit
- Замените
<user>и<password>данными серверного аккаунта, а путь - своей папкой. - Сохраните файл в папку 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.0 | Beginner |
| 2.0 | Normal |
| 4.0 | Hard |
| 5.0 | Suicidal |
| 7.0 | Hell on Earth |
KFGameLength задаёт число волн:
| Значение | Длина |
|---|---|
| 0 | Short, 4 волны |
| 1 | Normal, 7 волн |
| 2 | Long, 10 волн |
| 3 | Custom, берёт настройки песочницы из 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, игроки скачивают автоматически при заходе на сервер. Редирект делает это быстрым:
- Положите карту в папку
Mapsсервера. - В
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 или поставить редактор карт. - Чтобы сжать все карты папки разом, сделайте батник, например
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-<имя карты>
-
Перезапустите карту или сервер и проголосуйте за новую карту.
В старых версиях сервера (около 2011 года, по теме «Загрузка карт и доп. контента с сервера» с форума killingfloor.ru) список карт лежал в секции
[DefaultKF MaplistRecord]файлаKillingFloor.ini.
Дальше карты можно добавлять, просто правя этот блок. Если хостинга нет, для проверки подойдёт бесплатный файлообменник или собственный веб-сервер (например, Apache) на машине с сервером. Подробнее: Быстрая загрузка и Ручная установка карт.
Пользовательские мутаторы
Мутаторы меняют игру сверх стандартных правил. Мутаторы с незначительными изменениями можно внести в белый список - тогда перки и достижения продолжают работать; мутаторы, ускоряющие прокачку перков или получение достижений, в белый список не входят и отключают и то и другое на вашем сервере. Что запускать - решает админ. См. Мутаторы из белого списка.
Пример: KF Anti-Blocker отключает столкновения игроков во время торговли, чтобы никто не перекрывал дверь торговца.
- Скачайте мутатор.
- Скопируйте
MutKFAntiBlocker.uclиMutKFAntiBlocker.uв папкуSystemсервера. - Остановите сервер и либо добавьте
?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.