Advertisement
Kiliandeca

Test2 - Prog

Aug 9th, 2016
615
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.30 KB | None | 0 0
  1. shell.run("clear")
  2. print("Slave")
  3.  
  4. if not peripheral.isPresent("right") then
  5.     print("Modem not detected possible bug because the server has restarted, try debuging please wait")
  6.     turtle.back()
  7.     turtle.forward()
  8.  
  9.     while not peripheral.isPresent("right") do
  10.         print("Impossible de trouver le modem, replacez la turtle")
  11.         sleep(30)
  12.     end
  13.  
  14. end
  15.  
  16. rednet.open("right")
  17.  
  18. function newSlave()
  19.  
  20.     msg = nil
  21.     print("En attente d'instructions")
  22.     while msg == nil do
  23.         rednet.broadcast("New Slave", "New Slave")
  24.         sID, msg, prot = rednet.receive("New Slave Wait", 5)       
  25.     end
  26.  
  27.     print(msg[1])
  28.     if msg[1] == "Miner" then
  29.         x = msg[2]
  30.         y = msg[3]
  31.         pocketID = msg[4]
  32.         xmax = msg[5]
  33.         ymax = msg[6]
  34.         placement()
  35.     end
  36.  
  37.     if msg[1] == "Master" then
  38.         pocketID = sID
  39.         xmax = msg[2]
  40.         ymax = msg[3]
  41.         master()
  42.     end
  43.  
  44. end
  45.  
  46.  
  47. function master()
  48.  
  49.     print("je suis master")
  50.     master = true
  51.     looter = true
  52.  
  53.     slaveDic = {}
  54.     slaveDic[0] = os.getComputerID()
  55.    
  56.     x = 0
  57.     y = 0
  58.  
  59.     sx = 0
  60.     sy = 0
  61.  
  62.     nbSlaves = 1
  63.  
  64.     ECLoot = 0
  65.  
  66.     turtle.select(1)
  67.     while turtle.getItemDetail() == nil or turtle.getItemDetail().name ~= "EnderStorage:enderChest" do
  68.         print("Placer l'enderchest contenant les turttles")
  69.         sleep(1)
  70.     end
  71.  
  72.     turtle.select(2)
  73.     while turtle.getItemDetail() == nil or turtle.getItemDetail().name ~= "EnderStorage:enderChest" do
  74.         print("Placer les enderchest contenant les loots")
  75.         sleep(1)
  76.     end
  77.    
  78.     local ECLootIntervale = 1
  79.  
  80.     nbec = turtle.getItemCount()
  81.  
  82.     while not (xmax/ECLootIntervale <= nbec) do
  83.         ECLootIntervale = ECLootIntervale + 1
  84.     end
  85.  
  86.     print("Intervalle ", ECLootIntervale)
  87.  
  88.  
  89.     turtle.select(1)
  90.  
  91.     turtle.digUp()
  92.     turtle.placeUp()
  93.     turtle.dig()
  94.  
  95.     while turtle.suckUp() do
  96.         local data = turtle.getItemDetail()
  97.        
  98.         if data and (data.name == "ComputerCraft:CC-Turtle" or data.name == "ComputerCraft:CC-TurtleExpanded") then
  99.             turtle.place()
  100.             msg = nil
  101.             peripheral.wrap("front").turnOn()
  102.             sID, msg, prot = rednet.receive("New Slave", 60)
  103.             if msg == nil then
  104.                 print("Error: Slave not responding")
  105.             elseif msg == "New Slave" then
  106.                 print("Send miner Instruction")
  107.                
  108.                 sx = sx + 1
  109.                 if sx >= xmax then
  110.                     sx = 0
  111.                     sy = sy + 1
  112.                 end
  113.                
  114.                 ECLoot = ECLoot + 1
  115.  
  116.                 if ECLoot == ECLootIntervale and sy == 0 then
  117.                     turtle.select(2)
  118.                     turtle.drop(1)
  119.                     turtle.select(1)
  120.  
  121.                     ECLoot = 0
  122.                 end
  123.                
  124.                 rednet.send(sID, {"Miner", sx, sy, pocketID, xmax, ymax}, "New Slave Wait")
  125.  
  126.  
  127.                 nbSlaves = nbSlaves + 1
  128.                 slaveDic[nbSlaves] = sID
  129.  
  130.                 while turtle.detect() do
  131.                     sleep(0.2)
  132.                 end
  133.  
  134.                 if sy == ymax-1 and sx == xmax-1 then
  135.                     break
  136.                 end
  137.                
  138.             end
  139.         end
  140.     end
  141.    
  142.  
  143.     print(slaveDic)
  144.  
  145.     turtle.digUp()
  146.     turtle.forward()
  147.     turtle.dig()
  148.     turtle.forward()
  149.  
  150. end
  151.  
  152. function placement()
  153.  
  154.     print("je suis miner")
  155.     master = false
  156.  
  157.     if turtle.getItemDetail() ~= nil and turtle.getItemDetail().name == "EnderStorage:enderChest" then
  158.         looter = true
  159.     else
  160.         looter = false
  161.     end
  162.  
  163.     print(x, " ", y)
  164.     z = 0
  165.  
  166.     for i=1, y*3 do
  167.         while not turtle.up() do
  168.             local success, data = turtle.inspectUp()
  169.             if data.name ~= "ComputerCraft:CC-Turtle" and data.name ~= "ComputerCraft:CC-TurtleExpanded" then
  170.                 turtle.digUp()
  171.             elseif not success then
  172.                 turtle.attackUp()
  173.             end
  174.             sleep(0.2)
  175.  
  176.         end
  177.     end
  178.  
  179.     if x ~= 0 then
  180.         turtle.turnRight()
  181.     end
  182.  
  183.     for i = 1, x do
  184.         while not turtle.forward() do
  185.             local success, data = turtle.inspect()
  186.             if data.name ~= "ComputerCraft:CC-Turtle" and data.name ~= "ComputerCraft:CC-TurtleExpanded" then
  187.                 turtle.dig()
  188.             elseif not success then
  189.                 turtle.attack()
  190.             end
  191.             sleep(0.2)
  192.         end
  193.     end
  194.  
  195.     if x ~= 0 then 
  196.         turtle.turnLeft()
  197.     end
  198.  
  199.     while not turtle.forward() do
  200.             local success, data = turtle.inspect()
  201.             if data.name ~= "ComputerCraft:CC-Turtle" and data.name ~= "ComputerCraft:CC-TurtleExpanded" then
  202.                 turtle.dig()
  203.             elseif not success then
  204.                 turtle.attack()
  205.             end
  206.             sleep(0.2)     
  207.     end
  208.  
  209.     if turtle.getItemDetail() ~= nil and turtle.getItemDetail().name == "EnderStorage:enderChest" then
  210.         looter = true
  211.     else
  212.         looter = false
  213.     end
  214.  
  215. end
  216.  
  217.  
  218. function refuel()
  219.  
  220.     for slot = 1, 16 do
  221.         turtle.select(slot)
  222.         if turtle.refuel(8) then
  223.             turtle.select(1)
  224.             return true
  225.         end    
  226.     end
  227.     turtle.select(1)
  228.     return false
  229. end
  230.  
  231.  
  232. function mining(distance)
  233.     print(distance)
  234.     DistParc = 0
  235.     turtle.digDown()
  236.     turtle.digUp()
  237.    
  238.     while DistParc ~= distance do
  239.         print(distance)
  240.  
  241.         while turtle.detect() do
  242.             turtle.dig()
  243.         end
  244.  
  245.  
  246.         if turtle.forward() then
  247.             DistParc = DistParc + 1
  248.             turtle.digDown()
  249.             turtle.digUp()
  250.         else
  251.             turtle.attack()
  252.         end
  253.  
  254.         if DistParc/20 == math.floor(DistParc/20) then
  255.             if turtle.getFuelLevel() < 256 then
  256.                 print("need fuel")
  257.                 refuel()
  258.             end
  259.         end
  260.  
  261.     end
  262. end
  263.  
  264.  
  265. function looting()
  266.  
  267.     empty = 1
  268.  
  269.     if y ~= 0 then
  270.         for i=1, y*2 do
  271.             while not turtle.down() do
  272.                 local success, data = turtle.inspectDown()
  273.                 if data.name ~= "ComputerCraft:CC-Turtle" and data.name ~= "ComputerCraft:CC-TurtleExpanded" then
  274.                     turtle.digDown()
  275.                 else
  276.                     sleep(0.2)              
  277.                 end
  278.             end
  279.         end
  280.  
  281.         local success, data = turtle.inspectUp()
  282.  
  283.         while not (not (data.name == "ComputerCraft:CC-Turtle" or data.name == "ComputerCraft:CC-TurtleExpanded") or redstone.getInput("top")) or not vide(empty) do
  284.  
  285.             local success, data = turtle.inspectUp()
  286.  
  287.             for i=1, 16 do
  288.                 turtle.select(i)
  289.                 turtle.dropDown()
  290.             end
  291.         end
  292.  
  293.         redstone.setOutput("bottom", true)
  294.  
  295.         if recup == true then
  296.             recuperation()
  297.         end
  298.  
  299.         while not redstone.getInput("bottom") do
  300.             print("J'attend que les autres se vident")
  301.             sleep(1)
  302.         end
  303.        
  304.         redstone.setOutput("bottom", false)
  305.         redstone.setOutput("top", true)
  306.  
  307.         while redstone.getInput("top") do
  308.             sleep(1)
  309.         end
  310.  
  311.         redstone.setOutput("top", false)
  312.  
  313.         for i=1, y*2 do
  314.             while not turtle.up() do
  315.                 print("J'attend que la turtle d'en haut parte 2")
  316.                 local success, data = turtle.inspectUp()
  317.                 if success and (data.name ~= "ComputerCraft:CC-Turtle" and data.name ~= "ComputerCraft:CC-TurtleExpanded") then
  318.                     turtle.digUp()
  319.                 else
  320.                     sleep(0.2)              
  321.                 end
  322.             end
  323.         end
  324.  
  325.        
  326.  
  327.  
  328.     else
  329.  
  330.         turtle.turnLeft()
  331.         side = "back"
  332.         if looter == true then
  333.             turtle.turnLeft()
  334.             if master == true then
  335.                 turtle.select(2)
  336.                 if turtle.getItemCount() > 1 then
  337.                     empty = 3
  338.                 else
  339.                     empty = 2
  340.                 end
  341.  
  342.             else
  343.                 turtle.select(1)
  344.             end
  345.             side = "left"
  346.             turtle.place()
  347.         end
  348.  
  349.         if x+1 == xmax then
  350.  
  351.             local success, data = turtle.inspectUp()
  352.  
  353.             while not (not (data.name == "ComputerCraft:CC-Turtle" or data.name == "ComputerCraft:CC-TurtleExpanded") or redstone.getInput("top")) or not vide(empty) do
  354.  
  355.                 local success, data = turtle.inspectUp()
  356.  
  357.                 for i=empty, 16 do
  358.                     turtle.select(i)
  359.                     turtle.drop()
  360.                 end
  361.             end
  362.  
  363.  
  364.         else
  365.  
  366.             while (((not ilyauneturtle("top")) and (not redstone.getInput("top"))) or (not redstone.getInput(side))) or not vide(empty) do
  367.  
  368.                 for i=empty, 16 do
  369.                     turtle.select(i)
  370.                     turtle.drop()
  371.                 end
  372.             end
  373.  
  374.         end
  375.  
  376.  
  377.         if master == false then
  378.             print("debug 1")
  379.  
  380.             if looter == true then
  381.                 turtle.select(1)
  382.                 turtle.dig()
  383.                 turtle.turnRight()
  384.             end
  385.  
  386.             redstone.setOutput("front", true)
  387.  
  388.         end
  389.  
  390.  
  391.         if not master then
  392.  
  393.             if recup == true then
  394.                 recuperation()
  395.             end
  396.  
  397.             while not redstone.getInput("front") do
  398.                 print("J'attend que les autres se vident")
  399.                 sleep(1)
  400.             end
  401.  
  402.             redstone.setOutput("front", false)
  403.             redstone.setOutput("back", true)
  404.             redstone.setOutput("top", true)
  405.  
  406.             while redstone.getInput("back") or redstone.getInput("top") do
  407.                 sleep(1)
  408.                 success, data = turtle.inspectUp()
  409.  
  410.                 if not (success and (data.name == "ComputerCraft:CC-Turtle" or data.name == "ComputerCraft:CC-TurtleExpanded")) then
  411.                     break
  412.                 end
  413.             end
  414.  
  415.             redstone.setOutput("back", false)
  416.             redstone.setOutput("top", false)
  417.         else
  418.  
  419.             turtle.select(2)
  420.             turtle.dig()
  421.  
  422.             if recup == true then
  423.                 recuperation()
  424.             end
  425.  
  426.             redstone.setOutput("top", true)
  427.             redstone.setOutput("left", true)
  428.  
  429.             while redstone.getInput("top") or redstone.getInput("left") do
  430.                 sleep(1)
  431.             end
  432.  
  433.             redstone.setOutput("top", false)
  434.             redstone.setOutput("left", false)
  435.  
  436.             turtle.turnRight()
  437.         end
  438.  
  439.         turtle.turnRight()
  440.  
  441.  
  442.  
  443.  
  444.     end
  445.  
  446. end
  447.  
  448.  
  449. function vide(empty)
  450.  
  451.     for i=empty, 16 do
  452.         turtle.select(i)
  453.         if turtle.getItemCount() ~= 0 then
  454.             return false
  455.         end
  456.     end
  457.  
  458.     turtle.select(1)
  459.     return true
  460.  
  461. end
  462.  
  463.  
  464. function recuperation()
  465.     print("recuperation")
  466.  
  467.     for a, b in pairs(redstone.getSides()) do
  468.         print(b, redstone.getOutput(b))
  469.     end
  470.  
  471.  
  472.     if master then
  473.         rednet.broadcast(true, "Recuperation")
  474.         turtle.turnLeft()
  475.  
  476.         turtle.select(2)
  477.  
  478.         while not (turtle.getItemCount() == nbec) do
  479.             print("je suck")
  480.             turtle.suck()
  481.             sleep(0.5)
  482.         end
  483.  
  484.         redstone.setOutput("front", true)
  485.  
  486.         turtle.digDown()
  487.         turtle.select(1)
  488.         turtle.placeDown()
  489.  
  490.         while (not redstone.getInput("top")) and ilyauneturtle("top") do
  491.             if turtle.suckUp() then
  492.                 turtle.dropDown()
  493.             else
  494.                 sleep(0.2)
  495.             end
  496.         end
  497.  
  498.         turtle.digUp()
  499.         turtle.dropDown()
  500.  
  501.         while (not redstone.getInput("front")) and ilyauneturtle("front") do
  502.             if turtle.suck() then
  503.                 turtle.dropDown()
  504.             else
  505.                 sleep(0.2)
  506.             end
  507.         end
  508.  
  509.         if ilyauneturtle("front") then
  510.             turtle.dig()
  511.             turtle.dropDown()
  512.         end
  513.         turtle.digDown()
  514.         turtle.turnLeft()
  515.         turtle.back()
  516.         print("Vous pouvez ramasser la turtle")
  517.  
  518.         while true do
  519.             sleep(60)
  520.         end
  521.  
  522.  
  523.  
  524.     else -- not master
  525.  
  526.         rednet.receive("Recuperation")
  527.         redstone.setOutput("front", false)
  528.         redstone.setOutput("bottom", false)
  529.         sleep(0.2)
  530.  
  531.         if y == 0 then
  532.             turtle.turnLeft()
  533.             turtle.turnLeft()
  534.  
  535.  
  536.             while not redstone.getInput("back") do
  537.  
  538.                 print("je suck")
  539.  
  540.                 turtle.suck()
  541.                 sleep(0.5)
  542.  
  543.             end    
  544.             redstone.setOutput("front", true)
  545.  
  546.  
  547.             while (not redstone.getInput("top")) and ilyauneturtle("top")do
  548.                 if turtle.suckUp() then
  549.                 else
  550.                     sleep(0.2)
  551.                 end
  552.             end
  553.  
  554.             turtle.digUp()
  555.  
  556.             while (not redstone.getInput("front")) and ilyauneturtle("front") do
  557.                 if turtle.suck() then
  558.                 else
  559.                     sleep(0.2)
  560.                 end
  561.             end
  562.  
  563.             if ilyauneturtle("front") then
  564.                 turtle.dig()
  565.             end
  566.  
  567.             while not vide(1) do
  568.                 print("J'attend qu'on me vide")
  569.                 sleep(0.5)
  570.             end
  571.  
  572.             redstone.setOutput("back", true)
  573.  
  574.             print("J'attend qu'on me casse")
  575.  
  576.             while true do
  577.                 sleep(60)
  578.             end
  579.  
  580.  
  581.         else -- y ~= 0
  582.  
  583.             while (not redstone.getInput("top")) and ilyauneturtle("top") do   
  584.                 turtle.suckUp()
  585.             end
  586.  
  587.             turtle.digUp()
  588.  
  589.             while not vide(1) do
  590.                 print("j'attend qu'on me vide")
  591.                 sleep(0.5)
  592.             end
  593.  
  594.             redstone.setOutput("bottom", true)
  595.  
  596.             print("j'attend qu'on me casse")
  597.  
  598.             while true do
  599.                 sleep(60)
  600.             end
  601.  
  602.         end
  603.  
  604.     end
  605.  
  606. end
  607.  
  608.  
  609. function ilyauneturtle(sidetocheck)
  610.  
  611.     if sidetocheck == "top" then
  612.  
  613.         local success, data = turtle.inspectUp()
  614.        
  615.         if success and (data.name == "ComputerCraft:CC-Turtle" or data.name == "ComputerCraft:CC-TurtleExpanded") then
  616.             return true
  617.         else
  618.             return false
  619.         end
  620.  
  621.  
  622.     elseif sidetocheck == "front" then
  623.  
  624.         local success, data = turtle.inspect()
  625.        
  626.         if success and (data.name == "ComputerCraft:CC-Turtle" or data.name == "ComputerCraft:CC-TurtleExpanded") then
  627.             return true
  628.         else
  629.             return false
  630.         end
  631.  
  632.     end
  633.  
  634. end
  635.  
  636.  
  637.  
  638. function main()
  639.     newSlave()
  640.  
  641.     while true do
  642.  
  643.         print("En attente d'instructions")
  644.  
  645.         local sID, msg, prot = rednet.receive("Instruction")
  646.         if sID == pocketID then
  647.  
  648.             if msg[1] == "Mining" then
  649.                 mining(msg[2])             
  650.             end
  651.  
  652.             if msg[1] == "Looting" then
  653.                 recup = false
  654.                 looting()
  655.             end
  656.  
  657.             if msg[1] == "Recup" then
  658.                 recup = true
  659.                 looting()
  660.             end
  661.  
  662.             if msg[1] == "Shutdown" then
  663.                 os.reboot()
  664.             end
  665.  
  666.         end
  667.     end
  668.  
  669. end
  670.  
  671.  
  672.  
  673.  
  674. main()
  675. print("Debug")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement