Advertisement
Vilsol

Efficient Smart Turtle with Comeback!

Jan 26th, 2013
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.46 KB | None | 0 0
  1. ----------------------
  2. -- Efficient Quarry --
  3. --  Made By Vilsol  --
  4. --     1/20/2012    --
  5. ----------------------
  6.  
  7. term.clear()
  8. term.setCursorPos(1, 1)
  9.  
  10. tArgs = { ... }
  11. depth = 0
  12. left = false
  13. bonux = 0
  14. bonuz = 0
  15.  
  16. if(tArgs[1] == "update")then
  17.     shell.run("rm", "ebQuarry")
  18.     shell.run("pastebin", "get", "LpBaQVER", "ebQuarry")
  19.     print "Update successfull!"
  20.     error()
  21. end
  22.  
  23. function safeUp()
  24.     checkFuel()
  25.     if(not turtle.up())then
  26.         sleep(1)
  27.         if(turtle.attackUp())then
  28.             for attack = 1, 50 do
  29.                 turtle.attackUp()
  30.                 if(turtle.up())then
  31.                     up = 1
  32.                     break
  33.                 end
  34.                 sleep(1)
  35.             end
  36.             if up then
  37.                 up = 0
  38.                 return true
  39.             else
  40.                 error("Unknown problem!")
  41.             end
  42.         else
  43.             if(turtle.digUp())then
  44.                 sleep(1)
  45.                 for graveler = 1, 8 do
  46.                     if(not turtle.digUp())then
  47.                         break
  48.                     end
  49.                     sleep(1)
  50.                 end
  51.                 if(turtle.up())then
  52.                     return true
  53.                 else   
  54.                     error("Unknown problem!")
  55.                 end
  56.             else
  57.                 error("Unknown problem!")
  58.             end
  59.         end
  60.     else
  61.         return true
  62.     end
  63. end
  64.  
  65. function safeDown()
  66.     checkFuel()
  67.     if(not turtle.down())then
  68.         sleep(1)
  69.         if(turtle.attackDown())then
  70.             for attack = 1, 50 do
  71.                 turtle.attackDown()
  72.                 if(turtle.down())then
  73.                     down = 1
  74.                     break
  75.                 end
  76.                 sleep(1)
  77.             end
  78.             if down then
  79.                 down = 0
  80.                 return true
  81.             else
  82.                 error("Unknown problem!")
  83.             end
  84.         else
  85.             if(turtle.digDown())then
  86.                 sleep(1)
  87.                 for graveler = 1, 8 do
  88.                     if(not turtle.digDown())then
  89.                         break
  90.                     end
  91.                     sleep(1)
  92.                 end
  93.                 if(turtle.down())then
  94.                     return true
  95.                 else   
  96.                     error("Unknown problem!")
  97.                 end
  98.             else
  99.                 error("Unknown problem!")
  100.             end
  101.         end
  102.     else
  103.         return true
  104.     end
  105. end
  106.  
  107. function bringHome(widthz, heightx)
  108.     if(widthz == nil)then widthz = 0 end
  109.     if(heightx == nil)then heightx = 0 end
  110.     if left then
  111.         turtle.turnRight()
  112.         if(widthz > 1)then
  113.             for back = 1, widthz-1 do
  114.                 safeForward(12345, 12345)
  115.             end
  116.         end
  117.         turtle.turnLeft()
  118.         if(x-heightx > -3)then
  119.             for back = 1, x-heightx+1 do
  120.                 safeForward(12345, 12345)
  121.             end
  122.         end
  123.     else
  124.         turtle.turnLeft()
  125.         if(widthz > 1)then
  126.             for back = 1, widthz-1 do
  127.                 safeForward(12345, 12345)
  128.             end
  129.         end
  130.         turtle.turnLeft()
  131.         if(heightx > 1)then
  132.             for back = 1, heightx-1 do
  133.                 safeForward(12345, 12345)
  134.             end
  135.         end
  136.     end
  137.     if(adddown)then
  138.         for backup = 1, depth+adddown do
  139.             safeUp()
  140.         end
  141.     else
  142.         for backup = 1, depth do
  143.             safeUp()
  144.         end
  145.     end
  146.    
  147.     for slots = 1, 12 do
  148.         turtle.select(slots)
  149.         turtle.drop()
  150.     end
  151.     turtle.select(1)
  152.     if(adddown)then
  153.         for backdown = 1, depth+adddown do
  154.             safeDown()
  155.         end
  156.     else
  157.         for backdown = 1, depth do
  158.             safeDown()
  159.         end
  160.     end
  161.    
  162.     if left then
  163.         turtle.turnLeft()
  164.         turtle.turnLeft()
  165.         if(x-heightx+1 > -3)then
  166.             for back = 1, x-heightx+1 do
  167.             turtle.forward()
  168.             end
  169.         end
  170.         turtle.turnRight()
  171.         if(widthz > 1)then
  172.             for back = 1, widthz-1 do
  173.                 turtle.forward()
  174.             end
  175.         end
  176.         turtle.turnRight()
  177.     else
  178.         turtle.turnLeft()
  179.         turtle.turnLeft()
  180.         if(heightx > 1)then
  181.             for back = 1, heightx-1 do
  182.                 turtle.forward()
  183.             end
  184.         end
  185.         turtle.turnRight()
  186.         if(widthz > 1)then
  187.             for back = 1, widthz-1 do
  188.                 turtle.forward()
  189.             end
  190.         end
  191.         turtle.turnLeft()
  192.     end
  193. end
  194.  
  195. function isFull(widthz, heightx)
  196.     slot = turtle.getItemCount(12)
  197.     if(slot >= 1)then
  198.         bringHome(widthz, heightx)
  199.     end
  200. end
  201.  
  202. function checkSlots()
  203.     dirt = turtle.getItemCount(14)
  204.     stone = turtle.getItemCount(15)
  205.     fuel = turtle.getItemCount(16)
  206.     if(dirt == 1 and stone == 1 and fuel >= 1)then
  207.         return true
  208.     else
  209.         return false
  210.     end
  211. end
  212.  
  213. function checkFuel()
  214.     if(turtle.getFuelLevel() < 100)then
  215.         turtle.select(16)
  216.         if (turtle.refuel())then
  217.             print "Refueled successfully"
  218.             return true
  219.         else
  220.             error("Out of fuel!")
  221.         end
  222.         turtle.select(1)
  223.     else
  224.         return true
  225.     end
  226. end
  227.  
  228. function safeDig(widthz, heightx)
  229.     isFull(widthz, heightx)
  230.     if(not turtle.dig())then
  231.         if(not turtle.detect())then
  232.             return true
  233.         else
  234.             if(turtle.attack())then
  235.                 for attack = 1, 50 do
  236.                     turtle.attack()
  237.                     if(turtle.dig())then
  238.                         dig = 1
  239.                         break
  240.                     end
  241.                     sleep(0.1)
  242.                 end
  243.                 if dig then
  244.                     dig = 0
  245.                     return true
  246.                 else
  247.                     error("Unknown problem!")
  248.                 end
  249.             else
  250.                 error("Unknown problem!")
  251.             end
  252.         end
  253.     else
  254.         return true
  255.     end
  256. end
  257.  
  258. function safeForward(widthz, heightx)
  259.     checkFuel()
  260.     if(widthz ~= 12345 and heightx ~= 12345)then
  261.         isFull(widthz, heightx)
  262.     end
  263.     if(not turtle.forward())then
  264.         sleep(1)
  265.         if(turtle.attack())then
  266.             for attack = 1, 50 do
  267.                 turtle.attack()
  268.                 if(turtle.forward())then
  269.                     forward = 1
  270.                     break
  271.                 end
  272.                 sleep(1)
  273.             end
  274.             if forward then
  275.                 forward = 0
  276.                 return true
  277.             else
  278.                 error("Unknown problem!")
  279.             end
  280.         else
  281.             if(turtle.dig())then
  282.                 sleep(1)
  283.                 for graveler = 1, 8 do
  284.                     if(not turtle.dig())then
  285.                         break
  286.                     end
  287.                     sleep(1)
  288.                 end
  289.                 if(turtle.forward())then
  290.                     return true
  291.                 else   
  292.                     error("Unknown problem!")
  293.                 end
  294.             else
  295.                 if(not turtle.forward())
  296.                     error("Unknown problem!")
  297.                 end
  298.             end
  299.         end
  300.     else
  301.         return true
  302.     end
  303. end
  304.  
  305. function compareOre()
  306.     digup = 0
  307.     digdown = 0
  308.     turtle.select(14)
  309.     if not turtle.compareUp() then
  310.         digup = 1
  311.     end
  312.     if not turtle.compareDown() then
  313.         digdown = 1
  314.     end
  315.     turtle.select(15)
  316.     if not turtle.compareUp() then
  317.         digup = digup + 1
  318.     end
  319.     if not turtle.compareDown() then
  320.         digdown = digdown + 1
  321.     end
  322.     turtle.select(1)
  323.     if(digup == 2)then turtle.digUp() end
  324.     if(digdown == 2)then turtle.digDown() end
  325. end
  326.  
  327. function turn()
  328.     if left then
  329.         left = false
  330.         turtle.turnLeft()
  331.         safeDig(widthz, heightx)
  332.         safeForward(12345, 12345)
  333.         turtle.turnLeft()
  334.     else
  335.         left = true
  336.         turtle.turnRight()
  337.         safeDig(widthz, heightx)
  338.         safeForward(12345, 12345)
  339.         turtle.turnRight()
  340.     end
  341. end
  342.  
  343. function calcuturn()
  344.     if left then
  345.         left = false
  346.     else
  347.         left = true
  348.     end
  349. end
  350.  
  351. function checkLayer(x, z)
  352.     undone = 0
  353.     for widthz = 1, z do
  354.         if(bonuz > widthz and bonuz > 0)then
  355.             bonuz = bonuz+1
  356.             undone = 1
  357.             break
  358.         end
  359.         for heightx = 1, x do
  360.             if(bonux > heightx and bonux > 0)then
  361.                 bonux = bonux+1
  362.                 break
  363.             end
  364.             compareOre()
  365.             safeDig(widthz, heightx)
  366.             safeForward(widthz, heightx)
  367.         end
  368.         compareOre()
  369.         if tonumber(widthz) < tonumber(z) then
  370.             turn()
  371.         end
  372.     end
  373.     if undone then
  374.         if left then
  375.             turtle.turnRight()
  376.             for back = 1, z-1 do
  377.                 safeForward(widthz, heightx)
  378.             end
  379.             turtle.turnRight()
  380.         else
  381.             turtle.turnLeft()
  382.             for back = 1, z-1 do
  383.                 safeForward(widthz, heightx)
  384.             end
  385.             turtle.turnLeft()
  386.             for back = 1, x do
  387.                 safeForward(widthz, heightx)
  388.             end
  389.             turtle.turnLeft()
  390.             turtle.turnLeft()
  391.         end
  392.         left = false
  393.     end
  394. end
  395.  
  396. function backUp()
  397.     if(adddown)then
  398.         for up = 1, y+2+adddown do
  399.             safeUp()
  400.         end
  401.     else
  402.         for up = 1, y+2 do
  403.             safeUp()
  404.         end
  405.     end
  406. end
  407.  
  408. function digQuarry(x, z, y)
  409.     while true do
  410.         checkLayer(x, z)
  411.         bonux = 0
  412.         bonuz = 0
  413.         for down = 1, 3 do
  414.             depth = depth + 1
  415.             turtle.digDown()
  416.             turtle.down()
  417.         end
  418.         if(depth >= y)then
  419.             backUp()
  420.             print "Done!"
  421.             break
  422.         end
  423.     end
  424. end
  425.  
  426. if(#tArgs < 3)then
  427.     print "Usage: ebQuarry x z y add +x +z"
  428.     error()
  429. else
  430.     x = tonumber(tArgs[1]) - 1
  431.     z = tonumber(tArgs[2])
  432.     y = tonumber(tArgs[3])
  433.     if(tonumber(x) and tonumber(z) and tonumber(y))then
  434.         if(checkSlots())then
  435.             if(checkFuel())then
  436.                 if(#tArgs >= 4)then
  437.                     if(tonumber(tArgs[4]) > 0)then
  438.                         adddown = tonumber(tArgs[4])
  439.                         for addingdown = 1, adddown do
  440.                             turtle.digDown()
  441.                             turtle.down()
  442.                         end
  443.                     end
  444.                 end
  445.                 if(#tArgs >= 5)then
  446.                     if(tonumber(tArgs[5])-1 > 0)then
  447.                         bonux = tonumber(tArgs[5])
  448.                         for bx = 1, bonux do
  449.                             turtle.forward()
  450.                         end
  451.                     end
  452.                 end
  453.                 if(#tArgs >= 6)then
  454.                     if(tonumber(tArgs[6]) > 0)then
  455.                         turtle.turnRight()
  456.                         bonuz = tonumber(tArgs[6])
  457.                         for bz = 1, bonuz do
  458.                             turtle.forward()
  459.                             calcuturn()
  460.                         end
  461.                         if left == false then
  462.                             turtle.turnLeft()
  463.                         else
  464.                             turtle.turnRight()
  465.                         end
  466.                     end
  467.                 end
  468.                 print ("Digging a " .. x+1 .. "x" .. z .. "x" .. y .. " quarry!")
  469.                 digQuarry(x, z, y)
  470.             else
  471.                 error("Something went very wrong!")
  472.             end
  473.         else
  474.             print "Please fill in the slot as follows:"
  475.             print "Slot 14: Dirt"
  476.             print "Slot 15: Stone"
  477.             print "Slot 16: Fuel"
  478.             error()
  479.         end
  480.     else
  481.         print "Please use only numbers!"
  482.         error()
  483.     end
  484. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement