Перейти к содержанию
Авторизация  
FellHead

Ферма Oreberry bush, ферма растений HarvestCraft (+крафт воды)

Рекомендуемые сообщения

Вторая в жизни сделанная мной (ну почти) прога  B-)

Руководствовался гайдом по автоферме из вики 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 сервер)

Робота размещаете так:

56122649.f.500.500.0.jpg?1428509858

 

Чтобы поставить куст в воздухе, сначала надо разместить под ним блок: поставить на блок и убрать блок). Для роста самородков уровень освещения должен быть <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 сервер)

56041414.f.500.500.0.jpg?1428081725

Аналогия с прошлой программой, изменены только действия (на скрине надо блоки поставить справа)

Код

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

 


 

А вот и первая прога  :lol: : сбор и крафт бочек воды из мода Pam's HarvestCraft

Честно говоря, мне жуть как надоело крафтить их вручную. Код писал чистых 2 часа)

56044997.f.500.500.0.jpg?1428097930

Дополнительно понадобится апгрейд управления инвентарем и апгрейд на крафт-стол. Перед стартом программы пустое ведро в руку робота, число 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

Изменено пользователем FellHead

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском. ;)

Во-во, приятная такая фича ОС=)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском. ;)

Мало ли что :->

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С конкретно указанным расстоянием робот стопорился на возврате, до сундука не доходил через раз и не все вещи выкладывал, добавил рабочий код, прошлый оставил в качестве примера

...

Проблема осталась, скорее всего основана на выключении чанка с роботом или перезагрузке сервера. Так вот, есть версия, что если выполнение роботом if ... do прервется, то при загрузке чанка робот начнет следующую команду. Думаю добавить на возврат не расстояние, а еще по паре строк

for ... do

robot.forward()

Тогда при прерывании цикла робот продолжит идти, а не начнет разворачиваться. Проведу тесты

...

Проверил, не то. Проблему решил вставкой действий "идти, пока не упрусь" на возврат. На данный момент робот заканчивает ~20 цикл сбора самородков. Видимо, while ... do циклы выгрузкой чанка не прерываются. Пишу код под чанклоадер

Изменено пользователем FellHead

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Авторизация  

×
×
  • Создать...