Advertisement
Removerboy

Reactor Program for Extreme reactors

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