vx13
-
Публикации
193 -
Зарегистрирован
-
Посещение
-
Победитель дней
14
Сообщения, опубликованные пользователем vx13
-
-
Вот https://pastebin.com/f5UUnsbR
Изменения в тз:
К транспозеру можно подключить несколько сундуков.
Код i = <первые три символа адреса транспозера>_<первая буква стороны сундука>
-
4
-
-
Такой вариант:
local component = require("component") local _,address = require("event").pull("touch") local ff=io.open("/boot/98_connectScreen.lua","w") ff:write([[ local component = require("component") local address = "]]..address..[[" if component.screen.address ~= address then if pcall(function() component.setPrimary("screen", address) end) then component.setPrimary("keyboard", component.invoke(address, 'getKeyboards')[1]) end end ]]) ff:close() if component.screen.address ~= address then require("term").clear() component.setPrimary("screen", address) component.setPrimary("keyboard", component.invoke(address, 'getKeyboards')[1]) os.sleep(0.1) component.gpu.bind(component.screen.address) require("term").clear() endВроде бы делает то, что нужно. (OpenOS 1.6)
-
3
-
-
В том то и дело стоит все дефолтно, но новая версия работает хотя после скана сундука пишет что не нашла его 0_о.
Контроллер инвентаря не может получить доступ к сундуку. Может быть проблема с приватом или настройками сервера.
-
Версия 0.10.8. Изменён формат БД. Конвертер из старого формата присутствует.
-
К сожалению не все так просто
Робот не нашёл сундук. (Сторона, в которой робот ищет сундук, задаётся переменной STORAGE_SIDE. По дефолту - перед роботом)
-
Вызвать внешнюю команду:Запускается этот скрипт с помощью РакБота, в документации про wait ничего нет. Вот решил у вас спросить, может вы знаете как сделать задержку.
-- win7 (может быть и выше) os.execute("timeout " .. tonumber(n))--windows WScript function sleep(n) local vb = "test.vbs" local f = assert(io.open(vb,"w")) f:write("WScript.Sleep(" .. (tonumber(n) * 1000) .. ")\n") f:close() os.execute(vb) end-- Cygwin/MinGW/Windows Server Resource Kit/Linux function sleep(n) os.execute("sleep " .. tonumber(n)) endВзял отсюда. -
Т.е через МФСУ не получится?
Если МФСУ над роботом, то не получится.
-
Действительно, робот не может забрать предмет из МФСУ, если МФСУ над роботом.
Почему так, я не знаю. suckFromSlot возвращает false без сообщения об ошибке.
-
У зардника OC и МФСУ для зарядки используется слот 1.Я как понимаю он пытается доставить бур из зарядника из OC? А я его тестирую с МФСУ... Да, конечно можно и в заряднике, но он очень долго заряжает его. Можно как-нибудь с МФСУ провернуть?
Я не понимаю, почему у тебя не работает.
Попробуй запустить код из предыдущего поста на полигоне:
Стоит МФСУ. Рядом робот, мордой в МФСУ. В руке робота бур.


-
Вариант с доп. проверками. Выводит сообщения об ошибках.
local sides = require "sides" local robot = require "robot" local component = require "component" local inv = component.inventory_controller -- в какой стороне от робота находится зарядник (front, down, up) local CHARGER_SIDE = sides.front -- спереди -- слот в котором будет заряжаться инструмент (слот 1 подходит для зарядников OC/IC2) local CHARGER_SLOT = 1 function charge_tool() -- перемещаем инструмент из руки в инвентарь (equip() меняет местами содержимое текущего слота и руки) inv.equip() -- получаем информацию об инструменте в текущем слоте local tool = inv.getStackInInternalSlot(robot.select()) if tool == nil then print("Нет инструмента") os.exit(1) elseif tool.maxCharge == nil then print("Инструмент нельзя зарядить") os.exit(1) end -- перемещаем инструмент в зарядник if not inv.dropIntoSlot(CHARGER_SIDE, CHARGER_SLOT) then print("Не удалось положить инструмент в зарядник") os.exit(1) end -- зарядка инструмента while true do local tool = inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT) if not tool then print("В заряднике нет инструмента") else if tool.charge >= tool.maxCharge then break end end os.sleep(1) end -- забираем инструмент из зарядника if not inv.suckFromSlot(CHARGER_SIDE, CHARGER_SLOT) then print("Не удалось забрать инструмент из зарядника") os.exit(1) end -- перемещаем инструмент обратно в руку робота inv.equip() end -- зарядка потребуется при понижении прочности инструмента ниже этого значения -- для электроинструмента прочность соответствует его заряду (1 - полный заряд, 0 - разряжен) local TOOL_MIN_ENERGY = 0.3 function check_tool_energy() -- проверяем нужно ли зарядить инструмент (если он есть и может терять прочность) local d = robot.durability() if d and (d < TOOL_MIN_ENERGY) then -- ставим зарядник или возвращаемся на базу к установленному заряднику -- ... -- заряжаем инструмент charge_tool() -- возвращаемся к прерванной работе -- ... end end check_tool_energy() -
Такая ошибка может возникнуть в строке
while inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT).charge < tool.maxCharge do
если в слоте зарядника не будет предмета, inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT) вернёт nil.
Робот смог положить бур в зарядник или он остался в инвентаре? Если не смог, то зарядник стоит не с той стороны. (Можно проверить смог ли робот положить бур в зарядник - dropIntoSlot() возвращает true в случае успеха.)
Забирать бур из зарядника во время зарядки нельзя.
-
Робот должен повернуться в нужную сторону. Оказывается, доступны только стороны front, up, down.Да сама, ну тогда ты прав, надо сделать чтобы с задней стороны весь(корме бура) инвентарь робота скидывался в сундук.

-
МЭ-система вытягивает предметы из робота сама? Лучше если робот будет сам скидывать свой инвентарь, тогда он сможет сохранить нужные ему предметы.А так же например из робота (всё что в нём от 1 слота до N) импортируется в МЭ систему (AE2), а из неё в сундук. А когда бур кладётся в первый слот, то бур попадает в МЭ систему, а из неё в сундук.
equip() - это единственный способ доступа к инструменту робота.Можно ли сделать, чтобы он сразу из активного слота клал в зарядник?
А да, можешь как-нибудь засунуть это в свой исходник?
-- ... while true do check_tool_energy() robot.swing() end
Какие ошибки?У меня стоит зарядник справа, я указываю в исходнике right и при запуске выдаёт 2 ошибки функции.
-
Например, так:Но как сделать проверку на кол-во энергии? Я не шарю
--Программа выполняет зарядку инструмента в руке робота, зарядник спереди. local sides = require "sides" local robot = require "robot" local component = require "component" local inv = component.inventory_controller -- в какой стороне от робота находится зарядник (front, left, right, down, up) local CHARGER_SIDE = sides.front -- спереди -- слот в котором будет заряжаться инструмент (слот 1 подходит для зарядников OC/IC2) local CHARGER_SLOT = 1 function charge_tool() -- перемещаем инструмент из руки в инвентарь (equip() меняет местами содержимое текущего слота и руки) inv.equip() -- получаем информацию об инструменте в текущем слоте local tool = inv.getStackInInternalSlot(robot.select()) -- перемещаем инструмент в зарядник inv.dropIntoSlot(CHARGER_SIDE, CHARGER_SLOT) -- зарядка инструмента while inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT).charge < tool.maxCharge do os.sleep(10) end -- забираем инструмент из зарядника inv.suckFromSlot(CHARGER_SIDE, CHARGER_SLOT) -- перемещаем инструмент обратно в руку робота inv.equip() end -- зарядка потребуется при понижении прочности инструмента ниже этого значения -- для электроинструмента прочность соответствует его заряду (1 - полный заряд, 0 - разряжен) local TOOL_MIN_ENERGY = 0.3 function check_tool_energy() -- проверяем нужно ли зарядить инструмент if robot.durability() < TOOL_MIN_ENERGY then -- ставим зарядник или возвращаемся на базу к установленному заряднику -- ... -- заряжаем инструмент charge_tool() -- возвращаемся к прерванной работе -- ... end end check_tool_energy()Программа выполняет зарядку инструмента в руке робота, зарядник спереди.-
1
-
-
Почему новые звуки добавлены в виде мода MP-clientRC-1.7.10.jar (в файле толко assets, без кода), а не как ресурс-пак? Можно ли переместить эти звуки в ресурс-пак. Хотелось бы иметь возможность выбора.
P. S.
Клиент HD
-
-
круто) не знааал. А что делают Эндер пчелы?
Эндер пёрлы.
-
1
-
-
А драконовское яйцо зачем?
что оно делает?Цветок для эндер-пчёл.
-
1
-
-
Ванилла
1. Яйцо жителя 500 UU.
2. Череп скелета иссушителя 900 UU
3. Яйцо дракона - 3000 UU
-
Я еще недели 1.5 - 2 назад хотел сделать и практически сделал, самое интересное сия схема всеми пунктами одинаковые с моей.Мне кажется что ты взял принципы работы которые я высказал на сервере в чате. Больно уже похожи.
Идея написать сборщик латекса с гевеи появилась у меня ещё на хардовом робокрафте, на котором невозможно было получить резину из древесины.
Но нашёл время только в январе, на праздниках. А сейчас только причесал код и выложил.
По поводу схожести принципов работы — вариантов-то не особо много:
- Расположение деревьев через одно — самый компактный вариант.
- Без геоанализатора — не обойтись.
- Использование электрокраника — не ломается, не требует крафта краников. Нужен лишь источник энергии, который и так нужен.
- Обход точек сбора с использованием поиска пути — есть готовая библиотека, и не зачем колхозить собственный алгоритм обхода.
-
Программа предназначена для сбора латекса с деревьев гевеи. Использует геоанализатор и электрокраник.
Построение фермы- Деревья располагаются в узлах прямоугольной сетки (расстояние между деревьями 1 блок).
- Робот располагается в углу фермы на уровне пола.
- Над деревьями должно быть свободное пространство высотой 1 блок.
- Под роботом располагается сундук в который будет складываться латекс.
- Слева от робота располагается зарядное устройство для краника (может быть зарядным устройством из OC или энергохранителем из IC2).
- Зарядка для робота может располагаться сзади или справа (при необходимости).
Схема фермы (вид верху)
####### #@#@#@# ####### #@#@#@# ^######
@ — дерево
# — свободное пространство
^ — робот
Скриншоты фермы- Вид сверху
- Вид со стороны робота
Компоненты робота- геоанализатор
- инвентарь
- контроллер инвентаря
- улучшение «Парение» (1-й уровень) — устанавливается, если высота фермы (включая свободное пространство над деревьями) больше 8; не нужен, если высота полёта робота увеличена в конфиге OC.
- солнечный генератор (уменьшает потребность в зарядке на базе, но для автономной работы недостаточен)
- интернет-карта (нужна только для установки программы из интернета)
Возможная конфигурация робота

Использование
Перед началом работы необходимо просканировать ферму командой:rubber-farm --analyze <длина> <ширина> <направление_робота>
- <длина>, <ширина> — длина и ширина фермы (в стволах)
- <направление_робота> — сторона света, на которую ориентирован робот (south,west,east,north,юг,запад,восток,север)
Робот произведёт сканирование фермы, и запишет конфигурацию в файл /home/rubber-farm.cfg.
После этого можно запускать сбор латекса командой:rubber-farm --run
Не забудьте положить в слот инструмента электрокраник.
Используемые библиотеки
- table_io — запись/чтение луа-таблиц в файл (взят отсюда)
- erobot — обёртка над модулем "robot" добавляющая программную навигацию
- pathfinder — поиск пути от @Krutoy, оформленный в виде модуля (пост)
Установка
Выполнить последовательно следующие команды (необходима интернет-карта):pastebin get nxz9fk4G /lib/erobot.lua pastebin get 6qasEWEw /lib/pathfinder.lua pastebin get qVcqH0T6 /lib/table_io.lua pastebin get 7Ma8am97 /bin/rubber-farm.lua
Или скачайте вручную:
- erobot.lua в /lib/erobot.lua
- pathfinder.lua в /lib/pathfinder.lua
- table_io.lua в /lib/table_io.lua
- rubber-farm.lua в /bin/rubber-farm.lua
-
11
-
по просьбам и мольбам народных масс установлен мод extracells (аддон АЕ) на цифровые жидкостные хранилища и трубы.
ME Upgrade из extracells при установке в робота крашит игру.

-
Так как на сервере установлены моды добавляющие одинаковые металлы, предлагаю установить мод UniDict. Этот мод автоматически унифицирует одинаковые предметы из разных модов.
-
Версия 0.7.6 http://pastebin.com/bT21Huzi
Инструкция
Установите робота в левом верхнем углу карьера. За спиной робота — сундук. Слева — зарядник IC2(для зарядки инструмента). Сверху — зарядник OC(для зарядки робота). Можно слева можно поставить зарядник OC. Он будет заряжать и робота и инструмент. Зарядник OC должен быть включён. Для запуска копалки укажите размеры карьера:
kopalka [опции] размер_вперёд размер_вправо [размер_вниз]
Если размер_вниз не указан робот будет копать до бедрока. Если толщина слоя бедрока в мире не равна 5 блокам, укажите её опцией --bedrock-width=толщина_слоя_бедрока. Если бедрок плоский добавьте опцию -f (толщину в этом случае указывать не нужно).
При сканировании робот будет искать блоки, плотность которых находится в интервале (a, b); a — определяется опцией --min-hardness, b — определяется опцией --max-hardness. Значение по умолчанию (2.05, 40).
Для выкапывания всех блоков в указанной области(выкапывание ямы) добавьте опцию -q.
С помощью опции --scan-radius можно изменить радиус сканирования. Добавляйте её только если вы изменили значение geolyzerNoice в конфиге OC (geolyzerNoice=2 — --scan-radius=5; geolyzerNoice=1 — --scan-radius=10).
С помощью опции --estart задаётся уровень заряда аккумулятора необходимый для запуска робота. Если уровень заряда акк. опустится ниже --egen — будет включён генератор робота. Если уровень заряда акк. опустится ниже --ereturn — робот вернётся для подзарядки в точку старта. Уровни задаются в процентах от емкости акк. робота. Значения по умолчанию: --estart=99 --egen=50 --ereturn=20. Если емкость акк. больше или равна 1000000, то значения по умолчанию: --estart=20 --egen=10 --ereturn=2.
Если добавить опцию --dont-drop-scrap робот не будет выбрасывать мусор. С помощью опции --test-bedrock можно протестировать высоту бедрока в точке старта.
Блоки которые робот будет считать мусором задаются в переменной scrap (строка 16). Инструмент — в переменной mining_tools_list (строка 39). Топливо для генератора — в переменной fuel_list (строка 31). Периодичность запуска проверки состояния робота (заряд акк., заполненность инвентаря, целостность инструмента) в действиях (действием ситается удар, перемещение, сканирование колонны блоков) — в переменной chkPeriod (строка 14). В строках 6-12 задаются дефолтные значения для опций --egen, --ereturn, --estart, --min-hardness, --max-hardness, --scan-radius.

Генератор кейсов
в Выполненные заказы
Опубликовано:
Про метадату забыл. И запятая в последней строке, не нужна (json-валидатор ругается на это). Кавычки в названии предмета стоит энкодить, так как это json-строка.
А я, кстати, забыл расширения '.dat' добавить к файлу с кейсами.
В остальном, содержимое файлов у обоих программ идентично.