vx13
-
Публикации
193 -
Зарегистрирован
-
Посещение
-
Победитель дней
14
Сообщения, опубликованные пользователем vx13
-
-
12 минут назад, kaka888 сказал:stdin:1: attempt to index a nil value
Значит нет предмета с таким fingerprint.
Вот это код выведет список предметов в сети (id и dmg)
for _, item in ipairs(component.me_interface.getAvailableItems()) do print(item.fingerprint.id, item.fingerprint.dmg); end
-
А component.me_interface.getItemDetail({id="minecraft:dirt"}).all() что возвращает?
-
15 минут назад, kaka888 сказал:Так... У меня новая ошибка.
Ввожу: component.me_interface({id="minecraft:dirt"},"up")
Выдаёт следующую ошибку: Can't fing item fingerprint minecraft:dirt:-1:null
-1 после dirt оно влепило автоматом, я пробовал менять это значение через переменную dmg в таблице fingerprint.
Не понимаю, что происходит...Предмета нет в хранилище.
-
2 минуты назад, kaka888 сказал:Я вводил следующее: me_interface.exportItem("IC2:itemOreIridium") Этот id вводить нужно? Я вводил и число, и raw name и что только не вводил. Выдаёт ошибку.
me_interface.exportItem({ id = "IC2:itemOreIridium" })
id = name из inventory_controller.getStackInSlot()
-
itemFingeprint (первый параметр exoirtItem) - это таблица:
{id ="<ид предмета>", dmg = <метадата или прочность>, nbt = "<хэш nbt>"}nbt и dmg опциональны.
-
local sides = { north = 2, south = 3, west = 4, east = 5, } local testN = 22 -- центр, реальные координаты local startX, startZ = 0, 0 -- кол-во кругов local radius = 2 -- расстояние между "кругами" local distance = 1 -- направление взгляда на поле -- нумерация идёт слева направо и сверху вниз local orientation = sides.north local step = distance + 1 local offset = radius*step local size = offset*2+1 -- преобразование виртуальной системы координат в реальную -- Minecraft -- -- z -- (-) -- north -- x (-) west east (+) x -- south -- (+) -- z -- условная система координат -- -- -- (-x) -- (-z) ^ (+z) -- (+x) -- ^ направление взгляда на поле -- нумерация идёт слева направо и сверху вниз local toRealFn = { [sides.east] = function(virtX, virtZ) return startX - virtX, startZ + virtZ end, [sides.south] = function(virtX, virtZ) return startX - virtZ, startZ - virtX end, [sides.west] = function(virtX, virtZ) return startX + virtX, startZ - virtZ end, [sides.north] = function(virtX, virtZ) return startX + virtZ, startZ + virtX end, } local d = radius*2+1 local maxN = d^2 local function getCoord(n) local xx, zz = math.floor((n-1)/d)*step-offset, math.fmod(n-1, d)*step-offset return toRealFn[orientation](xx, zz) end local n = 0 for xx = -offset, offset, step do for zz = -offset, offset, step do n = n + 1 local x, z = toRealFn[orientation](xx, zz) print(n, x, z) end end print("["..testN.."]".."=", getCoord(testN))Вот вывод:
radius=2, distance=1 1 -4 -4 2 -2 -4 3 0 -4 4 2 -4 5 4 -4 6 -4 -2 7 -2 -2 8 0 -2 9 2 -2 10 4 -2 11 -4 0 12 -2 0 13 0 0 14 2 0 15 4 0 16 -4 2 17 -2 2 18 0 2 19 2 2 20 4 2 21 -4 4 22 -2 4 23 0 4 24 2 4 25 4 4 [22]= -2 4 radius=1, distance=1 1 -2 -2 2 0 -2 3 2 -2 4 -2 0 5 0 0 6 2 0 7 -2 2 8 0 2 9 2 2 [8]= 0 2Если не нужна нумерация слева направо и сверху вниз по направлению взгляда, то можно упростить код преобразования координат, захардкодив конкретное направление.
Код преобразования координат нужно потестирвать.
-
1
-
-
13 часов назад, kaka888 сказал:.getAllStacks().
Этот метод для блоков с инвентарями добавляет мод OpenPeripheral.
Возвращает массив таблиц с информацией о предметах. Индекс - это номер слота. Получить инфо о предмете в слоте N:
component.chestname.getAllStacks()[N].all()-
1
-
-
При игре на сервере названия всегда на английском. Так как программа выполняется на сервере, а локаль сервера дефолтная английская.
-
Если запускашь на сервере, то нужно добавить робота и мод в приват.
Для WG:
rg addmember приват ник_владельца rg addmember приват -n [OpenComputers] -
У нас в стилях просто ограничение стоит на резину.И не надо его убирать. Растянутый на весь широченный экран текст - это просто жуть
-
Не работает. Чанки не форисруются. Тикеты не запрашиваются. Установи моды Dimensional Anchor и ChickenChunks. Первый подсвечивает форсированные чанки. Второй добавляет команду /chunkloaders, которая открывает карту загруженных чанков.
-
Всё-таки попробовал запустить, на сервере:
Скрин https://imgur.com/a/pIM6zwj
Чанки не форсировались. Проверял через F6 (мод DimensionalAnchor) и команду /chunkloaders (не знаю кто ее добавляет, forge или ChickenChunks) -
А ты на сервере тестировал? Учёл то, что спавн подгружен постоянно?
Пробежался по коду, если правильно понял, вот что происходит при запуске сервера:
- сервер стартует
- загружаются миры
- при загрузке миров - загружаются тикеты
- загружаются тикеты - загружаются чанки с ЧЛ
- загружаются чанки с ЧЛ - вызывается метод onConnect
- в методе onConnect - ЧЛ добавляется в список и тикет освобождается
- тикет освобождается - чанки выгружаются
- чанки выгружаются - вызывается метод onDisconnect
- в методе onDisconnect - ЧЛ удаляется из списка
Игрок заходит на сервер - а в списке нет его ЧЛ. Упс.
Тоже будет если игрок вышел с сервера - ЧЛ удалится из списка и активировать его не получится.
Я тоже думал поначалу, что достаточно подписаться на события входа/выхода игрока на сервер. При входе - грузим чанки; При выходе - выгружаем. Оказалось не всё так просто...
В общем случае, нельзя освобождать тикет, если onDisconnect вызывается при выгрузке чанка. Его надо где-то сохранить для последующего восстановления. Так мы приходим к необходимости отслеживать событие ChunkUnload. Я в этом событии скидываю тикет обратно в restoredTickets и устанавливаю поле ticket в null, что предотвращает его освобождение.
Прекрасно. Но что будет если в мире не осталось загруженных чанков? Он будет выгружен.
Что будет, если мы попробуем форсировать чанк для тикета в выгруженном мире? Получим NullPointerException в ForgeChunkManager. Поэтому пришлость отслеживать событие WorldUnload. В этом событии я удаляю тикеты выгружаемого мира из restoredTickets.
Буду рад если ошибаюсь, и твой код работает.И ещё. В методе updateLoadedChunk, ты сначала отменяешь форсирование всех 9 чанков тикета. А затем форсируешь чанки для новой позиции. Так как чанки выгружаются не мгновенно, то это будет работать. Но данный код будет вызываться при каждом перемещении робота, и с частотой tickFrequency для дрона. Лучше брать дельту. Как это сделано в OC.
PS
Мод не запускал. Попробую завтра.
-
@@JLevi, владелец присваивается чанклоадырю при активации и записывается в nbt предмета? Такой ЧЛ должн работать и в микроконтроллерах и компьютерах. В моём варианте я получаю владельца через интерфейс Agent. А его реализуют только роботы и дроны; у мк нет владельца, а владельцем компьютера можно назначить любого игрока. Поэтому, если ЧЛ должны работать только при онлайне игрока, то работать они будут только в роботах и дронах.
Кстати, в твоём варианте игрок, который постоянно зависает на сервере, может активировать ЧЛ-карты другим игрокам.
Можно глянуть на сорцы? -
Новые возможности улучшения "Загрузчик чанков", далее ЧЛ.
- Возможность загружать чанки только при онлайне игрока.
- Белый/чёрный список измерений в которых ЧЛ разрешён/запрещён (closes #2768).
- Возможность ограничить кол-во одновременно работающих ЧЛ на одного игрока (настраивается в "forgeChunkLoading.cfg").
- Добавлена команда, которая выводит список установленных ЧЛ.
- Более подробное логирование (уровень настраивается).
- Работать может только один из ЧЛ с одинаковым адресом (защита от дюпа).
- Дроны при перемещении в другое измерение корректно перезапрашивают тикет.
- ЧЛ можно устанавливать в адаптер и микроконтроллер (closes #2499).
Описание опций (группа chunkloader):
- опция requireOnline: Если true: ЧЛ будет грузить чанки только при онлайне игрока. Если игрок выходит с сервера его чанки будут выгружены (ЧЛ продолжит потреблять энергию; метод isActive() компонента ЧЛ вернёт true). При входе игрока на сервер чанки будут загружены. Тикеты будут регистрироваться на игрока, а не на мод (см. опцию playerTicket).
- опция dimBlacklist: Список измерений в которых работа ЧЛ запрещена (числовой id).
- опция dimWhitelist: Список измерений в которых работа ЧЛ разрешена. Если список пуст, то ЧЛ могут работать во всех не запрещённых измерениях. Если измерение указано в обоих списках, то dimBlacklist имеет приоритет. Если использование ЧЛ запрещено, то метод setActive() компонента ЧЛ будет возвращать false.
- опция playerTicket: Если true: Тикеты будут регистрироваться на игрока, а не на мод. Можно ограничить кол-во одновременно работающих ЧЛ на одного игрока в конфиге "forgeChunkLoading.cfg". Если ЧЛ не имеет владельца-игрока, то ЧЛ невозможно активировать.
- опция logLevel: Уровень логирования (0 - минимально; 1 - более подробное, 2 - для отладки)
Команда oc_chunckloaders (сокр. oc_cl) - выводит список ЧЛ в загруженных чанках и список зарегистированных неактивных тикетов. Выводится: адрес компонента, статус, координаты блока, координаты чанка, измерение, владелец. Статусы: inactive - ЧЛ выключен, active - ЧЛ включён, active/suspend - ЧЛ включён, но не грузит чанки. Пример вывода:
[chunkloader] Currently there are 1 registered chunkloaders: [chunkloader] chunkloader{a92f81b6-dc7e-480d-a805-12955462c8e4, inactive, Pos{x=153, y=64, z=440}[9, 27]/0, owned by Scrag} [chunkloader] Currently there are 1 tickets in unloaded chunks: [chunkloader] ticket{725dfb96-8c06-45d5-ab68-a23012a0cd03, Pos{x=66, y=63, z=1131}[4, 70]/0, owned by Scrag} [chunkloader] Currently there are 3 tickets in unloaded dimensions: [chunkloader] ticket{24b11ecd-8e87-44df-99c9-b0079922539f, Pos{x=38, y=63, z=32}[2, 2]/1, owned by Scrag} [chunkloader] ticket{04e44303-c148-46a6-9ec3-c2dee24de787, Pos{x=97, y=57, z=18}[6, 1]/1, owned by Scrag} [chunkloader] ticket{f4f8d7a7-415e-4eec-b32b-09d9e0c4a43c, Pos{x=95, y=57, z=18}[5, 1]/1, owned by Scrag}
Данный патч закрывает https://github.com/MightyPirates/OpenComputers/issues/2768 и https://github.com/MightyPirates/OpenComputers/issues/2499.
Ветка https://github.com/svitoos/OpenComputers/tree/chunkloader (ответвлена от тега v1.7.2)
Ссылка на скачивание https://github.com/svitoos/OpenComputers/releases/tag/v1.7.2-chunkloader
Может быть КА согласится установить на сервер и протестировать патч в условиях реального сервера? Патч основан на версии 1.7.2, так что никаких багов, не связанных с ЧЛ быть не должно. Если что-то пойдет не так — ЧЛ всегда можно отключить, установив лимит тикетов в 0 в конфиге "forgeChunkLoading.cfg". И может быть кто-нибудь переведёт описание на англ., а то я сомневаюсь в адекватности перевода GoogleTranslate?-
4
-
Блин, хочется узнать историю ника vx13
Извини, если ошибся и там другая цифра.
Вот просто интересно, vx - это вектор x?
"vx" - мой логин на домашнем компе ("v" - первая буква имени, "x" - потому что понравилась и расположена рядом). 13 - чёртова дюжина - добавил, чтобы увеличить длину логина.
-
5
-
-
Привести сообщение из чата и эталонную строку к одному регистру (например, нижнему), через unicode API (или string.lower/upper., если используется только латинский алфавит).
local unicode = require "unicode" ... if unicode.lower(msg) == a then ...
-
3
-
-
tonumber(arg) — конвертирует аргумент arg в число; вернёт nil, если конвертация не возможна.
-
Робот может накапливать опыт при установленном Апгрейде опыта.
Как посмотреть опыт робота?
component.experience.level()
но бонусы по дефолту она там мизерные дает. нет в ней смысла. Только слот занимает. Попробуй робота просто поставить на коблогенератор, и пусть сутками маслает. Вроде на них игроки прокачивали своих роботов.
Высокоуровневый робот может хранить больше энергии (5000 на уровень в дефолтном конфиге). Для робота-шахтёра это очень полезно.
Прокачать робота можно скармливая ему зачарованные предметы, которые наловил робот рыболов (метод component.experience.consume()).
Небольшая програмка, которая показывет уровень робота и может потреблять зачарованные предметы для увеличения уровня:
exp.lua (как refuel.lua для генератора).local component = require("component") local robot = require("robot") local shell = require("shell") local args = shell.parse(...) local function printUsage() print("Usages:") print("exp") print(" Gets the current level.") print("exp <slot>") print(" Tries to consume an enchanted item to add") print(" expierence to the upgrade") print(" from the specified slot.") print("exp all") print(" from all slots.") end if component.isAvailable("experience") then local e = component.experience if #args == 0 then print("Level: "..e.level()) elseif tonumber(args[1]) ~= nil then local slot = tonumber(args[1]) robot.select(slot) io.write("Experience from slot "..slot.."... ") local success, msg = e.consume() if success then print("success.") else print("failed: "..msg) end robot.select(1) elseif string.lower(args[1]) == "all" then io.write("Experience from all slots... ") for i = 1, 16 do robot.select(i) e.consume() end robot.select(1) print("done.") else printUsage() end else print("This program requires the experience upgrade to be installed.") end-
4
-
-
Этот вопрос был задан в чате:
Как посмотреть опыт робота? Так и не понял, апи никакого не нашёл. Нельзя получается? -
Можно программно замедлять:
local component = require "component" local c = { } local i = 1 for addr in component.list("command_block") do c[i] = component.proxy(addr) i = i + 1 if i == 3 then break end end c[1].setCommand("/gamerule doDaylightCycle false") c[2].setCommand("/gamerule doDaylightCycle true") while true do c[1].executeCommand() os.sleep(0.5) c[2].executeCommand() endВремя выводимое os.date замедляется.

-
ванильные часы? и лепешка которая там крутится?да
-
нет, не правильно) Часы шли в стандартном темпе. И солярки жили по законам стандартного времени, и могли не работать, когда солнце в зените

Этот мод только визуально отвязывает и замедляет движение солнца.
Я имел ввиду предмет. Я смотрел на часы перед тем, как вылезти из-под земли. И диск часов двигался гораздо медленнее обычного.
-
убран пока мод на визуальное удлинение дня и ночи (немного это не то, что я хотел. Возникает путаница между внутренним временем майна, которрое как шло так и идет, и визуалкой. Данный мод просто отвязывает графическое движение солнца, и никак реально не замедляет время)Часы, показывали время правильно, в соответствии с движением солнца.

Ошибка после component.me_interface.exportItem()
в Помогите найти ошибку
Опубликовано:
Проверял на этих версиях модов, всё работает. ME-сеть минимальная:
appliedenergistics2-rv3-beta-6.jar OpenComputers-MC1.7.10-1.7.2.1239-universal.jar OpenModsLib-1.7.10-0.10.jar OpenPeripheral-1.7.10-AIO-8.jarНет. Если дамаг не указан будет выдан любой предмет с таким id.