Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function syousuu (num,level)
- local r = num * 10^level
- return (math.floor(r) / 10^level)
- end
- function kmg( num )
- local kmgList = {"","K","M","G","T"}
- local f = 1
- while num > 1000 do
- num = num / 1000
- f = f + 1
- end
- if f > 5 then
- f = 5
- end
- return syousuu(num,0) .. kmgList[f]
- end
- local control = nil
- for k, v in pairs(peripheral.getNames()) do
- if peripheral.getType(v) == "BigReactors-Reactor" then
- control = peripheral.wrap(v)
- end
- if peripheral.getType(v) == "modem" then
- rednet.open(v)
- end
- end
- if not control then shell.exit() end
- local lvl = 90
- local oldtime = os.clock()
- local oldene = control.getEnergyStored()
- local oldeneT = control.getEnergyProducedLastTick()
- local targetEne = 5000000
- local targetTemp = 900
- local TickList = {oldeneT,oldeneT,oldeneT}
- local down = true
- while true do
- control.setActive(true)
- local newtime = os.clock()
- local newene = control.getEnergyStored()
- local neweneT = control.getEnergyProducedLastTick()
- local newTemp = control.getFuelTemperature()
- local tick = (newtime-oldtime) * 20
- local useEne = neweneT * tick - (newene - oldene)
- local useEneT = useEne / tick
- local targetTick = useEneT * (1+(targetEne-newene) / 10000000)
- TickList[1] = TickList[2]
- TickList[2] = TickList[3]
- TickList[3] = neweneT
- if ( TickList[1] > TickList[2] and TickList[3] > TickList[2] ) or
- (TickList[1] < TickList[2] and TickList[3] < TickList[2]) or
- (math.abs(targetTick-neweneT) > math.abs(neweneT - oldeneT) * tick) then
- if targetTick > neweneT and targetTemp > newTemp then
- lvl = lvl - 1
- TickList = {neweneT,neweneT,neweneT}
- else
- lvl = lvl + 1
- TickList = {neweneT,neweneT,neweneT}
- end
- end
- if down and targetTick > neweneT and targetTemp > newTemp then
- lvl = lvl - 1
- TickList = {neweneT,neweneT,neweneT}
- down = false
- end
- if not down and targetTick < neweneT then
- lvl = lvl + 1
- TickList = {neweneT,neweneT,neweneT}
- down = true
- end
- if targetTemp < newTemp then
- lvl = lvl + 1
- end
- if newene < 1000000 and lvl == 100 then
- targetTick = 50000
- lvl = 99
- end
- if newene > 9000000 then
- lvl = 100
- end
- if lvl > 100 then lvl = 100 end
- if lvl < 0 then lvl = 0 end
- oldtime = newtime
- oldene = newene
- oldeneT = neweneT
- control.setAllControlRodLevels(lvl)
- term.clear()
- term.setCursorPos(1, 1)
- write("setLvl:"..lvl
- .."\ntarget:"..kmg(targetTick)
- .."\nTick :"..kmg(neweneT)
- .."\nuseing:"..kmg(useEneT)
- .."\nper :"..math.ceil(newene/100000))
- if rednet.isOpen() then
- local send = {channel="gapi",sender=os.getComputerID(),line={}}
- send.line[#(send.line) + 1] = {t="BigReacter:"..os.getComputerID().." Stock "..math.ceil(newene/100000).."%",c=colors.red}
- send.line[#(send.line) + 1] = {t=" lvl:"..lvl.." temp:"..kmg(newTemp).." gane:"..kmg(neweneT) .. "RF",c=colors.red}
- rednet.broadcast(textutils.serialize(send))
- end
- sleep(1)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement