Advertisement
mikebald

DW20 Reactor No Capacitor

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