imrskull

robotkiller

Nov 17th, 2025 (edited)
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- robotkiller.lua
  2. -- Робот стоит лицом к рельсам и ломает вагонетки Ваджрой.
  3. -- Если инвентарь забит больше чем на 50% (кроме слота с Ваджрой),
  4. -- он поворачивается вправо, выкидывает весь лут в сундук и возвращается назад.
  5.  
  6. local robot = require("robot")
  7. local event = require("event")
  8.  
  9. -- В каком слоте лежит Ваджра
  10. local TOOL_SLOT = 1
  11.  
  12. -- Проверять заполненность инвентаря раз в N тиков
  13. -- 1 тик цикла ≈ 0.2 сек, 50 тиков ≈ 10 секунд
  14. local CHECK_EVERY_TICKS = 50
  15.  
  16. -- ===== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ =====
  17.  
  18. local function log(msg)
  19.   print(os.date("[%H:%M:%S] ") .. msg)
  20. end
  21.  
  22. -- Проверяем, заполнен ли инвентарь > 50% (кроме слота с Ваджрой)
  23. local function needDump()
  24.   local invSize   = robot.inventorySize()
  25.   local lootSlots = invSize - 1       -- слоты 2..invSize
  26.   local used      = 0
  27.  
  28.   for slot = 2, invSize do
  29.     if robot.count(slot) > 0 then
  30.       used = used + 1
  31.     end
  32.   end
  33.  
  34.   log(string.format("Занято %d из %d лут-слотов.", used, lootSlots))
  35.  
  36.   return used >= math.floor(lootSlots / 2)
  37. end
  38.  
  39. -- Выгружаем весь лут (кроме Ваджры) в сундук СПРАВА от робота
  40. local function dumpLoot()
  41.   log("Инвентарь заполнен >50%. Выгружаю лут в сундук справа.")
  42.  
  43.   robot.turnRight()  -- поворачиваемся к сундуку
  44.  
  45.   local invSize = robot.inventorySize()
  46.   for slot = 2, invSize do
  47.     local count = robot.count(slot)
  48.     if count > 0 then
  49.       robot.select(slot)
  50.       local ok, reason = robot.drop()
  51.       log(string.format(
  52.         "drop из слота %d, %d шт. -> ok=%s, reason=%s",
  53.         slot, count, tostring(ok), tostring(reason)
  54.       ))
  55.     end
  56.   end
  57.  
  58.   robot.turnLeft()        -- обратно лицом к рельсам
  59.   robot.select(TOOL_SLOT) -- снова выбираем Ваджру
  60. end
  61.  
  62. -- ===== ОСНОВНОЙ ЦИКЛ =====
  63.  
  64. log("=== Робот-уборщик вагонеток запущен ===")
  65. log("Робот должен смотреть на рельсы, сундук с лутом стоит СПРАВА от него.")
  66. log("В слоте " .. TOOL_SLOT .. " лежит Ваджра, установлен Upgrade Tool.")
  67.  
  68. local tick = 0
  69.  
  70. while true do
  71.   tick = tick + 1
  72.  
  73.   -- Всегда держим выбранным слот с Ваджрой
  74.   robot.select(TOOL_SLOT)
  75.  
  76.   -- Бьём всё перед собой (вагонетку)
  77.   local ok, reason = robot.swing()
  78.   if ok then
  79.     log("Удар по entity перед собой (скорее всего вагонетка). reason=" .. tostring(reason))
  80.   end
  81.  
  82.   -- Раз в CHECK_EVERY_TICKS тиков (~10 сек) проверяем инвентарь
  83.   if tick % CHECK_EVERY_TICKS == 0 then
  84.     if needDump() then
  85.       dumpLoot()
  86.     end
  87.   end
  88.  
  89.   -- Пауза 0.2 сек + возможность остановить Ctrl+Alt+C
  90.   local sig = {event.pull(0.2)}
  91.   if sig[1] == "interrupted" then
  92.     log("Получен сигнал interrupted, выхожу.")
  93.     log("=== Робот-уборщик вагонеток завершён ===")
  94.     break
  95.   end
  96. end
  97.  
Advertisement
Add Comment
Please, Sign In to add comment