Lockry 0 Опубликовано: 8 августа, 2017 (изменено) Здравствуйте, вот например в роботе лежит бур из IC2, по программе робот им копает => бур разряжается. Как можно его зарядить не доставая? Ах да, и ещё один вопрос. Как можно переименовать робота? P.s робот стоит на месте и никуда не двигается. Изменено 8 августа, 2017 пользователем Lockry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 1 704 Опубликовано: 8 августа, 2017 Бур - в заряднике из ОС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MeXaN1cK 53 Опубликовано: 8 августа, 2017 Ну через самого же робота можно заряжать , если робот будет выкладывать бур например в МФСУ, через компонент контроллер инвентаря. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 8 августа, 2017 (изменено) Бур - в заряднике из ОС Лучше через МФСУ Ну через самого же робота можно заряжать , если робот будет выкладывать бур например в МФСУ, через компонент контроллер инвентаря. Но как сделать проверку на кол-во энергии? Я не шарю Изменено 8 августа, 2017 пользователем Lockry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MeXaN1cK 53 Опубликовано: 8 августа, 2017 (изменено) Смотри через durabiliti предмета. Но как сделать проверку на кол-во энергии? Я не шарю Вики в помощь и гайды на ютубе. Изменено 8 августа, 2017 пользователем MeXaN1cK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 9 августа, 2017 Смотри через durabiliti предмета. Вики в помощь и гайды на ютубе. Не поверишь, в ютАбе годных гайдов нет, а в гугле только описание команд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 9 августа, 2017 Но как сделать проверку на кол-во энергии? Я не шарюНапример, так: --Программа выполняет зарядку инструмента в руке робота, зарядник спереди. 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 9 августа, 2017 (изменено) Например, так: --Программа выполняет зарядку инструмента в руке робота, зарядник спереди. 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 в свой исходник? Я конечно сам могу интегрировать, но мне интересно увидеть как сделаешь это ты. Изменено 9 августа, 2017 пользователем Lockry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 9 августа, 2017 А так же например из робота (всё что в нём от 1 слота до N) импортируется в МЭ систему (AE2), а из неё в сундук. А когда бур кладётся в первый слот, то бур попадает в МЭ систему, а из неё в сундук.МЭ-система вытягивает предметы из робота сама? Лучше если робот будет сам скидывать свой инвентарь, тогда он сможет сохранить нужные ему предметы.Можно ли сделать, чтобы он сразу из активного слота клал в зарядник?equip() - это единственный способ доступа к инструменту робота.А да, можешь как-нибудь засунуть это в свой исходник? -- ... while true do check_tool_energy() robot.swing() end У меня стоит зарядник справа, я указываю в исходнике right и при запуске выдаёт 2 ошибки функции.Какие ошибки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 9 августа, 2017 МЭ-система вытягивает предметы из робота сама? Лучше если робот будет сам скидывать свой инвентарь, тогда он сможет сохранить нужные ему предметы. Да сама, ну тогда ты прав, надо сделать чтобы с задней стороны весь(корме бура) инвентарь робота скидывался в сундук. Какие ошибки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 9 августа, 2017 (изменено) Да сама, ну тогда ты прав, надо сделать чтобы с задней стороны весь(корме бура) инвентарь робота скидывался в сундук. Робот должен повернуться в нужную сторону. Оказывается, доступны только стороны front, up, down. Изменено 9 августа, 2017 пользователем vx13 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 9 августа, 2017 Робот должен повернуться в нужную сторону. Оказывается, доступны только стороны front, up, down. Когда робот кладёт бур в зарядник, программа крашится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 9 августа, 2017 Такая ошибка может возникнуть в строке while inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT).charge < tool.maxCharge do если в слоте зарядника не будет предмета, inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT) вернёт nil. Робот смог положить бур в зарядник или он остался в инвентаре? Если не смог, то зарядник стоит не с той стороны. (Можно проверить смог ли робот положить бур в зарядник - dropIntoSlot() возвращает true в случае успеха.) Забирать бур из зарядника во время зарядки нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 9 августа, 2017 Такая ошибка может возникнуть в строке while inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT).charge < tool.maxCharge do если в слоте зарядника не будет предмета, inv.getStackInSlot(CHARGER_SIDE, CHARGER_SLOT) вернёт nil. Робот смог положить бур в зарядник или он остался в инвентаре? Если не смог, то зарядник стоит не с той стороны. (Можно проверить смог ли робот положить бур в зарядник - dropIntoSlot() возвращает true в случае успеха.) Забирать бур из зарядника во время зарядки нельзя. Смог Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 10 августа, 2017 Если игрок заберет из зарядника инструмент, программа упадет. Поэтому, надо проверять наличие инструмента в слоте или забирать из зарядника. 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 Если вынуть инструмент, то робот будет и дальше пытаться его достать, пока не получит полностью заряженным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 10 августа, 2017 Вариант с доп. проверками. Выводит сообщения об ошибках. 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() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 10 августа, 2017 (изменено) Если игрок заберет из зарядника инструмент, программа упадет. Поэтому, надо проверять наличие инструмента в слоте или забирать из зарядника. 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() Когда бур разряжается и робот его кладёт в зарядник, выдаёт ошибку "Не удалось забрать инструмент из зарядника". Изменено 10 августа, 2017 пользователем Lockry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 10 августа, 2017 (изменено) Я как понимаю он пытается доставить бур из зарядника из OC? А я его тестирую с МФСУ... Да, конечно можно и в заряднике, но он очень долго заряжает его. Можно как-нибудь с МФСУ провернуть? Изменено 10 августа, 2017 пользователем Lockry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 11 августа, 2017 Я как понимаю он пытается доставить бур из зарядника из OC? А я его тестирую с МФСУ... Да, конечно можно и в заряднике, но он очень долго заряжает его. Можно как-нибудь с МФСУ провернуть?У зардника OC и МФСУ для зарядки используется слот 1. Я не понимаю, почему у тебя не работает. Попробуй запустить код из предыдущего поста на полигоне: Стоит МФСУ. Рядом робот, мордой в МФСУ. В руке робота бур. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lockry Автор вопроса 0 Опубликовано: 11 августа, 2017 У зардника OC и МФСУ для зарядки используется слот 1. Я не понимаю, почему у тебя не работает. Попробуй запустить код из предыдущего поста на полигоне: Стоит МФСУ. Рядом робот, мордой в МФСУ. В руке робота бур. В моём случаи зарядник находится с верхней стороны и по этому не работает. А вот с передней работает... Это нормально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vx13 2 271 Опубликовано: 12 августа, 2017 Действительно, робот не может забрать предмет из МФСУ, если МФСУ над роботом. Почему так, я не знаю. suckFromSlot возвращает false без сообщения об ошибке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Здравствуйте, вот например в роботе лежит бур из IC2, по программе робот им копает => бур разряжается. Как можно его зарядить не доставая?
Ах да, и ещё один вопрос. Как можно переименовать робота?
P.s робот стоит на месте и никуда не двигается.
Изменено пользователем LockryПоделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах