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