Jabulba

ReactorControl2

Jan 22nd, 2016
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function tableSize(dictionary)
  2.     local size = 0
  3.     for _ in pairs(dictionary) do
  4.         size = size + 1
  5.     end
  6.     return(size)
  7. end
  8.  
  9. print("Starting reactor control")
  10. print("")
  11. print("Detecting connected reactors, turbines and capacitors...")
  12.  
  13. sleepTime = 30
  14. capacitorsFull = false
  15. systemActive = false
  16. triggeringCapacitorName = "none"
  17. capacitors = {}
  18. reactors = {}
  19. turbines = {}
  20. for _,connectedPeripheral in pairs(peripheral.getNames()) do
  21.     if string.sub(connectedPeripheral, 1, 12)  == "BigReactors-" then
  22.         local peripheralType = peripheral.getType(connectedPeripheral)
  23.        
  24.         if peripheralType == "BigReactors-Turbine" then
  25.             local peripheralName = string.sub(connectedPeripheral, 13)
  26.             write("Detected " .. peripheralName .. " ")
  27.             write("wrapping... ")
  28.             turbines[connectedPeripheral] = peripheral.wrap(connectedPeripheral)
  29.            
  30.             turbines[connectedPeripheral].setInductorEngaged(false)
  31.             if turbines[connectedPeripheral].getConnected() then
  32.                 print("done.")
  33.             else
  34.                 turbines[connectedPeripheral] = nil
  35.                 print("error.")
  36.                 sleep(1)
  37.             end
  38.         elseif peripheralType == "BigReactors-Reactor" then
  39.             local peripheralName = string.sub(connectedPeripheral, 13)
  40.             write("Detected " .. peripheralName .. " ")
  41.             write("wrapping... ")
  42.             reactors[connectedPeripheral] = peripheral.wrap(connectedPeripheral)
  43.            
  44.             reactors[connectedPeripheral].setActive(false)
  45.             if reactors[connectedPeripheral].getConnected() then
  46.                 print("done.")
  47.             else
  48.                 reactors[connectedPeripheral] = nil
  49.                 print("error.")
  50.                 sleep(1)
  51.             end
  52.         end
  53.     elseif string.sub(connectedPeripheral, 1, 14) == "capacitor_bank" or string.sub(connectedPeripheral, 1, 16) == "draconic_storage" then
  54.         local peripheralType = peripheral.getType(connectedPeripheral)
  55.        
  56.         if peripheralType == "capacitor_bank" or peripheralType == "draconic_storage" then
  57.             write("Detected " .. connectedPeripheral .. " ")
  58.             write("wrapping... ")
  59.             capacitors[connectedPeripheral] = peripheral.wrap(connectedPeripheral)
  60.            
  61.             if capacitors[connectedPeripheral].getEnergyStored() then
  62.                 print("done.")
  63.             end
  64.         end
  65.     end
  66. end
  67.  
  68. print("")
  69. print("Detected " .. tableSize(reactors) .. " reactors, " .. tableSize(turbines) .. " turbines and " .. tableSize(capacitors) .. " capacitors.")
  70. print("")
  71. print("Initializing reactor control AI...")
  72. print("AI started in deep sleep mode.")
  73. print("")
  74. while true do
  75.     capacitorsFull = true
  76.     for capacitorName,capacitor in pairs(capacitors) do
  77.         if capacitor.getEnergyStored()/capacitor.getMaxEnergyStored() < 0.95 then
  78.             capacitorsFull = false;
  79.             triggeringCapacitorName = capacitorName
  80.             break;
  81.         end
  82.     end
  83.    
  84.     if not capacitorsFull and not systemActive then
  85.         print("Waking from deep sleep.")
  86.         sleepTime = 1
  87.         systemActive = true
  88.         print(triggeringCapacitorName .. " is not full. Activating reactors...")
  89.         for _,reactor in pairs(reactors) do
  90.             reactor.setActive(true)
  91.         end
  92.        
  93.         print("Reactors activated. Giving time for the reactors to heat...")
  94.         sleep(5)
  95.         print("Engaging Inductors...")
  96.         for _,turbine in pairs(turbines) do
  97.             turbine.setInductorEngaged(true)
  98.         end
  99.        
  100.         print("Inductors engaged.")
  101.     elseif capacitorsFull and systemActive then
  102.         systemActive = false
  103.         print("All capacitors are full. Disengaging inductors...")
  104.         for _,turbine in pairs(turbines) do
  105.             turbine.setInductorEngaged(false)
  106.         end
  107.        
  108.         print("Inductors disengaged. Deactivating reactors...")
  109.         for _,reactor in pairs(reactors) do
  110.             reactor.setActive(false)
  111.         end
  112.        
  113.         print("Reactors deactivated.")
  114.         print("Entering deep sleep mode.")
  115.         sleepTime = 30
  116.     end
  117.     sleep(sleepTime)
  118. end
Advertisement
Add Comment
Please, Sign In to add comment