Перейти к содержимому
eu_tomat

Достоверность программной навигации роботов при откатах чанков

Рекомендуемые сообщения

1 минуту назад, eu_tomat сказал:

Это идея @hohserg , он хочет управлять загрузкой чанка с точностью до тика. Я же пока не готов погружаться в Java.

Загрузка чанков... хм... чанклоадер так делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, NEO сказал:

Загрузка чанков... хм... чанклоадер так делает.

А как ты чанклодер сможешь включать с точностью до тика? Пока чанклодер выключен, чанк не загрузен. Пока чанк не загружен, робот не примет сигнал на включение чанклодера.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чанки выгружаются по 100 за один тик, а так они сразу попадают в список на выгрузку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, NEO сказал:

Чанки выгружаются по 100 за один тик, а так они сразу попадают в список на выгрузку.

Я уже начал терять цель, к которой ты пытаешься подвести. В чём твоё предложение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, eu_tomat сказал:

Я уже начал терять цель, к которой ты пытаешься подвести. В чём твоё предложение?

К тому что "рандомное" время выгрузки зависит от скорости той самой выгрузки, в майне работает балансировщик выгрузки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, NEO сказал:

К тому что "рандомное" время выгрузки зависит от скорости той самой выгрузки, в майне работает балансировщик выгрузки.

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

 

Есть объяснение "случайному" времени выгрузки.

Как мы можем использовать это знание, при этом не зная, сколько чанков ожидает выгрузки в данный момент?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 07.05.2020 в 20:29, eu_tomat сказал:

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

 

Есть объяснение "случайному" времени выгрузки.

Как мы можем использовать это знание, при этом не зная, сколько чанков ожидает выгрузки в данный момент?

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

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

 

имхо, но решать проблему который нет, бессмысленно, нужно её хотя-бы зафиксировать. Кто-то там сказал, какая-то бабка на ухо прошептала, камон парни, с каких пор такое работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, NEO сказал:

Никак ты не узнаешь без жавы.

Опять 25. Может, и надо мне тоже погрузиться в жаву. Как там, трудно вникать? Думаю, за день я установлю какую-то среду, настрою, и под конец дня смогу даже что-то заговнокодить консольное. Синтаксис Java мне в целом понятен, а нюансы я могу и позже освоить. С этим я разберусь. Но там для программирования в Майнкрафте там нужна ещё куча всего, и вот тут для меня начнётся вообще тёмный лес. Можешь набросать какой-то гайдик, с чего начать и чем продолжать? Или ссылки какие-нибудь. Я не сомневаюсь, что в потрохах Майнкрафта тоже всё жутко интересно, но я пока не знаю с чего начинать, и сколько времени на это придётся потратить.

 

2 минуты назад, NEO сказал:

имхо, но решать проблему который нет, бессмысленно, нужно её хотя-бы зафиксировать. Кто-то там сказал, какая-то бабка на ухо прошептала, камон парни, с каких пор такое работает?

Ты про какую проблему? То, что роботы на сервере пропадают? Да, подтверждаю. То, что роботы дюпаются, тоже есть свидетели. Примерная ситуация известна. И её надо научиться воспроизводить. Вон, @Doob говорит, что умеет. Далее надо зафиксировать рассинхронизацию программной навиагации с положением робота в чанке. Я тоже попробую поработать над этим. Как смогу, конечно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, eu_tomat сказал:

Ты про какую проблему? То, что роботы на сервере пропадают? Да, подтверждаю. То, что роботы дюпаются, тоже есть свидетели. Примерная ситуация известна. И её надо научиться воспроизводить. Вон, @Doob говорит, что умеет. Далее надо зафиксировать рассинхронизацию программной навиагации с положением робота в чанке. Я тоже попробую поработать над этим. Как смогу, конечно.

Условия соблюдены где нет других модов или плагинов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, NEO сказал:

Нужны условия где нет других модов или плагинов.

Проблема в том, что я не знаю, какие моды и плагины имеют значение. Может, они наоборот нужны для провокации отката чанка. Хотя, @Doob говорит, что значения это вообще не имеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

До основного эксперимента я не дошёл. Зато я попытался проверить, на каком расстоянии будет действовать чанклодер из OC. Результаты меня удивили, объяснения им не вижу. Прошу помощи в интерпретации.

 

Сразу выяснилось, что чанклодер OC загружает область 3x3 чанка. Это подтверждается и кодом OC.

 

Но дальше начались странности. Я проверил, как далеко следует отвести робота с чанклодером, чтобы он перестал загружать целевой чанк. Робот был установлен рядом с границей чанка, поэтому ему было достаточно сделать один шаг назад, чтобы перестать подгружать чанк, находящийся перед ним. Но не тут-то было. Для полной гарантии потребовалось 16 шагов. То есть, робот перешёл не просто границу чанка, а подошёл к следующей границе. И пока я не могу объяснить такое поведение чанклодера.

 

Затем я решил проверить момент включения тестового робота в целевом чанке при приближении к чанку робота с чанклодером. Оказалось, что робота можно приблизить всего на 8 шагов, чтобы целевой чанк загрузился. При этом робот даже не дошёл до границы чанка, а целевой чанк уже загрузился. Так можно было несколько раз двигать роботом туда и обратно на 8 шагов и каждый раз целевой чанк загружался и выгружался. Но так длилось не долго. Позже этого количества шагов оказалось недостаточно. Но оказалось достаточно 12 шагов. И после одного выбегания на 12 шагов снова оказалось возможным выбегать всего на 8 шагов. И целевой чанк загружался на короткое время. Правда, в какой-то момент оказалось, что недостаточно и 12 шагов. В общем, игрался я так, и в конечном итоге роботу с чанклодером пришлось проделать весь путь в 16 шагов, чтобы загрузить целевой чанк.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Хотя при переходе в другой чанк - он должен загружаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
33 минуты назад, NEO сказал:

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

