Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- Automatic King Tree Farmer for Drones
- -- Need a drone with one solar and one inventory upgrade.
- local drone = component.proxy(component.list("drone")())
- local function sleep(timeout)
- checkArg(1, timeout, "number", "nil")
- local deadline = computer.uptime() + (timeout or 0)
- repeat
- computer.pullSignal(deadline - computer.uptime())
- until computer.uptime() >= deadline
- end
- local function checkE()
- local en = computer.energy()
- return en
- end
- local function drop()
- drone.drop(2)
- end
- local function dropAll()
- for i=4,2,-1
- do
- drone.select(i)
- drop()
- end
- drone.select(1)
- end
- local function move(x,y,z)
- drone.move(x,y,z)
- travelx = travelx + x
- travely = travely + y
- travelz = travelz + z
- end
- local function beep()
- computer.beep(261, 0.6)
- computer.beep(329, 0.5)
- computer.beep(392, 0.3)
- computer.beep(523, 0.7)
- end
- local function swing()
- for i=5,0,-1 do
- drone.swing(i)
- end
- sleep(0.2)
- end
- local function swingHor()
- for i=1,5,1 do
- drone.swing(i)
- end
- sleep(0.2)
- end
- local function suck(x)
- drone.suck(x)
- end
- local function suckAll()
- for i=0,5,1 do
- suck(i)
- end
- end
- local function layer(n)
- for i=n,1,-1 do
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(-1,0,0)
- end
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(0,0,-1)
- end
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(1,0,0)
- end
- for i=3,1,-1 do
- suckAll()
- swing()
- move(0,0,1)
- end
- swing()
- sleep(1)
- move(0,-1,0)
- sleep(0.3)
- suckAll()
- end
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(-1,0,0)
- end
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(0,0,-1)
- end
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(1,0,0)
- end
- for i=3,1,-1 do
- suckAll()
- swingHor()
- move(0,0,1)
- end
- end
- local function placeD()
- drone.place(0)
- end
- local function plant()
- drone.setStatusText("PLANTING")
- drone.select(1)
- move(-8,1,0)
- sleep(2)
- placeD()
- move(-1,0,0)
- sleep(0.3)
- placeD()
- move(0,0,-1)
- sleep(0.3)
- placeD()
- move(1,0,0)
- sleep(0.3)
- placeD()
- returnHome()
- end
- local function harvest()
- drone.setStatusText("CUTTING")
- move(0,30,0)
- sleep(3)
- move(-7,0,1)
- sleep(2)
- layer(30)
- swingHor()
- move(0,0,-1)
- for i=1,4,1 do
- move(1,0,0)
- swingHor()
- suckAll()
- end
- returnHome()
- dropAll()
- sleep(2)
- end
- local function resetP()
- travelx, travely, travelz = 0,0,0
- end
- function returnHome()
- travelx = travelx * -1
- travely = travely * -1
- travelz = travelz * -1
- sleep(1)
- move(travelx,travely,travelz)
- sleep(2)
- resetP()
- end
- local function checkTree()
- resetP()
- job = 0
- drone.setStatusText("CHECKING")
- for i=1,7,1 do
- local result = drone.detect(4)
- if result then
- job = 2
- break
- end
- sleep(0.5)
- move(-1,0,0)
- sleep(0.5)
- end
- local resultA = drone.detect(4)
- move(0,1,0)
- sleep(0.5)
- local resultB = drone.detect(4)
- if not resultA then
- job = 1
- end
- if resultA == true and resultB == true then
- job = 2
- end
- returnHome()
- sleep(1)
- end
- --start
- computer.beep(80, 2)
- sleep(0.5)
- resetP()
- job = 0
- beep()
- drone.setStatusText("ROM\nOK.v4.14.")
- sleep(1)
- -- Main loop
- while true do
- while true do
- local energy = checkE()
- if energy < 1000 then
- drone.setLightColor(0xFF9969)
- drone.setStatusText("LOW\nENERGY")
- computer.beep(878, 1)
- sleep(22)
- end
- if energy >= 1000 then
- --pass
- break
- end
- end
- drone.setLightColor(0xD0DE58)
- sleep(1)
- checkTree()
- drone.setStatusText(tostring(job))
- sleep(0.3)
- if job == 1 then
- plant()
- end
- if job == 2 then
- harvest()
- plant()
- end
- drone.setStatusText("zZzZzZz")
- sleep(30)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement