Advertisement
erilun06

modifiedReactorProgram

Mar 21st, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 14.93 KB | None | 0 0
  1. os.loadAPI("button")
  2.  
  3. tank=peripheral.find("rcsteeltankvalvetile")
  4. info=tank.getTankInfo()
  5.  
  6. p = info[1]
  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 = 3
  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.  
  309.    local tempEnergy = 0
  310.    energyStored = p.contents.amount
  311.    energyMax = p.capacity
  312.    energyStoredPercent = math.floor((energyStored/energyMax)*100)
  313.    RFProduction = r.getEnergyProducedLastTick()
  314.    fuelUse = r.getFuelConsumedLastTick()
  315.    fuelUse = math.floor(fuelUse*100)
  316.    fuelUse = fuelUse/100
  317.    coreTemp = r.getFuelTemperature()
  318.    reactorOnline = r.getActive()
  319.    tempEnergy = p.contents.amount
  320.    sleep(0.1)
  321.    energy = (p.contents.amount-tempEnergy)/2
  322.    --energy = energy*numCapacitors
  323.    --if steamReactor then
  324.   --   turbineOnline = t.getActive()
  325.   --   turbineRotorSpeed = t.getRotorSpeed()
  326.   --   turbineRFGen = t.getEnergyProducedLastTick()
  327.   --   turbineFluidRate = t.getFluidFlowRate()
  328.    --end
  329.  
  330. end
  331.  
  332. function fuelRodLevel()
  333.    rodLevel = r.getControlRodLevel(0)
  334.    --print(rodLevel)
  335.    m.setCursorPos(30,5)
  336.    m.write(tostring(rodLevel).."%")
  337.    m.setBackgroundColor(colors.white)
  338.    m.setCursorPos(28,6)
  339.    m.write("       ")
  340.    for i = 1,10 do
  341.       m.setCursorPos(28,i+6)
  342.       m.setBackgroundColor(colors.white)
  343.       m.write(" ")
  344.       m.setBackgroundColor(colors.yellow)
  345.       m.write(" ")
  346.       if rodLevel/10 >= i then
  347.          m.setBackgroundColor(colors.red)
  348.       else
  349.          m.setBackgroundColor(colors.yellow)
  350.       end
  351.       m.write("   ")
  352.       m.setBackgroundColor(colors.yellow)
  353.       m.write(" ")
  354.       m.setBackgroundColor(colors.white)
  355.       m.write(" ")
  356.    end
  357.    m.setCursorPos(28,17)
  358.    m.write("       ")
  359.    m.setBackgroundColor(colors.black)
  360. end
  361.  
  362. function turbineInductorDisplay()
  363.    m.setBackgroundColor(colors.gray)
  364.    m.setCursorPos(28,6)
  365.    m.write("       ")
  366.    for i = 1,10 do
  367.    m.setCursorPos(28,i+6)
  368.       m.setBackgroundColor(colors.gray)
  369.       m.write(" ")
  370.       m.setBackgroundColor(colors.lightGray)
  371.       m.write(" ")
  372.       if turbineInductor then
  373.          m.setBackgroundColor(colors.red)
  374.       else
  375.          m.setBackgroundColor(colors.blue)
  376.       end
  377.       m.write(" ")
  378.       m.setBackgroundColor(colors.gray)
  379.       m.write(" ")
  380.       if turbineInductor then
  381.          m.setBackgroundColor(colors.red)
  382.       else
  383.          m.setBackgroundColor(colors.blue)
  384.       end
  385.       m.write(" ")
  386.       m.setBackgroundColor(colors.lightGray)
  387.       m.write(" ")
  388.       m.setBackgroundColor(colors.gray)
  389.       m.write(" ")
  390.    end
  391.    m.setCursorPos(28,17)
  392.    m.write("       ")
  393.    m.setBackgroundColor(colors.black)
  394. end
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401. function getClick()
  402.    local event, side, x, y = os.pullEvent("monitor_touch")
  403.    button.checkxy(x,y)
  404. end
  405.  
  406. function findOptFuelRods()
  407.    m.clear()
  408.    r.setActive(false)
  409.    checkEn()
  410.    displayEn()
  411.    fuelRodLevel()
  412.    while r.getFuelTemperature() > 99 do
  413.       for i= 1,3 do
  414.         checkEn()
  415.         displayEn()
  416.         fuelRodLevel()
  417.         m.setCursorPos(3,6)
  418.         m.write("Finding Optimal Rod Level")
  419.         m.setCursorPos(3,7)
  420.         m.write("Core Temp: "..r.getFuelTemperature())
  421.         m.setCursorPos(3,8)
  422.         m.write("Waiting for 99c")
  423.         sleep(1)
  424.       end
  425.    end
  426.    while r.getHotFluidAmount() > 10000 do
  427.      for i = 1,3 do
  428.         checkEn()
  429.         displayEn()
  430.         fuelRodLevel()
  431.         m.setCursorPos(3,6)
  432.         m.write("Finding Optimal Rod Level, please wait....")
  433.         m.setCursorPos(3,7)
  434.         m.write("Fluid Amount: "..comma_value(r.getHotFluidAmount()).."mb")
  435.         m.setCursorPos(3,8)
  436.         m.write("Waiting for 10,000mb")
  437.         sleep(1)
  438.       end
  439.    end
  440.    r.setAllControlRodLevels(99)
  441.    r.setActive(true)
  442.  
  443.    while r.getFuelTemperature() < 100 do
  444.    for i = 1,5 do
  445.      checkEn()
  446.      displayEn()
  447.      fuelRodLevel()
  448.      m.setCursorPos(3,6)
  449.      m.write("Set all rod levels to 99")
  450.      m.setCursorPos(3,7)
  451.      m.write("Waiting 5 seconds...")
  452.      sleep(1)
  453.    end
  454.    end
  455.    for i = 1,5 do
  456.      checkEn()
  457.      displayEn()
  458.      fuelRodLevel()
  459.      m.setCursorPos(3,6)
  460.      m.write("Set all rod levels to 99")
  461.      m.setCursorPos(3,7)
  462.      m.write("Waiting 5 seconds...")
  463.      sleep(1)
  464.    end
  465.    local tempMB = r.getEnergyProducedLastTick()
  466.    print(tempMB.."MB/t of steam")
  467.    local tempRodLevels = math.floor(2000/tempMB)
  468.    print("2000/"..tempMB.." = "..tempRodLevels)
  469.    tempRodLevels = 100-tempRodLevels+5
  470.    print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels))
  471.    r.setAllControlRodLevels(math.floor(tempRodLevels))
  472.    print("Waiting 10 seconds to confirm...")
  473.    for i = 1,10 do
  474.      checkEn()
  475.      displayEn()
  476.      fuelRodLevel()
  477.      m.setCursorPos(3,6)
  478.      m.write("Estimated Level: "..tempRodLevels)
  479.      m.setCursorPos(3,7)
  480.      m.write("Waiting 10 seconds...")
  481.      sleep(1)
  482.    end
  483.    tempMB = r.getEnergyProducedLastTick()
  484.    while tempMB > 2000 do
  485.       tempRodLevels = tempRodLevels+1
  486.       r.setAllControlRodLevels(math.floor(tempRodLevels))
  487.       print("Setting Rod Levels to: "..tempRodLevels)
  488.       for i = 1,5 do
  489.        checkEn()
  490.        displayEn()
  491.        fuelRodLevel()
  492.        m.setCursorPos(3,6)
  493.        m.write("Getting below 2000mb/t")
  494.        m.setCursorPos(3,7)
  495.        m.write("Currently at: "..tempMB)
  496.        sleep(1)
  497.       end
  498.       tempMB = r.getEnergyProducedLastTick()
  499.    end
  500.    while tempMB < 2000 do
  501.       tempRodLevels = tempRodLevels -1
  502.       r.setAllControlRodLevels(math.floor(tempRodLevels))
  503.       print("Setting Rod Levels to: "..tempRodLevels)
  504.       for i = 1,5 do
  505.        checkEn()
  506.        displayEn()
  507.        fuelRodLevel()
  508.        m.setCursorPos(3,6)
  509.        m.write("Getting Above 2000mb/t")
  510.        m.setCursorPos(3,7)
  511.        m.write("Currently at: "..tempMB)
  512.        sleep(1)
  513.       end
  514.       tempMB = r.getEnergyProducedLastTick()
  515.    end
  516.    OptFuelRodLevel = tempRodLevels
  517. end
  518.  
  519.  
  520. function autoReactor()
  521.    if not steamReactor then
  522.       r.setAllControlRodLevels(0)
  523.       if energyStoredPercent < turnOnAt then
  524.        if not reactorOnline then
  525.          online()
  526.        end
  527.       end
  528.       if energyStoredPercent > turnOffAt then
  529.        if reactorOnline then
  530.          offline()
  531.        end
  532.       end
  533.     else
  534.        r.setAllControlRodLevels(OptFuelRodLevel)
  535.        if energyStoredPercent < turnOnAt then
  536.          --online()
  537.              setTurbineOnline()
  538.              coilsOn()
  539.        end
  540.        if energyStoredPercent > turnOffAt then
  541.          --if turbineRotorSpeed > 1800 then
  542.          --   offline()
  543.          --else
  544.             --   online()
  545.          --end
  546.          setTurbineOnline()
  547.          coilsOff()
  548.        end
  549.     if turbineRotorSpeed > targetSpeed then
  550.        offline()
  551.     else
  552.        online()
  553.     end
  554.     end
  555. end
  556.  
  557. function displayScreen()
  558.  --  repeat
  559.       checkEn()
  560.       displayEn()
  561.       if menuType == "Reactor" then
  562.         fuelRodLevel()
  563.         if mode == "Automatic" then
  564.            autoMenu()
  565.            autoReactor()
  566.         else
  567.            manualMenu()
  568.         end
  569.  
  570.       else
  571.         turbineInductorDisplay()
  572.         if mode == "Automatic" then
  573.            turbineAutoMenu()
  574.            autoReactor()
  575.         else
  576.            turbineManualMenu()
  577.         end
  578.  
  579.       end
  580.  
  581.       timerCode = os.startTimer(1)
  582.       local event, side, x, y
  583.       repeat
  584.         event, side, x, y = os.pullEvent()
  585.         print(event)
  586.         if event == "timer" then
  587.            print(timerCode..":"..side)
  588.            if timerCode ~= side then
  589.               print("Wrong Code")
  590.             else
  591.               print("Right Code")
  592.             end
  593.         end
  594.        until event~= "timer" or timerCode == side
  595.        if event == "monitor_touch" then
  596.             print(x..":"..y)
  597.             button.checkxy(x,y)
  598.         end
  599.  --  until event ~= "timer"
  600. end
  601.  
  602. --if steamReactor then
  603. --   findOptFuelRods()
  604. --end
  605.  
  606. while true do
  607.    displayScreen()
  608. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement