WheatComp
-
Публикации
59 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем WheatComp
-
-
19 часов назад, eu_tomat сказал:А за пределами игры можно воспользоваться всей мощью хостовой операционной системы. Например, для тестирования программ в локальной игре очень удобны символические ссылки.
Не совсем понял эту фразу. Во время игры пользоваться внеигровыми символьными ссылками? Чтобы программа робота обращалась к папке вне корневой папки Майнкрафта? Так мне это и требовалось. И как можно это реализовать?
18 часов назад, eu_tomat сказал:Дюп дисков хотя и является читерским, но тоже позволяет решить задачу внутриигровым способом. Законность дюпа устанавливает администрация конкретного игрового сервера. Можно считать это серой игровой механикой.
Ну раз игровая механика... Скажите, пожалуйста, как дюпать жесткий диск? Я за честную игру, но если припрет, может, когда-нибудь воспользуюсь. Очевидно, просто скопировать папку диска не выйдет, файловый менеджер не допустит.
-
@ECS Пришлось повозиться, но вроде получается ошибки вылавливать от робота с eeprom.
В 18.05.2023 в 21:49, ECS сказал:Непривычно и неочевидно - да, есть такое
Непривычно - не то слово. Может, эта возможность загружать в "маленькое программируемое хранилище для запуска компьютеров", как сказано в описании в игре, большие программы, которые по-хорошему требуют жесткого диска, выполнять программы без слотов памяти - это баг, которое в скором времени пофиксят? И тогда как бы не пришлось опять переписывать все программы.
В 17.05.2023 в 18:10, eu_tomat сказал:Но можно сделать что-то похожее на это.
Вы тоже имели в виду роботы с eeprom? Или, может, UMFAL AtomicScience-а?
-
@ECS Почитал про апи filesystem на сайте мода. Оказалось, filesystem.exists() смотрит в /, а не в директории, откуда запущена программа. Добавил в агрумент название папки - заработало. Но пришлось закомментить проверку на директорию, иначе выводит сообщение, что это папка. Это странно, почему filesystem.exists() смотрит в /, а не в /home, где обычно стартует терминал при включении игрового компа. Некий диссонанс.
Почему-то arg[1] выводит send. Вчера, когда пытался разобраться с аргументами, читал, что в Lua-интерпретаторах обычно args[0] выводит имя файла. Попытался в игре - выводит nil. Видимо, интерпретатор OC отличается от других. Изменил на [2], стал правильно печатать аргумент, содержащий название файла:
elseif not filesystem.exists(args[2]) then print(args[2]) print("Specified file doesn't exist") return
Робота удалось заставить шевелиться, но возникает некоторая путаница с командами. В ОpenOS же вперед - это forward(), а тут move(side). Придется изменить много кода и ошибки, чувствую, неизбежны. К тому же на сайте игры не написано, каковы же остальные "низкоуровневые" команды. Описаны move, turn, swing, а back, up, down не описаны. Я пытался "методом тыка" послать эти неописанные команды роботу, но он выключается. Где можно получить их список? А может, "низкоуровневые" команды для улучшений-компонентов для роботов также отличаются?
5 часов назад, ECS сказал:Однако в случае с роем такое решение контр-продуктивно, т. к. любая ОС потребляет ресурсы и требует крафта более дорогостоящих компонентов - в частности, планок памяти и жёстких дисков.
Согласен. Придется переучиваться на новый способ управления роем. Это, конечно, непривычно, да и роботы придется разбирать-собирать, ну да ладно. Я почему так хотел, да и сейчас был бы непротив общей папки/функции. Раньше изучал основы Java, и там можно было импортировать функцию из файла. А когда разработчики ОС лишают такой возможности, испытываешь нечто вроде фантомной боли.
Командой elseif не пользовался, показалось, главное слово тут - if, а оказалось - else. Понятно.
-
@ECS В дополнение. По-моему, пропущены end-ы после return в скрипте для хоста?:
-- Проверяем, есть ли вообще входные аргумнты if not args[1] then print("Usage: send <path_to_script>") return -- Проверяем, существует ли файл, содержимое которого -- мы будем отсылать по сети elseif not filesystem.exists(args[1]) then print("Specified file doesn't exist") return
-
-
8 часов назад, ECS сказал:5) Запускаем всех роботов и отсылаешь им любой файл с жёсткого диска на исполнение командой send robots/example.lua
@ECS Спасибо! Попытался запустить и так и сяк, не получилось (прикрепил фото). Хостовый файл назвал master.lua, тестовый ресивер - delete.lua Из интерпретатора еще хуже - ругается на send. Пытался послать тестовую программку на поднятие робота:
local ro = require("robot") robot.up()
Кстати про require("robot"). Без него же робот не поднимется, т.к. у него нет OpenOS? С eeprom-ом он как бы микроконтроллер становится? А мне нужно бы, чтобы робот летал и другие функции выполнял. И еще в скрипте-ресивере, заметил, есть компонент "computer":
while true do local data = {computer.pullSignal()}
а в начале файла-ресивера нет запроса библиотеки "computer". Сработает ли скрипт? Если делать как в микроконтроллерах через proxy, то это возможно ли? Я, помнится, безуспешно пытался через прокси запросить "computer" в микроконтроллер.
В целом, если все это заработает, будет отлично для робот-крестьян. Но у меня еще есть 9 роботов на сборке компьютерных компонентов и еще планируются для обработки руды. Вот для них прямо необходима общая папка, поскольку внутри них будут всякие улучшения (верстаки, контроллеры инвентаря и емкости, а они же требуют OpenOS). И для всех них, включая крестьян, было бы очень удобно написать функции, общие для всех. Например, для слежения за уровнем зарядки.
-
@eu_tomat Подскажите, пожалуйста, что можно сделать. Цель моя простая - сделать так, чтобы 20 роботов обращались к одной функции, допустим, SeedWeat, расположенной в одном месте, хоть в пределах каталога OpenComputers, хоть вне пределов. Главное, чтобы в одной папке, в одном файле, чтобы можно было в любой момент редактировать эту функцию по неоходимости. А не вносить изменение (или изменения) во все 20 файлов в отдельных папках жестких дисков роботов. Честно сказать, утомился это делать.
-
Всем привет! Пытаюсь сделать так, чтобы программа использовала функции в модуле из папки вне корневой папки Майнкрафт-а, а из папки, допустим, D:/23 Вот код основной, вызывающей модуль программы:
local printermodule = require("printermodule") printermodule.pr()
Вот модуль:
printermodule = {} function printermodule.pr() print("hello") end return printermodule
В package.lua, что в папке lib папки жесткого диска робота, добавил конце строку "/D:/23/?.lua". Пытался и без слеша "D:/23/?.lua", но в этом случае ищет в "home/D:/23/?.lua":
package.path = "/lib/?.lua;/usr/lib/?.lua;/home/lib/?.lua;./?.lua;/lib/?/init.lua;/usr/lib/?/init.lua;/home/lib/?/init.lua;./?/init.lua;/D:/23/?.lua"
Скрин ошибки прикрепил.


Почему package.lua не видит модуль?
в Общие
Опубликовано: · Изменено пользователем WheatComp
Следующий код (robot.lua) почему-то не работает:
Пытался проверить, будет ли 3-х секундная задержка (computer.pullSignal(3)), нет задержки.
upd: оказалось, pullSignal() относится к api. Есть ли "компонентная" альтернатива?