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

Lgmrszd

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

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

  • Посещение

  • Победитель дней

    1

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


  1. Итак, первая версия программы готова!

    Для её работы нужен стандартный компьютер с беспроводным модемом, а также робот с модемом и апгрейдами: верстак и контроллер инвентаря.

    Затем ставим МЭ-интерфейс, адаптер, зарядник и робота как на картинке:

    BcwcOPd.png

    После этого берём апгрейд-базу данных и настраиваем её на те предметы, которые используются в крафте (пока что у меня только один рецепт):5oBSv9j.png

    Базу кладём в адаптер.

    Затем на компьютер закидываем два файла: ME.lua и recipes.lua

    ME.lua

     

     

    local component=require('component')
    local event=require('event')
    local interface=component.me_interface
    local base=component.database
    local modem=component.modem
    
    local recipes=require('recipes')
    local robAddr="d9c29b1f-d308-4fb7-bf69-d7291346cef6"
    local baseSize=81
    modem.open(1337)
    
    function readyInterface(name)
      needItems=recipes[name]
      for i=1,#needItems do
        needItem=needItems[i]
        print('Recipe item number '..tostring(i)..' is '..tostring(needItem['name'])..' : '..tostring(needItem['tag']))
        n=0
        found=false
        while not(found) and n<baseSize do
          n=n+1
          local baseItem=base.get(n)
          if baseItem then
            print('Base item number '..tostring(n)..' is '..tostring(baseItem['name'])..' : '..tostring(baseItem['damage']))
            if needItem['name']==baseItem['name'] and needItem['tag']==baseItem['damage'] then
              print('Was found!')
              found=true
              interface.setInterfaceConfiguration(i,base.address,n)
            end
          end
        end
      end
    end
    
    function convertRecipe(recipe)
      line=''
      for n=1,#recipe do
        for i=1,#recipe[n]['slots'] do
          line=line..tostring(recipe[n]['slots'][i])
        end
        if n~=#recipe then line=line..':' end
      end
      return line
    end
    
    readyInterface('IC2:itemPartCircuit')
    r=convertRecipe(recipes['IC2:itemPartCircuit'])
    cont=true
    repeats=0
    while cont do
      repeats=repeats+1
      modem.send(robAddr,1337,r)
      _, _, sender, _, _, text=event.pull(3,'modem_message')
      if sender==robAddr and text=='ok' then
        print('Робот принял заказ')
        os.sleep(0.5)
        _, _, sender, _, _, text=event.pull(30,'modem_message')
        print(text)
        if sender==robAddr and text=='crafted' then
          print('Предмет создан')
        elseif sender==robAddr and text=='error' then
          print('Ошибка во время создания')
        end
        cont=false
      end
      if repeats==5 then
        cont=false
        print('Ошибка: робот не работает')
      end
    end
    modem.close()
    

     

     

    recipes.lua

     

     

    recipes={}
    recipes['IC2:itemPartCircuit']={
        {name='IC2:itemCable',
         tag=0,
         slots={1,2,3,7,8,9}
        },
        {name='minecraft:redstone',
         tag=0,
         slots={4,6}
        },
        {name='IC2:itemPlates',
         tag=4,
         slots={5}
        }
    }
    
    return recipes  
    
    

     

     

    На робота скидываем файл crafter.lua :

     

     

    local component=require('component')
    local event=require('event')
    local inv_c=component.inventory_controller
    local modem=component.modem
    local robot=require('robot')
    local crafting=component.crafting
    
    local owner="5e07230a-17bb-4c20-b518-a2986093f86f"
    modem.open(1337)
    
    function craft(recipe)
      n=1
      for i=1,#recipe do
        s=string.sub(recipe,i,i)
        if ':'==s then
          n=n+1
        else
          s=tonumber(s)
          if s>3 and s<7 then s=s+1 elseif s>6 then s=s+2 end
          robot.select(s)
          inv_c.suckFromSlot(0,n)
        end
      end
      robot.select(4)
      toReturn=crafting.craft()
      robot.dropDown()
      return toReturn
    end
    a='123789:46:5'
    while true do
      _, _, sender, _, _, text=event.pull(2,'modem_message')
      if sender==owner then
        print('receive, ',text)
        os.sleep(0.5)
        modem.send(owner,1337,'ok')
        print('send ok')
        os.sleep(0.5)
        if craft(text) then modem.send(owner,1337,'crafted') else modem.send(owner,1337,'error') end
      end
    end
    craft(a)
    
    

     

     

    В файле ME.lua измените переменные: robAddr -- адрес модема робота, baseSize -- размер базы. В файле crafter.lua измените переменную owner -- адрес модема компа.

    Приступим к запуску. На роботе запустим файл crafter.lua, после чего наш раб робот будет ждать сообщения.

    После этого на компе запустим файл ME.lua. Сейчас программа настроена так, чтобы сделать одну базовую электросхему IC2. Данная версия не проверяет МЭ сеть на наличие предметов, поэтому положите их заранее.

    Если вы всё сделали правильно и я не допустил косяков при написании этого сообщения, в вашей МЭ сети появится одна электросхема. Тестируйте на здоровье!


  2.  

    --PC
    local serialization = require("serialization")
    local m = require("component").modem
    
    m.open(229)   -- pc port
    
    local table = {
      a = {1,2,3,4, { 1, 1, 1}},
      b = {1,2,3,"a",1}
    }
    
    local ser = serialization.serialize(table)
    
    local pc = component.modem.address
    
    m.broadcast(228,"secretPassWord111")
    
    local robot
    
    local _, _, from, _, _, message = event.pull("modem_message")
    if message == "secretPassWord111" then
      robot = from
    else
      robot = "access denied"
    end
    
    m.send(robot,228,ser)
    print("Отправлено!")
    
    -- ROBOT
    local serialization = require("serialization")
    local m = require("component").modem
    
    m.open(228)   -- robot port
    
    m.broadcast(229,"secretPassWord111")
    
    local pc
    local _, _, from, _, _, message = event.pull("modem_message")
    if message == "secretPassWord111" then
      pc = from
    else
      pc = "access denied"
    end
    
    local _, _, from, _, _, message = event.pull("modem_message")
    local table = serialization.unserialize(message)
    print("Таблица получена!")
    
    Do not mention it

     

    P.S Потом могу помочь с интерфейсиком. ;)

    (переводится как не стоит благодарности)

    Спасибо, но я уже придумал другой способ ¯\_(ツ)_/¯

  3. А просто по модема пересылать идшники?=)(Я дурак и вообще не юзаю таблицы, по крайней мере в других таблицах, которые находятся в таблицах.)Ты не можешь просто modem.broadcast(port, "Факел", 0, 0, 0, 0, уголь, 0, 0, палка, 0)?

    Ага, конечно.

    Во-первых, разные предметы иногда имеют одинаковые id-шники, но разные теги (которые почему-то определяются как damage)

    Например, "IC2:itemCable" - это и медный провод, и золотой в изоляции. Хотя да, что-то я затупил, роботу не нужно знать рецепт, если в интерфейсе всё разложено.

    Если юзается АЕ, то это уже дороговатая система.

    И АЕ может и не быть в сборке какой-то где-то, а если он там есть, то как правило, есть и автокрафт. Это только безумный Алекс автокрафты отключает :D , чтобы мы начинали все вместе включать мозги и придумали, как автокрафтить роботом. Уходи от АЕ. Сундук и робот есть всегда!

     

    Лучше придумать, как роботом брать из АЕ нужный предмет и возить куда-то, например стержни в реактор или семена на огород. Не через шину с сундуком, а именно через запрос к базе сервера (ПК, который может получить доступ к хранилищу АЕ и дать АЕ команду что-то выплюнуть роботу, айтем или целый набор) Естественно, так же само ты можешь и автокрафт делать, сразу по базе и проверяй свой факел. Если палок нет в АЕ, то и уголь АЕ тебе не плюнет для робота. Сервер сразу проверяет, можно ли такой предмет скрафтить или нет и то количество, которое нужно юзеру. ПК по идее, имеет всю инфу того, что есть в АЕ, с ней и работай.

     

    Можно даже роботу, по идее, сказать, мол, эй, дружок, езжай-ка наруби-ка дров сначала, да печку растопи, потом я тебе и рецепт для пирожников дам.

    Как сказал Фингер, эта прога специально для сервера.

    К тому же автокрафт роботом и компом гораздо дешевле, чем "родные" шаблоны, процессоры создания и сопроцессоры всякие, которые к тому же каналы лишние занимают.

    Пара строк или пара кристаллов - решать не мне.

    Насчёт пирожков... Да, возможно, я "научу" робота не только крафтить, но и, к примеру, ездить к дробилке. Опять же, эти шины всякие занимают каналы.


  4. Автокрафт в МЭ посредством OpenComputers.

    Пока Алекс переворачивает сервер с ног на голову, мне вдруг в голову стукнула мысль, что неплохо будет сделать автокрафт в AE, но без лагодрома (@artem211, привет). Короче, свой автокрафт с компами и роботами. Пока что программа не готова для всеобщего обозрения, но скоро она будет доведена до нормального уровня.

    Да-да, я видел систему автокрафта Алекса, но всё-таки матрица из over9000 сундуков -- неудобно.

    Как это работает:

    • Комп с помощью таблицы рецептов и апгрейда-базы данных настраивает МЭ-интерфейс
    • Робот берёт из интерфейса предметы и крафтит то, что нужно
    • ...
    • И... всё, собственно

    Что моя прога (мои проги -- на комп и робота) умеет:

    • Комп -- настраивать МЭ-интерфейс по рецепту, сохранённому локально при идеальных условиях (всего хватает).
    • Робот -- крафтить по рецепту, который сохранён на роботе локально, и опять же, при идеальных условиях.

    Что она не умеет:

    • Защита от дурака
    • двойной крафт (например, нужен факел, а палок не хватает)
    • Пересылка рецепта с компа на робота.

    О третьем отдельно. Мне, собственно, нужна помощь тех, кто хорошо разбирается в сетях. Мне нужно переслать таблицу. Внутри таблицы. Внутри ещё одной таблицы! Да, я говнокодер.

    О развитии проги буду сообщать в эту тему.

     


  5. тогда давай скайп или в RC, делаем отдельные клиент только с OC и го =D

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

    Только пинание, и ничего другого.

    Если что, я в мамбле.

    И да, вот пинок: как создание проги?


  6. Мне срочно нужен помощник.

    Его обязанности ==> Пинать меня, что бы не ленился. Остальное - по желанию XD

    А то, зная себя, напишу через 5 лет эту прогу, а она не актуальна будет.

    Буду помощником на равных правах - меня тоже периодически пинать надо.
    • Нравится 1

  7. Итак, вот результат небольшого теста.

     

    Как известно, у нас на сервере есть PIM из OpenPeripheral, который может управлять инвентарем, включая выдергивание предметов из инвентаря игроков...

    Именно поэтому я всё кинул рядом и наступил на кнопку с одной землёй в карманах.

    Запрещать, думаю, не нужно. В лаву тоже можно наступить и умереть.


  8. Можно. По идее можно запихать лазер в задницу и отстреливаться от криперов и пауков, пока код отлаживаешь. :giggle:

    При больших багах в коде можно в принципе без лазера обойтись. И без гравика

    • Нравится 3

  9. Можно перед роботом нажимную плиту деревянную поставить, а в робота вставить красную плату. Тогда можно не гонять прогу в бесконечном цикле, а ожидать сигнал реда - плита ведь предметами активируется, а для защиты от наступания игроком достаточно поставить блок над нажимной плитой.


  10.  

     

    Главное, что форум начал петь что-то про роботов, их возможности и свойства.

     

    Были времена, когда неделями ни слова на форуме не проскакивало про программирование и роботов. Одни грегомоды обсуждались с харвестами, или взрыв пукана на крипере и улетание нано-трусов на орбиту. Вот это ЖОПА, а не ваш гриф солярки несчастной.

    Ок, я почти неделю назад залил свою библиотеку moving (которая, по сути, бессмысленна с апгрейдом-картой) и залил видео с первой (самой кривой) версией дровосека. Видимо, кража дисков АЕ популярней.

  11. Если для проникновения в наш бывший дом нужна была хитрость, то для борьбы с откровенным нубством (дома без крыш и панельки без стекла) нужно в справке по привату написать БОЛЬШИМИ КРАСНЫМИ БУКВАМИ: "РОБОТЫ МОГУТ ИСПОЛЬЗОВАТЬ ИНСТРУМЕНТЫ В ЧУЖИХ ПРИВАТАХ. ПОЖАЛУЙСТА, НЕ ОСТАВЛЯЙТЕ ПРИБОРЫ БЕЗ ЗАЩИТЫ."

    Мне почему-то казалось, что Алекс поощряет не воров, а робогриф в поучительных целях. Мол, увидели у новичка такое, показали, он прикрыл панель и воры не страшны.

    Но поощрение самих воров, которые делают это ради выгоды? Это чересчур. Давайте вообще GriefPrevention удалим, "нуачо, это же пвп сервер, пусть выживают, как хотят".


  12.  

     

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

     

     

    Серега, 3,5 калеки, как ты их называешь, если не смогут солярки закрыть стеклом и не шарят в ОС вообще запустить просто прогу, а в доме не оставлять дыр, то да, названия они такого заслуживают.

    Алекс сам себе противоречит. То строится хитрый план, как у Салата, то вдруг оказывается, что панельки не прикрыты и их стырить может хоть Петя из 2 "а".

    cyber01, похоже, говорил не про всех робогриферов в целом, которые охотятся на нубов, а про Салата и его деяния, которые не ограничиваются поучительной частью.

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

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