SHOW:
|
|
- or go back to the newest paste.
1 | function write(color, line, caption, text) | |
2 | local monitor = peripheral.find("monitor") | |
3 | monitor.setCursorPos(1, line) | |
4 | - | local reactor = peripheral.wrap("BigReactors-Reactor_0") |
4 | + | |
5 | monitor.write(caption) | |
6 | monitor.setTextColor(color) | |
7 | - | monitor.setTextScale(0.5) |
7 | + | monitor.write(text) |
8 | return line + 1 | |
9 | - | local low = 100000 |
9 | + | end |
10 | - | local high = 9000000 |
10 | + | |
11 | - | local max = 10000000 |
11 | + | function findReactors() |
12 | local reactors = {} | |
13 | - | reactor.setAllControlRodLevels(reactor.getEnergyStored() * 100 / max) |
13 | + | local allReactors = {peripheral.find("BigReactors-Reactor")} |
14 | local i = 0 | |
15 | - | monitor.setCursorPos(1,1) |
15 | + | for k, v in pairs(allReactors) do |
16 | print("Found reactor " .. i) | |
17 | - | monitor.write("Active: ") |
17 | + | local reactor = {} |
18 | - | monitor.setTextColor(colors.lime) |
18 | + | reactor.lastRf = 0 |
19 | - | monitor.write(reactor.getActive()) |
19 | + | reactor.maxControlRods = v.getNumberOfControlRods() * 100 |
20 | - | |
20 | + | reactor.controlRods = reactor.maxControlRods |
21 | - | monitor.setCursorPos(1,2) |
21 | + | reactor.energyProduced = 0 |
22 | reactor.fuelConsumed = 0 | |
23 | - | monitor.write("RF/T: ") |
23 | + | reactor.tickCount = 0 |
24 | - | monitor.setTextColor(colors.lime) |
24 | + | reactor.api = v |
25 | - | monitor.write(math.floor(reactor.getEnergyProducedLastTick())) |
25 | + | reactor.lastCasingTemperature = 0 |
26 | - | |
26 | + | reactor.lastFuelTemperature= 0 |
27 | - | monitor.setCursorPos(1,3) |
27 | + | reactors[i] = reactor |
28 | i = i + 1 | |
29 | - | monitor.write("RF Stored: ") |
29 | + | end |
30 | - | monitor.setTextColor(colors.lime) |
30 | + | return reactors |
31 | - | monitor.write(math.floor(reactor.getEnergyStored())) |
31 | + | end |
32 | - | |
32 | + | |
33 | - | monitor.setCursorPos(1,4) |
33 | + | function findTurbines() |
34 | local turbines = {} | |
35 | - | monitor.write("Casing Heat: ") |
35 | + | local allTurbines = {peripheral.find("BigReactors-Turbine")} |
36 | - | monitor.setTextColor(colors.lime) |
36 | + | local i = 0 |
37 | - | monitor.write(math.floor(reactor.getCasingTemperature())) |
37 | + | for k, v in pairs(allTurbines) do |
38 | - | |
38 | + | print("Found turbine " .. i) |
39 | - | monitor.setCursorPos(1,5) |
39 | + | local turbine = {} |
40 | turbine.api = v | |
41 | - | monitor.write("Fuel Heat: ") |
41 | + | turbines[i] = turbine |
42 | - | monitor.setTextColor(colors.lime) |
42 | + | i = i + 1 |
43 | - | monitor.write(math.floor(reactor.getFuelTemperature())) |
43 | + | end |
44 | return turbines | |
45 | - | monitor.setCursorPos(1,6) |
45 | + | end |
46 | ||
47 | - | monitor.write("Control Rods: ") |
47 | + | function reactorControl(line, rt, reduceEnergy) |
48 | - | monitor.setTextColor(colors.lime) |
48 | + | |
49 | - | monitor.write(math.floor(reactor.getControlRodLevel(0))) |
49 | + | |
50 | local reactor = rt.api | |
51 | - | -- End Reactor 1 |
51 | + | |
52 | ||
53 | - | sleep(1) |
53 | + | local rfStored = math.floor(reactor.getEnergyStored() / 100000) |
54 | local fuelTemperature = reactor.getFuelTemperature() | |
55 | local casingTemperature = reactor.getCasingTemperature() | |
56 | ||
57 | if math.abs(fuelTemperature - rt.lastFuelTemperature) < 3 and math.abs(casingTemperature - rt.lastCasingTemperature) < 3 or rt.controlRods == rt.maxControlRods then | |
58 | if reduceEnergy then | |
59 | if rfStored >= rt.lastRf then | |
60 | rt.controlRods = rt.controlRods + 2 | |
61 | end | |
62 | else | |
63 | if rfStored < rt.lastRf then | |
64 | rt.controlRods = rt.controlRods - 2 | |
65 | end | |
66 | if rfStored > rt.lastRf then | |
67 | rt.controlRods = rt.controlRods + 2 | |
68 | end | |
69 | if rfStored == rt.lastRf then | |
70 | if rfStored > 90 then | |
71 | rt.controlRods = rt.controlRods + 2 | |
72 | end | |
73 | end | |
74 | if rfStored < 1 then | |
75 | rt.controlRods = rt.controlRods - 2 | |
76 | end | |
77 | end | |
78 | end | |
79 | ||
80 | if rt.controlRods > rt.maxControlRods then | |
81 | rt.controlRods = rt.maxControlRods | |
82 | end | |
83 | if rt.controlRods < 0 then | |
84 | rt.controlRods = 0 | |
85 | end | |
86 | ||
87 | if not reactor.getActive() then | |
88 | rt.controlRods = rt.maxControlRods | |
89 | end | |
90 | ||
91 | rt.lastRf = rfStored | |
92 | rt.lastFuelTemperature = fuelTemperature | |
93 | rt.lastCasingTemperature = casingTemperature | |
94 | ||
95 | local level = math.ceil(rt.controlRods * 100 / rt.maxControlRods) | |
96 | local numberOfReduced = (level * rt.api.getNumberOfControlRods()) - rt.controlRods | |
97 | ||
98 | for i = 1,numberOfReduced do | |
99 | reactor.setControlRodLevel(i-1, level-1) | |
100 | end | |
101 | for i = numberOfReduced + 1,reactor.getNumberOfControlRods() do | |
102 | reactor.setControlRodLevel(i-1, level) | |
103 | end | |
104 | ||
105 | if reactor.getActive() then | |
106 | rt.energyProduced = (rt.energyProduced * rt.tickCount + reactor.getEnergyProducedLastTick()) / (rt.tickCount + 1) | |
107 | rt.fuelConsumed = (rt.fuelConsumed * rt.tickCount + reactor.getFuelConsumedLastTick()) / (rt.tickCount + 1) | |
108 | rt.tickCount = rt.tickCount + 1 | |
109 | if (rt.tickCount > 600) then | |
110 | rt.tickCount = 600 | |
111 | end | |
112 | end | |
113 | ||
114 | local color | |
115 | if reactor.getActive() then | |
116 | color = colors.lime | |
117 | else | |
118 | color = colors.red | |
119 | end | |
120 | ||
121 | line = write(color, line, "RF/T : ", math.floor(reactor.getEnergyProducedLastTick()) .. " (" .. math.floor(rt.energyProduced) .. ")") | |
122 | line = write(color, line, "mB/T : ", math.floor(reactor.getFuelConsumedLastTick() * 1000) / 1000 .. " (" .. math.floor(rt.fuelConsumed * 1000) / 1000 .. ")") | |
123 | line = write(color, line, "RF/mB : ", math.floor(reactor.getEnergyProducedLastTick() / reactor.getFuelConsumedLastTick()) .. " (" .. math.floor(rt.energyProduced / rt.fuelConsumed).. ")") | |
124 | line = line + 1 | |
125 | line = write(color, line, "Fuel Amount : ", math.floor(reactor. getFuelAmount()) .. " (" .. math.floor(reactor.getFuelAmount() * 1000 / reactor.getFuelAmountMax()) / 10 .. "%)") | |
126 | line = line + 1 | |
127 | line = write(color, line, "Heat (C/F) : ", math.floor(reactor.getCasingTemperature()) .. " / " .. math.floor(reactor.getFuelTemperature())) | |
128 | line = line + 1 | |
129 | line = write(color, line, "Control Rods : ", math.floor(rt.controlRods * 100 / rt.maxControlRods * 10) / 10) | |
130 | ||
131 | return line | |
132 | ||
133 | end | |
134 | ||
135 | function sumEnergyStored(list) | |
136 | local value = 0 | |
137 | for k,v in pairs(list) do | |
138 | value = v.api.getEnergyStored() + value | |
139 | end | |
140 | return value | |
141 | end | |
142 | ||
143 | function checkReduce(turbines) | |
144 | for k,v in pairs(turbines) do | |
145 | if v.api.getEnergyStored() > 900000 then | |
146 | return true | |
147 | end | |
148 | end | |
149 | return false | |
150 | end | |
151 | ||
152 | function loop(reactors, turbines) | |
153 | local lastRfTurbine = 0 | |
154 | while true do | |
155 | local monitor = peripheral.find("monitor") | |
156 | monitor.clear() | |
157 | monitor.setTextScale(1) | |
158 | local line = 1 | |
159 | local rfTurbine = sumEnergyStored(turbines) | |
160 | local rfReactors = sumEnergyStored(reactors) | |
161 | local reduceEnergy | |
162 | if math.floor(rfTurbine / 100) > math.floor(lastRfTurbine / 100) then | |
163 | lastRfTurbine = rfTurbine | |
164 | reduceEnergy = true | |
165 | end | |
166 | if math.floor(lastRfTurbine / 100) > math.floor(rfTurbine / 100) then | |
167 | lastRfTurbine = rfTurbine | |
168 | reduceEnergy = false | |
169 | end | |
170 | if math.floor(lastRfTurbine / 100) == math.floor(rfTurbine / 100) then | |
171 | reduceEnergy = checkReduce(turbines) | |
172 | end | |
173 | local color = colors.lime | |
174 | if reduceEnergy then | |
175 | color = colors.red | |
176 | end | |
177 | line = write(color, line, "RF Stored : ", math.floor(rfTurbine + rfReactors)) | |
178 | line = line + 2 | |
179 | ||
180 | for k,v in pairs(reactors) do | |
181 | line = reactorControl(line, v, reduceEnergy) + 3 | |
182 | end | |
183 | lastRfTurbine = rfTurbine | |
184 | sleep(2) | |
185 | end | |
186 | end | |
187 | ||
188 | function doLoop() | |
189 | local reactorList = findReactors() | |
190 | local turbineList = findTurbines() | |
191 | loop(reactorList, turbineList) | |
192 | end | |
193 | ||
194 | while true do | |
195 | local status, message = pcall(doLoop) | |
196 | local monitor = peripheral.find("monitor") | |
197 | monitor.clear() | |
198 | monitor.setTextScale(1) | |
199 | write(colors.red, 1, "Error : ", message) | |
200 | sleep(10) | |
201 | end |