Advertisement
meuced

minage turtle V1.8

May 4th, 2013
1,439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 15.89 KB | None | 0 0
  1. local fonctionnement = "normal"                 -- choix du vidage : "normal" (avec coffre au départ) ou "enderchest"
  2.                                                                                 -- normal : coffre récup derrière départ tortue, coffre charbon au dessus tortue
  3.                                                                                 -- enderchest : voir variable pour emplacements des enderchest dans l'inventaire
  4. local direction = 0                                     -- direction
  5. local drapeauBedrock = false                    -- indicateur pour savoir si on est arrivé à la bedrock
  6. local profondeur = 0                                    -- indique de combien on a creusé
  7. local longueur = 9                                              -- indique la longueur (x) de la zone à miner
  8. local largeur = 9                                               -- indique la largeur (y) de la zone à miner
  9. local xPosition = 0                                             -- indique la position courante en x
  10. local zPosition = 0                                             -- indique la position courante en z
  11. local niveauFuelMini = 5                                -- niveau de déplacements auquel on doit refaire le plein de fuel
  12. local niveauCharbonMini = 5                             -- quantité de charbons restants à laquelle on doit refaire le plein de charbon
  13.  
  14. local premierSlot = 4                                   -- premier slot où se trouve le minerai ramassé
  15. local dernierSlot = 13                                  -- dernier slot à surveiller pour enclencher le vidage de l'inventaire
  16. if fonctionnement == "normal" then dernierSlot = 15 end  -- si on est en mode normal, on gagne 2 slots d'inventaire
  17. local enderchestSlot = 14                               -- slot où se trouve l'enderchest pour les minerais
  18. local enderchestCharbonSlot = 15                -- slot où se trouve l'enderchest pour les minerais
  19. local charbonSlot = 16                                  -- slot ou est stocké le charbon
  20.  
  21. local plan = {}                                                 -- tableau pour stocker les coordonnées relatives des puits de minage.
  22.  
  23. --local idAffichage = 22                                  -- id du computer vers lequel on envoie les infos par rednet
  24.  
  25. local idChannel = 123                                   -- num du canal pour envoyer les infos via modem
  26.  
  27. local resDown = true
  28.  
  29. function compare_mine()                                 -- fonction qui compare et mine, tourne à droite et direction++
  30.  
  31.         local slot = 0
  32.         local resultat = false
  33.        
  34.         for slot=1,3 do
  35.                 turtle.select(slot)
  36.                 if turtle.compare() or resultat then
  37.                         resultat = true
  38.                 end
  39.         end
  40.        
  41.         if resultat == false then
  42.             turtle.dig()
  43.         end
  44.        
  45.         turtle.turnRight()
  46.         direction=direction+1
  47.        
  48.         if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  49.             print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  50.             --videInventaire()
  51.             --videInventaireCoffre()
  52.             return vidage()
  53.         end
  54.        
  55. end
  56.  
  57. function verifFuel()                                    -- vérifie si on a assez de fuel (déplacements) en réserve.
  58.   -- 1 charbon = 96 deplacements
  59.   -- On vérifie le niveau de fuel
  60.         local niveauFuel = turtle.getFuelLevel()
  61.         if (niveauFuel ~= "unlimited") then
  62.                 if (niveauFuel < niveauFuelMini) then
  63.                         -- On a besoin de faire le plein
  64.                         turtle.select(charbonSlot)
  65.                         turtle.refuel(1) -- on recharge pour 96 deplacements
  66.                         -- et on vérifie si il nous reste assez de charbon
  67.                         if turtle.getItemCount(charbonSlot) < niveauCharbonMini then
  68.                                 return recharge() -- on refait le plein de charbon
  69.                         end
  70.                 end
  71.         end
  72. end
  73.  
  74. function rechargeCharbon()                              -- permet de refaire le plein en charbon
  75.        
  76.     turtle.select(enderchestCharbonSlot)
  77.     turtle.placeUp()
  78.     turtle.select(charbonSlot)
  79.     turtle.suckUp()
  80.    
  81.     turtle.select(enderchestCharbonSlot)
  82.     turtle.digUp()
  83.        
  84. end
  85.  
  86. function rechargeCharbonCoffre()
  87.  
  88.     -- d'abord je sauv les coordonnées x, z, profondeur et direction
  89.         xPositionSv = xPosition
  90.         zPositionSv = zPosition
  91.         profondeurSv = profondeur
  92.         directionSv = direction
  93.        
  94.         --je préviens que je remonte pour recharger en charbon
  95.         modem.transmit(idChannel,idChannel,"etat:charbon")
  96.        
  97.         -- je remonte à la surface
  98.         while profondeurSv ~= 0 do
  99.                 if turtle.detectUp() then turtle.digUp() end
  100.                 turtle.up()
  101.                 profondeurSv = profondeurSv-1
  102.                 modem.transmit(idChannel,idChannel,"profondeur:"..profondeurSv)
  103.                 verifFuel()
  104.         end
  105.        
  106.         -- je me déplace vers le point de départ
  107.         deplacement(0,0)
  108.        
  109.         --on prend du charbon dans le coffre au-dessus de la tortue
  110.         turtle.select(charbonSlot)
  111.         turtle.suckUp()
  112.        
  113.         --on retourne au-dessus du puit en cours de minage
  114.         deplacement(xPositionSv, zPositionSv)
  115.        
  116.         --on descend à la dernière profondeur
  117.         while profondeurSv ~= profondeur do
  118.                 if turtle.detectDown() then turtle.digDown() end
  119.                 turtle.down()
  120.                 profondeurSv = profondeurSv+1
  121.                 modem.transmit(idChannel,idChannel,"profondeur:"..profondeurSv)
  122.                 verifFuel()
  123.         end
  124.        
  125.         --on se met dans la bonne direction
  126.         while directionSv ~= direction do
  127.                 turtle.turnRight()
  128.                 direction=direction+1
  129.                 if direction == 4 then direction = 0 end
  130.         end
  131.        
  132.         --et normalement c'est bon.
  133.         modem.transmit(idChannel,idChannel,"etat:encours")
  134.  
  135. end
  136.  
  137. function recharge()
  138.  
  139.         if fonctionnement == "normal" then
  140.                 return rechargeCharbonCoffre()
  141.         elseif fonctionnement == "enderchest" then
  142.                 return rechargeCharbon()
  143.         end
  144.  end
  145.        
  146. function videInventaire()                               -- vide l'inventaire de la tortue dans l'enderchest dédié à ça
  147.  
  148.         local slot
  149.         turtle.select(enderchestSlot)
  150.         turtle.placeUp()
  151.         for slot=premierSlot,dernierSlot do
  152.                 turtle.select(slot)
  153.                 while turtle.getItemCount(slot) > 0 do
  154.                         turtle.dropUp(turtle.getItemCount(slot))
  155.                         if turtle.getItemCount(slot) > 0 then
  156.                                 sleep(0.5)
  157.                         end
  158.                 end
  159.         end
  160.  
  161.         turtle.select(enderchestSlot)
  162.         turtle.digUp()
  163.        
  164. end
  165.  
  166. function videInventaireCoffre()
  167.  
  168.         -- d'abord je sauv les coordonnées x, z, profondeur et direction
  169.         xPositionSv = xPosition
  170.         zPositionSv = zPosition
  171.         profondeurSv = profondeur
  172.         directionSv = direction
  173.        
  174.         --je préviens que je remonte pour vider mon inventaire
  175.         modem.transmit(idChannel,idChannel,"etat:vidage")
  176.        
  177.         -- je remonte à la surface
  178.         while profondeurSv ~= 0 do
  179.                 if turtle.detectUp() then turtle.digUp() end
  180.                 turtle.up()
  181.                 profondeurSv = profondeurSv-1
  182.                 modem.transmit(idChannel,idChannel,"profondeur:"..profondeurSv)
  183.                 verifFuel()
  184.         end
  185.        
  186.         -- je me déplace vers le point de départ
  187.         deplacement(0,0)
  188.        
  189.         --on se remet en direction "deux", face au coffre
  190.         while direction ~= 2 do
  191.                 turtle.turnRight()
  192.                 direction=direction+1
  193.                 if direction == 4 then direction = 0 end
  194.         end
  195.        
  196.         --on vide l'inventaire
  197.         for slot=premierSlot,dernierSlot do
  198.                 turtle.select(slot)
  199.                 while turtle.getItemCount(slot) > 0 do
  200.                         turtle.drop(turtle.getItemCount(slot))
  201.                         if turtle.getItemCount(slot) > 0 then
  202.                                 sleep(0.5)
  203.                         end
  204.                 end
  205.         end
  206.        
  207.         --on se remet en direction "zéro"
  208.         while direction ~= 0 do
  209.                 turtle.turnRight()
  210.                 direction=direction+1
  211.                 if direction == 4 then direction = 0 end
  212.         end
  213.        
  214.         --on retourne au-dessus du puit en cours de minage
  215.         deplacement(xPositionSv, zPositionSv)
  216.        
  217.         --on descend à la dernière profondeur
  218.         while profondeurSv ~= profondeur do
  219.                 if turtle.detectDown() then turtle.digDown() end
  220.                 turtle.down()
  221.                 profondeurSv = profondeurSv+1
  222.                 modem.transmit(idChannel,idChannel,"profondeur:"..profondeurSv)
  223.                 verifFuel()
  224.         end
  225.        
  226.         --on se met dans la bonne direction
  227.         while directionSv ~= direction do
  228.                 turtle.turnRight()
  229.                 direction=direction+1
  230.                 if direction == 4 then direction = 0 end
  231.         end
  232.        
  233.         --et normalement c'est bon.
  234.         modem.transmit(idChannel,idChannel,"etat:encours")
  235. end
  236.  
  237. function vidage()
  238.  
  239.         if fonctionnement == "normal" then
  240.                 return videInventaireCoffre()
  241.         elseif fonctionnement == "enderchest" then
  242.                 return videInventaire()
  243.         end
  244.  
  245. end
  246.  
  247. function calcPlan()                                     -- calcule les emplacements des puits de minage
  248.  
  249.         local x, z, temp, xTemp
  250.         temp = 1
  251.         -- pour forcer à miner le point de départ
  252.         plan[temp] = {}
  253.         plan[temp][1] = 0
  254.         plan[temp][2] = 0
  255.         temp = temp + 1
  256.        
  257.         -- on boucle sur les colonnes
  258.         for z=0,largeur do
  259.                 x = 0
  260.                 print("z : "..z)
  261.                
  262.                 --on calcule le x du 1er premier puit de minage pour la colonne z
  263.                 x = 5 - (z*2) +x
  264.                 while x < 0 do
  265.                         x = x + 5
  266.                 end
  267.                 plan[temp] = {}
  268.                 plan[temp][1] = x
  269.                 plan[temp][2] = z
  270.                 temp = temp + 1
  271.                 print("x : "..x)
  272.  
  273.                 -- et ensuite on trouve automatiquement les autres emplacements de la colonne z
  274.                 while x <= longueur do
  275.                         x = x + 5
  276.                         if x <= longueur then
  277.                                 plan[temp] = {}
  278.                                 plan[temp][1] = x
  279.                                 plan[temp][2] = z
  280.                                 temp = temp + 1
  281.                                 print("x : "..x)
  282.                         end
  283.                 end
  284.                 z = z + 1
  285.         end
  286. end
  287.  
  288. function deplacement(r,s)                               -- pour aller à des coordonnées précises
  289.  
  290.         local nbX
  291.         local nbZ
  292.        
  293. -- On commence par se déplacer en x
  294.         print("f_depl r : "..r.." ; s : "..s)
  295.         print("f_depl xPosition : "..xPosition.." ; zPosition : "..zPosition)
  296.        
  297.         r = tonumber(r)
  298.         s = tonumber(s)
  299.        
  300.         if r > xPosition then
  301.                 nbX = r - xPosition
  302.                 print("dans r>= xposition")
  303.                 while direction ~= 0 do -- ici on se met dans la bonne direction
  304.                         turtle.turnRight()
  305.                         direction=direction+1
  306.                         if direction == 4 then direction = 0 end
  307.                 end
  308.         elseif r < xPosition then
  309.                 nbX = xPosition - r
  310.                 print("dans xposition > r")
  311.                 while direction ~= 2 do -- ici on se met dans la bonne direction
  312.                         turtle.turnRight()
  313.                         direction=direction+1
  314.                         if direction == 4 then direction = 0 end
  315.                 end
  316.         end
  317.        
  318.         if r ~= xPosition then
  319.                 print("nbX : "..nbX)
  320.                 while nbX > 0 do
  321.                         if not turtle.forward() then
  322.                                 turtle.dig() -- ici, on n'a pas réussi à avancer, donc on creuse devant soit pour dégager le passage
  323.                                 if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  324.                                         print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  325.                                         --videInventaire()
  326.                                         --videInventaireCoffre()
  327.                                         vidage()
  328.                                 end
  329.                                 turtle.forward()
  330.                         end
  331.                         if direction == 0 then xPosition = xPosition + 1 else xPosition = xPosition - 1 end
  332.                         verifFuel()
  333.                         nbX = nbX - 1
  334.                 end
  335.         end
  336.  
  337. -- Ensuite on fait le déplacement en z
  338.        
  339.         if s > zPosition then
  340.                 nbZ = s - zPosition
  341.                
  342.                 while direction ~= 1 do -- ici on se met dans la bonne direction
  343.                         turtle.turnRight()
  344.                         direction=direction+1
  345.                         if direction == 4 then direction = 0 end
  346.                 end
  347.         elseif s < zPosition then
  348.                 nbZ = zPosition - s
  349.                
  350.                 while direction ~= 3 do -- ici on se met dans la bonne direction
  351.                         turtle.turnRight()
  352.                         direction=direction+1
  353.                         if direction == 4 then direction = 0 end
  354.                 end
  355.         end
  356.        
  357.         if s ~= zPosition then
  358.                 while nbZ > 0 do
  359.                         if not turtle.forward() then
  360.                                 turtle.dig() -- ici, on n'a pas réussi à avancer, donc on creuse devant soit pour dégager le passage
  361.                                 if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  362.                                         print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  363.                                         --videInventaire()
  364.                                         --videInventaireCoffre()
  365.                                         vidage()
  366.                                 end
  367.                                 turtle.forward()
  368.                         end
  369.                         if direction == 1 then zPosition = zPosition + 1 else zPosition = zPosition - 1 end
  370.                         verifFuel()
  371.                         nbZ = nbZ - 1
  372.                 end
  373.         end
  374.        
  375.         --on se remet en direction "zéro"
  376.         while direction ~= 0 do
  377.                 turtle.turnRight()
  378.                 direction=direction+1
  379.                 if direction == 4 then direction = 0 end
  380.         end
  381.  
  382. end
  383.  
  384. function turtleDown()
  385.     if turtle.detectDown() == true then   -- on vérifie si il y a un bloc en dessous
  386.         if turtle.digDown() == false then -- si on n'arrive pas à creuser en dessous, alors c'est la bedrock
  387.                 drapeauBedrock = true             -- donc je met le drapeau à true pour sortir de la boucle
  388.                 print("bedrock !")
  389.         else
  390.             if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  391.                 print("vidage inventaire princ1; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  392.                 --videInventaire()
  393.                 --videInventaireCoffre()
  394.                 vidage()
  395.             end
  396.             --resDown = turtle.down()
  397.             while turtle.down() == false do
  398.                 sleep(0.1)
  399.                 print("fu_turtledown resultat du down : false :o( ")
  400.             end
  401.             print("fu_turtledown resultat du down : true :o) ")
  402.             profondeur = profondeur+1
  403.             modem.transmit(idChannel,idChannel,"profondeur:"..profondeur)
  404.             verifFuel()
  405.         end
  406.     else                                    -- si il n'y a pas de bloc alors c'est de l'air, de l'eau ou de la lave
  407.         --resDown = turtle.down()           -- alors on descend simplement (la tortue ne craint pas la lave ou l'eau) et on continue à miner
  408.         while turtle.down() == false do
  409.         sleep(0.1)
  410.         print("fu_turtledown resultat du down : false :o( ")
  411.         end
  412.         print("fu_turtledown resultat du down : true :o) ")
  413.         profondeur = profondeur+1
  414.         modem.transmit(idChannel,idChannel,"profondeur:"..profondeur)
  415.         verifFuel()
  416.     end
  417.     --if resDown ==false then print("fu_turtledown resultat du down : false")
  418.     --else print("fu_turtledown resultat du down : true")
  419.     --end
  420. end
  421.  
  422.  
  423. --********************************************--
  424. --********** Programme principal *************--
  425. --********************************************--
  426.  
  427. print("Entrez les dimensions de la zone à miner.")
  428. print("")
  429. print("Largeur (vers la droite) : ")
  430. largeur = tonumber(read())
  431. print("Longueur (en face) : ")
  432. longueur = tonumber(read())
  433.  
  434. calcPlan() -- on calcule les emplacements des puits de forage
  435.  
  436. local p, pmax = 1, #plan
  437.  
  438. -- ici, affichage du nombre de puits à creuser et attente confirmation pour commencer
  439. -- puis à chaque down ou up, affichage de la profondeur et màj du "puit en cours/nb puits total"
  440. -- et affichage lorsqu'on vide l'inventaire ou que l'on reprend du charbon
  441.  
  442. modem = peripheral.wrap("right")
  443. modem.transmit(idChannel,idChannel,"etat:attente")
  444. print("")
  445. print("Nombre de puits à creuser : "..#plan)
  446. modem.transmit(idChannel,idChannel,"nbPuitsTotal:"..#plan)
  447. modem.transmit(idChannel,idChannel,"profondeur:"..profondeur)
  448. print("Appuyez sur [ENTREE] pour commencer !")
  449. read()
  450. modem.transmit(idChannel,idChannel,"etat:encours")
  451. --read()
  452.  
  453. while p <= pmax do
  454.     print("rentre dans boucle p")
  455.     modem.transmit(idChannel,idChannel,"nbPuits:"..p)
  456.         drapeauBedrock = false --avant tout, on reset ce flag
  457.         verifFuel() -- on refait le plein si besoin
  458.         deplacement(plan[p][1],plan[p][2]) -- puis on se déplace sur le puit à forer
  459.  
  460.         turtleDown()
  461.  
  462.         while drapeauBedrock == false do
  463.  
  464.             -- ici, direction = 0
  465.             while direction~=4 do
  466.                     --compare et mine, tourne à droite et direction++
  467.                     compare_mine()
  468.             end
  469.             direction=0
  470.                
  471.             turtleDown()
  472.                
  473.         end
  474.        
  475.         print("fin de la boucle "..profondeur)
  476.         -- ici je remonte à la surface
  477.         while profondeur ~= 0 do
  478.                 if turtle.detectUp() then turtle.digUp() end
  479.                 turtle.up()
  480.                 profondeur = profondeur-1
  481.                 modem.transmit(idChannel,idChannel,"profondeur:"..profondeur)
  482.                 verifFuel()
  483.         end
  484.        
  485.         p = p + 1
  486. end
  487.  
  488. modem.transmit(idChannel,idChannel,"etat:retour")
  489. deplacement(0,0) -- retour au point de départ
  490. modem.transmit(idChannel,idChannel,"etat:fin")
  491. --rednet.close(right)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement