Advertisement
Guest User

reactor

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