Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- robotkiller.lua
- -- Робот стоит лицом к рельсам и ломает вагонетки Ваджрой.
- -- Если инвентарь забит больше чем на 50% (кроме слота с Ваджрой),
- -- он поворачивается вправо, выкидывает весь лут в сундук и возвращается назад.
- local robot = require("robot")
- local event = require("event")
- -- В каком слоте лежит Ваджра
- local TOOL_SLOT = 1
- -- Проверять заполненность инвентаря раз в N тиков
- -- 1 тик цикла ≈ 0.2 сек, 50 тиков ≈ 10 секунд
- local CHECK_EVERY_TICKS = 50
- -- ===== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ =====
- local function log(msg)
- print(os.date("[%H:%M:%S] ") .. msg)
- end
- -- Проверяем, заполнен ли инвентарь > 50% (кроме слота с Ваджрой)
- local function needDump()
- local invSize = robot.inventorySize()
- local lootSlots = invSize - 1 -- слоты 2..invSize
- local used = 0
- for slot = 2, invSize do
- if robot.count(slot) > 0 then
- used = used + 1
- end
- end
- log(string.format("Занято %d из %d лут-слотов.", used, lootSlots))
- return used >= math.floor(lootSlots / 2)
- end
- -- Выгружаем весь лут (кроме Ваджры) в сундук СПРАВА от робота
- local function dumpLoot()
- log("Инвентарь заполнен >50%. Выгружаю лут в сундук справа.")
- robot.turnRight() -- поворачиваемся к сундуку
- local invSize = robot.inventorySize()
- for slot = 2, invSize do
- local count = robot.count(slot)
- if count > 0 then
- robot.select(slot)
- local ok, reason = robot.drop()
- log(string.format(
- "drop из слота %d, %d шт. -> ok=%s, reason=%s",
- slot, count, tostring(ok), tostring(reason)
- ))
- end
- end
- robot.turnLeft() -- обратно лицом к рельсам
- robot.select(TOOL_SLOT) -- снова выбираем Ваджру
- end
- -- ===== ОСНОВНОЙ ЦИКЛ =====
- log("=== Робот-уборщик вагонеток запущен ===")
- log("Робот должен смотреть на рельсы, сундук с лутом стоит СПРАВА от него.")
- log("В слоте " .. TOOL_SLOT .. " лежит Ваджра, установлен Upgrade Tool.")
- local tick = 0
- while true do
- tick = tick + 1
- -- Всегда держим выбранным слот с Ваджрой
- robot.select(TOOL_SLOT)
- -- Бьём всё перед собой (вагонетку)
- local ok, reason = robot.swing()
- if ok then
- log("Удар по entity перед собой (скорее всего вагонетка). reason=" .. tostring(reason))
- end
- -- Раз в CHECK_EVERY_TICKS тиков (~10 сек) проверяем инвентарь
- if tick % CHECK_EVERY_TICKS == 0 then
- if needDump() then
- dumpLoot()
- end
- end
- -- Пауза 0.2 сек + возможность остановить Ctrl+Alt+C
- local sig = {event.pull(0.2)}
- if sig[1] == "interrupted" then
- log("Получен сигнал interrupted, выхожу.")
- log("=== Робот-уборщик вагонеток завершён ===")
- break
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment