Friday, December 28, 2012

New Turtle Script

So I've been doing some work with turtles since the update of Feed The Beast and I have what appears to be a fairly decent script worked out. It has many possible uses. I originally intended to use it to do branches for my mine, but it also works as a tunnel maker or bridge builder. It digs a 2 tall tunnel and makes sure there's walls, floors, and ceilings. You feed it with fuel, torches and blocks and it will go as far as it can. If it runs out of blocks it could have some issues. Below is the code.


-- Clearing Terminal
term.clear()
term.setCursorPos(1,1)

-- Setting up Variables
local tArgs = { ... }
local fuel = 1
local torch = 2
local block = 3
local gone = 0

if #tArgs ~= 1 then
    -- Missing Length Argument
    print("Usage: Branch <length>")
    print("Slot 1: Fuel")
    print("Slot 2: Torches")
    print("Slot 3: Blocks")
    error()
end

local length = tArgs[1]

--Missing Items Check
if (turtle.getItemCount(fuel) < 1 or turtle.getItemCount(torch) < 1 or turtle.getItemCount(block) < 1) then
    print("Missing Critical Item")
    error()
end

-- Fuel Checking Function
function tFuel(moved,f)
    if turtle.getFuelLevel() < (moved + 10) then
        turtle.select(f)
        if not turtle.refuel(1) then
            print("Need Fuel")
            finished(moved)
        end
    end
end

-- Drop Items Function
function dump()
    print("Dumping Goods")
    for i = 4, 16 do
        turtle.select(i)
        turtle.drop()
    end
end

--Checks for full inventory
function slotCheck(moved)
    local slots = 0
    for i = 4, 16 do
        turtle.select(i)
        if turtle.getItemCount(i) > 0 then slots = slots + 1 end
    end
    if slots == 12 then finished(moved) end
end

-- Return Function
function finished(m)
    print("Returning after " .. m + 1 .. " blocks")
    turtle.up()
    turtle.turnRight()
    turtle.turnRight()
    for i = 0, m do
        turtle.forward()
    end
    turtle.down()
    dump()
    error()
end

--Check for Walls
function wallCheck(b)
    turtle.turnRight()
    if not turtle.detect() then
        turtle.select(b)
        turtle.place()
    end
    turtle.turnLeft()
    turtle.turnLeft()
    if not turtle.detect() then
        turtle.select(b)
        turtle.place()
    end
    turtle.turnRight()
end

print("Starting tunnel " .. length .. " blocks long")

for g = 1, length, 2 do
    tFuel(g, fuel)
    while turtle.detect() do
        turtle.dig()
        sleep(0.5)
    end
    turtle.forward()
    if not turtle.detectDown() then
        turtle.select(block)
        turtle.placeDown()
    end
    wallCheck(block)
    while turtle.detectUp() do
        turtle.digUp()
        sleep(0.5)
    end
    turtle.up()
    wallCheck(block)
    if g%5 == 0 then
        turtle.select(torch)
        turtle.placeDown()
    end
    while turtle.detectUp() do
        turtle.digUp()
        sleep(0.5)
    end
    turtle.up()
    wallCheck(block)
    if not turtle.detectUp() then
        turtle.select(block)
        turtle.placeUp()
    end
    while turtle.detect() do
        turtle.dig()
        sleep(0.5)
    end
    turtle.forward()
    wallCheck(block)
    if not turtle.detectUp() then
        turtle.select(block)
        turtle.placeUp()
    end
    turtle.digDown()
    turtle.down()
    wallCheck(block)
    turtle.digDown()
    turtle.down()
    wallCheck(block)
    if not turtle.detectDown() then
        turtle.select(block)
        turtle.placeDown()
    end
    gone = g
    slotCheck(gone)
end

finished(gone)

No comments:

Post a Comment