Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local settings={}
- settings["debug"]=false
- settings["reserveFuelLevel"]=10
- settings["nextStep"]=nil
- settings["rightNext"]=false
- settings["leftNext"]=false
- --CONSTANTS
- local cNone=0
- local cLeft=1
- local cYes=2
- local cNo=3
- local cPowerDown=4
- local cPowerUp=5
- local cForward=6
- local cReadyCharge=7
- local cComplete=8
- local cGoHome=9
- local cRight=10
- local cReboot=11
- local cShutdown=12
- local cClearSettings=13
- local cNeedFuel=14
- local cPairing=15
- function loadSettings()
- local file = fs.open("SnapBoxSettings","r")
- local data = file.readAll()
- file.close()
- settings=textutils.unserialize(data)
- end
- function saveSettings()
- local file = fs.open("SnapBoxSettings","w")
- file.write(textutils.serialize(settings))
- file.close()
- end
- function needFuel()
- local level=turtle.getFuelLevel()
- if level=="unlimited" or level>settings["reserveFuelLevel"] then
- sendMessageToPartner(cNo)
- else
- sendMessageToPartner(cYes)
- end
- end
- function checkStatus()
- if turtle.getItemCount(1)>0 then
- print("Energy Cell OK")
- else
- print("Please insert Locked Energy Tesseract or Redstone Energy Cell into slot 1")
- while turtle.getItemCount(1)==0 do
- turtle.select(1)
- sleep(0.1)
- end
- end
- if turtle.getFuelLevel()~="unlimited" and turtle.getFuelLevel()<settings["reserveFuelLevel"] then
- if turtle.getItemCount(16)>0 then
- print("Fuel Level OK")
- else
- turtle.select(16)
- print("Please insert fuel into slot 16")
- while turtle.getItemCount(16)==0 do
- sleep(0.1)
- end
- end
- end
- end
- function waitForPartner()
- print("Waiting for Box")
- sendMessageToPartner(cPairing)
- local message=nil
- while message~=cPairing do
- event = os.pullEvent("redstone")
- message=redstone.getAnalogInput("front")
- end
- sendMessageToPartner(cPairing)
- print("Off we go")
- end
- function sendMessageToPartner(message)
- if debug==true then
- print("Sent "..message)
- end
- redstone.setAnalogOutput("front",message)
- sleep(0.1)
- redstone.setAnalogOutput("front",cNone)
- end
- function forward()
- sendMessageToPartner(cForward)
- while turtle.forward()==false do
- sleep(0.1)
- end
- if settings["rightNext"]==true then
- turtle.turnRight()
- settings["rightNext"]=false
- end
- if settings["leftNext"]==true then
- turtle.turnLeft()
- settings["leftNext"]=false
- end
- saveSettings()
- end
- function readyCharge()
- sendMessageToPartner(cReadyCharge)
- while turtle.back()==false do
- sleep(0.1)
- end
- settings["nextStep"]="wait-forward"
- saveSettings()
- waitForward()
- end
- function waitForward()
- sleep(2)
- while turtle.detect()==true do
- sleep(0.1)
- end
- sleep(2)
- while turtle.forward()==false do
- sleep(0.1)
- end
- settings["nextStep"]=nil
- saveSettings()
- sendMessageToPartner(cComplete)
- end
- function powerUp()
- turtle.select(1)
- turtle.digDown()
- sendMessageToPartner(cPowerUp)
- end
- function powerDown()
- turtle.select(1)
- while turtle.placeDown()==false and turtle.getItemCount(1)>0 do
- sleep(0.1)
- end
- sendMessageToPartner(cPowerDown)
- end
- function waitForMessageFromPartner()
- if settings["debug"]==true then
- print("Waiting for message")
- end
- os.pullEvent("redstone")
- --check to see if Box has turned and moved - only works on left turns :(
- local msg=redstone.getAnalogInput("front")
- if msg==cPowerDown then
- powerDown()
- elseif msg==cPowerUp then
- powerUp()
- elseif msg==cRight then
- settings["rightNext"]=true
- saveSettings()
- sendMessageToPartner(cRight)
- elseif msg==cLeft then
- settings["leftNext"]=true
- saveSettings()
- sendMessageToPartner(cLeft)
- elseif msg==cForward then
- forward()
- elseif msg==cClearSettings then
- shell.run("clearsettings")
- elseif msg==cShutdown then
- os.shutdown()
- elseif msg==cReboot then
- os.reboot()
- elseif msg==cNeedFuel then
- needFuel()
- elseif msg==cReadyCharge then
- readyCharge()
- end
- end
- function checkResume()
- local file=fs.open("SnapBoxSettings","r")
- if file==nil then
- return false
- else
- file.close()
- return true
- end
- end
- -----MAIN PROGRAM
- --Hack to fix situations where Snap gets left behind
- turtle.forward()
- term.clear()
- term.setCursorPos(1,1)
- --Check for a resume
- if checkResume()==false then
- --Check to make sure it has all the items it needs
- checkStatus()
- --initial refuel
- turtle.select(16)
- turtle.refuel()
- turtle.select(1)
- --wait to find partner
- waitForPartner()
- saveSettings()
- else
- print("Resuming")
- loadSettings()
- end
- while true do
- if settings["nextStep"]=="wait-forward" then
- waitForward()
- end
- waitForMessageFromPartner()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement