Advertisement
readix

turtle miner sender

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