View difference between Paste ID: xaWwx9hJ and pXpZrPs2
SHOW: | | - or go back to the newest paste.
1
-- RD CC Reactor Control
2
-- v 0.0.2
3
4
-- Dependancies:
5
--   rdCore
6
7
-- Thank you for choosing this Big Reactors reactor
8
-- control program for automating it with CC.
9
10
-- User Settings
11
12
-- Stored Power Threshold
13
-- Set a custom stored power threshold to lower the
14
-- reactor cores to in order to save power. 
15
16
local reacStTh = 100 -- 1/100 Default: 100
17
18
-- Reactor Shutdown Threshold
19
-- Should the reactor shut down after a particular
20
-- point to conserve fuel. Must be set equal or
21
-- higher then Stored Power Threshold.
22
23
local reacOf = false -- true/false Default: false
24
25
local reacOfTh = 100 -- 5/100 Default: 100
26
27
-- Reactor Name
28
-- If a monitor is found, a name may be displayed
29
-- for the reactor.
30
31
local reacName = ""
32
33
-- Debug Feedback
34
-- For double-checking numbers through the monitor. 
35
-- Should not be needed unless issues or discrepancies
36
-- arrise.
37
38
local debugF = true -- true/false Default: false
39
40
--====== DO NOT EDIT BELOW THIS POINT ======--
41
42
43
44
-- Reactor Variables
45
46
local function reUpdate()
47
48
	reEn = tonumber(reactor.getEnergyStored())
49
	dBR("Reactor Stored Energy: "..reEn.." rf")
50
	reOn = reactor.getActive()
51
	dBR("Reactor State: "..reOn)
52
	reFuel = tonumber(reactor.getFuelAmount())
53
	dBR("Reactor Fuel: "..reFuel.." mB")
54
	reEnPr = tonumber(reactor.getEnergyProducedLastTick())
55
	dBR("Reactor Energy Produced: "..reEnPr.." rf/t")
56
	reWa = tonumber(reactor.getWasteAmount())
57
	dBR("Reactor Waste: "..eWa.." mB")
58
	reFuWa = tonumber(reactor.getFuelAmountMax())
59
	dBR("Reactor Fuel/Waste Contained: "..reFuWa.." mB")
60
	reEnPerc = math.floor((reEn/10000000)*100)
61
	dBR("Reactor Energy Filled Percentage: "..reEnPerc.."%")
62
	reFTemp = tonumber(reactor.getFuelTemp)
63
	dBR("Reactor Fuel Temp: "..reFTemp.." ° C")
64
	reCTemp = tonumber(reactor.getCasingTemp)
65
	dBR("Reactor Casing Temp: "..reFTemp.." ° C")
66
	reTemp = ((reCTemp+reFTemp)/2)
67
	dBR("Reactor Avg Temp: "..reTemp.." ° C")
68
69
  
70
end
71
72
-- Debug readout function
73
74-
local function dBR(var)
74+
function dBR(var)
75
	if debugF == true then
76
		print(var)
77
	end
78
end
79
80
-- Control Rod Controls
81
82
local function reCtrlRod()
83
	reUpdate()
84
	print(reEnPerc.."%.")
85
	if reEnPerc <= reacStTh then
86
		dBR("Changing Ctrl Rod Levels to "..reEnPerc.."%.")
87
		reactor.setAllControlRodLevels(reEnPerc)
88
	end
89
end
90
91
-- Power Threshold
92
93
local function rePowThr()
94
  reUpdate()
95
  if reEnPerc > reacOfTh then
96
    reactor.setActive = false
97
  elseif reEnPerc < (reacOfTh-5) then
98
    reactor.setActive = true
99
  end
100
end
101
102
-- Adv Monitor Functionality
103
104
-- monitor variables
105
106
maxX, maxY = term.getSize()
107
108
-- monitor functions
109
110
local function updateScreen()
111
	if monTest ~= nil then
112
		reUpdate()
113
		mon.clear()
114
		reacTitle()
115
		reacEnergy()
116
		reacReadout()
117
	end
118
end
119
120
local function reacTitle()
121
	local progTitle = "RD Reactor Control ver "..progVer
122
	local reacTitle = reacName
123
	mon.setCursorPos(maxX/2-string.len(progTitle)/2,2)
124
	mon.setTextColor(colors.purple)
125
	mon.write(progTitle)
126
	if reacName ~= nil then
127
		mon.setCursorPos(maxX/2-string.len(reacTitle)/2,3)
128
		mon.setTextColor(colors.purple)
129
		mon.write(reacTitle)
130
	end
131
end
132
133
local function put(text,x,y,color)
134
	term.setCursorPos(x,y)
135
	term.setTextColor(color or 1)
136
	term.write(text)
137
end
138
139
local function reacEnergy()
140
	local enTitle = "Reactor RF Stored"
141
	local enAmt = reEn.." RF"
142
	local enPerc = reEnPerc.." %"
143
	
144
	put(enTitle,maxX/2-string.len(enTitle), 5, colors.blue)
145
	put(enTitle,maxX/2-string.len(enAmt.." / "..enPerc), 7, colors.blue)
146
	
147
	paintutils.drawLine(8,9,28,9,colors.white)
148
	paintutils.drawLine(8,9,(20*(reEnPerc/100))+8,9,colors.red)
149
	mon.setBackgroundColor(colors.black)
150
151
end
152
153
local function reacReadout()
154
155
end
156
157
158
-- Find Reactor & Monitor Peripherals
159
160
local function getPeripherals()
161
162
	reactor = peripheral.wrap(pSearch("BigReactors-Reactor"))
163
	monTest = peripheral.find("monitor")
164
165
	if reactor.getConnected() == true then
166
		dBR("Reactor Connected")
167
	else
168
		print("Reactor Not Found")
169
		term.setTextColor(colors.red)
170
		print("Please relocate this computer next to the reactor's computer port!")
171
		term.setTextColor(colors.white)
172
		--break
173
	end
174
	if monTest ~= nil then
175
		mon = peripheral.wrap(pSearch("monitor"))
176
		dBR("Monitor Found")
177
	else
178
		dBR("Monitor Not Found")
179
	end
180
181
end
182
	
183
-- Main Program
184
185
local rdCTest = fs.exists("rdCore") 
186
local rdCPB = "vKDJH93Y"
187
progVer = "0.0.2"
188
local req = 0
189
local runs = 0
190
local reactor
191
local mon
192
193
if rdCTest == false then
194
	print("rdCore Api Not Found. Installing embedded version.")
195
	shell.run("pastebin", "get", "rdCPB", "rdCore")
196
	shell.run("rdCore")
197-
		add2Start("reactorControl")
197+
198
	if rdCTest == true then
199
		add2start("reactorControl")
200
		print("rdCore Api ver "..rdCV.." Installed Successfully")
201
		req = 1
202
	else
203
		print("rdCore Api Unavailable. RD Reactor Control Unable to Start")
204
		--break
205
	end
206
else
207
	print("rdCore Api Found")
208
	req = 1
209
end
210
211-
print(temp)
211+
212
213
local temp = ("RD Reactor Control ver: "..progVer.." Initialized Successfully")
214
215
  while true do
216
	if runs == 0 then
217
		if req == 0 then
218
			break
219
		else
220
			print(temp)
221
		end
222
		
223
	elseif runs == 5 then
224
	
225
		updateScreen()
226
		runs = 1
227
	else
228
		runs = runs + 1
229
	end 
230
	
231
	reCtrlRod()
232
	if reacOf == true then
233
		rePowThr()
234
	end
235
	
236-
--end
236+
237
  end