HarvDad

eatlava

Mar 13th, 2014
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. -- eatlava
  2. -- Refuels from lava directly below turtle
  3. -- Must start with one lava bucket in slot 1
  4. -- Turtle travels requested area refueling when lava is directly below, then returns
  5. -- Written by HarvDad, March 2014
  6.  
  7. args = {...}
  8. nArgs = #args
  9.  
  10. print("eatLava: Rev 2.1")
  11. x = 0
  12. y = 0
  13. z = 0
  14. face = 0
  15. minimumFuel = 100
  16. missionMessage = "Mission complete."
  17. usage = "Usage: eatlava <length> <width>"
  18. abort = false
  19. local currentFuelLevel = turtle.getFuelLevel()
  20.  
  21. if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
  22. print("Refuels from lava directly below turtle.")
  23. print("First time: Must start with one lava bucket in slot 1")
  24. print("Usage: eatLava <length> <width>")
  25. return
  26. end
  27.  
  28. if nArgs ~= 2 then
  29. print("Usage: eatLava <distance>")
  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. return
  41. end
  42.  
  43. width = tonumber(args[2])
  44. if width == nil then
  45. print("\"", args[1], "\" is not a valid width")
  46. return
  47. end
  48. if width < 1 then
  49. print("width must be a positive number greater than zero")
  50. return
  51. end
  52.  
  53. areaCovered = 0;
  54.  
  55. function eatLava()
  56. turtle.select(1)
  57. if turtle.placeDown() then
  58. turtle.refuel()
  59. end
  60. end
  61.  
  62. function setFace(f)
  63. if f == 0 then
  64. if face == 0 then return end
  65. if face == 1 then right() return end
  66. if face == 2 then right() right() return end
  67. if face == 3 then left() return end
  68. end
  69.  
  70. if f == 1 then
  71. if face == 0 then left() return end
  72. if face == 1 then return end
  73. if face == 2 then right() return end
  74. if face == 3 then right() right() return end
  75. end
  76.  
  77. if f == 2 then
  78. if face == 0 then left() left() return end
  79. if face == 1 then left() return end
  80. if face == 2 then return end
  81. if face == 3 then right() return end
  82. end
  83.  
  84. if f == 3 then
  85. if face == 0 then right() return end
  86. if face == 1 then left() left() return end
  87. if face == 2 then left() return end
  88. if face == 3 then return end
  89. end
  90. end
  91.  
  92. function forward()
  93. while turtle.detect() do -- This loop added in case of falling sand or whatever
  94. turtle.dig()
  95. end
  96. for i=1,10 do -- This loop trys to handle pests (mob) that might be in the way
  97. if turtle.forward() then
  98. break
  99. end
  100. turtle.attack()
  101. sleep(2)
  102. end
  103. areaCovered = areaCovered + 1
  104.  
  105. if face == 0 then z = z+1 return end
  106. if face == 1 then x = x-1 return end
  107. if face == 2 then z = z-1 return end
  108. if face == 3 then x = x+1 return end
  109. end
  110.  
  111. function left()
  112. if face == 0 then face = 1 turtle.turnLeft() return end
  113. if face == 1 then face = 2 turtle.turnLeft() return end
  114. if face == 2 then face = 3 turtle.turnLeft() return end
  115. if face == 3 then face = 0 turtle.turnLeft() return end
  116. print("function left\(\): Bad face value: ", face)
  117. end
  118.  
  119. function right()
  120. if face == 0 then face = 3 turtle.turnRight() return end
  121. if face == 1 then face = 0 turtle.turnRight() return end
  122. if face == 2 then face = 1 turtle.turnRight() return end
  123. if face == 3 then face = 2 turtle.turnRight() return end
  124. print("function right\(\): Bad face value: ", face)
  125. end
  126.  
  127. function home(targetY)
  128. -- print("home:face ", face, ", x = ", x, ", z = ", z)
  129. if x < 0 then
  130. setFace(3)
  131. while x < 0 do
  132. forward()
  133. end
  134. else
  135. if x > 0 then
  136. setFace(1)
  137. while x > 0 do
  138. forward()
  139. end
  140. end
  141. end
  142.  
  143. if z < 0 then
  144. setFace(0)
  145. while z < 0 do
  146. forward()
  147. end
  148. else
  149. if z > 0 then
  150. setFace(2)
  151. while z > 0 do
  152. forward()
  153. end
  154. end
  155. end
  156. setFace(0)
  157. end
  158.  
  159.  
  160. -- MAIN PROGRAM
  161.  
  162. turtle.select(1)
  163.  
  164. print("Current Fuel Level: ", currentFuelLevel)
  165.  
  166. if currentFuelLevel ~= "unlimited" then
  167. if currentFuelLevel < minimumFuel then
  168. if not turtle.refuel() then
  169. print("No fuel")
  170. return
  171. end
  172. end
  173. end
  174.  
  175. nextTurn = "left"
  176.  
  177. forward()
  178. targetArea = length * width
  179. while areaCovered < targetArea do
  180. if abort then
  181. break
  182. end
  183. for w=1,width do
  184. if abort then
  185. break
  186. end
  187. for z=1,length do
  188. if abort then
  189. break
  190. end
  191. eatLava()
  192. if z < length then
  193. forward()
  194. end
  195. end
  196. if nextTurn == "left" then
  197. if areaCovered < targetArea then
  198. left()
  199. forward()
  200. left()
  201. nextTurn = "right"
  202. end
  203. else
  204. if areaCovered < targetArea then
  205. right()
  206. forward()
  207. right()
  208. nextTurn = "left"
  209. end
  210. end
  211. end
  212. end
  213.  
  214. home()
  215. print (missionMessage)
  216. print ("Fuel level is now ", turtle.getFuelLevel())
Advertisement
Add Comment
Please, Sign In to add comment