Advertisement
Guest User

biggs

a guest
Aug 23rd, 2014
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.49 KB | None | 0 0
  1. local partnerID   = 0
  2. local debug       = false
  3.  
  4. --Constants
  5. local MY_ID              = os.getComputerID()
  6. local MINING_DELAY       = 4
  7. local CHARGE_LEVEL       = 500
  8. local DIG_DELAY          = 1
  9. local ENDER_CHEST        = 2
  10. local FUEL               = 16
  11. local MINING_WELL        = 1
  12. local RESERVE_FUEL_LEVEL = 10
  13. local FUEL_DELAY         = 10
  14. local FUEL_RATION        = 4
  15. local CONDUIT            = 3
  16. local CHUNK_LOADER_1     = 4
  17. local CHUNK_LOADER_2     = 5
  18.  
  19. function checkItem(item)
  20.    
  21.     if(turtle.getItemCount(item.slot) < 1) then
  22.         print("\t->"..item.name..": FAILURE")
  23.         print("\t\tPlease insert a "..item.name.." into slot "..item.slot)
  24.        
  25.         --If it doesn't exist, prompt for it and wait until it gets it
  26.         turtle.select(item.slot)
  27.         while(turtle.getItemCount(item.slot) == 0) do
  28.             sleep(1)
  29.         end
  30.     end
  31.    
  32.     print("\t->"..item.name..": OK")
  33. end
  34.  
  35.  
  36. function checkStatus()
  37.  
  38.     print("-------Checking Biggs's Schedule-------")
  39.     --Check tor the Mining Well
  40.     checkItem{slot=MINING_WELL,    name="mining well"}
  41.  
  42.     --Check for Ender Chest
  43.     checkItem{slot=ENDER_CHEST,    name="ender chest"}
  44.  
  45.     --Check for Redstone Energy Conduit
  46.     checkItem{slot=CONDUIT,        name="redstone energy conduit"}
  47.  
  48.     --Check for Chunker Loader 1
  49.     checkItem{slot=CHUNK_LOADER_1, name="chunk loader 1"}
  50.  
  51.     --Check for Chunker Loader 2
  52.     checkItem{slot=CHUNK_LOADER_2, name="chunk loader 2"}
  53.  
  54.     checkFuel()
  55.     print("----------BIGGS READY TO ROLL----------")
  56. end
  57.  
  58. function pairWithWedge()
  59.     rednet.open("right")
  60.     rednet.broadcast("Waiting to pair with partner")
  61.  
  62.     local id,msg, distance
  63.     while (id==nil or id==MY_ID) do
  64.         id, msg, distance = rednet.receive()
  65.     end
  66.  
  67.     partnerID = id
  68.     rednet.broadcast("Partner found")
  69.    
  70. end
  71.  
  72. function sendMessageToWedge(message)
  73.     rednet.send(partnerID,message)
  74. end
  75.  
  76. function waitForWedge(message)
  77.    
  78.     local id, msg, distance
  79.     while(id==nil or id==MY_ID or id ~= partnerID) do
  80.         id, msg, distance = rednet.receive()
  81.     end
  82.    
  83.     if (msg ~= message) then
  84.         print("ERROR - Unexpected Partner Message")
  85.         print("Expected:" .. message)
  86.         print("Received: .. msg")
  87.         shell.exit()
  88.     end
  89. end
  90.  
  91. function moveForward()
  92.     while(turtle.forward()==false) do
  93.         turtle.dig()
  94.         sleep(DIG_DELAY)
  95.     end
  96. end
  97.  
  98. function moveUp()
  99.     while(turtle.up()==false) do
  100.         turtle.digUp()
  101.         sleep(DIG_DELAY)
  102.     end
  103. end
  104.  
  105. function turn180()
  106.     turtle.turnLeft()
  107.     turtle.turnLeft()
  108. end
  109.  
  110. function placeItem(item)
  111.     turtle.select(item.slot)
  112.  
  113.     while(turtle.placeDown() == false) do
  114.         turtle.digDown()
  115.         sleep(DIG_DELAY)
  116.     end
  117. end
  118.  
  119. function digItem(item)
  120.     turtle.select(item.slot)
  121.  
  122.     --If there's something already in the slot, junk it
  123.     if(turtle.getItemCount(item.slot) > 0) then
  124.         turtle.dropDown()
  125.     end
  126.  
  127.     turtle.digDown()
  128. end
  129.  
  130. function refuel()
  131.          
  132.     turtle.select(FUEL)
  133.     while(turtle.refuel(FUEL_RATION) == false) do
  134.         print("Error: Not enough fuel in slot 16 to refuel! Minimal 4")
  135.         sleep(FUEL_DELAY)
  136.     end
  137.    
  138.     turtle.select(1)
  139. end
  140.  
  141. function checkFuel()
  142.     if(turtle.getFuelLevel() < RESERVE_FUEL_LEVEL) then
  143.         print("\t->Fuel: FAILURE")
  144.         print("\t\tOut of fuel, attempting refuel")
  145.         refuel()
  146.     end
  147. end
  148.  
  149. function leapFrogLoaders()
  150.     --Two run modes
  151.     --The first is if no loaders have been placed, where the turtle will set down an initial loader.
  152.  
  153.     --The second is if there's already a loader, where the turtle will put down a loader after the first
  154.     --then go back and pick the first up.
  155.  
  156.     if(turtle.getItemCount(CHUNK_LOADER_1) == 1 and turtle.getItemCount(CHUNK_LOADER_2) == 1) then
  157.         --Mode 1
  158.  
  159.         turtle.select(CHUNK_LOADER_1)
  160.         turtle.turnRight()
  161.         turtle.forward()
  162.         placeItem{slot=CHUNK_LOADER_1}
  163.         turtle.back()
  164.         turtle.turnLeft()
  165.     else
  166.         if(turtle.getItemCount(CHUNK_LOADER_1) == 1) then
  167.             turtle.select(CHUNK_LOADER_1)
  168.         else
  169.             turtle.select(CHUNK_LOADER_2)
  170.         end
  171.  
  172.         turtle.turnRight()
  173.         turtle.forward()
  174.         placeItem{slot=turtle.getSelectedSlot()}
  175.         turtle.turnRight()
  176.         turtle.forward()
  177.         if(turtle.getSelectedSlot == CHUNK_LOADER_1) then
  178.             turtle.select(CHUNK_LOADER_2)
  179.         else
  180.             turtle.select(CHUNK_LOADER_1)
  181.         end
  182.  
  183.         turtle.digDown()
  184.         turn180()
  185.         turtle.forward()
  186.         turtle.turnLeft()
  187.         turtle.forward()
  188.         turtle.turnRight()
  189.     end
  190.  
  191. end
  192.  
  193. --Check to make sure it has all the items it needs
  194. checkStatus()
  195.  
  196. --Wait to find Wedge
  197. pairWithWedge()
  198.  
  199. --Main loop
  200. while true do
  201.     checkFuel()
  202.  
  203.     placeItem{slot=MINING_WELL, "Mining well"}
  204.     moveUp()
  205.  
  206.     placeItem{slot=ENDER_CHEST, "Ender chest"}
  207.     turtle.back()
  208.  
  209.     turtle.down()
  210.     placeItem{slot=CONDUIT, "Energy Conduit"}        
  211.    
  212.     leapFrogLoaders()
  213.  
  214.     sendMessageToWedge("powerdown")
  215.     waitForWedge("powerdown")
  216.     sleep(MINING_DELAY)
  217.  
  218.     sendMessageToWedge("powerup")
  219.     waitForWedge("powerup")
  220.  
  221.     digItem{slot=CONDUIT}
  222.     turtle.up()
  223.     turtle.forward()    
  224.  
  225.     digItem{slot=ENDER_CHEST}
  226.     turtle.down()
  227.  
  228.     digItem{slot=MINING_WELL}
  229.     moveForward()
  230.    
  231.     sendMessageToWedge("forward")
  232.     waitForWedge("forward")
  233. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement