Advertisement
1lann

farmer

Apr 15th, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.31 KB | None | 0 0
  1. local rows = {9, 9, 8, 8, 7, 6, 5}
  2. local types = {15, 15, 15, 16, 16, 16, 16}
  3. local travelDist = 10
  4. local harvestTime = 1800
  5. local skipFirstFarm = true
  6. local home = {x = -208, y = 64, z = 196}
  7.  
  8. farmerStatus = "Standby"
  9. farmerNextHarvest = 0
  10.  
  11. local function main()
  12.     while not gps.locate() do
  13.         farmerStatus = "Error: No GPS signal"
  14.         print("Error: No GPS signal")
  15.         sleep(30)
  16.     end
  17.     local function goHomeByGPS(turned)
  18.         farmerStatus = "Going home..."
  19.         local function travel(dist, positive)
  20.             if ((math.abs(dist) == dist) and positive) or ((math.abs(dist) ~= dist) and not positive) then
  21.             else
  22.                 turtle.turnLeft()
  23.                 turtle.turnLeft()
  24.                 turtle.forward()
  25.                 turtle.forward()
  26.             end
  27.             for i = 1, math.abs(dist)-1 do
  28.                 if not turtle.forward() then
  29.                     if turned then
  30.                         if diffY ~= 0 then
  31.                             print("Maybe if I go up/down...")
  32.                             if math.abs(diffY) == diffY then
  33.                                 for i = 1, diffY do
  34.                                     turtle.up()
  35.                                 end
  36.                             else
  37.                                 for i = 1, math.abs(diffY) do
  38.                                     turtle.down()
  39.                                 end
  40.                             end
  41.                             local ret = goHomeByGPS(true)
  42.                             return ret
  43.                         else
  44.                             return false
  45.                         end
  46.                     end
  47.                     turtle.turnLeft()
  48.                     local ret = goHomeByGPS(true)
  49.                     return ret
  50.                 end
  51.             end
  52.             turtle.turnLeft()
  53.             return goHomeByGPS()
  54.         end
  55.         sleep(0.1)
  56.         local initX, initY, initZ = gps.locate()
  57.         print("I am currently at: "..initX..", "..initY..", "..initZ)
  58.         local diffX = (initX - home.x)*-1
  59.         local diffY = (initY - home.y)*-1
  60.         local diffZ = (initZ - home.z)*-1
  61.         print("I'm X:"..diffX.." and Z:"..diffZ.." away from home!")
  62.         if (diffX == 0) and (diffZ == 0) then
  63.             if math.abs(diffY) == diffY then
  64.                 for i = 1, diffY do
  65.                     turtle.up()
  66.                 end
  67.             else
  68.                 for i = 1, math.abs(diffY) do
  69.                     turtle.down()
  70.                 end
  71.             end
  72.             local initX, initY, initZ = gps.locate()
  73.             print("I am now at: "..initX..", "..initY..", "..initZ)
  74.             if home.x == initX and home.y == initY and home.z == initZ then
  75.                 for i = 1, 4 do
  76.                     turtle.forward()
  77.                     local x = gps.locate()
  78.                     turtle.back()
  79.                     if x > home.x then
  80.                         print("Alright, I'm home! Awesome!")
  81.                         return true
  82.                     end
  83.                     turtle.turnLeft()
  84.                 end
  85.                 return false
  86.             else
  87.                 print("Ah crap, I miscalculated :/")
  88.                 print("Well, I'm screwed")
  89.                 return false
  90.             end
  91.         elseif turtle.forward() then
  92.             secondX, _, secondZ = gps.locate()
  93.             if secondX > initX then
  94.                 if diffX == 0 then
  95.                     turtle.back()
  96.                     turtle.turnLeft()
  97.                     local ret = goHomeByGPS()
  98.                 else
  99.                     return travel(diffX, true)
  100.                 end
  101.             elseif secondX < initX then
  102.                 if diffX == 0 then
  103.                     turtle.back()
  104.                     turtle.turnLeft()
  105.                     local ret = goHomeByGPS()
  106.                 else
  107.                     return travel(diffX, false)
  108.                 end
  109.             elseif secondZ > initZ then
  110.                 if diffZ == 0 then
  111.                     turtle.back()
  112.                     turtle.turnLeft()
  113.                     local ret = goHomeByGPS()
  114.                 else
  115.                     return travel(diffZ, true)
  116.                 end
  117.             elseif secondZ < initZ then
  118.                 if diffZ == 0 then
  119.                     turtle.back()
  120.                     turtle.turnLeft()
  121.                     local ret = goHomeByGPS()
  122.                 else
  123.                     return travel(diffZ, false)
  124.                 end
  125.             end
  126.         elseif turtle.back() then
  127.             turtle.forward()
  128.             turtle.turnLeft()
  129.             turtle.turnLeft()
  130.             local ret = goHomeByGPS()
  131.             return ret
  132.         elseif turned then
  133.             print("Crap, I'm stuck!")
  134.             print("D: Turtle is sad")
  135.             if diffY ~= 0 then
  136.                 print("Maybe if I go up/down...")
  137.                 if math.abs(diffY) == diffY then
  138.                     for i = 1, diffY do
  139.                         turtle.up()
  140.                     end
  141.                 else
  142.                     for i = 1, math.abs(diffY) do
  143.                         turtle.down()
  144.                     end
  145.                 end
  146.                 local ret = goHomeByGPS(true)
  147.                 return ret
  148.             else
  149.                 return false
  150.             end
  151.         elseif turtle.getFuelLevel() < 1 then
  152.             print("Crap, out of fuel!")
  153.             return false
  154.         else
  155.             turtle.turnLeft()
  156.             local ret = goHomeByGPS(true)
  157.             return ret
  158.         end
  159.     end
  160.  
  161. --[[
  162.     local storage = {}
  163.     local storageData = {}
  164.     storage.save = function()
  165.             for i = 1, 16 do
  166.                     storageData[i] = turtle.getItemCount(i)
  167.             end
  168.     end
  169.  
  170.     storage.getSlotDiff = function()
  171.             local diff = {}
  172.             for i = 1, 16 do
  173.                     if storageData[i] ~= turtle.getItemCount(i) then
  174.                             table.insert(diff,i)
  175.                     end
  176.             end
  177.             return diff
  178.     end
  179. ]]--
  180.  
  181.     local enoughFuel = function()
  182.             local total = travelDist
  183.             for _, row in pairs(rows) do
  184.                     total = total+row
  185.             end
  186.             total = total*1.2
  187.             return turtle.getFuelLevel() > total
  188.     end
  189.  
  190.     local function farm()
  191.         local direction = "down"
  192.  
  193.         for rowNumber, rowLength in pairs(rows) do
  194.             for block = 1, rowLength do
  195.                 turtle.select(1)
  196.                 turtle.digDown()
  197.                 for slot = 1, 4 do
  198.                     turtle.select(slot)
  199.                     if turtle.compareTo(types[rowNumber]) then
  200.                         turtle.placeDown()
  201.                     end
  202.                 end
  203.                 if block ~= rowLength then
  204.                     if not turtle.forward() then
  205.                         print("There is an obstruction in the way!")
  206.                         print("Bailing: Returning to base")
  207.                         local ret = goHomeByGPS()
  208.                         return false, ret
  209.                     end
  210.                 end
  211.             end
  212.             if rowNumber == #rows then
  213.                 local ret = goHomeByGPS()
  214.                 return true, ret
  215.             elseif direction == "down" then
  216.                 turtle.turnRight()
  217.                 turtle.turnRight()
  218.                 if rowNumber == #rows then
  219.                         break
  220.                 end
  221.                 for i = 1, rows[rowNumber]-rows[rowNumber+1] do
  222.                         turtle.forward()
  223.                 end
  224.                 turtle.turnLeft()
  225.                 turtle.forward()
  226.                 turtle.turnRight()
  227.                 direction = "up"
  228.             elseif direction == "up" then
  229.                 turtle.turnLeft()
  230.                 turtle.forward()
  231.                 turtle.turnLeft()
  232.                 direction = "down"
  233.             end
  234.         end
  235.     end
  236.  
  237.     local function farmingMonitor()
  238.         while true do
  239.             if not farmerStatus:find("Lost") then
  240.                 if enoughFuel() then
  241.                     print("Time to farm!")
  242.                     if not skipFirstFarm then
  243.                         farmerStatus = "Farming..."
  244.                         local ret, stat = farm()
  245.                     else
  246.                         print("Skipping initial farm")
  247.                         skipFirstFarm = true
  248.                     end
  249.                     if stat == false then
  250.                         print("I'm lost! D: Help me!")
  251.                         farmerStatus = "Lost! \\[Save me pwease :(\\]"
  252.                     else
  253.                         farmerStatus = "Waiting for next harvest..."
  254.                         for i = 1, harvestTime/5 do
  255.                             sleep(5)
  256.                             farmerNextHarvest = harvestTime-(i*5)
  257.                             print("Waiting for next harvest: "..farmerNextHarvest)
  258.                         end
  259.                     end
  260.                 else
  261.                     farmerStatus = "Outta fuel D:!"
  262.                     print("I'm out of fuel! Please place fuel")
  263.                     print("In slot 13 (Bottom left corner)")
  264.                     print("and press any key to continue")
  265.                     os.pullEvent("key")
  266.                     turtle.select(13)
  267.                     if not turtle.refuel() then
  268.                         print("D: That's not fuel! Try again.")
  269.                     else
  270.                         print("Thanks! Now farming...")
  271.                         farmerStatus = "Farming..."
  272.                         farm()
  273.                     end
  274.                 end
  275.                
  276.             end
  277.             sleep(2)
  278.         end
  279.     end
  280.  
  281.     if not goHomeByGPS() then
  282.         if turtle.getFuelLevel() > 0 then
  283.                 farmerStatus = "Lost! \\[Save me pwease :(\\]"
  284.         else
  285.             farmerStatus = "Outta fuel D:!"
  286.             while true do
  287.                 print("I'm out of fuel! Please place fuel")
  288.                 print("In slot 13 (Bottom left corner)")
  289.                 print("and press a key to continue")
  290.                 os.pullEvent("key")
  291.                 turtle.select(13)
  292.                 if not turtle.refuel() then
  293.                     print("That's not fuel! D: Try again")
  294.                 else
  295.                     print("Thanks, heading home!")
  296.                     goHomeByGPS()
  297.                     break
  298.                 end
  299.             end
  300.         end
  301.     end
  302.      
  303.     farmingMonitor()
  304. end
  305.  
  306. while true do
  307.         parallel.waitForAny(function() shell.run("/lost") end, main)
  308.         print("Terminate now.")
  309.         sleep(3)
  310. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement