Гайды

[Reactors] Автоматическое отключение реактора при нехватке хладагента

Автор: GooodGame · Обновлён:

Данный гайд поможет предотвратить взрыв реактора из-за случайного окончания запаса лазурита. Принцип работы основан на автоматическом контроле уровня хладагента во входном жидкостном шлюзе реактора с помощью робота из мода OpenComputers. При снижении уровня ниже заданного порога робот «выключает» реактор, снося шлюз (это единственный найденный способ выключения). Для удобства также реализована отправка уведомлений в Telegram, чтобы вы могли своевременно зайти в игру.

Подготовка робота и схемы

  • Робот (компоненты перечислены ниже)
  • Ваджра
  • Зарядник для робота
  • Рычаг
  • Флакс точка для зарядника

Сборка робота

Сначала необходимо собрать самого робота в сборщике из мода OpenComputers.

image.png.27dd46e51c1408b2f943fe6db5ef64ef.png

В сборщик вставляются следующие компоненты:

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

Полная схема должна выглядеть так:

image.png.e4d06ae6ef6df2ec9a8f43ef38b7b90a.png

Нажмите «Собрать» и дождитесь готовности робота. Примечание: уровни компонентов можно использовать и ниже, но в этом нет необходимости, так как они крафтятся легко.

Размещение схемы и установка OpenOS

  1. Поставьте робота прямо под входной шлюз с хладагентом.
  2. Поставьте зарядник вплотную к роботу с любой стороны (убедитесь, что зарядник заряжает со стороны, где расположены зелёные квадратики).
  3. Поставьте на зарядник рычаг и флакс точку, затем включите рычаг.
  4. Откройте инвентарь робота и вставьте дискету OpenOS в слот для дискет.
    image.png.cb3d7d1a34638a86a79137f951acf405.png

    В терминале введите install, затем подтвердите отправку, нажав Y. В конце подтвердите перезагрузку, также нажав Y.

  5. Откройте инвентарь робота и положите ваджру в нужный слот.
    image.png.976c127d53411f1aa2446b1ac14b60cc.png

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

Установка и настройка программы

Программа написана максимально просто и изначально создавалась для личного использования, поэтому в ней отсутствуют проверки на ошибки конфигурации (например, отсутствие компонентов или ваджры).

Исходный код находится в спойлере ниже. Скопируйте его и сохраните в файл 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, но вы можете изменить его по своему усмотрению, однако не стоит ставить слишком маленькое значение.
image.png.e2280b7e5908404c9d76bf235b561c8f.png

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

Запуск программы

Запустите программу, введя в терминале робота команду reactor. Вы увидите сообщение об успешном запуске скрипта. Теперь ваш реактор под защитой.

image.png.8d8c04dcddb9b2692ff6accead00ae0e.png

Срабатывание защиты и предупреждения

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

image.png.7bf883202be38443d26f6ad927da234c.png

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

image.png.76564bc600e6b57aa990c111a5045322.png

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

Похожие гайды