KaoSDlanor

stripmine

May 8th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.03 KB | None | 0 0
  1. -- Query unser input
  2.  
  3. local nTunnels,nDepth,nSpacing,bTorches,nTorchDist,nTorchSlot
  4. while (nTunnels or 0)<1 do
  5.     term.clear()
  6.     term.setCursorPos(1,1)
  7.     write("Number of tunnels: ")
  8.     nTunnels=tonumber(read())
  9. end
  10. while (nDepth or 0)<1 do
  11.     term.clear()
  12.     term.setCursorPos(1,1)
  13.     write("Depth of tunnels: ")
  14.     nDepth=tonumber(read())
  15. end
  16. while (nSpacing or -1)<0 do
  17.     term.clear()
  18.     term.setCursorPos(1,1)
  19.     write("Space between tunnels: ")
  20.     nSpacing=tonumber(read())
  21. end
  22. term.clear()
  23. term.setCursorPos(1,1)
  24. print("Place torches in tunnels? [y | n]")
  25. while true do
  26.     local evts={os.pullEvent("char")}
  27.     if evts[2]=="y" or evts[2]=="Y" then
  28.         bTorches=true
  29.         while (nTorchDist or -1)<0 do
  30.             term.clear()
  31.             term.setCursorPos(1,1)
  32.             write("Distance before a torch is placed: ")
  33.             nTorchDist=tonumber(read())
  34.         end
  35.         while (nTorchSlot or 0)<1 do
  36.             term.clear()
  37.             term.setCursorPos(1,1)
  38.             write("Slot in which torches are kept: ")
  39.             nTorchSlot=tonumber(read())
  40.         end
  41.         break
  42.         elseif evts[2]=="n" or evts[2]=="N" then
  43.             bTorches=false
  44.             break
  45.         end
  46. end
  47.  
  48. -- Viability calc
  49.  
  50. local fuelReq=nTunnels*(nDepth*2+nSpacing+1)
  51. local currFuel=turtle.getFuelLevel()
  52. if currFuel<fuelReq then
  53.     term.clear()
  54.     term.setCursorPos(1,1)
  55.     print("Your turtle has insufficient fuel to complete the task. Check inventory for fuel? [y | n]")
  56.     repeat
  57.         local evts={os.pullEvent("char")}
  58.         if evts[2]=="n" or evts[2]=="N" then
  59.             error("cancelled due to lack of fuel")
  60.         end
  61.     until evts[2]=="y" or evts[2]=="Y"
  62.     local tFuels={}
  63.     for nSlot=1,16 do
  64.         turtle.select(nSlot)
  65.         if turtle.refuel(1) then
  66.             tFuels[nSlot]=turtle.getFuelLevel()-currFuel
  67.             currFuel=turtle.getFuelLevel()
  68.         end
  69.     end
  70.     local theoreticalFuelGain=0
  71.     for k,v in pairs(tFuels) do
  72.         theoreticalFuelGain=theoreticalFuelGain+v*turtle.getItemCount(k)
  73.     end
  74.     if currFuel+theoreticalFuelGain>=fuelReq then
  75.         for k,v in pairs(tFuels) do
  76.             turtle.select(k)
  77.             while turtle.getItemCount(k)>0 do
  78.                 if turtle.getFuelLevel()>=fuelReq then
  79.                     break
  80.                 else
  81.                     turtle.refuel(1)
  82.                 end
  83.             end
  84.             if turtle.getFuelLevel()>=fuelReq then
  85.                 break
  86.             end
  87.         end
  88.     else
  89.         error("not enough fuel in inventory")
  90.     end
  91. end
  92.  
  93. -- Exec
  94.  
  95. turtle.select(nTorchSlot)
  96. for nTunnel=1,nTunnels do
  97.     for nDir=1,2 do
  98.         for nDep=1,nDepth do
  99.             if turtle.detectUp() then turtle.digUp() end
  100.             if turtle.detectDown() and not turtle.compareDown() then turtle.digDown() end
  101.             if bTorches and nDir<2 and (nDep%(nTorchDist+1)==0 or nDep==1) then turtle.placeDown() end
  102.             while not turtle.forward() do turtle.dig() end
  103.         end
  104.         if nDir==1 then
  105.             turtle.turnRight() turtle.turnRight()
  106.         else
  107.             turtle.turnLeft()
  108.         end
  109.     end
  110.     if nTunnel<nTunnels then
  111.         for nSpaced=1,nSpacing+1 do
  112.             while not turtle.forward() do turtle.dig() end
  113.             if turtle.detectUp() then turtle.digUp() end
  114.             if turtle.detectDown() and not turtle.compareDown() then turtle.digDown() end
  115.         end
  116.     else
  117.         for nTravelled=1,(nTunnels-1)*(nSpacing+1) do
  118.             while not turtle.back() do end
  119.         end
  120.     end
  121.     turtle.turnLeft()
  122. end
Advertisement
Add Comment
Please, Sign In to add comment