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

Asior

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

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

  • Посещение

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

    70

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


  1. 20.02.2019 в 04:47, Doob сказал:

    Странно, у меня личные сообщения нормально обрабатываются.

    Попробуй отловить откуда какое сообщение пришло и кому придется библиотеке отвечать. Она никак не разделяет личное сообщение или из канала.

    20.02.2019 в 04:47, Doob сказал:

    Флаг для логирования можно тоже сунуть в конфиг.

    Конфиг следует сделать в виде lua-таблицы - быстрей и меньше кода.

    Флаг сунул, в конфиги тоже внес опцию по логированию.

    Конфиги переделал, спасибо @Fingercomp и его ответам

    Ссылка для установки все та же.


  2. Недавно начал писать бота с использованием этой замечательной библиотеки, но к несчастью столкнулся с некоторыми недоработками.
    Поэтому решено было доработать библиотеку imodem и вот что из этого получилось:
    Обновление для библиотеки imodem

    • Теперь imodem может обрабатывать личные сообщения (раньше просто игнорил их). Говорим спасибо @Bit
    • Добавлена авторизация ника
    • Все данные по именам/каналам лежат в файле конфигурации по адресу /etc/imodem.cfg
    • Возможен запуск по данным пользователя из Shell
    • Добавлено логирование
    • Добавлено переподключение если отключится интернет

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

    modem_message ник_imodem ник_говорящего 0 #канал/ник_imodem сообщение

    Если сообщение идет с канала, то указывается канал, если личное сообщение, то ник imodem.

     

    Чтобы не лазить по библиотеке, ради изменения ника, канала, сервера было решено перенести все эти данные в файл конфигурации.
    Библиотека автоматически проверяет файл конфигурации, и в случае если его не найдет, самостоятельно его восстановит.
    Данные хранятся  в следующем виде:

    nick = "Тут ник"
    pass = "Пароль (0)"
    server = "irc.esper.net:6667"
    channel = "#канал"
    log = "Записывать логи (1/0)"


    Чтобы не заморачиваться с настройкой ника/канала/сервера/логов можно передать все эти данные одной командой:

    imodem [server[:port]] <nickname> <password> <channel> <save(1/0)> <log(1/0)>

    Ну а если все настроено и вас устраивает, можете напрямую imodem запускать и по сохраненным данным все запустится.

     

    Логирование сделано больше для отладки, логи можно найти по адресу /IMODEMLOG.txt

     

    Для того чтобы imodem мог переподключаться, через каждые 60 секунд оправляется пингование на сервер. И если в течении 30 секунд не придет ответ, imodem  автоматически переподключится. Это лучше чем словить кратковременный сбой в доступе к интернету и потом вручную перезагружать библиотеку.

     

    Скачать библиотеку можно по команде
    pastebin get -f MvR7FTGS /lib/imodem.lua

    Выражаю благодарность за помощь в улучшении @Bit, @Doob, @vladimir, @Fingercomp

    • Нравится 5

  3. Почему же нет? На главной странице есть литература по которой можно выучиться. Может маленько устарела, но азы то изучить вполне пойдет. Если любишь обзоры где все подробно разжевано, то есть канал @1Ridav Там правда по ComputerCraft но там разница в работе не сильно большая, Lua разжеван до основания, я собственно по тем видео и учился. А так, рекомендую заглядывать в раздел Гайды, обзоры по модам там много чего интересного можно найти. Ну и советую погуглить файлы справки по lua, справочник зачастую удобнее чем шараханье по сайту в попытках найти нужную тебе функцию. У меня он называется Lua 5.3.chm с переводом, если не найдете, кричите, скину. И кстати lua попроще крестов будет.

    • Нравится 2

  4. Ну может так и удобнее для вас будет. Но попробуйте на одном роботе, как я в GIF показывал. Уверен вы будете приятно удивлены скоростью работы. Всетаки лучше 1 паузу сделать, чем ожидать пока роботы синхронизируют свою работу.

    --https://i.imgur.com/9aw0a6E.gifv
    --блоки руды сверху в сундук закидывать
    --сыпуху вниз будет скидывать
    --перед роботом не забудьте поставить подставку, так будет точнее ставить
    
    local r = require('robot')
    
    while true do
      r.select(1)
      if r.suckUp(64) then
        local rep = r.count(1)
    
        for i=1,rep do
          r.place()
          while not r.swing() do
            os.sleep(0)
          end
        end
    
        for i=1, r.inventorySize() do
          if r.count(i) > 0 then
            r.select(i)
            r.dropDown(64)
          end
        end
      else
        os.sleep(15)
      end
    end

    П.с. Удивительно но я же свою программу щас использую...

    • Нравится 2

  5. 11 часов назад, Alexhotice сказал:

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

    Зачем так сложно то? С такой задачей может справиться робот в одиночку. Как я считаю тут надо 2 сундука. Например сверху будет руда, а вниз будет сбрасывать осколки.

    Алгоритм работы прост до безобразия.

    • Засосать 1 стак руды в 1 слот
    1. Поставить блок руды, срубить его
    2. Повторять пока не закончится руда
    • Очистить весь инвентарь
    • (опционально) повернуться направо/налево выполнить обслуживание бура, вернуться на исходную

    Вроде и все. Даже робота 1 уровня хватит на такую неказистую работу.

    Вот пожалуйста набросал за пару минут, правда без заправки.

    • Нравится 1

  6. Легко и просто. Я правда не знаю что за сканер такой хочешь использовать, поэтому вот тебе алгоритм.

    1. Сканировать пространство заданного радиуса
    2. Убрать из результатов скана список людей которым разрешено у тебя находиться (если они попали в скан)
    3. Подсчитать количество оставшихся игроков, если их > 0 то активировать редстоун
    4. Катушки к бою на 10 секунд!
    5. Отрубить редстоун
    6. Выждать 1 секунду для перезарядки
    7. Повторить пункт 1 до бесконечности

    Вроде ничего не забыл. Тут будет парочка циклов, да и все собственно.

    Узнайте какие команды идут для сканирования. Какой результат там выводится. Так как или у вас ошибка в написании названия сканера или это какой-то новый аддон, про который я не слышал


  7. 20 часов назад, eu_tomat сказал:

    @Asior как тебе удалось вставить спойлер? Кнопка в редакторе отсутствует.

    Ну так по старинке же тупо вбиваешь

    [spoiler]
    много текста
    [/spoiler]

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

    • Нравится 1

  8. Почитай вначале кто-то писал как передать сигнал во все стороны. А вообще можно пустить цикл перебором от 0 до 5 где переменой будет сторона выхода сигнала. Хотя я такое не советую делать, переключение редстоуна занимает около 1 секунды 


  9. Хз чего там намудрили, тут все крайне просто. 

    fmsFJpb.png

     

     

    local event = require('event')
    local com = require('component')
    local sensor = com.motion_sensor
    local sides = require('sides')
    local red = com.list('redstone')
    local monsterlist = {"Spider", "Zombie", "Creeper", "Skeleton", "Enderman", "Sheep", "Cow", "Chicken"}

    local function monsterScan(name)
      for i=1, #monsterlist do
        if name == monsterlist then return false end
      end
      return true
    end
      
    while true do
      local _, address, x, y, z, name = event.pull('motion')
      if monsterScan(name) then
        print(name)
        for address, _ in pairs(red) do
          com.invoke(address, "setOutput", sides.front, 15)
        end
        os.sleep(4)
        for address, _ in pairs(red) do
          com.invoke(address, "setOutput", sides.front, 0)
        end
      end
    end

     

    • Спасибо 1

  10. 1 час назад, Alexhotice сказал:

    или invoke заменить на red?

    Смысла нет. Оставляй так. Поясню часть ошибок которые я увидел в коде.

    • Для начала, зачем ты объявляешь redstone local redstone = com.redstone если у тебя судя по всему там используется целая связка контроллеров красного камня? Такое пойдет если используется только 1 контроллер.
    • Далее, for address, _ in pairs(redstone) do Это что за зверь такой? Смысл мусолить один и тот же контроллер? Если хотел сделать перебор всех контроллеров, то объяви их хотя бы так local red = component.list('redstone') и потом через pairs(red) все адреса перебирай.
    • redstone.setOutput(sides.front, 0) тут судя по всему ошибка или недописка. Подумай сам, если ты включил ВСЕ предположим 5 контроллеров, то потом сколько надо выключить?

  11. Гляди сюда, там образец обращения к МЭ https://pastebin.com/pXunJUE2.

    А так надо как я понял обратиться следующим образом

    me.exportItem(<Имя предмета>, <направление>, <скорее всего кол-во перемещаемых ресурсов>,  какой слот переместить>)

     


  12. Над шифровкой программ давно уже думали. Как вариант это применять какой-то сложный алгиритм преобразования и порциями загружать в оперативку через load. Но всеравно, отледить и дешифровать можно.

    • Нравится 1

  13. Билда не будет, можете не заказывать. Сборка стабильная, никаких модификаций пока вносить всеравно не будут. Да и куда еще вносить то, и так майн уже 3 гига памяти кушает, а у многих кто играет техника чуть сложнее калькулятора.

    Труб нет, но есть трасвекторы 2 типов, дроны, транспозеры, роботы или на крайняк 4 типа воронок, или раздатчики с импульсными генераторами редстоуна, пространственные сундуки и цисцерны, бочки из тинкерса. Так что автоматизации выше крыши. Почти все моды управляются через Opencomputers, ну кроме магических, но это и понятно.

    О каком карьере вы говорите? Ни одному карьеру и не снилось, что может сделать 1 робот. А если хорошо владеете программированием, то можно подчистую вынести весь мир. Недавно вот на сервере тестировал программу, около 15 минут работы робота и чанка уже не существует, а все ресы упакованы красиво в сундучки. Кому интересно попрыгайте по болоту на спавне, там только верхний слой земли остался.

    Вот что действительно надо, так это обновить мир Evil, где ресурсы добываются. А то там как кроты прошлись, дырки и вдоль и поперек.

    • Нравится 3
×
×
  • Создать...