Advertisement
peptide

Snap - Fixed

Oct 4th, 2013
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local settings={}
  2. settings["debug"]=false
  3. settings["reserveFuelLevel"]=10
  4. settings["nextStep"]=nil
  5. settings["rightNext"]=false
  6. settings["leftNext"]=false
  7.  
  8.  
  9. --CONSTANTS
  10. local cNone=0
  11. local cLeft=1
  12. local cYes=2
  13. local cNo=3
  14. local cPowerDown=4
  15. local cPowerUp=5
  16. local cForward=6
  17. local cReadyCharge=7
  18. local cComplete=8
  19. local cGoHome=9
  20. local cRight=10
  21. local cReboot=11
  22. local cShutdown=12
  23. local cClearSettings=13
  24. local cNeedFuel=14
  25. local cPairing=15
  26.  
  27. function loadSettings()
  28.    local file = fs.open("SnapBoxSettings","r")
  29.    local data = file.readAll()
  30.    file.close()
  31.    settings=textutils.unserialize(data)
  32. end
  33.  
  34. function saveSettings()
  35.     local file = fs.open("SnapBoxSettings","w")
  36.     file.write(textutils.serialize(settings))
  37.     file.close()
  38. end
  39.  
  40. function needFuel()
  41.     local level=turtle.getFuelLevel()
  42.     if level=="unlimited" or level>settings["reserveFuelLevel"] then
  43.         sendMessageToPartner(cNo)
  44.     else
  45.         sendMessageToPartner(cYes)
  46.     end
  47. end
  48.  
  49. function checkStatus()
  50.     if turtle.getItemCount(1)>0 then
  51.         print("Energy Cell OK")
  52.     else
  53.         print("Please insert Locked Energy Tesseract or Redstone Energy Cell into slot 1")
  54.         while turtle.getItemCount(1)==0 do
  55.             turtle.select(1)
  56.             sleep(0.1)
  57.         end
  58.     end
  59.     if turtle.getFuelLevel()~="unlimited" and turtle.getFuelLevel()<settings["reserveFuelLevel"] then
  60.         if turtle.getItemCount(16)>0 then
  61.             print("Fuel Level OK")
  62.         else
  63.             turtle.select(16)
  64.             print("Please insert fuel into slot 16")
  65.             while turtle.getItemCount(16)==0 do
  66.                 sleep(0.1)
  67.             end
  68.         end
  69.     end
  70. end
  71.  
  72. function waitForPartner()
  73.     print("Waiting for Box")
  74.     sendMessageToPartner(cPairing)
  75.     local message=nil
  76.     while message~=cPairing do
  77.         event = os.pullEvent("redstone")
  78.         message=redstone.getAnalogInput("front")
  79.     end
  80.     sendMessageToPartner(cPairing)
  81.     print("Off we go")
  82. end
  83.  
  84. function sendMessageToPartner(message)
  85.     if debug==true then
  86.         print("Sent "..message)
  87.     end
  88.     redstone.setAnalogOutput("front",message)
  89.     sleep(0.1)
  90.     redstone.setAnalogOutput("front",cNone)
  91. end
  92.  
  93. function forward()
  94.     sendMessageToPartner(cForward)
  95.     while turtle.forward()==false do
  96.         sleep(0.1)
  97.     end
  98.     if settings["rightNext"]==true then
  99.         turtle.turnRight()
  100.         settings["rightNext"]=false
  101.     end
  102.     if settings["leftNext"]==true then
  103.         turtle.turnLeft()
  104.         settings["leftNext"]=false
  105.     end
  106.     saveSettings()
  107. end
  108.  
  109. function readyCharge()
  110.     sendMessageToPartner(cReadyCharge)
  111.     while turtle.back()==false do
  112.         sleep(0.1)
  113.     end
  114.     settings["nextStep"]="wait-forward"
  115.     saveSettings()
  116.     waitForward()
  117. end
  118.  
  119. function waitForward()
  120.     sleep(2)
  121.     while turtle.detect()==true do
  122.         sleep(0.1)
  123.     end
  124.     sleep(2)
  125.     while turtle.forward()==false do
  126.         sleep(0.1)
  127.     end
  128.     settings["nextStep"]=nil
  129.     saveSettings()
  130.     sendMessageToPartner(cComplete)
  131. end
  132.  
  133. function powerUp()
  134.     turtle.select(1)
  135.     turtle.digDown()
  136.     sendMessageToPartner(cPowerUp)
  137. end
  138.  
  139. function powerDown()
  140.     turtle.select(1)
  141.     while turtle.placeDown()==false and turtle.getItemCount(1)>0 do
  142.             sleep(0.1)
  143.     end
  144.     sendMessageToPartner(cPowerDown)
  145. end
  146.  
  147. function waitForMessageFromPartner()
  148.     if settings["debug"]==true then
  149.         print("Waiting for message")
  150.     end
  151.     os.pullEvent("redstone")
  152.  
  153.     --check to see if Box has turned and moved - only works on left turns :(
  154.     local msg=redstone.getAnalogInput("front")
  155.  
  156.     if msg==cPowerDown then
  157.         powerDown()
  158.     elseif msg==cPowerUp then
  159.         powerUp()
  160.     elseif msg==cRight then
  161.         settings["rightNext"]=true
  162.         saveSettings()
  163.         sendMessageToPartner(cRight)
  164.     elseif msg==cLeft then
  165.         settings["leftNext"]=true
  166.         saveSettings()
  167.         sendMessageToPartner(cLeft)
  168.     elseif msg==cForward then
  169.         forward()
  170.     elseif msg==cClearSettings then
  171.         shell.run("clearsettings")
  172.     elseif msg==cShutdown then
  173.         os.shutdown()
  174.     elseif msg==cReboot then
  175.         os.reboot()
  176.     elseif msg==cNeedFuel then
  177.         needFuel()
  178.     elseif msg==cReadyCharge then
  179.         readyCharge()
  180.     end
  181. end
  182.  
  183. function checkResume()
  184.     local file=fs.open("SnapBoxSettings","r")
  185.     if file==nil then
  186.         return false
  187.     else
  188.         file.close()
  189.         return true
  190.     end
  191. end
  192.  
  193.  
  194. -----MAIN PROGRAM
  195. --Hack to fix situations where Snap gets left behind
  196. turtle.forward()
  197.  
  198. term.clear()
  199. term.setCursorPos(1,1)
  200.  
  201. --Check for a resume
  202. if checkResume()==false then
  203.     --Check to make sure it has all the items it needs
  204.     checkStatus()
  205.  
  206.     --initial refuel
  207.     turtle.select(16)
  208.     turtle.refuel()
  209.     turtle.select(1)
  210.  
  211.     --wait to find partner
  212.     waitForPartner()
  213.     saveSettings()
  214. else
  215.     print("Resuming")
  216.     loadSettings()
  217. end
  218.  
  219. while true do
  220.     if settings["nextStep"]=="wait-forward" then
  221.         waitForward()
  222.     end
  223.     waitForMessageFromPartner()
  224. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement