View difference between Paste ID: H8YMBR9C and 4qNyaPav
SHOW: | | - or go back to the newest paste.
1
os.loadAPI("button")
2
3-
p = peripheral.find("tile_blockcapacitorbank_name")
3+
p = {}
4
p[0] = peripheral.wrap("tile_thermalexpansion_cell_resonant_name_1")
5
p[1] = peripheral.wrap("tile_thermalexpansion_cell_resonant_name_2")
6
p[2] = peripheral.wrap("tile_thermalexpansion_cell_resonant_name_3")
7
p[3] = peripheral.wrap("tile_thermalexpansion_cell_resonant_name_4")
8
p[4] = peripheral.wrap("tile_thermalexpansion_cell_resonant_name_0")
9
m = peripheral.find("monitor")
10
r = peripheral.find("BigReactors-Reactor")
11-
local numCapacitors = 3
11+
12-
local turnOnAt = 50
12+
13-
local turnOffAt = 90
13+
14
local menuType = "Reactor"
15
16
local turnOnAt = 25
17
local turnOffAt = 95
18
19
local targetSpeed = 1840
20
21
local maxEnergySamples = 20
22
local currentEnergySample = 0
23
local energySamples = {}
24
25
local reactorStorageCapacity = 10000000
26
local energy = 0
27
local energyStored = 0
28
local energyMax = 0
29
local energyStoredPercent = 0
30
local timerCode
31
local mode = "Automatic"
32
local RFProduction = 0
33
local fuelUse = 0
34
local coreTemp = 0
35
local reactorOnline = false
36
local rodLevel = 0
37
38
local turbineOnline = false
39
local turbineRotorSpeed = 0
40
local turbineRFGen = 0
41
local turbineFluidRate = 0
42
local turbineInductor = false
43
44
local OptFuelRodLevel = 0
45
46
function autoMenu()
47
   m.setTextScale(1)
48
   button.clearTable()
49
   button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
50
   button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
51
   
52
   if steamReactor then 
53
      button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
54
      button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
55
   end
56
   button.screen()
57
   checkMode()
58
   menuMode()
59
end
60
61
function manualMenu()
62
   m.setTextScale(1)
63
   button.clearTable()
64
   button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
65
   button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
66
   button.setTable("Online", online, "", 3, 13, 8, 8)
67
   button.setTable("Offline", offline, "", 15, 25, 8, 8)
68
   button.setTable("0", setRods, 0, 11,14, 10, 10)
69
   button.setTable("10", setRods, 10, 5,8, 12, 12)
70
   button.setTable("20", setRods, 20, 11,14, 12, 12)
71
   button.setTable("30", setRods, 30, 17,20, 12, 12)
72
   button.setTable("40", setRods, 40, 5,8, 14, 14)
73
   button.setTable("50", setRods, 50, 11,14, 14, 14)
74
   button.setTable("60", setRods, 60, 17,20, 14, 14)
75
   button.setTable("70", setRods, 70, 5,8, 16, 16)
76
   button.setTable("80", setRods, 80, 11,14, 16, 16)
77
   button.setTable("90", setRods, 90, 17,20, 16, 16)
78
   button.setTable("+", rodPlus, "", 23, 25, 12, 12)
79
   button.setTable("-", rodMinus, "", 23, 25, 16, 16) 
80
81
   if steamReactor then 
82
      button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
83
      button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
84
	  
85
   end
86
   button.screen()
87
   checkMode()
88
   reactorOnOff()
89
   menuMode()
90
end
91
92
function turbineAutoMenu()
93
   m.setTextScale(1)
94
   button.clearTable()
95
   button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
96
   button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
97
   button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
98
   button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
99
   button.screen()
100
   checkMode()
101
   menuMode()
102
end
103
104
function turbineManualMenu()
105
   m.setTextScale(1)
106
   button.clearTable()
107
   button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
108
   button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
109
   button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
110
   button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
111
   button.setTable("Online", setTurbineOnline, "", 3, 13, 8, 8)
112
   button.setTable("Offline", setTurbineOffline, "", 15, 25, 8, 8)
113
   button.setTable("Coils On", coilsOn, "", 3, 13, 10, 10)
114
   button.setTable("Coils Off", coilsOff, "", 15, 25, 10, 10)
115
   button.screen()
116
   checkMode()
117
   turbineOnOff()
118
   coilsOnOff()
119
   menuMode()
120
end
121
122
function reactorMenu()
123
   menuType = "Reactor"
124
   displayScreen()
125
end
126
127
function turbineMenu()
128
   menuType = "Turbine"
129
   displayScreen()
130
end
131
132
function online()
133
   r.setActive(true)
134
   --button.flash("Online")
135
end
136
137
function offline()
138
   r.setActive(false)
139
   --button.flash("Offline")
140
end
141
142
function setTurbineOnline()
143
   t.setActive(true)
144
   --button.flash("Online")
145
end
146
147
function setTurbineOffline()
148
   t.setActive(false)
149
   --button.flash("Offline")
150
end
151
152
function reactorOnOff()
153
   button.setButton("Online", r.getActive())
154
   button.setButton("Offline", not r.getActive())
155
end
156
157
function turbineOnOff()
158
   button.setButton("Online", t.getActive())
159
   button.setButton("Offline", not t.getActive())
160
end
161
162
function coilsOnOff()
163
   button.setButton("Coils On", t.getInductorEngaged())
164
   button.setButton("Coils Off", not t.getInductorEngaged())
165
end
166
167
function coilsOn()
168
   t.setInductorEngaged(true)
169
end
170
171
function coilsOff()
172
   t.setInductorEngaged(false)
173
end
174
175
function menuMode()
176
   if steamReactor then 
177
   if menuType == "Reactor" then
178
     button.setButton("Reactor", true)
179
     button.setButton("Turbine", false)
180
   else
181
     button.setButton("Reactor", false)
182
     button.setButton("Turbine", true)
183
   end
184
   end
185
end
186
187
function setRods(setLevel)
188
   print("Setting Rod Level: "..setLevel)
189
   button.flash(tostring(setLevel))
190
   r.setAllControlRodLevels(setLevel)
191
   fuelRodLevel()
192
end
193
194
function rodPlus()
195
   button.flash("+")
196
   r.setAllControlRodLevels(rodLevel+1)
197
   fuelRodLevel()
198
end
199
200
function rodMinus()
201
   button.flash("-")
202
   r.setAllControlRodLevels(rodLevel-1)
203
   fuelRodLevel()
204
end
205
206
function checkMode()
207
   button.toggleButton(mode)
208
end
209
   
210
function manualMode()
211
   mode = "Manual"
212
   manualMenu()
213
end
214
215
function autoMode()
216
   mode = "Automatic"
217
   displayScreen()
218
end
219
220
function comma_value(amount)
221
   local formatted = amount
222
   local swap = false
223
   if formatted < 0 then 
224
      formatted = formatted*-1
225
      swap = true
226
   end
227
   while true do
228
      formatted, k = string.gsub(formatted, "^(%d+)(%d%d%d)", '%1,%2')
229
      if k == 0 then
230
         break
231
      end
232
   end
233
   if swap then 
234
     formatted = "-"..formatted
235
   end
236
   return formatted
237
end
238
239
function displayEn()
240
   m.clear()
241
   m.setCursorPos(1,1)
242
   --print("Energy Use: "..energy)
243
   m.write("Energy Use: ")
244
   if energy < 0 then
245
      m.setTextColor(colors.red)
246
   else
247
      m.setTextColor(colors.green)
248
   end
249
   m.write(comma_value(math.floor(energy)).. "RF/t")
250
   m.setTextColor(colors.white)
251
   m.setCursorPos(1,2)
252
   m.write("Energy Stored: "..energyStoredPercent.."%")
253
   if menuType == "Reactor" then
254
      m.setCursorPos(1,3)
255
      m.write("Reactor is: ")
256
      if reactorOnline then 
257
	   m.setTextColor(colors.green) 
258
	   m.write("Online")
259
      else 
260
       m.setTextColor(colors.red) 
261
	   m.write("Offline")
262
      end
263
      m.setTextColor(colors.white)
264
      m.setCursorPos(22,1)
265
      if steamReactor then
266
         m.write("Steam: ")
267
	     m.setTextColor(colors.green)
268
         m.write(comma_value(math.floor(RFProduction)).."MB/t")
269
      else
270
         m.write("RF Gen: ")
271
	     m.setTextColor(colors.green)
272
         m.write(comma_value(math.floor(RFProduction)).."RF/t")
273
      end
274
      m.setTextColor(colors.white)
275
      m.setCursorPos(22,2)
276
      m.write("Core Temp: "..math.floor(coreTemp).."c")
277
      m.setCursorPos(22,3)
278
      m.write("Fuel Use: "..fuelUse.."MB/t")  
279
  else
280
      m.setCursorPos(1,3)
281
      m.write("Turbine is: ")
282
      if turbineOnline then 
283
	   m.setTextColor(colors.green) 
284
	   m.write("Online")
285
      else 
286
       m.setTextColor(colors.red) 
287
	   m.write("Offline")
288
      end
289
      m.setCursorPos(1,4)
290
      m.setTextColor(colors.white)
291
      m.write("Reactor is: ")
292
      if reactorOnline then
293
         m.setTextColor(colors.green)
294
         m.write("Online")
295
      else
296
         m.setTextColor(colors.red)
297
         m.write("Offline")
298
      end
299
      m.setTextColor(colors.white)
300
	  m.setCursorPos(22,1)
301
	  m.write("RFGen: ")
302
	  m.setTextColor(colors.green)
303
      m.write(comma_value(math.floor(turbineRFGen)).."RF/t") 
304
	  m.setTextColor(colors.white)
305
	  m.setCursorPos(22,2)
306-
   energyStored = p.getEnergyStored()
306+
307-
   energyMax = p.getMaxEnergyStored()
307+
308
      m.write("Steam: "..comma_value(turbineFluidRate).."MB/t")  
309
  end
310
  
311
end
312
313
function getCombinedStoredEnergy()
314
   local storedEnergy = r.getEnergyStored()
315-
   tempEnergy = p.getEnergyStored()
315+
   for i=0,table.getn(p) do
316
      storedEnergy = storedEnergy + p[i].getEnergyStored()
317-
   energy = (p.getEnergyStored()-tempEnergy)/2
317+
318-
   energy = energy*numCapacitors
318+
   return storedEnergy
319
end
320
321
function getCombinedMaxEnergy()
322
   local maxEnergy = reactorStorageCapacity
323
   for i=0,table.getn(p) do
324
      maxEnergy = maxEnergy + p[i].getMaxEnergyStored()
325
   end
326
   return maxEnergy
327
end
328
329
function testEnergyPerTick()
330
   local tempEnergy = 0
331
   local sampledEnergy = 0
332
   local totalEnergyFromSamples = 0
333
   
334
   tempEnergy = getCombinedStoredEnergy()
335
   sleep(0.1)
336
   sampledEnergy = (getCombinedStoredEnergy() - tempEnergy) / 2
337
   energySamples[currentEnergySample] = sampledEnergy
338
   
339
   local sampleSize = table.getn(energySamples)
340
   currentEnergySample = currentEnergySample + 1
341
   if currentEnergySample >= maxEnergySamples then
342
      currentEnergySample = 0
343
   end
344
   
345
   for i=0,sampleSize do
346
      totalEnergyFromSamples = totalEnergyFromSamples + energySamples[i]
347
   end
348
349
   energy = totalEnergyFromSamples / (sampleSize + 1)
350
end
351
352
function checkEn()
353
   local tempEnergy = 0
354
355
   energyStored = getCombinedStoredEnergy()
356
   energyMax = getCombinedMaxEnergy()
357
   energyStoredPercent = math.floor((energyStored/energyMax)*100)
358
   RFProduction = r.getEnergyProducedLastTick()
359
   fuelUse = r.getFuelConsumedLastTick()
360
   fuelUse = math.floor(fuelUse*100)
361
   fuelUse = fuelUse/100
362
   coreTemp = r.getFuelTemperature()
363
   reactorOnline = r.getActive()
364
   
365
   testEnergyPerTick()
366
   
367
   if steamReactor then
368
     turbineOnline = t.getActive()
369
     turbineRotorSpeed = t.getRotorSpeed()
370
     turbineRFGen = t.getEnergyProducedLastTick()
371
     turbineFluidRate = t.getFluidFlowRate()
372
   end
373
end
374
375
function fuelRodLevel()
376
   rodLevel = r.getControlRodLevel(0)
377
   --print(rodLevel)
378
   m.setCursorPos(30,5)
379
   m.write(tostring(rodLevel).."%")
380
   m.setBackgroundColor(colors.white)
381
   m.setCursorPos(28,6)
382
   m.write("       ")
383
   for i = 1,10 do
384
      m.setCursorPos(28,i+6)
385
	  m.setBackgroundColor(colors.white)
386
	  m.write(" ")
387
	  m.setBackgroundColor(colors.yellow)
388
	  m.write(" ")
389
	  if rodLevel/10 >= i then
390
	     m.setBackgroundColor(colors.red)
391
	  else
392
	     m.setBackgroundColor(colors.yellow)
393
	  end
394
	  m.write("   ")
395
	  m.setBackgroundColor(colors.yellow)
396
	  m.write(" ")
397
	  m.setBackgroundColor(colors.white)
398
	  m.write(" ")
399
   end
400
   m.setCursorPos(28,17)
401
   m.write("       ")
402
   m.setBackgroundColor(colors.black)
403
end
404
405
function turbineInductorDisplay()
406
   turbineInductor = t.getInductorEngaged()
407
   m.setCursorPos(30,5)
408
   if turbineInductor then
409
      m.write("On")
410
   else
411
      m.write("Off")
412
   end
413
   m.setBackgroundColor(colors.gray)
414
   m.setCursorPos(28,6)
415
   m.write("       ")
416
   for i = 1,7 do
417
      m.setCursorPos(28,i+6)
418
	  m.setBackgroundColor(colors.gray)
419
	  m.write(" ")
420
	  m.setBackgroundColor(colors.lightGray)
421
	  m.write(" ")
422
	  if i % 2 == 0 then
423
	     m.setBackgroundColor(colors.gray)
424
	  end
425
	  m.write(" ")
426
	  m.setBackgroundColor(colors.gray)
427
	  m.write(" ")
428
	  if i % 2 ~= 0 then
429
	     m.setBackgroundColor(colors.lightGray)
430
	  end
431
	  m.write(" ")
432
	  m.setBackgroundColor(colors.lightGray)
433
	  m.write(" ")
434
	  m.setBackgroundColor(colors.gray)
435
	  m.write(" ")
436
   end
437
   for i = 8,10 do
438
   m.setCursorPos(28,i+6)
439
	  m.setBackgroundColor(colors.gray)
440
	  m.write(" ")
441
	  m.setBackgroundColor(colors.lightGray)
442
	  m.write(" ")
443
	  if turbineInductor then
444
	     m.setBackgroundColor(colors.red)
445
      else
446
	     m.setBackgroundColor(colors.blue)
447
	  end
448
	  m.write(" ")
449
	  m.setBackgroundColor(colors.gray)
450
	  m.write(" ")
451
	  if turbineInductor then
452
	     m.setBackgroundColor(colors.red)
453
      else
454
	     m.setBackgroundColor(colors.blue)
455
	  end
456
	  m.write(" ")
457
	  m.setBackgroundColor(colors.lightGray)
458
	  m.write(" ")
459
	  m.setBackgroundColor(colors.gray)
460
	  m.write(" ")
461
   end
462
   m.setCursorPos(28,17)
463
   m.write("       ")
464
   m.setBackgroundColor(colors.black)
465
end
466
function getClick()
467
   local event, side, x, y = os.pullEvent("monitor_touch")
468
   button.checkxy(x,y)
469
end
470
471
function findOptFuelRods()
472
   m.clear()
473
   r.setActive(false)
474
   checkEn()
475
   displayEn()
476
   fuelRodLevel()
477
   while r.getFuelTemperature() > 99 do
478
      for i= 1,3 do
479
	    checkEn()
480
        displayEn()
481
        fuelRodLevel()
482
		m.setCursorPos(3,6)
483
        m.write("Finding Optimal Rod Level")
484
	    m.setCursorPos(3,7)
485
	    m.write("Core Temp: "..r.getFuelTemperature())
486
		m.setCursorPos(3,8)
487
		m.write("Waiting for 99c")
488
	    sleep(1)
489
	  end
490
   end
491
   while r.getHotFluidAmount() > 10000 do
492
     for i = 1,3 do
493
	    checkEn()
494
        displayEn()
495
        fuelRodLevel()
496
		m.setCursorPos(3,6)
497
        m.write("Finding Optimal Rod Level, please wait....")
498
   	    m.setCursorPos(3,7)
499
   	    m.write("Fluid Amount: "..comma_value(r.getHotFluidAmount()).."mb")
500
		m.setCursorPos(3,8)
501
		m.write("Waiting for 10,000mb")
502
	    sleep(1)
503
	  end
504
   end
505
   r.setAllControlRodLevels(99)
506
   r.setActive(true)
507
   
508
   while r.getFuelTemperature() < 100 do
509
   for i = 1,5 do
510
     checkEn()
511
     displayEn()
512
     fuelRodLevel()
513
	 m.setCursorPos(3,6)
514
	 m.write("Set all rod levels to 99")
515
	 m.setCursorPos(3,7)
516
	 m.write("Waiting 5 seconds...")
517
     sleep(1)
518
   end
519
   end
520
   for i = 1,5 do
521
     checkEn()
522
     displayEn()
523
     fuelRodLevel()
524
	 m.setCursorPos(3,6)
525
	 m.write("Set all rod levels to 99")
526
	 m.setCursorPos(3,7)
527
	 m.write("Waiting 5 seconds...")
528
     sleep(1)
529
   end
530
   local tempMB = r.getEnergyProducedLastTick()
531
   print(tempMB.."MB/t of steam")
532
   local tempRodLevels = math.floor(2000/tempMB)
533
   print("2000/"..tempMB.." = "..tempRodLevels)
534
   tempRodLevels = 100-tempRodLevels+5
535
   print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels))
536
   r.setAllControlRodLevels(math.floor(tempRodLevels))
537
   print("Waiting 10 seconds to confirm...")
538
   for i = 1,10 do
539
     checkEn()
540
     displayEn()
541
     fuelRodLevel()
542
	 m.setCursorPos(3,6)
543
	 m.write("Estimated Level: "..tempRodLevels)
544
	 m.setCursorPos(3,7)
545
	 m.write("Waiting 10 seconds...")
546
     sleep(1)
547
   end
548
   tempMB = r.getEnergyProducedLastTick()
549
   while tempMB > 2000 do
550
	  tempRodLevels = tempRodLevels+1
551
	  r.setAllControlRodLevels(math.floor(tempRodLevels))
552
	  print("Setting Rod Levels to: "..tempRodLevels)
553
	  for i = 1,5 do
554
	   checkEn()
555
       displayEn()
556
       fuelRodLevel()
557
	   m.setCursorPos(3,6)
558
       m.write("Getting below 2000mb/t")
559
	   m.setCursorPos(3,7)
560
	   m.write("Currently at: "..tempMB)
561
       sleep(1)
562
	  end
563
	  tempMB = r.getEnergyProducedLastTick()
564
   end
565
   while tempMB < 2000 do
566
      tempRodLevels = tempRodLevels -1
567
	  r.setAllControlRodLevels(math.floor(tempRodLevels))
568
	  print("Setting Rod Levels to: "..tempRodLevels)
569
	  for i = 1,5 do
570
	   checkEn()
571
       displayEn()
572
       fuelRodLevel()
573
	   m.setCursorPos(3,6)
574
	   m.write("Getting Above 2000mb/t")
575
	   m.setCursorPos(3,7)
576
	   m.write("Currently at: "..tempMB)
577
       sleep(1)
578
	  end
579
	  tempMB = r.getEnergyProducedLastTick()
580
   end
581
   OptFuelRodLevel = tempRodLevels
582
end
583
   
584
585
function autoReactor()
586
   if not steamReactor then
587
      r.setAllControlRodLevels(0)
588
      if energyStoredPercent < turnOnAt then
589
       if not reactorOnline then
590
	     online()
591
  	   end
592
      end
593
      if energyStoredPercent > turnOffAt then
594
       if reactorOnline then
595
	     offline()
596
	   end
597
	  end
598
	else
599
	   r.setAllControlRodLevels(OptFuelRodLevel)
600
	   if energyStoredPercent < turnOnAt then
601
         --online()
602
      		 setTurbineOnline()
603
      		 coilsOn()
604
	   end
605
	   if energyStoredPercent > turnOffAt then
606
	     --if turbineRotorSpeed > 1800 then
607
	     --   offline()
608
	     --else
609
		    --   online()
610
	     --end
611
   		 setTurbineOnline()
612
   		 coilsOff()
613
	   end
614
    if turbineRotorSpeed > targetSpeed then
615
       offline()
616
    else
617
       online()
618
    end
619
	end
620
end
621
622
function displayScreen()
623
 --  repeat
624
	  checkEn()
625
	  displayEn()
626
	  if menuType == "Reactor" then
627
	    fuelRodLevel()
628
	    if mode == "Automatic" then
629
	       autoMenu()
630
		   autoReactor()
631
	    else
632
	       manualMenu()
633
		end
634
		
635
	  else
636
	    turbineInductorDisplay()
637
		if mode == "Automatic" then
638
	       turbineAutoMenu()
639
		   autoReactor()
640
	    else
641
	       turbineManualMenu()
642
		end
643
	    
644
	  end
645
      
646
	  timerCode = os.startTimer(1)
647
	  local event, side, x, y
648
	  repeat 
649
		event, side, x, y = os.pullEvent()
650
		print(event)
651
		if event == "timer" then
652
		   print(timerCode..":"..side)
653
		   if timerCode ~= side then
654
		      print("Wrong Code")
655
			else
656
			  print("Right Code")
657
			end
658
		end
659
	   until event~= "timer" or timerCode == side
660
	   if event == "monitor_touch" then
661
	        print(x..":"..y)
662
			button.checkxy(x,y)
663
		end
664
 --  until event ~= "timer"
665
end
666
667
if steamReactor then
668
   findOptFuelRods()
669
end
670
671
while true do
672
   displayScreen()
673
end