Advertisement
Vilsol

ebQuarry NEW

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