Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local term = require("term")
- -- Проверка наличия компонентов
- if not component.isAvailable("draconic_reactor") then
- print("Ошибка: адаптер реактора не подключён.")
- return
- end
- if not component.isAvailable("flux_gate") then
- print("Ошибка: адаптер флакс-гейта не подключён.")
- return
- end
- -- Подключаем адаптеры реактора и флакс-гейта
- local reactor = component.draconic_reactor
- local fluxGateAddress
- for address in component.list("flux_gate") do
- fluxGateAddress = address
- break
- end
- if not fluxGateAddress then
- print("Ошибка: не удалось обнаружить подключённые флакс-гейты.")
- return
- end
- local fluxGate = component.proxy(fluxGateAddress)
- print("Используем флакс-гейт с адресом: " .. fluxGateAddress)
- -- Константы
- local DEFAULT_TEMPERATURE = 8000
- local MAX_SAFE_TEMPERATURE = 8800
- local MIN_FLOW_RATE = 1000 -- Минимальный поток для стабильной работы
- local FLOW_STEP = 10 -- Шаг изменения потока (в RF/t)
- local CRITICAL_TEMPERATURE = 8800 -- Новая критическая температура
- local STOP_FLOW_RATE = 10000 -- Поток энергии, при котором флакс-гейт полностью останавливает выход
- -- Хранение значений температуры для вычисления среднего
- local temperatureHistory = {}
- local historySize = 5
- -- Функция для получения данных о реакторе
- local function getReactorInfo()
- return reactor.getReactorInfo()
- end
- -- Функция для настройки потока энергии через флакс-гейт
- local function setFluxGateFlow(rate)
- fluxGate.setSignalLowFlow(rate)
- end
- -- Функция для добавления температуры в историю и вычисления среднего значения
- local function updateTemperatureHistory(temperature)
- table.insert(temperatureHistory, temperature)
- if #temperatureHistory > historySize then
- table.remove(temperatureHistory, 1) -- Удаляем старые записи, чтобы список не становился слишком длинным
- end
- end
- -- Функция для вычисления среднего значения температуры
- local function getAverageTemperature()
- local sum = 0
- for _, temp in ipairs(temperatureHistory) do
- sum = sum + temp
- end
- return sum / #temperatureHistory
- end
- -- Функция для ввода начального потока
- local function getInitialFlowRate()
- local validInput = false
- local flowRate = MIN_FLOW_RATE
- while not validInput do
- print("Введите начальный поток энергии (минимум " .. MIN_FLOW_RATE .. " RF/t):")
- local input = io.read()
- flowRate = tonumber(input)
- if flowRate and flowRate >= MIN_FLOW_RATE then
- validInput = true
- else
- print("Ошибка: введите корректное значение потока.")
- end
- end
- return flowRate
- end
- -- Основное меню
- local function mainMenu()
- term.clear()
- print("Программа управления реактором и флакс-гейтом")
- print("1. Просмотреть текущую температуру и генерацию энергии")
- print("2. Установить целевую температуру")
- print("3. Выход")
- end
- -- Основной цикл программы
- local function main()
- -- Запрос начального потока энергии
- local flowRate = getInitialFlowRate()
- local targetTemperature = DEFAULT_TEMPERATURE -- Начальная целевая температура
- local skipChecks = 0 -- Счётчик пропуска проверок
- -- Постоянный цикл без необходимости нажатия Enter
- while true do
- -- Получаем текущую информацию о реакторе
- local info = getReactorInfo()
- if info then
- local currentTemperature = info.temperature
- local generationRate = info.generationRate
- -- Выводим текущую температуру и генерацию
- term.clear()
- print("Программа управления реактором и флакс-гейтом")
- print("Текущая температура ядра: " .. currentTemperature .. "°C")
- print("Генерация энергии: " .. generationRate .. " RF/t")
- print("Целевая температура: " .. targetTemperature .. "°C")
- -- Обновляем историю температур
- updateTemperatureHistory(currentTemperature)
- -- Если температура превышает критическую, останавливаем поток энергии
- if currentTemperature >= CRITICAL_TEMPERATURE then
- print("Критическая температура! Останавливаем поток энергии на " .. STOP_FLOW_RATE .. " RF/t.")
- setFluxGateFlow(STOP_FLOW_RATE)
- elseif currentTemperature >= 8000 and currentTemperature < CRITICAL_TEMPERATURE then
- -- Если температура в пределах от 8000 до 8800 градусов, уменьшаем поток на 10
- print("Температура в пределах 8000-8800°C, уменьшаем поток энергии на 10.")
- flowRate = flowRate - 10
- elseif currentTemperature < 7800 then
- -- Если температура ниже 7800, увеличиваем поток на 20
- print("Температура ниже 7800°C, поток энергии увеличиваем на 20.")
- flowRate = flowRate + 20
- end
- -- Если температура в пределах 7800-8000, ничего не меняем
- if currentTemperature >= 7800 and currentTemperature < 8000 then
- print("Температура в пределах 7800-8000°C, поток энергии не изменяется.")
- end
- -- Устанавливаем минимальный поток
- flowRate = math.max(flowRate, MIN_FLOW_RATE)
- setFluxGateFlow(flowRate)
- print("Установленный поток энергии: " .. flowRate .. " RF/t.")
- else
- print("Ошибка: не удалось получить данные о реакторе.")
- end
- -- Интервал между проверками
- os.sleep(1)
- -- Постоянно обновляем информацию
- mainMenu()
- end
- end
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement