RE:NODE

Руководства14 мин чтения

Настройки сервера 7 Days to Die: разбор serverconfig.xml

Все настройки serverconfig.xml, которые важны, во что на самом деле обходится кровавая луна, порты, telnet и команды админа, модлеты и как портятся файлы регионов.

Обновлено

1 прочтений

В 7 Days to Die вокселный мир, который игроки активно разрушают, и это задача сложнее, чем кажется. Серверу нужно 8 ГБ на старте и 12 и больше, когда восемь человек разбредутся по случайному миру 10k, одно быстрое ядро, которое он сможет удержать за собой, и три порта. Настройки, влияющие на производительность, - те, что определяют, какая часть этого мира бодрствует одновременно, а ночь орды - момент, когда каждое ваше решение проявляется за один вечер. В этом руководстве разобран весь файл: что делает каждая настройка, чего она стоит, порты, интерфейсы админа и telnet, модлеты и то, как именно портится сохранение в 7 Days.

Что такое выделенный сервер и почему он тяжёлый#

Выделенный сервер бесплатный и ставится через SteamCMD как приложение с id 294420. Он работает без графики, загружает один мир и одно сохранение и симулирует его, есть кто-то онлайн или нет.

Нагрузку определяют четыре вещи, и лишь одна из них - число игроков:

  1. Загруженные чанки. Каждый игрок держит живым набор чанков вокруг себя. Восемь игроков в одном городе обходятся дёшево; восемь игроков в восьми углах карты 10k держат каждый свой рабочий набор, и итоги складываются.
  2. Сущности. Зомби, животные и выброшенные предметы - все они тикают. Поэтому MaxSpawnedZombies - самое важное число на сервере.
  3. Динамический меш. Современные версии в фоне пересчитывают структурную опору и обрушение для построек, изменённых игроками. Именно из-за этого сервер постоянно пишет на диск; его можно сузить или выключить.
  4. Размер мира, в основном при генерации и на диске. Случайный мир 10k в первый раз строится долго и съедает много памяти, а потом хранится в большом числе файлов регионов.

Мир генерируется один раз, в папку GeneratedWorlds, где лежат карта высот, изображения биомов и splat-карты и prefabs.xml со списком всех размещённых точек интереса. Сохранение, на которое влияют игроки, - отдельная вещь. Понимание того, что это два разных объекта, позволяет сбросить сервер без повторной генерации карты и заново сгенерировать карту без чистой установки.

Требования и потребление ресурсов#

КонфигурацияRAMCPUДиск
Navezgane или мир 6k, до 4 игроков8 GB2 ядра40 GB
Случайный мир 8k, 6-8 игроков10-12 GB2-3 ядра55 GB
Мир 10k, 8+ игроков, разбросанных по карте12-14 GB3 ядра70 GB
Модлеты, особенно оверхолыдобавьте 2-4 GB-добавьте 10 GB
  • Генерация - это всплеск. Построение случайного мира 10k при первом запуске съедает куда больше памяти, чем его работа, и занимает столько времени, что люди думают, будто сервер завис. Он не завис. Сгенерируйте мир один раз, затем сделайте его backup.
  • CPU: в симуляции мира доминирует один поток. Тактовая частота определяет, сколько зомби могут одновременно искать путь, а это то же самое, что сказать: она определяет ночь орды.
  • Диск: установка занимает около 20 ГБ, а сохранение растёт с каждым сломанным игроками блоком. Файлы регионов для хорошо исхоженного мира 10k могут достигать нескольких гигабайт.
  • Сеть: самый тяжёлый момент - первое подключение нового игрока, когда сервер передаёт ему исследованный мир.

Установка и запуск сервера#

bash
$ steamcmd +force_install_dir /home/7dtd/server +login anonymous \    +app_update 294420 validate +quit$ cd /home/7dtd/server$ ./startserver.sh -configfile=serverconfig.xml

В Windows то же самое делает startdedicated.bat, который вызывает 7DaysToDieServer.exe с тем же аргументом. В статье SteamCMD простыми словами разобраны ветки и скрипты обновления, если вы хотите закрепить версию, а не получать каждое обновление.

На RE:NODE установка 7 Days to Die просит логин Steam на вкладке Setup. Сервер создаётся сразу, а установка ждёт эти данные, которые сохраняются по мере ввода, поэтому используйте запасной аккаунт Steam, а не основной.

serverconfig.xml: настройки, которые важны#

Файл - это XML, по одному свойству на строку, и почти у каждой записи в нём есть комментарий. Не удаляйте комментарии: это лучшая документация, какая есть у игры.

serverconfig.xml
<?xml version="1.0"?><ServerSettings>  <property name="ServerName" value="Longship Crew"/>  <property name="ServerPassword" value=""/>  <property name="ServerMaxPlayerCount" value="8"/>  <property name="ServerVisibility" value="2"/>  <property name="ServerPort" value="26900"/>  <property name="GameWorld" value="RWG"/>  <property name="WorldGenSeed" value="Longship"/>  <property name="WorldGenSize" value="8192"/>  <property name="GameName" value="LongshipSave"/>  <property name="GameDifficulty" value="2"/>  <property name="DayNightLength" value="60"/>  <property name="MaxSpawnedZombies" value="64"/>  <property name="BloodMoonEnemyCount" value="8"/>  <property name="EACEnabled" value="true"/></ServerSettings>

Мир и идентификация

СвойствоПо умолчаниюЧто делает
GameWorldNavezganeNavezgane, RWG или заранее сгенерированная карта, названная в файле
WorldGenSeed-Строка seed для RWG. Тот же seed - та же карта
WorldGenSize6144Число, кратное 2048, от 4096 до 16384. Только для RWG
GameName-Имя сохранения. Измените его - и начнётся новое сохранение
ServerMaxPlayerCount8Предел числа игроков
ServerVisibility22 публичный, 1 для друзей, 0 вне списка
ServerPort26900Игровой порт
ServerPasswordпустоПароль для входа

GameWorld и GameName вместе определяют, какое сохранение загрузится. Изменение любого из них начинает новое сохранение рядом со старым, и именно так и сбрасывают сервер намеренно, и так же люди случайно теряют мир.

Сложность и множители

СвойствоПо умолчаниюЧто делает
GameDifficulty1От 0 до 5. Влияет на получаемый и наносимый урон, но не на число зомби
XPMultiplier100Проценты
LootAbundance100Проценты
LootRespawnDays7Дни до того, как обшаренный контейнер снова наполнится
DayNightLength60Реальных минут на игровые сутки
DayLightLength18Игровых часов светлого времени
DropOnDeath10 ничего, 1 всё, 2 панель быстрого доступа, 3 рюкзак
AirDropFrequency72Игровые часы. 0 отключает
PlayerKillingMode3От 0 без PvP до 3 убивать всех

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

Зомби и кровавая луна

СвойствоПо умолчаниюЧто делает
MaxSpawnedZombies64Предел на весь сервер. Настройка, которая вас спасает
MaxSpawnedAnimals50Предел животных на весь сервер
ZombieMove0Скорость днём, от 0 шаг до 4 кошмар
ZombieMoveNight3Скорость ночью
ZombieFeralMove3Скорость свирепых
ZombieBMMove3Скорость в кровавую луну
BloodMoonFrequency7Дней между кровавыми лунами. 0 отключает
BloodMoonRange0Случайный разброс в днях вокруг этой частоты
BloodMoonWarning8Час, когда небо краснеет. -1 - без предупреждения
BloodMoonEnemyCount8Зомби одновременно на каждого игрока
EnemyDifficulty00 обычные, 1 свирепые

Привязки территории, базы и распад

СвойствоПо умолчаниюЧто делает
LandClaimCount3Сколько блоков привата может быть активно у игрока
LandClaimSize41Ширина в блоках с центром на блоке привата
LandClaimDeadZone30Минимум блоков между приватами разных игроков
LandClaimExpiryTime7Дней офлайн, после которых приват начинает распадаться
LandClaimDecayMode0Как падает прочность после этого
LandClaimOnlineDurabilityModifier4Твёрдость блоков в привате, пока владелец онлайн
LandClaimOfflineDurabilityModifier4То же, пока он офлайн
BedrollDeadZoneSize15Блоков вокруг спального мешка, где зомби не появляются
BedrollExpiryTime45Дней, после которых неиспользуемый спальный мешок перестаёт учитываться

Производительность и обслуживание

СвойствоПо умолчаниюЧто делает
DynamicMeshEnabledtrueСтруктурный пересчёт для построек, изменённых игроками
DynamicMeshLandClaimOnlytrueОграничить эту работу заприваченными зонами
DynamicMeshLandClaimBuffer3Буфер чанков вокруг привата
DynamicMeshMaxItemCache3Сколько элементов меша держится в памяти
MaxUncoveredMapChunksPerPlayer131072Предел открытой карты каждого игрока
ServerMaxWorldTransferSpeedKiBs512Скорость передачи мира подключающемуся игроку
PersistentPlayerProfilesfalsetrue означает, что вернуться могут только известные игроки
EACEnabledtrueEasy Anti-Cheat. Для большинства DLL-модов должно быть false

DynamicMeshLandClaimOnly - настройка производительности, о которой никто не говорит. Если она включена, тяжёлая структурная работа идёт только вокруг заприваченных баз. Если выключена - везде, где игроки что-то копали, а на сервере, которому несколько месяцев, это почти вся карта.

Кровавая луна - это нагрузочный тест#

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

Арифметику как раз чаще всего считают неверно. BloodMoonEnemyCount действует на каждого игрока: четыре игрока по восемь - это тридцать два зомби, восемь игроков по восемь - шестьдесят четыре, а восемь игроков по шестнадцать дали бы сто двадцать восемь. MaxSpawnedZombies ограничивает сумму для всего сервера, так что при значении по умолчанию 64 последняя конфигурация тихо превращается всё в те же 64 - и игроки, которым сказали, что орда стала больше, сообщат, что игра сломана, хотя её просто зажали пределом.

Помогают ещё две привычки. Просите игроков встречать орду на базах, которые расположены достаточно близко друг к другу, потому что четыре отдельные базы с ордой - это четыре отдельные задачи поиска пути, решаемые одновременно. И перезапускайте сервер перед ночью орды, а не после: расход памяти растёт в течение недели, и ночь орды - худший момент, чтобы наткнуться на предел. В статье расписания перезапусков, которые помогают разобран выбор часа, а на RE:NODE вкладка Schedules сделает это за вас, предварительно отправив предупреждение.

Порты, telnet и веб-панель#

ПортПротоколНазначение
26900TCP и UDPИгровой трафик и список серверов
26901UDPИгровой трафик
26902UDPИгровой трафик
8081TCPTelnet, если TelnetEnabled равен true
8080TCPВеб-панель, если WebDashboardEnabled равен true

Порту 26900 нужны и TCP, и UDP, а это достаточно необычно, чтобы проверить, а не предполагать: правило только для UDP оставит сервер вне списка. В некоторой документации блок продлевают до 26903; открыть 26900-26903 ничего не стоит и снимает вопрос. В статье порты игровых серверов простыми словами объяснено, почему список и игра вообще идут разными путями.

В тарифы RE:NODE для 7 Days to Die входят два порта, а остальное добавляется на вкладке Network, в том числе отдельный порт, если вы хотите, чтобы telnet или панель были доступны снаружи.

Telnet - это интерфейс удалённого администрирования, и он открытым текстом: пароль пересекает сеть в чистом виде, а всё, что в него вводится, выполняется с полными правами на сервере. Если TelnetPassword пуст, сервер слушает только loopback, и это безопасное значение по умолчанию. Если вы его открываете, задайте надёжный пароль, ограничьте адрес источника и сначала прочитайте безопасную работу с RCON - те же соображения применимы к любой удалённой консоли.

WebDashboardEnabled включает небольшой веб-интерфейс на порту 8080. EnableMapRendering заставляет его рисовать исследованную карту, что действительно приятно и стоит и CPU, и постоянно растущей папки с тайлами.

Админы и команды консоли#

