View difference between Paste ID: UHqpQPfT and YLxi9KKX
SHOW: | | - or go back to the newest paste.
1-
-- pastebin get YLxi9KKX startup
1+
-- pastebin get UHqpQPfT startup
2
-- -------------------------------------------
3
-- My excavate -Sinkir-
4-
-- Version 2.0
4+
-- Version 2.1 (2014/10/2)
5
-- slot 1 ender Chest resources      +-+-+-+-+
6
-- slot 2 ender Chest fuel           |C|C|L|F|
7
-- slot 3 chuck Loader or anchor     |S|D| | |
8
-- slot 4 Fuel                       | | | | |
9
-- slot 5 Stone(block to ignore 1)   | | | | |
10
-- slot 6 Dirt (block to ignore 2)   +-+-+-+-+
11
-- -------------------------------------------
12
--   _____
13
--  |  ___|   _ _ __   ___
14
--  | |_ | | | | '_ \ / __|
15
--  |  _|| |_| | | | | (__
16
--  |_|   \__,_|_| |_|\___|
17
--
18
dataFilePath = "data"
19
-- Exemple of data file:
20
-- --------------------
21
-- 1,0,0,n
22
-- 2,0,0,n
23
-- 3,0,0,n
24
-- 4,0,0,n
25
-- 4,0,1,n
26
-- 4,0,2,n
27
-- 4,0,3,n
28
-- 4,0,3,s
29
-- 3,0,3,s
30
-- 2,0,3,s
31
-- 1,0,3,s
32
-- ...
33
-- --------------------
34
-- we keep 5 last move
35
-- format : x,y,z,facing
36
--               (n e s w)
37
-- last line keep the info of the actual action
38
--
39
--
40
-- `.+x       |-z     +y.'
41
--   `.       |       .'
42
--     `.     |up   .'
43
--  north`.   |   .' east
44
--         `. | .'
45
--           :+:
46
--         .' | `.
47
--   west.'   |   `. south
48
--     .'     |     `.
49
--   .'       |down   `.
50
-- .'-y     +z|       -x`.
51
-- 
52
-- yes +z is for down
53
54
55
-- si x est egale a 0 on est sur la colone de bloc devan l'anchor
56
-- si x est egale a 8 on est sur la colone de fin
57
-- si y est egale a 1 on remonte pour retrouvé l'anchor
58
-- si y est egale a 0 on continue de dessendre 
59
-- si z est egale a 0 on est sur la ligne de bloc de l'anchor
60
61
-- si x = 8 && z == 0 on dessend
62
-- si x = 8 && z == 3 on stop dessendre on ce retourne
63
-- si x = 0 && z == 3 on dessend
64
-- si x = 0 && z == 6 on stop dessendre on ce retourne
65
-- si x = 8 && z == 6 on dessend
66
-- si x = 8 && z == 9 on stop dessendre on ce retourne
67
68
function testFuel()
69
	if(fuel() < 16)then
70
		print('Plus de coco, test de refuel')
71
		select(4)
72
		turtle.refuel(1)
73
	end
74
	if(count(4) == 0)then
75
		return false
76
	end
77
	return true
78
end
79
function checkFuel()
80
	if(turtle.compareTo(4) == true)then
81
		if(count(4) < 64) then
82
			turtle.transferTo(4, turtle.getItemSpace(4))
83
		end
84
	end
85
end
86
function go(i)
87
	if(i == nil)then
88
		i = 0
89
	end
90
91
92
	if(turtle.detect()==true)then
93
		if(turtle.dig()==false)then
94
			fileSet(dataFilePath.."-IMPORTANT", "move,digUp,up")
95
			z = z-1
96
			return false
97-
		elseif(turtle.detect()==true)then
97+
98
			sleep(1)
99
			if(turtle.detect()==true)then
100-
				if(turtle.dig()==true)then
100+
				while(i<50)do
101-
					if(turtle.forward()==true)then
101+
					i=i+1
102
					if(turtle.dig()==true)then
103
						sleep(1)
104-
						return go(i)
104+
						if(turtle.forward()==true)then
105
							return true
106
						else
107
							return go(i)
108
						end
109
					end
110
					sleep(0.2)
111-
			if(turtle.forward()==true)then
111+
112
				end
113
			else
114-
				return go(i)
114+
				if(turtle.forward()==true)then
115
					return true
116
				else
117
					return go(i)
118
				end
119
			end
120
		end
121
	else
122
		if(turtle.forward()==true)then
123
			return true
124
		else
125
			while(i<50 and turtle.attack() == true)do
126
				i=i+1
127
				sleep(0.2)
128
				
129
			end
130
			return go(0)
131
		end
132
	end
133
134
	return false
135
end
136
137
function up(i)
138
139
	if(i == nil)then
140
		i = 0
141
	end
142
143
	
144-
		elseif(turtle.detectUp()==true)then
144+
145
		select(7)
146
		if(turtle.digUp()==false)then
147-
				if(turtle.digUp()==true)then
147+
148-
					if(turtle.up()==true)then
148+
149
			sleep(1)
150
			if(turtle.detectUp()==true)then
151-
						return up(i)
151+
				while(i<50)do
152
					i=i+1
153
					if(turtle.digUp()==true)then
154
						sleep(1)
155
						if(turtle.up()==true)then
156
							return true
157
						else
158-
			if(turtle.up()==true)then
158+
							return up(i)
159
						end
160
					end
161-
				return up(i)
161+
					sleep(0.2)
162
					
163
				end
164
			else
165
				if(turtle.up()==true)then
166
					return true
167
				else
168
					return up(i)
169
				end
170
			end
171
		end
172
	else
173
		if(turtle.up()==true)then
174
			return true
175
		else
176
			while(i<50 and turtle.attackUp() == true)do
177
				i=i+1
178
				sleep(0.2)
179
				
180
			end
181
			return up(0)
182
		end
183
	end
184
185
	return false
186
end
187
188
function down(i)
189
	if(i == nil)then
190
		i = 0
191
	end
192
	
193
	if(turtle.detectDown()==true)then
194
		select(7)
195
		if(turtle.digDown()==false)then
196
			return false
197
		elseif(turtle.detectDown()==true)then
198
			while(i<50)do
199
				i=i+1
200
				if(turtle.digDown()==true)then
201
					if(turtle.down()==true)then
202
						return true
203
					else
204
						return down(i)
205
					end
206
				end
207
				sleep(0.2)
208
				
209
			end
210
		else
211
			if(turtle.down()==true)then
212
				return true
213
			else
214
				return down(i)
215
			end	
216
		end
217
	else
218
		if(turtle.down()==true)then
219
			return true
220
		else
221
			while(i<50 and turtle.attackDown() == true)do
222
				i=i+1
223
				sleep(0.2)
224
				
225
			end
226
			return down(0)
227
		end
228
	end
229
230
	return false
231
end
232
left = function()
233
	if(turtle.turnLeft()==false)then
234
		sleep(1)
235
		left()
236
	else
237
		return true
238
	end
239
end
240
241
right = function()
242
	if(turtle.turnRight()==false)then
243
		sleep(1)
244
		right()
245
	else
246
		return true
247
	end
248
end
249
250
251
function downGps()
252
	if(down(0)==true)then
253
		z=z+1
254
		return savedata()
255
	else
256
		print('down return false x ='..x)
257
		if(x == numberBlock)then
258
			if(y == 0)then
259
			
260
					fileSet(dataFilePath.."-IMPORTANT", "move,right,go,testUpDown,test,right")
261
					local ligne1 = x..","..tostring(y+1)..","..z..",s\n"
262
					local ligne2 = x..","..tostring(y+1)..","..z..",e\n"
263
					local ligne3 = x..","..y..","..z..",e\n"
264
					local ligne4 = tabCoord[1][1]..","..tabCoord[1][2]..","..tabCoord[1][3]..","..tabCoord[1][4].."\n"
265
					local ligne5 = tabCoord[2][1]..","..tabCoord[2][2]..","..tabCoord[2][3]..","..tabCoord[2][4].."\n"
266
					local ligne6 = numberBlock..",0"
267
					return fileSet(dataFilePath, ligne1..ligne2..ligne3..ligne4..ligne5..ligne6)
268
			
269
			else
270
				print("wtf? call DownGps with y ="..y)
271
			end
272
		else
273
			if(y == 0)then
274
					fileSet(dataFilePath.."-IMPORTANT", "move,left,go,testUpDown,test,left")
275
					local ligne1 = x..","..tostring(y+1)..","..z..",n\n"
276
					local ligne2 = x..","..tostring(y+1)..","..z..",e\n"
277
					local ligne3 = x..","..y..","..z..",e\n"
278
					local ligne4 = tabCoord[1][1]..","..tabCoord[1][2]..","..tabCoord[1][3]..","..tabCoord[1][4].."\n"
279
					local ligne5 = tabCoord[2][1]..","..tabCoord[2][2]..","..tabCoord[2][3]..","..tabCoord[2][4].."\n"
280
					local ligne6 = numberBlock..",0"
281
					return fileSet(dataFilePath, ligne1..ligne2..ligne3..ligne4..ligne5..ligne6)
282
			else
283
				print("wtf? call DownGps with y ="..y)
284
			end
285
		end
286
		return true
287
	end
288
end
289
function savedata()
290
	local ligne1 = x..","..y..","..z..","..f.."\n"
291
	local ligne2 = tabCoord[1][1]..","..tabCoord[1][2]..","..tabCoord[1][3]..","..tabCoord[1][4].."\n"
292
	local ligne3 = tabCoord[2][1]..","..tabCoord[2][2]..","..tabCoord[2][3]..","..tabCoord[2][4].."\n"
293
	local ligne4 = tabCoord[3][1]..","..tabCoord[3][2]..","..tabCoord[3][3]..","..tabCoord[3][4].."\n"
294
	local ligne5 = tabCoord[4][1]..","..tabCoord[4][2]..","..tabCoord[4][3]..","..tabCoord[4][4].."\n"
295
	local ligne6 = numberBlock..",0"
296
	return fileSet(dataFilePath, ligne1..ligne2..ligne3..ligne4..ligne5..ligne6)
297
298
end
299
function gps()
300
301
	if(x == 0 and y == 0 and z ==0 and f == "n")then
302
		if(go()==true)then
303
			x = x+1
304
		end
305
		return savedata()
306
	end
307
	if(x == 0 and y == 1 and z ==0 and f == "s")then
308
		if(right()==true)then
309
			f = "w"
310
		end
311
		return savedata()
312
	end
313
	if(x == 0 and y == 1 and z ==0 and f == "w")then
314
		if(go()==true)then
315
			y=y-1
316
		end
317
		return savedata()
318
	end
319
	if(x == 0 and y == 0 and z ==0 and f == "w")then
320
		select(3)
321
		if(turtle.compareUp() == true)then	
322
			-- on est en dessou du chuck loader, tout va bien :)
323
			print('My chunck loader <3')
324
			fileSet(dataFilePath.."-IMPORTANT", "changeLoader,left,left,go,testUpDown,go,testUpDown,test,digUp,placeUp,back,back,digUp,go,go,left")
325
			return fileSet(dataFilePath, "0,0,0,n\n0,0,0,n\n0,0,0,n\n0,0,0,n\n0,0,0,n\n"..numberBlock..",0")
326
327
		else
328
			print("i'm in 0,0,0 and ... no Anchor ? :'(")
329
		end
330
		return savedata()
331
	end
332
333
334
335
	if(x > 0 and x < numberBlock)then
336
		if(f=="n")then
337
			if(go()==true)then
338
				x = x+1
339
			end
340
		elseif(f=="s")then
341
			if(go()==true)then
342
				x = x-1
343
			end
344
		end
345
		return savedata()
346
	end
347
348
	if(x == numberBlock)then
349
		if(f == "e")then
350
			if(right()==true)then
351
				f = "s"
352
			end
353
			return savedata()
354
		end
355
		
356
		
357
		if(z == 0)then
358
			if(y == 0)then
359
				return downGps()
360
			else
361
				if(f == "n")then
362
					if(right()==true)then
363
						f = "e"
364
					end
365
				elseif(f == "e")then
366
					if(right()==true)then
367
						f = "s"
368
					end				
369
				else
370
					if(go()==true)then
371
						x = x-1
372
					end
373
				end
374
			end
375
			return savedata()
376
		end
377
		if(z == tonumber(tabCoord[2][3]))then
378
			-- si z est le meme que au dernier mouvement-1
379
			if(f == "s")then
380
				if(go()==true)then
381
					x = x-1
382
				end
383
			else
384
				if(y == 0)then
385
					return downGps()
386
				else
387
					if(up()==true)then
388
						z = z-1
389
					end
390
				end
391
			end
392
		else
393
			if(tonumber(tabCoord[2][3]) == tonumber(tabCoord[3][3]))then
394
				-- si, au avant-dernier mouvement on venais du meme z
395
				-- on continue de dessendre
396
				if(y == 0)then
397
					return downGps()
398
				else
399
					if(up()==true)then
400
						z = z-1
401
					end
402
				end
403
			else
404
				if(tonumber(tabCoord[3][3]) == tonumber(tabCoord[4][3]))then
405
					-- si, au avant-avant-dernier mouvement on venais du meme z
406
					-- on dessend encor une fois
407
					if(y == 0)then
408
						return downGps()
409
					else
410
						if(up()==true)then
411
							z = z-1
412
						end
413
					end
414
				else
415
					-- on ce retourne
416
					if(right()==true)then
417
						f = "e"
418
					end
419
				end
420
			end
421
		end
422
		return savedata()
423
	end
424
425
426
	if(x == 0)then
427
		if(f == "e")then
428
			if(left()==true)then
429
				f = "n"
430
			end
431
			return savedata()
432
		end
433
		if(z == 0)then
434
			if(y == 0)then
435
				-- change anchor (not your bisnesse gps dude)
436
			end
437
			return savedata()
438
		end
439
440
		--print(z.." == "..tabCoord[2][3])
441
		if(z == tonumber(tabCoord[2][3]))then
442
			-- si z est le meme que au dernier mouvement-1
443
			if(f == "n")then
444
				if(go()==true)then
445
					x = x+1
446
				end
447
			else
448
				if(y == 0)then
449
					return downGps()
450
				else
451
					if(up()==true)then
452
						z = z-1
453
					end
454
				end
455
			end
456
		else
457
			if(tonumber(tabCoord[2][3]) == tonumber(tabCoord[3][3]))then
458
				-- si, au avant-dernier mouvement on venais du meme z
459
				-- on continue de dessendre
460
				if(y == 0)then
461
					return downGps()
462
				else
463
					if(up()==true)then
464
						z = z-1
465
					end
466
				end
467
			else
468
				if(tonumber(tabCoord[3][3]) == tonumber(tabCoord[4][3]))then
469
					-- si, au avant-avant-dernier mouvement on venais du meme z
470
					-- on dessend encor une fois
471
					if(y == 0)then
472
						return downGps()
473
					else
474
						if(up()==true)then
475
							z = z-1
476
						end
477
					end
478
				else
479
					-- on ce retourne
480
					
481
					if(left()==true)then
482
						f = "e"
483
					end
484
				end
485
			end
486
		end
487
		return savedata()
488
	end
489
490
end
491
492
493
494
495
496
497
498
function getCoordinates()
499
	local r = {}
500
	local tab = split(fileGet(dataFilePath), "\n")
501
	for k,v in pairs(tab) do
502
		table.insert(r,split(v, ","))
503
	end
504
	return r
505
end
506
507
--
508
--
509
count = function(id)
510
	return turtle.getItemCount(id)
511
end
512
back = function()
513
	return turtle.back()
514
end
515
select = function(id)
516
	return turtle.select(id)
517
end
518
fuel = function()
519
	return turtle.getFuelLevel()
520
end
521
move = function(id, nb)
522
	return turtle.transferTo(id, nb)
523
end
524
--
525
--
526
function fileGet(path)
527
	if(fs.exists(path))then
528
		tabFile = fs.open(path, "r")
529
		text = tabFile.readAll()
530
		tabFile.close()
531
		return text
532
	else
533
		print("fileGet() File not found.")
534
		print(path)
535
		return false
536
	end
537
end
538
539
function fileSet(path, text)
540
	if(fs.isReadOnly(path))then
541
		print("fileSet() File is read only.")
542
		print(path)
543
		return false
544
	else
545
		tabFile = fs.open(path, "w")
546
		tabFile.write(text)
547
		tabFile.close()
548
		return true
549
	end
550
end
551
552
function split(str, pat)
553
	-- source of the function :
554
	-- http://lua-users.org/wiki/SplitJoin
555
	-- Compatibility: Lua-5.1
556
	local t = {}  -- NOTE: use {n = 0} in Lua-5.0
557
	local fpat = "(.-)" .. pat
558
	local last_end = 1
559
	local s, e, cap = str:find(fpat, 1)
560
	while s do
561
		if s ~= 1 or cap ~= "" then
562
			table.insert(t,cap)
563
		end
564
		last_end = e+1
565
		s, e, cap = str:find(fpat, last_end)
566
	end
567
	if last_end <= #str then
568
		cap = str:sub(last_end)
569
		table.insert(t, cap)
570
	end
571
	return t
572
end
573
574
function printTab(tab)
575
	for key, value in pairs(tab) do
576
		print("[".. key .."]"..value.."")	
577
	end
578
end
579
580
--
581
--
582
583
function init()
584
	if(count(1) == 0)then
585
		print("No ender chest for resources in slot 1.., exit")
586
		return false
587
	end
588
	if(count(2) == 0)then
589
		print("No ender chest for fuel in slot 2, exit")
590
		return false
591
	end
592
	if(count(3) == 0)then
593
		print("No chuck loader/anchor in slot 3, exit")
594
		return false
595
	end
596
	if(count(4) == 0)then
597
		print("No fuel in slot 4, exit")
598
		return false
599
	end
600
	if(count(5) == 0)then
601
		print("No block to ignore in slot 5, exit")
602
		return false
603
	end
604
	if(count(6) == 0)then
605
		print("No block to ignore in slot 6, exit")
606
		return false
607
	end
608
	select(3)
609
	if(count(3) == 2)then
610
		if(turtle.detectUp() == true)then
611
			while(turtle.digUp()==true)do
612
				sleep(2)
613
			end
614
			if(turtle.placeUp()==true)then
615
				return true
616
			else
617
				print("Can' placeUp the loader/anchor  :'(")
618
				return false
619
			end
620
		else
621
			if(turtle.placeUp()==true)then
622
				return true
623
			else
624
				print("Can' placeUp the loader/anchor  :'(")
625
				return false
626
			end			
627
		end
628
	else
629
		if(turtle.compareUp()==true)then
630
			-- ok we are under the chuck loader/anchor
631
			return true
632
		else
633
			print("I'm lost :'(")
634
			return false
635
		end
636
	end
637
	return true
638
end
639
640
641
function checkSlotVide()
642
	if(count(16) == 0 and count(15) == 0)then
643
		return true
644
	end
645
	return false
646
end
647
function checkInv(nbflag)
648
	-- check si il reste un slot de vide
649
	if(checkSlotVide() == false) then
650
		if(videInv(nbflag)==false)then
651
			return false
652
		end
653
	end
654
	if(testFuel() == false) then
655
		if(getFuel()==false)then
656
			return false
657
		end
658
	end
659
	return true
660
end
661
662
663
664
function getFuel()
665
	select(7)
666
	if(turtle.detect()==false)then
667
		while(turtle.attack()==true)do
668
			sleep(0.1)
669
		end
670
		select(2)
671
		if(turtle.place() == true)then
672
			fileSet(dataFilePath.."-IMPORTANT", "getFuel,suck,dig")
673
			return false
674
		end
675
	elseif(turtle.detectUp()==false)then
676
		while(turtle.attackUp()==true)do
677
			sleep(0.1)
678
		end
679
		select(2)
680
		if(turtle.placeUp() == true)then
681
			fileSet(dataFilePath.."-IMPORTANT", "getFuel,suckUp,digUp")
682
			return false
683
		end
684
	elseif(turtle.detectDown()==false)then
685
		while(turtle.attackDown()==true)do
686
			sleep(0.1)
687
		end
688
		select(2)
689
		if(turtle.placeDown() == true)then
690
			fileSet(dataFilePath.."-IMPORTANT", "getFuel,suckDown,digDown")
691
			return false
692
		end	
693
	else
694
		if(back()==true)then
695
			sleep(0.2)
696
			if(turtle.detect()==false)then
697
				select(2)
698
				if(turtle.place() == true)then
699
					fileSet(dataFilePath.."-IMPORTANT", "getFuel,suck,dig,go")
700
					return false
701
				else
702
					go()
703
					getFuel()
704
				end
705
			end
706
		end
707
		if(turtle.detect()==true)then
708
			if(turtle.dig()==false)then
709
				if(up()==true)then
710
					if(turtle.detectDown()==false)then
711
						select(2)
712
						if(turtle.placeDown() == true)then
713
							fileSet(dataFilePath.."-IMPORTANT", "getFuel,suckDown,digDown,down")
714
							return false
715
						else
716
							down()
717
							getFuel()
718
						end	
719
					end
720
				elseif(down()==true)then
721
					if(turtle.detectUp()==false)then
722
						select(2)
723
						if(turtle.placeUp() == true)then
724
							fileSet(dataFilePath.."-IMPORTANT", "getFuel,suckUp,digUp,up")
725
							return false
726
						else
727
							up()
728
							getFuel()
729
						end	
730
					end	
731
				else
732
					print("can't go: back,up,down and can't dig")
733
					while (right()==false)do
734
						sleep(0.1)
735
					end
736
					while (right()==false)do
737
						sleep(0.1)
738
					end
739
					while (dig()==true)do
740
						sleep(0.1)
741
					end
742
					select(1)
743
					if(turtle.place() == true)then
744
						fileSet(dataFilePath.."-IMPORTANT", "getFuel,suck,dig,left,left")
745
						return false
746
					else
747
						getFuel()
748
					end
749
				end
750
			else
751
				getFuel()
752
			end
753
		elseif(turtle.digUp()==true)then
754
			getFuel()
755
		elseif(turtle.digDown()==true)then
756
			getFuel()
757
		end
758
	end
759
	return true
760
end
761
762
function videInv(nbflag)
763
	select(7)
764
	if(turtle.detect()==false)then
765
		while(turtle.attack()==true)do
766
			sleep(0.1)
767
		end
768
		select(1)
769
		if(turtle.place() == true)then
770
			if(nbflag == 0)then
771
				fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAll,dig")
772
			else
773
				fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAll,dig")
774
			end
775
			return false
776
		end
777
	elseif(turtle.detectUp()==false)then
778
		while(turtle.attackUp()==true)do
779
			sleep(0.1)
780
		end
781
		select(1)
782
		if(turtle.placeUp() == true)then
783
			if(nbflag == 0)then
784
				fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAllUp,digUp")
785
			else
786
				fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAllUp,digUp")
787
			end
788
			return false
789
		end
790
	elseif(turtle.detectDown()==false)then
791
		while(turtle.attackDown()==true)do
792
			sleep(0.1)
793
		end
794
		select(1)
795
		if(turtle.placeDown() == true)then
796
			if(nbflag == 0)then
797
				fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAllDown,digDown")
798
			else
799
				fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAllDown,digDown")
800
			end
801
			return false
802
		end	
803
	else
804
		if(back()==true)then
805
			sleep(0.2)
806
			if(turtle.detect()==false)then
807
				select(1)
808
				if(turtle.place() == true)then
809
					if(nbflag == 0)then
810
						fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAll,dig,go")
811
					else
812
						fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAll,dig,go")
813
					end
814
					return false
815
				else
816
					go()
817
					videInv(0)
818
				end
819
			end
820
		end
821
		if(turtle.detect()==true)then
822
			if(turtle.dig()==false)then
823
				if(up()==true)then
824
					if(turtle.detectDown()==false)then
825
						select(1)
826
						if(turtle.placeDown() == true)then
827
							if(nbflag == 0)then
828
								fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAllDown,digDown,down")
829
							else
830
								fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAllDown,digDown,down")
831
							end
832
							return false
833
						else
834
							down()
835
							videInv(0)
836
						end	
837
					end
838
				elseif(down()==true)then
839
					if(turtle.detectUp()==false)then
840
						select(1)
841
						if(turtle.placeUp() == true)then
842
							if(nbflag == 0)then
843
								fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAllUp,digUp,up")
844
							else
845
								fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAllUp,digUp,up")
846
							end
847
							return false
848
						else
849
							up()
850
							videInv(0)
851
						end	
852
					end	
853
				else
854
					print("can't go: back,up,down and can't dig")
855
					while (right()==false)do
856
						sleep(0.1)
857
					end
858
					while (right()==false)do
859
						sleep(0.1)
860
					end
861
					while (dig()==true)do
862
						sleep(0.1)
863
					end
864
					select(1)
865
					if(turtle.place() == true)then
866
						if(nbflag == 0)then
867
							fileSet(dataFilePath.."-IMPORTANT", "videInv,dropAll,dig,left,left")
868
						else
869
							fileSet(dataFilePath.."-IMPORTANT2", "videInv,dropAll,dig,left,left")
870
						end
871
						return false
872
					else
873
						videInv(0)
874
					end
875
				end
876
			else
877
				videInv(0)
878
			end
879
		elseif(select(3)==true and turtle.compareUp() == false and turtle.digUp()==true)then
880
			videInv(0)
881
		elseif(turtle.digDown()==true)then
882
			videInv(0)
883
		end
884
	end
885
	return true
886
end
887
888
function testUpDown(nbflag)
889
	if(turtle.detectUp() == true or turtle.detectDown())then
890
		select(5)
891
		flagDown = turtle.compareDown()
892
		flagUp = turtle.compareUp()
893
		select(3)
894
		if(turtle.compareUp()==true)then
895
			flagUp = true
896
		end
897
		select(6)
898
		if(flagDown == false and turtle.compareDown() == false)then
899
			repeat
900
				flag = turtle.suckDown()
901
				if(flag == true)then
902
					if(checkInv(nbflag)==false)then
903
						return false
904
					end
905
				end
906
			until flag == false
907
			turtle.digDown()
908
			if(checkInv(nbflag)==false)then
909
			 	return false
910
			end
911
		end
912
		if(flagUp == false and turtle.compareUp() == false)then
913
			repeat
914
				flag = turtle.suckUp()
915
				if(flag == true)then
916
					if(checkInv(nbflag)==false)then
917
						return false
918
					end
919
				end
920
			until flag == false
921
			turtle.digUp()
922
			if(checkInv(nbflag)==false)then
923
			 	return false
924
			end
925
		end
926
	end
927
	return true
928
end
929
function test(nbflag)
930
	if(turtle.detect() == true)then
931
		select(5)
932
		if(turtle.compare() == false)then
933
			select(6)
934
			if(turtle.compare() == false)then
935
				repeat
936
					flag = turtle.suck()
937
					if(flag == true)then
938
						if(checkInv(nbflag)==false)then
939
							return false
940
						end
941
					end
942
				until flag == false
943
				turtle.dig()
944
				if(checkInv(nbflag)==false)then
945
					return false
946
				end
947
			end
948
		end
949
	end
950
	return true
951
end
952
953
function Shaundi()
954
	local save = function(data, path)
955
		local str = data[1]..","
956
		for k,v in ipairs(data)do
957
			if(k>2)then
958
				str = str..v
959
				if(data[k+1] ~= nil)then
960
					str = str..","
961
				end
962
			end
963
		end
964
		if(str == data[1]..",")then
965
			fs.delete(dataFilePath..path)
966
		else
967
			fileSet(dataFilePath..path, str)
968
		end
969
	end
970
	local path = "-IMPORTANT"
971
	if(fs.exists(dataFilePath.."-IMPORTANT2")==true)then
972
		path = "-IMPORTANT2"
973
	end
974
	local data = split(fileGet(dataFilePath..path), ",")
975
	
976
	
977
	
978
	if(data[1] == "videInv")then
979
		select(1)
980
	end
981
	if(data[1] == "getFuel")then
982
		select(2)
983
	end
984
	if(data[1] == "changeLoader")then
985
		select(7)
986
	end
987
	
988
	
989
990
	if(data[2]=="test")then
991
		if(test(1)==true)then
992
			save(data, path)
993
		end
994
	elseif(data[2]=="testUpDown")then
995
		if(testUpDown(1)==true)then
996
			save(data, path)
997
		end
998
	elseif(data[2]=="go")then
999
		if(go()==true)then
1000
			save(data, path)
1001
		end
1002
	elseif(data[2]=="back")then
1003
		if(back()==true)then
1004
			save(data, path)
1005
		end
1006
	elseif(data[2]=="left")then
1007
		if(left()==true)then
1008
			save(data, path)
1009
		end		
1010
	elseif(data[2]=="right")then
1011
		if(right()==true)then
1012
			save(data, path)
1013
		end		
1014
	elseif(data[2]=="up")then
1015
		if(up()==true)then
1016
			save(data, path)
1017
		end	
1018
	elseif(data[2]=="down")then
1019
		if(down()==true)then
1020
			save(data, path)
1021
		end
1022
	elseif(data[2]=="dig")then
1023
		if(turtle.dig()==true)then
1024
			save(data, path)
1025
		end
1026
	elseif(data[2]=="digUp")then
1027
		if(data[1] == "changeLoader")then
1028
			select(3)
1029
		end		
1030
		
1031
		if(turtle.detectUp() == false or turtle.digUp()==true)then
1032
			save(data, path)
1033
		end		
1034
		
1035
	elseif(data[2]=="digDown")then
1036
		if(turtle.digDown()==true)then
1037
			save(data, path)
1038
		end	
1039
	elseif(data[2]=="placeUp")then
1040
		if(turtle.detectUp() == true)then
1041
			turtle.digUp()
1042
		else
1043
			if(data[1] == "changeLoader")then
1044
				select(3)
1045
			end	
1046
			if(turtle.placeUp()==true)then
1047
				save(data, path)
1048
			end		
1049
		end
1050
	end
1051
	
1052
	
1053
	if(data[1] == "videInv")then
1054
		if(data[2]=="dropAll")then
1055
			if(dropAll("go")==true)then
1056
				save(data, path)
1057
			end
1058
		elseif(data[2]=="dropAllUp")then
1059
			if(dropAll("up")==true)then
1060
				save(data, path)
1061
			end
1062
		elseif(data[2]=="dropAllDown")then
1063
			if(dropAll("down")==true)then
1064
				save(data, path)
1065
			end
1066
		end
1067
	end
1068
	if(data[1] == "getFuel")then
1069
		if(data[2]=="suck")then
1070
			select(4)
1071
			if(count(4)>0)then
1072
				turtle.transferTo(16, count(4))
1073
			end
1074
			if(suck("go")==true)then
1075
				save(data, path)
1076
			end
1077
		elseif(data[2]=="suckUp")then
1078
			select(4)
1079
			if(count(4)>0)then
1080
				turtle.transferTo(16, count(4))
1081
			end
1082
			if(suck("up")==true)then
1083
				save(data, path)
1084
			end
1085
		elseif(data[2]=="suckDown")then
1086
			select(4)
1087
			if(count(4)>0)then
1088
				turtle.transferTo(16, count(4))
1089
			end
1090
			if(suck("down")==true)then
1091
				save(data, path)
1092
			end
1093
		end
1094
	end
1095
		
1096
	select(7)
1097
	
1098
end
1099
function suck(dir)
1100
	local flag
1101
	if(dir == "go")then
1102
		flag = turtle.suck()
1103
	elseif(dir == "up")then
1104
		flag = turtle.suckUp()
1105
	elseif(dir == "down")then
1106
		flag = turtle.suckDown()
1107
	end
1108
	
1109
	if(flag == false)then
1110
		return false
1111
	end
1112
	return true
1113
end
1114
1115
function dropAll(dir)
1116
	local flag
1117
	for i=7,16 do
1118
		if(count(i)>0)then
1119
			select(i)
1120
			checkFuel()
1121
			if(dir == "go")then
1122
				flag = turtle.drop()
1123
			elseif(dir == "up")then
1124
				flag = turtle.dropUp()
1125
			elseif(dir == "down")then
1126
				flag = turtle.dropDown()
1127
			end
1128
			if(flag == false)then
1129
				sleep(1)
1130
				i = i-1
1131
			end
1132
		end
1133
	end
1134
	return true
1135
end
1136
1137
--  __  __       _        ____
1138
-- |  \/  | __ _(_)_ __  / /\ \
1139
-- | |\/| |/ _` | | '_ \| |  | |
1140
-- | |  | | (_| | | | | | |  | |
1141
-- |_|  |_|\__,_|_|_| |_| |  | |
1142
--                       \_\/_/
1143
1144
--fileSet(dataFilePath, "0,0,0,n\n0,0,0,n\n0,0,0,n\n0,0,0,n\n0,0,0,n")
1145
1146
args = { ... }
1147
if( args[1]==null)then
1148
	args[1] = 16
1149
	--print("Début de 'tree', par defaut, "..args[1].." blocks")
1150
else
1151
	--print("Début de 'tree', "..args[1].." blocks")
1152
end
1153
1154
1155
stop=false
1156
1157
if(fs.exists(dataFilePath))then
1158
	-- on continue
1159
tabCoord = getCoordinates()
1160
numberBlock = tabCoord[6][1]
1161
else
1162
	if(init()==false) then
1163
		stop=true
1164
	else
1165
		--print("Hi Master, please press any key to start")
1166
		--os.pullEvent("key")
1167
		numberBlock = args[1]
1168
1169
		fileSet(dataFilePath, "0,0,0,n\n0,0,0,n\n0,0,0,n\n0,0,0,n\n0,0,0,n\n"..numberBlock..",0")
1170
	end
1171
end
1172
testFuel()
1173
numberBlock = tonumber(numberBlock)
1174
i = 0
1175
--while(stop==false)do
1176
while(stop==false)do
1177
	if(fs.exists(dataFilePath.."-IMPORTANT2")==true)then
1178
		Shaundi()
1179
	elseif(fs.exists(dataFilePath.."-IMPORTANT")==true)then
1180
		Shaundi()
1181
	elseif(testUpDown(0) == true and test(0) == true)then
1182
		tabCoord = getCoordinates()
1183
		x = tonumber(tabCoord[1][1])
1184
		y = tonumber(tabCoord[1][2])
1185
		z = tonumber(tabCoord[1][3])
1186
		f = tabCoord[1][4]
1187
		if(gps()==false)then
1188
			stop = true
1189
		end
1190
		if(testFuel() == false) then
1191
			getFuel()
1192
		else
1193
			checkInv(0)
1194
		end
1195
		
1196
		--print(i..":"..x..","..y..","..z..","..f)	
1197
1198
	
1199
	end
1200
	select(6)
1201
	sleep(0.2)
1202
end