Advertisement
bobmarley12345

bigreactor controller no exception

Aug 18th, 2021
1,495
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --  BigReactor Control
  2. --  by jaranvil aka jared314
  3. --  and reghzy/carrot ;)
  4. --
  5. --  feel free to use and/or modify this code
  6. --
  7. -----------------------------------------------
  8. --Reactor Control - Version History
  9. --
  10. --  Version 2.3.1 - 14/08/2021
  11. --    - Removed monitor interactions because they crash the server sometimes for a complex reason
  12. --    - First update in awhile
  13. --    - lots of minor fixes and improvments
  14. --    - New loading and setup search with automated peripheral search
  15. --    - Changes to the update methods
  16. --    - Except new updates soon
  17.  
  18.  
  19. -----------------------------------------------
  20.  
  21. local version = 2.3
  22. --is auto power enabled
  23. local auto_string = false
  24. --auto on value
  25. local on = 0
  26. --auto off value
  27. local off = 99
  28. --is auto control rods enabled
  29. local auto_rods = false
  30. --control rod auto value
  31. local auto_rf = 0
  32.  
  33. --peripherals
  34. local reactor
  35. local mon
  36.  
  37. --monitor size
  38. local monX
  39. local monY
  40.  
  41. term.clear()
  42. -------------------FORMATTING-------------------------------
  43. function clear()
  44.   mon.setBackgroundColor(colors.black)
  45.   mon.clear()
  46.   mon.setCursorPos(1,1)
  47. end
  48.  
  49. --display text on computer's terminal screen
  50. function draw_text_term(x, y, text, text_color, bg_color)
  51.   term.setTextColor(text_color)
  52.   term.setBackgroundColor(bg_color)
  53.   term.setCursorPos(x,y)
  54.   write(text)
  55. end
  56.  
  57. --display text text on monitor, "mon" peripheral
  58. function draw_text(x, y, text, text_color, bg_color)
  59.   mon.setBackgroundColor(bg_color)
  60.   mon.setTextColor(text_color)
  61.   mon.setCursorPos(x,y)
  62.   mon.write(text)
  63. end
  64.  
  65. --draw line on computer terminal
  66. function draw_line(x, y, length, color)
  67.     mon.setBackgroundColor(color)
  68.     mon.setCursorPos(x,y)
  69.     mon.write(string.rep(" ", length))
  70. end
  71.  
  72. --draw line on computer terminal
  73. function draw_line_term(x, y, length, color)
  74.     term.setBackgroundColor(color)
  75.     term.setCursorPos(x,y)
  76.     term.write(string.rep(" ", length))
  77. end
  78.  
  79. --create progress bar
  80. --draws two overlapping lines
  81. --background line of bg_color
  82. --main line of bar_color as a percentage of minVal/maxVal
  83. function progress_bar(x, y, length, minVal, maxVal, bar_color, bg_color)
  84.   draw_line(x, y, length, bg_color) --backgoround bar
  85.   local barSize = math.floor((minVal/maxVal) * length)
  86.   draw_line(x, y, barSize, bar_color) --progress so far
  87. end
  88.  
  89. --same as above but on the computer terminal
  90. function progress_bar_term(x, y, length, minVal, maxVal, bar_color, bg_color)
  91.   draw_line_term(x, y, length, bg_color) --backgoround bar
  92.   local barSize = math.floor((minVal/maxVal) * length)
  93.   draw_line_term(x, y, barSize, bar_color)  --progress so far
  94. end
  95.  
  96. --create button on monitor
  97. function button(x, y, length, text, txt_color, bg_color)
  98.   draw_line(x, y, length, bg_color)
  99.   draw_text((x+2), y, text, txt_color, bg_color)
  100. end
  101.  
  102. --header and footer bars on monitor
  103. function menu_bar()
  104.   draw_line(1, 1, monX, colors.blue)
  105.   draw_text(2, 1, "Power    Tools    Settings", colors.white, colors.blue)
  106.   draw_line(1, 19, monX, colors.blue)
  107.   draw_text(2, 19, "     Reactor Control", colors.white, colors.blue)
  108. end
  109.  
  110. --dropdown menu for power options
  111. function power_menu()
  112.   draw_line(1, 2, 9, colors.gray)
  113.   draw_line(1, 3, 9, colors.gray)
  114.   draw_line(1, 4, 9, colors.gray)
  115.   if active then
  116.     draw_text(2, 2, "ON", colors.lightGray, colors.gray)
  117.     draw_text(2, 3, "OFF", colors.white, colors.gray)
  118.   else
  119.     draw_text(2, 2, "ON", colors.white, colors.gray)
  120.     draw_text(2, 3, "OFF", colors.lightGray, colors.gray)
  121.   end
  122.   draw_text(2, 4, "Auto", colors.white, colors.gray)
  123. end
  124.  
  125. --dropbox menu for tools
  126. function tools_menu()
  127.   draw_line(10, 2, 14, colors.gray)
  128.   draw_line(10, 3, 14, colors.gray)
  129.   draw_line(10, 4, 14, colors.gray)
  130.   draw_line(10, 5, 14, colors.gray)
  131.   draw_text(11, 2, "Control Rods", colors.white, colors.gray)
  132.   draw_text(11, 3, "Efficiency", colors.white, colors.gray)
  133.   draw_text(11, 4, "Fuel", colors.white, colors.gray)
  134.   draw_text(11, 5, "Waste", colors.white, colors.gray)
  135. end
  136.  
  137. --dropdown menu for settings
  138. function settings_menu()
  139.   draw_line(12, 2, 18, colors.gray)
  140.   draw_line(12, 3, 18, colors.gray)
  141.   draw_text(13, 2, "Check for Updates", colors.white, colors.gray)
  142.   draw_text(13, 3, "Reset peripherals", colors.white, colors.gray)
  143. end
  144.  
  145. --basic popup screen with title bar and exit button
  146. function popup_screen(y, title, height)
  147.   clear()
  148.   menu_bar()
  149.  
  150.   draw_line(4, y, 22, colors.blue)
  151.   draw_line(25, y, 1, colors.red)
  152.  
  153.   for counter = y+1, height+y do
  154.     draw_line(4, counter, 22, colors.white)
  155.   end
  156.  
  157.   draw_text(25, y, "X", colors.white, colors.red)
  158.   draw_text(5, y, title, colors.white, colors.blue)
  159. end
  160.  
  161. --write settings to config file
  162. function save_config()
  163.   sw = fs.open("config.txt", "w")  
  164.     sw.writeLine(version)
  165.     sw.writeLine(auto_string)
  166.     sw.writeLine(on)
  167.     sw.writeLine(off)
  168.     sw.writeLine(auto_rods)
  169.     sw.writeLine(auto_rf)
  170.   sw.close()
  171. end
  172.  
  173. --read settings from file
  174. function load_config()
  175.   sr = fs.open("config.txt", "r")
  176.     version = tonumber(sr.readLine())
  177.     auto_string = sr.readLine()
  178.     on = tonumber(sr.readLine())
  179.     off = tonumber(sr.readLine())
  180.     auto_rods = sr.readLine()
  181.     auto_rf = tonumber(sr.readLine())
  182.   sr.close()
  183. end
  184.  
  185. ------------------------END FORMATTING--------------------------
  186.  
  187. --
  188. function homepage()
  189.   while true do
  190.     clear()
  191.     menu_bar()
  192.     terminal_screen()
  193.  
  194.     energy_stored = reactor.getEnergyStored()
  195.    
  196.     --------POWER STAT--------------
  197.     draw_text(2, 3, "Power:", colors.yellow, colors.black)
  198.     active = reactor.getActive()
  199.     if active then
  200.       draw_text(10, 3, "ONLINE", colors.lime, colors.black)
  201.     else
  202.       draw_text(10, 3, "OFFLINE", colors.red, colors.black)
  203.     end
  204.  
  205.     -----------FUEL---------------------
  206.     draw_text(2, 5, "Fuel Level:", colors.yellow, colors.black)
  207.     local maxVal = reactor.getFuelAmountMax()
  208.     local minVal = reactor.getFuelAmount()
  209.     local percent = math.floor((minVal/maxVal)*100)
  210.     draw_text(15, 5, percent.."%", colors.white, colors.black)
  211.  
  212.     if percent < 25 then
  213.     progress_bar(2, 6, monX-2, minVal, maxVal, colors.red, colors.gray)
  214.     else if percent < 50 then
  215.     progress_bar(2, 6, monX-2, minVal, maxVal, colors.orange, colors.gray)
  216.     else if percent < 75 then
  217.     progress_bar(2, 6, monX-2, minVal, maxVal, colors.yellow, colors.gray)
  218.     else if percent <= 100 then
  219.     progress_bar(2, 6, monX-2, minVal, maxVal, colors.lime, colors.gray)
  220.     end
  221.     end
  222.     end
  223.     end
  224.  
  225.     -----------ROD HEAT---------------
  226.     draw_text(2, 8, "Fuel Temp:", colors.yellow, colors.black)
  227.     local maxVal = 2000
  228.     local minVal = math.floor(reactor.getFuelTemperature())
  229.  
  230.     if minVal < 500 then
  231.     progress_bar(2, 9, monX-2, minVal, maxVal, colors.lime, colors.gray)
  232.     else if minVal < 1000 then
  233.     progress_bar(2, 9, monX-2, minVal, maxVal, colors.yellow, colors.gray)
  234.     else if minVal < 1500 then  
  235.     progress_bar(2, 9, monX-2, minVal, maxVal, colors.orange, colors.gray)
  236.     else if minVal < 2000 then
  237.     progress_bar(2, 9, monX-2, minVal, maxVal, colors.red, colors.gray)
  238.     else if minVal >= 2000 then
  239.       progress_bar(2, 9, monX-2, 2000, maxVal, colors.red, colors.gray)
  240.     end
  241.     end
  242.     end
  243.     end
  244.     end
  245.  
  246.     draw_text(15, 8, math.floor(minVal).."/"..maxVal, colors.white, colors.black)
  247.  
  248.     -----------CASING HEAT---------------
  249.     draw_text(2, 11, "Casing Temp:", colors.yellow, colors.black)
  250.     local maxVal = 2000
  251.     local minVal = math.floor(reactor.getCasingTemperature())
  252.     if minVal < 500 then
  253.     progress_bar(2, 12, monX-2, minVal, maxVal, colors.lime, colors.gray)
  254.     else if minVal < 1000 then
  255.     progress_bar(2, 12, monX-2, minVal, maxVal, colors.yellow, colors.gray)
  256.     else if minVal < 1500 then  
  257.     progress_bar(2, 12, monX-2, minVal, maxVal, colors.orange, colors.gray)
  258.     else if minVal < 2000 then
  259.     progress_bar(2, 12, monX-2, minVal, maxVal, colors.red, colors.gray)
  260.     else if minVal >= 2000 then
  261.       progress_bar(2, 12, monX-2, 2000, maxVal, colors.red, colors.gray)
  262.     end
  263.     end
  264.     end
  265.     end
  266.     end
  267.     draw_text(15, 11, math.floor(minVal).."/"..maxVal, colors.white, colors.black)
  268.  
  269.     -------------OUTPUT-------------------
  270.     if reactor.isActivelyCooled() then
  271.  
  272.       draw_text(2, 14, "mB/tick:", colors.yellow, colors.black)
  273.       mbt = math.floor(reactor.getHotFluidProducedLastTick())
  274.       draw_text(13, 14, mbt.." mB/t", colors.white, colors.black)
  275.  
  276.     else
  277.  
  278.       draw_text(2, 14, "RF/tick:", colors.yellow, colors.black)
  279.       rft = math.floor(reactor.getEnergyProducedLastTick())
  280.       draw_text(13, 14, rft.." RF/T", colors.white, colors.black)
  281.  
  282.     end
  283.  
  284.     ------------STORAGE------------
  285.     if reactor.isActivelyCooled() then
  286.  
  287.       draw_text(2, 15, "mB Stored:", colors.yellow, colors.black)
  288.       fluid_stored = reactor.getHotFluidAmount()
  289.       fluid_max = reactor.getHotFluidAmountMax()
  290.       fluid_stored_percent = math.floor((fluid_stored/fluid_max)*100)
  291.       draw_text(13, 15, fluid_stored_percent.."% ("..fluid_stored.." mB)", colors.white, colors.black)
  292.  
  293.     else
  294.  
  295.       draw_text(2, 15, "RF Stored:", colors.yellow, colors.black)
  296.       energy_stored_percent = math.floor((energy_stored/10000000)*100)
  297.       draw_text(13, 15, energy_stored_percent.."% ("..energy_stored.." RF)", colors.white, colors.black)
  298.  
  299.  
  300.     end
  301.  
  302.     -------------AUTO CONTROL RODS-----------------------
  303.     auto_rods_bool = auto_rods == "true"
  304.     insertion_percent = reactor.getControlRodLevel(0)
  305.  
  306.     if reactor.isActivelyCooled() then
  307.       draw_text(2, 16, "Control Rods:", colors.yellow, colors.black)
  308.       draw_text(16, 16, insertion_percent.."%", colors.white, colors.black)
  309.     else
  310.  
  311.       if auto_rods_bool then
  312.         if active then
  313.           if rft > auto_rf+50 then
  314.             reactor.setAllControlRodLevels(insertion_percent+1)
  315.           else if rft < auto_rf-50 then
  316.             reactor.setAllControlRodLevels(insertion_percent-1)
  317.           end
  318.           end
  319.         end
  320.  
  321.         draw_text(2, 16, "Control Rods:", colors.yellow, colors.black)
  322.         draw_text(16, 16, insertion_percent.."%", colors.white, colors.black)
  323.         draw_text(21, 16, "(Auto)", colors.red, colors.black)
  324.      
  325.       else
  326.         draw_text(2, 16, "Control Rods:", colors.yellow, colors.black)
  327.         draw_text(16, 16, insertion_percent.."%", colors.white, colors.black)
  328.       end
  329.     end
  330.  
  331.  
  332.     -------------AUTO SHUTOFF--------------------------
  333.     if reactor.isActivelyCooled() then
  334.  
  335.       --i dont know what I should do here
  336.  
  337.  
  338.     else
  339.       auto = auto_string == "true"
  340.       if auto then
  341.         if active then
  342.           draw_text(2, 17, "Auto off:", colors.yellow, colors.black)
  343.           draw_text(13, 17, off.."% RF Stored", colors.white, colors.black)
  344.           if energy_stored_percent >= off then
  345.             reactor.setActive(false)
  346.             call_homepage()
  347.           end
  348.         else
  349.           draw_text(2, 17, "Auto on:", colors.yellow, colors.black)
  350.           draw_text(13, 17, on.."% RF Stored", colors.white, colors.black)
  351.           if energy_stored_percent <= on then
  352.             reactor.setActive(true)
  353.             call_homepage()
  354.           end
  355.         end
  356.       else
  357.         draw_text(2, 17, "Auto power:", colors.yellow, colors.black)
  358.         draw_text(14, 17, "disabled", colors.red, colors.black)
  359.       end
  360.     end
  361.  
  362.     sleep(0.5)
  363.   end
  364. end
  365.  
  366. --------------MENU SCREENS--------------
  367.  
  368. --auto power menu
  369. function auto_off()
  370.  
  371.   auto = auto_string == "true"
  372.   if auto then --auto power enabled
  373.  
  374.     popup_screen(3, "Auto Power", 11)
  375.     draw_text(5, 5, "Enabled", colors.lime, colors.white)
  376.     draw_text(15, 5, " disable ", colors.white, colors.black)
  377.    
  378.     draw_text(5, 7, "ON when storage =", colors.gray, colors.white)
  379.     draw_text(5, 8, " - ", colors.white, colors.black)
  380.     draw_text(13, 8, on.."% RF", colors.black, colors.white)
  381.     draw_text(22, 8, " + ", colors.white, colors.black)
  382.  
  383.     draw_text(5, 10, "OFF when storage =", colors.gray, colors.white)
  384.     draw_text(5, 11, " - ", colors.white, colors.black)
  385.     draw_text(13, 11, off.."% RF", colors.black, colors.white)
  386.     draw_text(22, 11, " + ", colors.white, colors.black)
  387.  
  388.     draw_text(11, 13, " Save ", colors.white, colors.black)
  389.  
  390.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  391.  
  392.     --disable auto
  393.     if yPos == 5 then
  394.       if xPos >= 15 and xPos <= 21 then
  395.         auto_string = "false"
  396.         save_config()
  397.         auto_off()
  398.       else
  399.         auto_off()
  400.       end
  401.     end
  402.  
  403.     --increase/decrease auto on %
  404.     if yPos == 8 then
  405.       if xPos >= 5 and xPos <= 8 then
  406.         previous_on = on
  407.         on = on-1
  408.       end
  409.       if xPos >= 22 and xPos <= 25 then
  410.         previous_on = on
  411.         on = on+1
  412.       end
  413.     end
  414.  
  415.     --increase/decrease auto off %
  416.     if yPos == 11 then
  417.       if xPos >= 5 and xPos <= 8 then
  418.         previous_off = off
  419.         off = off-1
  420.       end
  421.       if xPos >= 22 and xPos <= 25 then
  422.         previous_off = off
  423.         off = off+1
  424.       end
  425.     end
  426.  
  427.     if on < 0 then on = 0 end
  428.     if off >99 then off = 99 end
  429.  
  430.     if on == off or on > off then
  431.       on = previous_on
  432.       off = previous_off
  433.       popup_screen(5, "Error", 6)
  434.       draw_text(5, 7, "Auto On value must be", colors.black, colors.white)
  435.       draw_text(5, 8, "lower then auto off", colors.black, colors.white)
  436.       draw_text(11, 10, "Okay", colors.white, colors.black)
  437.       local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  438.  
  439.       auto_off()
  440.     end
  441.  
  442.     --Okay button
  443.     if yPos == 13 and xPos >= 11 and xPos <= 17 then
  444.       save_config()
  445.       call_homepage()
  446.     end
  447.  
  448.     --Exit button
  449.     if yPos == 3 and xPos == 25 then
  450.       call_homepage()
  451.     end
  452.  
  453.     auto_off()
  454.   else
  455.     popup_screen(3, "Auto Power", 5)
  456.     draw_text(5, 5, "Disabled", colors.red, colors.white)
  457.     draw_text(15, 5, " enable ", colors.white, colors.gray)
  458.     draw_text(11, 7, "Okay", colors.white, colors.black)
  459.  
  460.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  461.  
  462.     --Okay button
  463.     if yPos == 7 and xPos >= 11 and xPos <= 17 then
  464.       call_homepage()
  465.     end
  466.  
  467.     if yPos == 5 then
  468.       if xPos >= 15 and xPos <= 21 then
  469.         auto_string = "true"
  470.         save_config()
  471.         auto_off()
  472.       else
  473.         auto_off()
  474.       end
  475.     else
  476.       auto_off()
  477.     end
  478.   end
  479. end
  480.  
  481. --efficiency menu
  482. function efficiency()
  483.   popup_screen(3, "Efficiency", 12)
  484.   fuel_usage = reactor.getFuelConsumedLastTick()
  485.   rft = math.floor(reactor.getEnergyProducedLastTick())
  486.  
  487.   rfmb = rft / fuel_usage
  488.  
  489.   draw_text(5, 5, "Fuel Consumption: ", colors.lime, colors.white)
  490.   draw_text(5, 6, fuel_usage.." mB/t", colors.black, colors.white)
  491.   draw_text(5, 8, "Energy per mB: ", colors.lime, colors.white)
  492.   draw_text(5, 9, rfmb.." RF/mB", colors.black, colors.white)
  493.  
  494.   draw_text(5, 11, "RF/tick:", colors.lime, colors.white)
  495.   draw_text(5, 12, rft.." RF/T", colors.black, colors.white)
  496.  
  497.   draw_text(11, 14, " Okay ", colors.white, colors.black)
  498.  
  499.   local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  500.  
  501.   --Okay button
  502.   if yPos == 14 and xPos >= 11 and xPos <= 17 then
  503.     call_homepage()
  504.   end
  505.  
  506.   --Exit button
  507.   if yPos == 3 and xPos == 25 then
  508.     call_homepage()
  509.   end
  510.  
  511.   efficiency()
  512. end
  513.  
  514.  
  515. function fuel()
  516.   popup_screen(3, "Fuel", 9)
  517.  
  518.   fuel_max = reactor.getFuelAmountMax()
  519.   fuel_level = reactor.getFuelAmount()
  520.   fuel_reactivity = math.floor(reactor.getFuelReactivity())
  521.  
  522.   draw_text(5, 5, "Fuel Level: ", colors.lime, colors.white)
  523.   draw_text(5, 6, fuel_level.."/"..fuel_max, colors.black, colors.white)
  524.  
  525.   draw_text(5, 8, "Reactivity: ", colors.lime, colors.white)
  526.   draw_text(5, 9, fuel_reactivity.."%", colors.black, colors.white)
  527.  
  528.   draw_text(11, 11, " Okay ", colors.white, colors.black)
  529.  
  530.   local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  531.  
  532.  
  533.   --Okay button
  534.   if yPos == 11 and xPos >= 11 and xPos <= 17 then
  535.     call_homepage()
  536.   end
  537.  
  538.   --Exit button
  539.   if yPos == 3 and xPos == 25 then
  540.     call_homepage()
  541.   end
  542.  
  543.   fuel()
  544. end
  545.  
  546. function waste()
  547.   popup_screen(3, "Waste", 8)
  548.  
  549.   waste_amount = reactor.getWasteAmount()
  550.   draw_text(5, 5, "Waste Amount: ", colors.lime, colors.white)
  551.   draw_text(5, 6, waste_amount.." mB", colors.black, colors.white)
  552.   draw_text(8, 8, " Eject Waste ", colors.white, colors.red)
  553.   draw_text(11, 10, " Close ", colors.white, colors.black)
  554.  
  555.   local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  556.  
  557.   --eject button
  558.   if yPos == 8 and xPos >= 8 and xPos <= 21 then
  559.     reactor.doEjectWaste()
  560.     popup_screen(5, "Waste Eject", 5)
  561.     draw_text(5, 7, "Waste Ejeceted.", colors.black, colors.white)
  562.     draw_text(11, 9, " Close ", colors.white, colors.black)
  563.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  564.     --Okay button
  565.     if yPos == 7 and xPos >= 11 and xPos <= 17 then
  566.       call_homepage()
  567.     end
  568.  
  569.     --Exit button
  570.     if yPos == 3 and xPos == 25 then
  571.       call_homepage()
  572.     end
  573.   end
  574.  
  575.   --Okay button
  576.   if yPos == 10 and xPos >= 11 and xPos <= 17 then
  577.     call_homepage()
  578.   end
  579.  
  580.   --Exit button
  581.   if yPos == 3 and xPos == 25 then
  582.     call_homepage()
  583.   end
  584.   waste()
  585. end
  586.  
  587. function set_auto_rf()
  588.   popup_screen(5, "Auto Adjust", 11)
  589.     draw_text(5, 7, "Try to maintain:", colors.black, colors.white)
  590.  
  591.     draw_text(13, 9, " ^ ", colors.white, colors.gray)
  592.     draw_text(10, 11, auto_rf.." RF/t", colors.black, colors.white)
  593.     draw_text(13, 13, " v ", colors.white, colors.gray)
  594.     draw_text(11, 15, " Okay ", colors.white, colors.gray)
  595.  
  596.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  597.  
  598.     --increase button
  599.     if yPos == 9 then
  600.       auto_rf = auto_rf + 100
  601.       save_config()
  602.       set_auto_rf()
  603.     end
  604.  
  605.     --decrease button
  606.     if yPos == 13 then
  607.       auto_rf = auto_rf - 100
  608.       if auto_rf < 0 then auto_rf = 0 end
  609.       save_config()
  610.       set_auto_rf()
  611.     end
  612.  
  613.     if yPos == 15 then
  614.       control_rods()
  615.     end
  616.  
  617.     set_auto_rf()
  618. end
  619.  
  620. function control_rods()
  621.  
  622.   if reactor.isActivelyCooled() then
  623.  
  624.     popup_screen(3, "Control Rods", 13)
  625.     insertion_percent = reactor.getControlRodLevel(0)
  626.  
  627.     draw_text(5, 5, "Inserted: "..insertion_percent.."%", colors.black, colors.white)
  628.     progress_bar(5, 7, 20, insertion_percent, 100, colors.yellow, colors.gray)
  629.  
  630.     draw_text(5, 9, " << ", colors.white, colors.black)
  631.     draw_text(10, 9, " < ", colors.white, colors.black)
  632.     draw_text(17, 9, " > ", colors.white, colors.black)
  633.     draw_text(21, 9, " >> ", colors.white, colors.black)
  634.  
  635.     draw_text(5, 11, "Auto:", colors.black, colors.white)
  636.     draw_text(5, 13, "unavilable for", colors.red, colors.white)
  637.     draw_text(5, 14, "active cooling", colors.red, colors.white)
  638.  
  639.     draw_text(11, 16, " Close ", colors.white, colors.gray)
  640.  
  641.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  642.  
  643.     if yPos == 9 and xPos >= 5 and xPos <= 15 then
  644.       reactor.setAllControlRodLevels(insertion_percent-10)
  645.     end
  646.  
  647.     if yPos == 9 and xPos >= 10 and xPos <= 13 then
  648.       reactor.setAllControlRodLevels(insertion_percent-1)
  649.     end
  650.  
  651.     if yPos == 9 and xPos >= 17 and xPos <= 20 then
  652.       reactor.setAllControlRodLevels(insertion_percent+1)
  653.     end
  654.  
  655.     if yPos == 9 and xPos >= 21 and xPos <= 25 then
  656.       reactor.setAllControlRodLevels(insertion_percent+10)
  657.     end
  658.  
  659.     ------Close button-------
  660.     if yPos == 16 and xPos >= 11 and xPos <= 17 then
  661.       call_homepage()
  662.     end
  663.  
  664.     ------Exit button------------
  665.     if yPos == 5 and xPos == 25 then
  666.       call_homepage()
  667.     end
  668.     control_rods()
  669.  
  670.   else
  671.  
  672.     popup_screen(3, "Control Rods", 13)
  673.     insertion_percent = reactor.getControlRodLevel(0)
  674.  
  675.     draw_text(5, 5, "Inserted: "..insertion_percent.."%", colors.black, colors.white)
  676.     progress_bar(5, 7, 20, insertion_percent, 100, colors.yellow, colors.gray)
  677.  
  678.     draw_text(5, 9, " << ", colors.white, colors.black)
  679.     draw_text(10, 9, " < ", colors.white, colors.black)
  680.     draw_text(17, 9, " > ", colors.white, colors.black)
  681.     draw_text(21, 9, " >> ", colors.white, colors.black)
  682.  
  683.     draw_text(5, 11, "Auto:", colors.black, colors.white)
  684.     draw_text(16, 11, " disable ", colors.white, colors.black)
  685.  
  686.     auto_rods_bool = auto_rods == "true"
  687.     if auto_rods_bool then
  688.      
  689.       draw_text(5, 13, "RF/t: "..auto_rf, colors.black, colors.white)
  690.       draw_text(18, 13, " set ", colors.white, colors.black)
  691.     else
  692.       draw_text(16, 11, " enable ", colors.white, colors.black)
  693.       draw_text(5, 13, "disabled", colors.red, colors.white)
  694.     end
  695.  
  696.     draw_text(11, 15, " Close ", colors.white, colors.gray)
  697.  
  698.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  699.  
  700.     -----manual adjust buttons------------
  701.     if yPos == 9 and xPos >= 5 and xPos <= 15 then
  702.       reactor.setAllControlRodLevels(insertion_percent-10)
  703.     end
  704.  
  705.     if yPos == 9 and xPos >= 10 and xPos <= 13 then
  706.       reactor.setAllControlRodLevels(insertion_percent-1)
  707.     end
  708.  
  709.     if yPos == 9 and xPos >= 17 and xPos <= 20 then
  710.       reactor.setAllControlRodLevels(insertion_percent+1)
  711.     end
  712.  
  713.     if yPos == 9 and xPos >= 21 and xPos <= 25 then
  714.       reactor.setAllControlRodLevels(insertion_percent+10)
  715.     end
  716.  
  717.  
  718.     ------auto buttons-----------------
  719.     if yPos == 11 and xPos >= 16 then
  720.       if auto_rods_bool then
  721.         auto_rods = "false"
  722.         save_config()
  723.         control_rods()
  724.       else
  725.         auto_rods = "true"
  726.         save_config()
  727.         control_rods()
  728.       end
  729.     end
  730.  
  731.     if yPos == 13 and xPos >= 18 then
  732.       set_auto_rf()
  733.     end
  734.  
  735.     ------Close button-------
  736.     if yPos == 15 and xPos >= 11 and xPos <= 17 then
  737.       call_homepage()
  738.     end
  739.  
  740.     ------Exit button------------
  741.     if yPos == 5 and xPos == 25 then
  742.       call_homepage()
  743.     end
  744.     control_rods()
  745.  
  746.   end
  747. end
  748.  
  749. -----------------------Settings--------------------------------
  750.  
  751.  
  752. function rf_mode()
  753.   wait = read()
  754. end
  755.  
  756. function steam_mode()
  757.   wait = read()
  758. end
  759.  
  760. function install_update(program, pastebin)
  761.     clear()
  762.     draw_line(4, 5, 22, colors.blue)
  763.  
  764.     for counter = 6, 10 do
  765.       draw_line(4, counter, 22, colors.white)
  766.     end
  767.  
  768.     draw_text(5, 5, "Updating...", colors.white, colors.blue)
  769.     draw_text(5, 7, "Open computer", colors.black, colors.white)
  770.     draw_text(5, 8, "terminal.", colors.black, colors.white)
  771.  
  772.     if fs.exists("install") then fs.delete("install") end
  773.     shell.run("pastebin get p4zeq7Ma install")
  774.     shell.run("install")
  775. end
  776.  
  777. function update()
  778.   popup_screen(5, "Updates", 4)
  779.   draw_text(5, 7, "Connecting to", colors.black, colors.white)
  780.   draw_text(5, 8, "pastebin...", colors.black, colors.white)
  781.  
  782.   sleep(0.5)
  783.  
  784.   shell.run("pastebin get MkF2QQjH current_version.txt")
  785.   sr = fs.open("current_version.txt", "r")
  786.   current_version = tonumber(sr.readLine())
  787.   sr.close()
  788.   fs.delete("current_version.txt")
  789.   terminal_screen()
  790.  
  791.   if current_version > version then
  792.  
  793.     popup_screen(5, "Updates", 7)
  794.     draw_text(5, 7, "Update Available!", colors.black, colors.white)
  795.     draw_text(11, 9, " Install ", colors.white, colors.black)
  796.     draw_text(11, 11, " Ignore ", colors.white, colors.black)
  797.  
  798.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  799.  
  800.     --Instatll button
  801.     if yPos == 9 and xPos >= 11 and xPos <= 17 then
  802.       install_update()
  803.     end
  804.  
  805.     --Exit button
  806.     if yPos == 5 and xPos == 25 then
  807.       call_homepage()
  808.     end
  809.     call_homepage()
  810.  
  811.   else
  812.     popup_screen(5, "Updates", 5)
  813.     draw_text(5, 7, "You are up to date!", colors.black, colors.white)
  814.     draw_text(11, 9, " Okay ", colors.white, colors.black)
  815.  
  816.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  817.  
  818.     --Okay button
  819.     if yPos == 9 and xPos >= 11 and xPos <= 17 then
  820.       call_homepage()
  821.     end
  822.  
  823.     --Exit button
  824.     if yPos == 5 and xPos == 25 then
  825.       call_homepage()
  826.     end
  827.     call_homepage()
  828.   end
  829.  
  830.  
  831.  
  832. end
  833.  
  834. function reset_peripherals()
  835.   clear()
  836.   draw_line(4, 5, 22, colors.blue)
  837.  
  838.   for counter = 6, 10 do
  839.     draw_line(4, counter, 22, colors.white)
  840.   end
  841.  
  842.   draw_text(5, 5, "Reset Peripherals", colors.white, colors.blue)
  843.   draw_text(5, 7, "Open computer", colors.black, colors.white)
  844.   draw_text(5, 8, "terminal.", colors.black, colors.white)
  845.   setup_wizard()
  846.  
  847. end
  848.  
  849. --stop running status screen if monitors was touched
  850. function stop()
  851.   while true do
  852.     local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  853.       x = xPos
  854.       y = yPos
  855.       stop_function = "monitor_touch"
  856.     return
  857.   end
  858. end
  859.  
  860. function mon_touch()
  861.   --when the monitor is touch on the homepage
  862.   if y == 1 then
  863.       if x < monX/3 then
  864.         power_menu()
  865.         local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  866.         if xPos < 9 then
  867.           if yPos == 2 then
  868.             reactor.setActive(true)
  869.             timer = 0 --reset anytime the reactor is turned on/off
  870.             call_homepage()
  871.           else if yPos == 3 then
  872.             reactor.setActive(false)
  873.             timer = 0 --reset anytime the reactor is turned on/off
  874.             call_homepage()
  875.           else if yPos == 4 then
  876.             auto_off()
  877.           else
  878.             call_homepage()
  879.           end
  880.           end
  881.           end
  882.         else
  883.           call_homepage()
  884.         end
  885.        
  886.       else if x < 20 then
  887.         tools_menu()
  888.         local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  889.         if xPos < 25 and xPos > 10 then
  890.           if yPos == 2 then
  891.             control_rods()
  892.           else if yPos == 3 then
  893.             efficiency()
  894.           else if yPos == 4 then
  895.             fuel()
  896.           else if yPos == 5 then
  897.             waste()
  898.           else
  899.             call_homepage()
  900.           end
  901.           end
  902.           end
  903.           end
  904.         else
  905.           call_homepage()
  906.         end
  907.       else if x < monX then
  908.         settings_menu()
  909.         local event, side, xPos, yPos = os.pullEvent("monitor_touch")
  910.         if xPos > 13 then
  911.           if yPos == 2 then
  912.             update()
  913.           else if yPos == 3 then
  914.             reset_peripherals()
  915.           else
  916.             call_homepage()
  917.           end
  918.           end
  919.         else
  920.           call_homepage()
  921.         end
  922.       end
  923.       end
  924.       end
  925.     else
  926.       call_homepage()
  927.     end
  928. end
  929.  
  930. function terminal_screen()
  931.   term.clear()
  932.   draw_line_term(1, 1, 55, colors.blue)
  933.   draw_text_term(13, 1, "BigReactor Controls", colors.white, colors.blue)
  934.   draw_line_term(1, 19, 55, colors.blue)
  935.   draw_text_term(13, 19, "by jaranvil aka jared314", colors.white, colors.blue)
  936.  
  937.   draw_text_term(1, 3, "Current program:", colors.white, colors.black)
  938.   draw_text_term(1, 4, "Reactor Control v"..version, colors.blue, colors.black)
  939.  
  940.   draw_text_term(1, 6, "Installer:", colors.white, colors.black)
  941.   draw_text_term(1, 7, "pastebin.com/p4zeq7Ma", colors.blue, colors.black)
  942.  
  943.   draw_text_term(1, 9, "Please give me your feedback, suggestions,", colors.white, colors.black)
  944.   draw_text_term(1, 10, "and errors!", colors.white, colors.black)
  945.  
  946.   draw_text_term(1, 11, "reddit.com/r/br_controls", colors.blue, colors.black)
  947. end
  948.  
  949. --run both homepage() and stop() until one returns
  950. function call_homepage()
  951.   clear()
  952.   homepage()
  953.  
  954.   if stop_function == "terminal_screen" then
  955.     stop_function = "nothing"
  956.     setup_wizard()
  957.   else if stop_function == "monitor_touch" then
  958.     stop_function = "nothing"
  959.   end
  960.   end
  961. end
  962.  
  963. --test if the entered monitor and reactor can be wrapped
  964.   function test_configs()
  965.   term.clear()
  966.  
  967.   draw_line_term(1, 1, 55, colors.blue)
  968.   draw_text_term(10, 1, "BigReactors Controls", colors.white, colors.blue)
  969.  
  970.   draw_line_term(1, 19, 55, colors.blue)
  971.   draw_text_term(10, 19, "by jaranvil aka jared314", colors.white, colors.blue)
  972.  
  973.   draw_text_term(1, 3, "Searching for a peripherals...", colors.white, colors.black)
  974.   sleep(1)
  975.  
  976.   reactor = reactorSearch()
  977.   mon = monitorSearch()
  978.  
  979.  
  980.   draw_text_term(2, 5, "Connecting to reactor...", colors.white, colors.black)
  981.   sleep(0.5)
  982.   if reactor == null then
  983.       draw_text_term(1, 8, "Error:", colors.red, colors.black)
  984.       draw_text_term(1, 9, "Could not connect to reactor", colors.red, colors.black)
  985.       draw_text_term(1, 10, "Reactor must be connected with networking cable", colors.white, colors.black)
  986.       draw_text_term(1, 11, "and modems or the computer is directly beside", colors.white, colors.black)
  987.        draw_text_term(1, 12,"the reactors computer port.", colors.white, colors.black)
  988.       draw_text_term(1, 14, "Press Enter to continue...", colors.gray, colors.black)
  989.       wait = read()
  990.       setup_wizard()
  991.   else
  992.       draw_text_term(27, 5, "success", colors.lime, colors.black)
  993.       sleep(0.5)
  994.   end
  995.  
  996.   draw_text_term(2, 6, "Connecting to monitor...", colors.white, colors.black)
  997.   sleep(0.5)
  998.   if mon == null then
  999.       draw_text_term(1, 7, "Error:", colors.red, colors.black)
  1000.       draw_text_term(1, 8, "Could not connect to a monitor. Place a 3x3 advanced monitor", colors.red, colors.black)
  1001.       draw_text_term(1, 11, "Press Enter to continue...", colors.gray, colors.black)
  1002.       wait = read()
  1003.       setup_wizard()
  1004.   else
  1005.       monX, monY = mon.getSize()
  1006.       draw_text_term(27, 6, "success", colors.lime, colors.black)
  1007.       sleep(0.5)
  1008.   end
  1009.     draw_text_term(2, 7, "saving configuration...", colors.white, colors.black)  
  1010.  
  1011.     save_config()
  1012.  
  1013.     sleep(0.1)
  1014.     draw_text_term(1, 9, "Setup Complete!", colors.lime, colors.black)
  1015.     sleep(1)
  1016.  
  1017.     auto = auto_string == "true"
  1018.     call_homepage()
  1019.  
  1020. end
  1021. ----------------SETUP-------------------------------
  1022.  
  1023. function setup_wizard()
  1024.  
  1025.   term.clear()
  1026.  
  1027.  
  1028.      draw_text_term(1, 1, "BigReactor Controls v"..version, colors.lime, colors.black)
  1029.      draw_text_term(1, 2, "Peripheral setup", colors.white, colors.black)
  1030.      draw_text_term(1, 4, "Step 1:", colors.lime, colors.black)
  1031.      draw_text_term(1, 5, "-Place 3x3 advanced monitors next to computer.", colors.white, colors.black)
  1032.      draw_text_term(1, 7, "Step 2:", colors.lime, colors.black)
  1033.      draw_text_term(1, 8, "-Place a wired modem on this computer and on the ", colors.white, colors.black)
  1034.      draw_text_term(1, 9, " computer port of the reactor.", colors.white, colors.black)
  1035.      draw_text_term(1, 10, "-connect modems with network cable.", colors.white, colors.black)
  1036.      draw_text_term(1, 11, "-right click modems to activate.", colors.white, colors.black)
  1037.      draw_text_term(1, 13, "Press Enter when ready...", colors.gray, colors.black)
  1038.    
  1039.      wait = read()
  1040.       test_configs()
  1041.  
  1042.    
  1043. end
  1044.  
  1045. -- peripheral searching thanks to /u/kla_sch
  1046. -- http://pastebin.com/gTEBHv3D
  1047. function reactorSearch()
  1048.    local names = peripheral.getNames()
  1049.    local i, name
  1050.    for i, name in pairs(names) do
  1051.       if peripheral.getType(name) == "BigReactors-Reactor" then
  1052.          return peripheral.wrap(name)
  1053.       else
  1054.          --return null
  1055.       end
  1056.    end
  1057. end
  1058.  
  1059. function monitorSearch()
  1060.    local names = peripheral.getNames()
  1061.    local i, name
  1062.    for i, name in pairs(names) do
  1063.       if peripheral.getType(name) == "monitor" then
  1064.         test = name
  1065.          return peripheral.wrap(name)
  1066.       else
  1067.          --return null
  1068.       end
  1069.    end
  1070. end
  1071.  
  1072. function start()
  1073.   --if configs exists, load values and test
  1074.   if fs.exists("config.txt") then
  1075.       load_config()
  1076.       test_configs()
  1077.   else
  1078.     setup_wizard()
  1079.   end
  1080. end
  1081.  
  1082. while (true) do
  1083.     local ok, err = pcall(start)
  1084.     os.sleep(1)
  1085. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement