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

vx13

Гуру
  • Публикации

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

  • Посещение

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

    14

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


  1. 6 минут назад, kaka888 сказал:

    Я короче вызвал функцию, которая должна выводить все айтемы в сети МЭ, и она выводит мне следующее: {n=0} - и не важно, что и сколько я положу в мэ...

    Что за фигня?
    Баг?

    Проверял на этих версиях модов, всё работает. 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
    1 минуту назад, whiskas сказал:

    Дамаг обезательный  

    {id="minecraft:dirt"} тут ты вводиш ток id

     

    Нет. Если дамаг не указан будет выдан любой предмет с таким id.


  2. 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

     


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

    Так... У меня новая ошибка.

    Ввожу: component.me_interface({id="minecraft:dirt"},"up") 

    Выдаёт следующую ошибку: Can't fing item fingerprint minecraft:dirt:-1:null 

    -1 после dirt оно влепило автоматом, я пробовал менять это значение через переменную dmg в таблице fingerprint.
    Не понимаю, что происходит...

    Предмета нет в хранилище.


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

     

    Я вводил следующее: me_interface.exportItem("IC2:itemOreIridium") Этот id вводить нужно? Я вводил и число, и raw name и что только не вводил. Выдаёт ошибку. 

    me_interface.exportItem({ id = "IC2:itemOreIridium" })

    id  = name из inventory_controller.getStackInSlot()


  5. 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

  6. 13 часов назад, kaka888 сказал:

    .getAllStacks().

    Этот метод для блоков с инвентарями добавляет мод OpenPeripheral.

    Возвращает массив  таблиц с информацией о предметах. Индекс - это номер слота. Получить инфо о предмете в слоте N:

    component.chestname.getAllStacks()[N].all()

     

    • Спасибо 1

  7. Не работает. Чанки не форисруются. Тикеты не запрашиваются. Установи моды Dimensional Anchor и ChickenChunks. Первый подсвечивает форсированные чанки. Второй добавляет команду /chunkloaders, которая открывает карту загруженных чанков.

     

    https://imgur.com/a/pWQ4cqi


  8. А ты на сервере тестировал? Учёл то, что спавн подгружен постоянно?

     

    Пробежался по коду, если правильно понял, вот что происходит при запуске сервера:

    • сервер стартует
    • загружаются миры
    • при загрузке миров - загружаются тикеты
    • загружаются тикеты - загружаются чанки с ЧЛ
    • загружаются чанки с ЧЛ - вызывается метод onConnect
    • в методе onConnect - ЧЛ добавляется в список и тикет освобождается
    • тикет освобождается - чанки выгружаются
    • чанки выгружаются - вызывается метод onDisconnect
    • в методе onDisconnect - ЧЛ удаляется из списка

    Игрок заходит на сервер - а в списке нет его ЧЛ.  Упс.

    Тоже будет если игрок вышел с сервера - ЧЛ удалится из списка и активировать его не получится.
     
    Я тоже думал поначалу, что достаточно подписаться на события входа/выхода игрока на сервер. При входе - грузим чанки; При выходе - выгружаем. Оказалось не всё так просто...
     
    В общем случае, нельзя освобождать тикет, если onDisconnect вызывается при выгрузке чанка. Его надо где-то сохранить для последующего восстановления. Так мы приходим к необходимости отслеживать событие ChunkUnload. Я в этом событии скидываю тикет обратно в restoredTickets и устанавливаю поле ticket в null, что предотвращает его освобождение.
     
    Прекрасно. Но что будет если в мире не осталось загруженных чанков? Он будет выгружен.
    Что будет, если мы попробуем форсировать чанк для тикета в выгруженном мире? Получим NullPointerException в ForgeChunkManager. Поэтому пришлость отслеживать событие WorldUnload. В этом событии я удаляю тикеты выгружаемого мира из restoredTickets.
     
    Буду рад если ошибаюсь, и твой код работает.

     

    И ещё. В методе updateLoadedChunk, ты сначала отменяешь форсирование всех 9 чанков тикета. А затем форсируешь чанки для новой позиции. Так как чанки выгружаются не мгновенно, то это будет работать. Но данный код будет вызываться при каждом перемещении робота, и с частотой tickFrequency для дрона. Лучше брать дельту. Как это сделано в OC.

     

    PS

     

    Мод не запускал. Попробую  завтра.


  9. @@JLevi, владелец присваивается чанклоадырю при активации  и записывается в nbt предмета? Такой ЧЛ должн работать и в микроконтроллерах и компьютерах. В моём варианте я получаю владельца через интерфейс Agent. А его реализуют только роботы и дроны; у мк нет владельца, а владельцем компьютера можно назначить любого игрока. Поэтому, если ЧЛ должны работать только при онлайне игрока, то работать они будут только в роботах и дронах.
     
    Кстати, в твоём варианте игрок, который постоянно зависает на сервере, может активировать ЧЛ-карты другим игрокам. :)
     
    Можно глянуть на сорцы?


  10. Новые возможности улучшения "Загрузчик чанков", далее ЧЛ.

    • Возможность загружать чанки только при онлайне игрока.
    • Белый/чёрный список измерений в которых ЧЛ разрешён/запрещён (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

  11. Блин, хочется узнать историю ника vx13

    Извини, если ошибся и там другая цифра.

    Вот просто интересно, vx - это вектор x?

    "vx" - мой логин на домашнем компе ("v" - первая буква имени, "x" - потому что понравилась и расположена рядом). 13 - чёртова дюжина - добавил, чтобы увеличить длину логина.

    • Нравится 5

  12. Привести сообщение из чата и эталонную строку к одному регистру (например, нижнему), через unicode API (или string.lower/upper., если используется только латинский алфавит).

    local unicode = require "unicode"
    ...
    if unicode.lower(msg) == a then
    ...
    
    • Нравится 3

  13. Робот может накапливать опыт при установленном Апгрейде опыта.

    Как посмотреть опыт робота?

    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

  14. Можно программно замедлять:

    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 замедляется.

    :)


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

    Этот мод только визуально отвязывает и замедляет движение солнца.

    Я имел ввиду предмет. Я смотрел на часы перед тем, как вылезти из-под земли. И диск часов двигался гораздо медленнее обычного.


  16.  

     

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

    Часы, показывали время правильно, в соответствии с движением солнца.

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