Лучшие модовые сервера Minecraft

Технологии, Магия, Эволюция, Покемоны
и многие другие режимы уже ждут вас!

Начать играть
Гайды

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

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

Всем ку! Данный гайдик поможет тем, кто не хочет, чтобы его реактор бахнул из-за случайно кончившегося лазурита 😆.

Принцип работы:

Автоматический контроль осуществляется роботом из мода OpenComputers. Робот контролирует уровень хладагента в входном жидкостном шлюзе реактора, и при снижении уровня ниже заданного "выключает" его. Выключение реализовано путём сноса этого самого шлюза (иного способа выключить реактор я не нашёл 🙂). Для удобства я также прикрутил отправку сообщений в Telegram (дабы вы могли если что зайти в игру).

Требования:

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

Реализация схемы:

В первую очередь нам нужно собрать самого робота, делается это сборщике из OC
 

Скрытый текст

image.png.27dd46e51c1408b2f943fe6db5ef64ef.png

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

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

image.png.e4d06ae6ef6df2ec9a8f43ef38b7b90a.png

Далее нажимаем на "Собрать" и ждём, пока наш робот будет готов.
P.S. уровни компонентов можно брать и ниже, но я не вижу в этом смысла, т.к. они крафтятся очень легко. 

Когда робот будет готов переходим к размещению нашей схемы:

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

    image.png.cb3d7d1a34638a86a79137f951acf405.png

    Пишет в терминал install, далее соглашаемся отправив Y, в конце соглашаемся на ребут также отправив Y

  5. Открываем робота и кладём в него ваджру в нужны слот (скрин ниже)
    Скрытый текст

    image.png.976c127d53411f1aa2446b1ac14b60cc.png

 

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

 

Скрытый текст

image.png.e10eface8c8fbde9cdc58ca3a92fd721.pngimage.png.22d95b44d5ef147ac4355729627fe224.png

Собственно всё, наша схема готова, переходим к программе:

 

Программа:


Сама программа выглядит максимально просто и изначально писалась "для себя", поэтому там нет никаких проверок "на дурака", например на случай если каких-то компонентов в роботе не окажется, или вместо ваджры будет другой предмет/ваджры вообще не будет.
Скачиваем программу командо
й 

Цитата
Скрытый текст

Исходный код:

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


 


В самом начале программы мы увидим настройки:

  • Токен вашего бота в телеграмме (создать бота и получить токен можно у бота @BotFather)
  • Ваш чат-айди (Получить ваш чат-айди можно у бота @getmyid_bot)
  • Интервал обновления информации о жидкости в шлюзе (по дефолту 1 секунда, этого хватает)
  • Порог хладагента в mB (миллибакетах), я поставил 100к, можете менять, как вам удобно, но не ставьте слишком маленькое значение.
Скрытый текст

image.png.e2280b7e5908404c9d76bf235b561c8f.png

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

Скрытый текст

image.png.8d8c04dcddb9b2692ff6accead00ae0e.png


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

Скрытый текст

image.png.7bf883202be38443d26f6ad927da234c.png

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

Скрытый текст

image.png.76564bc600e6b57aa990c111a5045322.png


Если остались какие-то вопросы/пожелания - пишите в дискорд @gooodgame

 

 

 

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