vx13
Гуру-
Публикации
193 -
Зарегистрирован
-
Посещение
-
Победитель дней
14
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя vx13
-
Эта докинг-станция для дрона. Устанавливается на трубы билдкрафта. Через эту станцию дрон может заряжаться (на энерготрубе) и сбрасывать вещи (на предметной). Добавляется модом Computronics. Изучать доки компонента в игре (команда components) и экспериментировать.
- 1 ответ
-
- 2
-
-
-
Можно поподробнее, пожалуйста. Я знаю, что в старших версиях MC роботы, могут взаимодействовать со слотами брони игроков и мобов. А вот на счёт инвентаря игрока не знал.
-
Если не брать во внимание первый ввод, то закономерность прослеживается: 5 из 10 раз мимо сундука = каждая вторая. Создай файл 05_0dropbug.lua в папке /boot с таким содержимым (требуется перезагрузить робота): local component = require "component" if component.isAvailable("robot") then local defDrop = component.robot.drop component.robot.drop = function(side, n) defDrop(side, 0) defDrop(side, n) end end Если прога в eeprom или установлена вместо init достаточно вставить: local defDrop = component.robot.drop component.robot.drop = function(side, n) defDrop(side, 0) defDrop(side, n) end в начало программы. Пользовался когда-то таким скриптом (только не помню на каком из серверов), помогало. Если не поможет, то остаётся только просить админов это исправить.
-
Упаковка, включается при наличии верстака. Что нужно паковать настраивается в конфиге. Если дальность будет как у геосканера, то слишком читерно будет. А вот возможность выполнять geolyzer.analyze() по определённым координатам будет нелишней. То есть, если нам нужны определённые руды, то делаем обычное сканирование, а затем анализируем блоки с подходящей плотностью.
-
Для экономии места в инвентаре прога упаковывает ресурсы в блоки. При этом, если нет 10 свободных слотов на сетку крафта и результат, ресурсы из инвентаря робота (кроме перечисленных в списке wlist) временно выбрасываются в мир на "крышу" робота и могут быть потеряны по разным причинам (лава, течение воды, плагин уничтожающий дроп по таймеру).
-
Для автономного робота, потеря части широко распространённых ресурсов, действительно, неважна. Но необходимость указывать ценные ресурсы в списке wlist - Сложнее, чем таскать дополнительный сундук. Для робота же, запущенного на выкапывание ограниченной области, возможная потеря ресурсов неприемлема. Потеря ресурсов = потеря времени игрока.
-
На добычу ресов потрачены время и энергия. Упаковка ресов проводится для экономии времени и энергии (уменьшается количество возвратов на базу для сброса лута). Выбрасывая ресурсы в мир при упаковке, мы рискуем их потерять. А значит время и энергия были потрачены в пустую? Выброс ресурсов включается только, если свободных слотов осталось меньше 10 (сетка крафта+слот результата)? Можно же в этом случае просто отключить упаковку. То есть пакуем ресурсы пока можем, затем просто собираем до заполнения инвентаря и едем на базу сдавать накопанное. Жалко же выкидывать ресы. Плюшкин во мне обливается горючими слезами.
-
Можно проверить, есть ли в команде drop() проблема: Поставь робота мордой к сундуку. Запусти интерпретатор lua. Положи в выделенный слот робота стак булыги. Выполни команду robot.drop(1) Посмотри переместился ли 1 блок в сундук или выпал в мир. Если блок попал в сундук, а не выпал - в команде drop нет проблем. Если выпал, повтори команду. Если блок попал в сундук, то эта именно та проблема о которой я писал выше. В этом случае помогает предварительный drop нулевого кол-ва. При эксперименте в привате, добавь робота в приват как писал Alex.
-
ИМХО, но выбрасывать накопанные ресурсы в мир ради их упаковки - плохая идея. Лава, вода, авто-уничтожитель дропа, другие игроки. Слоты в инвентаре робота не такой уж ценный ресурс. А если выбрасывать мусор, то и с 16 слотами можно жить. Просто будет робот чаще на базу прибегать. Бросай тот лагосервер, не для OpenComputers он, а для сбора бабла с игроков. Есть и другие сервера, более дружелюбные.
-
Наоптимизировали там что-то на сервере. Первая команда drop не видит сундука и выбрасывает в мир. Возможно, поможет добавление "холостой" команды drop(side, 0) перед каждой командой drop(side,count). И suck глючит также.
-
Этот параметр нигде не используется. И, по-моему, никогда не использовался. Поиск по истории даёт только два коммита с maxClipboard. В коммите, в котором было введено ограничение на длину строки, использовалось значение 1024. А сейчас реализация вставки другая.
- 2 ответа
-
- 1
-
-
краш в строке на 1.7.10 471 if item[slot].name == tool.name and item[slot].damage < tool.damage then Видно часть ошибки: (field '?') getAllStacks и getAllStacks().getAll() по-разному работают на разных версиях MC На 1.7.10: индексация массива из getAllStacks().getAll() начинается с 0, а не с 1. getAllStacks().getAll()[slot] для пустого слота возвращает пустую таблицу, а не таблицу с «воздухом» getAllStacks()[slot] для пустого слота возвращает nil, а не таблицу с «воздухом»
-
На данный момент, похоже, никак. Метод worldObject.getBlockId - возвращает числовой id блока. Метод debug.scanContent, добавленный в 1.7.3 scanContentsAt(x: number, y: number, z: number[, worldId: number]):boolean, string, table должен вернуть 3 параметром таблицу с описанием блока/сущности, но возвращает строку вида "net.minecraft.block.BlockStone@46a488c2" (вероятно, баг). https://ocdoc.cil.li/component:debug
-
Ошибка после component.me_interface.exportItem()
vx13 ответил в вопрос kaka888 в Помогите найти ошибку
Проверял на этих версиях модов, всё работает. 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. -
Ошибка после component.me_interface.exportItem()
vx13 ответил в вопрос kaka888 в Помогите найти ошибку
Значит нет предмета с таким fingerprint. Вот это код выведет список предметов в сети (id и dmg) for _, item in ipairs(component.me_interface.getAvailableItems()) do print(item.fingerprint.id, item.fingerprint.dmg); end -
Ошибка после component.me_interface.exportItem()
vx13 ответил в вопрос kaka888 в Помогите найти ошибку
А component.me_interface.getItemDetail({id="minecraft:dirt"}).all() что возвращает? -
Ошибка после component.me_interface.exportItem()
vx13 ответил в вопрос kaka888 в Помогите найти ошибку
Предмета нет в хранилище. -
Ошибка после component.me_interface.exportItem()
vx13 ответил в вопрос kaka888 в Помогите найти ошибку
me_interface.exportItem({ id = "IC2:itemOreIridium" }) id = name из inventory_controller.getStackInSlot() -
Ошибка после component.me_interface.exportItem()
vx13 ответил в вопрос kaka888 в Помогите найти ошибку
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 Если не нужна нумерация слева направо и сверху вниз по направлению взгляда, то можно упростить код преобразования координат, захардкодив конкретное направление. Код преобразования координат нужно потестирвать.
- 4 ответа
-
- 1
-
-
@eu_tomat, твои компактные схемы не работают на 1.12. А оригинальный вариант (не эконом, от @Asior) работает. Похоже, робот должен располагаться над нитью. Вот мой компактный вариант:
-
Обновление OpenComputers до версии 1.7.3
vx13 прокомментировал Fingercomp запись в блоге в Fingercomp's Playground
Не вырубаются. Добавили только белый/чёрный списки измерений и возможность установки в микроконтроллер.
