FellHead 14 Опубликовано: 3 апреля, 2015 (изменено) Вторая в жизни сделанная мной (ну почти) прога Руководствовался гайдом по автоферме из вики http://minecraft-ru.gamepedia.com/OpenComputers/%D0%A2%D1%83%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB:_%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B5%D1%80%D0%BC%D0%B0 Для робота использовал дешевые компоненты, память 2х2Tier (может и меньшая сгодится, не проверял) Меняете, как вам угодно: vper - длина поля (впереди робота); shir - ширина поля; 32 - слоты робота; 3600 - период сбора урожая в секундах. Oreberry farm, ферма кустов из мода Tinkers Construct (MT сервер) Робота размещаете так: Чтобы поставить куст в воздухе, сначала надо разместить под ним блок: поставить на блок и убрать блок). Для роста самородков уровень освещения должен быть <8. На прозрачных блоках мобы не спавнятся. Сундук сзади, зарядник в любом месте, робот перед полем, направлен в правый дальний угол. Советую огородить собираемую территорию стеклом, чтобы робот не вышел за пределы из-за какой-нибудь помехи (а еще на стекле не спавнятся монстры) Прервать программу - Ctrl + Alt + C , на ходу робота прервать вряд ли получится) На передвижение тратится 15 энергии, на повороты 2.5 вроде, остальное по мелочи. По границе перемещений должны стоять блоки, чтобы робот упирался в них и поворачивался. local robot = require("robot") local comp = require("computer") -- vsya dlina polya pered robotom local vper = 10 -- vsya shirina polya local shir = 5 function harvest() -- Vhod na pole robot.forward() -- po shirine for y=1, (shir-1) do -- harvest one line robot.useDown() robot.useUp() robot.suck() robot.suck() for x=1, (vper-1) do robot.forward() robot.useDown() robot.useUp() robot.suck() robot.suck() end -- povorot --esli y nechetnoe to if y%2 == 1 then robot.turnLeft() robot.forward() robot.turnLeft() else robot.turnRight() robot.forward() robot.turnRight() end end -- na posledneij linii for x=1, (vper-1) do robot.forward() robot.useDown() robot.useUp() robot.suck() robot.suck() end -- vozvrat if shir%2 == 1 then robot.turnRight() while robot.detect()==false do robot.forward() end robot.turnRight() while robot.detect()==false do robot.forward() end else robot.turnLeft() while robot.detect()==false do robot.forward() end robot.turnRight() robot.forward() end end function unload() for c = 1, 32 do robot.select© robot.drop() end end robot.turnAround() end while true do harvest() unload() print('sleep') -- one hour sleeping os.sleep(3600) end или http://pastebin.com/H4YeQU63 Plant farm, ферма растений из мода Pam's HarvestCraft (MT сервер) Аналогия с прошлой программой, изменены только действия (на скрине надо блоки поставить справа) Код local robot = require("robot") local comp = require("computer") -- vsya dlina polya pered robotom local vper = 9 -- vsya shirina polya local shir = 9 function harvest() -- Vhod na pole robot.forward() -- po shirine for y=1, (shir-1) do -- harvest one line robot.useDown() robot.suckDown() for x=1, (vper-1) do robot.forward() robot.useDown() robot.suckDown() end -- povorot --esli y nechetnoe to if y%2 == 1 then robot.turnLeft() robot.forward() robot.turnLeft() else robot.turnRight() robot.forward() robot.turnRight() end end -- na posledneij linii for x=1, (vper-1) do robot.forward() robot.useDown() robot.suckDown() end -- vozvrat if shir%2 == 1 then robot.turnRight() while robot.detect()==false do robot.forward() end robot.turnRight() while robot.detect()==false do robot.forward() end else robot.turnLeft() while robot.detect()==false do robot.forward() end robot.turnRight() robot.forward() end end function unload() for c = 1, 32 do robot.select© robot.drop() end end robot.turnAround() end while true do harvest() unload() print('sleep') -- one hour sleeping os.sleep(3600) end или http://pastebin.com/Wi8FtcJV А вот и первая прога : сбор и крафт бочек воды из мода Pam's HarvestCraft Честно говоря, мне жуть как надоело крафтить их вручную. Код писал чистых 2 часа) Дополнительно понадобится апгрейд управления инвентарем и апгрейд на крафт-стол. Перед стартом программы пустое ведро в руку робота, число 100 можно менять на любое - сколько ведер он должен набрать и скрафтить. На крафт из 100 ведер (= 400 бочек) уходит меньше тысячи энергии. local robot = require("robot") local component = require("component") local inv = component.inventory_controller local c = component.crafting for i=1,100 do robot.useDown() inv.equip() robot.select(1) c.craft() robot.drop() robot.select(2) inv.equip() end Изменено 8 апреля, 2015 пользователем FellHead 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 3 апреля, 2015 Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 3 апреля, 2015 Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском. Во-во, приятная такая фича ОС=) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
FellHead Автор темы 14 Опубликовано: 4 апреля, 2015 Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском. Мало ли что :-> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
FellHead Автор темы 14 Опубликовано: 4 апреля, 2015 (изменено) С конкретно указанным расстоянием робот стопорился на возврате, до сундука не доходил через раз и не все вещи выкладывал, добавил рабочий код, прошлый оставил в качестве примера ... Проблема осталась, скорее всего основана на выключении чанка с роботом или перезагрузке сервера. Так вот, есть версия, что если выполнение роботом if ... do прервется, то при загрузке чанка робот начнет следующую команду. Думаю добавить на возврат не расстояние, а еще по паре строк for ... do robot.forward() Тогда при прерывании цикла робот продолжит идти, а не начнет разворачиваться. Проведу тесты ... Проверил, не то. Проблему решил вставкой действий "идти, пока не упрусь" на возврат. На данный момент робот заканчивает ~20 цикл сбора самородков. Видимо, while ... do циклы выгрузкой чанка не прерываются. Пишу код под чанклоадер Изменено 8 апреля, 2015 пользователем FellHead Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах