MapRecover: восстановление карты после падения сервера Killing Floor
Когда сервер Killing Floor падает на смене карты, скрипт перезапуска поднимает его на карте из командной строки, а не на той, за которую только что проголосовали игроки. Дальше кому-то приходится звать админа, чтобы снова сменить карту. MapRecover решает это: после рестарта он загружает карту, на которую собирались перейти игроки, а если она снова и снова роняет сервер, возвращается к безопасной конфигурации по умолчанию.
Мутатор публиковался на форуме Tripwire (showthread.php?t=66785) и в 2011 году был разобран для русскоязычных админов на killingfloor.ru.
Что понадобится
- Выделенный сервер, запущенный через цикл перезапуска (
.bat-файл в Windows). Сам MapRecover процесс не перезапускает, он только решает, какую карту грузить после рестарта. - Пакет
MapRecover.uв папкеSystem. Оригинальная ссылка вела наKFMapRecover.rarс klankaos.com. Этот хостинг давно закрыт, так что ищите архивную копию или исходную тему на форуме Tripwire.
Установка
- Распакуйте мутатор в папку
Systemсервера. - В
KillingFloor.iniнайдите строкиServerActorsи добавьте под ними MapRecover:
ServerActors=IpDrv.MasterServerUplink
ServerActors=UWeb.WebServer
ServerActors=MapRecover.MapRecover
Существующие строки не заменяйте. В первой версии инструкции советовали удалить
MasterServerUplinkиWebServer. У тех, кто так сделал, сервер пропал из браузера и «Избранного» («нет ответа от сервера»), а веб-админка перестала открываться.
- Запускайте сервер на пустом уровне
Entryбез карты и мутаторов в командной строке. Настоящие параметры старта MapRecover берёт из своего ini:
ucc server Entry?Game=Engine.GameInfo?VACSecured=true?MaxPlayers=6?ini=killingfloor.ini
MapRecover.ini
[MapRecover.MapRecover]
FallbackURL=KF-Canville.rom?game=KFmod.KFGameType?VACSecured=True?MaxPlayers=6?Mutator=ServerPerksV4.ServerPerksMut,KFBruteMut.KFBruteMut
MaxFailureCount=1
- FallbackURL — обычная конфигурация старта сервера (карта, режим, мутаторы). Используется при первом запуске и в случае, если сохранённая карта окажется нерабочей.
- MaxFailureCount, судя по названию, ограничивает число неудачных попыток на сохранённой карте, после которых сервер возвращается к
FallbackURL. В примере с форума стоит1. - SavedURL мутатор дописывает сам после первого запуска. Там хранится текущая карта или карта, выбранная голосованием, при смене на которую сервер упал.
Добавление мутаторов: теперь они прописываются в FallbackURL в MapRecover.ini, а не в bat-файле. После изменения списка мутаторов удалите все строки после MaxFailureCount=1 (сохранённый SavedURL и счётчики). Иначе сервер так и будет восстанавливать старый URL со старым набором мутаторов.
Пример цикла перезапуска
@echo off
cls
title KF AntiCrash
:loop
echo (%time%) KF server started.
start /wait ucc server Entry?Game=Engine.GameInfo?VACSecured=true?MaxPlayers=6?ini=killingfloor.ini
echo (%time%) WARNING: server closed or crashed, restarting...
goto loop
start /wait ждёт завершения ucc, затем goto loop запускает его снова. Карту выбирает MapRecover.
Известные проблемы
| Проблема | Причина / решение |
|---|---|
| Сервер не виден в «Избранном» и браузере, веб-админка недоступна | Из ServerActors удалили MasterServerUplink и WebServer. Верните их, а MapRecover оставьте дополнительной строкой |
| Игроки видят вместо карты «Entry», при подключении игра падает | Сервер остался на уровне Entry: MapRecover не загрузился (неверное имя пакета, файла нет в System) или FallbackURL некорректен. Смотрите лог сервера сразу после старта |
| Сервер постоянно возвращается к старому набору мутаторов | Устаревший SavedURL в MapRecover.ini. Удалите строки после MaxFailureCount |
При запуске сервер 2-3 раза подряд пишет MapRecover: *** Server has crashed, returning to: ..., потом стартует нормально | Случай из темы «Сервер несколько раз крашится при старте» (форум killingfloor.ru): сервер со своим геймтайпом из пакета ServerPerks. Помогло удаление мутатора MapRecover |
MapRecover лечит симптом. Если сервер падает при каждой смене на определённую карту, ищите причину в логе. Некоторые кастомные карты роняют выделенные серверы после рестарта карты.
Как искать причину падений на смене карты
Советы из темы «Падение сервера после смены карты» (форум killingfloor.ru, 2011). Там сервер падал после голосования за карту, тем чаще, чем больше игроков (при 8-10 и больше), а ночью на пустом сервере не падал вовсе:
- Мутаторы по одному. Отключите всё «лишнее» и включайте мутаторы по одному, пока сервер не упадёт. Для перепроверки включите их в другом порядке, а также всё, кроме подозреваемого. Мутаторы, которые могут конфликтовать между собой (в той теме это был мутатор DOOM III), уберите первыми.
- Недостающие файлы карты. Если падения бывают только на кастомных картах, проверьте, что на сервере есть не только
.rom, но и все дополнительные пакеты карты (текстуры и т.п.). Без них при голосовании игроков выбивает, а сервер после долгого ожидания переключается на другую карту. - Чистая проверка. Сохраните копию настроек и верните всё к исходным значениям, либо поставьте в отдельную папку чистый сервер, не удаляя старый, и проверьте его с минимальными изменениями. Если падает и он, причину стоит искать в системе.
- В итоге автор темы поставил MapRecover: по его словам, при падении игроков больше не выкидывает, а карта меняется как положено.
В более поздней теме «Падение после смены карты» (форум killingfloor.ru, 2012) сервер по ночам выключался на смене карты; в конце ucc.log шла цепочка строк Critical: UObject::GetPathName, затем UObject::PurgeGarbage, UGameEngine::LoadMap и ServerTravel. LLIePLLIeHb выяснил, что зависание не зависит ни от мутаторов, ни от кряка, ни от размера .rom-файла, а связано с определёнными картами. Карты, которые у него точно клали сервер: KF-AtlasB1, KF-Barzakh, KF-PhantomCastleB5, KF-MuskratCastle. Изменение ServerTravelPause не помогло. По его словам, проблема появилась с каким-то из патчей (примерно с 1032); MaThreeX написал, что в таких случаях спасает MapRecover.