Права администратора хранятся в serveradmin.xml рядом с файлом конфигурации. Сервер записывает его при первом запуске, и этот сгенерированный файл - авторитетный источник точного формата: старые версии определяли людей по атрибуту steamID, а нынешние используют пару из платформы и идентификатора пользователя, потому что на тех же серверах теперь играют и консольные игроки.

serveradmin.xml
<adminTools>  <admins>    <admin platform="Steam" userid="76561198012345678" permission_level="0" />  </admins>  <permissions>    <permission cmd="dm" permission_level="0" />  </permissions>  <whitelist />  <blacklist /></adminTools>

Уровни прав идут от 0 - это владелец, ему можно всё, - до 1000, то есть любой игрок. У каждой команды свой требуемый уровень, так что модератору можно дать кик и бан, не давая ему творческого меню.

КомандаЧто делает
helpСписок команд или пояснение к одной
lpСписок подключённых игроков с id и позициями
leСписок сущностей, включая каждого живого зомби
memРасход памяти, число сущностей и чанков
saveworldЗаписать сохранение немедленно
shutdownСохранить и корректно остановить
kick <name>Отключить игрока
ban add <name> <n> <unit>Забанить на срок, единица - минуты, часы или дни
admin add <name> <level>Выдать уровень прав
say "<text>"Сказать всем от имени сервера
settime <day> <hour> <minute>Установить время
llpСписок приватов
dmПереключить режим отладки

mem - та, которую стоит выучить. Она печатает число сущностей рядом с расходом памяти, и число сущностей, которое продолжает расти между перезапусками, говорит о том, что что-то не исчезает - обычно это выброшенные сумки или животные, - задолго до того, как у сервера кончится память. В статье как читать график нагрузки сервера рассказано, как выглядит со стороны та же история с памятью.

Моды и модлеты#

Моды кладутся в папку Mods в корне сервера, по одной папке на мод, с файлом ModInfo.xml и обычно каталогом Config с XML-файлами, которые правят собственную конфигурацию игры через операции XPath. У такого устройства необычно приятное следствие:

  • Модлет, который только правит XML, работает на стороне сервера. Сервер отправляет свою конфигурацию подключающимся клиентам, так что модлет, меняющий рецепты, добычу, спавны или прогрессию, работает, и никому ничего ставить не нужно. Так устроена значительная часть популярных модов для удобства.
  • Мод, добавляющий ассеты или код, - нет. Новые иконки, модели, звуки или DLL означают, что их должен поставить и каждый клиент, а EACEnabled должен быть false для всего, что использует патчи Harmony. Отключение EAC - настоящая цена: вы убираете античит ради мода.
  • Оверхолы - это и то и другое, плюс новый мир. Darkness Falls и подобные ожидают свежее сохранение, а не существующее.

Добавьте один модлет, перезапустите, поиграйте вечер, добавьте следующий. Это медленнее, чем вставить весь список, и это единственный способ узнать, какой из них сломал сервер, потому что ответ всегда - последний из добавленных. Каждое обновление игры делает модлеты недействительными, пока авторы не подтянутся, так что модифицированный сервер не должен обновляться автоматически: в статье как держать сервер с модами в порядке приведён более широкий вариант этого довода, а руководство по командам админа и модлетам глубже разбирает сторону XPath.

Сохранения, файлы регионов и медленная порча#

Сохранение лежит в папке пользовательских данных, в Saves/<World>/<GameName>/: состояние игры, папка Player с одним файлом на каждого, кто когда-либо заходил, и папка Region с файлами .7rg, каждый из которых покрывает квадрат карты.

Эта последняя деталь как раз полезна. Мир - это не один файл, а сотни, и сервер, убитый посреди записи, может оставить повреждённым ровно один из них. Симптом странный и конкретный: определённая область, которая роняет клиентов, зашедших в неё, тогда как остальная карта в порядке. Починка соразмерна: восстановите этот один .7rg из backup и потеряйте только то, что было построено внутри него, вместо того чтобы откатывать весь мир.

  • Останавливайте сервер правильно. shutdown или Stop в панели: оба сначала сохраняют. Именно убийство процесса и портит файлы регионов.
  • Делайте backup всей папки сохранения, а не только каталога регионов. Файлы игроков хранят инвентарь и очки навыков каждого, и восстановление мира без них - отдельная катастрофа.
  • Проверьте восстановление один раз. Backup, который никто не восстанавливал, - гипотеза; в статье backup, который действительно восстанавливается коротко объяснено почему.
  • Храните копию и сгенерированного мира. Повторная генерация с тем же seed должна давать ту же карту, но слово «должна» в этой фразе делает немалую работу при смене версий игры.

На RE:NODE слоты backup есть в каждом тарифе 7 Days to Die, backup хранятся вне машины, которую они защищают, и их можно заблокировать от ротации, а вкладка Schedules умеет запускать упорядоченный список задач: команду saveworld, короткую паузу, затем backup. Если сервер упирается в лимит памяти, контейнер останавливается и запускается заново начисто, а не остаётся свопиться; это безопаснее, чем альтернатива, но всё равно остановка без сохранения, поэтому ночной backup по расписанию важнее на сервере, работающем близко к потолку.

Диагностика проблем#

Сервер не появляется в списке. Проверьте, что ServerVisibility равен 2, что 26900 открыт и для TCP, и для UDP, затем подождите несколько минут. Проверьте, подключившись напрямую по адресу через пункт Connect to IP в клиенте; если это работает, проблема в списке, а не в сервере.

Первый запуск длится вечность. Генерация случайного мира на карте 10k медленная. Смотрите на лог, а не на часы, и дайте ей закончиться: если остановить на полпути, останется частичный мир, который всё равно придётся генерировать заново.

Новые игроки отваливаются по тайм-ауту при подключении. Они скачивают исследованный мир. Увеличьте ServerMaxWorldTransferSpeedKiBs относительно значения по умолчанию 512.

Клиентов с модами сразу выкидывает. Easy Anti-Cheat. Поставьте EACEnabled в false, если этого требует мод, и примите то, что это значит.

Одна область роняет каждого, кто в неё входит. Повреждённый файл региона. Найдите .7rg, покрывающий эти координаты, и восстановите этот один файл.

Память растёт всю неделю, и сервер падает в ночь орды. Перезапускайте ежедневно. 7 Days не освобождает всё, что выделил, а ночь орды - худший момент, чтобы наткнуться на предел.

Игроки потеряли персонажей после смены конфигурации. Изменились GameName или GameWorld, поэтому загрузилось новое сохранение. Старое всё ещё лежит на диске под своим именем.

FAQ#

Сколько RAM нужно серверу 7 Days to Die?

Восемь гигабайт для Navezgane или мира 6k с несколькими друзьями, от десяти до двенадцати для случайного мира 8k с полной группой и больше с оверхол-модами. Генерация мира даёт всплеск выше рабочего значения, так что карта, которую вы можете создать, меньше той, которую можете запустить.

BloodMoonEnemyCount задаётся на игрока или на весь сервер?

На игрока. Четыре игрока по восемь - это тридцать два зомби. MaxSpawnedZombies - потолок для всего сервера, который молча обрезает сумму, поэтому увеличение числа на игрока иногда вообще ничего не меняет.

Нужно ли игрокам устанавливать моды сервера?

Только если мод добавляет ассеты или код. Модлет, который просто правит XML - добычу, рецепты, спавны, прогрессию, - сервер отправляет клиентам сам, и ставить ничего не нужно. Всё с новыми моделями, иконками или DLL должно быть с обеих сторон.

Можно ли изменить размер мира, не потеряв сохранение?

Нет. Размер мира - свойство сгенерированного мира, и его изменение порождает новый. Ваше существующее сохранение остаётся на диске под прежним GameName, так что изменение обратимо, но расширить мир на месте нельзя.

Почему сервер подлагивает по расписанию?

Он сохраняется или динамический меш занят структурной работой. Регулярный подлаг раз в несколько минут - это сохранение; нерегулярный после обрушения базы - это меш, а DynamicMeshLandClaimOnly сужает место, где эта работа выполняется.

Стоит ли отключать Easy Anti-Cheat?

Только если этого требует нужный вам мод и только на сервере, где вы знаете всех. EAC - главная защита от читерства на стороне клиента в 7 Days to Die, и частичной настройки нет.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000