Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --"Regulator" for BigReactor actively cooled reactors.
- --Scanning interval in seconds:
- local AdjustInterval = 600
- --Detect directly adjacent devices function
- function detectDevice(DeviceName)
- DeviceSide="none"
- for k,v in pairs(redstone.getSides()) do
- if peripheral.getType(v)==DeviceName then
- DeviceSide = v
- break
- end
- end
- return(DeviceSide)
- end
- --list all connected peripherals:
- local peripheralList = peripheral.getNames()
- --locate reactor
- reactorside=detectDevice("Reactor")
- if reactorside~="none" then
- reactor=peripheral.wrap(reactorside)
- else
- for Index = 1, #peripheralList do
- if string.find(peripheralList[Index], "Reactor") then
- reactor=peripheral.wrap(peripheralList[Index])
- print ("Reactor wired modem: "..peripheralList[Index].." connected.")
- end
- end
- end
- --locate monitor
- MonitorSide=detectDevice("monitor")
- if MonitorSide~="none" then
- monitor=peripheral.wrap(MonitorSide)
- print ("Monitor on the " .. MonitorSide .. " connected.")
- else
- for Index = 1, #peripheralList do
- if string.find(peripheralList[Index], "monitor") then
- monitor=peripheral.wrap(peripheralList[Index])
- print ("Monitor on wired modem: "..peripheralList[Index].." connected.")
- end
- end --for
- if monitor == "none" then
- print ("Warning - No Monitor attached, continuing without.")
- end
- end
- w,h=monitor.getSize()
- print(w)
- print(h)
- if monitor ~= "none" then
- monitor.clear()
- monitor.setTextColor(colors.blue)
- monitor.setCursorPos(1,1)
- monitor.write("BR Automatic Steam Regulator")
- monitor.setTextColor(colors.white)
- monitor.setCursorPos(1,2)
- monitor.write("-----------------------------")
- monitor.setCursorPos(1,6)
- monitor.write("-------------------")
- monitor.setCursorPos(1,10)
- monitor.write("-------------------")
- for i=3, 12 do
- monitor.setCursorPos(20, i)
- monitor.write("|")
- end
- monitor.setCursorPos(2,3)
- monitor.write("Temp:")
- monitor.setCursorPos(2,4)
- monitor.write("Steam:")
- monitor.setCursorPos(2,5)
- monitor.write("Reactiv:")
- monitor.setCursorPos(2,7)
- monitor.write("Fuel:")
- monitor.setCursorPos(2,8)
- monitor.write("Waste:")
- monitor.setCursorPos(2,9)
- monitor.write("Rate:")
- monitor.setCursorPos(22,3)
- monitor.write("Control")
- monitor.setCursorPos(22,4)
- monitor.write("Rod:")
- monitor.setCursorPos(22,10)
- monitor.write("Next:")
- monitor.setCursorPos(2,11)
- monitor.write("Cooling:")
- monitor.setCursorPos(13,11)
- monitor.write("Reactor")
- monitor.setCursorPos(16,3)
- monitor.write("C")
- monitor.setCursorPos(16,4)
- monitor.write("mB/t")
- monitor.setCursorPos(16,5)
- monitor.write("%")
- monitor.setCursorPos(14,7)
- monitor.write("mB")
- --monitor.setCursorPos(19,7)
- --monitor.write("%")
- monitor.setCursorPos(14,8)
- monitor.write("mB")
- monitor.setCursorPos(14,9)
- monitor.write("mB/t")
- monitor.setCursorPos(27,5)
- monitor.write("%")
- monitor.setCursorPos(22,12)
- monitor.write("- O +")
- monitor.setBackgroundColour((colours.grey))
- monitor.setCursorPos(22,7)
- monitor.write("Control")
- monitor.setCursorPos(22,8)
- monitor.write(" Rod ")
- monitor.setCursorPos(22,9)
- monitor.write("Adjust ")
- monitor.setBackgroundColour((colours.black))
- end
- function snooze(time)
- for i = time,0,-1 do
- if monitor ~= "none" then
- monitor.setCursorPos(11,3)
- local fueltemp = math.ceil(reactor.getFuelTemperature())
- if fueltemp > 1000 then
- monitor.setTextColor(colors.red)
- end
- monitor.write(fueltemp.." ")
- monitor.setTextColor(colors.white)
- monitor.setCursorPos(11,4)
- monitor.write(math.ceil(reactor.getHotFluidProducedLastTick()).." ")
- monitor.setCursorPos(11,5)
- monitor.write(math.ceil(reactor.getFuelReactivity()).." ")
- monitor.setCursorPos(8,7)
- monitor.write(reactor.getFuelAmount().." ")
- --monitor.setCursorPos(16,7)
- --monitor.write(math.ceil(100*((reactor.getFuelAmount())/(reactor.getFuelAmountMax()))).." ")
- monitor.setCursorPos(9,8)
- monitor.write(reactor.getWasteAmount().." ")
- local fuelrate = (math.ceil(1000*(reactor.getFuelConsumedLastTick())))/1000
- monitor.setCursorPos(8,9)
- monitor.write(fuelrate)
- monitor.setCursorPos(23,5)
- monitor.write(reactor.getControlRodLevel(0).." ")
- end
- --test for on/off state and cooling
- if monitor ~= "none" then
- if reactor.getActive() then
- monitor.setBackgroundColour((colours.green))
- monitor.setCursorPos(13,12)
- monitor.write("ON")
- monitor.setBackgroundColour((colours.grey))
- monitor.setCursorPos(16,12)
- monitor.write("OFF")
- monitor.setBackgroundColour((colours.black))
- else
- monitor.setBackgroundColour((colours.grey))
- monitor.setCursorPos(13,12)
- monitor.write("ON")
- monitor.setBackgroundColour((colours.red))
- monitor.setCursorPos(16,12)
- monitor.write("OFF")
- monitor.setBackgroundColour((colours.black))
- end
- if reactor.getCoolantAmount() > reactor.getCoolantAmountMax()*0.3 then
- monitor.setBackgroundColour((colours.green))
- monitor.setCursorPos(2,12)
- monitor.write("Supply: OK")
- monitor.setBackgroundColour((colours.black))
- else
- monitor.setBackgroundColour((colours.red))
- monitor.setCursorPos(2,12)
- monitor.write("No Cooling")
- monitor.setBackgroundColour((colours.black))
- end
- monitor.setCursorPos(23,11)
- monitor.write(i)
- end
- sleep(1)
- end
- end
- --boost up steam production initially
- if monitor ~= "none" then
- monitor.setBackgroundColour((colours.green))
- monitor.setCursorPos(22,7)
- monitor.write("Control")
- monitor.setCursorPos(22,8)
- monitor.write(" Rod ")
- monitor.setCursorPos(22,9)
- monitor.write("Adjust ")
- monitor.setBackgroundColour((colours.black))
- end
- steamOld = reactor.getHotFluidProducedLastTick()
- reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)-1)
- if monitor ~= "none" then
- monitor.setCursorPos(24,12)
- monitor.write("<")
- end
- snooze(10)
- steamNew = reactor.getHotFluidProducedLastTick()
- while steamNew > steamOld do
- print("boosting production initially")
- steamOld = reactor.getHotFluidProducedLastTick()
- reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)-5)
- snooze(5)
- steamNew = reactor.getHotFluidProducedLastTick()
- end
- snooze(20)
- if monitor ~= "none" then
- monitor.setCursorPos(24,12)
- monitor.write(" ")
- end
- while true do
- if monitor ~= "none" then
- monitor.setBackgroundColour((colours.green))
- monitor.setCursorPos(22,7)
- monitor.write("Control")
- monitor.setCursorPos(22,8)
- monitor.write(" Rod ")
- monitor.setCursorPos(22,9)
- monitor.write("Adjust ")
- monitor.setBackgroundColour((colours.black))
- end
- --Raise control rods until steam production lowers:
- steamOld = reactor.getHotFluidProducedLastTick()
- reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)+1)
- if monitor ~= "none" then
- monitor.setCursorPos(26,12)
- monitor.write(">")
- end
- snooze(20)
- steamNew = reactor.getHotFluidProducedLastTick()
- while steamNew == steamOld do
- steamOld1 = reactor.getHotFluidProducedLastTick()
- print("steamOld1:"..steamOld1)
- sleep(0.5)
- steamOld2 = reactor.getHotFluidProducedLastTick()
- print("steamOld2:"..steamOld2)
- if steamOld1 < steamOld2 and steamOld1 ~= 0 then
- steamOld = steamOld1
- else
- steamOld = steamOld2
- end
- reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)+1)
- snooze(20)
- steamNew = reactor.getHotFluidProducedLastTick()
- end
- if monitor ~= "none" then
- monitor.setCursorPos(26,12)
- monitor.write(" ")
- end
- --raise steam production again to the found limit
- while reactor.getHotFluidProducedLastTick() < (steamOld-2) do
- print("raise steam production to found limit:"..steamOld)
- reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)-1)
- if monitor ~= "none" then
- monitor.setCursorPos(24,12)
- monitor.write("<")
- end
- snooze(10)
- end
- if monitor ~= "none" then
- monitor.setCursorPos(24,12)
- monitor.write(" ")
- monitor.setBackgroundColour((colours.grey))
- monitor.setCursorPos(22,7)
- monitor.write("Control")
- monitor.setCursorPos(22,8)
- monitor.write(" Rod ")
- monitor.setCursorPos(22,9)
- monitor.write("Adjust ")
- monitor.setBackgroundColour((colours.black))
- end
- snooze(AdjustInterval)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement