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

Вопрос

Можно ли каким-либо образом научить транспозер считывать и проверять NBT-данные? Не наличие или отсутствие их, а конкретные данные(например, уровень зачарования меча). Пример - сортировка мечей по уровню зачарования "Острота" и размещение в разных хранилищах. Нашёл одну библиотеку, как-то взаимодействующую с NBT, вот она: https://github.com/OpenPrograms/Magik6k-Programs

Можно ли реализовать это с её помощью, или чем-то другим?

Можно ли это хоть как-то реализовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

22 минуты назад, Glozeysk сказал:

А можно пример использования?

Пример не дам, я экспериментировал слишком давно. Помню лишь, что особых проблем при использовании этой библиотеки у меня не возникло: транспозером получил информацию о содержимом слота, проверил наличие поля hasTag, выполнил item.readTag(stack) и получил таблицу тегов, выбрал из таблицы нужный.

 

Главная сложность практического применения заключалась в том, что эта библиотека требует включения доступа к тегам в файле конфигурации OpenComputers. При этом я играл на серверах, где доступа к тегам не было. В результате я был вынужден использовать менее очевидные подходы вроде чтения хешей NBT с помощью апгрейда базы данных или МЭ-сети. А для реализации этих трюков достаточно иметь доступ к тегам только в творческом режиме, где их оказалось проще прочитать отладочной платой, нежели лезть в конфиг и устанавливать библиотеки.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, Glozeysk сказал:

Нашёл одну библиотеку, как-то взаимодействующую с NBT, вот она: https://github.com/OpenPrograms/Magik6k-Programs

Можно ли реализовать это с её помощью, или чем-то другим?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

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

Весь интернет облазил чтобы на этот вопрос ответ получить...

А можно пример использования? Простая программка, которая, допустим, перемещает только зачарованный на остроту 5 алмазный меч из 1 слота северной стороны во 2 слот южной стороны. Я совершенствую скрипт автокрафта, без чтения NBT смысла в этом просто не будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, eu_tomat сказал:

Пример не дам, я экспериментировал слишком давно. Помню лишь, что особых проблем при использовании этой библиотеки у меня не возникло: транспозером получил информацию о содержимом слота, проверил наличие поля hasTag, выполнил item.readTag(stack) и получил таблицу тегов, выбрал из таблицы нужный.

 

Главная сложность практического применения заключалась в том, что эта библиотека требует включения доступа к тегам в файле конфигурации OpenComputers. При этом я играл на серверах, где доступа к тегам не было. В результате я был вынужден использовать менее очевидные подходы вроде чтения хешей NBT с помощью апгрейда базы данных или МЭ-сети. А для реализации этих трюков достаточно иметь доступ к тегам только в творческом режиме, где их оказалось проще прочитать отладочной платой, нежели лезть в конфиг и устанавливать библиотеки.

 

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

У меня скрипт выдаёт такую ошибку

 

Набор символов в первой строке таблицы всегда разный

Строка 10 в моём скрипте - nbt = item.readTag(itemStack)

Может я неправильно либы скачал? Или они устарели уже...

Edit: похоже, что устарели. В файлах либы есть программка, читающая NBT предмета в инвентаре робота. Она выдаёт такую же ошибку. Может либы можно как-то обновить?

Edit 2.0: Проблема решена. Нужно было обновить библиотеку nbt, заменив 

local bit32 = bit32

на

local bit32 = require "bit32"
Изменено пользователем Glozeysk
вопрос закрыт

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Glozeysk сказал:

Проблема решена. Нужно было обновить библиотеку nbt, заменив 

local bit32 = bit32

на

local bit32 = require "bit32"

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, eu_tomat сказал:

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

В файле bit32.lua написано следующее: 

Backwards compat for Lua 5.3; only loaded in 5.3 because package.loaded is
     prepopulated with the existing global bit32 in 5.2.

Получается, что на архитектуре 5.2 bit32 был включён в пакет, а в 5.3 стал отдельным файлом. Просто правильно вызвать его - и всё заработало. А, да, ещё в deflate.lua пару мест пришлось закомментить, а именно:

 local function runtime_error(s, level)
   level = level or 1
   error((s), level+1)
 end

и

   if not disable_crc and data_crc32 then
     if data_crc32 ~= expected_crc32 then
       runtime_error('invalid compressed data--crc error')
     end    
   end

Тут уже не знаю, в чём в них ошибка, но если закомментить - скрипт наконец-то читает NBT из инвентаря робота. Буду пробовать читать NBT с транспозера

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не помню, как у транспозера, но у контроллера тег просто gzip'ом пожат.

image.png?ex=675a0ea4&is=6758bd24&hm=80e78e03022e1e89da623f95bf97aa5833e2ef3e5d3365b71766274d7962d033&

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, Doob сказал:

Не помню, как у транспозера, но у контроллера тег просто gzip'ом пожат.

Насколько я помню, у них одинаковый формат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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