eu_tomat
-
Публикации
2 666 -
Зарегистрирован
-
Посещение
-
Победитель дней
331
Сообщения, опубликованные пользователем eu_tomat
-
-
22 часа назад, Appo сказал:В любом случае идея может пригодится, в комбинировании своих идей.
В любом случае эта идея не для ближайшей сборки. А потом её вряд ли кто-то найдёт, т.к. темы о будущих сборках по традиции перетекают в холивары и затем перемещаются в корзину.
Идея с шарообразным миром любпытная, я бы её перенёс, например, в шкатулку, но только выбросив всё остальное.
22 часа назад, Appo сказал:кто-то ищет тысячи оправданий, а кто-то тысячи возможностей
Хорошо. Для начала найди возможность вменяемой системы координат в шарообразном мире. Где здесь верх, восток, юг? Видео демонстрирует способ превращения куба в шар. Координаты используются кубические, но исходный куб растягивается до формы шара. Так вот, на шаре всегда можно обозначить горизонталь и определить верх-низ, даже когда мы стоим по по центу блока, лежащего на грани исходного куба. А в кубических же координатах окажется, что можно стоять на одной из двух сторон блока, и в этом случае направление верха и низа резко меняется. Аналогично и для блока, находящегося в вершине куба, там возможны аж целых три направления "вниз". А у нас тут роботы бегают, им нужна чёткая система координат. Как предлагаешь решать эту проблему?
Перенёс тему во флудилку. Поболтаем хотя бы о геометрии.
-
51 минуту назад, kaka888 сказал:Понятно. А можно сделать так, чтобы робот копнул влево, вправо или назад без поворота?
Без доработки мода вряд ли возможно. Впервые узнав о стороне, задаваемой аргументом, я сразу попробовал копнуть во всех направлениях и получил ошибку везде кроме сторон 0, 1, 3.
-
1
-
-
12 минут назад, kaka888 сказал:Т.е. robot.swing() работал без аргументов только из-за того, что в опенос есть библиотека для robot API?
Именно так. robot.swing() в библиотеке копает только вперёд, а для копки вверх и вниз имеются robot.swingUp() и robot.swingDown(). Компонент же располагает единственной функцией, направление задаётся аргументом.
-
1
-
-
7 часов назад, kaka888 сказал:А дальше юзал r.swing() в цикле.
Библиотека robot и компонент robot несколько отличаются.
При использовании компонента в вызове robot.swing(3) следует указывать сторону, как в коде @Doob
-
2
-
-
21 час назад, Aex сказал:Есть дом на сервере EvilCraft.
Возможно, речь идёт о нашем сервере EvilWorld. Если нет, то имеет смысл уточнить версию Minecraft и OpenComputers.
21 час назад, Aex сказал:Но переменная TimeOut не принимает значение delay, и остаётся в нуле (её значение по-умолчанию), судя по выводу на экран и дальнейшему поведению программы.
По тому выводу на экран, что есть в программе, можно говорить лишь о значении переменной TimeOut в этом конкретном месте. И точно невозможно сказать, отличалось ли значение от нуля, например, перед этим участком:
if (computer.uptime() - timestamp > TimeOut) and (TimeOut > 0) then ... ShowMenu();А здесь переменная как раз и могла обнулиться.
21 час назад, Aex сказал:Обнуление переменной исключается, так как единственное место где она обнуляется не исполняется (меню не отрисовывается).
И почему исключается? Каким образом это проверяется? На отрисовку меню могли влиять ошибки в реализации GUI. Предлагаю на время отладки полностью отказаться от GUI и весь вывод переписать на print, или сигналить звуком, например, так:
if TimeOut > 0 then computer.beep() end -
12 часов назад, Alexhotice сказал:нет, один робот ставит руду, второй ломает эту руду буром с удачей. Робот у которого у меня возник вопрос ломает
Это сложнее. Тут появляется множество вариантов, эффективных в своих условиях и при этом неэффективных в других. И какие условия возникли конкретно у тебя, я не знаю. но я попробую объяснить суть проблемы.
В случае генератора булыжника есть только один непрерывно добываемый малоценный ресурс.
Если сундук находится над или под роботом, то оптимизация сводится к тому, чтобы перемещать ресурсы полными стаками. Робот перемещает хоть один предмет из слота, хоть полный стак за одинаковое время. А это значит, что выгодно перемещать наиболее полный стак. Заполнение слота легко отслеживается.
Если сундук находится в стороне, и робот вынужден совершать поворот, то накладные расходы на освобождение инвентаря возрастают, и появляется смысл выгружать полностью заполненный инвентарь. Его заполнение тоже легко отследить.
Гораздо больше вопросов вызывает перелопачивание руды киркой.
С точки зрения оптимизации действий робота он должен выгружать свой инвентарь, когда хоть-что появится в последнем слоте. А если речь идёт о рудах GT, где может выпасть вторичный ресурс, то сигналом для выгрузки будет появление предмета в предпоследнем слоте.
Если заранее знать, какая руда будет ломаться следующей, то в некоторых случаях можно ждать почти полного заполнения слотов с учётом максимального дропа с руды, но в данной схеме это возможно только в случае, если роботы будут обмениваться информацией по сети. Вообще говоря, для этой задачи использование двух роботов неоптимально, т.к. робот обычно ставит блок быстрее, чем его ломает второй, и если хочется повысить производительность, то лучше установить два однотипных робота на одну задачу, где каждый из них как устанавливает блок, так и ломает его. Так робот сам сможет знать, какой дроп ожидать при следующем взмахе киркой, и сможет лучше оптимизировать свою работу.
Но тут возникает новый подводный камень. Эта схема удобна в случае огромного количества руды. У неё есть большой потенциал на поздних стадиях уже упомянутого GT. Но в начале игры, когда ресурсов мало, робот будет ждать полного заполнения своего инвентаря, долго не отдавая переработанные ресурсы, что неудобно.
Есть компромиссный и при этом довольно эффективный вариант: робот берёт из верхнего сундука стаки руды, начиная от более полных к менее полным. Загрузив стак руды в свой инвентарь, робот устанавливает её перед собой и ломает, повторяя эти действия до полного исчерпания руды. После этого полностью освобождает инвентарь в сундук. некоторые из слотов могут оказаться недостаточно заполненными, и такая выгрузка будет не очень эффективной, но зато ценные ресурсы не будут надолго задерживаться в инвентаре робота и мешать получению других. Выработав стак руды, робот берёт следующий, один из наиболее полных, и продолжает работу, постепенно забирая и слабо заполненные стаки тоже. За время работы робота ресурсы в слотах входного инвентаря могут пополниться, поэтому имеет смысл отложить их использование до поры, пока не появится лучший выбор. Этот вариант тоже можно оптимизировать.
В конечном итоге всё зависит от целей. На что должна быть ориентирована твоя программа? На максимальную скорость при быстрой подаче руд? На переработку руд в начале игры, чтобы ресурсы не задерживались в инвентаре робота? Или надо сделать хоть что-то, лишь бы оно работало с помощью максимально примитивного кода? От ответов на эти вопросы будет зависеть алгоритм работы. -
3 часа назад, kaka888 сказал:Простите, я опять забыл, как делать спойлеры
А зачем там спойлер? Скриншот вообще не проясняет проблему и может быть безболезненно удалён.
По теме: Какое значение имеет параметр bufferChanges?
-
1
-
-
20 часов назад, Alexhotice сказал:а как можно дополнить, чтобы тогда робот сам скидывал свой инвентарь кроме бура, допустим в сундук сбоку?
Похоже, я не с первого раза понял вопрос.
Требуется уточнить, что это за механизм, чтобы выбрать эффективный вариант проверки заполнения инвентаря. Это генератор булыжника?
-
Ну, очевидно, что для этого робот никогда не должен помещать инструмент в свой инвентарь, находясь при этом под высасывающей шиной. Есть разные варианты:
Например, можно удалить зарядник на один блок от робота. И тогда робот будет перемещаться на одну клетку из-под шины.
А можно перемещать содержимое инвентаря роботом в стоящий сверху него сундук программным путём, а шиной высасывать уже содержимое сундука. С тем же успехом сундук можно разместить и внизу и слева и справа, главное, не давать шине неконтролируемо высасывать инвентарь робота.
Также можно разместить зарядник слева от робота, а шину разместить позади робота. Тогда шина сможет извлекать содержимое робота только тогда, когда он ориентирован к ней задом. При повороте налево к заряднику шина окажется слева и будет иметь доступ только к слотам улучшений, и слот инструмента со слотами внутреннего инвентаря будут для шины недоступными. В это время робот может выполнить все необходимые манипуляции с инструментом, после чего вернуться в исходную позицию.
В общем, можно придумать множество работоспособных конфигураций.
-
3
-
-
Тогда понятно. Шина, стоящая сверху, быстро высасывает инвентарь робота, сразу как только выполнится перенос инструмента в инвентарь с помощью inv.equip(). И перенос инструмента в зарядник с помощью robot.drop() выполниться просто не успевает.
-
В этой программе я вообще не увидел кода для сброса содержимого инвентаря.
-
3 минуты назад, Alexhotice сказал:но запускал я его с буром, сейчас попробую с обычной киркой
С каким буром? Буры из IC2 вроде без проблем определяются.
И какая используется версия OpenComputers?
-
Для понимания причин проблемы следует для начала прочитать текст ошибки. Можно воспользоваться автоматическим переводчиком. Это поможет понять, что на строке 6 произошла попытка сравнения значения nil с числом, что недопустимо. Глядя на шестую строку, можно заметить условие robot.durability() <= 0.2, где явное число сравнивается с предположительным числом. Но функция может возвратить что-то иное, и, судя по всему, тот самый nil. Теперь следует задаться вопросом, в каком случае может быть возвращено значение nil. Логично предположить, что это возможно либо в случае полного отсутствия предмета в слоте инструмента, либо в слоте находится и не инструмент вовсе, что и подтверждается документацией https://ocdoc.cil.li/api:robot.
Для решения проблемы следует либо дать роботу инструмент с ограниченной долговечностью, либо убрать условие проверки долговечности из программы.
-
2
-
-
-
20 часов назад, monkey сказал:Схема работает без перегрева. У меня реактор без проблем отработал один цикл, второй тоже подходил к концу. А сегодня реактор пропал вместе со всеми компонентами. Наверное взорвался. Как это возможно вообще?
Соблюдён этот пункт?
25.02.2015 в 23:42, AlexVBG сказал:Так же перед работой с реакторами хочу обратить ваше внимание на то, что устанавливать реактор необходимо целиком в 1 чанке (16х16, сетку вывести можно нажав F9). Иначе корректная работа не гарантируется, ведь иногда в разных чанках время течет по разному!
-
1
-
-
Есть и другие. Можно использовать shell.execute. И это даже более правильно, т.к. эта функция используется внутри os.execute.
А внутри shell.execute используется чтение указанного файл, его загрузка через load, и запуск.
То есть, другие способы в конечном итоге сводятся к чтению содержимого файла, компиляции исходного кода и запуску.
А другой отдельной функции, скорее всего, нет. Возможно, в других операционных системах есть иные способы.
16 минут назад, kaka888 сказал:А других нет способов?
Нужно уточнить, для чего требуется другой способ, в какой среде выполняется программа.
-
1
-
-
В OpenOS можно использовать, например, такой код:
os.execute("/bin/components screen -l")Так будет запущена программа components с параметрами screen -l
-
2
-
-
Для вывода нужной фразы для каждого ника можно использовать, например, такой код:
local phrases = { ["вован"] = { [false]="оффлайн", [true]="онлайн" }, ["серый"] = { [false]="спит", [true]="зажигает" }, ["жека"] = { [false]="потерялся", [true]="в деле" }, } for nick,phrase in pairs(phrases) do print( nick,phrase[online(nick)] ) end
Как реализовать функцию online(nick), проверяющую онлайн игрока, уже рассказали в предыдущей теме.
-
1
-
-
1 минуту назад, Asior сказал:Ну так по старинке же тупо вбиваешь
На старом форуме тоже никогда не пользовался кнопками. Но на новом часть привычных тегов перестала работать при их вводе текстом, и я стал пользоваться кнопками. А потом и часть кнопок пропала.
Но спасибо за информацию, снова включу старые навыки. Или хотя бы их часть, которая применима в новых условиях.
-
1
-
-
5 минут назад, Asior сказал:local event = require('event')
local com = require('component')
local sensor = com.motion_sensor
local sides = require('sides')
local red = com.list('redstone')
local monsterlist = {"Spider", "Zombie", "Creeper", "Skeleton", "Enderman", "Sheep", "Cow", "Chicken"}local function monsterScan(name)
for i=1, #monsterlist do
if name == monsterlist then return false end
end
return true
end
while true do
local _, address, x, y, z, name = event.pull('motion')
if monsterScan(name) then
print(name)
for address, _ in pairs(red) do
com.invoke(address, "setOutput", sides.front, 15)
end
os.sleep(4)
for address, _ in pairs(red) do
com.invoke(address, "setOutput", sides.front, 0)
end
end
end@Asior как тебе удалось вставить спойлер? Кнопка в редакторе отсутствует.
-
@BrightYC я бы начал с проверки отображения латиницы.
Если отображается, то попробовал бы применить кириллицу без указания кодировки, с настройками по умолчанию, а кодировку на выходе попробовал бы определить либо вручную, либо с помощью каких-нибудь программ, названий не помню, но таких приходилось видеть много разных.
Если это сработает, то можно попробовать выбрать нужную кодировку и проверить кодировку на выходе.
Также надо проверить, в какой кодировке сохранён сам код. И подобрать кодировку, понятную контроллеру.
-
26 минут назад, kcalBxoF сказал:Жаль байткоды отключены у load, байткоды мало кто использует
Байткод тоже можно преобразовать в исходный. Правда, с потерей комментариев и локальных названий. Но даже такой может иметь ценность.
-
36 минут назад, kaka888 сказал:Fingercomp, можно таким образом оформить свои программы, чтобы читая их, никому не было понятно, что они делают)
Это вряд ли. Кто-то всё равно разберётся в особенностях твоего кода, если программа достаточно ценна. А если она бесполезна, то вчитываться в её код и так мало желающих. Бесполезность программы является лучшей защитой от чтения кода.
-
2
-
-
1 минуту назад, BrightYC сказал:А где фотографии? Хочу фотографий конструктора и флюса!
Конструкторы даже не распаковывал, фотки будут в отчёте. Не хочу размазывать инфу по разным постам.
Про флюс я уже навёл справки. Яндекс выдаёт первой страницу с тегом "Осторожно, говно!": Флюс-гель ТТ
Упаковка такая же как на первой фотографии. Сильно расстраиваться я не стал, т.к. сейчас паять этим флюсом планирую конструкторы, которые при неудаче не жалко и выбросить.
Нормальный флюс буду заказывать с Китае, и насколько он окажется качественным тоже пока не знаю. Буду экспериментировать.

Сферический Майнкрафт в вакууме
в Флудилка
Опубликовано:
@Doob, а робот тогда будет перемещаться в каких координатах? Он будет двигаться вдоль поверхности шара или же по исходным, кубическим координатам?
В первом случае вертикальная ось в кубических координатах будет меняться на 90 градусов при переходе с одной грани губа на другую.
Во втором случае движения робота будут отвязаны от плоскости шара, и на обратной стороне шара робот будет располагаться вниз головой, а деревья для робота будут располагаться не только вертикально, но и горизонтально.
Какой из вариантов ты предпочтёшь?