Восстановление мира

m1zeexx

Участник
Регистрация
10 Янв 2024
Сообщения
5
Есть ли такая функция восстановления мира например игра выживание а через какое то время мир должен восстановиться(вайп). Или хотябы копировать из одной части карты в другой какую нибудь постройку?
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
576
Есть ли такая функция восстановления мира например игра выживание а через какое то время мир должен восстановиться(вайп). Или хотябы копировать из одной части карты в другой какую нибудь постройку?
функции нету, но такое закодить реально. трудно, но реально.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
576
Из одной части карты в другую
я могу объяснить тебе обе вещи - и как сделать восстановление, и как копировать. Хотя вроде бы на МЛ есть в коде функция копировать. Глянь там где идет "поставить блок" и "удалить блок", но мб у тебя доната не хватит

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

m1zeexx

Участник
Регистрация
10 Янв 2024
Сообщения
5
я могу объяснить тебе обе вещи - и как сделать восстановление, и как копировать. Хотя вроде бы на МЛ есть в коде функция копировать. Глянь там где идет "поставить блок" и "удалить блок", но мб у тебя доната не хватит

ну и для того, чтобы закодить вайп мира придется использовать "поставить блок" и "удалить блок". так что если не хватает доната - не сможешь
Я на Кинга буду донатить, надеюсь хватит, спасибо большое :)
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
576
итак

как тебе сделать копирование
процесс прост - тебе нужно просто пройтись по всем блокам, взять их данные и перенести на нужные места. начнем с прохода по всем блокам:
в двухмерном пространстве представь такую матрицу. "+" - блок земли, "-" - воздуха
+ + + - + -
- - - + - +
  • - + - + -
  • + + + +
немного криво, но я думаю понятно. тут область 4x6(символов). тебе нужно проходить по рядам и строчкам.
1742403043341.png
вот как бы путь движения. представим что x - ряды, y - строки

сначала у тебя координаты 1; 1 - ряд1 и строка1. затем 2; 1 - ряд 2 и строка 1; 3; 1; 4; 1. затем ты перемещаешься на строку номер 2 и обнуляешь ряд. получается следующая координата - 1; 2 - ряд 1, но строка 2.
получается тебе нужна функция, в которой будет 3 цикла в такой последовательности: цикл( цикл( цикл ) ) )
то есть как бы цикл-в-цикле. если ты знаком с программированием, то 100% понимаешь о чем я.

внешний цикл - увеличивать координату x, внутренний - z, самый внутренний - y. можно в другом порядке, не повлияет. получится такая последовательность. допустим максимальное значение координаты - 4.
x=1, z=1, y=1
x=1, z=1, y=2
x=1, z=1, y=3
x=1, z=1, y=4
x=1, z=2, y=1
x=1, z=2, y=2
...
x=1, z=4, y=4
x=2, z=1, y=1
x=2, z=1, y=2
надеюсь понятно. там где ... просто лень писать
Сообщение объединено:

как взять данные - не знаю, но вроде на мл было что-то для такого. ну на крайняк можно мудрить что-то сложное если такого нету(идеи уже есть офк).

забыл дописать в копирование: тебе нужно сохранять результаты в массив. я бы сохранял относительную координату блока и что на этом месте стоит за блок. что же такое относительная координата?
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
576
в майнкрафте у тебя координаты идут относительно x=0 и z=0(про y хз). то есть центр мира у тебя в точке 0,0. Координата 1600,500 - значит 1600 от x=0 и z=0.

А если ты возьмешь центр не 0,0 , а допустим 100,100?

у тебя все координаты сдвинутся - какие то на +100, какие то на -100. Если центр мира у тебя на 100,100 , то координата 1600,500 находится от ЦЕНТРА на 1500 по x(1600-100) и 400 по z(500-100)

Так вот в первом случае координаты относительно точки 0,0 , а во втором - относительно точки 100,100.

Сохранять координаты тебе надо относительно игрока. Как это работает в WorldEdit знаешь? копируется и вставляется точно так же от того, где стоял игрок. вот попытался визуализировать это
1742403916639.png
c - copy, p - paste. красное - место, где стоит игрок когда прописывает команду copy/paste. видишь разницу? если нет - напиши


по сути в массив тебе надо сохранять просто значения x, y и z из тех трех циклов.
Сообщение объединено:

при вставке тебе что надо делать: проходиться циклом по массиву с этими блоками. затем каждый раз ты берешь ОТНОСИТЕЛЬНУЮ КООРДИНАТУ данного блока, затем берешь координату игрока с помощью кода, и складываешь координаты. x+x, y+y, z+z. по идеи так и должно работать.

единственное что я не учел - отрицательные координаты. хз, надо ли будет их учитывать или нет, но если да - в целом изменить код не особо трудно
Сообщение объединено:

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