Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --#############################################################################
- --#
- --# This program will take 4 computers, 4 wireless modems a disk drive and a
- --# disk to build a gps tower at max height
- --#
- --#############################################################################
- local fNames = { "south", "west", "north", "east" }
- local fIndex = 0
- local pos = {}
- local yStart = 0
- local slotComputer = 1
- local slotModem = 2
- local slotFuel = 3
- local slotDisk = 4
- local slotDrive = 5
- local diskSide = ""
- local hitSky = false
- pos[1], pos[2], pos[3] = "", "", ""
- local move = { east = {1, 0, 0}, west = {-1, 0, 0}, south = {0, 0, 1}, north = {0, 0, -1} }
- function isnumber(test)
- --print(type(test))
- if type(test) == "number" then
- return true
- else
- return false
- end
- end
- function isdirection(test)
- if test == "east" or test == "west" or test == "north" or test == "south" then
- for i = 1,4 do
- if test == fNames[i] then
- fIndex = i
- end
- end
- return true
- else
- return false
- end
- end
- function moveUp()
- while not hitSky do
- moved, dug, attack = false, false, false
- moved = turtle.up()
- if not moved then
- if turtle.detectUp() then
- dug = turtle.digUp()
- else
- attacked = turtle.attackUp()
- end
- else
- pos[2] = pos[2] + 1
- end
- hitSky = not (moved or dug or attacked)
- print(pos[1].." "..pos[2].." "..pos[3].." "..f)
- end
- end
- function moveDown()
- while not turtle.down() do
- if turtle.detectDown() then
- turtle.digDown()
- else
- turtle.attackDown()
- end
- end
- pos[2] = pos[2] - 1
- print(pos[1].." "..pos[2].." "..pos[3].." "..f)
- end
- function moveForward()
- while not turtle.forward() do
- if turtle.detect() then
- turtle.dig()
- else
- turtle.attack()
- end
- end
- for i = 1,3 do
- pos[i] = pos[i] + move[f][i]
- end
- print(pos[1].." "..pos[2].." "..pos[3].." "..f)
- end
- function left()
- turtle.turnLeft()
- fIndex = fIndex - 1
- if fIndex == 0 then
- fIndex = 4
- end
- f = fNames[fIndex]
- print(pos[1].." "..pos[2].." "..pos[3].." "..f)
- end
- function right()
- turtle.turnRight()
- fIndex = fIndex + 1
- if fIndex == 5 then
- fIndex = 1
- end
- f = fNames[fIndex]
- print(pos[1].." "..pos[2].." "..pos[3].." "..f)
- end
- if turtle then -- build a gps tower
- print("i'm a turtle")
- print("provide me with the following items:")
- print("slot 1: 4 computers")
- print("slot 2: 4 wireless modems")
- print("slot 3: enough fuel to get me to max y and back. < insert calculated amount here >")
- print("what are my current coordinates? use the integers on the f3 screen or REI's minimap")
- while not isnumber(pos[1]) do
- print("x = ")
- pos[1] = tonumber(read())
- if not isnumber(pos[1]) then
- print("that's not a number")
- end
- end
- while not isnumber(pos[2]) do
- print("y = ")
- pos[2] = tonumber(read())
- if not isnumber(pos[2]) then
- print("that's not a number")
- end
- end
- yStart = pos[2]
- while not isnumber(pos[3]) do
- print("z = ")
- pos[3] = tonumber(read())
- if not isnumber(pos[3]) then
- print("that's not a number")
- end
- end
- while not isdirection(f) do
- print("which direction am i facing?")
- f = read()
- if not isdirection(f) then
- print("that's not a valid direction")
- end
- end
- -- check inventory (can only check for matching numbers atm)
- if turtle.getItemCount(1) == 4 and turtle.getItemCount(2) == 4 then
- --get disk from drive
- for k,v in pairs(redstone.getSides()) do
- if disk.isPresent(v) then
- diskSide = v
- print(diskSide)
- end
- end
- if diskSide == "left" then
- turtle.turnLeft()
- turtle.suck()
- turtle.dig()
- turtle.turnRight()
- elseif diskSide == "right" then
- turtle.turnRight()
- turtle.suck()
- turtle.dig()
- turtle.turnLeft()
- elseif diskSide == "top" then
- turtle.suckUp()
- turtle.digUp()
- elseif diskSide == "bottom" then
- turtle.suckDown()
- turtle.digDown()
- elseif diskSide == "front" then
- turtle.suck()
- turtle.dig()
- elseif diskSide == "back" then
- turtle.turnLeft()
- turtle.turnLeft()
- turtle.suck()
- turtle.dig()
- turtle.turnLeft()
- turtle.turnLeft()
- end
- turtle.select(slotFuel)
- while turtle.getFuelLevel() < 64 + 2*(254-pos[2]) do
- turtle.refuel(1)
- end
- moveUp()
- -- build gps array
- for c = 1,2 do
- for d = 1,2 do
- for m = 1,3 do
- moveForward()
- end
- turtle.select(slotComputer)
- turtle.place()
- local gpspos = {}
- for i = 1,3 do
- gpspos[i] = pos[i] + move[f][i]
- end
- left()
- moveForward()
- moveForward()
- right()
- moveForward()
- right()
- turtle.select(slotModem)
- turtle.place()
- right()
- moveForward()
- left()
- moveForward()
- moveForward()
- moveForward()
- left()
- turtle.select(slotDrive)
- turtle.place()
- turtle.select(slotDisk)
- turtle.drop()
- --write gps program to disk
- local labelString = "os.setComputerLabel('gps_"..gpspos[1].."_"..gpspos[2].."_"..gpspos[3].."')"
- local gpsString = "shell.run('gps','host',"..gpspos[1]..","..gpspos[2]..","..gpspos[3]..")"
- f = fs.open("disk/gpsstartup", "w")
- f.writeLine(labelString)
- f.writeLine(gpsString)
- f.close()
- -- turn on computer
- left()
- moveForward()
- right()
- m = peripheral.wrap("front")
- m.turnOn()
- -- retreive disk and drive
- right()
- moveForward()
- left()
- turtle.select(slotDisk)
- turtle.suck()
- turtle.select(slotDrive)
- turtle.dig()
- -- reboot gps computer
- left()
- moveForward()
- --m = peripheral.wrap("right")
- --m.reboot()
- -- go back to center
- left()
- for i = 1,3 do
- moveForward()
- end
- end
- moveDown()
- moveDown()
- left()
- end
- end
- while pos[2] > yStart do
- moveDown()
- end
- else
- print("i'm a computer")
- fs.move("disk/gpsstartup","startup")
- sleep(5)
- os.reboot()
- end
Advertisement
Add Comment
Please, Sign In to add comment