Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- North = 0
- East = 1
- South = 2
- West = 3
- minFuel = 80
- minSafeZone = 99
- minEmptySlot = 1
- lastReport = ""
- data = {
- pos = {x = 15, y = 64, z = 51, h = 0},
- target = {x = 0, y = 0, z = 0, h = 0},
- home = {x = 15, y = 64, z = 51, h = 0},
- slot = {
- current = 1,
- fuel = 1,
- last = 1,
- },
- locs = {},
- safeZone = minSafeZone + os.getComputerID()
- }
- --UTILS--
- function report(msg, clear)
- if clear then
- term.clear()
- term.setCursorPos(1, 1)
- end
- if msg ~= lastReport then
- print(msg)
- end
- lastReport = msg
- local x, y = term.getCursorPos()
- if y > 10 then
- y = 1
- term.clear()
- end
- term.setCursorPos(1, 12)
- print("X: "..data.pos.x.." Y: "..data.pos.y.." Z: "..data.pos.z.." H: "..data.pos.h)
- term.setCursorPos(1, y)
- end
- function selectSlot(s)
- turtle.select(s)
- local info = turtle.getItemDetail()
- local count = turtle.getItemCount()
- data.slot.last = data.slot.current
- data.slot.current = s
- if info then
- report("Item Data:")
- report("Item Name: "..info.name)
- report("Amount : "..count)
- end
- end
- function selectLast()
- selectSlot(data.slot.last)
- end
- function fillSlot(id, count)
- count = count or 64
- selectSlot(id)
- repeat
- turtle.suck(1)
- until turtle.getItemCount(id) == count
- end
- function checkFuel()
- local fuelCount = turtle.getFuelLevel()
- if fuelCount < minFuel then
- report("Refuelling...", true)
- selectSlot(data.slot.fuel)
- while fuelCount < minFuel do
- fuelCount = turtle.getFuelLevel()
- turtle.refuel(1)
- report("Fuel level: "..fuelCount..".")
- end
- end
- end
- function emptyAll()
- for i = minEmptySlot, 16 do
- if i ~= data.slot.fuel then
- turtle.select(i)
- turtle.drop()
- end
- end
- end
- --MOVEMENT--
- function fd(dist, dig)
- dist = dist or 1
- while dist > 0 do
- if dig then
- turtle.dig()
- end
- checkFuel()
- if turtle.forward() then
- dist = dist - 1
- if data.pos.h == North then
- data.pos.z = data.pos.z - 1
- elseif data.pos.h == East then
- data.pos.x = data.pos.x + 1
- elseif data.pos.h == South then
- data.pos.z = data.pos.z + 1
- else
- data.pos.x = data.pos.x - 1
- end
- report("Moving forward.")
- else
- report("I'm stuck!")
- end
- end
- end
- function bk(dist)
- dist = dist or 1
- while dist > 0 do
- checkFuel()
- if turtle.back() then
- dist = dist - 1
- if data.pos.h == North then
- data.pos.z = data.pos.z + 1
- elseif data.pos.h == East then
- data.pos.x = data.pos.x - 1
- elseif data.pos.h == South then
- data.pos.z = data.pos.z - 1
- else
- data.pos.x = data.pos.x + 1
- end
- report("Moving backward.")
- else
- report("I'm stuck!")
- end
- end
- end
- function up(dist, dig)
- dist = dist or 1
- while dist > 0 do
- if dig then
- turtle.digUp()
- end
- checkFuel()
- if turtle.up() then
- dist = dist - 1
- data.pos.y = data.pos.y + 1
- report("Moving up.")
- else
- report("I'm stuck!")
- end
- end
- end
- function dn(dist, dig)
- dist = dist or 1
- while dist > 0 do
- if dig then
- turtle.digDown()
- end
- checkFuel()
- if turtle.down() then
- dist = dist - 1
- data.pos.y = data.pos.y - 1
- report("Moving down.")
- else
- report("I'm stuck!")
- end
- end
- end
- function rt(int)
- for i = 1, int do
- turtle.turnRight()
- data.pos.h = (data.pos.h + 1) % 4
- end
- end
- function lt(int)
- for i = 1, int do
- turtle.turnLeft()
- data.pos.h = (data.pos.h - 1) % 4
- end
- end
- function face(dir)
- while data.pos.h ~= dir do
- turtle.turnRight()
- data.pos.h = (data.pos.h + 1) % 4
- report("Heading: "..data.pos.h)
- end
- end
- function findX(t, dig)
- if t < data.pos.x then
- face(West)
- elseif t > data.pos.x then
- face(East)
- end
- while t ~= data.pos.x do
- fd(1, dig)
- end
- end
- function findZ(t, dig)
- if t < data.pos.z then
- face(North)
- elseif t > data.pos.z then
- face(South)
- end
- while t ~= data.pos.z do
- fd(1, dig)
- end
- end
- function findY(t, dig)
- if t > data.pos.y then
- while t ~= data.pos.y do
- up(1, dig)
- end
- elseif t < data.pos.y then
- while t ~= data.pos.y do
- dn(1, dig)
- end
- end
- end
- function to(x, y, z, h)
- findY(data.safeZone)
- findX(x)
- findZ(z)
- findY(y, true)
- face(h)
- end
- function toNoSafety(x, y, z, h)
- findX(x, true)
- findZ(z, true)
- findY(y, true)
- face(h)
- end
- function from(x, y, z, h)
- findY(data.safeZone)
- findZ(z)
- findX(x)
- findY(y, true)
- face(h)
- end
- function setHome(x, y, z, h)
- data.home = {
- x = x,
- y = y,
- z = z,
- h = h,
- }
- end
- function setReturnPoint()
- data.target = {
- x = data.pos.x,
- y = data.pos.y,
- z = data.pos.z,
- h = data.pos.h,
- }
- end
- function getTarget()
- return data.target.x, data.target.y, data.target.z, data.target.h
- end
- function unload(ret)
- if ret then
- setReturnPoint()
- end
- from(data.home.x, data.home.y, data.home.z, data.home.h)
- rt(1)
- emptyAll()
- rt(2)
- fillSlot(data.slot.fuel)
- rt(1)
- if ret then
- to(data.target.x, data.target.y, data.target.z, data.target.h)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement