Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Information sur le programme "Quarry"
- -- Codeur : DeusXIII
- -- Version : beta R3
- -- Dernière modification : 27/12/12
- -- Initialisation des variables
- carburant = 1 -- Slot du fuel dans l'inventaire de la turtle
- x = 1 -- Variable de suivi des lignes (1er bloc)
- y = 1 -- Variable de suivi des colonnes (1ere colonne)
- z = 1 -- Variable de suivi de la hauteur (1ere hauteur)
- impair = true -- Permet de savoir si la turtle doit tourner à gauche ou à droite en fin de ligne
- --Fin d'initialisation des variables
- -- Déclaration des fonctions du programme
- function verifFuel() -- Fonction de vérification du niveau de carburant et réapprovisionnement si besoin
- turtle.select(carburant)
- while turtle.getFuelLevel() < 200 do -- 200 est une valeur de sécurité estimée, elle peut être modifiée si besoin
- if not turtle.refuel(1) then
- return false
- end
- end
- turtle.select(2)
- return true
- end
- function supprLigne(...) -- Fonction de suppression de lignes inutiles à l'écran
- if arg.n == 0 then
- return 0
- end
- for i=1,arg.n do
- term.setCursorPos(1,arg[i])
- term.clearLine()
- end
- end
- function verifStock() -- Vérification de l'état de l'inventaire de la turtle (si le slot 15 a au moins 1 item la fonction retourne vrai)
- if turtle.getItemCount(15) > 0 then
- return true
- else
- return false
- end
- end
- function move(direction) -- Fonction sécurisée de déplacement (devant, haut et bas)
- while true do
- if direction == "forward" then
- if turtle.detect() then
- turtle.dig()
- else
- if turtle.forward() then
- return true
- else
- turtle.attack()
- end
- end
- elseif direction == "up" then
- if turtle.digUp() then
- os.sleep(0.4)
- else
- if turtle.up() then
- return true
- else
- turtle.attackUp()
- end
- end
- elseif direction == "down" then
- if turtle.detectDown() then
- turtle.digDown()
- else
- if turtle.down() then
- return true
- else
- turtle.attackDown()
- end
- end
- end
- end
- end
- function vidageInventaire(x,y,z,impair) -- Fonction de remontée de la turtle, de vidage de l'inventaire, puis de redescente
- -- Remontée de la turtle jusqu'au coffre
- for i=z-1,1,-1 do
- move("up")
- end
- if impair then
- turtle.turnLeft()
- else
- turtle.turnRight()
- end
- for i=y-1,1,-1 do
- move("forward")
- end
- turtle.turnLeft()
- if impair then
- for i=x-1,1,-1 do
- move("forward")
- end
- else
- for i=x,taille_quarry-1,1 do
- move("forward")
- end
- end
- -- Fin de la remontée
- -- Dêpot de l'inventaire dans le coffre
- for i=2,16,1 do
- if turtle.getItemCount(i) > 0 then
- turtle.select(i)
- turtle.drop(64)
- end
- end
- turtle.turnRight()
- turtle.select(1)
- turlte.suck()
- turtle.select(2) -- Repositionnement sur le 1er slot de minage (slot 2)
- --Fin du dépot
- -- Redescente de la turtle à la position initiale
- turtle.turnLeft()
- for i=1,y-1 do
- move("forward")
- end
- turtle.turnLeft()
- if impair then
- for i=1,x-1 do
- move("forward")
- end
- else
- for i=taille_quarry-1,x,-1 do
- move("forward")
- end
- turtle.turnLeft()
- turtle.turnLeft()
- end
- for i=1,z-1 do
- move("down")
- end
- -- Fin de la redescente
- end
- -- Fin des fonctions
- -- Début du programme
- term.clear()
- term.setCursorPos(1,1)
- print("Programme de quarry/turtle automatique")
- while true do -- Boucle de vérification de la présence de carburant dans le slot 1 de la turtle
- supprLigne(3,4,5)
- term.setCursorPos(1,3)
- write("Mettez du carburant dans le slot 1 de la turtle...")
- io.read()
- if turtle.getItemCount(carburant) > 0 then
- break
- else
- term.setCursorPos(1,5)
- write("Aucun item dans le slot 1")
- io.read()
- end
- end
- while true do -- Boucle de saisie de la taille de la quarry
- supprLigne(3,4)
- term.setCursorPos(1,3)
- write("Largeur de la quarry : ")
- taille_quarry = io.read()
- taille_quarry = tonumber(taille_quarry)
- if taille_quarry == nil then
- term.setCursorPos(1,5)
- print("Erreur de saisie")
- io.read()
- supprLigne(5)
- else
- break
- end
- end
- while true do -- Postionnement du coffre à carburant pour le réapprovisionnement (pas implanté actuellement)
- supprLigne(3,4,5,6)
- term.setCursorPos(1,3)
- print("Placez 1 coffre à ma gauche avec du carburant...")
- io.read()
- turtle.turnLeft()
- if turtle.detect() then
- turtle.turnRight()
- term.setCursorPos(1,6)
- write("N'oubliez pas de remplir ce coffre de carburant")
- io.read()
- break
- else
- turtle.turnRight()
- term.setCursorPos(1,6)
- write("Aucun coffre detecté")
- io.read()
- end
- end
- while true do -- Positionnement du coffre de récupération des blocs minés
- supprLigne(3,4,5,6,7)
- term.setCursorPos(1,3)
- print("Placez 1 coffre derrière moi pour les bloc minés...")
- io.read()
- turtle.turnLeft()
- turtle.turnLeft()
- if turtle.detect() then
- turtle.turnRight()
- turtle.turnRight()
- break
- else
- turtle.turnRight()
- turtle.turnRight()
- term.setCursorPos(1,6)
- write("Aucun coffre detecté")
- io.read()
- end
- end
- while true do -- Confirmation du lancement du minage
- supprLigne(3,4,5)
- term.setCursorPos(1,3)
- print("Récapitulatif :")
- print("1 - Coffre à charbon OK")
- print("2 - Coffre à blocs minés OK")
- print("Quarry de : "..taille_quarry.." x "..taille_quarry)
- write('Appuyez sur "Y" pour confirmer ou "N" pour annuler')
- event, param1 = os.pullEvent("char")
- if param1 == "y" then
- break
- elseif param1 == "n" then
- os.reboot()
- end
- end
- while true do -- Boucle principale du programme
- if not verifFuel() then
- print("Arrêt du programme...")
- io.read()
- break -- Si la turtle n'a plus de craburant,le programme s'arrête (fonction de réapprovisionnement à venir)
- end
- supprLigne(3,4,5,6,7,8)
- term.setCursorPos(1,3)
- -- Indication temps réel du positionnement de la turtle par rapport à la position de départ
- print("Position de la turtle :")
- print("Bloc : "..x)
- print("Rangée : "..y)
- print("Couche : "..z)
- while turtle.digUp() do
- os.sleep(0.4)
- end
- if turtle.detectDown() then
- turtle.digDown()
- end
- if verifStock() then
- vidageInventaire(x,y,z,impair)
- end
- if x == taille_quarry then
- if y == taille_quarry then
- if impair then
- turtle.turnLeft()
- for i=1,taille_quarry-1 do
- move("forward")
- end
- turtle.turnLeft()
- for i=1,taille_quarry-1 do
- move("forward")
- end
- turtle.turnLeft()
- turtle.turnLeft()
- else
- turtle.turnRight()
- for i=1,taille_quarry-1 do
- move("forward")
- end
- turtle.turnRight()
- end
- for i =1,3 do -- Descente de 3 blocs
- move("down")
- z = z + 1
- end
- x = 1
- y = 1
- impair = true
- else
- if impair then
- turtle.turnRight()
- move("forward")
- turtle.turnRight()
- impair = false
- elseif not impair then
- turtle.turnLeft()
- move("forward")
- turtle.turnLeft()
- impair = true
- end
- x = 1
- y = y + 1
- end
- else
- move("forward")
- x = x + 1
- end
- end
- -- Fin du programme
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement