Doob
-
Публикации
1 089 -
Зарегистрирован
-
Посещение
-
Победитель дней
141
Сообщения, опубликованные пользователем Doob
-
-
Неплохо, хоть вероятность ничтожна, но она есть.
Ладно, значит робот будет ходить сначала по вертикали. В принципе, можно сделать умную защиту от застреваний, это всего две строчки, но я и так еще не придумал, как впихнуть программу в EEPROM не лишая ее полного функционала.
...Хотя, нет, придумал - crunch --lz77 это то, что надо.
-
Кстати, да, если робот попадает в угол сканируемой зоны, то может не разглядеть руду с минимальной плотностью на другом конце зоны.
После экспериментов на свинцовой руде понизил минимальную плотность, теперь вероятность добычи свинца больше 95%
-
1. Возврат у центру столба это лишняя энергия, поэтому при сканировании учитывается смещение от центра и робот не делает лишних движений.
2. Пустота 7x7 это из области фантастики, ну если генерация карты накручена, но способ передвижения от ноды к ноде надо будет еще подшаманить и с учетом внезапного бедрока.
3. Отлично! Крокодилов, вообще, надо замариновать и съесть.
-
Добавил, если есть чанклоадер он сразу включается, если есть генератор, робот будет пытаться закинуть в него топливо, если топлива нет, то пойдет к заряднику.
-
Тут все зависит от того, насколько накручен чанклоадер, как много роботу придется добывать и какая плотность генерации руд.
С обычным конфигом чанклоадер ест 0.06 энергии за тик, это 1.2 в секунду, 72 в минуту, 4320 в час, т. е. сам по-себе он съест стандартную батарею на 20500 почти за 5 часов, но надо еще прибавить 0.25 энергии при работе самого робота, движения, повороты, взмахи буром.
Если приспособить программу, чтобы робот всегда с собой таскал стак блоков угля и закидывал их в генератор, будет вполне неплохо работать, хотя и расход топлива будет очень невеселый.
-
Эта кoпалка не требует для рабoты лишних деталей, т. к. кoд запиcываетcя на EEPROM. При cбoрке рoбoта, вмеcтo ЖД, мoнитoра и клавиатуры мoжнo дoбавить чтo-тo дейcтвительнo нужнoе, например раcширение инвентаря или аккумулятoра.
Требoвания:
- Инвентарь (чем бoльше - тем лучше)
- Кoнтрoллер инвентаря.
- Геocканер.
- Инcтрумент, врoде алмазнoгo или иридиевoгo бура.
- Хoвер-апгрейд (еcли неoбхoдимo)
- Апгрейд-верcтак. (пoзвoляет экoнoмить меcтo)
- Чанклoадер.
- Генератoр. (при наличии чанклoадера реже будет неoбхoдимocть ездить к заряднику)
- Беcпрoвoдную cетевую карту. (пoзвoлит рoбoту oтправлять cтатуcные cooбщения)


Иcпoльзoвать oчень прocтo:
- В кoмпьютер c интернет-платoй вcтавить EEPROM.
- Запуcтить кoманду pastebin get eFkAZP0u b && edit b && flash b -q && rm b
- Пo желанию, редактирoвать параметры - первые переменные этo кoличеcтвo нoд, минимальная плoтнocть, макcимальная плoтнocть, выcoта (неoбхoдимo указывать для мирoв, в кoтoрых нет бедрoка), пoрт, cпиcoк oтхoдoв.
- Сoхранить/закрыть файл.
- Дocтать EEPROM из кoмпьютера и вcтавить в рoбoта.
- Выдвинутьcя на меcтo дoбычи.
- Пocтавить рoбoта.
- Дать рoбoту бур.
- Пocтавить вoзле негo кoнтейнер и включенный зарядник.
- Включить рoбoта и ждать завершения рабoты.
- Рoбoт cканирует квадраты x8 блoкoв пo гoризoнтали, пocтепеннo oпуcкаяcь вниз.
- Дoбывает блoки из заданнoгo диапазoна плoтнocтей.
- Дoйдя дo бедрoка, рoбoт пoднимаетcя на cтартoвую выcoту и перехoдит к cледующей кoлoнне.

- При низкoм урoвне заряда аккумулятoра, пытаетcя заправить генератoр (еcли имеетcя), в прoтивнoм cлучае или при низкoм урoвне заряда инcтрумента, oтправляетcя на cтартoвую пoзицию, к заряднику.
- Так же, при запoлнении инвентаря, cбраcывает муcoр, при наличии верcтака упакoвывает реcурcы в блoки и еcли меcта вcе-равнo малo, тo cледует к кoнтейнеру, cбраcывает лут и вoзвращаетcя к рабoте.
- Еcли имеетcя чанклoадер, тo при начале рабoты oн включаетcя, а при завершении выключаетcя.
- Еcли имеетcя беcпрoвoднoй мoдем, тo рoбoт пocылает cтатуcные cooбщения:
0 - неразрушимый блок (скорее всего - приват) 1 - контейнер заполнен 2 - контейнер отсутствует 3 - зарядка инструмента 4 - заправка генератора 5 - конец работы
-
8
-
Один раз я воткнул ради интереса эту карту, чуть со смеху не помер - ванильная карта отрисовывается с какой-то странной, непонятной механикой: я здесь, а карта показывает вообще другую область (можно, конечно сделать карту побольше. Но зачем, если у меня есть код, который работает без моей помощи?)
Далее, этот апгрейд можно применить только в одной области и в одном мире, если я куда-нибудь телепортнусь, мне придется крафтить новую карту (для обычных пользователей, для необычных, тоже, это очень неудобно)
Или я могу поставить робота и забыть, а он будет сам копать в бесконечность или мне придется как какому-нибудь астро-навигатору постоянно перебирать кипу карт и еще рисовать новые? Я выберу первое, потому-что проще.
Единственное, для чего этот жэпээс может пригодиться, это какие-нибудь почтовые программки или автозаводы, для которых можно пожертвовать поинтами сборки и не нужны большие расстояния (и это при условии, что разработчик программы настолько ленив, что не может написать простой счетчик)
Да и не видел я ни одну программу, в которой использовался бы этот апгрейд.
-
Бур - универсальная штука, а роботу, в общем, без разницы чем копать (но чем меньше инструментов, тем лучше)Дак ты же не будешь лопатой алмазы копать. А землю киркой.
-
Вот это я в данный момент, использую в геокопалке.
local component = require('component') local robot = component.robot local x, y, z, d = 0, 0, 0, 0 -- S = 0, W = 1, N = 2, E = 3 [+x = E, -x = W, +z = S, -z = N] local tMove = { function() x = x - 1 end, function() z = z - 1 end, function() x = x + 1 end, [0] = function() z = z + 1 end } local function move(side) -- 0, 1, 3 while robot.swing(side) do end if robot.move(side) then if side == 0 then y = y - 1 elseif side == 1 then y = y + 1 elseif side == 3 then tMove[d]() end end end local function turn(cc) if not cc then cc = false end if robot.turn(cc) then if cc then d = (d + 1) % 4 else d = (d - 1) % 4 end end end local function sturn(dT) while d ~= dT do if d == 0 and dT == 1 or d == 1 and dT == 2 or d == 2 and dT == 3 or d == 3 and dT == 0 then turn(true) else turn() end end end local function gotot(xt, yt, zt) -- X if x < xt and d ~= 3 then sturn(3) elseif x > xt and d ~= 1 then sturn(1) end while x ~= xt do move(3) end -- Z if z < zt and d ~= 0 then sturn(0) elseif z > zt and d ~= 2 then sturn(2) end while z ~= zt do move(3) end -- Y while y ~= yt do if y < yt then move(1) elseif y > yt then move(0) end end endgotot - переход на заданные координаты
move - обычное движение сквозь породу (0 - вниз, 1 - вверх, 3 - вперед)
-
Добывать их все-равно приходится, поэтому, контроллером инвентаря можно их на финише отсеивать.
-
1
-
-
Чорт! Мои глаза!Что думаете?
А геолайзер там зачем?
-
2
-
-
Как вариант: http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/ (хотя, я этим убожеством никогда не пользовался, привык все писать с нуля)
А чтобы определить, является ли блок сундуком: inventory_controller.getInventorySize(сторона)
-
Мда, с чем боролись, на то и напоролись... Камень мне нафиг не нужен, у него плотность = 1, у свинца = 2, через три сканирования я отсекаю все, что меньше 2 и добываю. Попадается камень? Никто не мешает выкинуть. Пропускаю свинец? Пфф.. Не велика потеря, что-то все-равно добывается.
Но! На каждый блок улетает 10 единиц энергии, намного рациональней прокатиться лишний раз на этих 10 единицах и выкопать лишние блоки.
В конце я предложил такой подход, чтобы сканировать максимум на 4 блока, зачем мне тогда смотреть на 32 блока от сканера, когда у меня максимальная дальность 12 блоков?
Я как-то хотел приспособить робота для автоматического поиска и опустошения сундуков, изначально поставил 120 сканов каждого столба... сундуки он определял отлично, но для автогрифера 9 часов это как-то круто (и это без учета энергии). Поставил 5 сканов - сундуки находит более-менее, какие-то пропускает, но результат есть, хоть и времени уходит больше 70 минут. Поэтому я хорошо понимаю, что сканер это всего-лишь игрушка, хотя можно снизить расход энергии и время получения результата, но это не практично.
Если кому-то ради спорта хочется сканировать доски и свинец в горе булыжника - это его дело, пусть даже энергия халявная, но это будет только видимость полезной работы, т. к. тупая змейка или карьер намного эффективней.
-
@eu_tomat, чем писать тонны текста, лучше бы что-нибудь полезное продемонстрировал. Я лично все изучаю, поэтому уверен, что говорю об этом не с потолка. Я перепробовал кучу подходов к геокопалкам и с уверенностью могу заявить, что это просто трата времени и ресурсов, т. к. есть способы копать без геосканера намного эффективней, чем с ним.
На расстоянии 32 блока от сканера, через 3 сканирования, даже с грубым округлением можно найти и свинец и сундуки и все остальное (это стандартный конфиг)
Благодаря новым возможностям геосканера, сейчас можно пользоваться интересным алгоритмом - сканировать перед роботом квадрат 7x7, т. е. добывать слой за слоем (можно прямой линией, змейкой, спиралью, не важно), мне кажется, что это самый лучший подход, надо будет тщательно проработать, тут много плюсов - шумов мало, роботу меньше приходится бегать туда-сюда, лишней энергии не тратится и т. д.
-
1
-
-
После обновы OC 1.6 расширился функционал геосканера.
Теперь, помимо обычного сканирования вертикальных столбов появилась возможность сканировать произвольный кубоид, содержащий не более 64х блоков (т. к. функция в любом случае возвращает таблицу из 64х элементов)
scan(x, z[, y, w, d, h][, игнорировать_замещаемые])
Если задать только x, z, то геосканер будет работать в обычном режиме. А при добавлении y, необходимо указать ширину, длину и высоту кубоида, соответственно: w, d, h. Т. е. первые три значения это стартовые координаты, откуда начинать сканирование, а дальше его размеры. Четвертое значение это указатель, приравнивать ли замещаемые блоки (трава, саженцы и т. д.) к воздуху.
Возвращаемые значения приходят в не очень удобном формате. Чтобы отобразить отсканированный объем в одномерной таблице, сканирование происходит в виде трех циклов, один в другом: for x(for z(for y()))
Т. е. сначала идет заполнение по x, потом по z, потом по y. (Запад->Восток, Север->Юг, Низ->Верх)
К примеру, надо просканировать куб x2, где какой блок будет отображен в таблице?
Зададим область сканирования: scan(0, 0, 0, 2, 2, 2) - точкой старта будет блок геосканера, точка финиша в относительных координатах 1, 1, 1
Сначала у нас идет x, следовательно, первый элемент таблицы - плотность самого геосканера (0, 0, 0), второй элемент - блок на восток от сканера (1, 0, 0). Далее у нас идет второй блок по z, следовательно это южный блок (0, 1, 0), затем - юго-восток (1, 1, 0). Второй блок по оси y - (0, 0, 1) и т. д.
Следовательно, таблица у нас будет выглядеть так:[1] = 0, 0, 0 [2] = 1, 0, 0 [3] = 0, 1, 0 [4] = 1, 1, 0 [5] = 0, 0, 1 [6] = 1, 0, 1 [7] = 0, 1, 1 [8] = 1, 1, 1
Остальные элементы можно отбросить, т. к. это шум.
В голове это держать может быть неудобно. Поэтому, напишем функцию, через которую можно будет задать кубоид и координаты блока, а она выдаст позицию в таблице, где указана плотность этого блока.local function tblpos(x, z, y, w, d, h, tx, tz, ty) -- первые 6 значений это то, что мы задаем геосканеру, tx, ty, tz = координаты искомго блока local p = 1 -- создаем счетчик local xmax, zmax, ymax = x + w - 1, z + d - 1, y + h - 1 -- преобразуем размеры кубоида в финишные координаты for y1 = y, ymax do for z1 = z, zmax do for x1 = x, xmax do if x1 == tx and z1 == tz and y1 == ty then -- если счетчик допрыгал до искомых координат return p -- возвращаем позицию end p = p + 1 end end end endНапример, зададим тот же кубоид и узнаем позицию блока, с координатами 1, 1, 1
pos = tblpos(0, 0, 0, 2, 2, 2, 1, 1, 1)
pos станет равно 8
Чтобы проверить плотность этого блока, обратимся к таблице
print(geolyzer.scan(0, 0, 0, 2, 2, 2)[pos])
Либо, более наглядно - print(geolyzer.scan(0, 0, 0, 2, 2, 2)[tblpos(0, 0, 0, 2, 2, 2, 1, 1, 1)])
Но, городить целую функцию для проверки блока это бред, эту функцию надо применять для обработки полученной таблицы, т. к. при каждом сканировании происходит задержка, лучше сканировать больший объем и затем, обрабатывать, используя такую функцию.
Чтобы узнать плотность блока в определенных координатах, достаточно сделать так:
scan(x, z, y, 1, 1, 1)[1]
Т. е. задаем координаты блока, указываем размер кубоида 1x1x1 блок и сразу обращаемся к первому элементу таблицы.
Стоит помнить, что при одном сканировании доступно только 64 блока, т. е. можно просканировать куб x4, либо квадрат x8, думаю, это понятно.
Вот примеры:
scan(-32, -32, -32, 4, 4, 4)
scan(5, 5, 5, 1, 8, 8)
scan(-32, 0, 0, 64, 1, 1)-
6
-
2
-
-
Была бы это игра, бы ли бы в ней правила, тогда можно было бы надрываться. Запустил, оказался в комнате #0, нажал кнопку - победил. Думаю: "лол, орлянка и то, интересней".
-
Особо переписывать ничего не надо, чуть-чуть поправить алгоритм сканирования. Зато теперь будет очень удобно работать с самим сканером, я об этом давно мечтал, потому-что сейчас приходится использовать весь просканированный столб, делать несколько проходов, чтобы уточнить плотность до приемлемых значений, а это такая прорва энергии, что оптимальней использовать примитивный карьер. В общем, я очень рад, это огромный полет для творчества, если чанклоадер еще поправят, то это будет самый крутой мод к майну.
-
На двух проекторах никак, 3D на мониторы - пожалуйста, но для меня разрешение мелковатое и как реализовать управление мышкой я даже не представляю, да и это жутко неудобно (единственный адекватный вариант - изометрическая проекция).
-
Ну да, сидишь ночью, с кем-нибудь разговариваешь, минут, эдак 15. Потом жмешь TAB, а оказывается, что ты уже 10 минут изображаешь дурачка выдавая перлы на пустом сервере.
-
4
-
-
Надо устроить голосование за мод Antique Atlas, потому-что с такой читерной картой играть не прикольно. Нет атмосферы и все структуры видны насквозь, не хватает только подсветки нод на карте, чтобы можно было с закрытыми глазами ходить.
-
1
-
-
Ищи админов в игре и проси гивнуть деньги /eco add Doob 130000000 и иридий, а таблички пусть твои сломают (Сашка Финге там же ошивается в магазине своем постоянно
).Табличек не будет больше. Хотел сделать как лучше, но не предусмотрел и в голову даже не пришло, что робот в обход пермишенов может создавать таблы сам и писать на них хоть ГМ-ки выдавать, хоть рес на халяву. А так как я без понятия, сколько и кто уже успел скрафтить апгрейдов табличек (их сразу нужно было заблочить), пришлось экстренно оффнуть эту функцию у плагина торговую табличную. Будет мод отдельный на торговлю.
Лолшто? Я сам проверял, робот не может создавать рабочие таблички, просто пишет текст (хотя, проверял до обновы, как дела там обстоят сейчас - без понятия).
-
Чтобы не плодить сущности, выскажусь здесь.
Из-за глюка привата, senbonzakura стащил с моего участка 3 квант. панели, >8 ультиматок, генмат с хранилищем паттернов, станцию зарядки и вагон иридия, ну и еще какие-то солярки, в общем, их всех было около 14 штук.
Fingercomp частично возместил убытки, но квантовые солярки так и не нашел, ну это дело десятое.
В связи с баном табличек у меня в них застряло больше 130 миллионов денег. Я бы мог деньги хранить в SGSC, но я ведь торговал иридием, а обратной конвертации валюты не было предусмотрено, я считаю, что это произвол, к тому-же появились какие-то левые моды, из-за которых мне надо теперь бегать с минимальным разрешением, дальностью прорисовки 1 чанк и у меня все-равно происходят периодические краши (и это 1024 Мб памяти, а раньше я играл с 512 и все было прекрасно), это был единственный сервер с компами, на котором можно было играть со слабым железом.P.S. Alex, почини IT, там ведь люди играли, а магик мало кому интересен.
-
1
-
-
Стандартная библиотека UTF-8 работает аналогично, можно просто заменить 'unicode' на 'utf8'.
-
1
-
-
Можно записать переменную в файл или замерить объем занятой памяти, присвоить значение переменной, опять замерить объем занятой памяти, вычесть разницу.
А вообще, лучше погуглить типы переменных.
-
1
-

Сохранения для игры.
в Разные (отсортировать)
Опубликовано:
...мимо проходит кот админа, дергает за провод и все нафиг выключается, а хакеры в панике, думают, что спалились.
В чем вообще суть игры? Должна быть какая-то награда, а то как в майне, долго бегать кругу быстро надоедает.