spdkils

Grid Dig

Oct 30th, 2013
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.81 KB | None | 0 0
  1. local y = 2
  2. local z = 0
  3. local i = 0
  4. local bedrock = 0
  5. local enderbox = 0
  6. local fuelSlot = 0
  7. local answer = "a"
  8. local function update(strMessage)
  9.     term.clear()
  10.     term.setCursorPos(1,1)
  11.     if strMessage then
  12.         print(strMessage)
  13.     end
  14. end
  15.  
  16. update("Welcome to core driller!")
  17. os.sleep(3)
  18.  
  19. repeat
  20.     update("Do you have an Ender Chest in slot 16 to offload resources?")
  21.     answer=read()
  22.     answer=string.lower(answer)
  23. until answer=="y" or answer=="n"
  24. if answer=="y" then
  25.     enderbox = 16
  26. else
  27.     enderbox = 0
  28. end
  29. repeat
  30.     update("Do you have an Ender Chest for fuel in slot 15 for fuel?")
  31.     answer=read()
  32.     answer=string.lower(answer)
  33. until answer=="y" or answer=="n"
  34. if answer=="y" then
  35.     fuelSlot = 15
  36. else
  37.     fuelSlot = 0
  38. end
  39. repeat
  40.     update("Do you have a bucket for fuel in slot 15?")
  41.     answer=read()
  42.     answer=string.lower(answer)
  43. until answer=="y" or answer=="n"
  44. if answer=="y" then
  45.     bucket = 15
  46. else
  47.     bucket = 0
  48. end
  49.  
  50. turtle.select(1)
  51. local function tf() bedrock = 0 while not turtle.forward() do turtle.attack() turtle.dig() turtle.digUp() RefuelDigger(fuelSlot) end end
  52.  
  53. local function fuel(slot)
  54.     if slot == 0 then return end
  55.     turtle.select(slot)
  56.     if turtle.place() then
  57.         if not turtle.refuel() then
  58.             turtle.place()
  59.         end
  60.     end
  61.     turtle.select(1)
  62. end
  63.  
  64. local function loot()
  65.     while turtle.suck() do
  66.         FullStorage(enderbox)
  67.     end
  68.     while turtle.suckUp() do
  69.         FullStorage(enderbox)
  70.     end
  71.     while turtle.suckDown() do
  72.         FullStorage(enderbox)
  73.     end
  74. end
  75.  
  76. local function search()
  77.     for i = 1, 4 do -- added wrapper loop
  78.         local gooditem = true -- added because 4 checks
  79.         for t = 1, 4 do
  80.             turtle.select(t)
  81.             if turtle.getItemCount(t) > 50 then
  82.                 turtle.drop(turtle.getItemCount(t)-1) -- added to discard trash
  83.             end
  84.             if not turtle.detect() or turtle.compare() then -- removed not
  85.                 gooditem = false --added
  86.                 fuel(bucket)
  87.                 break
  88.             end
  89.         end   --added
  90.         if gooditem then --added
  91.             if turtle.getSelectedSlot() ~= 1 then
  92.                 turtle.select(1) -- Always want the items to stack.
  93.             end
  94.             FullStorage(enderbox) -- check we have room 1st!
  95.             while turtle.suck() do FullStorage(enderbox) end
  96.             turtle.dig()
  97.         end
  98.         turtle.turnRight()
  99.         end
  100.  
  101. end
  102.  
  103. local function td()
  104.  bedrock = 0
  105.   local canGoDown = true
  106. while canGoDown do
  107.   turtle.select(1) -- added so you don't fill inventory with junk.
  108.   if not turtle.down() then
  109.     RefuelDigger(fuelSlot)
  110.     while turtle.suckDown() do FullStorage(enderbox) end
  111.     if turtle.detectDown() and not turtle.digDown() then
  112.       canGoDown = false
  113.     else
  114.     turtle.attackDown()
  115.     end
  116.   else
  117.     bedrock = bedrock + 1
  118.     FullStorage(enderbox)
  119.     search() -- Simplify functionify so less clutter and we can read it.
  120.   end
  121. end -- End of top while loop
  122.  
  123. for z = 1, bedrock do  -- Added bedrock counter
  124.   while not turtle.up() do --- added sanity check
  125.     turtle.attackUp()
  126.     turtle.select(1) -- always stack items before dig
  127.     turtle.digUp()
  128.     RefuelDigger(fuelSlot) -- Maybe we ran out of gas looping up 10000 blocks?
  129.   end
  130. end -- end of for loop
  131. tf()
  132. end -- end function
  133.  
  134. function RefuelDigger(nSlot)
  135. if turtle.getFuelLevel() > 256 then
  136.     return
  137. end
  138. if nSlot == 0 then
  139.     if turtle.getFuelLevel() < 256 then
  140.             for i=1,bedrock do
  141.                     while not turtle.up() do --- added sanity check
  142.                         turtle.attackUp()
  143.                         turtle.select(1) -- always stack items before dig
  144.                         turtle.digUp()
  145.                     end
  146.             end
  147.             while turtle.getFuelLevel() < 4000 do
  148.             update("Waiting for fuel...")
  149.             if turtle.refuel() then
  150.                 print("Fuel Level " .. turtle.getFuelLevel())
  151.             end
  152.                     os.sleep(5)
  153.             end
  154.             for i=1,bedrock do
  155.                     while not turtle.down() do
  156.                             turtle.attackDown()
  157.                             turtle.select(1)
  158.                             turtle.digDown()
  159.                     end
  160.             end
  161.     end
  162. else
  163.     FullStorage(enderbox)
  164.     turtle.select(nSlot)
  165.     if turtle.placeUp() then
  166.         while turtle.getFuelLevel() < 1000 do
  167.             turtle.suckUp()
  168.             turtle.refuel()
  169.             turtle.dropUp()
  170.         end
  171.         turtle.digUp()
  172.     end
  173. end
  174. end
  175.  
  176. function FullStorage(nSlot)
  177. update("Full check...")
  178. if nSlot > 0 then
  179. if turtle.getItemCount(nSlot-2) > 0 then
  180.   turtle.select(nSlot)
  181.   if turtle.placeUp() then
  182.    for i = 5, nSlot-2 do
  183.     turtle.select(i)
  184.     turtle.dropUp()
  185.    end
  186.    turtle.select(nSlot)
  187.    turtle.digUp()
  188.   end
  189. end
  190. else
  191. if turtle.getItemCount(16) > 0 then
  192.     for i=1,bedrock do
  193.         while not turtle.up() do --- added sanity check
  194.             turtle.attackUp()
  195.             turtle.select(1) -- always stack items before dig
  196.             turtle.digUp()
  197.         end
  198.     end
  199.     while turtle.getItemCount(16) > 0 do
  200.         os.sleep(1)
  201.     end
  202.     for i=1,bedrock do
  203.         while not turtle.down() do
  204.             turtle.attackDown()
  205.             turtle.select(1)
  206.             turtle.digDown()
  207.         end
  208.     end
  209. end
  210. end
  211. end
  212.  
  213. local tn = turtle.turnRight
  214. local tCom = {tf,tf,tf,tf,td,tf,tf,tf,tf,td,tf,tf,tf,tf,td,tf,tf,tf,tf,td,tf,tf,tf,tf,td}
  215.  
  216. local function arrayShift(tMyArray)
  217. for i=1,2 do
  218.   table.insert(tMyArray,1,tMyArray[#tMyArray])
  219.   table.remove(tMyArray,#tMyArray)
  220. end
  221. return tMyArray
  222. end
  223.  
  224. local function myDoit(tArray,dir)
  225.   if dir ~= 0 then
  226.     for i=1,#tArray do
  227.       tArray[i]()
  228.     end
  229.   else
  230.       for i=#tArray,1, -1 do
  231.         tArray[i]()
  232.       end
  233.   end
  234. end
  235.  
  236. tf()
  237. for i=1,26 do
  238.   myDoit(tCom,i%2)
  239.   tCom = arrayShift(tCom)
  240.   if i%2 == 0 then
  241.     tn = turtle.turnLeft
  242.   else
  243.     tn = turtle.turnRight
  244.   end
  245.   tn()
  246.   tf()
  247.   tn()
  248.   tf()
  249. end
  250.  
  251. function empty(nSlot)
  252. update("Going to empty.")
  253.   turtle.select(nSlot)
  254.   if turtle.placeUp() then
  255.    for i = 5, nSlot-2 do
  256.     turtle.select(i)
  257.     turtle.dropUp()
  258.    end
  259.    turtle.select(nSlot)
  260.    turtle.digUp()
  261.   end
  262. turtle.select(1)
  263. end
  264. if enderbox > 0 then
  265.   empty(enderbox)
  266. end
Advertisement
Add Comment
Please, Sign In to add comment