Advertisement
DreamWolf

Плавное затухание реактора

Jan 3rd, 2025
4
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1. local component = require("component")
  2. local term = require("term")
  3. local os = require("os")
  4. local io = require("io")
  5. local event = require("event") -- для отслеживания ввода без блокировки
  6.  
  7. -- Подключение реактора
  8. local reactor = component.br_reactor
  9. if not reactor then
  10. print("Ошибка: Реактор не найден. Убедитесь, что реактор подключен к компьютеру.")
  11. return
  12. end
  13.  
  14. -- Путь к файлу для сохранения максимальной ёмкости
  15. local maxEnergyFile = "/home/max_energy.txt"
  16.  
  17. -- Флаг для выхода из программы
  18. local shouldExit = false
  19.  
  20. -- Функция для получения сохранённой максимальной ёмкости
  21. local function getSavedMaxEnergy()
  22. local file = io.open(maxEnergyFile, "r")
  23. if file then
  24. local savedEnergy = tonumber(file:read("*all"))
  25. file:close()
  26. return savedEnergy
  27. end
  28. return nil
  29. end
  30.  
  31. -- Функция для сохранения максимальной ёмкости
  32. local function saveMaxEnergy(maxEnergy)
  33. local file = io.open(maxEnergyFile, "w")
  34. if file then
  35. file:write(tostring(maxEnergy))
  36. file:close()
  37. else
  38. print("Ошибка при записи в файл.")
  39. end
  40. end
  41.  
  42. -- Функция для получения процента энергии
  43. local function getEnergyPercentage(maxEnergy)
  44. local currentEnergy = reactor.getEnergyStored() -- Текущая энергия в реакторе
  45. if not currentEnergy then
  46. print("Ошибка: Не удалось получить текущую энергию из реактора.")
  47. return nil
  48. end
  49. -- Рассчитываем процент энергии
  50. return (currentEnergy / maxEnergy) * 100
  51. end
  52.  
  53. -- Функция для обновления уровня всех стержней
  54. local function updateControlRodLevels(energyPercentage)
  55. local rodLevel = math.floor(energyPercentage) -- Уровень стержней от 0 до 100
  56. reactor.setAllControlRodLevels(rodLevel) -- Устанавливаем уровень для всех стержней
  57. end
  58.  
  59. -- Функция для запроса максимальной ёмкости при первом запуске
  60. local function askForMaxEnergy()
  61. print("Какое максимальное количество энергии доступно в реакторе?")
  62. local input = term.read()
  63. input = tonumber(input)
  64. if input then
  65. saveMaxEnergy(input) -- Сохраняем значение
  66. return input
  67. else
  68. print("Ошибка: Введите корректное число.")
  69. return nil
  70. end
  71. end
  72.  
  73. -- Функция для обработки ввода для выхода из программы
  74. local function exitProgram(eventID, address, char, code)
  75. if char == 49 then -- если нажата клавиша "1"
  76. print("\nЗавершаю программу...")
  77. shouldExit = true -- устанавливаем флаг выхода
  78. event.ignore("key_down", exitProgram) -- Отписываемся от события
  79. end
  80. end
  81.  
  82. -- Основная функция программы
  83. local function main()
  84. local maxEnergy = getSavedMaxEnergy()
  85.  
  86. if not maxEnergy then
  87. maxEnergy = askForMaxEnergy()
  88. if not maxEnergy then return end
  89. else
  90. print("Последнее заданное значение максимальной ёмкости: " .. maxEnergy)
  91. print("Для изменения введите новое значение или нажмите Enter для использования последнего.")
  92. local input = term.read()
  93. if input ~= "\n" then
  94. maxEnergy = tonumber(input)
  95. if not maxEnergy then
  96. print("Ошибка: Введите корректное число.")
  97. return
  98. end
  99. saveMaxEnergy(maxEnergy)
  100. end
  101. end
  102.  
  103. -- Начинаем слушать события
  104. event.listen("key_down", exitProgram) -- Слушаем нажатие клавиши
  105.  
  106. while not shouldExit do
  107. term.clear()
  108. print("Управление реактором Big Reactors")
  109. print("Нажмите 1 для выхода из программы.")
  110.  
  111. -- Получаем процент заполненности
  112. local energyPercentage = getEnergyPercentage(maxEnergy)
  113. if not energyPercentage then
  114. print("Ошибка: Невозможно рассчитать процент энергии.")
  115. os.sleep(5)
  116. return
  117. end
  118.  
  119. -- Обновляем уровень стержней
  120. updateControlRodLevels(energyPercentage)
  121.  
  122. -- Выводим информацию
  123. print(string.format("Энергия в реакторе: %.2f%%", energyPercentage))
  124. print(string.format("Уровень стержней: %d%%", energyPercentage))
  125.  
  126. os.sleep(5) -- Задержка перед следующим обновлением
  127. end
  128.  
  129. print("Программа завершена.")
  130. end
  131.  
  132. -- Запуск программы
  133. main()
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement