Advertisement
HarvDad

scrapeceiling

Aug 23rd, 2014
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.28 KB | None | 0 0
  1. -- scrapeceiling
  2. -- Clears 2-high area one below bedrock, plus non-bedrock blocks one level above
  3. -- Written by HarvDad, August 2014 Last update: August23, 2014
  4.  
  5. args = {...}
  6. nArgs = #args
  7.  
  8. print("scrapeceiling: Rev 0.1")
  9. x = 0
  10. y = 0
  11. z = 0
  12. gX = x
  13. gZ = z
  14. face = 0
  15. minimumFuel = 100
  16. missionMessage = "Mission complete."
  17. abort = false
  18. local currentFuelLevel = turtle.getFuelLevel()
  19. lowestLevel = 0
  20. highestLevel = 0
  21.  
  22. if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
  23. print("Clear an area specified by the given length and width")
  24. print("Usage: clear <length><width>")
  25. return
  26. end
  27.  
  28. if nArgs ~= 2 then
  29. print("Usage: clear <length><width>")
  30. return
  31. end
  32.  
  33. length = tonumber(args[1])
  34. if length == nil then
  35. print("\"", args[1], "\" is not a valid length")
  36. return
  37. end
  38. if length < 1 then
  39. print("length must be a positive number greater than zero")
  40. end
  41.  
  42. width = tonumber(args[2])
  43. if width == nil then
  44. print("\"", args[2], "\" is not a valid width")
  45. return
  46. end
  47. if width < 1 then
  48. print("width must be a positive number greater than zero")
  49. end
  50.  
  51.  
  52. print("highestLevel = ", highestLevel, ", lowestLevel = ", lowestLevel)
  53.  
  54. targetArea = length * width
  55. areaCovered = 1;
  56.  
  57. function chomp()
  58. turtle.digUp()
  59. turtle.digDown()
  60. end
  61.  
  62. --[[
  63. function chomp()
  64. -- if y < highestLevel and turtle.detectUp() then
  65. if y < top then
  66. turtle.digUp()
  67. end
  68. -- if turtle.detect() then
  69. -- turtle.dig()
  70. -- end
  71.  
  72. -- if y > 0 then
  73. if y > bottom then
  74. if turtle.detectDown() then
  75. turtle.digDown()
  76. end
  77. elseif y < 0 then
  78. if turtle.detectUp() then
  79. turtle.digUp()
  80. end
  81. end
  82.  
  83. areaCovered = areaCovered+1
  84. end
  85. -]]
  86.  
  87. direction = "left"
  88.  
  89. local clock = os.clock
  90. function sleep(n) -- seconds
  91. local t0 = clock()
  92. while clock() - t0 <= n do end
  93. end
  94.  
  95. function left()
  96. if face == 0 then face = 1 turtle.turnLeft() return end
  97. if face == 1 then face = 2 turtle.turnLeft() return end
  98. if face == 2 then face = 3 turtle.turnLeft() return end
  99. if face == 3 then face = 0 turtle.turnLeft() return end
  100. print("function left\(\): Bad face value: ", face)
  101. end
  102.  
  103. function right()
  104. if face == 0 then face = 3 turtle.turnRight() return end
  105. if face == 1 then face = 0 turtle.turnRight() return end
  106. if face == 2 then face = 1 turtle.turnRight() return end
  107. if face == 3 then face = 2 turtle.turnRight() return end
  108. print("function right\(\): Bad face value: ", face)
  109. end
  110.  
  111. function up()
  112. while turtle.detectUp() do -- This loop added in case of falling sand or whatever
  113. turtle.digUp()
  114. end
  115. turtle.up()
  116. y = y+1
  117. end
  118.  
  119. function rise(nBlocks)
  120. local i
  121. for i=1,nBlocks do
  122. up()
  123. end
  124. end
  125.  
  126. function down()
  127. if turtle.detectDown() then
  128. turtle.digDown()
  129. end
  130. turtle.down()
  131. y = y-1
  132. end
  133.  
  134. function turn()
  135. if direction == "left" then
  136. left()
  137. else
  138. right()
  139. end
  140. if areaCovered < targetArea then
  141. forward()
  142. end
  143. -- chomp()
  144. if direction == "left" then
  145. left()
  146. direction = "right"
  147. else
  148. right()
  149. direction = "left"
  150. end
  151. end
  152.  
  153. function forward()
  154. while turtle.detect() do -- This loop added in case of falling sand or whatever
  155. turtle.dig()
  156. -- chomp()
  157. end
  158. for i=1,10 do
  159. if turtle.forward() then
  160. chomp()
  161. break
  162. end
  163. turtle.attack()
  164. sleep(2)
  165. end
  166. if face == 0 then z = z+1 return end
  167. if face == 1 then x = x-1 return end
  168. if face == 2 then z = z-1 return end
  169. if face == 3 then x = x+1 return end
  170. end
  171.  
  172. function setFace(f)
  173. if f == 0 then
  174. if face == 0 then return end
  175. if face == 1 then right() return end
  176. if face == 2 then right() right() return end
  177. if face == 3 then left() return end
  178. end
  179.  
  180. if f == 1 then
  181. if face == 0 then left() return end
  182. if face == 1 then return end
  183. if face == 2 then right() return end
  184. if face == 3 then right() right() return end
  185. end
  186.  
  187. if f == 2 then
  188. if face == 0 then left() left() return end
  189. if face == 1 then left() return end
  190. if face == 2 then return end
  191. if face == 3 then right() return end
  192. end
  193.  
  194. if f == 3 then
  195. if face == 0 then right() return end
  196. if face == 1 then left() left() return end
  197. if face == 2 then left() return end
  198. if face == 3 then return end
  199. end
  200. end
  201.  
  202. function home(targetY)
  203. -- print("home:face ", face, ", x = ", x, ", z = ", z)
  204. if x < 0 then
  205. setFace(3)
  206. while x < 0 do
  207. forward()
  208. end
  209. else
  210. if x > 0 then
  211. setFace(1)
  212. while x > 0 do
  213. forward()
  214. end
  215. end
  216. end
  217.  
  218. if z < 0 then
  219. setFace(0)
  220. while z < 0 do
  221. forward()
  222. end
  223. else
  224. if z > 0 then
  225. setFace(2)
  226. while z > 0 do
  227. forward()
  228. end
  229. end
  230. end
  231. setFace(0)
  232.  
  233. -- print("home: y = ", y, ", targetY = ", targetY)
  234.  
  235. if (targetY == 0) then
  236. if y > 0 then
  237. while y > 0 do
  238. down()
  239. end
  240. elseif y < 0 then
  241. while y < 0 do
  242. up()
  243. end
  244. end
  245. end
  246. end
  247.  
  248. function xzHome()
  249. local X = gX
  250. local Z = gZ
  251.  
  252. if x ~= X then
  253. if x < X then
  254. setFace(east)
  255. while x < X do
  256. forward()
  257. end
  258. else
  259. setFace(west)
  260. while x > X do
  261. forward()
  262. end
  263. end
  264. end
  265.  
  266. if z ~= Z then
  267. if z < Z then
  268. setFace(north)
  269. while z < Z do
  270. forward()
  271. end
  272. else
  273. setFace(south)
  274. while z > Z do
  275. forward()
  276. end
  277. end
  278. end
  279. end
  280.  
  281. function strip(nBlocks)
  282. local i
  283. -- print("strip ", nBlocks)
  284. for i=1,nBlocks do
  285. checkFuel()
  286. if abort then
  287. areaCovered = targetArea
  288. end
  289.  
  290. -- print("strip: Cleared ", areaCovered, " out of ", targetArea, " blocks")
  291. if areaCovered <= targetArea then
  292. forward()
  293. end
  294. end
  295. end
  296.  
  297.  
  298. function checkFuel()
  299. if currentFuelLevel == "unlimited" then
  300. return true
  301. end
  302.  
  303. if currentFuelLevel < minimumFuel then
  304. if not turtle.refuel() then
  305. areaCovered = targetArea
  306. missionMessage = "Mission aborted due to low fuel."
  307. abort = true
  308. return false
  309. end
  310. end
  311. return true
  312. end
  313.  
  314. function goToLevel(level)
  315. if y < level then
  316. while y < level do
  317. up()
  318. end
  319. elseif y > level then
  320. while y > level do
  321. down()
  322. end
  323. end
  324. end
  325.  
  326. function nextLevel()
  327. if y > 3 then
  328. return y - 3
  329. else
  330. return 0
  331. end
  332. end
  333.  
  334. function goToNextLevel()
  335. if height > 0 then
  336. if y > 3 then
  337. goToLevel(y - 3)
  338. else
  339. goToLevel(bottom)
  340. end
  341. elseif height < 0 then
  342. if y >= bottom + 3 then
  343. goToLevel(y - 3)
  344. else
  345. goToLevel(bottom)
  346. end
  347. end
  348. end
  349.  
  350. -- MAIN PROGRAM
  351.  
  352. currentLevel = y
  353.  
  354. turtle.select(1)
  355.  
  356. print("fuelLevel = ", currentFuelLevel)
  357. print("length = ", length)
  358. print("width = ", width)
  359. print("face = ", face)
  360.  
  361. print("Current Fuel Level: ", currentFuelLevel)
  362.  
  363. if currentFuelLevel ~= "unlimited" then
  364. if currentFuelLevel < minimumFuel then
  365. if not turtle.refuel() then
  366. print("No fuel")
  367. return
  368. end
  369. end
  370. end
  371.  
  372.  
  373.  
  374.  
  375.  
  376. print("top = ", top, ", bottom = ", bottom)
  377. print("topLevel = ", topLevel, ", lowestLevel = ", lowestLevel)
  378.  
  379.  
  380. done = false
  381.  
  382. up()
  383. chomp()
  384. while not done do
  385. for w=1,width do
  386. if w == width then
  387. strip(length)
  388. else
  389. strip(length-1)
  390. end
  391. -- print("strip: Cleared ", areaCovered, " out of ", targetArea, " blocks")
  392. if areaCovered < targetArea then
  393. turn()
  394. end
  395. if abort then
  396. print("Aborting...")
  397. home(0)
  398. end
  399. end
  400. home(99)
  401. direction = "left"
  402. done = true
  403. end
  404.  
  405. print(missionMessage, " Current fuel level is ", turtle.getFuelLevel())
  406. home(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement