Advertisement
Guest User

Drone Tree Farmer

a guest
Sep 16th, 2017
2,100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.97 KB | None | 0 0
  1.  
  2. --- Automatic King Tree Farmer for Drones
  3. -- Need a drone with one solar and one inventory upgrade.
  4.  
  5. local drone = component.proxy(component.list("drone")())
  6.  
  7. local function sleep(timeout)
  8.     checkArg(1, timeout, "number", "nil")
  9.     local deadline = computer.uptime() + (timeout or 0)
  10.     repeat
  11.         computer.pullSignal(deadline - computer.uptime())
  12.     until computer.uptime() >= deadline
  13. end
  14.  
  15. local function checkE()
  16.   local en = computer.energy()
  17.   return en
  18. end
  19.  
  20. local function drop()
  21.   drone.drop(2)
  22. end
  23.  
  24. local function dropAll()
  25.   for i=4,2,-1
  26.   do
  27.     drone.select(i)
  28.     drop()
  29.   end
  30.   drone.select(1)
  31. end
  32.  
  33. local function move(x,y,z)
  34.   drone.move(x,y,z)
  35.   travelx = travelx + x
  36.   travely = travely + y
  37.   travelz = travelz + z
  38. end
  39.  
  40. local function beep()
  41.   computer.beep(261, 0.6)
  42.   computer.beep(329, 0.5)
  43.   computer.beep(392, 0.3)
  44.   computer.beep(523, 0.7)
  45. end
  46.  
  47. local function swing()
  48.   for i=5,0,-1 do
  49.     drone.swing(i)
  50.   end
  51.   sleep(0.2)
  52. end
  53.  
  54. local function swingHor()
  55.   for i=1,5,1 do
  56.     drone.swing(i)
  57.   end
  58.   sleep(0.2)
  59. end
  60.  
  61. local function suck(x)
  62.   drone.suck(x)
  63. end
  64.  
  65. local function suckAll()
  66.   for i=0,5,1 do
  67.     suck(i)
  68.   end
  69. end
  70.  
  71. local function layer(n)
  72.   for i=n,1,-1  do
  73.  
  74.     for i=3,1,-1 do
  75.       suckAll()
  76.       swingHor()
  77.       move(-1,0,0)
  78.     end
  79.  
  80.     for i=3,1,-1 do
  81.       suckAll()
  82.       swingHor()
  83.       move(0,0,-1)
  84.     end
  85.  
  86.     for i=3,1,-1 do
  87.       suckAll()
  88.       swingHor()
  89.       move(1,0,0)
  90.     end
  91.  
  92.     for i=3,1,-1 do
  93.       suckAll()
  94.       swing()
  95.       move(0,0,1)
  96.     end
  97.  
  98.     swing()
  99.     sleep(1)
  100.     move(0,-1,0)
  101.     sleep(0.3)
  102.     suckAll()
  103.   end
  104.  
  105.   for i=3,1,-1 do
  106.     suckAll()
  107.     swingHor()
  108.     move(-1,0,0)
  109.   end
  110.  
  111.   for i=3,1,-1 do
  112.     suckAll()
  113.     swingHor()
  114.     move(0,0,-1)
  115.   end
  116.  
  117.   for i=3,1,-1 do
  118.     suckAll()
  119.     swingHor()
  120.     move(1,0,0)
  121.   end
  122.  
  123.   for i=3,1,-1 do
  124.     suckAll()
  125.     swingHor()
  126.     move(0,0,1)
  127.   end
  128. end
  129.  
  130. local function placeD()
  131.   drone.place(0)
  132. end
  133.  
  134. local function plant()
  135.   drone.setStatusText("PLANTING")
  136.   drone.select(1)
  137.   move(-8,1,0)
  138.   sleep(2)
  139.   placeD()
  140.  
  141.   move(-1,0,0)
  142.   sleep(0.3)
  143.   placeD()
  144.  
  145.   move(0,0,-1)
  146.   sleep(0.3)
  147.   placeD()
  148.  
  149.   move(1,0,0)
  150.   sleep(0.3)
  151.   placeD()
  152.   returnHome()
  153. end
  154.  
  155. local function harvest()
  156.   drone.setStatusText("CUTTING")
  157.   move(0,30,0)
  158.   sleep(3)
  159.   move(-7,0,1)
  160.   sleep(2)
  161.  
  162.   layer(30)
  163.  
  164.   swingHor()
  165.  
  166.   move(0,0,-1)
  167.   for i=1,4,1 do
  168.     move(1,0,0)
  169.     swingHor()
  170.     suckAll()
  171.   end
  172.   returnHome()
  173.   dropAll()
  174.   sleep(2)
  175. end
  176.  
  177. local function resetP()
  178.   travelx, travely, travelz = 0,0,0
  179. end
  180.  
  181. function returnHome()
  182.   travelx = travelx * -1
  183.   travely = travely * -1
  184.   travelz = travelz * -1
  185.   sleep(1)
  186.   move(travelx,travely,travelz)
  187.   sleep(2)
  188.   resetP()
  189. end
  190.  
  191. local function checkTree()
  192.   resetP()
  193.   job = 0
  194.   drone.setStatusText("CHECKING")
  195.  
  196.   for i=1,7,1 do
  197.     local result = drone.detect(4)
  198.     if result then
  199.       job = 2
  200.       break
  201.     end
  202.     sleep(0.5)
  203.     move(-1,0,0)
  204.     sleep(0.5)
  205.   end
  206.  
  207.   local resultA = drone.detect(4)
  208.   move(0,1,0)
  209.   sleep(0.5)
  210.   local resultB = drone.detect(4)
  211.  
  212.   if not resultA then
  213.     job = 1
  214.   end
  215.  
  216.   if resultA == true and resultB == true then
  217.     job = 2
  218.   end
  219.   returnHome()
  220.   sleep(1)
  221. end
  222.  
  223. --start
  224. computer.beep(80, 2)
  225. sleep(0.5)
  226. resetP()
  227. job = 0
  228. beep()
  229. drone.setStatusText("ROM\nOK.v4.14.")
  230. sleep(1)
  231.  
  232. -- Main loop
  233. while true do
  234.   while true do
  235.     local energy = checkE()
  236.     if energy < 1000 then
  237.       drone.setLightColor(0xFF9969)
  238.       drone.setStatusText("LOW\nENERGY")
  239.       computer.beep(878, 1)
  240.       sleep(22)
  241.     end
  242.     if energy >= 1000 then
  243.       --pass
  244.       break
  245.     end
  246.   end
  247.   drone.setLightColor(0xD0DE58)
  248.   sleep(1)
  249.  
  250.   checkTree()
  251.   drone.setStatusText(tostring(job))
  252.   sleep(0.3)
  253.   if job == 1 then
  254.     plant()
  255.   end
  256.   if job == 2 then
  257.     harvest()
  258.     plant()
  259.   end
  260.   drone.setStatusText("zZzZzZz")
  261.   sleep(30)
  262. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement