Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Script de Carrière 16x16 - V5 - "Blindé"
- MÉTHODE: Puits Verticaux (le plus fiable pour les serveurs)
- *** MODIFIÉ : S'arrête à 16 blocs de profondeur ***
- - Gère l'inventaire plein et retourne au coffre.
- - Placement: Coffre DERRIÈRE la tortue. Carburant en slot 16.
- ]]
- -- ## CONFIGURATION ##
- local QUARRY_WIDTH = 16
- local QUARRY_LENGTH = 16
- local FUEL_SLOT = 16
- local MAX_DEPTH = 16 -- <<< TA VARIABLE GLOBALE EST ICI
- -------------------------
- -- Variables d'état (où la tortue PENSE être)
- local state = {
- x = 0,
- z = 0,
- y = 0,
- dirZ = 1 -- 1 pour Z+, -1 pour Z-
- }
- ---
- -- FONCTIONS "INSISTANTES" (Anti-Lag)
- ---
- function insistForward()
- while not turtle.forward() do
- print("Mouvement bloqué (lag?), nouvelle tentative...")
- os.sleep(0.1)
- end
- end
- function insistUp()
- while not turtle.up() do
- print("Montée bloquée (lag?), nouvelle tentative...")
- os.sleep(0.1)
- end
- end
- function insistDown()
- while not turtle.down() do
- print("Descente bloquée (lag?), nouvelle tentative...")
- os.sleep(0.1)
- end
- end
- function insistTurnRight()
- while not turtle.turnRight() do os.sleep(0.1) end
- end
- function insistTurnLeft()
- while not turtle.turnLeft() do os.sleep(0.1) end
- end
- ---
- -- FONCTIONS "SÉCURISÉES" (Anti-Obstacles)
- ---
- function checkFuel()
- turtle.select(FUEL_SLOT)
- if turtle.getFuelLevel() < 10 then
- if not turtle.refuel(1) then
- if turtle.getFuelLevel() < 10 then
- print("!! ERREUR: Plus de carburant")
- return false
- end
- end
- print("Ravitaillement.")
- end
- turtle.select(1)
- return true
- end
- function safeDigUp()
- local hasBlock, data = turtle.inspectUp()
- if hasBlock then
- while not turtle.digUp() do
- print("Bloc au-dessus bloqué (gravier?)...")
- os.sleep(0.1)
- end
- end
- end
- function safeDigDown()
- local hasBlock, data = turtle.inspectDown()
- if not hasBlock then return true end -- Air
- if data.name == "minecraft:bedrock" then
- print("Bedrock atteinte.")
- return false -- STOP
- end
- while not turtle.digDown() do
- print("Bloc en dessous bloqué...")
- os.sleep(0.1)
- local s, d = turtle.inspectDown()
- if not s or d.name == "minecraft:bedrock" then
- return false
- end
- end
- return true -- A réussi à creuser
- end
- ---
- -- GESTION DE L'INVENTAIRE
- ---
- function isInventoryFull()
- for i = 1, (FUEL_SLOT - 1) do
- if turtle.getItemCount(i) == 0 then
- return false
- end
- end
- print("Inventaire plein.")
- return true
- end
- function dumpInventory()
- print("Vidage de l'inventaire...")
- insistTurnRight()
- insistTurnRight() -- Face au coffre
- for i = 1, (FUEL_SLOT - 1) do
- turtle.select(i)
- turtle.drop()
- end
- turtle.select(1)
- insistTurnRight()
- insistTurnRight() -- Face à la carrière
- print("Vidage terminé.")
- end
- function checkAndDump()
- if not isInventoryFull() then
- return true -- Pas plein, on continue
- end
- print("Inventaire plein, retour à la base...")
- -- 1. Remonter à la surface (Y=0)
- while state.y > 0 do
- if not checkFuel() then return false end
- safeDigUp()
- insistUp()
- state.y = state.y - 1
- end
- -- 2. Revenir au début de la rangée (Z=0)
- if state.dirZ == 1 then
- insistTurnRight()
- insistTurnRight()
- for i = 1, state.z do
- if not checkFuel() then return false end
- insistForward()
- end
- insistTurnRight()
- else
- for i = 1, (QUARRY_LENGTH - 1) - state.z do
- if not checkFuel() then return false end
- insistForward()
- end
- insistTurnLeft()
- end
- -- 3. Revenir au début de la carrière (X=0)
- for i = 1, state.x do
- if not checkFuel() then return false end
- insistForward()
- end
- -- 4. Se mettre en position de vidage (face Z-)
- insistTurnLeft()
- insistTurnLeft()
- insistTurnLeft()
- -- 5. Vider
- dumpInventory() -- Se remet face à Z+
- -- 6. Retourner à la bonne rangée (X)
- insistTurnRight()
- for i = 1, state.x do
- if not checkFuel() then return false end
- insistForward()
- end
- -- 7. Se mettre dans la bonne direction (Z)
- if state.dirZ == 1 then
- insistTurnLeft()
- else
- insistTurnRight()
- end
- -- 8. Revenir au bon Z
- for i = 1, state.z do
- if not checkFuel() then return false end
- insistForward()
- end
- -- 9. Redescendre
- print("Retour au travail...")
- for i = 1, state.y do
- if not checkFuel() then return false end
- insistDown()
- end
- print("Reprise du minage.")
- return true
- end
- ---
- -- Logique de minage (MODIFIÉE ICI)
- ---
- function digShaft()
- print(string.format("Minage du puits : (X=%d, Z=%d)", state.x, state.z))
- while true do -- Boucle de descente
- if not checkFuel() then return false end
- if not checkAndDump() then return false end
- -- ### MODIFICATION ICI ###
- -- Vérifie si la profondeur actuelle (state.y)
- -- a atteint ou dépassé la limite
- if state.y >= MAX_DEPTH then
- print("Profondeur max (" .. MAX_DEPTH .. ") atteinte.")
- break -- Arrête de creuser ce puits
- end
- -- ### FIN DE LA MODIFICATION ###
- -- Creuse
- if not safeDigDown() then
- break -- Bedrock atteinte
- end
- -- Descend
- insistDown()
- state.y = state.y + 1
- end
- -- Remonte à la surface (Y=0)
- print("Puits terminé, remontée...")
- while state.y > 0 do
- if not checkFuel() then return false end
- safeDigUp()
- insistUp()
- state.y = state.y - 1
- end
- return true -- Puits terminé avec succès
- end
- ---
- -- Logique principale
- ---
- function runQuarry()
- for x = 0, (QUARRY_WIDTH - 1) do
- state.x = x
- for z_iter = 0, (QUARRY_LENGTH - 1) do
- if not digShaft() then
- print("Arrêt dû au carburant ou erreur grave.")
- return
- end
- if z_iter < (QUARRY_LENGTH - 1) then
- if not checkFuel() then return false end
- insistForward()
- state.z = state.z + state.dirZ
- end
- end
- if state.x < (QUARRY_WIDTH - 1) then
- print("Changement de rangée...")
- if state.dirZ == 1 then
- insistTurnRight()
- if not checkFuel() then return false end
- insistForward()
- insistTurnRight()
- else
- insistTurnLeft()
- if not checkFuel() then return false end
- insistForward()
- insistTurnLeft()
- end
- state.dirZ = state.dirZ * -1
- state.z = state.z + state.dirZ
- end
- end
- print("--- CARRIÈRE TERMINÉE (V5 - Prof 16) ---")
- print("Retour au point de départ...")
- if state.dirZ == -1 then
- insistTurnRight()
- insistTurnRight()
- end
- for i = 1, state.z do insistForward() end
- insistTurnLeft()
- for i = 1, state.x do insistForward() end
- insistTurnLeft()
- dumpInventory()
- print("C'est fini !")
- end
- -- Lancement du script
- runQuarry()
Advertisement
Add Comment
Please, Sign In to add comment