Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- os.loadAPI("button")
- p = {}
- t = {}
- m = peripheral.find("monitor")
- r = peripheral.find("BigReactors-Reactor")
- --p[1] = peripheral.wrap("tile_blockcapacitorbank_name_0")
- p[2] = peripheral.wrap("tile_blockcapacitorbank_name_1")
- p[1] = peripheral.wrap("back")
- t[1] = peripheral.wrap("BigReactors-Turbine_0")
- t[2] = peripheral.wrap("BigReactors-Turbine_1")
- t[3] = peripheral.wrap("BigReactors-Turbine_2")
- local steamReactor = r.isActivelyCooled()
- local menuType = "Reactor"
- local numCapacitors = 72
- local turnOnAt = 50
- local turnOffAt = 90
- local tcolors = {}
- tcolors[1] = colors.cyan
- tcolors[2] = colors.orange
- tcolors[3] = colors.yellow
- local energy = {}
- energy[1] = 0
- energy[2] = 0
- local energyStored = {}
- energyStored[1] = 0
- energyStored[2] = 0
- local energyMax = {}
- energyMax[1] = 0
- energyMax[2] = 0
- local energyStoredPercent = {}
- energyStoredPercent[1] = 0
- energyStoredPercent[2] = 0
- local mode = "Manual"
- local timerCode
- local RFProduction = 0
- local fuelUse = 0
- local coreTemp = 0
- local reactorOnline = false
- local rodLevel = 0
- local turbineOnline = {}
- local turbineRotorSpeed = {}
- local turbineRFGen = {}
- local turbineFluidRate = {}
- local turbineInductor = {}
- turbineOnline[1] = false
- turbineRotorSpeed[1] = 0
- turbineRFGen[1] = 0
- turbineFluidRate[1] = 0
- turbineInductor[1] = false
- turbineOnline[2] = false
- turbineRotorSpeed[2] = 0
- turbineRFGen[2] = 0
- turbineFluidRate[2] = 0
- turbineInductor[2] = false
- turbineOnline[3] = false
- turbineRotorSpeed[3] = 0
- turbineRFGen[3] = 0
- turbineFluidRate[3] = 0
- turbineInductor[3] = false
- local OptFuelRodLevel = 0
- function autoMenu()
- m.setTextScale(1)
- button.clearTable()
- button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
- button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
- if steamReactor then
- button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
- button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
- end
- button.screen()
- checkMode()
- menuMode()
- end
- function manualMenu()
- m.setTextScale(1)
- button.clearTable()
- button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
- button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
- button.setTable("Online", online, "", 3, 13, 8, 8)
- button.setTable("Offline", offline, "", 15, 25, 8, 8)
- button.setTable("0", setRods, 0, 11,14, 10, 10)
- button.setTable("10", setRods, 10, 5,8, 12, 12)
- button.setTable("20", setRods, 20, 11,14, 12, 12)
- button.setTable("30", setRods, 30, 17,20, 12, 12)
- button.setTable("40", setRods, 40, 5,8, 14, 14)
- button.setTable("50", setRods, 50, 11,14, 14, 14)
- button.setTable("60", setRods, 60, 17,20, 14, 14)
- button.setTable("70", setRods, 70, 5,8, 16, 16)
- button.setTable("80", setRods, 80, 11,14, 16, 16)
- button.setTable("90", setRods, 90, 17,20, 16, 16)
- button.setTable("+", rodPlus, "", 23, 25, 12, 12)
- button.setTable("-", rodMinus, "", 23, 25, 16, 16)
- if steamReactor then
- button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
- button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
- end
- button.screen()
- checkMode()
- reactorOnOff()
- menuMode()
- end
- function setTTextColor(n)
- if t[n] ~= nil then
- m.setTextColor(tcolors[n])
- else
- m.setTextColor(colors.gray)
- end
- end
- function turbineAutoMenu()
- _turbineMenu()
- end
- function turbineManualMenu()
- _turbineMenu()
- end
- function _turbineMenu()
- m.setTextScale(1)
- m.setTextColor(colors.white)
- button.clearTable()
- button.setTable("Automatic",autoMode,"",2,12,7,7)
- button.setTable("Manual",manualMode,"",13,21,7,7)
- for tu = 1,3 do
- ylev = 9+(tu-1)*3
- if turbineOnline[tu] then
- button.setTable("Online"..tu, setTurbineOffline, tu, 2, 10, ylev, ylev)
- button.setButton("Online"..tu,true)
- atext = "online "
- else
- button.setTable("Online"..tu, setTurbineOnline, tu, 2, 10, ylev, ylev)
- button.setButton("Online"..tu,false)
- atext = "offline"
- end
- m.setCursorPos(12,ylev)
- --setTTextColor(tu)
- m.write(atext)
- m.setTextColor(colors.white)
- ylev = ylev + 1
- if turbineInductor[tu] then
- button.setTable("Coils"..tu, coilsOff, tu, 2, 10, ylev, ylev)
- button.setButton("Coils"..tu,true)
- atext = "on "
- else
- button.setTable("Coils"..tu, coilsOn, tu, 2, 10, ylev, ylev)
- button.setButton("Coils"..tu,false)
- atext = "off"
- end
- m.setCursorPos(12,ylev)
- --setTTextColor(tu)
- m.write(atext)
- m.setTextColor(colors.white)
- end
- button.setTable("Reactor", reactorMenu, "", 2, 9, 19, 19)
- button.setTable("Turbine", turbineMenu, "", 12, 19, 19, 19)
- button.screen()
- checkMode()
- --turbineOnOff()
- --coilsOnOff()
- menuMode()
- end
- --function turbineManualMenu()
- -- m.setTextScale(1)
- -- button.clearTable()
- -- button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
- -- button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
- -- button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
- -- button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
- -- button.setTable("Online", setTurbineOnline, "", 3, 13, 8, 8)
- -- button.setTable("Offline", setTurbineOffline, "", 15, 25, 8, 8)
- -- button.setTable("Coils On", coilsOn, "", 3, 13, 10, 10)
- -- button.setTable("Coils Off", coilsOff, "", 15, 25, 10, 10)
- -- button.screen()
- -- checkMode()
- -- turbineOnOff()
- -- coilsOnOff()
- -- menuMode()
- --end
- function reactorMenu()
- menuType = "Reactor"
- displayScreen()
- end
- function turbineMenu()
- menuType = "Turbine"
- displayScreen()
- end
- function online()
- r.setActive(true)
- end
- function offline()
- r.setActive(false)
- end
- function setAllTurbinesOnline()
- for i=1,3 do
- setTurbineOnline(i)
- end
- end
- function setAllTurbinesOffline()
- for i=1,3 do
- setTurbineOffline(i)
- end
- end
- function setTurbineOnline(n)
- if t[n] ~= nil then
- t[n].setActive(true)
- end
- end
- function setTurbineOffline(n)
- if t[n] ~= nil then
- t[n].setActive(false)
- end
- end
- function reactorOnOff()
- button.setButton("Online", r.getActive())
- button.setButton("Offline", not r.getActive())
- end
- function turbineOnOff(n)
- button.setButton("Online"..n..":", t[n].getActive())
- end
- function coilsOnOff(n)
- button.setButton("Coils"..n..":", t[n].getInductorEngaged())
- end
- function allCoilsOn()
- for i=1,3 do
- coilsOn(i)
- end
- end
- function allCoilsOff()
- for i=1,3 do
- coilsOff(i)
- end
- end
- function coilsOn(n)
- if t[n] ~= nil then
- t[n].setInductorEngaged(true)
- end
- end
- function coilsOff(n)
- if t[n] ~= nil then
- t[n].setInductorEngaged(false)
- end
- end
- function menuMode()
- if steamReactor then
- if menuType == "Reactor" then
- button.setButton("Reactor", true)
- button.setButton("Turbine", false)
- else
- button.setButton("Reactor", false)
- button.setButton("Turbine", true)
- end
- end
- end
- function setRods(setLevel)
- print("Setting Rod Level: "..setLevel)
- button.flash(tostring(setLevel))
- r.setAllControlRodLevels(setLevel)
- fuelRodLevel()
- end
- function rodPlus()
- button.flash("+")
- r.setAllControlRodLevels(rodLevel+1)
- fuelRodLevel()
- end
- function rodMinus()
- button.flash("-")
- r.setAllControlRodLevels(rodLevel-1)
- fuelRodLevel()
- end
- function checkMode()
- button.toggleButton(mode)
- end
- function manualMode()
- mode = "Manual"
- manualMenu()
- end
- function autoMode()
- mode = "Automatic"
- displayScreen()
- end
- function comma_value(amount)
- local formatted = amount
- local swap = false
- if formatted < 0 then
- formatted = formatted*-1
- swap = true
- end
- while true do
- formatted, k = string.gsub(formatted, "^(%d+)(%d%d%d)", '%1,%2')
- if k == 0 then
- break
- end
- end
- if swap then
- formatted = "-"..formatted
- end
- return formatted
- end
- function displayEn()
- m.clear()
- m.setTextColor(colors.white)
- if menuType == "Reactor" then
- m.setCursorPos(1,1)
- m.write("Energy Use: ")
- if energy[1] < 0 then
- m.setTextColor(colors.red)
- else
- m.setTextColor(colors.green)
- end
- m.write(comma_value(math.floor(energy[1])).. "RF/t")
- m.setTextColor(colors.white)
- m.setCursorPos(1,2)
- m.write("Energy Stored: "..energyStoredPercent[1].."%")
- m.setCursorPos(1,3)
- m.write("Reactor is: ")
- if reactorOnline then
- m.setTextColor(colors.green)
- m.write("Online")
- else
- m.setTextColor(colors.red)
- m.write("Offline")
- end
- m.setTextColor(colors.white)
- m.setCursorPos(22,1)
- if steamReactor then
- m.write("Steam: ")
- m.setTextColor(colors.green)
- m.write(comma_value(math.floor(RFProduction)).."MB/t")
- else
- m.write("RF Gen: ")
- m.setTextColor(colors.green)
- m.write(comma_value(math.floor(RFProduction)).."RF/t")
- end
- m.setTextColor(colors.white)
- m.setCursorPos(22,2)
- m.write("Core Temp: "..math.floor(coreTemp).."c")
- m.setCursorPos(22,3)
- m.write("Fuel Use: "..fuelUse.."MB/t")
- else
- -- write capcitor energy info
- for i = 1,2 do
- m.setCursorPos(1,1+(i-1)*2)
- m.write("Energy"..i..": ")
- if energy[i] < 0 then
- m.setTextColor(colors.red)
- else
- m.setTextColor(colors.green)
- end
- m.write(comma_value(math.floor(energy[i])).. "RF/t")
- m.setTextColor(colors.white)
- m.setCursorPos(1,2+(i-1)*2)
- m.write("Energy Stored"..i..": "..energyStoredPercent[i].."%")
- m.setCursorPos(1,5)
- m.write("Reactor is: ")
- if reactorOnline then
- m.setTextColor(colors.green)
- m.write("Online")
- else
- m.setTextColor(colors.red)
- m.write("Offline")
- end
- m.setTextColor(colors.white)
- end
- -- write turbine production info
- for i = 1,3 do
- m.setTextColor(colors.white)
- m.setCursorPos(23,1+3*(i-1))
- m.write("RFGen"..i..": ")
- m.setTextColor(colors.green)
- m.write(comma_value(math.floor(turbineRFGen[i])).."RF/t")
- m.setTextColor(colors.white)
- m.setCursorPos(23,2+(i-1)*3)
- m.write("Rotor"..i..": "..comma_value(math.floor(turbineRotorSpeed[i])).." RPM")
- m.setCursorPos(23,3+(i-1)*3)
- m.write("Steam"..i..": "..comma_value(turbineFluidRate[i]).."MB/t")
- end
- end
- end
- function checkEn()
- print("checkEn")
- for i = 1,2 do
- if p[i] ~= nil then
- local tempEnergy = 0
- energyStored[i] = p[i].getEnergyStored()
- energyMax[i] = p[i].getMaxEnergyStored()
- energyStoredPercent[i] = math.floor((energyStored[i]/energyMax[i])*100)
- tempEnergy = p[i].getEnergyStored()
- sleep(0.1)
- energy[i] = (p[i].getEnergyStored()-tempEnergy)/2
- energy[i] = energy[i]*numCapacitors
- --energy[i] = energy[i]
- end
- end
- RFProduction = r.getEnergyProducedLastTick()
- fuelUse = r.getFuelConsumedLastTick()
- fuelUse = math.floor(fuelUse*100)
- fuelUse = fuelUse/100
- coreTemp = r.getFuelTemperature()
- reactorOnline = r.getActive()
- if steamReactor then
- for i = 1,3 do
- if t[i] ~= nil then
- turbineOnline[i] = t[i].getActive()
- turbineRotorSpeed[i] = t[i].getRotorSpeed()
- turbineRFGen[i] = t[i].getEnergyProducedLastTick()
- turbineFluidRate[i] = t[i].getFluidFlowRate()
- end
- end
- end
- end
- function fuelRodLevel()
- rodLevel = r.getControlRodLevel(0)
- --print(rodLevel)
- m.setCursorPos(30,5)
- m.write(tostring(rodLevel).."%")
- m.setBackgroundColor(colors.white)
- m.setCursorPos(28,6)
- m.write(" ")
- for i = 1,10 do
- m.setCursorPos(28,i+6)
- m.setBackgroundColor(colors.white)
- m.write(" ")
- m.setBackgroundColor(colors.yellow)
- m.write(" ")
- if rodLevel/10 >= i then
- m.setBackgroundColor(colors.red)
- else
- m.setBackgroundColor(colors.yellow)
- end
- m.write(" ")
- m.setBackgroundColor(colors.yellow)
- m.write(" ")
- m.setBackgroundColor(colors.white)
- m.write(" ")
- end
- m.setCursorPos(28,17)
- m.write(" ")
- m.setBackgroundColor(colors.black)
- end
- function turbineInductorDisplay()
- print("turbineInductor")
- m.setCursorPos(22,11)
- for i = 1,3 do
- if t[i] ~= nil then
- turbineInductor[i] = t[i].getInductorEngaged()
- end
- setTTextColor(i)
- m.write("T"..i)
- if turbineInductor[i] then
- m.write(" on ")
- else
- m.write("off ")
- end
- end
- --m.setBackgroundColor(colors.gray)
- --m.write(" ")
- --m.setCursorPos(21,12)
- --m.write(" ")
- for j=0,7 do
- m.setCursorPos(22,12+j)
- --m.write(" ")
- for i = 1,3 do
- m.setBackgroundColor(colors.lightGray)
- m.write(" ")
- if j == 0 or j == 2 or j == 4 then
- m.setBackgroundColor(colors.black)
- elseif j == 1 or j == 3 or j == 5 then
- m.setBackgroundColor(tcolors[i])
- else
- if turbineInductor[i] then
- m.setBackgroundColor(colors.red)
- else
- m.setBackgroundColor(colors.blue)
- end
- end
- m.write(" ")
- m.setBackgroundColor(tcolors[i])
- m.write(" ")
- if j == 0 or j == 2 or j == 4 then
- m.setBackgroundColor(colors.black)
- elseif j == 1 or j == 3 or j == 5 then
- m.setBackgroundColor(tcolors[i])
- else
- if turbineInductor[i] then
- m.setBackgroundColor(colors.red)
- else
- m.setBackgroundColor(colors.blue)
- end
- end
- m.write(" ")
- m.setBackgroundColor(colors.lightGray)
- m.write(" ")
- m.setBackgroundColor(colors.black)
- m.write(" ")
- end
- --m.setCursorPos(39,12+j)
- --m.setBackgroundColor(colors.gray)
- --m.write(" ")
- end
- --m.setCursorPos(21,19)
- --m.write(" ")
- --m.setBackgroundColor(colors.black)
- end
- function getClick()
- local event, side, x, y = os.pullEvent("monitor_touch")
- button.checkxy(x,y)
- end
- function findOptFuelRods()
- m.clear()
- r.setActive(false)
- checkEn()
- displayEn()
- fuelRodLevel()
- while r.getFuelTemperature() > 99 do
- for i= 1,3 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Finding Optimal Rod Level")
- m.setCursorPos(3,7)
- m.write("Core Temp: "..r.getFuelTemperature())
- m.setCursorPos(3,8)
- m.write("Waiting for 99c")
- sleep(1)
- end
- end
- while r.getHotFluidAmount() > 10000 do
- for i = 1,3 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Finding Optimal Rod Level, please wait....")
- m.setCursorPos(3,7)
- m.write("Fluid Amount: "..comma_value(r.getHotFluidAmount()).."mb")
- m.setCursorPos(3,8)
- m.write("Waiting for 10,000mb")
- sleep(1)
- end
- end
- r.setAllControlRodLevels(99)
- r.setActive(true)
- while r.getFuelTemperature() < 100 do
- for i = 1,5 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Set all rod levels to 99")
- m.setCursorPos(3,7)
- m.write("Waiting 5 seconds...")
- sleep(1)
- end
- end
- for i = 1,5 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Set all rod levels to 99")
- m.setCursorPos(3,7)
- m.write("Waiting 5 seconds...")
- sleep(1)
- end
- local tempMB = r.getEnergyProducedLastTick()
- print(tempMB.."MB/t of steam")
- local tempRodLevels = math.floor(2000/tempMB)
- print("2000/"..tempMB.." = "..tempRodLevels)
- tempRodLevels = 100-tempRodLevels+5
- print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels))
- r.setAllControlRodLevels(math.floor(tempRodLevels))
- print("Waiting 10 seconds to confirm...")
- for i = 1,10 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Estimated Level: "..tempRodLevels)
- m.setCursorPos(3,7)
- m.write("Waiting 10 seconds...")
- sleep(1)
- end
- tempMB = r.getEnergyProducedLastTick()
- while tempMB > 2000 do
- tempRodLevels = tempRodLevels+1
- r.setAllControlRodLevels(math.floor(tempRodLevels))
- print("Setting Rod Levels to: "..tempRodLevels)
- for i = 1,5 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Getting below 2000mb/t")
- m.setCursorPos(3,7)
- m.write("Currently at: "..tempMB)
- sleep(1)
- end
- tempMB = r.getEnergyProducedLastTick()
- end
- while tempMB < 2000 do
- tempRodLevels = tempRodLevels -1
- r.setAllControlRodLevels(math.floor(tempRodLevels))
- print("Setting Rod Levels to: "..tempRodLevels)
- for i = 1,5 do
- checkEn()
- displayEn()
- fuelRodLevel()
- m.setCursorPos(3,6)
- m.write("Getting Above 2000mb/t")
- m.setCursorPos(3,7)
- m.write("Currently at: "..tempMB)
- sleep(1)
- end
- tempMB = r.getEnergyProducedLastTick()
- end
- OptFuelRodLevel = tempRodLevels
- end
- function autoReactor()
- if not steamReactor then
- r.setAllControlRodLevels(0)
- if energyStoredPercent[1] < turnOnAt then
- if not reactorOnline then
- online()
- end
- end
- if energyStoredPercent[1] > turnOffAt then
- if reactorOnline then
- offline()
- end
- end
- else
- r.setAllControlRodLevels(OptFuelRodLevel)
- if energyStoredPercent[1] < turnOnAt then
- --online()
- setAllTurbinesOnline()
- allCoilsOn()
- end
- if energyStoredPercent[1] > turnOffAt then
- --if turbineRotorSpeed > 1800 then
- -- offline()
- --else
- -- online()
- --end
- setAllTurbinesOnline()
- allCoilsOff()
- end
- if turbineRotorSpeed[1] > 1800 then
- offline()
- else
- online()
- end
- end
- end
- function displayScreen()
- checkEn()
- displayEn()
- if menuType == "Reactor" then
- fuelRodLevel()
- if mode == "Automatic" then
- autoMenu()
- autoReactor()
- else
- manualMenu()
- end
- else
- turbineInductorDisplay()
- if mode == "Automatic" then
- turbineAutoMenu()
- autoReactor()
- else
- turbineManualMenu()
- end
- end
- timerCode = os.startTimer(1)
- local event, side, x, y
- repeat
- event, side, x, y = os.pullEvent()
- print(event)
- if event == "timer" then
- print(timerCode..":"..side)
- if timerCode ~= side then
- print("Wrong Code")
- else
- print("Right Code")
- end
- end
- until event~= "timer" or timerCode == side
- if event == "monitor_touch" then
- print(x..":"..y)
- button.checkxy(x,y)
- end
- end
- if steamReactor then
- -- findOptFuelRods()
- OptFuelRodLevel = 36
- end
- while true do
- displayScreen()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement