Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- print("Reactor Control Client booting up")
- print("Searching for connected reactors...")
- --Get a list of connected periphs
- periphs = peripheral.getNames()
- --Now figure out which one is a reactor
- reactorCount = 0;
- reactorName = "";
- for i,v in ipairs(periphs) do
- if peripheral.getType(v) == "BigReactors-Reactor" then
- reactorCount = reactorCount + 1
- reactorName = v
- end
- end
- --Error if there or 0 or >=2 reactors
- if reactorCount == 0 then
- print("No reactors found. If you're using a wired cable, make sure to turn on the modem by right-clicking!")
- error()
- elseif reactorCount >= 2 then
- print("More than one reactor found. Are you using multiple computer ports?")
- error()
- end
- print("Found reactor '"..reactorName.."'! Initializing...")
- --Begin initializing everything. This is where the cool stuff happens.
- --These will be updated every second or so and be displayed onscreen.
- reactor = peripheral.wrap(reactorName)
- reactorActive = false
- reactorFuelTemp = 0
- reactorCasingTemp = 0
- reactorEnergy = 0
- reactorFuelAmount = 0
- reactorWasteAmount = 0
- reactorEnergyProduced = 0
- --These will only change when the user specifies them to, or when a user-specified condition is met.
- manualOff = false
- maxCaseTemp = 2000
- minCaseTemp = 1000
- caseTempEnabled = true
- cooling = false
- maxEnergy = 1
- minEnergy = 0
- tooMuchPower = false
- lowPower = false
- energyEnabled = true
- minFuelAmount = 0.0
- fuelEnabled = true
- lowFuel = false
- --Detect if the config file exists, and load it if so.
- if fs.exists("RCC.cfg") then
- print("Config file found! Loading...")
- config = fs.open("RCC.cfg", 'r')
- maxCaseTemp = tonumber(config.readLine())
- minCaseTemp = tonumber(config.readLine())
- if config.readLine() == "true" then caseTempEnabled = true else caseTempEnabled = false end
- maxEnergy = tonumber(config.readLine())
- minEnergy = tonumber(config.readLine())
- if config.readLine() == "true" then energyEnabled = true else energyEnabled = false end
- minFuelAmount = tonumber(config.readLine())
- if config.readLine() == "true" then fuelEnabled = true else fuelEnabled = false end
- config.close()
- end
- --Misc variables
- consoleContent = {"","","","","","","","","","","",""}
- commandContent = ""
- exitFinal = false
- --Function to round numbers, I know there's already one but shhhh
- function round(x)
- return math.floor(x+0.5)
- end
- --Function to handle drawing the screen/updating vars
- function draw()
- reactorActive = reactor.getActive()
- reactorFuelTemp = reactor.getFuelTemperature()
- reactorCasingTemp = reactor.getCasingTemperature()
- reactorEnergy = reactor.getEnergyStored()
- reactorEnergyProduced = reactor.getEnergyProducedLastTick()
- reactorFuelAmount = reactor.getFuelAmount()/reactor.getFuelAmountMax()
- reactorWasteAmount = reactor.getWasteAmount()/reactor.getFuelAmountMax()
- --Now draw this data onscreen, with the console
- term.clear()
- term.setCursorPos(1,1)
- if reactorActive then write("REACTOR ONLINE") else write("REACTOR OFFLINE") end
- if manualOff then print(" (Manual shutoff)") elseif cooling then print(" (Cooling)") elseif lowFuel then print(" (Low fuel!)") elseif tooMuchEnergy then print(" (Energy buffer maxed out)") elseif lowEnergy then print(" (Low energy!)") else print() end
- print("Fuel Temperature: "..round(reactorFuelTemp))
- print("Case Temperature: "..round(reactorCasingTemp))
- print("Energy Buffer: "..round(100*(reactorEnergy/10000000)).."% ("..round(reactorEnergyProduced).."RF/T)")
- print("Fuel Amount: "..round(100*reactorFuelAmount).."% ("..round(100*reactorWasteAmount).."% waste)")
- print(" --- ")
- for i,v in ipairs(consoleContent) do
- write(v)
- print()
- end
- write(" $"..commandContent)
- term.setCursorBlink(true)
- end
- --Function to handle logging to console
- function log(s)
- for i,v in ipairs(consoleContent) do
- if i>0 then
- consoleContent[i-1] = consoleContent[i]
- end
- end
- consoleContent[12] = s
- end
- log("Type $help for help with commands.")
- --Function to handle commands
- function command(s)
- exitEntered = false
- cArgs = {}
- for word in s:gmatch("%S+") do table.insert(cArgs, word) end
- if cArgs[1] == nil then return end
- if string.lower(cArgs[1]) == "help" then
- if cArgs[2] == "1" or cArgs[2] == nil then
- log("Help page 1")
- log(" $help <page> - Display this message")
- log(" $exit - Invoke twice to terminate")
- log(" $power [on:off] - Manually shut the reactor off")
- log("or power it back on again.")
- log(" $ejectwaste - Manually eject waste.")
- log(" $casetemp [[min:max] <temp>:disable] - Set the")
- log("minimum/maximum case temp, or disable it entirely.")
- elseif cArgs[2] == "2" then
- log("Help page 2")
- log(" $energy [[min:max] <amount>:disable] - Set the")
- log("min/max energy amount, or disable it entirely.")
- log(" $saveconfig - Save settings to a config file.")
- else
- log("Usage: $help <page>")
- end
- elseif string.lower(cArgs[1]) == "ejectwaste" then
- log("Waste cyanite manually ejected.")
- reactor.doEjectWaste()
- elseif string.lower(cArgs[1]) == "power" then
- if cArgs[2] == nil then
- log("Usage: $power [on:off]")
- else
- if string.lower(cArgs[2]) == "on" then
- reactor.setActive(true)
- log("Reactor manually powered on.")
- manualOff = false
- elseif string.lower(cArgs[2]) == "off" then
- reactor.setActive(false)
- log("Reactor manually shut off, use $power on to revert")
- manualOff = true
- else
- log("Usage: $power [on:off]")
- end
- end
- elseif string.lower(cArgs[1]) == "casetemp" then
- if cArgs[2] == nil then
- log("Usage: $casetemp [[min:max] <temp>:disable]")
- else
- if string.lower(cArgs[2]) == "min" then
- if tonumber(cArgs[3]) == nil then
- log("Usage: $casetemp min <temp>")
- else
- if tonumber(cArgs[3])>0 and tonumber(cArgs[3])<=10000 then
- if tonumber(cArgs[3]) >= maxCaseTemp then
- log("Min case temp must be lower than max case temp!")
- else
- minCaseTemp = tonumber(cArgs[3])
- log("Minimum case temp now "..minCaseTemp..".")
- if not caseTempEnabled then
- log("Case temp now enabled.")
- caseTempEnabled = true
- end
- end
- else
- log("Entered number must be between 0 and 10000.")
- end
- end
- elseif string.lower(cArgs[2]) == "max" then
- if tonumber(cArgs[3]) == nil then
- log("Usage: $casetemp max <temp>")
- else
- if tonumber(cArgs[3])>0 and tonumber(cArgs[3])<=10000 then
- if tonumber(cArgs[3]) <= minCaseTemp then
- log("Max case temp must be higher than min case temp!")
- else
- maxCaseTemp = tonumber(cArgs[3])
- log("Maximum case temp now "..maxCaseTemp..".")
- if not caseTempEnabled then
- log("Case temp now enabled.")
- caseTempEnabled = true
- end
- end
- else
- log("Entered number must be between 0 and 10000.")
- end
- end
- elseif string.lower(cArgs[2]) == "disable" then
- caseTempEnabled = false
- log("Case temp now disabled.")
- log("Set the min/max case temp again to enable.")
- else
- log("Usage: $casetemp [[min:max] <temp>:[enable:disable]]")
- end
- end
- elseif string.lower(cArgs[1]) == "fuel" then
- if cArgs[2] == nil then
- log("Usage: $fuel [min <amount>:disable]")
- else
- if string.lower(cArgs[2]) == "min" then
- if tonumber(cArgs[3]) == nil then
- log("Usage: $fuel min <amount>")
- else
- if tonumber(cArgs[3]) >= 0 and tonumber(cArgs[3]) <= 100 then
- log("Min fuel amount set to "..tonumber(cArgs[3]).."%.")
- minFuelAmount = tonumber(cArgs[3])/100
- if not fuelEnabled then
- fuelEnabled = true
- log("Fuel amount now enabled.")
- end
- else
- log("Specified number must be between 0 and 100.")
- end
- end
- elseif string.lower(cArgs[2]) == "disable" then
- log("Fuel amount now disabled.")
- log("Set the min fuel amount again to enable.")
- fuelEnabled = false
- else
- log("Usage: fuel [min <amount:disable]")
- end
- end
- elseif string.lower(cArgs[1]) == "energy" then
- if cArgs[2] == nil then
- log("Usage: $energy [[min:max] <amount>:disable]")
- else
- if string.lower(cArgs[2]) == "min" then
- if tonumber(cArgs[3]) == nil then
- log("Usage: $energy min <amount>")
- else
- if tonumber(cArgs[3]) >= 0 and tonumber(cArgs[3]) <= 100 then
- if tonumber(cArgs[3])/100 >= maxEnergy then
- log("Min buffer must be lower than max buffer!")
- else
- minEnergy = tonumber(cArgs[3])/100
- log("Min energy buffer set to "..tonumber(cArgs[3]).."%.")
- if not energyEnabled then
- energyEnabled = true
- log("Energy buffer now enabled.")
- end
- end
- else
- log("The specified number must be between 0 and 100.")
- end
- end
- elseif string.lower(cArgs[2]) == "max" then
- if tonumber(cArgs[3]) == nil then
- log("Usage: $energy max <amount>")
- else
- if tonumber(cArgs[3]) >= 0 and tonumber(cArgs[3]) <= 100 then
- if tonumber(cArgs[3])/100 <= minEnergy then
- log("Max buffer must be higher than min buffer!")
- else
- maxEnergy = tonumber(cArgs[3])/100
- log("Max energy buffer set to "..tonumber(cArgs[3]).."%.")
- if not energyEnabled then
- energyEnabled = true
- log("Energy buffer now enabled.")
- end
- end
- else
- log("The specified number must be between 0 and 100.")
- end
- end
- elseif string.lower(cArgs[2]) == "disable" then
- energyEnabled = false
- log("Energy buffer now disabled.")
- log("Set the min/max energy buffer again to enable.")
- else
- log("Usage: $energy [[min:max] <amount>:disable]")
- end
- end
- elseif string.lower(cArgs[1]) == "saveconfig" then
- log("Saving settings...")
- config = fs.open("RCC.cfg", "w")
- config.writeLine(maxCaseTemp)
- config.writeLine(minCaseTemp)
- if caseTempEnabled then config.writeLine("true") else config.writeLine("false") end
- config.writeLine(maxEnergy)
- config.writeLine(minEnergy)
- if energyEnabled then config.writeLine("true") else config.writeLine("false") end
- config.writeLine(minFuelAmount)
- if fuelEnabled then config.writeLine("true") else config.writeLine("false") end
- config.close()
- log("Settings saved!")
- elseif string.lower(cArgs[1]) == "exit" then
- exitEntered = true
- if exitFinal then
- term.clear()
- term.setCursorPos(1,1)
- error()
- end
- exitFinal = true
- log("Are you sure? Type $exit again to confirm.")
- log("WARNING: THIS WILL NOT SHUT OFF THE REACTOR.")
- else
- log("Unrecognized command. Type $help for help.")
- end
- if not exitEntered then exitFinal = false end
- end
- --Function to do everything else
- function monitor()
- while true do
- os.startTimer(1)
- draw()
- event, param1 = os.pullEvent()
- if event == "key" then
- if param1 == 14 then
- commandContent = string.sub(commandContent, 0, -2)
- elseif param1 == 28 then
- log(" $"..commandContent)
- command(commandContent)
- commandContent = "";
- end
- elseif event == "char" then
- commandContent = commandContent..param1
- end
- if not manualOff then
- if caseTempEnabled then
- if cooling then
- if reactorCasingTemp <= minCaseTemp then
- cooling = false
- reactor.setActive(true)
- log("Reactor cooled.")
- end
- else
- if reactorCasingTemp >= maxCaseTemp then
- cooling = true
- reactor.setActive(false)
- log("Reactor overheating! Cooling...")
- end
- end
- else
- cooling = false
- end
- if fuelEnabled then
- if lowFuel then
- if reactorFuelAmount >= minFuelAmount then
- lowFuel = false
- reactor.setActive(true)
- log("Reactor refuelled.")
- end
- else
- if reactorFuelAmount < minFuelAmount then
- lowFuel = true
- reactor.setActive(false)
- log("Low fuel! Place some into an access port!")
- end
- end
- end
- if energyEnabled then
- if lowEnergy then
- if reactorEnergy/10000000 >= minEnergy then
- lowEnergy = false
- log("Energy requirements met.")
- end
- else
- if reactorEnergy/10000000 < minEnergy then
- lowEnergy = true
- log("Low energy!")
- reactor.setActive(true)
- end
- end
- if tooMuchEnergy then
- if reactorEnergy/10000000 <= maxEnergy then
- tooMuchEnergy = false
- log("Energy buffer no longer maxed out.")
- reactor.setActive(true)
- end
- else
- if reactorEnergy/10000000 > maxEnergy then
- tooMuchEnergy = true
- log("Energy buffer maxed out!")
- reactor.setActive(false)
- end
- end
- end
- end
- end
- end
- --Now actually start the program!
- monitor()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement