В 7 Days to Die вокселный мир, который игроки активно разрушают, и это задача сложнее, чем кажется. Серверу нужно 8 ГБ на старте и 12 и больше, когда восемь человек разбредутся по случайному миру 10k, одно быстрое ядро, которое он сможет удержать за собой, и три порта. Настройки, влияющие на производительность, - те, что определяют, какая часть этого мира бодрствует одновременно, а ночь орды - момент, когда каждое ваше решение проявляется за один вечер. В этом руководстве разобран весь файл: что делает каждая настройка, чего она стоит, порты, интерфейсы админа и telnet, модлеты и то, как именно портится сохранение в 7 Days.
Что такое выделенный сервер и почему он тяжёлый#
Выделенный сервер бесплатный и ставится через SteamCMD как приложение с id 294420. Он работает без графики, загружает один мир и одно сохранение и симулирует его, есть кто-то онлайн или нет.
Нагрузку определяют четыре вещи, и лишь одна из них - число игроков:
- Загруженные чанки. Каждый игрок держит живым набор чанков вокруг себя. Восемь игроков в одном городе обходятся дёшево; восемь игроков в восьми углах карты 10k держат каждый свой рабочий набор, и итоги складываются.
- Сущности. Зомби, животные и выброшенные предметы - все они тикают. Поэтому
MaxSpawnedZombies- самое важное число на сервере. - Динамический меш. Современные версии в фоне пересчитывают структурную опору и обрушение для построек, изменённых игроками. Именно из-за этого сервер постоянно пишет на диск; его можно сузить или выключить.
- Размер мира, в основном при генерации и на диске. Случайный мир 10k в первый раз строится долго и съедает много памяти, а потом хранится в большом числе файлов регионов.
Мир генерируется один раз, в папку GeneratedWorlds, где лежат карта высот, изображения биомов и splat-карты и prefabs.xml со списком всех размещённых точек интереса. Сохранение, на которое влияют игроки, - отдельная вещь. Понимание того, что это два разных объекта, позволяет сбросить сервер без повторной генерации карты и заново сгенерировать карту без чистой установки.
Требования и потребление ресурсов#
| Конфигурация | RAM | CPU | Диск |
|---|---|---|---|
| Navezgane или мир 6k, до 4 игроков | 8 GB | 2 ядра | 40 GB |
| Случайный мир 8k, 6-8 игроков | 10-12 GB | 2-3 ядра | 55 GB |
| Мир 10k, 8+ игроков, разбросанных по карте | 12-14 GB | 3 ядра | 70 GB |
| Модлеты, особенно оверхолы | добавьте 2-4 GB | - | добавьте 10 GB |
- Генерация - это всплеск. Построение случайного мира 10k при первом запуске съедает куда больше памяти, чем его работа, и занимает столько времени, что люди думают, будто сервер завис. Он не завис. Сгенерируйте мир один раз, затем сделайте его backup.
- CPU: в симуляции мира доминирует один поток. Тактовая частота определяет, сколько зомби могут одновременно искать путь, а это то же самое, что сказать: она определяет ночь орды.
- Диск: установка занимает около 20 ГБ, а сохранение растёт с каждым сломанным игроками блоком. Файлы регионов для хорошо исхоженного мира 10k могут достигать нескольких гигабайт.
- Сеть: самый тяжёлый момент - первое подключение нового игрока, когда сервер передаёт ему исследованный мир.
Установка и запуск сервера#
$ 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, по одному свойству на строку, и почти у каждой записи в нём есть комментарий. Не удаляйте комментарии: это лучшая документация, какая есть у игры.
<?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>Мир и идентификация
| Свойство | По умолчанию | Что делает |
|---|---|---|
GameWorld | Navezgane | Navezgane, RWG или заранее сгенерированная карта, названная в файле |
WorldGenSeed | - | Строка seed для RWG. Тот же seed - та же карта |
WorldGenSize | 6144 | Число, кратное 2048, от 4096 до 16384. Только для RWG |
GameName | - | Имя сохранения. Измените его - и начнётся новое сохранение |
ServerMaxPlayerCount | 8 | Предел числа игроков |
ServerVisibility | 2 | 2 публичный, 1 для друзей, 0 вне списка |
ServerPort | 26900 | Игровой порт |
ServerPassword | пусто | Пароль для входа |
GameWorld и GameName вместе определяют, какое сохранение загрузится. Изменение любого из них начинает новое сохранение рядом со старым, и именно так и сбрасывают сервер намеренно, и так же люди случайно теряют мир.
Сложность и множители
| Свойство | По умолчанию | Что делает |
|---|---|---|
GameDifficulty | 1 | От 0 до 5. Влияет на получаемый и наносимый урон, но не на число зомби |
XPMultiplier | 100 | Проценты |
LootAbundance | 100 | Проценты |
LootRespawnDays | 7 | Дни до того, как обшаренный контейнер снова наполнится |
DayNightLength | 60 | Реальных минут на игровые сутки |
DayLightLength | 18 | Игровых часов светлого времени |
DropOnDeath | 1 | 0 ничего, 1 всё, 2 панель быстрого доступа, 3 рюкзак |
AirDropFrequency | 72 | Игровые часы. 0 отключает |
PlayerKillingMode | 3 | От 0 без PvP до 3 убивать всех |
DayNightLength - настройка, о которой группы спорят чаще всего, и стоит она одинаково в обоих случаях. Шестьдесят минут - значение по умолчанию; девяносто дают рабочий день, который умещается в вечернюю сессию, и заодно растягивают на полтора раза неделю между кровавыми лунами.
Зомби и кровавая луна
| Свойство | По умолчанию | Что делает |
|---|---|---|
MaxSpawnedZombies | 64 | Предел на весь сервер. Настройка, которая вас спасает |
MaxSpawnedAnimals | 50 | Предел животных на весь сервер |
ZombieMove | 0 | Скорость днём, от 0 шаг до 4 кошмар |
ZombieMoveNight | 3 | Скорость ночью |
ZombieFeralMove | 3 | Скорость свирепых |
ZombieBMMove | 3 | Скорость в кровавую луну |
BloodMoonFrequency | 7 | Дней между кровавыми лунами. 0 отключает |
BloodMoonRange | 0 | Случайный разброс в днях вокруг этой частоты |
BloodMoonWarning | 8 | Час, когда небо краснеет. -1 - без предупреждения |
BloodMoonEnemyCount | 8 | Зомби одновременно на каждого игрока |
EnemyDifficulty | 0 | 0 обычные, 1 свирепые |
Привязки территории, базы и распад
| Свойство | По умолчанию | Что делает |
|---|---|---|
LandClaimCount | 3 | Сколько блоков привата может быть активно у игрока |
LandClaimSize | 41 | Ширина в блоках с центром на блоке привата |
LandClaimDeadZone | 30 | Минимум блоков между приватами разных игроков |
LandClaimExpiryTime | 7 | Дней офлайн, после которых приват начинает распадаться |
LandClaimDecayMode | 0 | Как падает прочность после этого |
LandClaimOnlineDurabilityModifier | 4 | Твёрдость блоков в привате, пока владелец онлайн |
LandClaimOfflineDurabilityModifier | 4 | То же, пока он офлайн |
BedrollDeadZoneSize | 15 | Блоков вокруг спального мешка, где зомби не появляются |
BedrollExpiryTime | 45 | Дней, после которых неиспользуемый спальный мешок перестаёт учитываться |
Производительность и обслуживание
| Свойство | По умолчанию | Что делает |
|---|---|---|
DynamicMeshEnabled | true | Структурный пересчёт для построек, изменённых игроками |
DynamicMeshLandClaimOnly | true | Ограничить эту работу заприваченными зонами |
DynamicMeshLandClaimBuffer | 3 | Буфер чанков вокруг привата |
DynamicMeshMaxItemCache | 3 | Сколько элементов меша держится в памяти |
MaxUncoveredMapChunksPerPlayer | 131072 | Предел открытой карты каждого игрока |
ServerMaxWorldTransferSpeedKiBs | 512 | Скорость передачи мира подключающемуся игроку |
PersistentPlayerProfiles | false | true означает, что вернуться могут только известные игроки |
EACEnabled | true | Easy Anti-Cheat. Для большинства DLL-модов должно быть false |
DynamicMeshLandClaimOnly - настройка производительности, о которой никто не говорит. Если она включена, тяжёлая структурная работа идёт только вокруг заприваченных баз. Если выключена - везде, где игроки что-то копали, а на сервере, которому несколько месяцев, это почти вся карта.
Кровавая луна - это нагрузочный тест#
Всё хорошо до седьмой ночи, когда число зомби умножается сразу на всех игроков. Если сервер собирается упасть, он упадёт тогда. Рассчитывайте на орду, и остальная неделя уладится сама.
Арифметику как раз чаще всего считают неверно. BloodMoonEnemyCount действует на каждого игрока: четыре игрока по восемь - это тридцать два зомби, восемь игроков по восемь - шестьдесят четыре, а восемь игроков по шестнадцать дали бы сто двадцать восемь. MaxSpawnedZombies ограничивает сумму для всего сервера, так что при значении по умолчанию 64 последняя конфигурация тихо превращается всё в те же 64 - и игроки, которым сказали, что орда стала больше, сообщат, что игра сломана, хотя её просто зажали пределом.
Помогают ещё две привычки. Просите игроков встречать орду на базах, которые расположены достаточно близко друг к другу, потому что четыре отдельные базы с ордой - это четыре отдельные задачи поиска пути, решаемые одновременно. И перезапускайте сервер перед ночью орды, а не после: расход памяти растёт в течение недели, и ночь орды - худший момент, чтобы наткнуться на предел. В статье расписания перезапусков, которые помогают разобран выбор часа, а на RE:NODE вкладка Schedules сделает это за вас, предварительно отправив предупреждение.
Порты, telnet и веб-панель#
| Порт | Протокол | Назначение |
|---|---|---|
26900 | TCP и UDP | Игровой трафик и список серверов |
26901 | UDP | Игровой трафик |
26902 | UDP | Игровой трафик |
8081 | TCP | Telnet, если TelnetEnabled равен true |
8080 | TCP | Веб-панель, если 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, а нынешние используют пару из платформы и идентификатора пользователя, потому что на тех же серверах теперь играют и консольные игроки.
<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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.