[Reactors] Автоматическое отключение реактора при нехватке хладагента
Автор: GooodGame · Обновлён:
Данный гайд поможет предотвратить взрыв реактора из-за случайного окончания запаса лазурита. Принцип работы основан на автоматическом контроле уровня хладагента во входном жидкостном шлюзе реактора с помощью робота из мода OpenComputers. При снижении уровня ниже заданного порога робот «выключает» реактор, снося шлюз (это единственный найденный способ выключения). Для удобства также реализована отправка уведомлений в Telegram, чтобы вы могли своевременно зайти в игру.
Подготовка робота и схемы
- Робот (компоненты перечислены ниже)
- Ваджра
- Зарядник для робота
- Рычаг
- Флакс точка для зарядника
Сборка робота
Сначала необходимо собрать самого робота в сборщике из мода OpenComputers.

В сборщик вставляются следующие компоненты:
- Системный блок (3-й уровень)
- Центральный процессор (ЦП) (3-й уровень)
- Память (уровень 3.5) — 2 шт.
- Видеокарта (3-й уровень)
- Жёсткий диск (3-й уровень)
- Интернет-карта
- Клавиатура
- Монитор (1-й уровень)
- Дисковод
- EEPROM (Lua BIOS)
- Улучшение «Контроллер бака»
- Улучшение «Контроллер инвентаря»
- Улучшение «Инвентарь»
Полная схема должна выглядеть так:

Нажмите «Собрать» и дождитесь готовности робота. Примечание: уровни компонентов можно использовать и ниже, но в этом нет необходимости, так как они крафтятся легко.
Размещение схемы и установка OpenOS
- Поставьте робота прямо под входной шлюз с хладагентом.
- Поставьте зарядник вплотную к роботу с любой стороны (убедитесь, что зарядник заряжает со стороны, где расположены зелёные квадратики).
- Поставьте на зарядник рычаг и флакс точку, затем включите рычаг.
- Откройте инвентарь робота и вставьте дискету OpenOS в слот для дискет.

В терминале введите install, затем подтвердите отправку, нажав Y. В конце подтвердите перезагрузку, также нажав Y.
- Откройте инвентарь робота и положите ваджру в нужный слот.

Итоговый вид схемы:


Установка и настройка программы
Программа написана максимально просто и изначально создавалась для личного использования, поэтому в ней отсутствуют проверки на ошибки конфигурации (например, отсутствие компонентов или ваджры).
Исходный код находится в спойлере ниже. Скопируйте его и сохраните в файл reactor.lua. Загрузите файл на любой удобный сервис, который выдаёт прямую ссылку на его содержимое, затем выполните в терминале робота команду:
wget <прямая_ссылка_на_файл> reactor
Если вы не хотите размещать файл в интернете, выполните команду edit reactor, вставьте код из спойлера, сохраните файл и выйдите из редактора.
Исходный код программы
local component = require("component")
local tank = component.tank_controller
local internet = require("internet")
local robot = require("robot")
--config
local tg_token = "токен вашего бота"
local chat_id = "ваш чат-id"
local update_interval = 1 -- интервал обновления информации о шлюзе в секундах
local danger_level = 100000 -- нижний порог хладагента в шлюзе в mB. Если упадёт ниже — реактор сломается и выключится
local function urlEncode(str)
if not str then return '' end
return string.gsub(str, "([^%w%-%_%.~])", function(c)
return string.format("%%%02X", string.byte(c))
end)
end
local function sendToTelegram(text)
local encoded_text = urlEncode(text)
local url = string.format(
"https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s",
tg_token,
chat_id,
encoded_text
)
local response, error_msg = internet.request(url)
if response then
print("Сообщение в тг отправлено!")
else
print("Ошибка отправки сообщения тг: " .. (error_msg or "неизвестная ошибка"))
end
end
local function getTankInfo()
if tank.getTankLevel(1) <= danger_level then
print("[ТРЕВОГА!] В реакторе заканчивается хладагент! Ломаю обшивку!")
sendToTelegram("⚠️⚠️⚠️ [ТРЕВОГА!] В реакторе заканчивается хладагент! Ломаю обшивку!")
if robot.swingUp() then
robot.suckUp()
print("Обшивка сломана!")
sendToTelegram("Обшивка сломана! Хате не пизда, иди чини!")
os.exit()
else
print("Обшивка не сломана! Хате пизда!")
sendToTelegram("Обшивка не сломана! Хате пизда! 💥💥💥 Можешь ливать нахуй!")
os.exit()
end
return
end
end
print("Скрипт запущен!")
sendToTelegram("Скрипт запущен!")
while true do
getTankInfo()
os.sleep(update_interval)
end
Параметры контроля и уведомления Telegram
В начале программы находятся настройки:
- Токен вашего бота в Telegram (создать бота и получить токен можно у бота @BotFather)).
- Ваш чат-айди (получить его можно у бота @getmyid_bot)).
- Интервал обновления информации о жидкости в шлюзе (по умолчанию 1 секунда, этого достаточно).
- Порог хладагента в mB (миллибакетах). Автор установил значение 100 000, но вы можете изменить его по своему усмотрению, однако не стоит ставить слишком маленькое значение.

Обязательно измените токен бота и чат-айди на свои. Интервал обновления и нижний порог жидкости можно изменить по желанию. Если вам не нужны сообщения в Telegram, просто удалите или закомментируйте вызовы функции sendToTelegram().
Запуск программы
Запустите программу, введя в терминале робота команду reactor. Вы увидите сообщение об успешном запуске скрипта. Теперь ваш реактор под защитой.

Срабатывание защиты и предупреждения
Если уровень жидкости в шлюзе упадёт ниже критического значения (указанного в конфигурации), робот сломает шлюз ваджрой, и реактор выключится. Шлюз останется в инвентаре робота, вы можете забрать его позже. В Telegram вы получите уведомление:

Если по какой-либо причине робот не сможет сломать шлюз, он также отправит сообщение с предупреждением:

Если у вас остались вопросы или пожелания, напишите в Discord: @gooodgame.


