Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function round(num)
- under = math.floor(num)
- upper = math.floor(num) + 1
- underV = -(under - num)
- upperV = upper - num
- if (upperV > underV) then
- return under
- else
- return upper
- end
- end
- function say(msg)
- if(chatboxenabled) then
- chatbox.say("Reactor ID"..os.getComputerID()..": "..msg)
- end
- end
- print("CC Reactor Controller")
- print("by Mat Programming Co")
- print("http://matprogramming.com/")
- maxcap = 0
- f = fs.open("maxcap", "r")
- if f ~= nil then
- maxcap = f.readLine()
- f.close()
- print("Maxcap read as "..maxcap)
- end
- timer = 30
- chatboxenabled = false
- peripheral.isPresent("back")
- print("Peripheral detected on back")
- reactor = peripheral.wrap("back")
- if reactor.getConnected() then
- print("Connected to valid mutiblock reactor")
- else
- print("Failed; invalid reactor")
- end
- if peripheral.isPresent("left") then
- print("Peripheral detected on left")
- print("Assuming peripheral is Chat Box. If not, please move the block to avoid crash")
- chatboxenabled = true
- chatbox = peripheral.wrap("left")
- else
- print("No peripheral on left, using basic mode")
- end
- sleep(1)
- quit = false
- active = "Deactivated"
- auto = false
- if chatboxenabled then
- chatbox.say("Reactor Controller has successfully booted!")
- end
- eg1 = 0
- eg2 = 0
- eg3 = 0
- eg4 = 0
- eg5 = 0
- avgeg = 0
- i = 0
- while quit==false do
- i = i + 1
- timer = timer - 1
- if reactor.getActive() then
- term.setTextColor(colors.green)
- active = "Activated"
- else
- term.setTextColor(colors.red)
- active = "Deactivated"
- end
- print(active)
- if i%20 == 0 then
- eg5 = eg4
- eg4 = eg3
- eg3 = eg2
- eg2 = eg1
- eg1 = reactor.getEnergyProducedLastTick()
- avgeg = (eg1+eg2+eg3+eg4+eg5)/5
- end
- fullness = reactor.getEnergyStored()/10000000
- fullness = fullness * 100
- term.setTextColor(colors.blue)
- numofbarsofenergy = reactor.getEnergyStored()/200000
- barsofenergy = ""
- while numofbarsofenergy > 0 do
- barsofenergy = barsofenergy.."|"
- numofbarsofenergy = numofbarsofenergy - 1
- end
- numofbarsofnotenergy = 50-(reactor.getEnergyStored()/200000)
- while numofbarsofnotenergy > 0 do
- barsofenergy = barsofenergy.."="
- numofbarsofnotenergy = numofbarsofnotenergy - 1
- end
- print("Rod insertion level: "..reactor.getControlRodLevel(0))
- if maxcap ~= 0 then
- print("Max energy production: "..maxcap)
- end
- print("Average energy production: "..avgeg)
- print("Energy: ("..round(fullness).."%)"..barsofenergy)
- term.setTextColor(colors.white)
- if auto == false then
- print("Cmds: quit, activate, deactivate, auto, resetrods")
- write(">>>")
- cmd = read()
- say("Command entered: "..cmd)
- term.clear()
- if cmd == "activate" then
- reactor.setActive(true)
- elseif cmd == "deactivate" then
- reactor.setActive(false)
- elseif cmd == "auto" then
- auto = true
- elseif cmd == "" then
- donothing = true
- elseif cmd == "quit" then
- print("Quitted")
- say("Quitted")
- error()
- elseif cmd == "resetrods" then
- reactor.setAllControlRodLevels(0)
- elseif cmd == "benchmark" or avgeg > maxcap then
- print("Starting benchmark...")
- say("Average energy production higher then maximum recorded capacity; recalibrating")
- reactor.setAllControlRodLevels(0)
- reactor.setActive(true)
- print("Waiting 20s to reach max capacity...")
- os.sleep(10)
- print("10s...")
- os.sleep(10)
- maxcap = reactor.getEnergyProducedLastTick()
- f = fs.open("maxcap", "w")
- f.writeLine(maxcap)
- f.close()
- say("Recalibration completed")
- else
- print("Unknown command")
- end
- else
- print("Auto mode active...")
- if reactor.getEnergyStored()<8000000 then --9 million
- reactor.setActive(true)
- else
- reactor.setActive(false)
- end
- if(round(fullness)>75) then
- reactor.setAllControlRodLevels(100)
- else
- reactor.setAllControlRodLevels(round(fullness)*1.5)
- end
- sleep(0.2)
- shell.run("clear")
- end
- if(timer<0) then
- if(auto==true) then
- print("Talking about reactor!")
- say("[Reactor] Energy: "..tostring(fullness).."% Production: "..tostring(math.floor(avgeg)).."/"..tostring(math.floor(maxcap)).." (Avg/Max) ("..tostring(math.floor((avgeg/maxcap)*100)).."%)")
- timer = 100
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment