Minecraft opencomputers как писать программу для робота
Эта простая программа для робота с топором предназначена для сбора древесины.
Робот дежурит возле дерева, срубая его, когда оно вырастает и высаживая новое.
Содержание
Minecraft Wiki
Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.
Работа с внутренними цистернами [ ]
Возвращает число внутренних цистерн робота.
Выбирает одну из цистерн активной.
Возвращает уровень жидкости в заданной (а если параметр не указан — в активной) цистерне.
Возвращает объем свободного пространства в заданной (а если параметр не указан — в активной) цистерне.
Сравнивает жидкости в активной и указанной параметром цистернах.
- robot.transferFluidTo(tank:number[, count:number]):boolean
Перемещает указанное количество жидкости из активной цистерны в заданную. Если количество не указано — перемещает 1000 mB (1 ведро).
Сравнивает жидкость в активной цистерне с жидкостью перед роботом (или в хранилище перед роботом).
Аналогично compareFluid() , но сравнивает с жидкостью над роботом.
Аналогично compareFluid() , но сравнивает с жидкостью под роботом.
Закачивает жидкость из блока перед роботом в активную внутреннюю цистерну. Если объем не указан, закачивает 1000 mB (1 ведро).
Аналогично drain() , но закачивает жидкость над роботом.
Аналогично drain() , но закачивает жидкость под роботом.
Выкачивает жидкость из активного внутреннего хранилища в блок перед роботом. Если объем не указан, выкачивает 1000 mB (1 ведро).
OpenComputers/Робот
Роботы, в отличие от стационарных компьютеров, имеют возможность перемещаться по миру и взаимодействовать с ним. В то же время, они не могут взаимодействовать с внешними компонентами.
Если вам необходимо установить связь с компьютером, или другим роботом, используйте беспроводную сетевую плату, или создайте низкоуровневый протокол для связи через сеть красного камня, при помощи красной платы.
При работе, робот расходует энергию своего аккумулятора. Любое действие тратит определённое количество энергии. Точные значения энергопотребления установлены в разделе opencomputers.power.cost файла конфигурации.
Существует два способа восполнения заряда аккумуляторов: при помощи зарядного устройства или апгрейдов: солнечной панели и генератора.
Общие функции [ ]
Получает текущий уровень робота. Дробная часть обозначает текущий прогресс до следующего уровня. Например, если это число 1.5 , робот имеет уровень 1, и на 50% достиг второго уровня.
Внимание: начиная с версии 1.3 функция устарела. Используйте component.experience.level() , поскольку робот получает очки опыта, только при наличии апгрейда на опыт.
Получает название робота.
Движение робота [ ]
Правила передвижения робота
В версии OpenComputers 1.5.0, правила согласно которым робот движется в воздухе, были изменены. Теперь они выглядят так:
Параметр <flightHeight> задается в конфигурации мода, и по умолчанию равен 8 блокам.
Для того, чтобы робот мог подниматься выше этого предела, установите в него апгрейд высоты полета.
Использование [ ]
Клик правой кнопки мыши откроет интерфейс робота. Здесь располагается дисплей робота (если он был добавлен при сборке), индикатор топлива, его инвентарь (активный слот отмечен зелёным прямоугольником) и слоты для инструмента, дискеты и апгрейдов.
Программы для робота удобнее писать на компьютере, затем переносить в робота на дискете. Сам робот может обладать только небольшим экраном первого уровня, что делает написание кода несколько неудобным.
Работа с инвентарем [ ]
Если робот имеет инструмент, функция возвращает состояние этого инструмента. Возможные значение: 0 - сломан, 1 - цел.
Если робот не имеет инструмента, или инструмент не может быть сломан, функция возвратит nil и соответствующую строку: no tool equipped или tool cannot be damaged .
Возвращает внутренний размер инвентаря.
Делает активным слот инвентаря с заданным индексом. Индекс — число в интервале от 1 до N, где N — число слотов (зависит от количества апгрейдов на инвентарь). Нумерация начинается в левом верхнем углу, и идет слева направо и сверху вниз. Таким образом левый верхний слот имеет номер 1, верхний правый — 4, левый нижний — 13, правый нижний — 16. Создает ошибку, если введен неверный индекс. Возвращаемое значение — номер выбранного слота. Функция может использоваться без аргументов, для получения номера активного слота.
Возвращает количество предметов в заданном слоте. Если номер слота не задан, возвращает количество предметов в активном слоте.
Возвращает количество предметов которое может еще поместиться в заданный слот. Это число зависит от типа предметов, которые уже находятся в слоте. (К примеру, ведра складываются в стеки только по 16. Если в слоте уже есть два ведра, функция вернет число 14.) Если слот не задан, функция работает с активным слотом.
Сравнивает предметы в заданном и активном слотах. Если предметы одинаковы (количество предметов в слотах не имеет значение) — возвращает true . Иначе — false .
- robot.transferTo(slot: number[, count: number]): boolean
Перемещает предметы из активного слота в заданный. Если определен параметр count , функция перемещает заданное количество предметов. Возвращает true , если был перемещен хотя бы один предмет, и false — если ни одного.
Обратите внимание, что если целевой слот не пуст, а число предметов для перемещения не задано, больше или равно числу предметов в активном слоте, результатом будет обмен слотов содержимым.
Сравнивает предмет в заданном слоте и блок перед роботом. Если блок эквивалентен предмету в слоте — возвращает true . Иначе — false .
Выбрасывает предмет из активного слота. count может определять число предметов. Если перед роботом находится блок с инвентарем, например сундук, робот попытается положить предметы в него. Если инвентаря перед роботом нет, предметы будут просто выброшены наружу. Возвращает true , если один или больше предмет был выброшен. Иначе — false . Если инвентарь (сундук) полон, функция вернет false и предметы выброшены не будут.
Аналогично robot.drop() , но работает с блоком над роботом.
Аналогично robot.drop() , но работает с блоком под роботом.
- robot.place([side: number[, sneaky: boolean]]): boolean
Помещает блок из активного слота перед роботом. Возвращает true в случае успеха, иначе — false . Параметр side определяет сторону на которую будет помещен блок. Если параметр опущен, робот попробует все поверхности. Это позволяет точнее ставить блоки, которые имеют ориентацию. (Например — факел. Значение 5 или sides.left позволит разместить факел на стене слева.) Параметр sneaky определяет "присел" (для игрока — клавиша ⇧ Shift ) ли робот когда ставил блок. Это необходимо для некоторых модов.
Важно: по умолчанию, робот не может ставить блок в воздухе без опоры (как и игрок). В пространстве перед роботом должна быть хотя бы одна "стенка". Если вы хотите, чтобы роботы могли ставить блоки в воздухе (как черепашки из ComputerCraft) установите роботу апгрейд-"ангел".
- robot.placeUp([side: number[, sneaky: boolean]]): boolean
Аналогично robot.place() , но работает с блоком над роботом.
- robot.placeDown([side: number[, sneaky: boolean]]): boolean
Аналогич но robot.place() , но работает с блоком под роботом.
Захватывает максимум один стек предметов в активный слот, или первый свободный слот после активного. Возвращает true если захватил один или больше предметов, иначе — false . Если перед роботом находится блок с инвентарем (например — сундук), робот попытается забрать предметы из него. Параметр count определяет, сколько именно предметов будет захвачено. Функция также работает с вагонетками с инвентарем.
Если перед роботом нет инвентаря, он попытается подобрать предмет "с земли". В этом случае параметр count будет проигнорирован.
Аналогично robot.suck() , но работает с блоком над роботом.
Аналогично robot.suck() , но работает с блоком под роботом.
Minecraft Wiki
Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.
Крафт [ ]
До версии 1.3 [ ]
Разбор
Программа состоит из двух функций, которые вызываются из главного цикла.
Функция jack() срубает дерево и высаживает новое на его место.
Функция unload() производит выгрузку инвентаря (кроме 1-ого слота) в стоящий позади робота сундук.
Эксплуатация
Поставьте заряженного робота на землю в удобном месте. Посадите перед ним саженец дерева, а позади поставьте сундук и запустите программу. Вы можете также положить несколько саженцев в 1-ый (левый-верхний) слот робота.
Сразу после запуска, и далее раз в 30 секунд, робот будет проверять не выросло ли дерево. Если оно вырастет, робот срубит его начиная с вершины (если стоит модификация TreeCapitator или аналогичная, то рубка начиная снизу будет неэффективна из-за большого разброса блоков дерева). После того, как робот накопит стек в 64 блока дерева во втором слоте, он выгрузит содержимое инвентаря в сундук, за исключением 1-ого слота, в котором он хранит саженцы.
Будет неплохо установить на робота апгрейд-солнечную панель. Тогда робот сможет самостоятельно пополнять свой запас энергии — ведь он круглосуточно находится под открытым небом.
Установка операционной системы [ ]
Для того чтобы работать с программами, робот должен обладать операционной системой. Вы можете внести дискету с операционной системой в конструкцию робота при сборке, либо снабдить его жёстким диском и после сборки установить на него систему вручную. Для этого в конструкции робота должен быть дисковод.
Если вы выбрали второй способ, сделайте следующее. Вставьте в дисковод робота дискету с OpenOS и включите его. После того, как робот загрузится, введите в командную строку install .
Программа выведет нумерованный список жёстких дисков и предложит выбрать один из них для установки системы. Если вы не дали жёсткому диску отдельного названия (см. Туториал: Работаем с дисками) он будет отображен в списке своим адресом.
Введите номер того диска, на который планируете установить операционную систему.
Программа-установщик скопирует необходимые файлы с дискеты (скорость установки системы зависит от мощности собранного вами робота). После этого вам будет предложено перезагрузить систему. Введите y (подтверждение). Теперь вы можете вынуть дискету из дисковода.
После установки системы, на жёстком диске появится ряд папок и файл init.lua , который отвечает за загрузку операционной системы при запуске робота.
OpenComputers/Robot API
Этот программный интерфейс доступен только тогда, когда исполняющий компьютер является роботом.
Minecraft Wiki
Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.
Исходный код
Содержание
Создание робота [ ]
Интерфейс сборщика роботов.
Для настройки и создания нового робота используется Сборщик роботов. Он позволяет подобрать комплектующие в соответствии с будущей задачей робота.
При создании вы можете использовать любые компьютерные комплектующие и апгрейды. Кроме того на робота можно установить до трех контейнеров для сменных плат или апгрейдов.
Если вы собираетесь установить на робота какие-либо программы, не забудьте добавить в конструкцию жёсткий диск. Вы можете установить операционную систему на него, или добавить в конструкцию дискету с операционной системой. В таком случае, робот будет обладать дополнительной файловой системой, с которой будет загружаться.
OpenComputers/Туториал: Пишем программу
Итак, вы построили свой первый компьютер. Что же дальше? Начнем с создания старого доброго "Hello World!"!
Внимание: Если вы загрузили операционную систему с дискеты (вставленной в дисковод, или встроенной в конструкцию робота), вам потребуется сначала перейти в каталог, открытый для редактирования файлов (например, на ваш жесткий диск. См. Туториал: Работаем с дисками).
Как показано на скриншоте, наберите edit <filename> , где filename — название вашей программы. Расширение .lua не обязательно, но удобно, когда редактируешь программу внешним редактором.
В открывшемся окне редактора, наберите следующий код: print("Hello World!")
Затем нажмите Сtrl + S чтобы сохранить программу, и Сtrl + W чтобы закрыть редактор. В списке файлов текущего каталога теперь есть ваша программа. Введите ее название в командную строку.
Обратите внимание, что расширение .lua писать не обязательно. Шелл автоматически ищет файл с таким расширением, если не находит файла без него.
Работа с блоками [ ]
Проверяет, есть ли что-нибудь перед роботом. Возвращает true если что-то может препятствовать движению робота, false в противном случае. Второе возвращаемое значение определяет что именно находится перед роботом. Это может быть entity , solid , replaceable , liquid или air . Первые два могут блокировать робота, остальные — нет. В случае entity это может быть как животным или мобом, так и игроком или вагонеткой.
Примечание: для того чтобы получить более подробную информацию (ID, метаданные) о блоке, вы можете использовать функцию analyze() геосканера.
Аналогично robot.detect() , только проверяет блок над роботом.
Аналогично robot.detect() , только проверяет блок под роботом.
Производит "левый щелчок мыши" роботом, используя при этом экипированный инструмент. Результат зависит от инструмента и того, какой блок располагается перед роботом. Возвращает true и дескриптор, если был обработан какой-то блок, либо false и возможную причину в случае неудачи.
Параметр side определяет сторону подвергаемую обработке. Если параметр опущен, робот перебирает все возможные стороны. Это позволяет контролировать направление "щелчка мыши" если необходимо.
Возвращаемая строка может быть одной из следующих:
- entity — если робот атаковал живое существо
- block — если робот сломал блок
- fire — если робот потушил огонь
- air — если перед роботом ничего не было
- robot.swingUp([side: number]): boolean[, string]
Аналогично robot.swing() , но работает с блоком над роботом.
Аналогично robot.swing() , но работает с блоком под роботом.
Делает "правый щелчок мыши" роботом, используя экипированный инструмент. Результат зависит от инструмента и блока перед роботом. Возвращает true в случае успеха, либо false в случае неудачи.
Параметр side определяет сторону, куда направлено действие. Если параметр опущен, робот попробует воздействовать на все стороны. Это позволяет точнее контролировать действие, если необходимо. К примеру — сторону в которую полетит стрела, если использовать лук.
Параметр sneaky определяет "присел" ли робот (для игрока — клавиша ⇧ Shift ), совершая действие. Это необходимо, к примеру, если робот пытается разместить блок на устройстве, которое по "правому щелчку" открывает свой интерфейс.
Параметр duration определяет продолжительность использования инструмента в секундах. К примеру, продолжительность натягивания лука. Учтите, что этот параметр вызывает соответствующую паузу в выполнении программы робота.
Возвращаемое значение может быть:
Читайте также: