forked from CPokemon/pla-text
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TweakedCCMiningTurtle.lua
770 lines (764 loc) · 28.4 KB
/
TweakedCCMiningTurtle.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
resetScreen()
term.clear()
term.setCursorPos(14,1)
write("Mining Turtle")
term.setCursorPos(5,2)
write("For CyanideEpic and his friends")
term.setCursorPos(1,13)
write("By PrinceTommen, version "..version)
term.setCursorPos(1,4)
end
function textOutput(output_message, x_screen_pos, z_screen_pos, clear_area)
term.setCursorPos(x_screen_pos,z_screen_pos)
if clear_area == 0 then
clear_area = string.len(output_message)
end
write(output_message..string.rep(" ", (clear_area - string.len(output_message))))
end
function securedInput(x_screen_pos, z_screen_pos, nature, lower_value, upper_value, example1, example2)
example = {example1, example2}
local function shortExample(example_int, example, boolStringPart)
tableShortExample = {}
tableShortExample[example_int] = example[example_int].." ("..string.sub(string.lower(example[example_int]), 1, 1)..") "
if boolStringPart then
return string.sub(string.lower(example[example_int]), 1, 1)
else
return tableShortExample[example_int]
end
end
incipit = shortExample(1, example, false).."/ "..shortExample(2, example, false)..": "
if nature == "text" then
repeat
textOutput(incipit, x_screen_pos, z_screen_pos, 39)
term.setCursorPos(string.len(incipit)+1,z_screen_pos)
user_input = string.sub(string.lower(read()), 1, 1)
until (user_input == shortExample(1, example, true) or user_input == shortExample(2, example, true))
elseif nature == "integer" then
repeat
textOutput(" ", x_screen_pos, z_screen_pos, (39 - x_screen_pos))
term.setCursorPos(x_screen_pos,z_screen_pos)
user_input = tonumber(read())
until (user_input >= lower_value and user_input <= upper_value)
end
return user_input
end
function clearLines(firstLine, lastLine)
a = 1
for a=1, (lastLine-firstLine+1) do
textOutput("", 1, (firstLine+a-1), 40)
end
end
function convertToBool(var, boolTrue)
if var == boolTrue then
var = true
else
var = false
end
return var
end
function turn(FacingAngle, Bool_rotation, Rotation_integer)
if Bool_rotation then
for u=1, Rotation_integer do
turtle.turnRight()
end
FacingAngle = FacingAngle + Rotation_integer
else
for u=1, Rotation_integer do
turtle.turnLeft()
end
FacingAngle = FacingAngle - Rotation_integer
end
FacingAngle = math.abs((FacingAngle - 1)%4+1)
return FacingAngle
end
local function refuel()
turtle.select(torches_slots+current_slot[2])
while not(turtle.refuel(1)) do
for f=1, fuel_slots do
current_slot[2], shortage[2] = rotateSlot(2, torches_slots+1, fuel_slots)
turtle.select(torches_slots+current_slot[2])
if turtle.refuel(1) then
boolRefuel = true
break
else
boolRefuel = false
end
end
if not(boolRefuel) then
textOutput("No Fuel -", 1, 11, 0)
current_slot[2], shortage[2] = manageShortage(2, torches_slots+1, torches_slots+fuel_slots)
end
end
refuel_count = 80 - turtle.getFuelLevel()
textOutput("Fuel OK -", 1, 11, 0)
return refuel_count
end
function moveForward(FacingAngle, Boolfb, moving_integer, digUpBool, digDownBool, refuel_count)
local moving_count = 1
for moving_count=1,moving_integer do
if (refuel_count == 80) then
refuel_count = refuel()
end
Bool1 = false
while not(Bool1) do
if (Boolfb) then
turtle.dig()
Bool1 = turtle.forward()
if (digUpBool) then
turtle.digUp()
end
if (digDownBool) then
turtle.digDown()
end
else
Bool1 = turtle.back()
if not(Bool1) then
turn(FacingAngle, true, 2)
turtle.dig()
turn(FacingAngle, false, 2)
end
end
end
moving_count = moving_count + 1
refuel_count = refuel_count + 1
end
return refuel_count
end
function moveUp(Boolud, moving_integer, refuel_count, Bool_DigFront)
local moving_count = 1
for moving_count=1, moving_integer do
if (refuel_count == 80) then
refuel_count = refuel()
end
Bool2 = false
if Bool_DigFront then
turtle.dig()
end
while not(Bool2) do
if (Boolud) then
turtle.digUp()
Bool2 = turtle.up()
else
turtle.digDown()
Bool2 = turtle.down()
end
end
moving_count = moving_count + 1
refuel_count = refuel_count + 1
end
return refuel_count
end
function manageShortage(managedItem, initial_item_slot, final_item_slot)
textOutput("The turtle has used all the "..(itemNames[managedItem+3]).." intitially given. Have you refilled all the "..(itemNames[managedItem+3]).." slots ?", 1, 4, 0)
textOutput("Press enter if all the "..(itemNames[managedItem+3]).." slots are refilled (slots "..(initial_item_slot).." to "..(final_item_slot)..").", 1, 7, 0)
repeat
turn(FacingAngle, true, 4)
os.startTimer(1)
press, key = os.pullEvent("key")
until (key == keys.enter)
clearLines(4,10)
current_slot[managedItem] = 1
shortage[managedItem] = false
return current_slot[managedItem], shortage[managedItem]
end
function rotateSlot(managedItem, control_slot, rotation_controler)
if (turtle.getItemCount(control_slot) == 0) or (managedItem == 2) then
if current_slot[managedItem]==rotation_controler and (managedItem ~= 2) then
shortage[managedItem] = true
else
current_slot[managedItem]=((current_slot[managedItem])%rotation_controler)+1
end
end
return current_slot[managedItem], shortage[managedItem]
end
function inventoryManagement(refuel_count,Right_or_Left,throw_cobble)
function fullInventory(n)
n = m + 1
repeat
item_count = turtle.getItemCount(n)
if (item_count ~= 0) then
boolSlotOccupied = true
n = n + 1
else
boolSlotOccupied = false
end
until (boolSlotOccupied == false) or (n == 17)
return n
end
if Chest_approval then
m = torches_slots + chests_slots + fuel_slots + garbage_slots
thrown_slots = 0
if (turtle.getItemCount(16) ~= 0) and (m~=16) then
if fullInventory(m)==17 then
if throw_stuff then
for k=1, garbage_slots do
for j=1, (16-m) do
turtle.select(m - garbage_slots + k)
Bool_match_stuff = turtle.compareTo(m+j)
if Bool_match_stuff then
thrown_slots = thrown_slots + 1
turtle.select(m+j)
turtle.drop()
end
end
turtle.select(m - garbage_slots + k)
turtle.drop(turtle.getItemCount(m - garbage_slots + k)-1)
end
for z = (m+1), 16 do
for u = (z+1), 16 do
if turtle.getItemCount(u)~=0 then
turtle.select(u)
turtle.transferTo(z)
end
end
end
end
if not(throw_stuff) or ((thrown_slots <= 2) and (fullInventory(n)>15)) then
if shortage[3] then
textOutput("No Chests", 24, 11, 0)
current_slot[3], shortage[3] = manageShortage(3, torches_slots+fuel_slots+1, torches_slots+fuel_slots+chests_slots)
end
textOutput("Chests OK", 24, 11, 0)
if (Right_or_Left == "left") then
FacingAngle = turn(FacingAngle, true, 1)
else
FacingAngle = turn(FacingAngle, false, 1)
end
refuel_count = moveForward(FacingAngle, true, 1, false, true, refuel_count)
turtle.select(torches_slots+fuel_slots+current_slot[3])
turtle.digDown()
turtle.placeDown()
for u=(m+1),16 do
if turtle.getItemCount(u)~=0 then
turtle.select(u)
turtle.dropDown()
end
end
if enderchest then
turtle.select(torches_slots+fuel_slots+1)
turtle.drop()
turtle.digDown()
end
current_slot[3], shortage[3] = rotateSlot(3, torches_slots+fuel_slots+current_slot[3], chests_slots)
refuel_count = moveForward(FacingAngle, false, 1, false, false, refuel_count)
if (Right_or_Left == "left") then
FacingAngle = turn(FacingAngle, false, 1)
else
FacingAngle = turn(FacingAngle, true, 1)
end
end
end
end
end
turtle.select(1)
return refuel_count
end
function placeTorch(Position)
if Torch_approval then
if shortage[1] then
textOutput("No Torches -", 11, 11, 0)
current_slot[1], shortage[1] = manageShortage(1, 1, torches_slots)
end
textOutput("Torches OK -", 11, 11, 0)
turtle.select(current_slot[1])
if Position == "front" then
turtle.dig()
turtle.place()
elseif Position == "below" then
turtle.digDown()
turtle.placeDown()
elseif Position == "up" then
turtle.digUp()
turtle.placeUp()
end
current_slot[1], shortage[1] = rotateSlot(1, current_slot[1], torches_slots)
end
end
function digVerticalLayer(refuel_count, FacingAngle, Width, Height, Height_Position, Bool_Torches, Right_or_Left)
if Right_or_Left then
Right_or_Left = "left"
else
Right_or_Left = "right"
end
done_columns = 0
if (Height_Position == "up") then
for columns=1, math.floor(Width/4) do
turtle.digUp()
if (Height > 3) then
refuel_count = moveUp(true, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(false, (Height-2), refuel_count, true)
turtle.digDown()
end
refuel_count = moveForward(FacingAngle, true, 2, true, true, refuel_count)
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
if (Height > 3) then
refuel_count = moveUp(false, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(true, (Height-2), refuel_count, true)
turtle.digUp()
end
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
done_columns = done_columns + 1
if (Width - 4*done_columns ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
end
end
if ((Width - 4*math.floor(Width/4)) == 0) then
Height_Position = "up"
elseif ((Width - 4*math.floor(Width/4)) == 1) then
turtle.digUp()
refuel_count = moveUp(false, (Height-3), refuel_count, false)
turtle.digDown()
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
Height_Position = "down"
elseif ((Width - 4*math.floor(Width/4)) >= 2) then
if (Height > 3) then
refuel_count = moveUp(true, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(false, (Height-2), refuel_count, true)
turtle.digDown()
end
turtle.digUp()
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
Height_Position = "down"
if ((Width - 4*math.floor(Width/4)) == 3) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count = moveUp(true, (Height - 3), refuel_count, false)
turtle.digUp()
Height_Position = "up"
end
end
elseif (Height_Position == "down") then
for columns=1, math.floor(Width/4) do
turtle.digDown()
if (Height > 3) then
refuel_count = moveUp(false, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(true, (Height - 2), refuel_count, true)
turtle.digUp()
end
refuel_count = moveForward(FacingAngle, true, 2, true, true, refuel_count)
if (Height > 3) then
refuel_count = moveUp(true, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(false, (Height - 2), refuel_count, true)
turtle.digDown()
end
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
done_columns = done_columns + 1
if (Width - 4*done_columns ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
end
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
if (done_columns%2 == 0) and Bool_Torches then
FacingAngle = turn(FacingAngle,true , 1)
placeTorch("front")
FacingAngle = turn(FacingAngle, false, 1)
end
end
if ((Width - 4*math.floor(Width/4)) == 0) then
Height_Position = "down"
elseif ((Width - 4*math.floor(Width/4)) == 1) then
turtle.digDown()
refuel_count = moveUp(true, (Height - 3), refuel_count, false)
turtle.digUp()
Height_Position = "up"
elseif ((Width - 4*math.floor(Width/4)) >= 2) then
if (Height > 3) then
refuel_count = moveUp(false, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(true, (Height - 2), refuel_count, true)
turtle.digUp()
end
turtle.digDown()
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
Height_Position = "up"
if ((Width - 4*math.floor(Width/4)) == 3) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
turtle.digDown()
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
Height_Position = "down"
end
end
end
return refuel_count, Height_Position
end
enderchest, throw_stuff, Chest_approval, Torch_approval, Chest_mismatch, Torch_mismatch = false, false, false, false, false, false
shortage, itemNames = {false, false, false}, {"torch", "fuel", "chest", "torches", "fuel", "chests"}
resetScreen()
if (io.open("favorite", "r") ~= nil) then
resetScreen()
textOutput("Do you wish to use your favorite configuration ?", 1, 4, 0)
Favorite_approval = securedInput(1, 6, "text", 0, 0, "Yes", "No")
if (Favorite_approval == "y") then
handle = fs.open("favorite", "r")
input = handle.readAll()
handle.close()
favorite = textutils.unserialize(input)
tunnels_integer = favorite.tunnels_integer
Width = favorite.Width
Height = favorite.Height
Length = favorite.Length
tunnels_separation = favorite.tunnels_separation
throw_stuff = favorite.throw_stuff
enderchest = favorite.enderchest
Torch_approval = favorite.Torch_approval
Chest_approval = favorite.Chest_approval
end
end
if (io.open("favorite", "r") == nil) or ((io.open("favorite", "r") ~= nil) and (Favorite_approval == "n")) then
resetScreen()
textOutput("Number of parallel tunnels ? ", 1, 4, 0)
tunnels_integer = securedInput(37, 4, "integer", 1, 1000, " ", " ")
textOutput("Width of the tunnels ? ", 1, 5, 0)
Width = securedInput(37, 5, "integer", 1, 1000, " ", " ")
term.setCursorPos(1,6)
textOutput("Height of the tunnels ? ", 1, 6, 0)
Height = securedInput(37, 6, "integer", 1, 200, " ", " ")
if (Height < 3) then
Height = 3
end
term.setCursorPos(1,7)
textOutput("Length of the tunnels ? ", 1, 7, 0)
Length = securedInput(37, 7, "integer", 1, 100000, " ", " ")
if (tunnels_integer > 1) then
term.setCursorPos(1,8)
textOutput("Separating blocks between tunnels ? ", 1, 8, 0)
tunnels_separation = securedInput(37, 8, "integer", 1, 1000, " ", " ")
else
tunnels_separation = 0
end
resetScreen()
textOutput("To use regular chests, press c", 1, 4, 0)
textOutput("To use an enderchest, press e", 1, 5, 0)
textOutput("To use torches, press t", 1, 6, 0)
textOutput("To throw away specific items, press p", 1, 7, 0)
textOutput("Press enter once you have chosen all the options you wanted to activate.", 1, 11, 0)
while true do
press, key = os.pullEvent("key")
if press == "key" and key == keys.enter then
break
elseif key == keys.c then
if Chest_approval then
Chest_approval = false
textOutput("", 10, 9, 11)
else
Chest_approval = true
textOutput("Chests,", 10, 9, 11)
end
elseif key == keys.e then
if enderchest then
enderchest = not(enderchest)
textOutput("", 10, 9, 11)
else
Chest_approval = true
enderchest = true
textOutput("Enderchest,", 10, 9, 11)
end
elseif key == keys.t then
if Torch_approval then
Torch_approval = false
textOutput("", 1, 9, 8)
else
Torch_approval = true
textOutput("Torches,", 1, 9, 8)
end
elseif key == keys.p then
if throw_stuff then
throw_stuff = not(throw_stuff)
textOutput("", 22, 9, 12)
else
throw_stuff = true
textOutput("Throw items.", 22, 9, 12)
end
end
end
resetScreen()
textOutput("Do you want to save this configuration as your favorite ?", 1, 4, 0)
New_favorite = securedInput(1, 6, "text", 0, 0, "Yes", "No")
if (New_favorite == "y") then
favorite = {}
favorite.tunnels_integer = tunnels_integer
favorite.Width = Width
favorite.Height = Height
favorite.Length = Length
favorite.tunnels_separation = tunnels_separation
favorite.Torch_approval = Torch_approval
favorite.Chest_approval = Chest_approval
favorite.throw_stuff = throw_stuff
favorite.enderchest = enderchest
output = textutils.serialize(favorite)
handle = fs.open("favorite", "w")
handle.write(output)
handle.close()
end
end
resetScreen()
textOutput("To manage extra slots, press s", 1, 4, 0)
textOutput("This option allows you to have several torches/fuel/chests slots, as well as different items to throw", 1, 6, 0)
textOutput("Else, press enter to skip this step.", 1, 10, 0)
torches_slots, chests_slots, garbage_slots = 0, 0, 0
while true do
press, key = os.pullEvent("key")
if press == "key" and key == keys.enter then
fuel_slots = 1
break
elseif key == keys.s then
repeat
turtle.select(1)
resetScreen()
textOutput("Number of fuel slots ? ", 1, 4, 0)
fuel_slots = securedInput(29, 4, "integer", 1, 16, " ", " ")
slot_total = fuel_slots
if Torch_approval then
textOutput("Number of torches slots ? ", 1, 5, 0)
torches_slots = securedInput(29, 5, "integer", 1, 16, " ", " ")
slot_total = slot_total + torches_slots
end
if Chest_approval and not(enderchest) then
textOutput("Number of chests slots ? ", 1, 6, 0)
chests_slots = securedInput(29, 6, "integer", 1, 16, " ", " ")
slot_total = slot_total + chests_slots
end
if throw_stuff then
textOutput("Number of undesired items ? ", 1, 7, 0)
garbage_slots = securedInput(29, 7, "integer", 1, 16, " ", " ")
slot_total = slot_total + garbage_slots
end
until (slot_total < 16)
break
end
end
resetScreen()
if (tunnels_integer > 1) then
textOutput("The first tunnel will be in front of the turtle. Do you want the tunnels to be dug on the right or on the left of the first tunnel (They will be parallel to the first one) ?", 1, 4, 0)
Bool_direction = securedInput(1, 9, "text", 0, 0, "Right", "Left")
end
if (tunnels_integer == 1) and (Width > 1) then
textOutput("In front of the turtle will be one side of the tunnel. Do you want it to mine the rest on the left or on the right ?", 1, 4, 0)
Bool_direction = securedInput(1, 9, "text", 0, 0, "Right", "Left")
end
resetScreen()
if Torch_approval then
if torches_slots > 1 then
textOutput("Torches in the slots 1 to "..torches_slots, 1, 4, 0)
else
torches_slots = 1
textOutput("Torches in the slot 1", 1, 4, 0)
end
end
if fuel_slots > 1 then
textOutput("Fuel in the slots "..(torches_slots+1).." to "..(torches_slots+fuel_slots), 1, 5, 0)
else
fuel_slots = 1
textOutput("Fuel in the slot "..(torches_slots+1), 1, 5, 0)
end
if Chest_approval and not(enderchest) then
if chests_slots > 1 then
textOutput("Chests in the slots "..(torches_slots+fuel_slots+1).." to "..(torches_slots+fuel_slots+chests_slots), 1, 6, 0)
else
chests_slots = 1
textOutput("Chests in the slot "..(torches_slots+fuel_slots+1), 1, 6, 0)
end
end
if enderchest then
textOutput("The enderchest in the slot "..(torches_slots+fuel_slots+1), 1, 6, 0)
chests_slots = 1
end
if throw_stuff then
if garbage_slots > 1 then
textOutput("Please make sure there are samples of the items to throw in the slots "..(torches_slots+fuel_slots+chests_slots+1).." to "..(torches_slots+fuel_slots+chests_slots+garbage_slots), 1, 8, 0)
else
garbage_slots = 1
textOutput("Please make sure there is a sample of the item to throw in the slot "..(torches_slots+fuel_slots+chests_slots+1), 1, 8, 0)
end
end
if (Bool_direction == "r") then
Bool_direction = true
else
Bool_direction = false
end
textOutput("Press enter to start", 1, 11, 0)
while true do
press, key = os.pullEvent("key")
if press == "key" and key == keys.enter then
break
end
end
resetScreen()
textOutput("", 1, 11, 20)
if Torch_approval and (turtle.getItemCount(1) == 0) then
textOutput("The torches slot is empty. Are you sure you want to use torches ?", 1, 4, 0)
Torch_approval = convertToBool(securedInput(1, 6, "text", 0, 0, "Yes", "No"), "y")
elseif Torch_approval and (turtle.getItemCount(1) ~= 0) then
for u = 1, torches_slots-1 do
turtle.select(u+1)
if not(turtle.compareTo(1)) then
Torch_mismatch = true
end
end
if Torch_mismatch then
resetScreen()
textOutput("All the slots dedicated to the torches have not been set up correctly. Are you sure you want to use torches ?", 1, 4, 0)
Torch_approval = convertToBool(securedInput(1, 7, "text", 0, 0, "Yes", "No"), "y")
end
end
if Chest_approval and (turtle.getItemCount(torches_slots + fuel_slots + 1) == 0) then
resetScreen()
textOutput("The chests slot is empty. Are you sure you want to use chests ?", 1, 4, 0)
Chest_approval = convertToBool(securedInput(1, 6, "text", 0, 0, "Yes", "No"), "y")
elseif Chest_approval and (turtle.getItemCount(torches_slots + fuel_slots + 1) ~= 0) then
for u = 1, chests_slots-1 do
turtle.select(torches_slots + fuel_slots + u + 1)
if not(turtle.compareTo(torches_slots + fuel_slots + 1)) then
Chest_mismatch = true
end
end
if Chest_mismatch then
resetScreen()
textOutput("All the slots dedicated to the chests have not been set up correctly. Are you sure you want to use chests ?", 1, 4, 0)
Chest_approval = convertToBool(securedInput(1, 7, "text", 0, 0, "Yes", "No"), "y")
end
end
if Torch_approval then
empty_torches_slots = 0
for u = 1, torches_slots do
if turtle.getItemCount(u) == 0 then
empty_torches_slots = empty_torches_slots + 1
end
end
if empty_torches_slots == torches_slots then
shortage[1] = true
end
textOutput("No Torches -", 11, 11, 0)
end
if Torch_approval and (turtle.getItemCount(1) ~= 0) then
shortage[1] = false
textOutput("Torches OK -", 11, 11, 0)
end
if Chest_approval then
empty_chests_slots = 0
for u = 1, chests_slots do
if turtle.getItemCount(torches_slots + fuel_slots + u) == 0 then
empty_chests_slots = empty_chests_slots + 1
end
end
if empty_chests_slots == chests_slots then
shortage[3] = true
end
textOutput("No Chests -", 24, 11, 0)
end
if Chest_approval and (turtle.getItemCount(torches_slots + fuel_slots + 1) ~= 0) then
shortage[3] = false
textOutput("Chests OK -", 24, 11, 0)
end
textOutput("Fuel OK -", 1, 11, 0)
refuel_count = 80 - turtle.getFuelLevel()
FacingAngle, tunnel_forth, current_slot= 0, true, {1, 1, 1}
refuel_count = moveUp(true, 1, refuel_count, false)
if (Width == 1) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
end
for done_tunnels=1, tunnels_integer do
if (Width >= 2) then
for done_layers=1, math.ceil(Length/2) do
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, Width, Height, "down", false, Bool_direction)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, Width, Height, Height_Position, false, not(Bool_direction))
FacingAngle = turn(FacingAngle, Bool_direction, 1)
if (done_layers%4 == 0) then
refuel_count = moveUp(false, 1, refuel_count, false)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
placeTorch("front")
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveUp(true, 1, refuel_count, false)
end
end
elseif (Width == 1) then
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, 2*math.ceil(Length/2), Height, "down", true, Bool_direction)
end
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
if tunnel_forth and (tunnels_integer - done_tunnels >= 1) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, ((2*Width)+tunnels_separation), Height, "down", false, not(Bool_direction))
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
FacingAngle = turn(FacingAngle, Bool_direction, 1)
placeTorch("below")
elseif not(tunnel_forth) then
refuel_count = moveForward(FacingAngle, true, 1, true, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, ((2*Width)-1+tunnels_separation), Height, "down", false, Bool_direction)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, ((2*Width)-1+tunnels_separation), Height, Height_Position, false, not(Bool_direction))
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
FacingAngle = turn(FacingAngle, Bool_direction, 2)
refuel_count = moveForward(FacingAngle, true, (Width-2), true, true, refuel_count)
placeTorch("front")
FacingAngle = turn(FacingAngle, not(Bool_direction), 2)
refuel_count = moveForward(FacingAngle, true, (Width-2), true, true, refuel_count)
if (tunnels_integer - done_tunnels ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (tunnels_separation+1), Height, Height_Position, false, Bool_direction)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (tunnels_separation+1), Height, Height_Position, false, not(Bool_direction))
refuel_count = moveForward(FacingAngle, false, tunnels_separation, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
placeTorch("front")
FacingAngle = turn(FacingAngle, not(Bool_direction), 2)
end
end
if tunnel_forth and (tunnels_integer - done_tunnels == 0) and (Width > 1) then
refuel_count = moveForward(FacingAngle, false, 2*math.ceil(Length/2), false, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count = moveForward(FacingAngle, true, 1, false, false, refuel_count)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (Width - 1), Height, Height_Position, false, Bool_direction)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count = moveForward(FacingAngle, true, 1, false, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (Width - 1), Height, Height_Position, false, not(Bool_direction))
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
refuel_count = moveForward(FacingAngle, false, (Width - 2), false, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 2)
end
if (Width == 1) and (tunnels_integer - done_tunnels ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
elseif (Width == 1) and (tunnels_integer - done_tunnels == 0) and tunnel_forth then
refuel_count = moveForward(FacingAngle, false, (2*math.ceil(Length/2)), false, false, refuel_count)
end
tunnel_forth = not(tunnel_forth)
end
refuel_count = moveUp(false, 1, refuel_count, false)
if (Width == 1) and not(tunnel_forth) then
refuel_count = moveForward(FacingAngle, false, 1, false, false, refuel_count)
turn(FacingAngle, Bool_direction, 1)
end
refuel_count = moveForward(FacingAngle, false, ((tunnels_integer*Width) - 1 + (tunnels_separation*(tunnels_integer - 1))), false, false, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, false, false, refuel_count)
resetScreen()
write("Done. I hope I worked well !")
term.setCursorPos(1,8)