Перейти к содержимому

Lockry

Пользователи
  • Публикации

    25
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Lockry


  1. У зардника OC и МФСУ для зарядки используется слот 1.

     

    Я не понимаю, почему у тебя не работает.

     

    Попробуй запустить код из предыдущего поста на полигоне:

     

     

    Стоит МФСУ. Рядом робот, мордой в МФСУ. В руке робота бур.

    tjU1xIniSgo.jpg

    CZoID54aJ6I.jpg

     

     

    В моём случаи зарядник находится с верхней стороны и по этому не работает. А вот с передней работает... Это нормально?


  2. Я как понимаю он пытается доставить бур из зарядника из OC? А я его тестирую с МФСУ... Да, конечно можно и в заряднике, но он очень долго заряжает его. Можно как-нибудь с МФСУ провернуть? 


  3. Если игрок заберет из зарядника инструмент, программа упадет.

    Поэтому, надо проверять наличие инструмента в слоте или забирать из зарядника.

    local component = require('component')
    local computer = require('computer')
    local i_c = component.inventory_controller
    local robot = component.robot
    local i_size = 1 -- количество слотов у зарядника, чтобы не путать с другими блоками
     
    local function charge()
      local st = nil
      for d = 1, 4 do -- найти сторону с зарядником
        if i_c.getInventorySize(3) and i_c.getInventorySize(3) == i_size then -- проверить размер инвентаря
          while not st do
            if robot.durability() ~= 1 then -- если не заряжен
              i_c.equip() robot.drop(3) -- скинуть в зарядник
              os.sleep(10) -- подождать
              robot.suck(3) i_c.equip() -- взять из зарядника
            else -- иначе
              st = true -- остановить цикл
            end
          end
          break
        end
        robot.turn(true)
      end
    end
    
    Если вынуть инструмент, то робот будет и дальше пытаться его достать, пока не получит полностью заряженным.

     

    Я вот пытаюсь вснуть цикл robot.swing() в твой скрипт и у меня выходит, помоги пожалуйста :(

     

    Вариант с доп. проверками. Выводит сообщения об ошибках.

     

     

    local sides = require "sides"
    local robot = require "robot"
    local component = require "component"
    local inv = component.inventory_controller
    
    -- в какой стороне от робота находится зарядник (front, down, up)
    local CHARGER_SIDE = sides.front -- спереди
    -- слот в котором будет заряжаться инструмент (слот 1 подходит для зарядников OC/IC2)
    local CHARGER_SLOT = 1 
    
    function charge_tool()
      -- перемещаем инструмент из руки в инвентарь (equip() меняет местами содержимое текущего слота и руки)
      inv.equip()
      -- получаем информацию об инструменте в текущем слоте
      local tool = inv.getStackInInternalSlot(robot.select())
      if tool == nil then
        print("Нет инструмента")
        os.exit(1)
      elseif tool.maxCharge == nil then
        print("Инструмент нельзя зарядить")
        os.exit(1)
      end
      -- перемещаем инструмент в зарядник
      if not inv.dropIntoSlot(CHARGER_SIDE, CHARGER_SLOT) then
        print("Не удалось положить инструмент в зарядник")
        os.exit(1)
      end
      -- зарядка инструмента
      while true do
        local tool = inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT)
        if not tool then
          print("В заряднике нет инструмента")
        else
          if tool.charge >= tool.maxCharge then
            break
          end
        end
        os.sleep(1)
      end
      -- забираем инструмент из зарядника
      if not inv.suckFromSlot(CHARGER_SIDE, CHARGER_SLOT) then
        print("Не удалось забрать инструмент из зарядника")
        os.exit(1)
      end
      -- перемещаем инструмент обратно в руку робота
      inv.equip()
    end
    
    -- зарядка потребуется при понижении прочности инструмента ниже этого значения
    -- для электроинструмента прочность соответствует его заряду (1 - полный заряд, 0 - разряжен)
    local TOOL_MIN_ENERGY = 0.3
    
    function check_tool_energy()
      -- проверяем нужно ли зарядить инструмент (если он есть и может терять прочность)
      local d = robot.durability()
      if d and (d < TOOL_MIN_ENERGY) then
        -- ставим зарядник или возвращаемся на базу к установленному заряднику
        -- ...
        -- заряжаем инструмент
        charge_tool()
        -- возвращаемся к прерванной работе
        -- ...
      end
    end
    
    check_tool_energy()
    
     

     

     

    Когда бур разряжается и робот его кладёт в зарядник, выдаёт ошибку "Не удалось забрать инструмент из зарядника".


  4. Такая ошибка может возникнуть в строке

    while inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT).charge < tool.maxCharge do
    

    если в слоте зарядника не будет предмета, inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT) вернёт nil.

    Робот смог положить бур в зарядник или он остался в инвентаре? Если не смог, то зарядник стоит не с той стороны. (Можно проверить смог ли робот положить бур в зарядник - dropIntoSlot() возвращает true в случае успеха.)

    Забирать бур из зарядника во время зарядки нельзя.

    Смог


  5. МЭ-система вытягивает предметы из робота сама? Лучше если робот будет сам скидывать свой инвентарь, тогда он сможет сохранить нужные ему предметы.

    Да сама, ну тогда ты прав, надо сделать чтобы с задней стороны весь(корме бура) инвентарь робота скидывался в сундук.

     

     

    Какие ошибки?

     

     

    1TLjMvdl6sQ.jpg

     


  6. Например, так:

    --Программа выполняет зарядку инструмента в руке робота, зарядник спереди.
    local sides = require "sides"
    local robot = require "robot"
    local component = require "component"
    local inv = component.inventory_controller
    
    -- в какой стороне от робота находится зарядник (front, left, right, down, up)
    local CHARGER_SIDE = sides.front -- спереди
    -- слот в котором будет заряжаться инструмент (слот 1 подходит для зарядников OC/IC2)
    local CHARGER_SLOT = 1 
    
    function charge_tool()
      -- перемещаем инструмент из руки в инвентарь (equip() меняет местами содержимое текущего слота и руки)
      inv.equip()
      -- получаем информацию об инструменте в текущем слоте
      local tool = inv.getStackInInternalSlot(robot.select())
      -- перемещаем инструмент в зарядник
      inv.dropIntoSlot(CHARGER_SIDE, CHARGER_SLOT)
      -- зарядка инструмента
      while inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT).charge < tool.maxCharge do
        os.sleep(10)
      end
      -- забираем инструмент из зарядника
      inv.suckFromSlot(CHARGER_SIDE, CHARGER_SLOT)
      -- перемещаем инструмент обратно в руку робота
      inv.equip()
    end
    
    -- зарядка потребуется при понижении прочности инструмента ниже этого значения
    -- для электроинструмента прочность соответствует его заряду (1 - полный заряд, 0 - разряжен)
    local TOOL_MIN_ENERGY = 0.3
    
    function check_tool_energy()
      -- проверяем нужно ли зарядить инструмент
      if robot.durability() < TOOL_MIN_ENERGY then
        -- ставим зарядник или возвращаемся на базу к установленному заряднику
        -- ...
        -- заряжаем инструмент
        charge_tool()
        -- возвращаемся к прерванной работе
        -- ...
      end
    end
    
    check_tool_energy()
    [spoiler] 
    Программа выполняет зарядку инструмента в руке робота, зарядник спереди.

     

    Cпасибо что откликнулся. Но есть пару пробем. У меня стоит зарядник справа, я указываю в исходнике right и при запуске выдаёт 2 ошибки функции. А так же например из робота (всё что в нём от 1 слота до N) импортируется в МЭ систему (AE2), а из неё в сундук. А когда бур кладётся в первый слот, то бур попадает в МЭ систему, а из неё в сундук. Можно ли сделать, чтобы он сразу из активного слота клал в зарядник?

    А да, можешь как-нибудь засунуть это:

       local robot = require("robot")
    while true do
       robot.swing()
    end

    в свой исходник? Я конечно сам могу интегрировать, но мне интересно увидеть как сделаешь это ты.


  7. Бур - в заряднике из ОС

    Лучше через МФСУ

     

    Ну через самого же робота можно заряжать , если робот будет выкладывать бур например в МФСУ, через компонент контроллер инвентаря.

    Но как сделать проверку на кол-во энергии? Я не шарю


  8. Здравствуйте, вот например в роботе лежит бур из IC2, по программе робот им копает => бур разряжается. Как можно его зарядить не доставая?

    Ах да, и ещё один вопрос. Как можно переименовать робота? 

    P.s робот стоит на месте и никуда не двигается.


  9. так а в чем актуальность-то? Зачем вбухать кучу реса в комп, чтобы сделать из него "рычаг, доступный в привате"

    Это не тот случай, где следует применять комп. Да и работать он у тебя не будет, так как ты еще не знаешь, как его защитить от ребута и прочее. Да и сам по себе он рано или поздно отвалится при рестарте серва в синий экран когда-то.

     

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

     

    Писал же кто-то выше, что, мол, натяни ванильную растяжку и всё. Даже если жалко ресов на Т-триггер (3 репитера и 2 факела), то просто натяни растяжку там, где обычно стоит игрок и бьет мобов по ногам в дырочку, как это обычно делают игроки. Набил лута, отошел - спавнер вырубился. В чем проблема-то?

     

    Также вроде в майне есть нажимные пластины, игрок их в привате чужом нажать не сможет, но они от брошенного лута на них срабатывают и подают рэд, золотая нажимная пластинка вроде называется. И так как лут деспавнится каждые 6 мин., то факт того, что спавнер будет включен  кем-то навечно - исключен.

    От ребута можно защитится просто напросто закрыть моник блоками. А синим экраном капутер уже не накрывается несколько дней(а-ля тест).

    На счёт растяжек/плит,  мобы тоже её могут юзать, следовательно, если какой-то челик не дофармил мобов, то из-за одного моба будет работать спавнер.

    Просто я видел похожу такую систему, и она стабильно работает.


  10.  

    Изображение с экрана пропадает, потому-что на него подается сигнал, об этом даже сказано в ачивке при крафте монитора. Лучше отделить монитор или редстоун I/O кабелем от других блоков.

    Если проблема с определением стороны, то можно подать сигнал на все.

    local wlist = {['Lockry'] = true}
    local sleep = 10
    local side = 1
    local status
    local component = require('component')
    local computer = require('computer')
    local redstone = component.redstone
    local chat_box = component.chat_box
    local signal = computer.pullSignal
    
    local function switch(value)
      for side = 0, 5 do
        redstone.setOutput(side, value)
      end
    end
    
    function computer.pullSignal(...)
      local e = {signal(...)}
      if status and status+sleep*72 <= os.time() then
        switch(0)
        status = nil
      end
      if e[1] == 'chat_message' and wlist[e[3]] then
        if e[4] == 'startmob' then
          status = os.time()
          switch(15)
        end
      end
      return table.unpack(e)
    end
    

    Не работает :(

    Мб лучше подавать сигнал через микроконтроллер с красной платой?


  11. Надо сохранить файл с другим именем, redstone.lua это родная утилита управления редстоуном.

    Сделал. При вводе в чат startmob ничего не происходит и пропадает изображение с экрана(всегда чёрный экран, даже перезагрузка не помогает приходится ставить моник заново)

     

     В примере Doobа используется сторона 1 т.е. верх системника. У тебя же провод подключен к переду. Исправь третью строку на

    local side = 3
    

    Исправил, но когда я пишу startmob ничего не происходит. 

    Если есть какая-нибудь альтернатива с этими проводами(через другой блок), то какая? Провода из Projectred подключены к пк.


  12. local wlist = {['Lockry'] = true}
    local sleep = 10
    local side = 1
    local status
    local component = require('component')
    local computer = require('computer')
    local redstone = component.redstone
    local chat_box = component.chat_box
    local signal = computer.pullSignal
    
    function computer.pullSignal(...)
      local e = {signal(...)}
      if status and status+sleep*72 <= os.time() then
        redstone.setOutput(side, 0)
        status = nil
      end
      if e[1] == 'chat_message' and wlist[e[3]] then
        if e[4] == 'startmob' then
          status = os.time()
          redstone.setOutput(side, 15)
        end
      end
      return table.unpack(e)
    end
    
    Первая строка - белый список игроков, которым доступно управление.

    Вторая строка - задержка в секундах, т. е. на сколько времени активировать сигнал.

    Третья - сторона блока, на которую подавать сигнал.

     

    Спасибо что откликнулся. Но у меня есть вопросы.

    P.s я в этом моде только начал что-то понимать и за косяки не кидайтесь тапками.

    1. Вся система подключена вот так(для теста)

     

    T5HT3NbFUXI.jpg

     

    2. При активации скрипта мне выдаёт два параметра, а вводить я не понимаю, потому что тупой не шарю.

     

     

    r-G6J-fV4Zg.jpg

     

     

    3. Если всё так и должно быть, то в чат я ввожу сообщение и ничего не происходит. Для примера вот:

     

    RWjWccMFixY.jpg

     

    В пк компоненты: видеокарта III, редстоун карта II, интенет карта.


  13. Можно подробности? Какой сигнал нужен? Цветной или обычный. А если цветной то какие цвета включать, а какие отключать и когда.

    Может у вас вообще стоит майнфактори со своей системой передачи редстоуна. А там программа совершенно другая.

    И ещё, какая сила сигнала нужна? Это же очень важно. Вдруг не ту силу сигнала задам и всё взорвётся.

    Где развёрнутое описание???

    Будет достаточно обычно сигнала из ванили, сиглан идёт по проводам из Projectred. А на счёт цветной или обычный я хз. На счёт силы сигнала я честно не знаю какую он выдерживает, можно поэкспериментировать, но по сути сила будет равна обычному из ванили красному сигналу


    • Описание: Требуется программка для подачи красного сигнала в определённый блок(рычаг например) или включение электического спавнера(Ender IO)

    Награда: 

    127857061_image.jpg

    Установка:

    Требования: например я ввожу в чат  startmob и подаётся сигнал для рычага[uPD] и через N секунд сигнал пропадает

    Связь: Писать в топик

×
×
  • Создать...