Advertisement
Ganeesya

BigReacterEcoControll

Apr 15th, 2015
599
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.90 KB | None | 0 0
  1. function syousuu (num,level)
  2.     local r = num * 10^level
  3.     return (math.floor(r) / 10^level)
  4. end
  5.  
  6. function kmg( num )
  7.     local kmgList = {"","K","M","G","T"}
  8.     local f = 1
  9.     while num > 1000 do
  10.         num = num / 1000
  11.         f = f + 1
  12.     end
  13.     if f > 5 then
  14.         f = 5
  15.     end
  16.     return syousuu(num,0) .. kmgList[f]
  17. end
  18.  
  19. local control = nil
  20. for k, v in pairs(peripheral.getNames()) do
  21.     if peripheral.getType(v) == "BigReactors-Reactor" then
  22.         control = peripheral.wrap(v)
  23.     end
  24.     if peripheral.getType(v) == "modem" then
  25.         rednet.open(v)
  26.     end
  27. end
  28.  
  29. if not control then shell.exit() end
  30. local lvl = 90
  31. local oldtime = os.clock()
  32. local oldene = control.getEnergyStored()
  33. local oldeneT = control.getEnergyProducedLastTick()
  34. local targetEne = 5000000
  35. local targetTemp = 900
  36. local TickList = {oldeneT,oldeneT,oldeneT}
  37. local down = true
  38.  
  39. while true do
  40.     control.setActive(true)
  41.     local newtime = os.clock()
  42.     local newene = control.getEnergyStored()
  43.     local neweneT = control.getEnergyProducedLastTick()
  44.     local newTemp = control.getFuelTemperature()
  45.  
  46.     local tick = (newtime-oldtime) * 20
  47.  
  48.     local useEne = neweneT * tick - (newene - oldene)
  49.     local useEneT = useEne / tick
  50.  
  51.     local targetTick = useEneT * (1+(targetEne-newene) / 10000000)
  52.  
  53.     TickList[1] = TickList[2]
  54.     TickList[2] = TickList[3]
  55.     TickList[3] = neweneT
  56.  
  57.     if ( TickList[1] > TickList[2] and TickList[3] > TickList[2] ) or
  58.      (TickList[1] < TickList[2] and TickList[3] < TickList[2]) or
  59.      (math.abs(targetTick-neweneT) > math.abs(neweneT - oldeneT) * tick) then
  60.         if targetTick > neweneT and targetTemp > newTemp then
  61.             lvl = lvl - 1
  62.             TickList = {neweneT,neweneT,neweneT}
  63.         else
  64.             lvl = lvl + 1
  65.             TickList = {neweneT,neweneT,neweneT}
  66.         end
  67.     end
  68.     if down and targetTick > neweneT and targetTemp > newTemp then
  69.         lvl = lvl - 1
  70.         TickList = {neweneT,neweneT,neweneT}
  71.         down = false
  72.     end
  73.  
  74.     if not down and targetTick < neweneT then
  75.         lvl = lvl + 1
  76.         TickList = {neweneT,neweneT,neweneT}
  77.         down = true
  78.     end
  79.  
  80.     if targetTemp < newTemp then
  81.         lvl = lvl + 1
  82.     end
  83.  
  84.     if newene < 1000000 and lvl == 100 then
  85.         targetTick = 50000
  86.         lvl = 99
  87.     end
  88.  
  89.     if newene > 9000000 then
  90.         lvl = 100
  91.     end
  92.  
  93.     if lvl > 100 then lvl = 100 end
  94.     if lvl < 0 then lvl = 0 end
  95.  
  96.     oldtime = newtime
  97.     oldene = newene
  98.     oldeneT = neweneT
  99.  
  100.     control.setAllControlRodLevels(lvl)
  101.     term.clear()
  102.     term.setCursorPos(1, 1)
  103.     write("setLvl:"..lvl
  104.         .."\ntarget:"..kmg(targetTick)
  105.         .."\nTick  :"..kmg(neweneT)
  106.         .."\nuseing:"..kmg(useEneT)
  107.         .."\nper   :"..math.ceil(newene/100000))
  108.     if rednet.isOpen() then
  109.         local send = {channel="gapi",sender=os.getComputerID(),line={}}
  110.         send.line[#(send.line) + 1] = {t="BigReacter:"..os.getComputerID().." Stock "..math.ceil(newene/100000).."%",c=colors.red}
  111.         send.line[#(send.line) + 1] = {t="  lvl:"..lvl.." temp:"..kmg(newTemp).." gane:"..kmg(neweneT) .. "RF",c=colors.red}
  112.         rednet.broadcast(textutils.serialize(send))
  113.     end
  114.     sleep(1)
  115. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement