• 19 344
  • 31
  • 78

WorldRegenerator. Даёшь чистую карту!

WorldRegenerator. Даёшь чистую карту!
WorldRegenerator. Даёшь чистую карту!
Пожалуй, одной из главных проблем игры-песочницы как Minecraft является состояние карты, которое постепенно ухудшается в связи с деятельностью игроков (добыча ресурсов). На приватных серверах дело обстоит получше: большая карта и малый поток игроков - износ карты происходит гораздо медленнее. Но у нас публичный сервер и карта износится быстро. Износ карты - одна из причин необходимости проведения вайпов. Ведь с изношенной картой сервер теряет привлекательность для новичков: где найти нужные ресурсы, если их выкопали другие игроки?

Увы, порча карты не ограничивается лишь на одной добыче ресурсов. Подрастающее поколение строит столбы и многое другие, что заметно портит внешний вид карты. Похоже, что им нравится жить в "свалке" из блоков. После нескольких месяцев работы сервера хуже всего выглядят биомы "джунгли" и "пустыня". Также карту портят и нормальные игроки, но не они, а механизмы вроде карьера, которые выкапывают большие ямы.
WorldRegenerator. Даёшь чистую карту!
Вся суть столбостроительства.

Что же делать?
Делать вайп каждый месяц? - Нет, игроков только распугаем. Вайпать карту с сохранением приватов? - Не годится, некоторые блоки из модов плохо переносятся (теряются свойства, инвентарь). В голову нам приходит последний вариант - регенерировать участки карты, которые находятся в плохом состоянии. С самого запуска первых серверов мы активно занимались такой чисткой, правда, это делалось вручную. А сейчас серверов стало много и размеры карт уже не те, что раньше - всё обойти нам не по силам. Можно конечно было назначить людей, которые бы этим занимались, но тут проблема в доверии и в их силах - а вдруг отрегенерируют то что не нужно?

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

Ещё полгода назад по нашему заказу была разработана первая версия регенератора. Но её работа не увенчалась успехом - по непонятным причинам он попросту зависал. Его код был сложен для понимания, поэтому проект был заморожен и сотрудничество с тем исполнителем, который нам его написал было прекращено (первая версия модификации Additional Blocks с кучей багов - тоже его заслуга). ploxo

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

Все три последние дня мы обкатывали регенератор на каждом из наших серверов. Была проведена регенерация основного и нижнего миров. Было обработано порядка 750 000 чанков, процесс занял около 7 часов (на один сервер).

Что же такое регенерация?
Регенерация - процесс восстановления участков карты в первоначальное состояние. Под участками мы понимаем чанки и выбор на них пал не случайно. Дело в том, что незаприваченная часть карты имеет сложную форму - её нужно как-то "выделить".

Во-вторых, обработать всю карту целиком нельзя - сервер упадёт. Следовательно, приходится разбивать задание на порции и чанки здесь подошли в самый раз. Дело в том, что Bukkit API предоставляет возможность регенерации чанков. Да, именно чанков. Регенерировать конкретную область нельзя - только весь чанк целиком. Возможно, Вы знакомы с командой WorldEdit - //regen. Так вот, эта команда регенерирует все чанки, по которым проходит выделенная область, а потом восстанавливает, то что не попало в выделенную область - в результате Вам кажется что произошла регенерация только выделенной области. Постройки игроков в этом случае могут пострадать, о чём говорилось, почему нам не подходит вайп с сохранением приватов.

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

Таким образом, регенерация решает следующие проблемы:
  • Поддержка карты в хорошем состоянии.
  • Делает сервер привлекательным для новичков в любое время - теперь нет проблем с поиском ресурсов.
  • Убирает дыры от карьеров и прочих механизмов, изменяющих ландшафт.

Некоторым из Вас может показаться, что на этом всё: можно вводить безвайповую систему. Увы, но нет. Регенератор решает проблему состояния карты, но не решает проблему переизбытка ресурсов у игроков и даже способствует этому (ведь ресурсы можно будет добывать уже несколько раз в одном и том же месте). Всё же нашей главной целью введения регенератора было сделать сервер привлекательным для новичков, которые только зашли на сервер и наладить внешний вид карты. "Свалка из блоков" смотрится крайне ужасно. Не правда ли?

Ещё мы сняли для Вас "кино", демонстрирующее работу регенератора.
WorldRegenerator. Даёшь чистую карту!
  • Автор: Andrey
  • Опубликовано:

31 комментарий

ToppieJobby
Круть,мне нравится!
JohnWest
if ( Private area )
next;
else
recovery;

wink
Andrey
Автор
Цитата: JohnWest
if ( Private area )
next;
else
recovery;

wink
Syntax error at line 1.
Crispy_102
Цитата: SirEdivn
Можно делать не прямоугольный приват?)

надо сделать отдельную карту типа авто шахты
kirich2206
А вайпы будут?
Siriusmag
круто, мне нравиться)
ANTIKRIPER
Это значит вайпов не будет? pro
zeeeeet
я этого дождался ура obnimau
Torun
Достойно похвал.
MrMiks
Ну классно конечно а вайпов надеюсь не будет!
MrMiks
Уже понял что вайп через месях так-что не чего не поделаешь!
Следующая
1 2
Информация
Комментировать статьи на сайте возможно только в течении 30 дней со дня публикации.
Нашли очепятку? Выделите её и нажмите Ctrl+Enter.