Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component");
- local sides = require("sides");
- local term = require("term");
- local computer = require("computer");
- local reactor = {}
- local cell = {}
- local i = 1
- local n = 1
- for address, type in component.list("br_reactor") do
- reactor[i] = component.proxy(address)
- i = i + 1
- end
- i = 1
- for address2, type in component.list("draconic_rf_storage") do
- cell[i] = component.proxy(address2)
- i = i + 1
- end
- local gpu = component.gpu;
- local red = component.redstone;
- local w, h = gpu.getResolution();
- gpu.fill(1, 1, w, h, " ");
- term.setCursorBlink(false);
- red.setOutput(sides.west, 0);
- red.setOutput(sides.east, 0);
- gpu.setResolution(80,20)
- function round(num, idp)
- local mult = 10^(idp or 0);
- return math.floor(num * mult + 0.5) / mult;
- end
- function formateNumber(n) --http://richard.warburton.it
- n = string.format("%.f", tostring(n))
- local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$');
- return left..(num:reverse():gsub('(%d%d%d)','%1,'):reverse())..right;
- end
- function tablelength(T)
- local count = 0
- for _ in pairs(T) do count = count + 1 end
- return count
- end
- local fail = 0;
- local restartfluid = 0;
- local starttime = computer.uptime();
- local controlrodlvl = 69;
- n = 1
- for _ in pairs(reactor) do
- for i = 1 , reactor[n].getNumberOfControlRods()-1 do
- reactor[n].setControlRodLevel(i, controlrodlvl);
- i = i + 1;
- end
- n = n + 1;
- end
- n = 1
- for _ in pairs(reactor) do
- reactor[n].setActive(true);
- n = n + 1
- end
- while true do
- term.setCursor(1,1)
- gpu.setForeground(0xFFFFFF);
- term.write("Number of Reactors: " .. tablelength(reactor))
- i = 1
- for _ in pairs(reactor) do
- local steamamount = reactor[i].getHotFluidProducedLastTick()
- local casetemp = reactor[i].getCasingTemperature()
- local fueltemp = reactor[i].getFuelTemperature()
- local fuelcon = reactor[i].getFuelConsumedLastTick()
- local coolantamount = reactor[i].getCoolantAmount()
- if steamamount < 2000 then
- if fail == 0 then
- for n = 0, reactor[i].getNumberOfControlRods()-1 do
- reactor[i].setControlRodLevel(n, 100);
- n = n + 1;
- end
- fail = i
- restartfluid = 1;
- starttime = computer.uptime();
- term.setCursor(1,9);
- term.clearLine();
- gpu.setForeground(0xFF0000);
- term.write("FAILURE in Reactor " .. fail);
- if fail == 1 then
- red.setOutput(sides.west,15);
- elseif fail == 2 then
- red.setOutput(sides.north,15);
- end
- end
- end
- if fail ~= 0 then
- if reactor[fail].getCoolantAmount() > 10000 then
- for n = 0, reactor[fail].getNumberOfControlRods()-1 do
- reactor[fail].setActive(true)
- reactor[fail].setControlRodLevel(n, controlrodlvl);
- n = n + 1;
- end
- term.setCursor(1,9);
- term.clearLine();
- gpu.setForeground(0x7CFC00);
- term.write("SOLVED Reactor " .. fail);
- fail = 0;
- end
- end
- if restartfluid == 1 then
- if starttime+2 < computer.uptime() then
- red.setOutput(sides.west,0);
- red.setOutput(sides.north,0);
- restartfluid = 0;
- end
- end
- gpu.setForeground(0xFF6347);
- term.setCursor(1,2)
- term.clearLine();
- term.write("Reactor " .. i .. ":")
- term.setCursor(1,3);
- term.clearLine();
- gpu.setForeground(0xFF0000);
- term.write("Casing Temperature: " .. round(casetemp,4) .. " °C");
- term.setCursor(1,4);
- term.clearLine();
- term.write("Fuel Temperature: " .. round(fueltemp,4) .. " °C");
- term.setCursor(1,5);
- term.clearLine();
- gpu.setForeground(0xFFFFFF);
- term.write("Fuel Consumption per tick: " .. round(fuelcon,6) .. " mB/t");
- term.setCursor(1,6);
- term.clearLine();
- gpu.setForeground(0x00BFFF);
- term.write("Coolante Amount: " .. formateNumber(coolantamount) .. " mB");
- term.setCursor(1,7);
- term.clearLine();
- term.write("Steam output per tick: " .. formateNumber(steamamount) .. " mB/t");
- local energy = 0
- local maxEnergy = 0
- local energypro = 0
- local percentageStorage = 0
- local c = 1
- for _ in pairs(cell) do
- energy = cell[c].getEnergyStored() + energy
- maxEnergy = cell[c].getMaxEnergyStored() + maxEnergy
- energypro = cell[c].getTransferPerTick() + energypro
- c = c + 1
- end
- percentageStorage = round((energy / maxEnergy * 100),5)
- term.setCursor(1,11)
- term.clearLine()
- term.setCursor(8,11)
- gpu.setForeground(0x7FFF00)
- term.write("Stored Energy: " .. formateNumber(energy) .. " RF")
- term.setCursor(1,13)
- term.clearLine()
- term.write("Max storeable Energy: " .. formateNumber(maxEnergy) .. " RF")
- term.setCursor(1,15)
- term.clearLine()
- term.write("The Cell is " .. percentageStorage .. " % charged")
- if energypro > 0 then
- gpu.setForeground(0x7FFF00)
- else
- gpu.setForeground(0xFF0000)
- end
- term.setCursor(1,16);
- term.clearLine()
- term.write("Charging with " .. formateNumber(energypro) .. " RF/t");
- --BAR
- local monitorX, monitorY = gpu.getResolution()
- local bar = math.floor(((energy/maxEnergy) * (monitorX-2)) + 0.5)
- term.setCursor(1,18)
- gpu.setBackground(0xC0C0C0);
- term.write(string.rep(" ", monitorX-2))
- term.setCursor(1,18)
- gpu.setBackground(0x7FFF00);
- term.write(string.rep(" ", bar))
- term.setCursor(1,19)
- gpu.setBackground(0xC0C0C0);
- term.write(string.rep(" ", monitorX-2))
- term.setCursor(1,19)
- gpu.setBackground(0x7FFF00);
- term.write(string.rep(" ", bar))
- gpu.setBackground(0x000000);
- i = i + 1
- os.sleep(0.2)
- end
- end
Add Comment
Please, Sign In to add comment