Mouamle

Big Reactor ReactorCode

Jun 17th, 2015
557
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 = 3
  12. local turnOnAt = 50
  13. local turnOffAt = 90
  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, "", 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 99c")
  440.         sleep(1)
  441.       end
  442.    end
  443.    while r.getHotFluidAmount() > 10000 do
  444.      for i = 1,3 do
  445.         checkEn()
  446.         displayEn()
  447.         fuelRodLevel()
  448.         m.setCursorPos(3,6)
  449.         m.write("Finding Optimal Rod Level, please wait....")
  450.         m.setCursorPos(3,7)
  451.         m.write("Fluid Amount: "..comma_value(r.getHotFluidAmount()).."mb")
  452.         m.setCursorPos(3,8)
  453.         m.write("Waiting for 10,000mb")
  454.         sleep(1)
  455.       end
  456.    end
  457.    r.setAllControlRodLevels(99)
  458.    r.setActive(true)
  459.    
  460.    while r.getFuelTemperature() < 100 do
  461.    for i = 1,5 do
  462.      checkEn()
  463.      displayEn()
  464.      fuelRodLevel()
  465.      m.setCursorPos(3,6)
  466.      m.write("Set all rod levels to 99")
  467.      m.setCursorPos(3,7)
  468.      m.write("Waiting 5 seconds...")
  469.      sleep(1)
  470.    end
  471.    end
  472.    for i = 1,5 do
  473.      checkEn()
  474.      displayEn()
  475.      fuelRodLevel()
  476.      m.setCursorPos(3,6)
  477.      m.write("Set all rod levels to 99")
  478.      m.setCursorPos(3,7)
  479.      m.write("Waiting 5 seconds...")
  480.      sleep(1)
  481.    end
  482.    local tempMB = r.getEnergyProducedLastTick()
  483.    print(tempMB.."MB/t of steam")
  484.    local tempRodLevels = math.floor(2000/tempMB)
  485.    print("2000/"..tempMB.." = "..tempRodLevels)
  486.    tempRodLevels = 100-tempRodLevels+5
  487.    print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels))
  488.    r.setAllControlRodLevels(math.floor(tempRodLevels))
  489.    print("Waiting 10 seconds to confirm...")
  490.    for i = 1,10 do
  491.      checkEn()
  492.      displayEn()
  493.      fuelRodLevel()
  494.      m.setCursorPos(3,6)
  495.      m.write("Estimated Level: "..tempRodLevels)
  496.      m.setCursorPos(3,7)
  497.      m.write("Waiting 10 seconds...")
  498.      sleep(1)
  499.    end
  500.    tempMB = r.getEnergyProducedLastTick()
  501.    while tempMB > 2000 do
  502.       tempRodLevels = tempRodLevels+1
  503.       r.setAllControlRodLevels(math.floor(tempRodLevels))
  504.       print("Setting Rod Levels to: "..tempRodLevels)
  505.       for i = 1,5 do
  506.        checkEn()
  507.        displayEn()
  508.        fuelRodLevel()
  509.        m.setCursorPos(3,6)
  510.        m.write("Getting below 2000mb/t")
  511.        m.setCursorPos(3,7)
  512.        m.write("Currently at: "..tempMB)
  513.        sleep(1)
  514.       end
  515.       tempMB = r.getEnergyProducedLastTick()
  516.    end
  517.    while tempMB < 2000 do
  518.       tempRodLevels = tempRodLevels -1
  519.       r.setAllControlRodLevels(math.floor(tempRodLevels))
  520.       print("Setting Rod Levels to: "..tempRodLevels)
  521.       for i = 1,5 do
  522.        checkEn()
  523.        displayEn()
  524.        fuelRodLevel()
  525.        m.setCursorPos(3,6)
  526.        m.write("Getting Above 2000mb/t")
  527.        m.setCursorPos(3,7)
  528.        m.write("Currently at: "..tempMB)
  529.        sleep(1)
  530.       end
  531.       tempMB = r.getEnergyProducedLastTick()
  532.    end
  533.    OptFuelRodLevel = tempRodLevels
  534. end
  535.    
  536.  
  537. function autoReactor()
  538.    if not steamReactor then
  539.       r.setAllControlRodLevels(0)
  540.       if energyStoredPercent < turnOnAt then
  541.        if not reactorOnline then
  542.          online()
  543.        end
  544.       end
  545.       if energyStoredPercent > turnOffAt then
  546.        if reactorOnline then
  547.          offline()
  548.        end
  549.       end
  550.     else
  551.        r.setAllControlRodLevels(OptFuelRodLevel)
  552.        if energyStoredPercent < turnOnAt then
  553.          --online()
  554.              setTurbineOnline()
  555.              coilsOn()
  556.        end
  557.        if energyStoredPercent > turnOffAt then
  558.          --if turbineRotorSpeed > 1800 then
  559.          --   offline()
  560.          --else
  561.             --   online()
  562.          --end
  563.          setTurbineOnline()
  564.          coilsOff()
  565.        end
  566.     if turbineRotorSpeed > targetSpeed then
  567.        offline()
  568.     else
  569.        online()
  570.     end
  571.     end
  572. end
  573.  
  574. function displayScreen()
  575.  --  repeat
  576.       checkEn()
  577.       displayEn()
  578.       if menuType == "Reactor" then
  579.         fuelRodLevel()
  580.         if mode == "Automatic" then
  581.            autoMenu()
  582.            autoReactor()
  583.         else
  584.            manualMenu()
  585.         end
  586.        
  587.       else
  588.         turbineInductorDisplay()
  589.         if mode == "Automatic" then
  590.            turbineAutoMenu()
  591.            autoReactor()
  592.         else
  593.            turbineManualMenu()
  594.         end
  595.        
  596.       end
  597.      
  598.       timerCode = os.startTimer(1)
  599.       local event, side, x, y
  600.       repeat
  601.         event, side, x, y = os.pullEvent()
  602.         print(event)
  603.         if event == "timer" then
  604.            print(timerCode..":"..side)
  605.            if timerCode ~= side then
  606.               print("Wrong Code")
  607.             else
  608.               print("Right Code")
  609.             end
  610.         end
  611.        until event~= "timer" or timerCode == side
  612.        if event == "monitor_touch" then
  613.             print(x..":"..y)
  614.             button.checkxy(x,y)
  615.         end
  616.  --  until event ~= "timer"
  617. end
  618.  
  619. if steamReactor then
  620.    findOptFuelRods()
  621. end
  622.  
  623. while true do
  624.    displayScreen()
  625. end
Add Comment
Please, Sign In to add comment