Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.68 KB | None | 0 0
  1. print("Reactor Control Client booting up")
  2. print("Searching for connected reactors...")
  3.  
  4. --Get a list of connected periphs
  5. periphs = peripheral.getNames()
  6.  
  7. --Now figure out which one is a reactor
  8. reactorCount = 0;
  9. reactorName = "";
  10. for i,v in ipairs(periphs) do
  11. if peripheral.getType(v) == "BigReactors-Reactor" then
  12. reactorCount = reactorCount + 1
  13. reactorName = v
  14. end
  15. end
  16.  
  17. --Error if there or 0 or >=2 reactors
  18. if reactorCount == 0 then
  19. print("No reactors found. If you're using a wired cable, make sure to turn on the modem by right-clicking!")
  20. error()
  21. elseif reactorCount >= 2 then
  22. print("More than one reactor found. Are you using multiple computer ports?")
  23. error()
  24. end
  25. print("Found reactor '"..reactorName.."'! Initializing...")
  26.  
  27. --Begin initializing everything. This is where the cool stuff happens.
  28.  
  29. --These will be updated every second or so and be displayed onscreen.
  30. reactor = peripheral.wrap(reactorName)
  31. reactorActive = false
  32. reactorFuelTemp = 0
  33. reactorCasingTemp = 0
  34. reactorEnergy = 0
  35. reactorFuelAmount = 0
  36. reactorWasteAmount = 0
  37. reactorEnergyProduced = 0
  38.  
  39. --These will only change when the user specifies them to, or when a user-specified condition is met.
  40. manualOff = false
  41. maxCaseTemp = 2000
  42. minCaseTemp = 1000
  43. caseTempEnabled = true
  44. cooling = false
  45. maxEnergy = 1
  46. minEnergy = 0
  47. tooMuchPower = false
  48. lowPower = false
  49. energyEnabled = true
  50. minFuelAmount = 0.0
  51. fuelEnabled = true
  52. lowFuel = false
  53.  
  54. --Detect if the config file exists, and load it if so.
  55. if fs.exists("RCC.cfg") then
  56. print("Config file found! Loading...")
  57. config = fs.open("RCC.cfg", 'r')
  58. maxCaseTemp = tonumber(config.readLine())
  59. minCaseTemp = tonumber(config.readLine())
  60. if config.readLine() == "true" then caseTempEnabled = true else caseTempEnabled = false end
  61. maxEnergy = tonumber(config.readLine())
  62. minEnergy = tonumber(config.readLine())
  63. if config.readLine() == "true" then energyEnabled = true else energyEnabled = false end
  64. minFuelAmount = tonumber(config.readLine())
  65. if config.readLine() == "true" then fuelEnabled = true else fuelEnabled = false end
  66. config.close()
  67. end
  68.  
  69. --Misc variables
  70. consoleContent = {"","","","","","","","","","","",""}
  71. commandContent = ""
  72. exitFinal = false
  73.  
  74. --Function to round numbers, I know there's already one but shhhh
  75. function round(x)
  76. return math.floor(x+0.5)
  77. end
  78.  
  79. --Function to handle drawing the screen/updating vars
  80. function draw()
  81. reactorActive = reactor.getActive()
  82. reactorFuelTemp = reactor.getFuelTemperature()
  83. reactorCasingTemp = reactor.getCasingTemperature()
  84. reactorEnergy = reactor.getEnergyStored()
  85. reactorEnergyProduced = reactor.getEnergyProducedLastTick()
  86. reactorFuelAmount = reactor.getFuelAmount()/reactor.getFuelAmountMax()
  87. reactorWasteAmount = reactor.getWasteAmount()/reactor.getFuelAmountMax()
  88.  
  89. --Now draw this data onscreen, with the console
  90. term.clear()
  91. term.setCursorPos(1,1)
  92. if reactorActive then write("REACTOR ONLINE") else write("REACTOR OFFLINE") end
  93. if manualOff then print(" (Manual shutoff)") elseif cooling then print(" (Cooling)") elseif lowFuel then print(" (Low fuel!)") elseif tooMuchEnergy then print(" (Energy buffer maxed out)") elseif lowEnergy then print(" (Low energy!)") else print() end
  94. print("Fuel Temperature: "..round(reactorFuelTemp))
  95. print("Case Temperature: "..round(reactorCasingTemp))
  96. print("Energy Buffer: "..round(100*(reactorEnergy/10000000)).."% ("..round(reactorEnergyProduced).."RF/T)")
  97. print("Fuel Amount: "..round(100*reactorFuelAmount).."% ("..round(100*reactorWasteAmount).."% waste)")
  98. print(" --- ")
  99. for i,v in ipairs(consoleContent) do
  100. write(v)
  101. print()
  102. end
  103. write(" $"..commandContent)
  104. term.setCursorBlink(true)
  105. end
  106.  
  107. --Function to handle logging to console
  108. function log(s)
  109. for i,v in ipairs(consoleContent) do
  110. if i>0 then
  111. consoleContent[i-1] = consoleContent[i]
  112. end
  113. end
  114. consoleContent[12] = s
  115. end
  116.  
  117. log("Type $help for help with commands.")
  118.  
  119. --Function to handle commands
  120. function command(s)
  121. exitEntered = false
  122. cArgs = {}
  123. for word in s:gmatch("%S+") do table.insert(cArgs, word) end
  124. if cArgs[1] == nil then return end
  125. if string.lower(cArgs[1]) == "help" then
  126. if cArgs[2] == "1" or cArgs[2] == nil then
  127. log("Help page 1")
  128. log(" $help <page> - Display this message")
  129. log(" $exit - Invoke twice to terminate")
  130. log(" $power [on:off] - Manually shut the reactor off")
  131. log("or power it back on again.")
  132. log(" $ejectwaste - Manually eject waste.")
  133. log(" $casetemp [[min:max] <temp>:disable] - Set the")
  134. log("minimum/maximum case temp, or disable it entirely.")
  135. elseif cArgs[2] == "2" then
  136. log("Help page 2")
  137. log(" $energy [[min:max] <amount>:disable] - Set the")
  138. log("min/max energy amount, or disable it entirely.")
  139. log(" $saveconfig - Save settings to a config file.")
  140. else
  141. log("Usage: $help <page>")
  142. end
  143. elseif string.lower(cArgs[1]) == "ejectwaste" then
  144. log("Waste cyanite manually ejected.")
  145. reactor.doEjectWaste()
  146. elseif string.lower(cArgs[1]) == "power" then
  147. if cArgs[2] == nil then
  148. log("Usage: $power [on:off]")
  149. else
  150. if string.lower(cArgs[2]) == "on" then
  151. reactor.setActive(true)
  152. log("Reactor manually powered on.")
  153. manualOff = false
  154. elseif string.lower(cArgs[2]) == "off" then
  155. reactor.setActive(false)
  156. log("Reactor manually shut off, use $power on to revert")
  157. manualOff = true
  158. else
  159. log("Usage: $power [on:off]")
  160. end
  161. end
  162. elseif string.lower(cArgs[1]) == "casetemp" then
  163. if cArgs[2] == nil then
  164. log("Usage: $casetemp [[min:max] <temp>:disable]")
  165. else
  166. if string.lower(cArgs[2]) == "min" then
  167. if tonumber(cArgs[3]) == nil then
  168. log("Usage: $casetemp min <temp>")
  169. else
  170. if tonumber(cArgs[3])>0 and tonumber(cArgs[3])<=10000 then
  171. if tonumber(cArgs[3]) >= maxCaseTemp then
  172. log("Min case temp must be lower than max case temp!")
  173. else
  174. minCaseTemp = tonumber(cArgs[3])
  175. log("Minimum case temp now "..minCaseTemp..".")
  176. if not caseTempEnabled then
  177. log("Case temp now enabled.")
  178. caseTempEnabled = true
  179. end
  180. end
  181. else
  182. log("Entered number must be between 0 and 10000.")
  183. end
  184. end
  185. elseif string.lower(cArgs[2]) == "max" then
  186. if tonumber(cArgs[3]) == nil then
  187. log("Usage: $casetemp max <temp>")
  188. else
  189. if tonumber(cArgs[3])>0 and tonumber(cArgs[3])<=10000 then
  190. if tonumber(cArgs[3]) <= minCaseTemp then
  191. log("Max case temp must be higher than min case temp!")
  192. else
  193. maxCaseTemp = tonumber(cArgs[3])
  194. log("Maximum case temp now "..maxCaseTemp..".")
  195. if not caseTempEnabled then
  196. log("Case temp now enabled.")
  197. caseTempEnabled = true
  198. end
  199. end
  200. else
  201. log("Entered number must be between 0 and 10000.")
  202. end
  203. end
  204. elseif string.lower(cArgs[2]) == "disable" then
  205. caseTempEnabled = false
  206. log("Case temp now disabled.")
  207. log("Set the min/max case temp again to enable.")
  208. else
  209. log("Usage: $casetemp [[min:max] <temp>:[enable:disable]]")
  210. end
  211. end
  212. elseif string.lower(cArgs[1]) == "fuel" then
  213. if cArgs[2] == nil then
  214. log("Usage: $fuel [min <amount>:disable]")
  215. else
  216. if string.lower(cArgs[2]) == "min" then
  217. if tonumber(cArgs[3]) == nil then
  218. log("Usage: $fuel min <amount>")
  219. else
  220. if tonumber(cArgs[3]) >= 0 and tonumber(cArgs[3]) <= 100 then
  221. log("Min fuel amount set to "..tonumber(cArgs[3]).."%.")
  222. minFuelAmount = tonumber(cArgs[3])/100
  223. if not fuelEnabled then
  224. fuelEnabled = true
  225. log("Fuel amount now enabled.")
  226. end
  227. else
  228. log("Specified number must be between 0 and 100.")
  229. end
  230. end
  231. elseif string.lower(cArgs[2]) == "disable" then
  232. log("Fuel amount now disabled.")
  233. log("Set the min fuel amount again to enable.")
  234. fuelEnabled = false
  235. else
  236. log("Usage: fuel [min <amount:disable]")
  237. end
  238. end
  239. elseif string.lower(cArgs[1]) == "energy" then
  240. if cArgs[2] == nil then
  241. log("Usage: $energy [[min:max] <amount>:disable]")
  242. else
  243. if string.lower(cArgs[2]) == "min" then
  244. if tonumber(cArgs[3]) == nil then
  245. log("Usage: $energy min <amount>")
  246. else
  247. if tonumber(cArgs[3]) >= 0 and tonumber(cArgs[3]) <= 100 then
  248. if tonumber(cArgs[3])/100 >= maxEnergy then
  249. log("Min buffer must be lower than max buffer!")
  250. else
  251. minEnergy = tonumber(cArgs[3])/100
  252. log("Min energy buffer set to "..tonumber(cArgs[3]).."%.")
  253. if not energyEnabled then
  254. energyEnabled = true
  255. log("Energy buffer now enabled.")
  256. end
  257. end
  258. else
  259. log("The specified number must be between 0 and 100.")
  260. end
  261. end
  262. elseif string.lower(cArgs[2]) == "max" then
  263. if tonumber(cArgs[3]) == nil then
  264. log("Usage: $energy max <amount>")
  265. else
  266. if tonumber(cArgs[3]) >= 0 and tonumber(cArgs[3]) <= 100 then
  267. if tonumber(cArgs[3])/100 <= minEnergy then
  268. log("Max buffer must be higher than min buffer!")
  269. else
  270. maxEnergy = tonumber(cArgs[3])/100
  271. log("Max energy buffer set to "..tonumber(cArgs[3]).."%.")
  272. if not energyEnabled then
  273. energyEnabled = true
  274. log("Energy buffer now enabled.")
  275. end
  276. end
  277. else
  278. log("The specified number must be between 0 and 100.")
  279. end
  280. end
  281. elseif string.lower(cArgs[2]) == "disable" then
  282. energyEnabled = false
  283. log("Energy buffer now disabled.")
  284. log("Set the min/max energy buffer again to enable.")
  285. else
  286. log("Usage: $energy [[min:max] <amount>:disable]")
  287. end
  288. end
  289. elseif string.lower(cArgs[1]) == "saveconfig" then
  290. log("Saving settings...")
  291. config = fs.open("RCC.cfg", "w")
  292. config.writeLine(maxCaseTemp)
  293. config.writeLine(minCaseTemp)
  294. if caseTempEnabled then config.writeLine("true") else config.writeLine("false") end
  295. config.writeLine(maxEnergy)
  296. config.writeLine(minEnergy)
  297. if energyEnabled then config.writeLine("true") else config.writeLine("false") end
  298. config.writeLine(minFuelAmount)
  299. if fuelEnabled then config.writeLine("true") else config.writeLine("false") end
  300. config.close()
  301. log("Settings saved!")
  302. elseif string.lower(cArgs[1]) == "exit" then
  303. exitEntered = true
  304. if exitFinal then
  305. term.clear()
  306. term.setCursorPos(1,1)
  307. error()
  308. end
  309. exitFinal = true
  310. log("Are you sure? Type $exit again to confirm.")
  311. log("WARNING: THIS WILL NOT SHUT OFF THE REACTOR.")
  312. else
  313. log("Unrecognized command. Type $help for help.")
  314. end
  315. if not exitEntered then exitFinal = false end
  316. end
  317.  
  318. --Function to do everything else
  319. function monitor()
  320. while true do
  321. os.startTimer(1)
  322. draw()
  323. event, param1 = os.pullEvent()
  324. if event == "key" then
  325. if param1 == 14 then
  326. commandContent = string.sub(commandContent, 0, -2)
  327. elseif param1 == 28 then
  328. log(" $"..commandContent)
  329. command(commandContent)
  330. commandContent = "";
  331. end
  332. elseif event == "char" then
  333. commandContent = commandContent..param1
  334. end
  335. if not manualOff then
  336. if caseTempEnabled then
  337. if cooling then
  338. if reactorCasingTemp <= minCaseTemp then
  339. cooling = false
  340. reactor.setActive(true)
  341. log("Reactor cooled.")
  342. end
  343. else
  344. if reactorCasingTemp >= maxCaseTemp then
  345. cooling = true
  346. reactor.setActive(false)
  347. log("Reactor overheating! Cooling...")
  348. end
  349. end
  350. else
  351. cooling = false
  352. end
  353. if fuelEnabled then
  354. if lowFuel then
  355. if reactorFuelAmount >= minFuelAmount then
  356. lowFuel = false
  357. reactor.setActive(true)
  358. log("Reactor refuelled.")
  359. end
  360. else
  361. if reactorFuelAmount < minFuelAmount then
  362. lowFuel = true
  363. reactor.setActive(false)
  364. log("Low fuel! Place some into an access port!")
  365. end
  366. end
  367. end
  368. if energyEnabled then
  369. if lowEnergy then
  370. if reactorEnergy/10000000 >= minEnergy then
  371. lowEnergy = false
  372. log("Energy requirements met.")
  373. end
  374. else
  375. if reactorEnergy/10000000 < minEnergy then
  376. lowEnergy = true
  377. log("Low energy!")
  378. reactor.setActive(true)
  379. end
  380. end
  381. if tooMuchEnergy then
  382. if reactorEnergy/10000000 <= maxEnergy then
  383. tooMuchEnergy = false
  384. log("Energy buffer no longer maxed out.")
  385. reactor.setActive(true)
  386. end
  387. else
  388. if reactorEnergy/10000000 > maxEnergy then
  389. tooMuchEnergy = true
  390. log("Energy buffer maxed out!")
  391. reactor.setActive(false)
  392. end
  393. end
  394. end
  395. end
  396. end
  397. end
  398.  
  399. --Now actually start the program!
  400. monitor()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement