serafim
Пользователи-
Публикации
367 -
Зарегистрирован
-
Посещение
-
Победитель дней
46
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя serafim
-
обнова, робот будет принтить причину непреодолимого препятствия, ссылка таже что то типа причина возврата: entity, block и т.д. @van2614 если можешь, обнови прогу и отправь в соседний чанк чтоб робот вернулся с ошибкой, думаю многим будет интересно что там происходит, а может и найдём решение
-
Я рад что это помогло, и то что ты поделился решением с остальными, но думаю не всё так просто. Робот это часть сервера, если сервер лагает (пропускает тики) , то и робот тоже. То что робот выполняется на сервере можно заметить дав ему чанк-лоадер, робот будет работать и без присутствия игрока. @van2614 Если не сложно, можешь поменять значение с 10 на 1 и понаблюдать куда именно он там упирается, скриншот приветствуется
-
Уф, это прям плюс минус километр, так робот никуда не доедет А вот эта идея интересная Вместо очень примерных замеров, можно сделать "режим паника" Сначала делать замер износа инструмента только в начале и в конце линии, и в случае износа меньше определённого значения (например 20%) проверять износ при каждом движении, да это не так эффективно, но робот точно не застрянет
-
вот этот конфиг по умолчанию Игрок расходует кирку со значением 1 а вот робот 0,1 Например прочность железной кирки = 251, игрок сломает 251 блок, а вот робот по замерам может и 500 блоков сломать Видимо придётся делать примерный замер на сколько расходуется инструмент за удар, так как делал doob
-
да, вариант неплохой Я пока не могу собраться с мыслями как это сделать значение прочности вида 0,950 хотел перевести в количество блоков, которое осталось кирке копать но вполне возможно это неверный подход
-
пока без изменений, с частой проверкой прочности if r.durability() == nil or r.durability() <= 0.03 then А вообще протестирую, какой вариант лучше будет, но судя по расчётам то без изменений if r.durability() == nil or 100*r.durability() <= length*3+length then robot.durability() возвращает дробное значение от 1 до 0 в виде 0,950 , 100 - это округление к 95 (возможно надо до 1000) length*3 длина линии Х в три ряда +length запас прочности на манёвры, в принципе можно поставить 16 (тут надо тесты) в общем это не финальный вариант для расчётов
-
попробуй это pastebin run vhg5uu1b download
-
Если подумать, то весь объём мне не требуется вычислять, достаточно знать сколько блоков в линии (х), и хватит ли инструменту прочности чтоб эту линию выкопать к примеру: x = 16 durability = 1500 w_r = x*3/durability+16 *3 потому что в одной линии 3 ряда блоков +16 запас на манёвры, но лучше использовать значение (х) чтоб наверняка докопать или сделать сравнение if durability > x*3+х then
-
На сервере нет лаунчера, или я чего-то не понимаю?
serafim ответил в вопрос kirill0743 в Задать вопрос
сервер на стадии теста, играть не получится и да, странно но ланчер не доступен -
Проверил все правки, залил обнову, ссылка таже Теперь алгоритм копания и движение немного эффективней работает Бур в режиме 3х3 баги не вызывает, но движение робота под этот режим копания не заточен, робот будет делать лишние повороты
-
вроде всё отладил, завтра протестирую, если всё норм выложу меня беспокоит ещё один момент, можно ещё немного ускорить копание убрав постоянную проверку инструмента 404 tool() в гео-копалке @Doob использован интересный метод, работающий на тёмной магии надо бы поколдовать на досуге
-
обнаружение только снизу, и только на стартовых координатах, и вообще нечего под роботом лазать. в любом случае пока это самый безболезненный вариант в принципе можно так то он в случае ошибки последние координаты принтит
-
ох уж этот синий бур но да, алгоритм копки именно под него ускорит скорость в разы, поидеи даже быстрее вайры будет копать робот тягает один запасной инструмент если он есть, так что не страшно
-
я думаю можно поступить проще, если условие if r.detectDown() and not r.swingDown() then срабатывает, проверяем его три раза, и тогда окончательно делаем вывод что это бедрок. в случае бура 3х3 оно выполнится только один раз, если внизу бедрок, то все три.
-
кстати да, в основном карьер заполнен блоками для копания видимо нет смысла проверять наличие блока а вот двигаясь к сундуку и обратно, робот идёт по пустоте, предпочтительней будет именно двигаться Меня так-то и вариант с невозможностью сломать блок под роботом вполне устраивал В общем посмотрим
-
На данный момент определение бедрока сводится к одному условию if r.detectDown() and not r.swingDown() then status("низ достигнут !") bedrock = true end Если робот видит под собой блок, но не может его сломать, то это бедрок Вообще работает безотказно на всём инструменте. как оказалось не на всём Бур в режиме 3х3 не возвращает информацию, сломал он блок или нет в итоге беда, робот считает что он уже возле бедрока, и это последний слой который нужно выкопать Тут можно попробовать иной подход, после взмаха смотреть изменился ли инвентарь, хотя бы просто ловить событие "inventory_changed" В общем можно попробовать
-
бур в режиме 3х3 ? Вот, это уже лучше, развернулся потому что последний раз при копании карьера смотрел в сторону сундука А вот сломать сундук он не должен был, возможно остаточная команда Ок, так будет проще найти косяк Или как вариант перед спуском разворачивается в сторону карьера, в общем навигация на доработку, помойму это уже в 4й раз
-
подобная конструкция используется ещё с computercraft с черепашек это из серии работает, не лезь но это не значит что не нужно искать более оптимальный вариант 1 если робот не может идти вперёд ( значит что-то ему мешает (блок,моб,игрок) ) - атакуй 2 если робот не может атаковать или разрушить блок (значит перед роботом пусто) - идём вперёд В первом случае робот будет максимально быстро идти, пока во что-то не упрётся, затем атакует и пойдёт дальше Во втором случае робот будет махать киркой а затем идти, не важно есть там что-то или нет Возможно верным решением будет смотреть если перед роботом что-то, а затем пробывать идти чтото типа этого, а ещё лучше вывести функцию while true do if r.detect() then r.swing() elseif r.forward() then xPos = xPos - 1 break end end
-
С рельсами пока не понятно для теста извоял прогу робот спокойно ломает рельсы, попробую поискать шахту Бур в режиме 3х3 действительно вызывает баг, из за того что робот видит блок под собой, а его уже нет исправлю изменив обнаружение бедрока По всей видимости нет улучшения парения без него он не сможет двигается над пустотой пожалуй добавлю в статус вместо "непреодолимое препятствие" что-то типа "не могу подняться" а ещё лучше каким то образом проверять наличие улучшения тут посложнее, бум искать
-
рельсы кстати в отладки не участвовали, возможно с ними есть подвох тут явно подвох с определением бедрока а вот этого он делать не должен, похоже функция goto() шалит @van2614 спосиб за инфу, попробую отловить баги
-
На просторах github можно найти полную копию MineOS с приложениями, правда им 300 лет, но инфо панель там работает Ссылку на репозиторий выкладывать не буду(если только очень надо) поскольку там всё давно устарело. Сделал Fork (воскресить приложение для MineOS обращайтесь к @ECS) отвязал от MineOS(по другому никак), также тут нет двойной буферизации, выпилил кучу посторонних библиотек, оставив прежний функционал Чтобы скачать нужна интернет карта установка pastebin run 9fYvnz1L download В папке Pages будут страницы для настройки в виде текстовых документов запускать набрав info добавлен пример отрисовки случайно-сгенерированной картинки test_image создавать картинки с помощью этой проги https://github.com/IgorTimofeev/OCIFImageConverter/releases/tag/1.0.0 Чтобы добавить картинку, в папке Pages, в текстовых страницах пишем <image>1.pic</image> Тег <image>Путь к картинке</image> Также в текст добавляем пустые строки, столько, сколько занимает картинка, например 1.pic занимает 10 строк или получим пропуски отрисовки заполненные текстом
