meuced

[LUA] minage turtle v0.8

Feb 24th, 2013
1,629
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.76 KB | None | 0 0
  1. local direction = 0                     -- direction
  2. local drapeauBedrock = false            -- indicateur pour savoir si on est arrivé à la bedrock
  3. local profondeur = 0                    -- indique de combien on a creusé
  4. local longueur = 9                      -- indique la longueur (x) de la zone à miner
  5. local largeur = 9                       -- indique la largeur (y) de la zone à miner
  6. local xPosition = 0                     -- indique la position courante en x
  7. local zPosition = 0                     -- indique la position courante en z
  8. local niveauFuelMini = 5                -- niveau de déplacements auquel on doit refaire le plein de fuel
  9. local niveauCharbonMini = 5             -- quantité de charbons restants à laquelle on doit refaire le plein de charbon
  10.  
  11. local premierSlot = 4                   -- premier slot où se trouve le minerai ramassé
  12. local dernierSlot = 13                  -- dernier slot à surveiller pour enclencher le vidage de l'inventaire
  13. local enderchestSlot = 14               -- slot où se trouve l'enderchest pour les minerais
  14. local enderchestCharbonSlot = 15        -- slot où se trouve l'enderchest pour les minerais
  15. local charbonSlot = 16                  -- slot ou est stocké le charbon
  16.  
  17. local plan = {}                         -- tableau pour stocker les coordonnées relatives des puits de minage.
  18.  
  19.  
  20. function compare_mine()                 -- fonction qui compare et mine, tourne à droite et direction++
  21.  
  22.     local slot = 0
  23.     local resultat = false
  24.    
  25.     for slot=1,3 do
  26.         turtle.select(slot)
  27.         if turtle.compare() or resultat then
  28.             resultat = true
  29.         end
  30.     end
  31.    
  32.     if resultat == false then
  33.         turtle.dig()
  34.         if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  35.             print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  36.             videInventaire()
  37.         end
  38.     end
  39.    
  40.     turtle.turnRight()
  41.     direction=direction+1
  42.    
  43. end
  44.  
  45. function verifFuel()                    -- vérifie si on a assez de fuel (déplacements) en réserve.
  46.   -- 1 charbon = 96 deplacements
  47.   -- On vérifie le niveau de fuel
  48.     local niveauFuel = turtle.getFuelLevel()
  49.     if (niveauFuel ~= "unlimited") then
  50.         if (niveauFuel < niveauFuelMini) then
  51.             -- On a besoin de faire le plein
  52.             turtle.select(charbonSlot)
  53.             if turtle.getItemCount(charbonSlot) < niveauCharbonMini then
  54.                 rechargeCharbon() -- on refait le plein de charbon
  55.             end
  56.             turtle.refuel(1) -- on recharge pour 96 deplacements
  57.         end
  58.     end
  59. end
  60.  
  61. function rechargeCharbon()              -- permet de refaire le plein en charbon
  62.    
  63.     turtle.dig()
  64.    
  65.     if turtle.getItemCount(dernierSlot-1) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  66.             print("vidage inventaire rech_charbon1; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  67.             videInventaire()
  68.     end
  69.    
  70.     turtle.select(enderchestCharbonSlot)
  71.     turtle.place()
  72.     turtle.select(charbonSlot)
  73.     turtle.suck()
  74.    
  75.     turtle.select(enderchestCharbonSlot)
  76.     turtle.dig()
  77.    
  78. end
  79.  
  80. function videInventaire()               -- vide l'inventaire de la tortue dans l'enderchest dédié à ça
  81.  
  82.     local slot
  83.     turtle.select(enderchestSlot)
  84.     turtle.place()
  85.     for slot=premierSlot,dernierSlot do
  86.         turtle.select(slot)
  87.         while turtle.getItemCount(slot) > 0 do
  88.             turtle.drop(turtle.getItemCount(slot))
  89.             if turtle.getItemCount(slot) > 0 then
  90.                 sleep(0.5)
  91.             end
  92.         end
  93.     end
  94.  
  95.     turtle.select(enderchestSlot)
  96.     turtle.dig()
  97.    
  98. end
  99.  
  100. function calcPlan()                     -- calcule les emplacements des puits de minage
  101.  
  102.     local x, z, temp, xTemp
  103.     temp = 1
  104.     -- pour forcer à miner le point de départ
  105.     plan[temp] = {}
  106.     plan[temp][1] = 0
  107.     plan[temp][2] = 0
  108.     temp = temp + 1
  109.    
  110.     -- on boucle sur les colonnes
  111.     for z=0,largeur do
  112.         x = 0
  113.         print("z : "..z)
  114.        
  115.         --on calcule le x du 1er premier puit de minage pour la colonne z
  116.         x = 5 - (z*2) +x
  117.         while x < 0 do
  118.             x = x + 5
  119.         end
  120.         plan[temp] = {}
  121.         plan[temp][1] = x
  122.         plan[temp][2] = z
  123.         temp = temp + 1
  124.         print("x : "..x)
  125.  
  126.         -- et ensuite on trouve automatiquement les autres emplacements de la colonne z
  127.         while x <= longueur do
  128.             x = x + 5
  129.             if x <= longueur then
  130.                 plan[temp] = {}
  131.                 plan[temp][1] = x
  132.                 plan[temp][2] = z
  133.                 temp = temp + 1
  134.                 print("x : "..x)
  135.             end
  136.         end
  137.         z = z + 1
  138.     end
  139. end
  140.  
  141. function deplacement(r,s)               -- pour aller à des coordonnées précises
  142.  
  143.     local nbX
  144.     local nbZ
  145.    
  146. -- On commence par se déplacer en x
  147.     print("r : "..r.." ; s : "..s)
  148.     print("xPosition : "..xPosition.." ; zPosition : "..zPosition)
  149.    
  150.     r = tonumber(r)
  151.     s = tonumber(s)
  152.    
  153.     if r > xPosition then
  154.         nbX = r - xPosition
  155.         print("dans r>= xposition")
  156.         while direction ~= 0 do -- ici on se met dans la bonne direction
  157.             turtle.turnRight()
  158.             direction=direction+1
  159.             if direction == 4 then direction = 0 end
  160.         end
  161.     elseif r < xPosition then
  162.         nbX = xPosition - r
  163.         print("dans xposition > r")
  164.         while direction ~= 2 do -- ici on se met dans la bonne direction
  165.             turtle.turnRight()
  166.             direction=direction+1
  167.             if direction == 4 then direction = 0 end
  168.         end
  169.     end
  170.    
  171.     if r ~= xPosition then
  172.         print("nbX : "..nbX)
  173.         while nbX > 0 do
  174.             if not turtle.forward() then
  175.                 turtle.dig() -- ici, on n'a pas réussi à avancer, donc on creuse devant soit pour dégager le passage
  176.                 if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  177.                     print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  178.                     videInventaire()
  179.                 end
  180.                 turtle.forward()
  181.             end
  182.             if direction == 0 then xPosition = xPosition + 1 else xPosition = xPosition - 1 end
  183.             verifFuel()
  184.             nbX = nbX - 1
  185.         end
  186.     end
  187.  
  188. -- Ensuite on fait le déplacement en z
  189.    
  190.     if s > zPosition then
  191.         nbZ = s - zPosition
  192.        
  193.         while direction ~= 1 do -- ici on se met dans la bonne direction
  194.             turtle.turnRight()
  195.             direction=direction+1
  196.             if direction == 4 then direction = 0 end
  197.         end
  198.     elseif s < zPosition then
  199.         nbZ = zPosition - s
  200.        
  201.         while direction ~= 3 do -- ici on se met dans la bonne direction
  202.             turtle.turnRight()
  203.             direction=direction+1
  204.             if direction == 4 then direction = 0 end
  205.         end
  206.     end
  207.    
  208.     if s ~= zPosition then
  209.         while nbZ > 0 do
  210.             if not turtle.forward() then
  211.                 turtle.dig() -- ici, on n'a pas réussi à avancer, donc on creuse devant soit pour dégager le passage
  212.                 if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  213.                     print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  214.                     videInventaire()
  215.                 end
  216.                 turtle.forward()
  217.             end
  218.             if direction == 1 then zPosition = zPosition + 1 else zPosition = zPosition - 1 end
  219.             verifFuel()
  220.             nbZ = nbZ - 1
  221.         end
  222.     end
  223.    
  224.     --on se remet en direction "zéro"
  225.     while direction ~= 0 do
  226.         turtle.turnRight()
  227.         direction=direction+1
  228.         if direction == 4 then direction = 0 end
  229.     end
  230.  
  231. end
  232.  
  233. --********************************************--
  234. --********** Programme principal *************--
  235. --********************************************--
  236.  
  237. calcPlan() -- on calcule les emplacements des puits de forage
  238.  
  239. --for k,v in pairs(plan) do print(k.."  "..v[1].."   "..v[2]) end
  240.  
  241. local p, pmax = 1, #plan
  242.  
  243. while p <= pmax do
  244.  
  245.     drapeauBedrock = false --avant tout, on reset ce flag
  246.     deplacement(plan[p][1],plan[p][2]) -- puis on se déplace sur le 1er puit à forer
  247.     turtle.digDown() --creuse le bloc dessous
  248.     sleep(0.2)
  249.     turtle.down() --descend d'un cran
  250.     profondeur = profondeur+1
  251.     verifFuel()
  252.  
  253.     while drapeauBedrock == false do
  254.  
  255.         -- ici, direction = 0
  256.         while direction~=4 do
  257.             --compare et mine, tourne à droite et direction++
  258.             compare_mine()
  259.         end
  260.         direction=0
  261.        
  262.         if turtle.detectDown() == true then   -- on vérifie si il y a un bloc en dessous
  263.             if turtle.digDown() == false then -- si on n'arrive pas à creuser en dessous, alors c'est la bedrock
  264.                 drapeauBedrock = true         -- donc je met le drapeau à true pour sortir de la boucle
  265.                 print("bedrock !")
  266.             else
  267.                 if turtle.getItemCount(dernierSlot) > 0 then  -- on vérifie si on doit vider l'inventaire de la tortue
  268.                     print("vidage inventaire princ1; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  269.                     videInventaire()
  270.                 end
  271.                 turtle.down()
  272.                 profondeur = profondeur+1
  273.                 verifFuel()
  274.             end
  275.         else                    -- si il n'y a pas de bloc alors c'est de l'air, de l'eau ou de la lave
  276.             turtle.down()       -- alors on descend simplement (la tortue ne craint pas la lave ou l'eau) et on continue à miner
  277.             profondeur = profondeur+1
  278.             verifFuel()
  279.         end
  280.        
  281.     end
  282.    
  283.     print("fin de la boucle "..profondeur)
  284.     -- ici je remonte à la surface
  285.     while profondeur ~= 0 do
  286.         turtle.up()
  287.         profondeur = profondeur-1
  288.         verifFuel()
  289.     end
  290.    
  291.     p = p + 1
  292. end
  293.  
  294. deplacement(0,0) -- retour au point de départ
Advertisement
Add Comment
Please, Sign In to add comment