Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Query unser input
- local nTunnels,nDepth,nSpacing,bTorches,nTorchDist,nTorchSlot
- while (nTunnels or 0)<1 do
- term.clear()
- term.setCursorPos(1,1)
- write("Number of tunnels: ")
- nTunnels=tonumber(read())
- end
- while (nDepth or 0)<1 do
- term.clear()
- term.setCursorPos(1,1)
- write("Depth of tunnels: ")
- nDepth=tonumber(read())
- end
- while (nSpacing or -1)<0 do
- term.clear()
- term.setCursorPos(1,1)
- write("Space between tunnels: ")
- nSpacing=tonumber(read())
- end
- term.clear()
- term.setCursorPos(1,1)
- print("Place torches in tunnels? [y | n]")
- while true do
- local evts={os.pullEvent("char")}
- if evts[2]=="y" or evts[2]=="Y" then
- bTorches=true
- while (nTorchDist or -1)<0 do
- term.clear()
- term.setCursorPos(1,1)
- write("Distance before a torch is placed: ")
- nTorchDist=tonumber(read())
- end
- while (nTorchSlot or 0)<1 do
- term.clear()
- term.setCursorPos(1,1)
- write("Slot in which torches are kept: ")
- nTorchSlot=tonumber(read())
- end
- break
- elseif evts[2]=="n" or evts[2]=="N" then
- bTorches=false
- break
- end
- end
- -- Viability calc
- local fuelReq=nTunnels*(nDepth*2+nSpacing+1)
- local currFuel=turtle.getFuelLevel()
- if currFuel<fuelReq then
- term.clear()
- term.setCursorPos(1,1)
- print("Your turtle has insufficient fuel to complete the task. Check inventory for fuel? [y | n]")
- repeat
- local evts={os.pullEvent("char")}
- if evts[2]=="n" or evts[2]=="N" then
- error("cancelled due to lack of fuel")
- end
- until evts[2]=="y" or evts[2]=="Y"
- local tFuels={}
- for nSlot=1,16 do
- turtle.select(nSlot)
- if turtle.refuel(1) then
- tFuels[nSlot]=turtle.getFuelLevel()-currFuel
- currFuel=turtle.getFuelLevel()
- end
- end
- local theoreticalFuelGain=0
- for k,v in pairs(tFuels) do
- theoreticalFuelGain=theoreticalFuelGain+v*turtle.getItemCount(k)
- end
- if currFuel+theoreticalFuelGain>=fuelReq then
- for k,v in pairs(tFuels) do
- turtle.select(k)
- while turtle.getItemCount(k)>0 do
- if turtle.getFuelLevel()>=fuelReq then
- break
- else
- turtle.refuel(1)
- end
- end
- if turtle.getFuelLevel()>=fuelReq then
- break
- end
- end
- else
- error("not enough fuel in inventory")
- end
- end
- -- Exec
- turtle.select(nTorchSlot)
- for nTunnel=1,nTunnels do
- for nDir=1,2 do
- for nDep=1,nDepth do
- if turtle.detectUp() then turtle.digUp() end
- if turtle.detectDown() and not turtle.compareDown() then turtle.digDown() end
- if bTorches and nDir<2 and (nDep%(nTorchDist+1)==0 or nDep==1) then turtle.placeDown() end
- while not turtle.forward() do turtle.dig() end
- end
- if nDir==1 then
- turtle.turnRight() turtle.turnRight()
- else
- turtle.turnLeft()
- end
- end
- if nTunnel<nTunnels then
- for nSpaced=1,nSpacing+1 do
- while not turtle.forward() do turtle.dig() end
- if turtle.detectUp() then turtle.digUp() end
- if turtle.detectDown() and not turtle.compareDown() then turtle.digDown() end
- end
- else
- for nTravelled=1,(nTunnels-1)*(nSpacing+1) do
- while not turtle.back() do end
- end
- end
- turtle.turnLeft()
- end
Advertisement
Add Comment
Please, Sign In to add comment