Advertisement
Guest User

reactor

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