Я тоже сделал подобное предположение, но для меня не очевидна логика, которой руководствовался автор. А ещё я не смог найти участок кода, который бы приводил к подобным результатам. Не подскажешь, как его найти? За счёт чего чанклодер загружает область 3x3 чанка, я вижу. А за счёт какого кода он загружает чанки заранее, до того как робот пересёк границу чанка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ещё один эксперимент с неожиданными результатами.

 

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

 

На расстоянии 32 блока от целевого компа находится робот с включенным чанклодером. Между роботом и целевым компьютером есть свободный чанк. Границы чанков проверялись нажатием клавиши F9.

 

При удалении игрока на достаточную дистанцию целевой скрипт должен полностью остановить свою работу. Но скрипт работу продолжает. Можно было бы предположить, чтобы я неправильно определил границы чанков. Теоретически, два блока на расстоянии друг от друга в 32 блока могут находиться в соседних чанках. В этом случае целевой чанк должен всегда оставаться загруженным. Но нет же, скрипт время от времени свою работу прерывает. Размер паузы похож на случайный от единиц до десятков секунд.

 

Если откатить робота с чанклодером ещё на шаг назад, то целевой скрипт гарантированно прекращает свою работу. В этой позиции вопросов не возникает.

 

Но что было до этого? Что это за чанк Шрёдингера, который то выгружается, то снова загружается с какой-то случайной задержкой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 часа назад, eu_tomat сказал:

За счёт чего чанклодер загружает область 3x3 чанка, я вижу. А за счёт какого кода он загружает чанки заранее, до того как робот пересёк границу чанка?

За счет того, что он грузит область 3*3. Он все время грузит текущий чанк и любой в который может перейти

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, hohserg сказал:

За счет того, что он грузит область 3*3. Он все время грузит текущий чанк и любой в который может перейти

Речь шла о чанках за пределами области 3x3 с роботом в центре. И, как оказалось далее, роботу вообще не обязательно двигаться. Находящийся рядом чанк случайным образом загржается и выгружается. При этом игрок находится далеко и не двигается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 07.05.2020 в 22:13, eu_tomat сказал:

А как ты чанклодер сможешь включать с точностью до тика? Пока чанклодер выключен, чанк не загрузен. Пока чанк не загружен, робот не примет сигнал на включение чанклодера.

У меня есть такая идея: игроком надо прогружать чанк, в котором находится робот с чанклоадером, но не соседний, где будет находиться тестовый робот. Тогда сигнал гарантированно будет доходить.

 

Насчёт дюпов и исчезновений роботов (важно: /me не читал код, только делает предположения): возможно, чанк сохраняется на диск в тот момент, когда он попадает в очередь на выгрузку, но продолжает просчитываться дальше. Если робот выезжает из выгружаемого в прогруженный чанк, то робот дюпается; если въезжает внутрь, то исчезает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, ProgramCrafter сказал:
В 07.05.2020 в 20:13, eu_tomat сказал:

А как ты чанклодер сможешь включать с точностью до тика? Пока чанклодер выключен, чанк не загрузен. Пока чанк не загружен, робот не примет сигнал на включение чанклодера.

У меня есть такая идея: игроком надо прогружать чанк, в котором находится робот с чанклоадером, но не соседний, где будет находиться тестовый робот. Тогда сигнал гарантированно будет доходить.

Да, хорошая идея, и я уже воплотил её в немного ином виде.

 

В момент написания того поста я считал, что чанклодер OC загружает область 1x1 чанк. Вроде бы так и было раньше. Не знаю, когда это изменилось. Но один из проведённых мной экспериментов показал, что чанклодер OC загружает область 3x3, чему я позже нашёл подтверждение и в коде OC. Поэтому озвученная мной проблема потеряла свою актуальность, и вместо игрока я стал использовать ещё одного неуправляемого робота с чанклодером, который постоянно держит загруженным чанк с управляемым роботом. А от загрузки чанков игроком я в своих экспериментах решил пока отказаться, чтобы не усложнять интерпретацию результатов, и без того неожиданных.

 

Мой эксперимент выглядел так. На границе чанка установлен компьютер с целевым скриптом. В 16 блоках от него в другом чанке стоит робот с управляемым чанклодером, а 16 блоках от него (и в 32 блоках от целевого) стоит неуправляемый робот с постоянно включенным чанклодером, который служит для постоянной загрузи чанка с управляемым роботом. Это практически предложенная тобой схема, в которой вместо игрока задействован ещё один робот. Игроку остаётся лишь отбежать подальше и с планшета подавать сигналы управляемому роботу на включение и выключение чанклодера.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема блуждающей загрузки чанков, похоже, не в OC. Мировой якорь из RailCraft ведёт себя точно также. Чанклодер периодически подгружает чанк, не смежный ему. Можно предположить, что границы чанков неверные, но я разместил целевой компьютер и чанклодер на расстоянии 47 блоков, если считать расстояние между их центрами. Их чанки никак не могут быть смежными. Похоже, такова механика самого Майнкрафта. Подскажите, знатоки Майнкрафта, верно ли моё предположение?

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, есть такое. Видел на примере плагинов, которые принудительно ограничивают область загрузки игрока до одного чанка, тогда в соседних творится полная дичь.

 

Не знаю, где читал про механику нулевых чанков, нашел только это https://minecraft.gamepedia.com/Spawn_chunk

Тут написано, что и как тикает https://minecraft.gamepedia.com/Chunk#start_ticket

Лучше бы глянуть как оно в коде, потому-что для жава едижон нет команды tickingarea. И как оно устроено, на самом деле, довольно непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...