Advertisement
lucifersamfr

mineBoss

Mar 15th, 2014
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.75 KB | None | 0 0
  1. os.loadAPI("chests")
  2.  
  3. --GLOB CONFIG
  4. local nbMiners = 8
  5. local nbLoaders = 0
  6.  
  7. -- MODEM CONFIG
  8. local idChannel = 10
  9. local idRespChannel = 11
  10. local cmdChannel = 12
  11. local cmdRespChannel = 13
  12.  
  13. --CHESTS API CONFIG
  14. chests.slots["signal"] = 5
  15. chests.slots["coal"] = 6
  16. print("signal slot = "..chests.slots["signal"])
  17. print("coal   slot = "..chests.slots["coal"])
  18.  
  19. --CONNECT MODEM
  20. local modem = peripheral.wrap("right")
  21.  
  22. -- MINING PROCESS
  23. function startMiners()
  24.   local op={name="mine", mode=1}
  25.   modem.transmit(cmdChannel,cmdRespChannel,textutils.serialize(op))
  26. end
  27.  
  28. function wait4Miners()
  29.   local repMinerCount = 0
  30.   local repLoaderCount = 0
  31.   local waiting = true
  32.  
  33.   modem.open(cmdRespChannel)
  34.  
  35.   while ( waiting ) do
  36.     local event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  37.     if ( modemSide == "right") then
  38.       local rep=textutils.unserialize(message)
  39.       if (rep.name == "waiting" ) then
  40.         print("ID:"..(rep.ID).."label:"..(rep.label).."type:"..(rep.wType))
  41.         if ( rep.wType == "miner" ) then
  42.           repMinerCount = repMinerCount + 1
  43.         elseif ( rep.wType == "chunkLoader" ) then
  44.           repLoaderCount = repLoaderCount +1
  45.         end
  46.       end
  47.       if ( repMinerCount == nbMiners and repLoaderCount == nbLoaders ) then
  48.         waiting = false
  49.         modem.close(cmdRespChannel)
  50.         print(repMinerCount.." miners waiting.")
  51.         print(repLoaderCount.." chunk loaders waiting.")
  52.       end    
  53.     end
  54.   end
  55.   modem.close(cmdRespChannel)
  56.  
  57. end
  58.  
  59. -- GATHER WORKERS DATA
  60. function getWorkersId()
  61.   print("open idRespChannel")
  62.   modem.open(idRespChannel)
  63.  
  64.   print("Transmit request to idChannel("..idChannel..")")
  65.   local op={name="ID"}
  66.   print("op.name= "..op.name)
  67.   modem.transmit(idChannel,idRespChannel,textutils.serialize(op))
  68.   print("transmit OK")
  69.    
  70.   local repMinerCount = 0
  71.   local repLoaderCount = 0
  72.   local waiting = true
  73.  
  74.   while ( waiting ) do
  75.     print("Waiting for answers")
  76.     local event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  77.     local rep=textutils.unserialize(message)
  78.     if (rep.name == "ID" ) then
  79.       print("ID:"..(rep.ID).."label:"..(rep.label).."type:"..(rep.wType))
  80.       if ( rep.wType == "miner" ) then
  81.         repMinerCount = repMinerCount + 1
  82.       elseif ( rep.wType == "chunkLoader" ) then
  83.         repLoaderCount = repLoaderCount +1
  84.       end
  85.     end
  86.     if ( repMinerCount == nbMiners and repLoaderCount == nbLoaders ) then
  87.       waiting = false
  88.       modem.close(idRespChannel)
  89.       print(repMinerCount.." miners identified.")
  90.       print(repLoaderCount.." chunk loaders identified.")
  91.     end
  92.   end
  93.   modem.close(idRespChannel)
  94. end
  95.  
  96. -- move SpotLoader
  97. function moveSpotLoader(mode)
  98.   if ( mode == 1 ) then
  99.     turtle.select(1)
  100.     turtle.turnRight()
  101.     --get spot loader behind
  102.     turtle.forward()
  103.     turtle.turnLeft()
  104.     turtle.dig()
  105.     --go forward and place the spot loader
  106.     turtle.turnLeft()
  107.     turtle.forward()
  108.     while ( turtle.detect() ) do
  109.       turtle.dig()
  110.       sleep(2)
  111.     end
  112.     turtle.forward()
  113.     turtle.turnRight()
  114.     while ( turtle.detect() ) do
  115.       turtle.dig()
  116.       sleep(2)
  117.     end
  118.     turtle.place()
  119.     return true
  120.    
  121.   elseif ( mode == 2 ) then
  122.     if( move1() ) then
  123.       sleep(2)
  124.       return move1()
  125.     end
  126.   end
  127.  
  128.   return false
  129. end
  130.  
  131. function refuelBoss()
  132.   local lastLevel = turtle.getFuelLevel()
  133.   if ( lastLevel < 1000 ) then
  134.     print(" [FUEL] ALERT low level")
  135.     chests.useCoalChest("top")
  136.   end
  137. end
  138.  
  139. while true do
  140.   if ( chests.useSignalChest("top") ) then
  141.     print("START MINERS")
  142.     startMiners()
  143.     print("MOVE SPOT LOADER")
  144.     refuelBoss()
  145.     moveSpotLoader(1)
  146.     print("WAIT 4 MINERS")
  147.     wait4Miners()
  148.   end
  149.   sleep(5)
  150. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement