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