RE:NODE

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

7 Days to Die: кровавая луна и лаги орды

Как на сервере 7 Days to Die считается размер орды кровавой луны, какие настройки меняют число зомби, как читать строку статистики и как убрать лаги в ночь орды.

0 прочтений

Размер орды кровавой луны в 7 Days to Die задают два числа: BloodMoonEnemyCount - сколько зомби живы одновременно на каждого игрока, и MaxSpawnedZombies - потолок на весь сервер. Четыре игрока при значении по умолчанию 8 - это 32 зомби одновременно, которых заменяют новые по мере гибели с 22:00 до 04:00. Когда ночь орды лагает, причина почти всегда одна из четырёх: для CPU слишком много живых зомби, игроки обороняют несколько отдельных баз, конструкция базы делает поиск пути дорогим или сервер работает всю неделю без перезапуска и ему не хватает памяти. Каждую из них можно измерить из консоли и исправить, не делая ночь скучной.

В этом руководстве разобрано, как на самом деле собирается орда, все настройки, которые её меняют, как читать строку, которую сервер пишет о собственном состоянии, и какие изменения помогают сильнее всего. Остальная часть конфига описана в статье настройки сервера 7 Days to Die.

Как собирается орда кровавой луны#

Каждые BloodMoonFrequency дней небо краснеет, и в 22:00 по игровому времени вокруг каждого игрока начинает спавниться орда. Что именно придёт, решают три вещи:

  1. Сколько одновременно. BloodMoonEnemyCount на игрока с потолком MaxSpawnedZombies на весь сервер.
  2. Какие зомби. Игровая стадия (game stage). У каждого игрока есть игровая стадия, которая растёт с его уровнем и числом прожитых дней и корректируется сложностью. Игроки, стоящие рядом, считаются отрядом, и игровая стадия отряда - с перевесом в сторону самого сильного - выбирает группы спавна из gamestages.xml. Поэтому игрок 10-го уровня, который обороняется вместе с другом 80-го уровня, видит диких и радиоактивных зомби, которых в одиночку никогда бы не встретил.
  3. Как быстро. ZombieBMMove - скорость передвижения во время орды.

Когда зомби погибают, появляются новые, чтобы держать число на уровне, пока ночь не закончится в 04:00 или не будет исчерпан бюджет волны. Поэтому для сервера важно не то, сколько зомби убито за ночь, а то, сколько их живо в каждый момент, и цена каждого зависит от того, чем он занят.

Живой зомби стоит прежде всего поиска пути. Каждый вычисляет, как добраться до игрока сквозь построенные игроками блоки или в обход них, выбирает, что бить, и пересчитывает маршрут каждый раз, когда ломается блок. Зомби, идущий по открытой местности, дешёвый. Зомби внутри лабиринта из полуразрушенного бетона - нет.

Все настройки, которые меняют ночь орды#

ПараметрПо умолчаниюЧто делает
BloodMoonFrequency7Дней между кровавыми лунами. 0 отключает их
BloodMoonRange0Случайное число дней, добавляемое к частоте или вычитаемое из неё
BloodMoonWarning8Час, когда счётчик дней становится красным. -1 - без предупреждения
BloodMoonEnemyCount8Зомби, живых одновременно, на каждого игрока
MaxSpawnedZombies64Общий потолок живых зомби на сервере
ZombieBMMove3Скорость орды: 0 шаг, 1 трусца, 2 бег, 3 спринт, 4 кошмар
EnemyDifficulty00 обычные, 1 дикие
GameDifficulty1От 0 до 5. Наносимый и получаемый урон и масштаб игровой стадии
DayNightLength60Реальных минут на игровой день - значит, задаёт, сколько орда длится в реальном времени
serverconfig.xml
<property name="BloodMoonFrequency"   value="7"/><property name="BloodMoonRange"       value="0"/><property name="BloodMoonWarning"     value="8"/><property name="BloodMoonEnemyCount"  value="8"/><property name="MaxSpawnedZombies"    value="64"/><property name="ZombieBMMove"         value="3"/>

Некоторые из них взаимодействуют так, как комментарии в конфиге не объясняют.

DayNightLength - это замаскированная настройка орды. Орда длится с 22:00 до 04:00, то есть шесть игровых часов. При стандартном 60-минутном дне это пятнадцать реальных минут; при 120 минутах - тридцать. Более длинные дни означают более длинный отрезок постоянной нагрузки, а это важнее любого пика.

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

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

Арифметика: сначала на игрока, потом потолок#

Самое часто неверно понимаемое в ночи орды - то, что BloodMoonEnemyCount не является общим числом.

ИгроковBloodMoonEnemyCountЗапрошеноРеально живых при MaxSpawnedZombies 64
281616
483232
886464
81612864
1289664

Из этой таблицы следуют два вывода. Сервер, который хорошо держал четырёх игроков на 7-ю ночь, может упасть на 14-ю, потому что зашли восемь человек, хотя ни одна настройка не менялась. А увеличение BloodMoonEnemyCount на загруженном сервере часто ничего не меняет, потому что ограничением уже стал потолок, - вот почему игроки жалуются, что «орда не стала больше» после того, как админ поднял значение.

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

Поднять MaxSpawnedZombies выше 64 можно, и комментарий в поставляемом конфиге предупреждает, что большие значения будут стоить серверу частоты кадров, а значит, лагов у каждого клиента. Это единственное число на сервере, где «больше» надёжно означает «хуже». Если хотите ночь потяжелее, поднимайте сложность или скорость раньше, чем количество.

Как читать строку статистики сервера#

Гадать, тяжело ли серверу, не нужно. Выделенный сервер с регулярным интервалом пишет в лог строку состояния, и консоль панели показывает её по мере появления:

code
Time: 412.37m FPS: 31.52 Heap: 5210.4MB Max: 6012.8MB Chunks: 1844 CGO: 212 Ply: 4 Zom: 32 Ent: 71 (148) Items: 23 CO: 4 RSS: 9120.5MB
ПолеЗначениеНа что смотреть
TimeМинут с момента запуска сервераДолгий аптайм перед ордой - тревожный знак
FPSЧастота симуляции сервераПадение до однозначных чисел - лаги, которые чувствуют все
Heap, MaxУправляемая память: используемая и выделеннаяРост в течение недели
ChunksЗагруженные чанкиВысокое значение, когда игроки разбрелись
PlyПодключённые игроки
ZomЖивые зомбиДолжно держаться около ожидаемого размера орды
EntСущности, активные и всегоРастущий итог значит, что что-то не исчезает
ItemsВыброшенные предметы в миреЗдесь копятся мешки с лутом после орды
RSSПамять, которую занимает процессИменно это число сравнивается с лимитом тарифа

Поля стабильны уже много лет, но их точный набор немного различается между версиями. Важно читать их на протяжении вечера. Запишите строку в 21:00 по игровому времени, ещё раз на пике орды и ещё раз после 04:00. Если FPS резко падает, пока Zom держится на 32, сервер не вытягивает 32 зомби вокруг этих баз. Если FPS держится, а игроки всё равно жалуются, смотрите на их соединения, а не на сервер - как это различить, описано в статье задержка, джиттер и потеря пакетов. Если RSS близок к лимиту тарифа ещё до начала орды, это проблема памяти, а не зомби.

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

Базы, поиск пути и почему у одной группы лагает, а у другой нет#

У двух групп с одинаковыми настройками и одинаковым числом игроков ночи орды могут проходить совершенно по-разному, и разница обычно в базе.

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

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

Лабиринты заставляют зомби думать. Зомби выбирают маршрут, оценивая прочность блоков на возможных путях. Длинный коридор-серпантин с множеством альтернативных разрушаемых стен даёт им больше вариантов для оценки при каждом изменении блока. Конструкции-воронки с одним очевидным маршрутом дешевле лабиринтов.

Dynamic mesh работает в фоне. DynamicMeshEnabled пересчитывает структурные данные для участков, изменённых игроками. Если DynamicMeshLandClaimOnly оставлен в true, эта работа ограничена заприваченными участками - это то, что нужно. Полное отключение экономит немного CPU; отключение LandClaimOnly на старом сервере делает только хуже.

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

Ничто из этого не повод указывать игрокам, как строить. Это повод знать, куда смотреть, когда оборона одной базы заставляет заикаться ночь у всех.

Изменения настроек, которые помогают сильнее всего#

В порядке того, насколько они помогают и насколько мало игроки их замечают:

  1. Перезапускайте сервер перед ордой. На большинстве серверов 7 Days память растёт в течение недели. Перезапуск днём в день кровавой луны, с предупреждением, даёт орде начаться с чистой кучей. Как выбрать час, описано в статье расписания перезапусков, которые помогают. При BloodMoonRange равном 0 это легко запланировать, потому что орда всегда приходится на число, кратное BloodMoonFrequency.
  2. Обороняйтесь вместе. Это не настройка, но она стоит больше любой из них.
  3. Снижайте `BloodMoonEnemyCount`, а не `MaxSpawnedZombies`. Для восьми игроков по 6 на каждого - это 48 живых вместо 64, равномерно распределённых по базам. Если вместо этого снизить общий потолок, бюджет заберёт та база, у которой спавн начнётся первым.
  4. Сложность создавайте скоростью и уровнем сложности. ZombieBMMove на 4 с 6 на игрока - ночь тяжелее, чем 3 с 12 на игрока, и при этом дешевле.
  5. Держите `DayNightLength` в разумных пределах. Девяносто минут - частый компромисс для групп, играющих вечерами. Очень длинные дни растягивают нагрузку орды на час реального времени.
  6. Проверьте тариф. Если FPS падает на чистом, недавно перезапущенном сервере со скромной ордой и одной базой, ограничением стала доля CPU. Тут действует правило из статьи CPU или RAM для игровых серверов: прежде чем докупать один ресурс, проверьте, какой из них упёрся в предел.

Разумная отправная точка для разных групп:

ГруппаBloodMoonEnemyCountMaxSpawnedZombiesZombieBMMove
2-4 друга, без напряга8642
4-6 игроков, стандарт8643
8 игроков, одна общая база6643
8+ игроков, несколько баз4643
Небольшая группа, которой нужна боль12644

Расписание вокруг ночи орды#

На сервере с фиксированной кровавой луной раз в семь дней полезная автоматизация проста. Перезапуск за несколько часов до неё, сохранение и резервная копия наутро.

В RE:NODE вкладка Schedules принимает cron-выражение и список упорядоченных задач с задержками. Расписание перед ордой может выглядеть так: консольная команда say "Restart in 5 minutes for horde night", задержка в пять минут, saveworld, короткая задержка, затем действие питания restart. Расписание на утро после: saveworld, задержка, затем резервная копия. Restart в панели отправляет корректную остановку, так что мир записывается до выхода процесса, а если орда когда-нибудь всё же доведёт сервер до лимита памяти, его остановят и перезапустят начисто, а не оставят уходить в своп. Это лучше альтернативы, но всё равно остановка без сохранения, так что полагаться стоит именно на перезапуск перед ордой. Синтаксис есть в статье cron-выражения по-простому.

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

Решение проблем#

Во время орды зомби дёргаются и телепортируются. Упал FPS сервера. Проверьте строку статистики. Снизьте число на игрока, соберите игроков в одной базе, перезапустите сервер перед следующей ордой.

Орда меньше, чем указано в настройке. Её ограничивает MaxSpawnedZombies, или игроки разбрелись, и бюджет делится с зомби вокруг кого-то в дикой местности.

Орда так и не пришла. BloodMoonFrequency равен 0, или её сдвинул BloodMoonRange. gettime показывает текущий день; считайте от него.

Сервер упал на пике орды. Посмотрите на RSS относительно лимита тарифа в строках перед падением. Если было близко, дело в памяти: перезапускайте перед ордами и подумайте о следующем тарифе. Если с памятью всё было в порядке, прочитайте последние строки лога в поисках ошибки мода - это вторая частая причина.

Ночь орды проходит нормально, а первый день свежего сервера лагает. Это генерация мира и первое исследование, а не орда. См. статью генерация мира в 7 Days to Die.

Лаги продолжаются после 04:00. Оставшиеся зомби и мешки с лутом или ещё не улёгшееся обрушение. le покажет, что ещё живо.

FAQ#

BloodMoonEnemyCount считается на игрока?

Да. Это число живых одновременно зомби на каждого игрока, поэтому итог растёт вместе с числом людей онлайн. MaxSpawnedZombies ограничивает общее число на весь сервер.

Какое значение MaxSpawnedZombies безопасно?

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

Почему у нас ночь орды хуже, чем на сервере друга с теми же настройками?

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

Можно ли отключить кровавые луны?

Да, BloodMoonFrequency со значением 0. Блуждающие орды при этом всё равно бывают. Многие группы предпочитают увеличить частоту, например до 14 дней, а не убирать событие совсем.

Как протестировать орду, не дожидаясь неделю?

Как администратор, с помощью settime переведите часы на вечер дня кровавой луны, сыграйте её и следите за строкой статистики в консоли. Потом верните время обратно или проводите тест на копии сервера.

Решит ли лаги орды тариф побольше?

Только если серверу действительно не хватает CPU или памяти. Сначала прочитайте строку статистики. Если FPS держится, а у игроков всё равно лаги, проблема в их соединениях или в базе, и дополнительные ресурсы этого не изменят.


Комментарии

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

0/2000