View difference between Paste ID: B6eHEeH3 and PPXUJmfc
SHOW: | | - or go back to the newest paste.
1
local tArgs = { ... }
2
if #tArgs ~= 3 then
3
	print( "Usage: <program> <far> <dump> <depth>" )
4
	return
5
end
6
7
-- Mine in a one-wide pattern until we hit something we can't dig
8
local size = tonumber( tArgs[1] ) 
9
local gDump = tonumber( tArgs[2] )
10
local tStop = tonumber( tArgs[3] )
11
if size < 1 then
12
	print( "Excavate outward must be positive" )
13
	return
14
end
15
if tStop < 1 then
16
	tStop = 255
17
end
18
if gDump < 1 then
19
	gDump = 1
20
end
21
22
local xDir = 0
23
local yDir = 1
24
local myX = 0
25
local myY = 0
26
local myZ = 0
27
local depth = 0
28
local collected = 0
29
local aDump = 0
30
local cPos = 0
31
local reseal = false
32
local done = false
33
local lastDepth = 0
34
local bedrock = false
35
local fcDown = 0
36
local fcPush = 0
37
38
local function findFuel()
39
	if turtle.getFuelLevel() < 1 then
40
		for i = 1, 16 do -- loop through the slots
41
  			turtle.select(i) -- change to the slot
42
  			if turtle.refuel(0) then -- if it's valid fuel
43
    			local halfStack = math.ceil(turtle.getItemCount(i)/2) -- work out half of the amount of fuel in the slot
44
    			turtle.refuel(halfStack) -- consume half the stack as fuel
45
				return true
46
  			end
47-
local function proxyDown()
47+
48-
	if not turtle.down() then
48+
49-
		print ("Move down failed. Checking fuel...")
49+
		return true
50-
		if not findFuel() then
50+
51-
			print ("Out of fuel!")
51+
52
end 
53
54-
			if not turtle.down() then
54+
55-
				print ("Something in the way! Bedrock?")
55+
56-
				return false
56+
57-
			end	
57+
58
	end
59
	while turtle.back() == false do
60-
	return true
60+
61
	end
62
	turtle.turnLeft()
63-
local function proxyForward()
63+
64
	turtle.select(1)
65-
		print ("Move forward failed. Checking fuel...")
65+
66-
		if not findFuel() then
66+
67-
			print ("Out of fuel!")
67+
68
	turtle.select(3)
69
	turtle.drop()
70-
			if not turtle.forward() then
70+
71-
				print ("Something in front!")
71+
72-
				return false
72+
73-
			end	
73+
74
	turtle.select(6)
75
	turtle.drop()
76-
	return true
76+
77
	turtle.drop()
78
	turtle.select(8)
79-
local function proxyUp()
79+
80-
	if not turtle.up() then
80+
81-
		print ("Move forward failed. Checking fuel...")
81+
82-
		if not findFuel() then
82+
83-
			print ("Out of fuel!")
83+
84
		sleep(0.8)
85
	end
86-
			if not turtle.up() then
86+
87-
				print ("Something in front!")
87+
88-
				return false
88+
89
	turtle.turnLeft()
90
	turtle.turnLeft()
91
end
92-
	return true
92+
93
local function collect()
94
	-- print( "Collect Called" )
95
	collected = collected + 1
96
	if math.fmod(collected, 25) == 0 then
97
		print( "Mined "..collected.." blocks." )
98
	end
99
	
100
	for n=1,9 do
101
		if turtle.getItemCount(n) == 0 then
102
			return true
103
		end
104
	end
105
	
106
	print( "No empty slots left." )
107
	print (" Going Home to Dump. ")
108
	lastDepth = depth
109
	goHome()
110
	return false
111
end
112
113
local function digFront()
114
	if turtle.dig() then
115
		collect()
116
		return true
117
	else
118
		return false
119
	end
120
end
121
122
local function digDown()
123
	if turtle.digDown() then
124
		collect()
125
		return true
126
	end
127
	return false
128
end
129
130
local function digUp()
131
	if turtle.digUp() then
132
		collect()
133
		return true
134
	end
135
	return false
136
end
137
138
local function moveForward()
139
	if not findFuel() then
140
		return false
141
	end
142
	if not turtle.forward() then
143
		if not digFront() then
144
			return false
145
		end
146
	else
147
		myX = myX + xDir
148
		myY = myY + yDir
149
		return true
150
	end
151
	return false
152
end
153-
local function tryPush()
153+
154-
	if not proxyForward() then
154+
local function faceLeft()
155-
		if turtle.dig() then
155+
	yd = yDir
156-
			collect()
156+
	xd = xDir
157-
	    else
157+
	-- 0,1 -> -1,0
158-
			fcPush = fcPush + 1
158+
	-- -1,0 -> 0,-1
159-
			-- give sand a chance to fall
159+
	-- 0,-1 -> 1,0
160-
 			sleep(0.8)
160+
	-- 1,0 -> 0,1
161-
	    	if turtle.dig() then
161+
162-
	    		collect()
