Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- swarm queen
- time_start = os.clock()
- sdisk = 1
- sdrive = 2
- sfuel = 3
- sdrone = 4
- sdump = 5
- amounts = {1,1,1,63,1}
- --y = 6+3 -- current feet y + 6 to account for bedrock
- function estFuel(y)
- fuel = 2*y + 10
- if turtle.getFuelLevel() < fuel then
- turtle.select(sfuel)
- while not turtle.placeDown() do
- if turtle.detectDown() then
- turtle.digDown()
- else
- turtle.attackDown()
- end
- sleep(0.2)
- end
- print("refueling to estimated level of "..fuel)
- turtle.select(sfuel)
- while turtle.getFuelLevel() < fuel do
- if turtle.getItemCount(sfuel) < 1 then
- while not turtle.suckDown() do
- sleep(2)
- end
- end
- turtle.refuel(1)
- print("fuel level: "..turtle.getFuelLevel().." / "..fuel)
- end
- -- drop remaining fuel off
- turtle.dropDown()
- --pick fuel chest back up
- while not turtle.digDown() do
- sleep(2)
- end
- end
- end
- function tleft(turns)
- if turns == nil then
- turns = 1
- end
- for i = 1,turns do
- turtle.turnLeft()
- end
- end
- function tright(turns)
- if turns == nil then
- turns = 1
- end
- for i = 1,turns do
- turtle.turnRight()
- end
- end
- function move(dir, dist, dig)
- for d = 1, dist do
- if dir == "f" then
- while not turtle.forward() do
- if turtle.detect() then
- if dig then
- turtle.dig()
- end
- else
- turtle.attack()
- end
- sleep(0.2)
- end
- elseif dir == "u" then
- while turtle.detect() and dig do
- turtle.dig()
- sleep(0.2) -- wait for gravel/sand to settle
- end
- while not turtle.up() do
- if turtle.detectUp() then
- if dig then
- turtle.digUp()
- end
- else
- turtle.attackUp()
- end
- sleep(0.2)
- end
- elseif dir == "d" then
- while turtle.detect() and dig do
- turtle.dig()
- sleep(0.2)
- end
- while not turtle.down() do
- if turtle.detectDown() then
- if dig then
- turtle.digDown()
- end
- else
- turtle.attackDown()
- end
- end
- elseif dir == "b" then
- if not turtle.back() then
- left(2)
- while not turtle.forward() do
- if turtle.detect() then
- if dig then
- turtle.dig()
- end
- else
- turtle.attack()
- end
- end
- end
- end
- end
- end
- -- check if the items are in order
- complete = true
- for s=1,#amounts do
- if turtle.getItemCount(s) ~= amounts[s] then
- complete = false
- break
- end
- end
- if not complete then
- print("incomplete setup, i need:")
- print("slot 1: disk")
- print("slot 2: drive")
- print("slot 3: enderchest for refueling")
- print("slot 4: 63 mining turtles (without label!)")
- print("slot 5: enderchest for dumping")
- else
- -- ask for correct y-level if not determined via gps
- x,y,z = gps.locate()
- if y == nil then
- print("no gps, what is my y-level? (f3 feet level!)")
- y = tonumber(read())
- end
- -- refuel if necessary
- estFuel(y)
- -- setup start
- move("f",1,true)
- -- put down refuel chest
- turtle.select(sfuel)
- while not turtle.placeDown() do
- if turtle.detectDown() then
- turtle.digDown()
- else
- turtle.attackDown()
- end
- sleep(0.2)
- end
- -- put up disk drive
- turtle.select(sdrive)
- while not turtle.placeUp() do
- if turtle.detectUp() then
- turtle.digUp()
- else
- turtle.attackUp()
- end
- sleep(0.2)
- end
- -- put disk in
- turtle.select(sdisk)
- turtle.dropUp()
- -- write state file
- if fs.exists("disk/state") then
- fs.delete("disk/state")
- end
- fh = fs.open("disk/state","w")
- fh.writeLine("15")
- fh.writeLine("3")
- fh.writeLine(y)
- fh.close()
- -- write startup file
- if not fs.exists("disk/startup") then
- --fs.move("disk/startup","disk/startup.old")
- shell.run("pastebin get rZaEb5s6 disk/startup")
- end
- -- put down turtles
- turtle.select(sdrone)
- move("b",1,true)
- print("deploying swarm")
- while turtle.getItemCount(sdrone) > 0 do
- while not turtle.place() do
- sleep(2)
- end
- drone = peripheral.wrap("front")
- drone.turnOn()
- end
- -- collect disk
- move("f",1,false)
- turtle.select(sdisk)
- turtle.suckUp()
- -- collect drive
- turtle.select(sdrive)
- turtle.digUp()
- -- collect fuel chest
- turtle.select(sfuel)
- turtle.digDown()
- move("b",1,true)
- -- dig out
- move("d",y-5,true)
- move("f",2,true)
- move("u",y-6,true)
- move("u",1,false)
- -- prepare to collect turtles
- -- drop dump chest
- turtle.select(sdump)
- while not turtle.placeDown() do
- if turtle.detectDown() then
- turtle.digDown()
- else
- turtle.attackDown()
- end
- end
- -- check if turtle has arrived and empty it
- print("wainting for drones to return")
- items = 0
- for i = 1,63 do
- if i == 1 then
- smin = sdrone
- else
- smin = sdump
- end
- while not turtle.detect() do
- sleep(2)
- end
- print("drone "..i.." / 63 arrived")
- while turtle.suck() do
- if turtle.getItemCount(16) > 1 then
- for s = 16,smin,-1 do
- turtle.select(s)
- items = items + turtle.getItemCount(s)
- while not turtle.dropDown() do
- sleep(2)
- end
- end
- end
- end
- for s = 16,smin,-1 do
- if turtle.getItemCount(s) > 0 then
- turtle.select(s)
- items = items + turtle.getItemCount(s)
- while not turtle.dropDown() do
- sleep(2)
- end
- end
- end
- turtle.select(sdrone)
- turtle.dig()
- end
- turtle.select(sdump)
- turtle.digDown()
- end
- time_end = os.clock()
- dur = time_end - time_start
- print("chunk cleared in "..dur.." seconds, resulting in "..items.." items)
Advertisement
Add Comment
Please, Sign In to add comment