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

eu_tomat

Модераторы
  • Публикации

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

  • Посещение

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

    331

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

  1. API компонента Filesystem: https://ocdoc.cil.li/component:filesystem Не особо отличается от API файловой подсистемы OpenOS. Главное отличие, пожалуй, в отсутствии монтирования. И работа с файлами ведётся через дескриптор, а не таблицу файлового потока.
  2. У меня несколько замечаний по этому заказу. Звучит как "идеальная программа". Думаю, экстремальные оптимизации лучше выполнять коллективно. Один программист может либо не знать о нюансах быстродействия в той или иной ситуации, или забыть в момент написания. А тут кроме OC накладываются ещё и нюансы AE. А можно взглянуть на код программы, которую забраковали админы? Может быть, её уже и не написать лучше. Так тоже бывает: ну, будет программа процентов на 10 менее прожорливой, админы её всё равно не разрешат использовать. В этом месте сразу приходит идея: не надо каждый раз перепроверять все 500 вещей в базе, а все крафты выполнять централизованно на основе OC. Тогда OC будет знать о всех крафтах и актуальных остатках предметов. А если игрок вручную работает с МЭ-системой, то пусть по окончании операции нажимает плиту, например. Тогда не потребуется выполнять ежесекундно по 20 запросов и выполнять по 100500 сравнений. Это основа всех оптимизаций: выполнять вычисления только тогда, когда это необходимо. А что не так с метатаблицами кроме неявного вызова функций?
  3. @Belzebub Какая у тебя версия OpenComputers?
  4. Исследовать несвязанные замкнутые полости ощупыванием границ не удастся также и в 3D. На то они и замкнутые и несвязанные. Но автору вопроса это вряд ли требуется, учитывая, что он планировал исследовать комнату непосредственно контактируя с её границами.
  5. Всё на месте. Попробуй загрузить систему с дискеты OpenOS.
  6. Автор вопроса не конкретизировал, что за комнаты требуется сканировать. Поэтому такой алгоритм не всегда применим:
  7. Кстати, в исходных условиях не сказано, как ориентирован робот. Поэтому нужно иметь в виду, что полученный массив на каком-то этапе, возможно, потребуется повернуть, чтобы итоговая карта вписалась в экран. И, возможно, массив потребуется сдвинуть, если робот находится в другой стартовой позиции.
  8. Если говорить коротко, то любая сложная задача решается её дроблением на задачи меньшего размера. Дробить задачи следует до тех пор, пока их решение не станет очевидным. Дело осложняется тем, что каждую из подзадач можно решить разными способами, имеющими свои преимущества и недостатки. На какие основные блоки можно разделить нашу задачу? Обязательно потребуется способ определения текущего положения робота. Эту задачу можно с помощью расширения навигации, либо программным трекингом. В первом случае имеется уже готовый трекинг из коробки, но он ограничен квадратом какого-то размера в зависимости от выбранной карты. Второй способ практически не имеет ограничений, но требует аккуратного программирования. Потребуется выбрать способ определения блока. Геосканер поможет определить плотность блока на расстоянии, и более подробную информацию о блоке при непосредственном контакте. Функция robot.detect() позволит определить наличие блока непосредственно перед роботом, а robot.compare() кроме этого позволяет сравнить блок перед роботом с предметом в его инвентаре. Потребуется алгоритм обхода комнаты. Универсального оптимального алгоритма не существует. В зависимости от возможных конфигураций комнаты будет эффективен тот или иной алгоритм. Например, можно сначала двигаться до ближайшего препятствия, а потом двигаться так, чтобы препятствие всегда оказывалось справа от робота. Такой способ позволит быстро обойти периметр стены, но он плохо применим для комнат в внутренними препятствиями, например, с колоннами. Поэтому может потребоваться сплошной обход комнаты с полным построением карты пространства. Такой обход будет медленнее, и потребует большого количества памяти. Кстати, не факт, что вся карта одновременно поместится в оперативной памяти робота. Тогда потребуется ещё и придумать способ разделения карты на сегменты. Абстрактные задачи решают математики, и найденные ими решения должны работать хотя бы в теории. Программисты же решают практические задачи, которые должны работать в ограниченных условиях. Имея ограниченный объём памяти, робот даже теоретически не сможет построить карту любой абстрактной комнаты.
  9. Я плохо понял смысл задачи и вопроса. Местность можно сканировать с помощью геосканера с минимальными движениями робота. Или цель заключается именно в сканировании местности без геосканера? А робот тоже абстрактный? Потому что конкретные роботы, например, имеют ограниченный объём памяти. Какие функции? Легко: достаточно лишь написать соответствующую программу. Или надо конкретизировать вопрос.
  10. eu_tomat

    Data Component API

    Это можно узнать по количеству символов. Для записи SHA-1 используется 40 шестнадцатеричных цифр, а для SHA-256 — 64 цифры.
  11. eu_tomat

    SticOS

    Поздравляю! Расскажи нам хотя бы, в чём именно заключается придумка.
  12. eu_tomat

    Data Component API

    Предлагаю поступить наоборот: sha256bin = component.data.sha256(text) sha256hex = "" for i=1,#sha256 do sha256hex=sha256hex..("%x"):format(sha256bin:byte(i)) end
  13. eu_tomat

    Data Component API

    Последний скриншот может свидетельствовать о сравнении строки с её шестнадцатеричным представлением. Они и не могут совпадать.
  14. Кстати, да. При копке руды довольно часто встречаются заброшенные шахты с сундуками. Не вываливать же в них всю добытую руду. Наоборот, имеет смысл всё содержимое сундука забрать и унести.
  15. Всё оказалось гораздо лучше. В каких-то версиях ComputerCraft черепашки обзавелись новыми возможностями: turtle.inspect() Returns the ID string and metadata of the block in front of the Turtle Да и вообще, рекомендую ознакомиться с актуальным API черепашек: http://www.computercraft.info/wiki/Turtle_(API) Здесь перечислено всё, на что черепашки способны.
  16. Насколько мне известно, однозначно идентифицировать любой блок способен только геосканер, но он доступен только для роботов OpenComputers. Черепашкам же доступны лишь функции turtle.compare/Up/Down/To, позволяющие сравнить блок с имеющимися образцами в инвентаре черепашки. http://www.computercraft.info/wiki/Turtle.compare
  17. Поступила заявка на плоскую, не выпирающую из пола схему размещения блоков. Предлагаю такой вариант: Точка варпа обозначена красным. Если сместить её ближе к телепорту, датчик движения может не сработать.
  18. turtle.getItemDetail(slot) возвращает информацию о предмете: количество, название, степень износа. https://www.computercraft.info/wiki/Turtle.getItemDetail Но это не сильно поможет. Если инвентарь полностью забит, то черепашка сможет сломать нужный блок, но забрать его не сможет. Поэтому заполненность инвентаря всё равно потребуется контролировать.
  19. Что именно не сработало? Черепашка отказалась выбрать нужный слот?
  20. У меня есть демонстрационный код. Он показал свою работоспособность в плоском мире. В других мирах может забиться инвентарь, и тогда черепашка не сможет забрать мировой якорь. -- В первом слоте надо расположить топливо -- В 15 и 16 слотах два мировых якоря, заряженных жемчугом. -- заправиться топливом turtle.select(1) turtle.refuel() -- установить первый чанклодер turtle.select(15) turtle.digDown() turtle.placeDown() turtle.select(16) for i=1,100 do print( "chunk ", i ) -- Установить чанклодер в следующий чанк for i=1,16 do while not turtle.forward() do turtle.dig() end end turtle.turnLeft() turtle.turnLeft() turtle.digDown() turtle.placeDown() -- Забрать предыдущий чанклодер for i=1,16 do while not turtle.forward() do turtle.dig() end end turtle.turnLeft() turtle.turnLeft() turtle.digDown() -- Вернуться к текущему чанклодеру forward_chunk() end -- По завершении программы забрать чанклодер turtle.select(15) turtle.digDown()
  21. Именно через Lua я и заставляю черепашку установить чанкдодер и загрузить его топливом. Можно. Забираем мировой якорь с помощью turtle.dig(), перемещаемся в нужную позицию, устанавливаем с помощью turtle.place(), и закидываем жемчуг с помощью turtle.drop(). Всё работает как часы. Но есть нюанс. Любой чанклодер не мешает выгрузке чанков при перезагрузке сервера. Поэтому, чтобы черепашки не заблудились, они должны закончить добычу до рестарта сервера. Роботы OpenComputers лишены этого недостатка, они более устойчивы к выгрузкам чанков.
  22. При отсутствии OpenComputers использую мировые якоря из RailCraft.
  23. Можно, если есть другие моды, предоставляющие загрузчики чанков:
  24. Апгреды есть для роботов мода OpenComputers. А черепашки из мода ComputerCraft могут лишь передвигать стационарные загрузчики чанков.
  25. Можно при сборке робота установить в слот третьего уровня. Или в слот контейнера апргдейда третьего уровня.
×
×
  • Создать...