Advertisement
DreamWolf

Draconic reactor

Jan 1st, 2025 (edited)
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 KB | None | 0 0
  1. local component = require("component")
  2. local term = require("term")
  3.  
  4. -- Проверка наличия компонентов
  5. if not component.isAvailable("draconic_reactor") then
  6. print("Ошибка: адаптер реактора не подключён.")
  7. return
  8. end
  9.  
  10. if not component.isAvailable("flux_gate") then
  11. print("Ошибка: адаптер флакс-гейта не подключён.")
  12. return
  13. end
  14.  
  15. -- Подключаем адаптеры реактора и флакс-гейта
  16. local reactor = component.draconic_reactor
  17. local fluxGateAddress
  18. for address in component.list("flux_gate") do
  19. fluxGateAddress = address
  20. break
  21. end
  22.  
  23. if not fluxGateAddress then
  24. print("Ошибка: не удалось обнаружить подключённые флакс-гейты.")
  25. return
  26. end
  27.  
  28. local fluxGate = component.proxy(fluxGateAddress)
  29. print("Используем флакс-гейт с адресом: " .. fluxGateAddress)
  30.  
  31. -- Константы
  32. local DEFAULT_TEMPERATURE = 8000
  33. local MAX_SAFE_TEMPERATURE = 8800
  34. local MIN_FLOW_RATE = 1000 -- Минимальный поток для стабильной работы
  35. local FLOW_STEP = 10 -- Шаг изменения потока (в RF/t)
  36. local CRITICAL_TEMPERATURE = 8800 -- Новая критическая температура
  37. local STOP_FLOW_RATE = 10000 -- Поток энергии, при котором флакс-гейт полностью останавливает выход
  38.  
  39. -- Хранение значений температуры для вычисления среднего
  40. local temperatureHistory = {}
  41. local historySize = 5
  42.  
  43. -- Функция для получения данных о реакторе
  44. local function getReactorInfo()
  45. return reactor.getReactorInfo()
  46. end
  47.  
  48. -- Функция для настройки потока энергии через флакс-гейт
  49. local function setFluxGateFlow(rate)
  50. fluxGate.setSignalLowFlow(rate)
  51. end
  52.  
  53. -- Функция для добавления температуры в историю и вычисления среднего значения
  54. local function updateTemperatureHistory(temperature)
  55. table.insert(temperatureHistory, temperature)
  56. if #temperatureHistory > historySize then
  57. table.remove(temperatureHistory, 1) -- Удаляем старые записи, чтобы список не становился слишком длинным
  58. end
  59. end
  60.  
  61. -- Функция для вычисления среднего значения температуры
  62. local function getAverageTemperature()
  63. local sum = 0
  64. for _, temp in ipairs(temperatureHistory) do
  65. sum = sum + temp
  66. end
  67. return sum / #temperatureHistory
  68. end
  69.  
  70. -- Функция для ввода начального потока
  71. local function getInitialFlowRate()
  72. local validInput = false
  73. local flowRate = MIN_FLOW_RATE
  74.  
  75. while not validInput do
  76. print("Введите начальный поток энергии (минимум " .. MIN_FLOW_RATE .. " RF/t):")
  77. local input = io.read()
  78. flowRate = tonumber(input)
  79.  
  80. if flowRate and flowRate >= MIN_FLOW_RATE then
  81. validInput = true
  82. else
  83. print("Ошибка: введите корректное значение потока.")
  84. end
  85. end
  86.  
  87. return flowRate
  88. end
  89.  
  90. -- Основное меню
  91. local function mainMenu()
  92. term.clear()
  93. print("Программа управления реактором и флакс-гейтом")
  94. print("1. Просмотреть текущую температуру и генерацию энергии")
  95. print("2. Установить целевую температуру")
  96. print("3. Выход")
  97. end
  98.  
  99. -- Основной цикл программы
  100. local function main()
  101. -- Запрос начального потока энергии
  102. local flowRate = getInitialFlowRate()
  103. local targetTemperature = DEFAULT_TEMPERATURE -- Начальная целевая температура
  104. local skipChecks = 0 -- Счётчик пропуска проверок
  105.  
  106. -- Постоянный цикл без необходимости нажатия Enter
  107. while true do
  108. -- Получаем текущую информацию о реакторе
  109. local info = getReactorInfo()
  110. if info then
  111. local currentTemperature = info.temperature
  112. local generationRate = info.generationRate
  113.  
  114. -- Выводим текущую температуру и генерацию
  115. term.clear()
  116. print("Программа управления реактором и флакс-гейтом")
  117. print("Текущая температура ядра: " .. currentTemperature .. "°C")
  118. print("Генерация энергии: " .. generationRate .. " RF/t")
  119. print("Целевая температура: " .. targetTemperature .. "°C")
  120.  
  121. -- Обновляем историю температур
  122. updateTemperatureHistory(currentTemperature)
  123.  
  124. -- Если температура превышает критическую, останавливаем поток энергии
  125. if currentTemperature >= CRITICAL_TEMPERATURE then
  126. print("Критическая температура! Останавливаем поток энергии на " .. STOP_FLOW_RATE .. " RF/t.")
  127. setFluxGateFlow(STOP_FLOW_RATE)
  128. elseif currentTemperature >= 8000 and currentTemperature < CRITICAL_TEMPERATURE then
  129. -- Если температура в пределах от 8000 до 8800 градусов, уменьшаем поток на 10
  130. print("Температура в пределах 8000-8800°C, уменьшаем поток энергии на 10.")
  131. flowRate = flowRate - 10
  132. elseif currentTemperature < 7800 then
  133. -- Если температура ниже 7800, увеличиваем поток на 20
  134. print("Температура ниже 7800°C, поток энергии увеличиваем на 20.")
  135. flowRate = flowRate + 20
  136. end
  137.  
  138. -- Если температура в пределах 7800-8000, ничего не меняем
  139. if currentTemperature >= 7800 and currentTemperature < 8000 then
  140. print("Температура в пределах 7800-8000°C, поток энергии не изменяется.")
  141. end
  142.  
  143. -- Устанавливаем минимальный поток
  144. flowRate = math.max(flowRate, MIN_FLOW_RATE)
  145. setFluxGateFlow(flowRate)
  146.  
  147. print("Установленный поток энергии: " .. flowRate .. " RF/t.")
  148. else
  149. print("Ошибка: не удалось получить данные о реакторе.")
  150. end
  151.  
  152. -- Интервал между проверками
  153. os.sleep(1)
  154.  
  155. -- Постоянно обновляем информацию
  156. mainMenu()
  157. end
  158. end
  159.  
  160. main()
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement