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

serafim

Пользователи
  • Публикации

    367
  • Зарегистрирован

  • Посещение

  • Победитель дней

    46

Все публикации пользователя serafim

  1. Происходит это при работе карьера, но не всегда. В ранних версиях использовал код такого вида: Робот возвращался к старту, и по событию key_down должен был продолжить копать, но в итоге он приезжал и сразу ехал обратно
  2. не известно, но кнопок никто не нажимает, но событие происходит
  3. Событие "key_down" также временами срабатывает без нажатия кнопок, приходится дополнительно его проверять.
  4. обнова: компоненты которые не были использованы при выставлении схемы, будут перенесены в начало инвентаря для удобного изъятия
  5. serafim

    quarry карьер

    quarry Для тех, кто спешит https://pastebin.com/1m7k9F01 или pastebin get 1m7k9F01 q Основное преимущество этой копалки - минимум телодвижений со стороны игрока. Всё что нужно это поставить робота, дать ему кирку и нажать q По умолчанию робот выкопает карьер 16/16 до бедрока. Можно указать произвольные размеры ширины (x) и длинны (y) не кратной 3 или 2, робот с координат не собьётся например q 31 17 Можно поставить сундук сзади робота, положить туда бур, уголь, робот в таком случае будет приносить руду в этот сундук, брать из него уголь для заправки, складывать разряженный инструмент и брать заряженный. Можно поставить робота на поверхности, а копать он будет глубоко под землей принося руду на поверхность, для этого нужно указать на сколько блоков ему опустится в низ например q 20 16 40 - - 20 (ширина) 16 (длинна) 40 (опустится в низ на 40 блоков) минимальные требования: корпус второго уровня (золотой) + процессор второго уровня улучшение инвентарь (лучше 2 или 3) контроллер инвентаря улучшение парение генератор контейнер для апгрейда, если хотите использовать чанклоадер пример сборки: основной алгоритм: Копает змейкой квадрат проходя три слоя блоков за один подход, пока не выкопает весь объём до бэдрока или не упрётся в не разрушаемый блок, при этом вернётся к старту и сообщит о проблеме, также предложит продолжить копать с последней позиции. Заправляется выкопанным углём из инвентаря и сундука на старте, если энергии не хватает, а уголь в генераторе есть, то возвращается к сундуку и заряжается. При наличии зарядчика на старте, робот ожидает полной зарядки батареи, не смотря на количество угля в генераторе. Сортирует выкопанный лут согласно чёрного списка, мусор выкидывает а инвентарь уплотняет. Умеет работать с электроинструментом, если он разрядился то сначала берёт запасной в инвентаре, а затем в сундуке на стартовой позиции, разряженный складывает в сундук. Если на старте слева от робота стоит зарядчик для электроинструмента, то робот будет его заряжать, включая запасной инструмент Если хотите, вместо обычного сундука можно поставить ender chest и у себя на базе сделать зарядчик для электроинструмента на другом роботе, с помощью этой программы https://pastebin.com/mtKbYn42 или pastebin get mtKbYn42 c список мусора можно настроить под ваши требования на строке 35 требуются только названия блоков, получить их можно тем же роботом с улучшением контроллер инвентаря, и этой программы https://pastebin.com/au9etcfF или pastebin get au9etcfF i Если добавить в робота улучшение опыт то у него будет огромный запас энергии. робот прокаченный на 10 уровней, имеет заряд батареи 70500 против 20500 по умолчанию. робот прокачивается сам когда копает, но если хотите вы сами можете его прокачать, скармливая ему зачарованный лут. прокачать его можно с помощью этой программы https://pastebin.com/ZKFw0Lst или pastebin get ZKFw0Lst e не знаете где взять много зачарованного лута, робот рыболов вам в помощь https://pastebin.com/RPLWqKTZ или pastebin get RPLWqKTZ r краткая статистика с разными инструментами: размер карьера 16/16, высота 70, уровней 22 по 3 слоя блоков, примерно 768 блоков на уровень. испытательный полигон: Программа доработана для нормальной работы на лагающем сервере p.s. отладка велась весьма продолжительное время, все возможные баги были отловлены, но только массовое использование исключит их полностью, так что пишите, не стесняйтесь. скриншоты приветствуются На основе этого карьера было создано несколько модификаций под различные условия Если сундук в привате, то у робота нет прав работать с инвентарём сундука и зарядчика инструмента
  6. может и так, тогда предлагаю отправить данную тему в корзину там можно будет её смотреть, но нельзя редактировать либо добавить на сайт новую ветку лагодромы рядом с корзиной, закрытую от редакции
  7. Начнём пожалуй с самого начала, для оптимизации программы разберём предложенный код поэтапно 1 local sides = require "sides" библиотека sides на 1й строке - этот интерфейс предоставляет таблицу названий, для работы со сторонами блоков в формате: Низ (bottom): 0 , Верх (top): 1 , Тыл (back): 2 , Перед (front): 3 , Право (right): 4 , Лево (left): 5 пример для работы с контроллером красного камня: 1 local component = require("component") 2 local sides = require("sides") 3 local rs = component.redstone 4 rs.setOutput(sides.left,15) здесь использован rs.setOutput(sides.left,15) на 4й строке (включить сигнал с лева, с силой сигнала 15), без библиотеки sides пришлось бы указать сторону в формате rs.setOutput(5,15) Вот только в коде эта библиотека не используется, вызывать её не требуется 3 local component = require "component" библиотека component на 3й строке - этот интерфейс используется для доступа и взаимодействия компьютера с компонентами тот же пример для работы с контроллером красного камня: 1 local component = require("component") 2 local rs = component.redstone для того чтоб взаимодействовать с контроллером красного камня необходимо его назначить компонентом 2 local rs = component.redstone Вот только ни какие взаимодействия с компонентами в коде не происходят, вызывать её не требуется 5 size=robot.inventorySize() глобальная переменная size на 5й строке вызывается один раз при запуске программы и принимает значение последнего слота в инвентаре робота, который при одном улучшении инвентаря равен 16 ячейкам желательно назначать переменные локально 5 local size = robot.inventorySize() чтобы она не вносила изменения в другие программы за пределами данного кода 6 local function Text() 7 os.execute("cls") 8 print("РОБОТ РАБОТАЕТ!! Создатель - GooodGame") 9 print("Доработал-atomzerg") 10 end 12 Text() функция Text() вызывается только один раз на строке 12, её можно упростить 7 os.execute("cls") 8 print("РОБОТ РАБОТАЕТ!! Создатель - GooodGame") 9 print("Доработал-atomzerg") также вопрос а требуется ли она вообще, достаточно указать что за программа сейчас работает print("работает установщик блоков") теперь касательно основного тела программы: 16 robot.select(active_slot) 17 if robot.count(active_slot) == 0 then 18 active_slot = active_slot + 1 end 19 if robot.select(active_slot) ==size then 20 active_slot = 1 end 21 if robot.place() == false then active_slot = active_slot + 1 end 22 if active_slot == size then active_slot = 1 end 23 robot.place() текущий алгоритм работы: строка 16 выбирается активный слот инвентаря робота из переменной active_slot , при первом запуске она равна 1 строка 17 проверяется значение слота (в данном случае 1) и если он пустой то строка 18 к глобальной переменной active_slot плюсуется 1 строка 19 если выбран последний слот инвентаря робота то строка 20 переменная active_slot меняет значение на 1 строка 21 если робот не смог поставить блок то к активному слоту плюсуется 1 строка 22 если переменная active_slot равна последнему слоту робота то переменная active_slot меняет значение на 1 строка 23 робот ставит блок без проверок успешно или нет Вывод: в текущем алгоритме творится каша использован не оптимальный метод выбора заполненного слота назначая переменную active_slot если робот не может поставить блок то назначается следующий слот инвентаря независимо от того если там руда или нет, причиной не возможности поставить блок может быть из за того что блок ещё не сломали, или другой робот установщик поставил его раньше, в итоге будет постоянно перебирается инвентарь тратя время в пустую отдельно хотелось бы обратить внимание на форматирование кода, читать его затруднительно общепринято использовать для lua два пробела, да это не обязательно но сильно улучшает восприятия написанного кода второе - это как написаны логические элементы, тут не выделены начало и конец а также выполняемые условия каждое условие проверяется отдельно, хотя логичное было бы остановится на том которое соответствует требованию вот так должен был выглядеть код при соблюдении общепринятых норм while true do robot.select(active_slot) if robot.count(active_slot) == 0 then active_slot = active_slot + 1 elseif robot.select(active_slot) == size then active_slot = 1 elseif robot.place() == false then active_slot = active_slot + 1 elseif active_slot == size then active_slot = 1 end robot.place() end Использовать кучу условий и метод счётчика для выбора заполненного слота в инвентаре робота не эффективно правильнее применить цикл перебора инвентаря пропуская пустые слоты и при нахождении полного слота выбрать его, остановив дальнейший перебор for slot = 1, inv do if r.count(slot) > 0 then r.select(slot) break end end вместо кучи условий с переменной active_slot можно использовать только одно условие, (если выбранный слот пуст) if r.count() == 0 then также если инвентарь робота пустой, то не логично перебирать его до посинения, правильнее остановить поиск, пока в инвентаре не появится новые блоки, и при добавлении новых блоков, сразу его выбрать if slot == inv then local e, slot = event.pull("inventory_changed") r.select(slot) end проверять поставил ли робот блок нет необходимости if robot.place() == false then особенно если использованы несколько установщиков блоков, программа будет простаивать r.place() Собственно готовый код занимает всего 21 строку, осталось его только собрать до кучи Но я этого делать не буду, и вот почему: Эта программа при лагающем сервере вызывает рассинхрон при быстрой смене блока, устанавливая и разрушая его сервер выдаёт финты типа моментального разрушения или дюпа Подобные действия не способствуют популезации мода OpenComputers Рекомендую проголосовать за удалении этой темы как потенциально нежелательной
  8. это тайна покрытая мраком, а вообще надежда на рассинхрон вычислений сервера с клиентом позволяющий моментально сносить блоки Твой, но увы тут ПО писать особо не о чем
  9. Идея в том чтоб не заморачиваться с ПО, роботы сами будут ставить или рубить руду в зависимости от того кто раньше успеет Такой способ тоже хорош и экономный в плане инструмента и зарядчика Тут прироста увы нет, в основном влияет только время установки блока
  10. ссылка на первой странице https://computercraft.ru/topic/1016-lyogkaya-biblioteka-gui/?do=findComment&comment=13883 http://pastebin get iKzRve2g lib/forms.lua
  11. Синхронизировать двух роботов на одну задачу оказалось не так просто как думалось, перепробовал пол сотни вариантов пока получилось хоть что-то не сильно лагучее Два робота совместно ставят и рубят один и тот же блок получая ускорение вид сзади собственно ссылка на это недоразумене https://pastebin.com/FvGE1qYa При использовании бура или инструмента который можно зарядить, то зарядники ставить обязательно, так как из за ограничений привата пришлось выпилить проверку с помощью контроллера инвентаря на то что зарядник присутствует, в итоге робот бур просто выкинет. Руду закидывать в сундук над роботом, лут получим снизу как только робот переработает пачку руды Можно использовать от одного до четырёх роботов по кругу (насчёт насколько это будет быстрей, х.з.) Рекомендую использовать двух роботов
  12. обнова: избавился от рекурсии, удалил дублированные проверки
  13. форматирование немного съезжает, поправил по 2 пробела а так вроде норм
  14. Использование робота для установки схемы в реактор: Поставьте робота лицом к реактору IC2 типа "звёздочка" (реактор в центре + 6 реакторных камер вокруг) Положите в инвентарь роботу компоненты реактора предполагаемой схемы: Список что требуется и чего не хватает будет указан на экране робота Введите имя программы и укажите схему из предложенных на экране (360,420,1056,1308 eu/t) также можно запустить программу передав атрибуты, например r 1308 версия для IC2 1.7.10 https://pastebin.com/xWhYcrgM или pastebin get xWhYcrgM r версия для IC2 1.12.2 https://pastebin.com/LYDve4ai или pastebin get LYDve4ai r Во время выполнения программы разрешено произвольно добавлять и убирать компоненты в инвентаре робота Во время выполнения программы запрещено заменять компоненты в инвентаре робота, а также самому добавлять их в реактор
  15. serafim

    [OC] [Tutorial] Туториал по наноботам!

    загляни в этот пост
  16. serafim

    [OC] [Tutorial] Туториал по наноботам!

    если речь о нанитах, то тоже самые что и для планшета в комп нужно добавить wi-fi карту, но учти расстояние от компа до тебя только 1 блок пару прог в нагрузку сканер эффектов нанитов https://pastebin.com/HqategkE управление нанитами https://pastebin.com/exnN5se5
  17. обнова https://pastebin.com/xWhYcrgM добавил динамический список недостающих компонентов в инвентаре робота перевёл прогу на gpu так как в консоли творилась каша выход из проги кнопкой ctrl
  18. обновил, теперь выводит список необходимых компонентов для выбранной схемы
  19. мене тоже смущает этот вопрос, очень часто робот в привате имеет ограничения и robot.drop() предпочтительней такой способ действительно более удобный, но может не работать под защитой привата
  20. изваял обработчик событий событие inventory_changed возвращает только 2 параметра 1: inventory_changed -- событие изменения инвентаря 2: 7 -- номер слота обновил прогу на ... local e, slot = event.pull("inventory_changed") if slot and r.count(slot) > 0 then ... теперь событие inventory_changed отрабатывает адекватно
  21. частично обновил по рекомендации, теперь реактор заполняет за 32 секунды
×
×
  • Создать...