View difference between Paste ID: 2rA9W4aW and gGmuACmw
SHOW: | | - or go back to the newest paste.
1
2
--SETTINGS DEFAULTS
3
local stop=false
4
local settings={}
5-
settings["miningTime"]=5
5+
settings["miningTime"]=4
6
settings["digDelay"]=1
7
settings["reserveFuelLevel"]=10
8
settings["chargeTime"]=30
9
settings["debug"]=false
10-
settings["blocksToTravel"]=0
10+
11-
settings["blocksTraveled"]=0
11+
12-
settings["rowsToTravel"]=0
12+
13-
settings["rowsTraveled"]=0
13+
   local file = fs.open("settings","r")
14-
settings["blocksMined"]=0
14+
15
   file.close()
16-
settings["turning"]="left"
16+
17-
settings["midTurn"]=false
17+
18
19-
--CONSTANTS
19+
20-
local cNone=0
20+
    local file = fs.open("settings","w")
21-
local cLeft=1
21+
22-
local cYes=2
22+
23-
local cNo=3
23+
24-
local cPowerDown=4
24+
25-
local cPowerUp=5
25+
function cleanUp()
26-
local cForward=6
26+
    if nextStep=="chargeplacecharge" or nextStep=="chargedigcharge" then
27-
local cReadyCharge=7
27+
		if settings["debug"]==true then
28-
local cComplete=8
28+
			print("charge deployed")
29-
local cGoHome=9
29+
30-
local cRight=10
30+
		if turtle.getItemCount(3)==0 then
31-
local cReboot=11
31+
			if settings["debug"]==true then
32-
local cShutdown=12
32+
				print("Fully deployed")
33-
local cClearSettings=13
33+
			end
34-
local cNeedFuel=14
34+
			digCharge()
35-
local cPairing=15
35+
		elseif turtle.getItemCount(7)==0 then
36
			if settings["debug"]==true then
37
				print("bc producer deployed")
38
			end
39-
   local file = fs.open("SnapBoxSettings","r")
39+
			if turtle.detectDown()==false then
40
				if settings["debug"]==true then
41
					print("moving down one")
42
				end
43
				turtle.down()
44
			end
45
			turtle.select(7)
46-
    local file = fs.open("SnapBoxSettings","w")
46+
			turtle.digDown()
47
			turtle.down()
48
			turtle.select(6)
49
			turtle.digDown()
50
			turtle.down()
51
			turtle.select(5)
52
			turtle.digDown()
53
			turtle.forward()
54
			turtle.select(4)
55
			turtle.digDown()
56
		elseif turtle.getItemCount(6)==0 then
57
			if settings["debug"]==true then
58
				print("Energy bridge deployed")
59
			end
60
			if turtle.detectDown()==false then
61
				if settings["debug"]==true then
62
					print("moving down one")
63
				end
64
				turtle.down()
65
			end
66
			turtle.select(6)
67
			turtle.digDown()
68
			turtle.down()
69
			turtle.select(5)
70
			turtle.digDown()
71
			turtle.forward()
72
			turtle.select(4)
73
			turtle.digDown()
74
		elseif turtle.getItemCount(5)==0 then
75
			if settings["debug"]==true then
76
				print("IC2 consumer deployed")
77
			end
78
			if turtle.detectDown()==false then
79
				if settings["debug"]==true then
80
					print("moving down one")
81
				end
82
				turtle.down()
83
			end
84
			turtle.select(5)
85
			turtle.digDown()
86
			turtle.forward()
87
			turtle.select(4)
88
			turtle.digDown()
89
		elseif turtle.getItemCount(4)==0 then
90
			if settings["debug"]==true then
91
				print("solar panel deployed")
92
			end
93
			if turtle.detectDown()==false then
94
				if settings["debug"]==true then
95
					print("moving forward one")
96
				end
97
				turtle.forward()
98
			end
99
			turtle.select(4)
100
			turtle.digDown()
101
		end
102
		digChest()
103
		digMiningWell()
104
    elseif nextStep=="chargewaitforrefuel" then
105
		digCharge()
106
		digChest()
107
		digMiningWell()
108
    elseif nextStep=="placeminingwell" or nextStep=="digminingwell" then
109
		if turtle.getItemCount(2)==0 then
110
			digMiningWell()
111
		end
112
    elseif nextStep=="placechest" or nextStep=="digchest" then
113
		if turtle.getItemCount(1)==0 then
114
			digChest()
115
		end
116
		digMiningWell()
117
    elseif nextStep=="powerdown" or nextStep=="powerup" then
118
		if settings["debug"]==true then
119
			print("power deployed")
