Advertisement
Guest User

Reactors

a guest
Apr 21st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.59 KB | None | 0 0
  1. local reactor = nil
  2. local maxEnergyStored = 10000000
  3. local curControlRod = 0
  4. local waitingTicks = 4
  5. local curWaitingTicks = 0
  6. local energyOffset = 50
  7.  
  8. local function changeControlRodLevel(change)
  9.   local nextRod = 0
  10.   if change ~= 0 then nextRod = 1 end
  11.   curControlRod = (curControlRod+nextRod) % reactor.getNumberOfControlRods()
  12.   local curControlRodLevel = reactor.getControlRodLevel(curControlRod)
  13.   local potentialLevel = curControlRodLevel + change
  14.   if potentialLevel > 100 then
  15.     potentialLevel = 100
  16.   elseif potentialLevel < 0 then
  17.     potentialLevel = 0
  18.   end
  19.   reactor.setControlRodLevel(curControlRod, potentialLevel)
  20.  
  21.   --if change > 0 and curControlRodLevel < 100 then
  22.     --local potentialLevel = curControlRodLevel + change
  23.     --reactor.setControlRodLevel()
  24.   --elseif change < 0 and curControlRodLevel > 0) then
  25.     --reactor.setControlRodLevel(curControlRod, curControlRodLevel + change)
  26.   --end
  27. end
  28.  
  29. local function regulateReactor()
  30.   local curEnergyStored = reactor.getEnergyStored()
  31.   print("Current energy: ",curEnergyStored," RF")
  32.   if curEnergyStored >= maxEnergyStored then
  33.     reactor.setActive(false)
  34.     print("Reactor off")
  35.   else
  36.     reactor.setActive(true)
  37.     local curEnergyProduced = reactor.getEnergyProducedLastTick()
  38.     print("Reactor energy production: ",curEnergyProduced," RF/t")
  39.     local curEnergyMissing = maxEnergyStored - curEnergyStored
  40.     if curWaitingTicks == 0 then
  41.       if curEnergyMissing > 0 then
  42.         local change = 0
  43.         local wantedEnergyProduction = curEnergyMissing + energyOffset
  44.         if wantedEnergyProduction < curEnergyProduced then
  45.           change = math.ceil((curEnergyProduced - wantedEnergyProduction) / 200)
  46.           print("Decreasing energy production")
  47.         else
  48.           change = math.floor((curEnergyProduced - wantedEnergyProduction) / 200)
  49.           print("Increasing energy production")
  50.         end
  51.         changeControlRodLevel(change)
  52.       end
  53.     end
  54.     curWaitingTicks = (curWaitingTicks+1)%waitingTicks
  55.   end
  56. end
  57.  
  58. local function getReactor()
  59.   local r = peripheral.find("BigReactors-Reactor")
  60.   if r == nil then
  61.     print("Reactor not detected")
  62.   else
  63.     write("Reactor found")
  64.     if r.getConnected() == true then
  65.       print("and connected")
  66.     else
  67.       print("but not connected")
  68.     end
  69.   end
  70.   return r
  71. end
  72.  
  73. while true do
  74.   term.clear()
  75.   term.setCursorPos(0,0)
  76.   reactor = getReactor()
  77.   if reactor ~= nil then
  78.     print("Energy missing: ",maxEnergyStored - reactor.getEnergyStored(), " RF")
  79.     regulateReactor()
  80.   end
  81.   reactor = nil
  82.   os.sleep(0.05)
  83. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement