Lockry
-
Публикации
25 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем Lockry
-
-
У зардника OC и МФСУ для зарядки используется слот 1.
Я не понимаю, почему у тебя не работает.
Попробуй запустить код из предыдущего поста на полигоне:
Стоит МФСУ. Рядом робот, мордой в МФСУ. В руке робота бур.


В моём случаи зарядник находится с верхней стороны и по этому не работает. А вот с передней работает... Это нормально?
-
Я как понимаю он пытается доставить бур из зарядника из OC? А я его тестирую с МФСУ... Да, конечно можно и в заряднике, но он очень долго заряжает его. Можно как-нибудь с МФСУ провернуть?
-
Если игрок заберет из зарядника инструмент, программа упадет.
Поэтому, надо проверять наличие инструмента в слоте или забирать из зарядника.
local component = require('component') local computer = require('computer') local i_c = component.inventory_controller local robot = component.robot local i_size = 1 -- количество слотов у зарядника, чтобы не путать с другими блоками local function charge() local st = nil for d = 1, 4 do -- найти сторону с зарядником if i_c.getInventorySize(3) and i_c.getInventorySize(3) == i_size then -- проверить размер инвентаря while not st do if robot.durability() ~= 1 then -- если не заряжен i_c.equip() robot.drop(3) -- скинуть в зарядник os.sleep(10) -- подождать robot.suck(3) i_c.equip() -- взять из зарядника else -- иначе st = true -- остановить цикл end end break end robot.turn(true) end endЕсли вынуть инструмент, то робот будет и дальше пытаться его достать, пока не получит полностью заряженным.Я вот пытаюсь вснуть цикл robot.swing() в твой скрипт и у меня выходит, помоги пожалуйста

Вариант с доп. проверками. Выводит сообщения об ошибках.
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.
Когда робот кладёт бур в зарядник, программа крашится.

-
МЭ-система вытягивает предметы из робота сама? Лучше если робот будет сам скидывать свой инвентарь, тогда он сможет сохранить нужные ему предметы.
Да сама, ну тогда ты прав, надо сделать чтобы с задней стороны весь(корме бура) инвентарь робота скидывался в сундук.
Какие ошибки?
-
Например, так:
--Программа выполняет зарядку инструмента в руке робота, зарядник спереди. 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() [spoiler]Программа выполняет зарядку инструмента в руке робота, зарядник спереди.Cпасибо что откликнулся. Но есть пару пробем. У меня стоит зарядник справа, я указываю в исходнике right и при запуске выдаёт 2 ошибки функции. А так же например из робота (всё что в нём от 1 слота до N) импортируется в МЭ систему (AE2), а из неё в сундук. А когда бур кладётся в первый слот, то бур попадает в МЭ систему, а из неё в сундук. Можно ли сделать, чтобы он сразу из активного слота клал в зарядник?
А да, можешь как-нибудь засунуть это:
local robot = require("robot") while true do robot.swing() endв свой исходник? Я конечно сам могу интегрировать, но мне интересно увидеть как сделаешь это ты.
-
Смотри через durabiliti предмета.
Вики в помощь и гайды на ютубе.
Не поверишь, в ютАбе годных гайдов нет, а в гугле только описание команд.
-
Бур - в заряднике из ОС
Лучше через МФСУ
Ну через самого же робота можно заряжать , если робот будет выкладывать бур например в МФСУ, через компонент контроллер инвентаря.
Но как сделать проверку на кол-во энергии? Я не шарю
-
Здравствуйте, вот например в роботе лежит бур из IC2, по программе робот им копает => бур разряжается. Как можно его зарядить не доставая?
Ах да, и ещё один вопрос. Как можно переименовать робота?
P.s робот стоит на месте и никуда не двигается.
-
Надо извлечь redstone-карту, т. к. прога использует ее вместо блока.
Вот теперь работает)
Спасибо, тему можно закрывать.
-
-
так а в чем актуальность-то? Зачем вбухать кучу реса в комп, чтобы сделать из него "рычаг, доступный в привате"?
Это не тот случай, где следует применять комп. Да и работать он у тебя не будет, так как ты еще не знаешь, как его защитить от ребута и прочее. Да и сам по себе он рано или поздно отвалится при рестарте серва в синий экран когда-то.
Да и вообще, с февраля при выгрузке/загрузке чанка отлетают мониторы (зависают и не реагируют на юзера), и никак это не фиксится разрабами полгода уже, считай.
Писал же кто-то выше, что, мол, натяни ванильную растяжку и всё. Даже если жалко ресов на Т-триггер (3 репитера и 2 факела), то просто натяни растяжку там, где обычно стоит игрок и бьет мобов по ногам в дырочку, как это обычно делают игроки. Набил лута, отошел - спавнер вырубился. В чем проблема-то?
Также вроде в майне есть нажимные пластины, игрок их в привате чужом нажать не сможет, но они от брошенного лута на них срабатывают и подают рэд, золотая нажимная пластинка вроде называется. И так как лут деспавнится каждые 6 мин., то факт того, что спавнер будет включен кем-то навечно - исключен.
От ребута можно защитится просто напросто закрыть моник блоками. А синим экраном капутер уже не накрывается несколько дней(а-ля тест).
На счёт растяжек/плит, мобы тоже её могут юзать, следовательно, если какой-то челик не дофармил мобов, то из-за одного моба будет работать спавнер.
Просто я видел похожу такую систему, и она стабильно работает.
-
Всё ещё актуально
-
А если запустить redstone up 15, лампа горит?
Верхняя горит
-
Вполне может быть, можно проверить, ловит ли чатбокс сообщения от плагина - запустить на компе dmesg и сказать что-нибудь в чат.
Как-то так

-

А у меня вот так

Может быть из-за [L] не ловит сообщения?
-
Изображение с экрана пропадает, потому-что на него подается сигнал, об этом даже сказано в ачивке при крафте монитора. Лучше отделить монитор или редстоун I/O кабелем от других блоков.
Если проблема с определением стороны, то можно подать сигнал на все.
local wlist = {['Lockry'] = true} local sleep = 10 local side = 1 local status local component = require('component') local computer = require('computer') local redstone = component.redstone local chat_box = component.chat_box local signal = computer.pullSignal local function switch(value) for side = 0, 5 do redstone.setOutput(side, value) end end function computer.pullSignal(...) local e = {signal(...)} if status and status+sleep*72 <= os.time() then switch(0) status = nil end if e[1] == 'chat_message' and wlist[e[3]] then if e[4] == 'startmob' then status = os.time() switch(15) end end return table.unpack(e) endНе работает

Мб лучше подавать сигнал через микроконтроллер с красной платой?
-
Надо сохранить файл с другим именем, redstone.lua это родная утилита управления редстоуном.
Сделал. При вводе в чат startmob ничего не происходит и пропадает изображение с экрана(всегда чёрный экран, даже перезагрузка не помогает приходится ставить моник заново)
В примере Doobа используется сторона 1 т.е. верх системника. У тебя же провод подключен к переду. Исправь третью строку на
local side = 3
Исправил, но когда я пишу startmob ничего не происходит.
Если есть какая-нибудь альтернатива с этими проводами(через другой блок), то какая? Провода из Projectred подключены к пк.
-
local wlist = {['Lockry'] = true} local sleep = 10 local side = 1 local status local component = require('component') local computer = require('computer') local redstone = component.redstone local chat_box = component.chat_box local signal = computer.pullSignal function computer.pullSignal(...) local e = {signal(...)} if status and status+sleep*72 <= os.time() then redstone.setOutput(side, 0) status = nil end if e[1] == 'chat_message' and wlist[e[3]] then if e[4] == 'startmob' then status = os.time() redstone.setOutput(side, 15) end end return table.unpack(e) endПервая строка - белый список игроков, которым доступно управление.Вторая строка - задержка в секундах, т. е. на сколько времени активировать сигнал.
Третья - сторона блока, на которую подавать сигнал.
Спасибо что откликнулся. Но у меня есть вопросы.
P.s я в этом моде только начал что-то понимать и за косяки не кидайтесь тапками.
1. Вся система подключена вот так(для теста)

2. При активации скрипта мне выдаёт два параметра, а вводить я не понимаю, потому что
тупойне шарю.
3. Если всё так и должно быть, то в чат я ввожу сообщение и ничего не происходит. Для примера вот:

В пк компоненты: видеокарта III, редстоун карта II, интенет карта.
-
В ваниле тоже есть разная сила сигнала. Так тебе какую именно? Как вообще можно писать программу не зная какие параметры указать?
Я хз, можешь указать среднее значение, а дальше я сам разберусь
-
Можно подробности? Какой сигнал нужен? Цветной или обычный. А если цветной то какие цвета включать, а какие отключать и когда.
Может у вас вообще стоит майнфактори со своей системой передачи редстоуна. А там программа совершенно другая.
И ещё, какая сила сигнала нужна? Это же очень важно. Вдруг не ту силу сигнала задам и всё взорвётся.
Где развёрнутое описание???
Будет достаточно обычно сигнала из ванили, сиглан идёт по проводам из Projectred. А на счёт цветной или обычный я хз. На счёт силы сигнала я честно не знаю какую он выдерживает, можно поэкспериментировать, но по сути сила будет равна обычному из ванили красному сигналу
-
А рычаг чем не угодил?
Игрок который не в привате не может рычаг трогать
-
- Описание: Требуется программка для подачи красного сигнала в определённый блок(рычаг например) или включение электического спавнера(Ender IO)
Награда:
Установка:
Требования: например я ввожу в чат startmob и подаётся сигнал для рычага[uPD] и через N секунд сигнал пропадает
Связь: Писать в топик




Питание инструмента в роботе
в Разные (отсортировать)
Опубликовано:
Т.е через МФСУ не получится?