120
		end
121
		if turtle.getItemCount(4)==0 then
122
			if settings["debug"]==true then
123
				print("fully deployed")
124
			end
125
			digCharge()
126
		elseif turtle.getItemCount(5)==0 then
127
			if settings["debug"]==true then
128
				print("IC2 deployed")
129
			end
130
			if turtle.detectDown()==false then
131
				if settings["debug"]==true then
132
					print("moving down one")
133
				end
134
				turtle.down()
135
			end
136
			turtle.select(7)
137
			turtle.digDown()
138
			turtle.down()
139
			turtle.select(6)
140
			turtle.digDown()
141
			turtle.down()
142
			turtle.select(5)
143
			turtle.digDown()
144
		elseif turtle.getItemCount(6)==0 then
145-
    while turtle.forward()==false do
145+
			if settings["debug"]==true then
146
				print("energy bridge deployed")
147-
	    sleep(settings["digDelay"])
147+
			end
148-
	    turtle.attack()
148+
			if turtle.detectDown()==false then
149
				if settings["debug"]==true then
150
					print("moving down one")
151
				end
152
				turtle.down()
153
			end
154
			turtle.select(6)
155
			turtle.digDown()
156
			turtle.down()
157
			turtle.select(5)
158
			turtle.digDown()
159
		elseif turtle.getItemCount(7)==0 then
160
			if settings["debug"]==true then
161
				print("bc deployed")
162
			end
163
			if turtle.detectDown()==false then
164
				if settings["debug"]==true then
165
					print("moving down one")
166
				end
167
				turtle.down()
168
			end
169
			turtle.select(5)
170
			turtle.digDown()
171
		end
172
		digChest()
173
		digMiningWell()
174
    end
175
	if settings["debug"]==true then
176
		print("finished cleanup")
177
	end
178
	setNextStep("topoff")
179
end
180
181
function checkStatus()
182
    if turtle.getItemCount(1)>0 then
183
        print("Ender Chest OK")
184
    else
185
        print("Please insert an Ender Chest into slot 1")
186
        while turtle.getItemCount(1)==0 do
187
            turtle.select(1)
188
            sleep(0.1)
189
        end
190
    end
191
    if turtle.getItemCount(2)>0 then
192
        print("Mining Well OK")
193
    else
194
        print("Please insert Mining Well into slot 2")
195
        while turtle.getItemCount(2)==0 do
196
            turtle.select(2)
197
            sleep(0.1)
198
        end
199
    end
200
    if turtle.getFuelLevel()~="unlimited" then
201
        if turtle.getItemCount(3)>0 then
202-
	turtle.dig()
202+
203
        else
204
            print("Please insert Advanced Charge Station (or higher) into slot 3")
205-
	turtle.dig()
205+
206
                turtle.select(3)
207
                sleep(0.1)
208-
	turtle.dig()
208+
209
        end
210
    end
211-
	turtle.dig()
211+
212
		print("Solar Panel OK")
213
	else
214
		print("Please insert Ultimate Hybrid Solar Panel into slot 4")
215
		while turtle.getItemCount(4)==0 do
216
			turtle.select(4)
217
			sleep(0.1)
218
		end
219
	end
220
	if turtle.getItemCount(5)>0 then
221
		print("IC2 Consumer OK")
222
	else
223
		print("Please insert IC2 HV Consumer into slot 5")
224
		while turtle.getItemCount(5)==0 do
225
			turtle.select(5)
226
			sleep(0.1)
227
		end
228
	end
229
	if turtle.getItemCount(6)>0 then
230
		print("Energy Bridge OK")
231
	else
232
		print("Please insert Energy Bridge into slot 6")
233
		while turtle.getItemCount(6)==0 do
234
			turtle.select(6)
235
			sleep(0.1)
236
		end
237
	end
238
	if turtle.getItemCount(7)>0 then
239
		print("BC Producer OK")
240
	else
241
		print("Please insert BC Producer into slot 7")
242
		while turtle.getItemCount(7)==0 do
243
			turtle.select(7)
244
			sleep(0.1)
245
		end
246
	end
247
    if needsFuel() then
248
        if turtle.getItemCount(16)>0 then
249
            print("Fuel Level OK")
250
        else
251-
    if debug==true then
251+
252
            while turtle.getItemCount(16)==0 do
253
                turtle.select(16)
254
                sleep(0.1)
255
            end
256-
       file=fs.open("SnapBoxStepTracker","w")
256+
257
    end
258
259
end
260
261
function needsFuel()
262
    local level=turtle.getFuelLevel()
263
    if level=="unlimited" or level>settings["reserveFuelLevel"] then
264-
    local file=fs.open("SnapBoxStepTracker","r")
264+
265
    else
266
        return true
267
    end
268
end
269
270
function moveForward()
271
    while turtle.detect() do
272
        turtle.dig()
273
        sleep(settings["digDelay"])
274
		turtle.attack()
275
    end
276
    turtle.forward()
277-
	while turtle.forward()==false do
277+
	while turtle.detectUp() do
278
        turtle.digUp()
279
        sleep(settings["digDelay"])
280
		turtle.attack()
281
    end
282-
	while turtle.forward()==false do
282+
283
284
function topOff()
285
	if needsFuel()==true then
286
		setNextStep("chargeplacecharge")
287-
	while turtle.forward()==false do
287+
288
		setNextStep("placeminingwell")
289
	end
290
end
291
292
function placeCharge()
293
    turtle.select(4)
294
    while turtle.placeDown()==false do
295
        turtle.digDown()
296
        sleep(settings["digDelay"])
297
        turtle.attackDown()
298
    end
299
	turtle.back()
300
	turtle.select(5)
301
    while turtle.placeDown()==false do
302-
	while turtle.back()==false do
302+
303
        sleep(settings["digDelay"])
304
        turtle.attackDown()
305
    end
306
	clearSky()
307
	turtle.up()
308
	turtle.select(6)
309
    while turtle.placeDown()==false do
310
        turtle.digDown()
311
        sleep(settings["digDelay"])
312
        turtle.attackDown()
313
    end
314
	clearSky()
315-
	while turtle.back()==false do
315+
	turtle.up()
316
	turtle.select(7)
317
    while turtle.placeDown()==false do
318
        turtle.digDown()
319
        sleep(settings["digDelay"])
320
        turtle.attackDown()
321
    end
322
	clearSky()
323
	turtle.up()
324
	turtle.select(3)
325
    while turtle.placeDown()==false do
326
        turtle.digDown()
327
        sleep(settings["digDelay"])
328-
	while turtle.back()==false do
328+
329
    end
330
end
331
332
function clearSky()
333
	while turtle.detectUp() do
334
		turtle.digUp()
335
		turtle.up()
336
	end
337
	while turtle.detectDown()==false do
338
		turtle.down()
339
	end
340
end
341
342
function digCharge()
343
	clearChargeInv()
344-
    local file=fs.open("SnapBoxStepTracker","r")
344+
345
    turtle.digDown()
346
	turtle.down()
347
	turtle.select(7)
348
	turtle.digDown()
349
	turtle.down()
350
	turtle.select(6)
351
	turtle.digDown()
352
	turtle.down()
353
	turtle.select(5)
354
	turtle.digDown()
355
	turtle.forward()
356
	turtle.select(4)
357
	turtle.digDown()
358
end
359
360
function placeChest()
361
    turtle.select(1)
362
	turtle.back()
363
    while turtle.place()==false do
364
        turtle.attack()
365
        turtle.dig()
366
        sleep(settings["digDelay"])
367
    end
368
end
369
370
function digChest()
371
    turtle.select(1)
372
    if turtle.getItemCount(1) > 0 then
373
        turtle.drop()
374
    end
375
    turtle.dig()
376
	turtle.forward()
377
end
378
379
function placeMiningWell()
380
    turtle.select(2)
381
    while turtle.placeDown()==false do
382
        turtle.digDown()
383
        sleep(settings["digDelay"])
384
        turtle.attackDown()
385
    end
386
end
387
388
function digMiningWell()
389
    turtle.select(2)
390
    if turtle.getItemCount(2) > 0 then
391
        turtle.drop()
392
    end
393
    turtle.digDown()
394
end
395
396
function setNextStep(next)
397
    if settings["debug"]==true then
398
        print("Set next step "..next)
399
    end
400
    local file=nil
401
    while file==nil do
402
       file=fs.open("tracker","w")
403-
    --check to make sure it has all the items it needs
403+
404-
    checkStatus()
404+
405
    file.close()
406-
    --initial refuel
406+
407-
    turtle.select(16)
407+
408-
    turtle.refuel()
408+
409
function getNextStep()
410
    local file=fs.open("tracker","r")
411-
    nextStep="topoff"
411+
412
        setNextStep("topoff")
413
    else
414
        local returnValue=file.readAll()
415-
    getNextStep()
415+
416
        setNextStep(returnValue)
417
    end
418
end
419
420
function powerUp()
421
	clearPowerInv()
422
	turtle.select(4)
423
	turtle.digDown()
424
	turtle.down()
425
	turtle.select(5)
426
	turtle.digDown()
427
	turtle.down()
428
	turtle.select(6)
429
	turtle.digDown()
430
	turtle.down()
431
	turtle.select(7)
432
	turtle.digDown()
433
end
434
435
function clearChargeInv()
436
	for i=1,7 do
437
		if turtle.getItemCount(i)>0 then
438
			turtle.select(i)
439
			turtle.drop()
440
		end
441
	end
442
end
443
444
function clearPowerInv()
445
	for i=1,7 do
446
		if turtle.getItemCount(i)>0 and i~=3 then
447
			turtle.select(i)
448
			turtle.drop()
449
		end
450
	end
451
end
452
453
function powerDown()
454
	turtle.select(7)
455
	while turtle.placeDown()==false and turtle.getItemCount(7)>0 do
456
		turtle.digDown()
457
        sleep(settings["digDelay"])
458
        turtle.attackDown()
459
        sleep(0.1)
460
	end
461
	clearSky()
462
	turtle.up()
463
	turtle.select(6)
464
	while turtle.placeDown()==false and turtle.getItemCount(6)>0 do
465
        turtle.digDown()
466
        sleep(settings["digDelay"])
467
        turtle.attackDown()
468
        sleep(0.1)
469
	end
470
	clearSky()
471
	turtle.up()
472
	turtle.select(5)
473
	while turtle.placeDown()==false and turtle.getItemCount(5)>0 do
474
        turtle.digDown()
475
        sleep(settings["digDelay"])
476
        turtle.attackDown()
477
        sleep(0.1)
478
	end
479
	clearSky()
480
	turtle.up()
481
	turtle.select(4)
482
	while turtle.placeDown()==false and turtle.getItemCount(4)>0 do
483
        turtle.digDown()
484
        sleep(settings["digDelay"])
485
        turtle.attackDown()
486
        sleep(0.1)
487
	end
488
end
489
490
function checkResume()
491
    local file=fs.open("settings","r")
492
    if file==nil then
493
        return false
494
    else
495
        file.close()
496
        return true
497
    end
498
end
499
500
function doNextStep()
501
--is there a better way to do this?
502
    if nextStep=="topoff" then
503
        topOff()
504
    elseif nextStep=="chargeplacecharge" then
505
		placeCharge()
506
        setNextStep("chargewaitforrefuel")
507
    elseif nextStep=="chargewaitforrefuel" then
508
        sleep(settings["chargeTime"])
509
        setNextStep("chargedigcharge")
510
    elseif nextStep=="chargedigcharge" then
511
        digCharge()
512
        setNextStep("placeminingwell")
513
    elseif nextStep=="placeminingwell" then
514
        placeMiningWell()
515
        setNextStep("placechest")
516
    elseif nextStep=="placechest" then
517
        placeChest()
518
        setNextStep("powerdown")
519
    elseif nextStep=="powerdown" then
520
        powerDown()
521
        setNextStep("powerup")
522
        sleep(settings["miningTime"])
523
    elseif nextStep=="powerup" then
524
        powerUp()
525
        setNextStep("digchest")
526
    elseif nextStep=="digchest" then
527
        digChest()
528
        setNextStep("digminingwell")
529
    elseif nextStep=="digminingwell" then
530
        digMiningWell()
531
        setNextStep("moveforward")
532
    elseif nextStep=="moveforward" then
533
        moveForward()
534
        setNextStep("topoff")
535
    else
536
        print("Unknown Step - Something Went Wrong. Giving Up "..nextStep)
537
		return
538
    end
539
end
540
541
function getNextStep()
542
    local file=fs.open("tracker","r")
543
    if file==nil then
544
        setNextStep("topoff")
545
    else
546
        local returnValue=file.readAll()
547
        file.close()
548
        setNextStep(returnValue)
549
    end
550
end
551
552
function clearScreen()
553
    term.clear()
554
    term.setCursorPos(1,1)
555
end
556
557
--------MAIN PROGRAM
558
clearScreen()
559
560
--Check for a resume
561
if checkResume()==false then
562
	--check to make sure it has all the items it needs
563
	checkStatus()
564
565
	--initial refuel
566
	turtle.select(16)
567
	turtle.refuel()
568
	turtle.select(1)
569
	nextStep="topoff"
570
    saveSettings()
571
else
572
    print("Resuming")
573
    loadSettings()
574
	getNextStep()
575
	cleanUp()
576
	if settings["debug"]==true then
577
		fs.delete("settings")
578
		fs.delete("tracker")
579
		return
580
	end
581
end
582
583
--main loop
584
while stop==false do
585
    doNextStep()
586
    sleep(0.2)
587
end