Advertisement
mikebald

DW20 Reactor

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