Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --ComputerCraft BigReactors Serveur by Teki
- local isReactor = false
- local isTurbine = false
- local isModem = false
- local reactor
- local turbine
- local peripherals = peripheral.getNames()
- for i=1, #peripherals do
- if peripheral.getType(peripherals[i]) == "BigReactors-Reactor" then
- reactor = peripheral.wrap(peripherals[i])
- isReactor = true
- elseif peripheral.getType(peripherals[i]) == "BigReactors-Turbine" then
- turbine = peripheral.wrap(peripherals[i])
- isTurbine = true
- elseif peripheral.getType(peripherals[i]) == "modem" then
- rednet.open(peripherals[i])
- isModem = true
- end
- end
- local reponse = ""
- local autoStart = false
- local curTime
- local hours
- local minutes
- local finalTime
- local function formatTime()
- curTime = os.time()
- hours = math.floor(curTime)
- minutes = math.floor((curTime - hours)*60)
- return string.format("%02d:%02d", hours, minutes)
- end
- local function split(str, delim, maxNb)
- -- Eliminate bad cases...
- if string.find(str, delim) == nil then
- return { str }
- end
- if maxNb == nil or maxNb < 1 then
- maxNb = 0 -- No limit
- end
- local result = {}
- local pat = "(.-)" .. delim .. "()"
- local nb = 0
- local lastPos
- for part, pos in string.gmatch(str, pat) do
- nb = nb + 1
- result[nb] = part
- lastPos = pos
- if nb == maxNb then break end
- end
- -- Handle the last field
- if nb ~= maxNb then
- result[nb + 1] = string.sub(str, lastPos)
- end
- return result
- end
- local function reactorListen()
- id, msg = rednet.receive("CCBRClient", 5)
- if (msg == "getConnected") then -- Is the computer connected ?
- reponse = reactor.getConnected()
- elseif (msg == "getAll") then -- Is the computer connected ?
- if reactor.getConnected() then
- --[[
- reponse = {reactor.getConnected(), reactor.getActive(), reactor.getNumberOfControlRods(),
- reactor.getEnergyStored(), reactor.getEnergyCapacity(), reactor.getFuelTemperature(), reactor.getCasingTemperature(),
- reactor.getFuelAmount(), reactor.getWasteAmount(), reactor.getFuelAmountMax(), reactor.getEnergyProducedLastTick(),
- reactor.getHotFluidProducedLastTick(), reactor.getCoolantType(), reactor.getCoolantAmount(), reactor.getHotFluidAmountMax(),
- reactor.getFuelReactivity(), reactor.getFuelConsumedLastTick(), reactor.isActivelyCooled(), reactor.getMinimumCoordinate(),
- reactor.getMaximumCoordinate(), reactor.getHotFluidAmountMax(), autoStart}
- for i = 0, reactor.getNumberOfControlRods()-1 do
- reponse[#reponse+1] = reactor.getControlRodLevel(i)
- end
- for i = 0, reactor.getNumberOfControlRods()-1 do
- reponse[#reponse+1] = reactor.getControlRodName(i)
- end
- ]]--
- reponse = {}
- reponse.getConnected = reactor.getConnected()
- reponse.getActive = reactor.getActive()
- reponse.getNumberOfControlRods = reactor.getNumberOfControlRods()
- reponse.getEnergyStored = reactor.getEnergyStored()
- if reactor.getEnergyCapacity ~= nil then
- reponse.getEnergyCapacity = reactor.getEnergyCapacity()
- else
- reponse.getEnergyCapacity = 10000000
- end
- reponse.getFuelTemperature = reactor.getFuelTemperature()
- reponse.getCasingTemperature = reactor.getCasingTemperature()
- reponse.getFuelAmount = reactor.getFuelAmount()
- reponse.getWasteAmount = reactor.getWasteAmount()
- reponse.getFuelAmountMax = reactor.getFuelAmountMax()
- reponse.getEnergyProducedLastTick = reactor.getEnergyProducedLastTick()
- reponse.getHotFluidAmount = reactor.getHotFluidAmount()
- reponse.getHotFluidAmountMax = reactor.getHotFluidAmountMax()
- reponse.getHotFluidProducedLastTick = reactor.getHotFluidProducedLastTick()
- reponse.getCoolantType = reactor.getCoolantType()
- reponse.getCoolantAmount = reactor.getCoolantAmount()
- reponse.getFuelReactivity = reactor.getFuelReactivity()
- reponse.getFuelConsumedLastTick = reactor.getFuelConsumedLastTick()
- reponse.isActivelyCooled = reactor.isActivelyCooled()
- reponse.getMinimumCoordinate = reactor.getMinimumCoordinate()
- reponse.getMaximumCoordinate = reactor.getMaximumCoordinate()
- reponse.autoStart = autoStart
- for i = 0, reponse.getNumberOfControlRods-1 do
- reponse[i] = reactor.getControlRodLevel(i)
- end
- for i = 0, reponse.getNumberOfControlRods-1 do
- reponse[reponse.getNumberOfControlRods + i] = reactor.getControlRodName(i)
- end
- end
- elseif (msg == "getActive") then -- Is Reactor Active ?
- reponse = reactor.getActive()
- elseif (msg == "doEjectWaste") then -- Do Eject Waste
- reactor.doEjectWaste()
- elseif (msg == "doEjectFuel") then -- Do Eject Fuel
- reactor.doEjectFuel()
- elseif msg ~= nil then
- local command = split(msg, "%s", 3)
- if (command[1] == "setAutoStart") then -- Set AutoStart (true/false)
- if (command[2] == "true") then
- autoStart = true
- else
- autoStart = false
- end
- elseif (command[1] == "getControlRodName") then -- Get Control Rod Name (rod id)
- reponse = reactor.getControlRodName(tonumber(command[2]))
- elseif (command[1] == "getControlRodLevel") then -- GetControlRodLevel (rod id)
- reponse = reactor.getControlRodLevel(tonumber(command[2]))
- elseif (command[1] == "setActive") then -- Set Active (true/false)
- local cmd = false
- if (command[2] == "true") then
- cmd = true
- end
- reactor.setActive(cmd)
- elseif (command[1] == "setAllControlRodLevels") then -- Set All Control Rod Levels (level)
- level = tonumber(command[2])
- if level < 0 then level = 0 end
- if level > 100 then level = 100 end
- reactor.setAllControlRodLevels(level)
- elseif (command[1] == "setControlRodLevel") then -- Set Control Rod Level (rod id - level)
- level = tonumber(command[3])
- if level < 0 then level = 0 end
- if level > 100 then level = 100 end
- reactor.setControlRodLevel(tonumber(command[2]), level)
- end
- end
- if msg == "getConnected" or msg == "setAutoStart" or msg == "setActive true" or msg == "setActive false" then
- -- if msg ~= nil then
- finalTime = formatTime()
- print(finalTime .. " [CCBRClient] " .. msg .. " from " .. id)
- end
- if id ~= nil then
- -- sleep(0)
- rednet.send(id, reponse, "CCBRServeur")
- end
- end
- local function turbineListen()
- id, msg = rednet.receive("CCBTClient", 5)
- if (msg == "getConnected") then -- Is the computer connected ?
- reponse = turbine.getConnected()
- elseif (msg == "getAll") then -- Is the computer connected ?
- if turbine.getConnected() then
- -- reponse = {turbine.getConnected(), turbine.getActive(),
- -- turbine.getEnergyStored(), turbine.getRotorSpeed(), turbine.getInputAmount(), turbine.getInputType(),
- -- turbine.getOutputAmount(), turbine.getOutputType(), turbine.getFluidAmountMax(), turbine.getFluidFlowRate(),
- -- turbine.getFluidFlowRateMax(), turbine.getFluidFlowRateMaxMax(), turbine.getEnergyProducedLastTick(), turbine.getNumberOfBlades(),
- -- turbine.getBladeEfficiency(), turbine.getRotorMass(), turbine.getInductorEngaged(), turbine.getMaximumCoordinate(),
- -- turbine.getMinimumCoordinate(), autoStart}
- reponse = {}
- reponse.getConnected = turbine.getConnected()
- reponse.getActive = turbine.getActive()
- reponse.getEnergyStored = turbine.getEnergyStored()
- if turbine.getEnergyCapacity ~= nil then
- reponse.getEnergyCapacity = turbine.getEnergyCapacity()
- else
- reponse.getEnergyCapacity = 1000000
- end
- reponse.getRotorSpeed = turbine.getRotorSpeed()
- reponse.getInputAmount = turbine.getInputAmount()
- reponse.getInputType = turbine.getInputType()
- reponse.getOutputAmount = turbine.getOutputAmount()
- reponse.getOutputType = turbine.getOutputType()
- reponse.getFluidAmountMax = turbine.getFluidAmountMax()
- reponse.getFluidFlowRate = turbine.getFluidFlowRate()
- reponse.getFluidFlowRateMax = turbine.getFluidFlowRateMax()
- reponse.getFluidFlowRateMaxMax = turbine.getFluidFlowRateMaxMax()
- reponse.getEnergyProducedLastTick = turbine.getEnergyProducedLastTick()
- reponse.getNumberOfBlades = turbine.getNumberOfBlades()
- reponse.getBladeEfficiency = turbine.getBladeEfficiency()
- reponse.getRotorMass = turbine.getRotorMass()
- reponse.getInductorEngaged = turbine.getInductorEngaged()
- reponse.getMaximumCoordinate = turbine.getMaximumCoordinate()
- reponse.getMinimumCoordinate = turbine.getMinimumCoordinate()
- reponse.autoStart = autoStart
- end
- elseif (msg == "getActive") then -- Is Reactor Active ?
- reponse = turbine.getActive()
- elseif (msg == "setVentNone") then -- Set Vent None
- turbine.setVentNone()
- elseif (msg == "setVentOverflow") then -- Set Vent Overflow
- turbine.setVentOverflow()
- elseif (msg == "setVentAll") then -- Set Vent All
- turbine.setVentAll()
- elseif msg ~= nil then
- local command = split(msg, "%s", 3)
- if (command[1] == "setAutoStart") then -- Set AutoStart (true/false)
- if (command[2] == "true") then
- autoStart = true
- else
- autoStart = false
- end
- elseif (command[1] == "setActive") then -- Set Active (true/false)
- local cmd = false
- if (command[2] == "true") then
- cmd = true
- end
- turbine.setActive(cmd)
- elseif (command[1] == "setInductorEngaged") then -- Set Inductor Engaged (true/false)
- local cmd = false
- if (command[2] == "true") then
- cmd = true
- end
- turbine.setInductorEngaged(cmd)
- elseif (command[1] == "setFluidFlowRateMax") then -- Set Fluid Flow Rate Max (level)
- level = tonumber(command[2])
- if level < 0 then level = 0 end
- if level > 2000 then level = 2000 end
- turbine.setFluidFlowRateMax(level)
- end
- end
- if msg == "getConnected" or msg == "setAutoStart" or msg == "setActive true" or msg == "setInductorEngaged false" or msg == "setInductorEngaged true" or msg == "setActive false" then
- finalTime = formatTime()
- print(finalTime .. " [CCBTClient] " .. msg .. " from " .. id)
- end
- if id ~= nil then
- rednet.send(id, reponse, "CCBTServeur")
- end
- end
- local function watcher()
- while true do
- finalTime = formatTime()
- if autoStart then
- if isTurbine and isReactor then
- if turbine.getActive() == true and turbine.getInductorEngaged() == false and turbine.getRotorSpeed() >= 1805 then
- turbine.setInductorEngaged(true)
- print(finalTime .. " [AUTO] Inductor engaged")
- elseif turbine.getActive() == true and turbine.getInductorEngaged() == true and turbine.getRotorSpeed() <= 1795 then
- turbine.setInductorEngaged(false)
- print(finalTime .. " [AUTO] Inductor disengaged")
- end
- if turbine.getActive() == false and turbine.getEnergyStored() <= 150000 then
- turbine.setActive(true)
- print(finalTime .. " [AUTO] Turbine enabled")
- elseif (turbine.getActive() == true or turbine.getInductorEngaged()) and turbine.getEnergyStored() >= 950000 then
- if turbine.getActive() == true then
- turbine.setActive(false)
- print(finalTime .. " [AUTO] Turbine disabled")
- end
- if turbine.getInductorEngaged() then
- turbine.setInductorEngaged(false)
- print(finalTime .. " [AUTO] Inductor disengaged")
- end
- end
- if turbine.getActive() == true and reactor.getActive() == false then
- reactor.setActive(true)
- print(finalTime .. " [AUTO] Turbine is active, Reactor enabled.")
- elseif turbine.getActive() == false and reactor.getActive() == true then
- reactor.setActive(false)
- print(finalTime .. " [AUTO] Turbine is inactive, Reactor disabled.")
- end
- elseif isReactor then
- if reactor.isActivelyCooled() == false then
- if reactor.getActive() == false and reactor.getEnergyStored() <= 150000 then
- reactor.setActive(true)
- print(finalTime .. " [AUTO] Reactor enabled")
- elseif reactor.getActive() == true and reactor.getEnergyStored() >= 9000000 then
- reactor.setActive(false)
- print(finalTime .. " [AUTO] Reactor disabled")
- end
- end
- end
- end
- sleep(1)
- end
- end
- while true do
- if isTurbine and isReactor and isModem then
- parallel.waitForAny(turbineListen, reactorListen, watcher)
- elseif isTurbine and isModem then
- parallel.waitForAny(turbineListen, watcher)
- elseif isReactor and isModem then
- parallel.waitForAny(reactorListen, watcher)
- end
- -- sleep(0)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement