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

eu_tomat

Модераторы
  • Публикации

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

  • Посещение

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

    331

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


  1. @Doob, а робот тогда будет перемещаться в каких координатах? Он будет двигаться вдоль поверхности шара или же по исходным, кубическим координатам?

     

    В первом случае вертикальная ось в кубических координатах будет меняться на 90 градусов при переходе с одной грани губа на другую.

     

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

     

    Какой из вариантов ты предпочтёшь?


  2. 22 часа назад, Appo сказал:

    В любом случае идея может пригодится, в комбинировании своих идей.

    В любом случае эта идея не для ближайшей сборки. А потом её вряд ли кто-то найдёт, т.к. темы о будущих сборках по традиции перетекают в холивары и затем перемещаются в корзину.

     

    Идея с шарообразным миром любпытная, я бы её перенёс, например, в шкатулку, но только выбросив всё остальное.

    22 часа назад, Appo сказал:

    кто-то ищет тысячи оправданий, а кто-то тысячи возможностей

    Хорошо. Для начала найди возможность вменяемой системы координат в шарообразном мире. Где здесь верх, восток, юг? Видео демонстрирует способ превращения куба в шар. Координаты используются кубические, но исходный куб растягивается до формы шара. Так вот, на шаре всегда можно обозначить горизонталь и определить верх-низ, даже когда мы стоим по по центу блока, лежащего на грани исходного куба. А в кубических же координатах окажется, что можно стоять на одной из двух сторон блока, и в этом случае направление верха и низа резко меняется. Аналогично и для блока, находящегося в вершине куба, там возможны аж целых три направления "вниз". А у нас тут роботы бегают, им нужна чёткая система координат. Как предлагаешь решать эту проблему?

     

    Перенёс тему во флудилку. Поболтаем хотя бы о геометрии.


  3. 51 минуту назад, kaka888 сказал:

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

    Без доработки мода вряд ли возможно. Впервые узнав о  стороне, задаваемой аргументом, я сразу попробовал копнуть во всех направлениях и получил ошибку везде кроме сторон 0, 1, 3.

    • Нравится 1

  4. 12 минут назад, kaka888 сказал:

    Т.е. robot.swing() работал без аргументов только из-за того, что в опенос есть библиотека для robot API?

    Именно так. robot.swing() в библиотеке копает только вперёд, а для копки вверх и вниз имеются robot.swingUp() и robot.swingDown(). Компонент же располагает единственной функцией, направление задаётся аргументом.

    • Нравится 1

  5. 21 час назад, Aex сказал:

    Есть дом на сервере EvilCraft.

    Возможно, речь идёт о нашем сервере EvilWorld. Если нет, то имеет смысл уточнить версию Minecraft и OpenComputers.

    21 час назад, Aex сказал:

    Но переменная TimeOut не принимает значение delay, и остаётся в нуле (её значение по-умолчанию), судя по выводу на экран и дальнейшему поведению программы.

    По тому выводу на экран, что есть в программе, можно говорить лишь о значении переменной TimeOut в этом конкретном месте. И точно невозможно сказать, отличалось ли значение от нуля, например, перед этим участком:

    if (computer.uptime() - timestamp > TimeOut) and (TimeOut > 0) then
      ...
      ShowMenu();

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

    21 час назад, Aex сказал:

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

    И почему исключается? Каким образом это проверяется? На отрисовку меню могли влиять ошибки в реализации GUI. Предлагаю на время отладки полностью отказаться от GUI и весь вывод переписать на print, или сигналить звуком, например, так:

    if TimeOut > 0 then
      computer.beep()
    end

     


  6. 12 часов назад, Alexhotice сказал:

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

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


    В случае генератора булыжника есть только один непрерывно добываемый малоценный ресурс.


    Если сундук находится над или под роботом, то оптимизация сводится к тому, чтобы перемещать ресурсы полными стаками. Робот перемещает хоть один предмет из слота, хоть полный стак за одинаковое время. А это значит, что выгодно перемещать наиболее полный стак. Заполнение слота легко отслеживается.


    Если сундук находится в стороне, и робот вынужден совершать поворот, то накладные расходы на освобождение инвентаря возрастают, и появляется смысл выгружать полностью заполненный инвентарь. Его заполнение тоже легко отследить.


    Гораздо больше вопросов вызывает перелопачивание руды киркой.


    С точки зрения оптимизации действий робота он должен выгружать свой инвентарь, когда хоть-что появится в последнем слоте. А если речь идёт о рудах GT, где может выпасть вторичный ресурс, то сигналом для выгрузки будет появление предмета в предпоследнем слоте.


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


    Но тут возникает новый подводный камень. Эта схема удобна в случае огромного количества руды. У неё есть большой потенциал на поздних стадиях уже упомянутого GT. Но в начале игры, когда ресурсов мало, робот будет ждать полного заполнения своего инвентаря, долго не отдавая переработанные ресурсы, что неудобно.


    Есть компромиссный и при этом довольно эффективный вариант: робот берёт из верхнего сундука стаки руды, начиная от более полных к менее полным. Загрузив стак руды в свой инвентарь, робот устанавливает её перед собой и ломает, повторяя эти действия до полного исчерпания руды. После этого полностью освобождает инвентарь в сундук. некоторые из слотов могут оказаться недостаточно заполненными, и такая выгрузка будет не очень эффективной, но зато ценные ресурсы не будут надолго задерживаться в инвентаре робота и мешать получению других. Выработав стак руды, робот берёт следующий, один из наиболее полных, и продолжает работу, постепенно забирая и слабо заполненные стаки тоже. За время работы робота ресурсы в слотах входного инвентаря могут пополниться, поэтому имеет смысл отложить их использование до поры, пока не появится лучший выбор. Этот вариант  тоже можно оптимизировать.


    В конечном итоге всё зависит от целей. На что должна быть ориентирована твоя программа? На максимальную скорость при быстрой подаче руд? На переработку руд в начале игры, чтобы ресурсы не задерживались в инвентаре робота? Или надо сделать хоть что-то, лишь бы оно работало с помощью максимально примитивного кода? От ответов на эти вопросы будет зависеть алгоритм работы.


  7. 3 часа назад, kaka888 сказал:

    Простите, я опять забыл, как делать спойлеры

    А зачем там спойлер? Скриншот вообще не проясняет проблему и может быть безболезненно удалён.

     

    По теме: Какое значение имеет  параметр bufferChanges?

     

    • Нравится 1

  8. 20 часов назад, Alexhotice сказал:

    а как можно дополнить, чтобы тогда робот сам скидывал свой инвентарь кроме бура, допустим в сундук сбоку?

    Похоже, я не с первого раза понял вопрос.

     

    Требуется уточнить, что это за механизм, чтобы выбрать эффективный вариант проверки заполнения инвентаря. Это генератор булыжника?


  9. Ну, очевидно, что для этого робот никогда не должен помещать инструмент в свой инвентарь, находясь при этом под высасывающей шиной. Есть разные варианты:

     

    Например, можно удалить зарядник на один блок от робота. И тогда робот будет перемещаться на одну клетку из-под шины.

     

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

     

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

     

    В общем, можно придумать множество работоспособных конфигураций.

    • Нравится 3

  10. Тогда понятно. Шина, стоящая сверху, быстро высасывает инвентарь робота, сразу как только выполнится перенос инструмента в инвентарь с помощью inv.equip(). И перенос инструмента в зарядник с помощью robot.drop() выполниться просто не успевает.


  11. Для понимания причин проблемы следует для начала прочитать текст ошибки. Можно воспользоваться автоматическим переводчиком. Это поможет понять, что на строке 6 произошла попытка сравнения значения nil с числом, что недопустимо. Глядя на шестую строку, можно заметить условие robot.durability() <= 0.2, где явное число сравнивается с предположительным числом. Но функция может возвратить что-то иное, и, судя по всему, тот самый nil. Теперь следует задаться вопросом, в каком случае может быть возвращено значение nil. Логично предположить, что это возможно либо в случае полного отсутствия предмета в слоте инструмента, либо в слоте находится и не инструмент вовсе, что и подтверждается документацией https://ocdoc.cil.li/api:robot.

     

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

    • Нравится 2

  12. 20 часов назад, monkey сказал:

    Схема работает без перегрева. У меня реактор без проблем отработал один цикл, второй тоже подходил к концу. А сегодня реактор пропал вместе со всеми компонентами. Наверное взорвался. Как это возможно вообще?

    Соблюдён этот пункт?

    25.02.2015 в 23:42, AlexVBG сказал:

    Так же перед работой с реакторами хочу обратить ваше внимание на то, что устанавливать реактор необходимо целиком в 1 чанке (16х16, сетку вывести можно нажав F9). Иначе корректная работа не гарантируется, ведь иногда в разных чанках время течет по разному!

     

    • Спасибо 1

  13. Есть и другие. Можно использовать shell.execute. И это даже более правильно, т.к. эта функция используется внутри os.execute.

    А внутри shell.execute используется чтение указанного файл, его загрузка через load, и запуск.

     

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

    А другой отдельной функции, скорее всего, нет. Возможно, в других операционных системах есть иные способы.

    16 минут назад, kaka888 сказал:

    А других нет способов?

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

    • Нравится 1

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

    local phrases = {
      ["вован"] = { [false]="оффлайн",   [true]="онлайн"   },
      ["серый"] = { [false]="спит",      [true]="зажигает" },
      ["жека"] =  { [false]="потерялся", [true]="в деле"   },
    }
    
    for nick,phrase in pairs(phrases) do
      print( nick,phrase[online(nick)] )
    end

    Как реализовать функцию online(nick), проверяющую онлайн игрока, уже рассказали в предыдущей теме.

    • Нравится 1

  15. 1 минуту назад, Asior сказал:

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

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

     

    Но спасибо за информацию, снова включу старые навыки. Или хотя бы их часть, которая применима в новых условиях.

    • Нравится 1

  16. 5 минут назад, Asior сказал:

     

      Показать содержимое

    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

     

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


  17. @BrightYC я бы начал с проверки отображения латиницы.

     

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

     

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

     

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

     

     


  18. 26 минут назад, kcalBxoF сказал:

    Жаль байткоды отключены у load, байткоды мало кто использует

    Байткод тоже можно преобразовать в исходный. Правда, с потерей комментариев и локальных названий. Но даже такой может иметь ценность.


  19. 36 минут назад, kaka888 сказал:

    Fingercomp, можно таким образом оформить свои программы, чтобы читая их, никому не было понятно, что они делают)

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

    • Нравится 2

  20. 1 минуту назад, BrightYC сказал:

    А где фотографии? Хочу фотографий конструктора и флюса!

    Конструкторы даже не распаковывал, фотки будут в отчёте. Не хочу размазывать инфу по разным постам.

     

    Про флюс я уже навёл справки. Яндекс выдаёт первой страницу с тегом "Осторожно, говно!": Флюс-гель ТТ

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

     

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

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