Advertisement
mrkarp

ReactorControl2

Nov 7th, 2020
2,605
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.16 KB | None | 0 0
  1. -- Get args
  2. local arg1, arg2, arg3 = ...
  3. -- Startup
  4. print('ReactorControl Engaged. View Monitor.')
  5. local w, h = term.getSize()
  6. -- Vars
  7. emptyflag = 0
  8. offlineflag = 0
  9. flashflag = 0
  10.  
  11. reactorNameInput = "BigReactors-Reactor_" .. arg1
  12. reactor = peripheral.wrap(reactorNameInput)
  13. if reactor == nil then
  14.    print("Reactor null")
  15. end
  16.  
  17. monitorSideInput = arg2
  18. monitor = peripheral.wrap(monitorSideInput)
  19. if monitor == nil then
  20.    print("Monitor null")
  21. end
  22.  
  23. controlRodNumber = arg3
  24. if controlRodNumber == nil then
  25.    print("controlRodNumber null")
  26. end
  27.  
  28. -- Monitor Settings
  29. monitor.setTextScale(1)
  30. monitor.setBackgroundColor(colors.black)
  31.  
  32. if fs.exists("ProgressBar") then
  33.     print("You have the ProgressBar API")
  34.  else
  35.     print("Downloading API")
  36.     shell.run("pastebin get Rzxj0KKM ProgressBar")
  37.     print("Restarting Program")
  38.     restart()
  39. end
  40.  
  41. --Load ProgressBar API
  42. os.loadAPI('ProgressBar')
  43. ProgressBar.SetPeripheral(monitorSideInput)
  44.  
  45. function MakeFuelInfo ()
  46.     fuelMax = reactor.getFuelAmountMax()
  47.     fuelAmount = reactor.getFuelAmount()
  48.     fuelAmountText = math.floor(((reactor.getFuelAmount()/reactor.getFuelAmountMax())*100)+0.5)
  49.     ProgressBar.SetTable("Fuel", fuelMax, fuelAmount, 7, w - 7,2)
  50.     monitor.setCursorPos(w - 5, 2)
  51.     monitor.setTextColor(colors.yellow)
  52.     monitor.write(fuelAmountText..'%')
  53. end
  54.  
  55. function MakeWasteInfo()   
  56.     wasteMax = reactor.getFuelAmountMax()
  57.     wasteAmount = reactor.getWasteAmount()
  58.     wasteAmountText = math.floor(((reactor.getWasteAmount()/reactor.getFuelAmountMax())*100)+0.5)
  59.     ProgressBar.SetTable("Waste", wasteMax, wasteAmount, 7, w - 7, 3)
  60.     monitor.setCursorPos(w - 5, 3)
  61.     monitor.setTextColor(colors.cyan)
  62.     monitor.write(wasteAmountText..'%')
  63. end
  64.  
  65. function ControlRods(numberOfRods)
  66. local cursorPos = 6
  67. local rodLevelAvg = 0
  68.     --Run for each rod
  69.         for i=1, numberOfRods do   
  70.             rodLevelAvg = rodLevelAvg + (reactor.getControlRodLevel(0))
  71.         end
  72.         rodLevelAvg = rodLevelAvg / numberOfRods
  73.        
  74.         monitor.setTextColor(colors.green)
  75.         monitor.setCursorPos(1,cursorPos)
  76.         monitor.write('Rod Depths: ')
  77.         ProgressBar.SetTable("RODS", 100, rodLevelAvg, 12, w - 7, 6)
  78.         monitor.setCursorPos(w - 5,6)
  79.         monitor.write((100-(reactor.getControlRodLevel(0)))..'%')
  80. end
  81.  
  82. function GetCasingHeatinfo()
  83.        
  84.         if reactor.getCasingTemperature()>=650 then
  85.             monitor.setTextColor(colors.purple)
  86.             else if reactor.getCasingTemperature()>=950 then
  87.                 monitor.setTextColor(colors.red)
  88.             else
  89.             monitor.setTextColor(colors.green)
  90.             end
  91.         end
  92.         casingTemp = reactor.getCasingTemperature()
  93.         ProgressBar.SetTable("CasingTemp", 10000, casingTemp, 9, w - 7, 9)
  94.         monitor.setCursorPos(w - 5, 9)
  95.         monitor.write(casingTemp..' C')
  96. end
  97.  
  98.  function GetFuelHeatInfo()
  99.  
  100.         if reactor.getFuelTemperature()>=650 then
  101.           monitor.setTextColor(colors.purple)
  102.           else if reactor.getFuelTemperature()>=950 then
  103.             monitor.setTextColor(colors.red)
  104.           else
  105.          monitor.setTextColor(colors.green)
  106.           end
  107.         end
  108.         fuelTemp = reactor.getFuelTemperature()
  109.         ProgressBar.SetTable("FuelTemp", 10000, fuelTemp, 9, w - 7, 10)
  110.         monitor.setCursorPos(w - 5,10)
  111.         monitor.write(fuelTemp..' C')
  112.  end
  113.  
  114.  function GetFluxInfo()
  115.         -- RF Stored
  116.         rfStored = reactor.getEnergyStored()
  117.         rfStoredFormat = rfStored / 1000
  118.         ProgressBar.SetTable("RFStored", 10000000, rfStored, 8, w-10,13)
  119.         monitor.setCursorPos(w-7,13)
  120.         monitor.write(rfStoredFormat..'K Stored')
  121.         --------------------------------------------------
  122.         -- RF Per Tick
  123.         monitor.setCursorPos(1,14)
  124.         monitor.setTextColor(colors.orange)
  125.         rfPerTick = reactor.getEnergyProducedLastTick()
  126.         --ProgressBar.SetTable("RFPerTick", 10000000, rfPerTick, 2,w-11,15)
  127.        
  128.         monitor.setCursorPos(1,14)
  129.         monitor.write('RF/t: '..(math.floor(reactor.getEnergyProducedLastTick()+0.5)))
  130.         --------------------------------------------------
  131.  
  132.  end
  133.  
  134. -- Main Function
  135. function main()
  136.     while true do
  137.     -- Initial Setup
  138.         monitor.clear()
  139.         monitor.setCursorPos(1,1)
  140.         monitor.setTextColor(colors.white)
  141.     -----------------------------------------------
  142.  
  143.     -- Make Fuel info
  144.         --Set POS, Color, Title
  145.         monitor.setCursorPos(1,2)
  146.         monitor.setTextColor(colors.yellow)
  147.         monitor.write('Fuel ')
  148.         MakeFuelInfo()
  149.     -----------------------------------------------
  150.  
  151.     -- Waste Bar
  152.         --Set POS, Color, Title
  153.         monitor.setCursorPos(1,3)
  154.         monitor.setTextColor(colors.lightBlue)
  155.         monitor.write('Waste ')
  156.         MakeWasteInfo()
  157.     -----------------------------------------------
  158.        
  159.     -- Control Rod
  160.         --Set POS, Color, Title
  161.         monitor.setCursorPos(1,5)
  162.         monitor.setTextColor(colors.white)
  163.         monitor.write('Control Rod Levels:')
  164.         ControlRods(controlRodNumber)
  165.     -----------------------------------------------
  166.        
  167.     -- Temps and Heat
  168.         monitor.setCursorPos(1,8)
  169.         monitor.setTextColor(colors.white)
  170.         monitor.write('Temperature:')
  171.    
  172.         monitor.setCursorPos(1,9)
  173.         monitor.setTextColor(colors.lightGray)
  174.         monitor.write('Casing: ')
  175.         GetCasingHeatinfo()
  176.         --------------------------------------------------
  177.         monitor.setCursorPos(1,10)
  178.         monitor.setTextColor(colors.yellow)
  179.         monitor.write('Fuel: ')
  180.         GetFuelHeatInfo()
  181.     --------------------------------------------------
  182.    
  183.     -- Flux Information
  184.         monitor.setCursorPos(1,12)
  185.         monitor.setTextColor(colors.white)
  186.         monitor.write('Flux:')
  187.        
  188.         monitor.setCursorPos(1,13)
  189.         monitor.setTextColor(colors.yellow)
  190.         monitor.write('Stored: ')
  191.        
  192.        
  193.         monitor.setCursorPos(1,13)
  194.         monitor.setTextColor(colors.green)
  195.         GetFluxInfo()
  196.     -------------------------------------------------- 
  197.        
  198.     ProgressBar.DrawToPeripheral()
  199.         monitor.setCursorPos(1,18)
  200.  
  201.         if flashflag==0 then
  202.           flashflag=1
  203.           if offlineflag==1 then
  204.             monitor.setCursorPos(1,17)
  205.             monitor.setTextColor(colors.lightGray)
  206.             monitor.write('OFFLINE - Manual Override')
  207.           end
  208.           if emptyflag==1 then
  209.             monitor.setCursorPos(1,17)
  210.             monitor.setTextColor(colors.pink)
  211.             monitor.write('OFFLINE - Fuel Exhausted')
  212.           end
  213.           if emptyflag==0 and offlineflag==0 and reactor.getControlRodLevel(0)>75 then
  214.             monitor.setCursorPos(1,17)
  215.             monitor.setTextColor(colors.yellow)
  216.             monitor.write('ONLINE - Low Power Mode')
  217.           end
  218.           if emptyflag==0 and offlineflag==0 and reactor.getControlRodLevel(0)<=75 then
  219.             monitor.setCursorPos(1,17)
  220.             monitor.setTextColor(colors.orange)
  221.             monitor.write('ONLINE - High Power Mode')
  222.           end
  223.         else
  224.           flashflag=0
  225.           monitor.setCursorPos(1,17)
  226.           monitor.clearLine()
  227.         end
  228.  
  229.         if reactor.getEnergyStored()<=10000000 and reactor.getEnergyStored()>100 then
  230.             reactor.setAllControlRodLevels(0+(math.floor(reactor.getEnergyStored()/100000)))
  231.         else
  232.             reactor.setAllControlRodLevels(0)
  233.         end
  234.          
  235.         if reactor.getFuelAmount()<=100 and offlineflag==0 then
  236.             reactor.setAllControlRodLevels(100)
  237.             reactor.setActive(false)
  238.             emptyflag=1
  239.         else
  240.             emptyflag=0
  241.         end
  242.              
  243.         if rs.getInput('bottom')==false and emptyflag==0 then
  244.             reactor.setActive(true)
  245.             offlineflag=0
  246.         end
  247.          
  248.         if rs.getInput('bottom')==true and emptyflag==0 then
  249.             reactor.setActive(false)
  250.             reactor.setAllControlRodLevels(100)
  251.             offlineflag=1
  252.         end    
  253.     sleep(1)
  254.     end
  255. end
  256.  
  257. function restart()
  258.     main()
  259. end
  260.  
  261. -- Reactor Connection Checl
  262. if (reactor.getConnected) then
  263.     main()
  264. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement