MatthewGB

CC Reactor Controller

Jan 31st, 2015
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.21 KB | None | 0 0
  1. function round(num)
  2.     under = math.floor(num)
  3.     upper = math.floor(num) + 1
  4.     underV = -(under - num)
  5.     upperV = upper - num
  6.     if (upperV > underV) then
  7.         return under
  8.     else
  9.         return upper
  10.     end
  11. end
  12.  
  13. function say(msg)
  14.  if(chatboxenabled) then
  15.   chatbox.say("Reactor ID"..os.getComputerID()..": "..msg)
  16.  end
  17. end
  18.  
  19. print("CC Reactor Controller")
  20. print("by Mat Programming Co")
  21. print("http://matprogramming.com/")
  22. maxcap = 0
  23.  
  24. f = fs.open("maxcap", "r")
  25. if f ~= nil then
  26.  maxcap = f.readLine()
  27.  f.close()
  28.  print("Maxcap read as "..maxcap)
  29. end
  30.  
  31. timer = 30
  32. chatboxenabled = false
  33.  
  34. peripheral.isPresent("back")
  35. print("Peripheral detected on back")
  36. reactor = peripheral.wrap("back")
  37. if reactor.getConnected() then
  38.  print("Connected to valid mutiblock reactor")
  39. else
  40.  print("Failed; invalid reactor")
  41. end
  42.  
  43. if peripheral.isPresent("left") then
  44.  print("Peripheral detected on left")
  45.  print("Assuming peripheral is Chat Box. If not, please move the block to avoid crash")
  46.  chatboxenabled = true
  47.  chatbox = peripheral.wrap("left")
  48. else
  49.  print("No peripheral on left, using basic mode")
  50. end
  51. sleep(1)
  52. quit = false
  53. active = "Deactivated"
  54. auto = false
  55.  
  56. if chatboxenabled then
  57.  chatbox.say("Reactor Controller has successfully booted!")
  58. end
  59.  
  60. eg1 = 0
  61. eg2 = 0
  62. eg3 = 0
  63. eg4 = 0
  64. eg5 = 0
  65. avgeg = 0
  66. i = 0
  67. while quit==false do
  68.  i = i + 1
  69.  timer = timer - 1
  70.  if reactor.getActive() then
  71.   term.setTextColor(colors.green)
  72.   active = "Activated"
  73.  else
  74.   term.setTextColor(colors.red)
  75.   active = "Deactivated"
  76.  end
  77.  print(active)
  78.  
  79.  if i%20 == 0 then
  80.   eg5 = eg4
  81.   eg4 = eg3
  82.   eg3 = eg2
  83.   eg2 = eg1
  84.   eg1 = reactor.getEnergyProducedLastTick()
  85.   avgeg = (eg1+eg2+eg3+eg4+eg5)/5
  86.  end
  87.  
  88.  fullness = reactor.getEnergyStored()/10000000
  89.  fullness = fullness * 100
  90.  
  91.  term.setTextColor(colors.blue)
  92.  numofbarsofenergy = reactor.getEnergyStored()/200000
  93.  barsofenergy = ""
  94.  while numofbarsofenergy > 0 do
  95.   barsofenergy = barsofenergy.."|"
  96.   numofbarsofenergy = numofbarsofenergy - 1
  97.  end
  98.  numofbarsofnotenergy = 50-(reactor.getEnergyStored()/200000)
  99.  while numofbarsofnotenergy > 0 do
  100.   barsofenergy = barsofenergy.."="
  101.   numofbarsofnotenergy = numofbarsofnotenergy - 1
  102.  end
  103.  print("Rod insertion level: "..reactor.getControlRodLevel(0))
  104.  if maxcap ~= 0 then
  105.   print("Max energy production: "..maxcap)
  106.  end
  107.  print("Average energy production: "..avgeg)
  108.  print("Energy:                                       ("..round(fullness).."%)"..barsofenergy)
  109.  term.setTextColor(colors.white)
  110.  if auto == false then
  111.   print("Cmds: quit, activate, deactivate, auto, resetrods")
  112.   write(">>>")
  113.   cmd = read()
  114.   say("Command entered: "..cmd)
  115.   term.clear()
  116.   if cmd == "activate" then
  117.    reactor.setActive(true)
  118.   elseif cmd == "deactivate" then
  119.    reactor.setActive(false)
  120.   elseif cmd == "auto" then
  121.    auto = true
  122.   elseif cmd == "" then
  123.    donothing = true
  124.   elseif cmd == "quit" then
  125.    print("Quitted")
  126.    say("Quitted")
  127.    error()
  128.   elseif cmd == "resetrods" then
  129.    reactor.setAllControlRodLevels(0)
  130.   elseif cmd == "benchmark" or avgeg > maxcap then
  131.    print("Starting benchmark...")
  132.    say("Average energy production higher then maximum recorded capacity; recalibrating")
  133.    reactor.setAllControlRodLevels(0)
  134.    reactor.setActive(true)
  135.    print("Waiting 20s to reach max capacity...")
  136.    os.sleep(10)
  137.    print("10s...")
  138.    os.sleep(10)
  139.    maxcap = reactor.getEnergyProducedLastTick()
  140.    f = fs.open("maxcap", "w")
  141.    f.writeLine(maxcap)
  142.    f.close()
  143.    say("Recalibration completed")
  144.   else
  145.    print("Unknown command")
  146.   end
  147.  else
  148.   print("Auto mode active...")
  149.   if reactor.getEnergyStored()<8000000 then --9 million
  150.    reactor.setActive(true)
  151.   else
  152.    reactor.setActive(false)
  153.   end
  154.   if(round(fullness)>75) then
  155.    reactor.setAllControlRodLevels(100)
  156.   else
  157.    reactor.setAllControlRodLevels(round(fullness)*1.5)
  158.   end
  159.   sleep(0.2)
  160.   shell.run("clear")
  161.  end
  162.  if(timer<0) then
  163.   if(auto==true) then
  164.    print("Talking about reactor!")
  165.    say("[Reactor] Energy: "..tostring(fullness).."% Production: "..tostring(math.floor(avgeg)).."/"..tostring(math.floor(maxcap)).." (Avg/Max) ("..tostring(math.floor((avgeg/maxcap)*100)).."%)")
  166.    timer = 100
  167.   end
  168.  end
  169. end
Advertisement
Add Comment
Please, Sign In to add comment