162+
	-- 0,1 -> -1
163-
	    	else
163+
	-- -1,0 -> 0
164-
				fcPush = fcPush + 1
164+
	-- 0,-1 -> 1
165-
		    	return false
165+
	-- 1,0 -> 0
166-
		    end
166+
167-
	    end
167+
	-- 0,1 -> 0
168
	-- -1,0 -> -1
169-
		cPos = cPos + 1
169+
	-- 0,-1 -> 0
170
	-- 1,0 -> 1
171-
	return true
171+
	xDir = -1*yd
172
	yDir = xd
173
	turtle.turnLeft()
174-
local function tryDown()
174+
175-
-- print (" Down Called ")
175+
176-
	if not proxyDown() then
176+
local function faceRight()
177-
		print (" Can't move down, trying dig... ")
177+
	yd = yDir
178-
		if turtle.digDown() then
178+
	xd = xDir
179-
			collect()
179+
	-- 0,1 -> 1,0
180-
	    else
180+
	-- 1,0 -> 0,-1
181-
			fcDown = fcDown + 1
181+
	-- 0,-1 -> -1,0
182
	-- -1,0 -> 0,1
183-
		if not proxyDown() then
183+
184-
			fcDown = fcDown + 1
184+
	-- 0,1 -> 1
185-
			print ("Move down failed.")
185+
	-- 1,0 -> 0
186
	-- 0,-1 -> -1
187-
			depth = depth + 1
187+
	-- -1,0 -> 0
188
189
	-- 0,1 -> 0
190
	-- 1,0 -> -1
191
	-- 0,-1 -> 0
192-
	print (" I moved down. ")
192+
	-- -1,0 -> 1
193-
	return true
193+
194
	xDir = yd
195
	yDir = -1 * xd
196
	turtle.turnRight()
197
end
198
199
200
local function goHome()
201
print( " Coming Home... From Depth: "..depth )
202
	while depth > 0 do
203
		if proxyUp() == true then
204
			print ( "Updiddy: "..depth  )
205
			depth = depth - 1
206
		else
207
			turtle.digUp()
208
			print ( "Up is blocked, panicing." )
209
		end
210
		
211
	end
212
213
	while cPos > 0 do
214
		if turtle.back() == false then
215
			print ( "Back is blocked, panicing." )
216
			turtle.turnLeft()
217
			turtle.turnLeft()
218
			turtle.dig()
219
			turtle.turnLeft()
220
			turtle.turnLeft()
221
		else
222
			cPos = cPos - 1
223
		end
224
	end
225
	print ( "Now Home, failed: "..(fcDown+fcPush).." times." )
226
227
	dump()
228
	
229
	if done == false then
230
	print ( " Going back to work. " )
231
		while depth < lastDepth do
232
			if tryDown() == true then
233
				-- D
234
			end
235
		end
236-
local function goOut()
236+
237-
	while cPos < size do
237+
238-
		if tryPush() == false then
238+
239
240-
			-- print( "Not Moving " )
240+
241
	if not turtle.digDown() then
242-
			-- print( "Moving" )
242+
243
		return false
244
	else
245
		depth = depth + 1
246
		print ( " Layer: "..depth )
247
	end
248-
local function comeBack()
248+
249
250-
		if turtle.back() == true then
250+
local function digLocal()
251
	digDown()
252
	digUp()
253
	digFront()
254
end
255
256
local function digLine()
257
	while (myY < size) do 
258-
			-- print ( "Move your ass" )
258+
		digLocal()
259
		moveForward()
260-
		-- print (cPos)
260+
261
	digUp()
262
	while (myY > 0) do
263
		digDown()
264
		moveBack()
265-
	if tryDown() == false then
265+
266
end
267
268
local function newLine()
269-
		-- depth = depth + 1
269+
	faceRight()
270
	digFront()
271
	moveForward()
272
	faceLeft()
273
end
274-
local fcTotal = 0
274+
275
local function digall()
276
	while (~done == true) do
277-
	while (done ~= true) do
277+
		while (myX < size)  do
278-
		fcTotal = fcPush + fcDown
278+
			digLine()
279-
		print ("Fails: "..fcPush.." : "..fcDown)
279+
			faceRight()
280-
		if fcTotal > 2 then
280+
			digFront()
281-
			done = true
281+
			moveForward()
282
			faceLeft()
283-
		if (depth > tStop) then
283+
284-
			done = true
284+
		digLine()
285
		digDown()
286-
		goOut()
286+
		moveDown()
287-
		comeBack()
287+
		digDown()
288-
		if digDown() == false then
288+
		moveDown()
289-
			done = true
289+
		while (myX > 0)  do
290
			digLine()
291
			faceLeft()
292
			digFront()
293
			moveForward()
294
			faceRight()
295
		end
296
		digLine()
297
		digDown()
298
		moveDown()
299
		digDown()
300
		moveDown()
301
	end
302
	print (" Done, Coming Home Last Time ")
303
	done = true
304
	goHome()
305
end
306
307
digall()