collinmurphy

rechargeBox

May 21st, 2013
1,499
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.92 KB | None | 0 0
  1. local miningTime=4
  2. local partnerID=0
  3. local myID=os.getComputerID()
  4. local digDelay=1
  5. local reserveFuelLevel=10
  6. local chargeLevel=500
  7. local debug=false
  8.  
  9. function checkStatus()
  10.     if debug==true then
  11.         print("In checkStatus")
  12.     end
  13.  
  14.     if turtle.getItemCount(1)>0 then
  15.         print("Ender Chest OK")
  16.     else
  17.         print("Please insert an Ender Chest into slot 1")
  18.         while turtle.getItemCount(1)==0 do
  19.             turtle.select(1)
  20.             sleep(1)
  21.         end
  22.     end
  23.     if turtle.getItemCount(2)>0 then
  24.         print("Mining Well OK")
  25.     else
  26.         print("Please insert Mining Well into slot 2")
  27.         while turtle.getItemCount(2)==0 do
  28.             turtle.select(2)
  29.             sleep(1)
  30.         end
  31.     end
  32.     if turtle.getItemCount(3)>0 then
  33.         print("Charge Station OK")
  34.     else
  35.         turtle.select(3)
  36.         print("Please insert Advanced Charge Station (or higher) into slot 3")
  37.         while turtle.getItemCount(3)==0 do
  38.             sleep(1)
  39.         end
  40.     end
  41.     if turtle.getFuelLevel()<reserveFuelLevel then
  42.         if turtle.getItemCount(16)>0 then
  43.             print("Fuel Level OK")
  44.         else
  45.             turtle.select(16)
  46.             print("Please insert fuel in slot 16")
  47.             while turtle.getItemCount(16)==0 do
  48.                 sleep(1)
  49.             end
  50.         end
  51.     end
  52.  
  53. end
  54.  
  55. function waitForPartner()
  56.     if debug==true then
  57.         print("In waitForPartner")
  58.     end
  59.     rednet.open("right")
  60.     print("Waiting to pair with partner")
  61.     rednet.broadcast()
  62.     local id, msg, distance
  63.     while id==nil or id==myID do
  64.         id, msg, distance = rednet.receive()
  65.     end
  66.     rednet.broadcast()
  67.     print("Partner Found")
  68.     if debug==true then
  69.         print(id)
  70.     end
  71.     partnerID=id
  72. end
  73.  
  74. function sendMessageToPartner(message)
  75.     if debug==true then
  76.         print("Sending Message " .. message)
  77.     end
  78.     rednet.send(partnerID,message)
  79. end
  80.  
  81. function waitForMessageFromPartner(message)
  82.     if debug==true then
  83.         print("Waiting for message " .. message)
  84.     end
  85.     local id, msg, distance
  86.     while id==nil or id==myID or id ~= partnerID do
  87.         id, msg, distance = rednet.receive()
  88.     end
  89.     if msg~=message then
  90.         print("ERROR - Unexpected Partner Message")
  91.         print("Expected:" .. message)
  92.         print("Received: .. msg")
  93.         shell.exit()
  94.     end
  95. end
  96.  
  97. function moveForward()
  98.     if debug==true then
  99.         print("trying to move forward")
  100.     end
  101.     while turtle.detect() do
  102.         turtle.dig()
  103.         sleep(digDelay)
  104.     end
  105.     while turtle.forward()==false do
  106.         turtle.dig()
  107.         sleep(digDelay)
  108.         turtle.attack()
  109.     end
  110. end
  111.  
  112. function moveUp()
  113.     if debug==true then
  114.         print("trying to move up")
  115.     end
  116.     while turtle.detectUp() do
  117.         turtle.digUp()
  118.         sleep(digDelay)
  119.     end
  120.     while turtle.up()==false do
  121.         turtle.digUp()
  122.         sleep(digDelay)
  123.         turtle.attackUp()
  124.     end
  125. end
  126.  
  127. function topOff()
  128.     if turtle.getFuelLevel()<reserveFuelLevel or partnerNeedsFuel()==true then
  129.         sendMessageToPartner("powerdown")
  130.         waitForMessageFromPartner("powerdown")
  131.         sendMessageToPartner("backward")
  132.         waitForMessageFromPartner("backward")
  133.         turtle.turnLeft()
  134.         turtle.turnLeft()
  135.         placeCharge()
  136.         sendMessageToPartner("refuel")
  137.         waitForMessageFromPartner("charged")
  138.         while turtle.getFuelLevel() < chargeLevel do
  139.             sleep(1)
  140.             if debug==true then
  141.                 print(turtle.getFuelLevel())
  142.             end
  143.         end
  144.         digCharge()
  145.         turtle.turnLeft()
  146.         turtle.turnLeft()
  147.         sendMessageToPartner("forward")
  148.         waitForMessageFromPartner("forward")
  149.         sendMessageToPartner("powerup")
  150.         waitForMessageFromPartner("powerup")
  151.     end
  152. end
  153.  
  154. function partnerNeedsFuel()
  155.     sendMessageToPartner("needfuel")
  156.     local id, msg, distance
  157.     while id==nil or id==myID or id ~= partnerID do
  158.         id, msg, distance = rednet.receive()
  159.     end
  160.     if msg=="yes" then
  161.         return true
  162.     elseif msg=="no" then
  163.         return false
  164.     else
  165.         print("ERROR - Unexpected Partner Message")
  166.         print("Received: .. msg")
  167.         shell.exit()
  168.     end
  169. end
  170.  
  171. function placeCharge()
  172.     turtle.select(3)
  173.     turtle.place()
  174. end
  175.  
  176. function digCharge()
  177.     turtle.select(3)
  178.     turtle.dig()
  179. end
  180.  
  181. function placeChest()
  182.     turtle.select(1)
  183.     while turtle.placeDown()==false do
  184.         turtle.attackDown()
  185.         turtle.digDown()
  186.         sleep(digDelay)
  187.     end
  188. end
  189.  
  190. function digChest()
  191.     turtle.select(1)
  192.     if turtle.getItemCount(1) > 0 then
  193.         turtle.dropDown()
  194.     end
  195.     turtle.digDown()
  196. end
  197.  
  198. function placeMiningWell()
  199.     turtle.select(2)
  200.     while turtle.placeDown()==false do
  201.         turtle.digDown()
  202.         turtle.attackDown()
  203.         sleep(digDelay)
  204.     end
  205. end
  206.  
  207. function digMiningWell()
  208.     turtle.select(2)
  209.     if turtle.getItemCount(2) > 0 then
  210.         turtle.drop()
  211.     end
  212.     turtle.digDown()
  213. end
  214.  
  215. function emptyInventory()
  216.     --for all inventory spots except fuel spot 16
  217.     for i=1,15 do
  218.         if turtle.getItemCount(i)>0 then
  219.             if i~=3 then
  220.                 turtle.select(i)
  221.                 turtle.dropDown()
  222.             end
  223.         end
  224.     end
  225. end
  226.  
  227. --check to make sure it has all the items it needs
  228. checkStatus()
  229.  
  230. --initial refuel
  231. turtle.select(16)
  232. turtle.refuel(1)
  233. turtle.select(1)
  234.  
  235. --wait to find partner
  236. waitForPartner()
  237.  
  238. --main loop
  239. while true do
  240.     topOff()
  241.     placeMiningWell()
  242.     moveUp()
  243.     placeChest()
  244.     emptyInventory()
  245.     sendMessageToPartner("powerdown")
  246.     waitForMessageFromPartner("powerdown")
  247.     sleep(miningTime)
  248.     sendMessageToPartner("powerup")
  249.     waitForMessageFromPartner("powerup")
  250.     digChest()
  251.     turtle.down()
  252.     digMiningWell()
  253.     moveForward()
  254.     sendMessageToPartner("forward")
  255.     waitForMessageFromPartner("forward")
  256. end
Advertisement
Add Comment
Please, Sign In to add comment