Advertisement
jnsstnbrg

Big Reactor CC - Multiple Turbines

Aug 22nd, 2015
3,553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.00 KB | None | 0 0
  1. os.loadAPI("button")
  2.  
  3. turbineNames = {}
  4. function filter(name)
  5. table.insert(turbineNames, name)
  6. return true
  7. end
  8.  
  9. peripheral.find("BigReactors-Turbine", filter)
  10. p = peripheral.find("tile_blockcapacitorbank_name")
  11. m = peripheral.find("monitor")
  12. r = peripheral.find("BigReactors-Reactor")
  13. t = {}
  14.  
  15. local steamReactor = r.isActivelyCooled()
  16. local menuType = "Reactor"
  17.  
  18. local numCapacitors = 3
  19. local turnOnAt = 50
  20. local turnOffAt = 90
  21.  
  22. local targetSpeed = 1840
  23.  
  24. local energy = 0
  25. local energyStored = 0
  26. local energyMax = 0
  27. local energyStoredPercent = 0
  28. local timerCode
  29. local mode = "Automatic"
  30. local RFProduction = 0
  31. local fuelUse = 0
  32. local coreTemp = 0
  33. local reactorOnline = false
  34. local rodLevel = 0
  35.  
  36. local turbineOnline = false
  37. local turbineRotorSpeed = 0
  38. local turbineRFGen = 0
  39. local turbineFluidRate = 0
  40. local turbineInductor = false
  41.  
  42. local OptFuelRodLevel = 0
  43.  
  44. function autoMenu()
  45. m.setTextScale(1)
  46. button.clearTable()
  47. button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
  48. button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
  49.  
  50. if steamReactor then
  51. button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
  52. button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
  53. end
  54. button.screen()
  55. checkMode()
  56. menuMode()
  57. end
  58.  
  59. function manualMenu()
  60. m.setTextScale(1)
  61. button.clearTable()
  62. button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
  63. button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
  64. button.setTable("Online", online, "", 3, 13, 8, 8)
  65. button.setTable("Offline", offline, "", 15, 25, 8, 8)
  66. button.setTable("0", setRods, 0, 11,14, 10, 10)
  67. button.setTable("10", setRods, 10, 5,8, 12, 12)
  68. button.setTable("20", setRods, 20, 11,14, 12, 12)
  69. button.setTable("30", setRods, 30, 17,20, 12, 12)
  70. button.setTable("40", setRods, 40, 5,8, 14, 14)
  71. button.setTable("50", setRods, 50, 11,14, 14, 14)
  72. button.setTable("60", setRods, 60, 17,20, 14, 14)
  73. button.setTable("70", setRods, 70, 5,8, 16, 16)
  74. button.setTable("80", setRods, 80, 11,14, 16, 16)
  75. button.setTable("90", setRods, 90, 17,20, 16, 16)
  76. button.setTable("+", rodPlus, "", 23, 25, 12, 12)
  77. button.setTable("-", rodMinus, "", 23, 25, 16, 16)
  78.  
  79. if steamReactor then
  80. button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
  81. button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
  82.  
  83. end
  84. button.screen()
  85. checkMode()
  86. reactorOnOff()
  87. menuMode()
  88. end
  89.  
  90. function turbineAutoMenu()
  91. m.setTextScale(1)
  92. button.clearTable()
  93. button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
  94. button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
  95. button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
  96. button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
  97. button.screen()
  98. checkMode()
  99. menuMode()
  100. end
  101.  
  102. function turbineManualMenu()
  103. m.setTextScale(1)
  104. button.clearTable()
  105. button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
  106. button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
  107. button.setTable("Reactor", reactorMenu, "", 5, 18, 19, 19)
  108. button.setTable("Turbine", turbineMenu, "", 22, 35, 19, 19)
  109. button.setTable("Online", setTurbineOnline, "", 3, 13, 8, 8)
  110. button.setTable("Offline", setTurbineOffline, "", 15, 25, 8, 8)
  111. button.setTable("Coils On", coilsOn, "", 3, 13, 10, 10)
  112. button.setTable("Coils Off", coilsOff, "", 15, 25, 10, 10)
  113. button.screen()
  114. checkMode()
  115. turbineOnOff()
  116. coilsOnOff()
  117. menuMode()
  118. end
  119.  
  120. function reactorMenu()
  121. menuType = "Reactor"
  122. displayScreen()
  123. end
  124.  
  125. function turbineMenu()
  126. menuType = "Turbine"
  127. displayScreen()
  128. end
  129.  
  130. function online()
  131. r.setActive(true)
  132. --button.flash("Online")
  133. end
  134.  
  135. function offline()
  136. r.setActive(false)
  137. --button.flash("Offline")
  138. end
  139.  
  140. function setTurbineOnline()
  141. for k,v in pairs(t) do
  142. v.setActive(true)
  143. end
  144. --button.flash("Online")
  145. end
  146.  
  147. function setTurbineOffline()
  148. for k,v in pairs(t) do
  149. v.setActive(false)
  150. end
  151. --button.flash("Offline")
  152. end
  153.  
  154. function reactorOnOff()
  155. button.setButton("Online", r.getActive())
  156. button.setButton("Offline", not r.getActive())
  157. end
  158.  
  159. function turbineOnOff()
  160. button.setButton("Online", t[1].getActive())
  161. button.setButton("Offline", not t[1].getActive())
  162. end
  163.  
  164. function coilsOnOff()
  165. button.setButton("Coils On", t[1].getInductorEngaged())
  166. button.setButton("Coils Off", not t[1].getInductorEngaged())
  167. end
  168.  
  169. function coilsOn()
  170. for k,v in pairs(t) do
  171. v.setInductorEngaged(true)
  172. end
  173. end
  174.  
  175. function coilsOff()
  176. for k,v in pairs(t) do
  177. v.setInductorEngaged(false)
  178. end
  179. end
  180.  
  181. function menuMode()
  182. if steamReactor then
  183. if menuType == "Reactor" then
  184. button.setButton("Reactor", true)
  185. button.setButton("Turbine", false)
  186. else
  187. button.setButton("Reactor", false)
  188. button.setButton("Turbine", true)
  189. end
  190. end
  191. end
  192.  
  193. function setRods(setLevel)
  194. print("Setting Rod Level: "..setLevel)
  195. button.flash(tostring(setLevel))
  196. r.setAllControlRodLevels(setLevel)
  197. fuelRodLevel()
  198. end
  199.  
  200. function rodPlus()
  201. button.flash("+")
  202. r.setAllControlRodLevels(rodLevel+1)
  203. fuelRodLevel()
  204. end
  205.  
  206. function rodMinus()
  207. button.flash("-")
  208. r.setAllControlRodLevels(rodLevel-1)
  209. fuelRodLevel()
  210. end
  211.  
  212. function checkMode()
  213. button.toggleButton(mode)
  214. end
  215.  
  216. function manualMode()
  217. mode = "Manual"
  218. manualMenu()
  219. end
  220.  
  221. function autoMode()
  222. mode = "Automatic"
  223. displayScreen()
  224. end
  225.  
  226. function comma_value(amount)
  227. local formatted = amount
  228. local swap = false
  229. if formatted < 0 then
  230. formatted = formatted*-1
  231. swap = true
  232. end
  233. while true do
  234. formatted, k = string.gsub(formatted, "^(%d+)(%d%d%d)", '%1,%2')
  235. if k == 0 then
  236. break
  237. end
  238. end
  239. if swap then
  240. formatted = "-"..formatted
  241. end
  242. return formatted
  243. end
  244.  
  245. function displayEn()
  246. m.clear()
  247. m.setCursorPos(1,1)
  248. --print("Energy Use: "..energy)
  249. m.write("Energy Use: ")
  250. if energy < 0 then
  251. m.setTextColor(colors.red)
  252. else
  253. m.setTextColor(colors.green)
  254. end
  255. m.write(comma_value(math.floor(energy)).. "RF/t")
  256. m.setTextColor(colors.white)
  257. m.setCursorPos(1,2)
  258. m.write("Energy Stored: "..energyStoredPercent.."%")
  259. if menuType == "Reactor" then
  260. m.setCursorPos(1,3)
  261. m.write("Reactor is: ")
  262. if reactorOnline then
  263. m.setTextColor(colors.green)
  264. m.write("Online")
  265. else
  266. m.setTextColor(colors.red)
  267. m.write("Offline")
  268. end
  269. m.setTextColor(colors.white)
  270. m.setCursorPos(22,1)
  271. if steamReactor then
  272. m.write("Steam: ")
  273. m.setTextColor(colors.green)
  274. m.write(comma_value(math.floor(RFProduction)).."MB/t")
  275. else
  276. m.write("RF Gen: ")
  277. m.setTextColor(colors.green)
  278. m.write(comma_value(math.floor(RFProduction)).."RF/t")
  279. end
  280. m.setTextColor(colors.white)
  281. m.setCursorPos(22,2)
  282. m.write("Core Temp: "..math.floor(coreTemp).."c")
  283. m.setCursorPos(22,3)
  284. m.write("Fuel Use: "..fuelUse.."MB/t")
  285. else
  286. m.setCursorPos(1,3)
  287. m.write("Turbine is: ")
  288. if turbineOnline then
  289. m.setTextColor(colors.green)
  290. m.write("Online")
  291. else
  292. m.setTextColor(colors.red)
  293. m.write("Offline")
  294. end
  295. m.setCursorPos(1,4)
  296. m.setTextColor(colors.white)
  297. m.write("Reactor is: ")
  298. if reactorOnline then
  299. m.setTextColor(colors.green)
  300. m.write("Online")
  301. else
  302. m.setTextColor(colors.red)
  303. m.write("Offline")
  304. end
  305. m.setTextColor(colors.white)
  306. m.setCursorPos(22,1)
  307. m.write("RFGen: ")
  308. m.setTextColor(colors.green)
  309. m.write(comma_value(math.floor(turbineRFGen)).."RF/t")
  310. m.setTextColor(colors.white)
  311. m.setCursorPos(22,2)
  312. m.write("Rotor: "..comma_value(math.floor(turbineRotorSpeed)).." RPM")
  313. m.setCursorPos(22,3)
  314. m.write("Steam: "..comma_value(turbineFluidRate).."MB/t")
  315. end
  316.  
  317. end
  318.  
  319. function checkEn()
  320. local tempEnergy = 0
  321. energyStored = p.getEnergyStored()
  322. energyMax = p.getMaxEnergyStored()
  323. energyStoredPercent = math.floor((energyStored/energyMax)*100)
  324. RFProduction = r.getEnergyProducedLastTick()
  325. fuelUse = r.getFuelConsumedLastTick()
  326. fuelUse = math.floor(fuelUse*100)
  327. fuelUse = fuelUse/100
  328. coreTemp = r.getFuelTemperature()
  329. reactorOnline = r.getActive()
  330. tempEnergy = p.getEnergyStored()
  331. sleep(0.1)
  332. energy = (p.getEnergyStored()-tempEnergy)/2
  333. energy = energy*numCapacitors
  334. if steamReactor then
  335. turbineOnline = t[1].getActive()
  336. turbineRotorSpeed = t[1].getRotorSpeed()
  337. turbineRFGen = t[1].getEnergyProducedLastTick()
  338. turbineFluidRate = t[1].getFluidFlowRate()
  339. end
  340. end
  341.  
  342. function fuelRodLevel()
  343. rodLevel = r.getControlRodLevel(0)
  344. --print(rodLevel)
  345. m.setCursorPos(30,5)
  346. m.write(tostring(rodLevel).."%")
  347. m.setBackgroundColor(colors.white)
  348. m.setCursorPos(28,6)
  349. m.write(" ")
  350. for i = 1,10 do
  351. m.setCursorPos(28,i+6)
  352. m.setBackgroundColor(colors.white)
  353. m.write(" ")
  354. m.setBackgroundColor(colors.yellow)
  355. m.write(" ")
  356. if rodLevel/10 >= i then
  357. m.setBackgroundColor(colors.red)
  358. else
  359. m.setBackgroundColor(colors.yellow)
  360. end
  361. m.write(" ")
  362. m.setBackgroundColor(colors.yellow)
  363. m.write(" ")
  364. m.setBackgroundColor(colors.white)
  365. m.write(" ")
  366. end
  367. m.setCursorPos(28,17)
  368. m.write(" ")
  369. m.setBackgroundColor(colors.black)
  370. end
  371.  
  372. function turbineInductorDisplay()
  373. turbineInductor = t[1].getInductorEngaged()
  374. m.setCursorPos(30,5)
  375. if turbineInductor then
  376. m.write("On")
  377. else
  378. m.write("Off")
  379. end
  380. m.setBackgroundColor(colors.gray)
  381. m.setCursorPos(28,6)
  382. m.write(" ")
  383. for i = 1,7 do
  384. m.setCursorPos(28,i+6)
  385. m.setBackgroundColor(colors.gray)
  386. m.write(" ")
  387. m.setBackgroundColor(colors.lightGray)
  388. m.write(" ")
  389. if i % 2 == 0 then
  390. m.setBackgroundColor(colors.gray)
  391. end
  392. m.write(" ")
  393. m.setBackgroundColor(colors.gray)
  394. m.write(" ")
  395. if i % 2 ~= 0 then
  396. m.setBackgroundColor(colors.lightGray)
  397. end
  398. m.write(" ")
  399. m.setBackgroundColor(colors.lightGray)
  400. m.write(" ")
  401. m.setBackgroundColor(colors.gray)
  402. m.write(" ")
  403. end
  404. for i = 8,10 do
  405. m.setCursorPos(28,i+6)
  406. m.setBackgroundColor(colors.gray)
  407. m.write(" ")
  408. m.setBackgroundColor(colors.lightGray)
  409. m.write(" ")
  410. if turbineInductor then
  411. m.setBackgroundColor(colors.red)
  412. else
  413. m.setBackgroundColor(colors.blue)
  414. end
  415. m.write(" ")
  416. m.setBackgroundColor(colors.gray)
  417. m.write(" ")
  418. if turbineInductor then
  419. m.setBackgroundColor(colors.red)
  420. else
  421. m.setBackgroundColor(colors.blue)
  422. end
  423. m.write(" ")
  424. m.setBackgroundColor(colors.lightGray)
  425. m.write(" ")
  426. m.setBackgroundColor(colors.gray)
  427. m.write(" ")
  428. end
  429. m.setCursorPos(28,17)
  430. m.write(" ")
  431. m.setBackgroundColor(colors.black)
  432. end
  433. function getClick()
  434. local event, side, x, y = os.pullEvent("monitor_touch")
  435. button.checkxy(x,y)
  436. end
  437.  
  438. function findOptFuelRods()
  439. m.clear()
  440. r.setActive(false)
  441. checkEn()
  442. displayEn()
  443. fuelRodLevel()
  444. while r.getFuelTemperature() > 99 do
  445. for i= 1,3 do
  446. checkEn()
  447. displayEn()
  448. fuelRodLevel()
  449. m.setCursorPos(3,6)
  450. m.write("Finding Optimal Rod Level")
  451. m.setCursorPos(3,7)
  452. m.write("Core Temp: "..r.getFuelTemperature())
  453. m.setCursorPos(3,8)
  454. m.write("Waiting for 99c")
  455. sleep(1)
  456. end
  457. end
  458. while r.getHotFluidAmount() > 10000 do
  459. for i = 1,3 do
  460. checkEn()
  461. displayEn()
  462. fuelRodLevel()
  463. m.setCursorPos(3,6)
  464. m.write("Finding Optimal Rod Level, please wait....")
  465. m.setCursorPos(3,7)
  466. m.write("Fluid Amount: "..comma_value(r.getHotFluidAmount()).."mb")
  467. m.setCursorPos(3,8)
  468. m.write("Waiting for 10,000mb")
  469. sleep(1)
  470. end
  471. end
  472. r.setAllControlRodLevels(99)
  473. r.setActive(true)
  474.  
  475. while r.getFuelTemperature() < 100 do
  476. for i = 1,5 do
  477. checkEn()
  478. displayEn()
  479. fuelRodLevel()
  480. m.setCursorPos(3,6)
  481. m.write("Set all rod levels to 99")
  482. m.setCursorPos(3,7)
  483. m.write("Waiting 5 seconds...")
  484. sleep(1)
  485. end
  486. end
  487. for i = 1,5 do
  488. checkEn()
  489. displayEn()
  490. fuelRodLevel()
  491. m.setCursorPos(3,6)
  492. m.write("Set all rod levels to 99")
  493. m.setCursorPos(3,7)
  494. m.write("Waiting 5 seconds...")
  495. sleep(1)
  496. end
  497. local tempMB = r.getEnergyProducedLastTick()
  498. print(tempMB.."MB/t of steam")
  499. local tempRodLevels = math.floor(2000/tempMB)
  500. print("2000/"..tempMB.." = "..tempRodLevels)
  501. tempRodLevels = 100-tempRodLevels+5
  502. print("Adding 5 to Rod Levels: "..math.floor(tempRodLevels))
  503. r.setAllControlRodLevels(math.floor(tempRodLevels))
  504. print("Waiting 10 seconds to confirm...")
  505. for i = 1,10 do
  506. checkEn()
  507. displayEn()
  508. fuelRodLevel()
  509. m.setCursorPos(3,6)
  510. m.write("Estimated Level: "..tempRodLevels)
  511. m.setCursorPos(3,7)
  512. m.write("Waiting 10 seconds...")
  513. sleep(1)
  514. end
  515. tempMB = r.getEnergyProducedLastTick()
  516. while tempMB > 2000 do
  517. tempRodLevels = tempRodLevels+1
  518. r.setAllControlRodLevels(math.floor(tempRodLevels))
  519. print("Setting Rod Levels to: "..tempRodLevels)
  520. for i = 1,5 do
  521. checkEn()
  522. displayEn()
  523. fuelRodLevel()
  524. m.setCursorPos(3,6)
  525. m.write("Getting below 2000mb/t")
  526. m.setCursorPos(3,7)
  527. m.write("Currently at: "..tempMB)
  528. sleep(1)
  529. end
  530. tempMB = r.getEnergyProducedLastTick()
  531. end
  532. while tempMB < 2000 do
  533. tempRodLevels = tempRodLevels -1
  534. r.setAllControlRodLevels(math.floor(tempRodLevels))
  535. print("Setting Rod Levels to: "..tempRodLevels)
  536. for i = 1,5 do
  537. checkEn()
  538. displayEn()
  539. fuelRodLevel()
  540. m.setCursorPos(3,6)
  541. m.write("Getting Above 2000mb/t")
  542. m.setCursorPos(3,7)
  543. m.write("Currently at: "..tempMB)
  544. sleep(1)
  545. end
  546. tempMB = r.getEnergyProducedLastTick()
  547. end
  548. OptFuelRodLevel = 100 - ((100 - tempRodLevels) * #t)
  549. --OptFuelRodLevel = tempRodLevels
  550. end
  551.  
  552.  
  553. function autoReactor()
  554. if not steamReactor then
  555. r.setAllControlRodLevels(0)
  556. if energyStoredPercent < turnOnAt then
  557. if not reactorOnline then
  558. online()
  559. end
  560. end
  561. if energyStoredPercent > turnOffAt then
  562. if reactorOnline then
  563. offline()
  564. end
  565. end
  566. else
  567. r.setAllControlRodLevels(OptFuelRodLevel)
  568. if energyStoredPercent < turnOnAt then
  569. --online()
  570. setTurbineOnline()
  571. coilsOn()
  572. end
  573. if energyStoredPercent > turnOffAt then
  574. --if turbineRotorSpeed > 1800 then
  575. -- offline()
  576. --else
  577. -- online()
  578. --end
  579. setTurbineOnline()
  580. coilsOff()
  581. end
  582. if turbineRotorSpeed > targetSpeed then
  583. offline()
  584. else
  585. online()
  586. end
  587. end
  588. end
  589.  
  590. function displayScreen()
  591. -- repeat
  592. checkEn()
  593. displayEn()
  594. if menuType == "Reactor" then
  595. fuelRodLevel()
  596. if mode == "Automatic" then
  597. autoMenu()
  598. autoReactor()
  599. else
  600. manualMenu()
  601. end
  602.  
  603. else
  604. turbineInductorDisplay()
  605. if mode == "Automatic" then
  606. turbineAutoMenu()
  607. autoReactor()
  608. else
  609. turbineManualMenu()
  610. end
  611.  
  612. end
  613.  
  614. timerCode = os.startTimer(1)
  615. local event, side, x, y
  616. repeat
  617. event, side, x, y = os.pullEvent()
  618. --print(event)
  619. if event == "timer" then
  620. --print(timerCode..":"..side)
  621. if timerCode ~= side then
  622. --print("Wrong Code")
  623. else
  624. --print("Right Code")
  625. end
  626. end
  627. until event~= "timer" or timerCode == side
  628. if event == "monitor_touch" then
  629. --print(x..":"..y)
  630. button.checkxy(x,y)
  631. end
  632. -- until event ~= "timer"
  633. end
  634.  
  635. if steamReactor then
  636. for k,v in pairs(turbineNames) do
  637. t[k] = peripheral.wrap(v)
  638. end
  639.  
  640. findOptFuelRods()
  641. end
  642.  
  643. while true do
  644. displayScreen()
  645. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement