Лидеры
Популярный контент
Показан контент с высокой репутацией 18.05.2015 во всех областях
-
2 баллаНаконец то нашлось у меня время сделать программульку, которую умолял уже давно всех сделать. Робота-Грифера. С самого начала времен, еще с эпохи появления мода ОС я орал, что роботы приват не рушат, не ломаю ничего, но прекрасно сохранят за собой статус "тихого взломщика и воришки". Роботы поднимают предметы с земли, шуршат по инвентарям, печкам, сундукам, управляют редстончиком в привате и прочее. В видео вы сможете убедиться, что они не плохо справляются с ключиком и являются профессиональными воришками. Лазают по системным блокам, снимают машинки ИК, ветрячки, СП, печки мазераторы и прочее. Включают рычаги и кнопки. Больше чем уверен, что робот может сожрать мед весь из улья и спереть весь пчелиный рой вместе с выводком и редкими трутнями. Лазает ли он с помощью капсул в жидкостные системы, не проверял, скорее всего он высосет материю и биогаз легко. На ИТ нет многих модов просто. Мне как админу, самому делать для игроков программу Грифера было не приоритетно. Игроки просто видели, что мол и своего робота не понятно как заставить в своем привате работать, а тут еще как-то к кому-то залезть, да ну его, и продолжали крафтить дальше свои печки на МТ, трубы на ИТ и реакторы. Магнифику(игрок такой унас был, завод построил на 60 чанков) писал еще на CS(старый наш сервак на 1.6.4.), что мол, ты чего, сдурел, коммунизм что ли наступил, сундуки на улице поставил и прочее. А он говорит, да все равно, мне не жалко)))) Старожилы помнят, кто долго на проекте. Вот чисто нубасовский дом, который первый подлежит налету роботов и высасыванию всего, что там есть, до нитки, ну не хватило человеку послтака песка на потолок, ну сделай из дерева, топор же ломает дерево высотой в 100 блоков под корень, не-е-е-е-е-е-е, зачем. Пусть дырень будет. И домику уже почти 40 дней как хозяина нет, цел целехонек стоит=) : Вот такие "антенки" разбираются под 0 почти, сами в видео посмотрите: во первых, это не эстетично, во вторых забираются солярка, хранилище и потроха компа. Неужели нет кирпичиков, обложить аккуратно и сделать башенки Wi-fi???? Я своим Байтом проехал в Банк, снял зарядку на 40 лямов в полу в 6 кабинке и через дырень, куда кидают товар, прошмыгнул в хранилище. А там МЕ диски лежат, на которых каждого вида руд по 250К и 27К алмазов. Банк уже закупил пластиковые пуленепробиваемые двери-жалюзи. Робот - это блок а а не сущность, и даже в открытые двери он не пройдет. А вот дрон легко Спас Дата-центр OpenNet от отключения и перебоев c питанием: Вот рекомендуемое размещение СП в ваших домах на газонах и лужайках. Во первых, на ВЕБ карте нет зияющих дыр в вашей крыше (хотя сомневаюсь, что это кого-то волнует, кроме меня, как выглядит сервер и карта в целом), так как не все блоки из модов отрисовываются, во вторых ваши СП в безопасности, красиво и эстетично, провод уже идет в подвальчик, там где генматы и машинки: Сразу оговорюсь, это не то, что фикситься будет как-то, это еще и поощряться будет, что на ИТ идет война за выживание, борьба роботов и людей. Где игроки понемногу учатся программировать и наращивают функционал своих программ. Выживет тот, кто проворнее, быстрее, хитрее. У кого проги более мощнее и функциональнее. Использование хитрых приспособлений, ловушек, сканеров, сенсоров с применением комп. модов будет только приветствоваться. Вон даже уже МТ-шники поняли, что да, много модов это интересно, но это лаги-баги и тупиковый путь развития. Толку от этих модов нет, и не важно, сколько там ты скрафтишь тех печек и труб с турбинами. Они идут только как дополнение к комп. модам, которые в сотни раз интереснее любой крутой печки или центрифуги с соковыжималкой. Для донатного сервера да, покатит, но нам с нашими скромными мощностями сервера и концепцией сообщества игроков-программистов эта вязанка модов ни к чему. П.С. код по этическим соображениям и во избежания резкого скачка грабежей,сражений и войны за территорию, покрытие сетей и зоны влияния, а также из соображений, что не все новички там в в курсе, что и куда пихать и играют не каждый день на сервере, выложу через несколько дней в том виде, который он сейчас (это кусок от моей глобальной программы для универсального робота, который выживает сам в мире, ведет добычу, сендит инфу сквозь миры хозяину, сам решает, как заряжаться(всплывать на поверхность на солнце или жрать топливо), сохраняет тайники с ресами добытыми и записывает коры и прочее и т.п., так называемый ИИ фрилайф-майнинг). А пока рекомендую пересмотреть систему безопасности домика, поставить сканеры (радиус у них 64 блока, ним можно даже ветряки охранять и успеть снять их раньше, чем на вас налетит группа игроков-атакеров с роботами) В скором времени установлю компьютроникс (далее КТ), там система внутреннего чата, радары и сенсоры мобов и игроков для роботов, и даже плата самоуничтожения для робота. С ним сервер ИТ станет еще более компьютеризирован. Ну и собственно, ночное видео-приключение Алекса и Байта: https://www.youtube.com/watch?v=seoHI4fZzKA П.С. ссылка на код на программы
-
1 баллДроны - как керосин. Они есть везде. Еще года два назад это было просто еще одно интересное видео на Ютубе. Год назад они вдруг оказались в интернет магазинах. Затем просочились в рекламу на ТВ, и вот теперь - они есть и в OpenComputers! Пришла пора с ними разобраться. 1. Матчасть Дрон, в данном случае - квадрокоптер, это беспилотный летающий аппарат, приводимый в движение двумя парами горизонтальных винтов. Приостановливая вращение винтов с одного боку, дрон двигается в сторону (стрейф). Эти винты вращаются в разном направлении (два - по часовой срелке и два - против), за счет чего дрон не нуждается в стабилизирующем хвостовом пропеллере (как вертолет). За счет этого же он и разворачивается в воздухе, замедлив вращение однонаправленной пары винтов. Дрон обладает небольшой массой, для экономии энергии, которой у него не много (на 10-30 минут полета в среднем). (с) Википедия 2. Дроны и OpenComputers Приблизительное изображение дрона в OpenComputers =): В мире Майнкрафта дрон представляет из себя "сущность" (Entity). Это значит, что он обладает возможностями мобов Майнкрафта. (В то время как робот - это блок.) Его можно сдвинуть с места толкая. Он умеет пролетать сквозь двери и калитки (в отличии от робота). Он движется не последовательно, из блока в блок, а из точки в точку. Причем маршрут может лежать по диагонали. Конечно, движется он по кратчайшей линии, и если на пути окажется стена - дрон столкнется с нею. Программирование дрона как две капли воды похоже на программирование микроконтроллера. Вы точно так же записываете программу на EEPROM, и при необходимости меняете ее на верстаке. Только в отличии от контроллера, вам становится доступен новый компонент: drone. Подробнее об командах дрона можно узнать здесь: OpenComputers/Дрон. (Или здесь: ocdoc.wiki (англ.)) 3. План Нужна какая-нибудь несложная задача, для целей эксперимента. Используем программку send из предыдущего поста, для удаленного управления. Зальем ее на планшет. А дрон пусть... носит свиней. Будем оригинальными и непоследовательными. 1. Команда 'add X Y Z Name From'. Добавляем точку Name к маршруту, цепляя ее к точке From. Зададим дрону последовательность точек, которые образуют граф - безопасные маршруты. 2. Команда 'catch' - дрон ловит свинью. 3. Команда 'drop' - дрон выпускает свинью. 4. Команда 'to X' - дрон летит в точку Х. Для начала не будем особо заморачиваться с графом маршрутов. Это будет простое неориентированное дерево. Примерно такое: 4. Строим полигон Построим что-нибудь подходящее для тестов. Отметим ключевые точки будущего графа красными блоками. А синий блок - будет стартовой площадкой дрона. Поскольку я играю без модов на энергию, мой планшет и дрон будут работать вечно. И я не заморачиваюсь станцией подзарядки. Иначе, к схеме выше было бы необходимо добавить станцию, где дрон мог бы зарядить аккумулятор. 5. Пишем программу Скрипт для удаленного управления скопипастим из прошлого поста, подправим, чтобы умела отправлять несколько переменных и зальем на планшетик, для удобства. (Для этого, соберите планшет - не забудьте клавиатуру и видеокарту! - положите его в зарядник и запустите с подключенного компа команду install. Укажите адрес винчестера планшета - и все, что было у вас на компе автоматически загрузится в планшет, включая даже ваши собственные программы.) local com = require('component') local modem = com.modem local args = {...} modem.broadcast(27, table.unpack(args)) io.write("Message: ") print(table.unpack(args)) Далее - более сложная часть. Программа дрона. Программа предназначена для EEPROM. Значит соблюдаем те же правила: используем computer, component и API имеющихся у дрона компонентов. Включая его родной компонент drone. В нашем случае, дрон вооружен апргейдом-лассо (leash) и беспроводной сетевой картой (modem) для связи. Стоит отметить, что процесс отладки программы (по крайней мере в текущем билде мода) достаточно неудобен. В случае ошибки дрон отказывается включиться, издав тонкий писк, и не выводя никакой информации. Получить отчет об ошибке при помощи анализатора не выйдет - ведь Shift+ПКМ просто снимает дрона. Автор обещал в скором времени это исправить. Ну а пока - помучаемся. Отредактировать чип в стороннем редакторе, не вынимая его из дрона тоже не выйдет. В отличии от файловых систем, которые имеют удобную папку вида /saves/World/opencomputers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/, чипы EEPROM хранят свой код в NBT тегах предмета. Этим же обусловлено и ограничение размера кода в 4 килобайта. 5.1. Основная часть Это цикл который ждет указаний, а затем запускает соответствующую функцию. drone = component.proxy(component.list("drone")()) modem = component.proxy(component.list("modem")()) leash = component.proxy(component.list("leash")()) modem.open(27) route = {} path = {} current = "" while true do name, _, sender, _, _, message, x, y, z, point, from = computer.pullSignal(1) if name == "modem_message" then if message == 'add' then add(tonumber(x), tonumber(y), tonumber(z), point, from) if current == "" then current = point end elseif message == 'to' then to(x) elseif message == 'catch' then catch() elseif message == 'drop' then drop() end end if #path > 0 and drone.getOffset() < 1 then drone.move(route[path[#path]].x-route[current].x, route[path[#path]].y-route[current].y, route[path[#path]].z-route[current].z) current = path[#path] path[#path] = nil end end modem.close() Чтобы облегчить себе жизнь (и тестирование bios), вы можете сделать так: напишите заглушку для компонента drone (и других, если надо), вроде этой: http://pastebin.com/EVYzN5Bj Просто скопируйте в папку на компьютере, где вы пишете программу для дрона. Затем измените первые строки программы следующим образом: component = require('component') computer = require('computer') drone = require('drone') modem = component.modem -- leash = component.proxy(component.list("leash")()) Затем добавьте в цикл условие выхода по нажатию кнопки: if name == 'key_down' then break end И вы можете просто запустить вашу программу для дрона на компьютере. Разумеется полноценной эмуляцией дрона тут и не пахнет, зато очень удобно отслеживать глупые синтаксические и логические ошибки. Как устроен код основного цикла? Переменная route - хранит таблицу "вейпоинтов" (waypoints). Это вершины графа и информация о связях между ними. Переменная path - хранит путь от текущей вершины до цели. Переменная current - отмечает текущее местоположение дрона в графе. В цикле мы читаем получаемые сообщения и вызываем соответствующие функции. Первая переданная вершина считается дроном текущей. Во второй части цикла происходит проверка. Если путь до цели - не пуст (это значит, что дрону надо куда-то лететь) и дрон уже долетел до текущей вершины (getOffset()), то программа берет следующую вершину из path, отправляет дрона к ней и объявляет ее текущей. 5.2. Функции-команды Теперь последовательно добавим функции для каждой команды. function add(x, y, z, name, from) route[name] = {x=x, y=y, z=z, link = {}} if from ~= nil then if route[name] == nil or route[from] == nil then drone.setStatusText("Error!") else table.insert(route[name].link, from) table.insert(route[from].link, name) end end end Тут все просто. Пишем вершину в список. Если он связана с другой вершиной (from ~= nil), то в специальную табличку link заносим две связи: из name в from, и из from в name. function search(target, point, prev) for key, name in pairs(route[point].link) do if name == target then table.insert(path, point) return true end end for key, name in pairs(route[point].link) do if name ~= prev then if search(target, name, point) then table.insert(path, point) return true end end end return false end function to(name) path = {} table.insert(path, name) search(name, current) end Функция to обнуляет старый путь (на всякий случай), затем вставляет в него цель пути (name) и запускает функцию search, которая рекурсивно ищет и записывает остальные промежуточные вершины на маршруте от name до current (текущей локации). Функция search сделана достаточно примитивно (возможно вы предложите более эффективный способ?). Поскольку мы договорились, в целях упрощения использовать граф-дерево (не содержаший петель), от любой точки к другой существует один и только один маршрут, который функция и находит перебором связанных вершин. function catch() for c = 2, 5 do if leash.leash(c) then return true end end return false end function drop() leash.unleash() end Тут все элементарно. 6. Подготовка Пишем программу на дрона, заряжаем планшет и выдвигаемся в зону действий. Дрона ставим на синий куб (стартовая площадка) и включаем. После уточнения на местности, составляем карту вейпоинтов и строим на бумажке будущий граф: Для каждого загона добавлены две точки - name и name_up. Основные "трассы" дрона лежат на высоте в 6 блоков. А в каждом загоне спускаются к земле. (Чтобы заарканить животное, выстреливая лассо вбок, дрону желательно находиться на одном уровне с жертвой). С планшета вносим координаты в память дрона. Примерно так: Главное - не ошибиться. Т.к. в код не была добавлена защита "от дурака" =) Алгоритм позволяет добавлять вершину "на лету". В любой момент вы можете добавить еще одну ветку к схеме. Теперь все готово к тесту. 7. Запуск Все готово. Проверим, как он двигается. Введем send to sheeps в консоль планшета. Дрон уверенно поднимается в воздух и опускается в загоне в овцами. Теперь введем send to pigs. Функция search снова вычислит путь и робот переместится в указанную вершину: Функции catch и drop тоже работают штатно =) Хотя и не лишены некоторых глюков (ведь физика веревки не просчитывается): 8. Итоги а) Дрон - любопытная штуковина. б) Полный код прошивки. использованный в этом посте - здесь: http://pastebin.com/Cy1UR6vy в) Навигация по вейпоинтам - интересный и очень распространенный способ организации сложного движения. Схему можно усложнить - опционально добавлять только одну связь в таблицу link - тогда получатся ребра с односторонним движением. Добавить петли, оптимизировать поиск кратчайшего пути. Еще можно облегчить правление дроном - хранить все команды для конкретной задачи в виде файла-скрипта, который запускать одной командой и т.д. Enjoy!
-
1 баллАвтоматический крафт предметов роботом без лишних модов. Программа для мода OpenComputers. Попытка реализовать какой-то уровень автоматизации крафтов без дополнительных модов. Этап разработки. Предварительный обзор. https://www.youtube.com/watch?v=SiQfV10fHPc
-
1 баллРесурсов всегда не хватает. Что делать ?! Копать! Где копать ?! Вот сейчас то после прочтения данной записи мы и узнаем. Для добычи ресурсов будем использовать планшет. Сам по себе для добычи ресурсов он бесполезен, но если в него при сборке установить геосканер, то мы сможем узнавать где и сколько ресурсов находяться в породе, но с определенной в настройках сервера погрешносью. Как собирать планшет возможно расскажу потом. Использоваться будет команда сканера scan. Вот выдержка из вики: scan(x: number, y: number, [ignoreReplaceable: boolean]): table or nil, stringФункция сканирует "колонну" блоков в относительных координатах (x, y) и возвращает таблицу плотностей (с определенной погрешностью). В случае ошибки возвращает nil и ее текст.Координаты (0, 0) обозначают колонну блоков, в которой располагается сам сканер (32 блока вверх от него, и 32 блока вниз). От себя добавлю только то, что можно сканировать куб 64*64*64 , где центр куба - положение сканера. Положением сканера будет центр этого куба, тоесть 32 высота ( Также у нас на сервер насколько я понял куб будет 128*128 и высотой в 64 блока). На сканирование одного блока уходит 10 энергии. На один столб должно порядка 640. Для начала работы нам потребуется сам планшет со следующими минимальными компонентами: -видеокарта 1 уровня -монитор 1 уровня -клавиатура -геосканер -любые процессор, оперативная память, винчестер, bios и пр. . Для начала работы нам нужен планшет с записанной на диск программой. Я не использовал в планшете интернет-карту, а просто вставил текст программы нажатием средней кнопки мыши в открытый для редактирования файл. Ссылка на pastebin: http://pastebin.com/eJne1Dna . Код eJne1Dna c= require("component")computer= require("computer")event= require("event")os= require("os")term = require("term")gpu=c.gpus=c.geolyzerfunction intro() print("Нажмите пробел для сканирования") print("Нажмите q для выхода") print("Нажмите с для очистки экрана") print("Область сканирования 20 блоков на восток")endfunction scann()--сканирует область в 20 блоков от игрока в сторону севера. local cx,cy=1,1 local onThatX=0;--количество ресурсов для данного столбца. Используется для отрисовки глубины копки для нового local maxy=1;--положение курсора по окончании сканирования for x=1,20 do gpu.set(cx,cy,tostring(x));--текущий столбец data=s.scan(x,0);-- х инкриментируется до 20, у=0 ширина сканирования 1. local t=0;--"табулятор" для двухсимвольной глубины. if x>9 then t=1 end for d=1,32 do if data[d]>2 then -- в data записаны плотности блоков. >2 означает сообщать о блоках с плотностью более 2. -- Весь диапазон от 0 до 99. 99 это вроде игрок. Все ресурсы примерно одинаковой плотности в районе 3. computer.beep(2000,0.1) if onThatX>0 then cy=cy+1 if (32-d)>9 and t==0 then t=1 end;--смещаем курсор для печати на один столбец дальше из-за цифт больше 9. if cy<15 then gpu.set(cx,cy,tostring(math.floor(32-d)));--Печатает глубину на которую нужно копать вниз относительно начальной высоты игрока. else -- для 80*15 экрана. Для больших экранов можно изменить и убрать. gpu.set(cx,15,tostring(math.floor(32-d))) end end onThatX=onThatX+1 end end if t==1 then cx=cx+2 else cx=cx+1 end;t=0 if cy>maxy then maxy=cy end;--положение курсора при продолжениие печати о "нажмите enter для продолжения". cy=1 onThatY=0;--обнуляем количество ресурсов для текущего столбца. end term.setCursor(1,maxy) term.write("нажмите enter для продолжения") io.read() term.clear() intro()endintro()while true do _,_,key1,key2=event.pull("key_down") if key2==57 then term.clear();scann() elseif key2==46 then term.clear();intro() elseif key2==16 then term.clear();os.exit() endend Для демонстрации работы я подготовил стэнд: С включенным планшетом я стал в позицию 1. Для работы программы нужно обязательно смотреть на восток. Это связанно с жестким закреплением направления сканирования в программе из-за избыточной сложности пользования gps (не сложности программирования, а малого gps.range() ). Скриншоты с начальным положением и направлением в начале работы для тех, кто путается со сторонами света или пока еще не проходил географию в школе: Далее запускаем программу и увидим небольшие инструкции для работы. Возможностей пока мало: -выход по нажатию на кнопку "q" . -сканирование по нажатию на кнопку пробела . -очистка экрана по нажатию на "c". Смело нажимаем пробел и программа начнёт сканировать породу под игроком на расстояние в 20 блоков на восток. В итоге у нас получиться примерно вот такая табличка, разобраться в которой я помогу на следующих скриншотах (По оси X удаление от игрока, по Y- глубина залегания добра). А вот и обьяснение как расшифровать эту табличку: Рассмотрим на примере золота. Нужно сделать 5 шагов вперед от начальной точки и прокопать на глубину минимум 4 блока. Если копать до 7го блока, то мы выкопаем все ресурсы . Как можно заметить, дерево, шерсть и губка имели плотность ниже 2х и не попали в табличку. Но попала лава и ядерный реактор. Обьяснение скудное, но заходите в игру и покажу. Программу можно модифицировать разными способами. Добавить сетку привязок высот, чтобы небыло мешанины цифр. Тогда можно будет определять лавовые озера по горизонтальному скоплению "ресурсов". С успеход дописывается работа с gps, тогда отпадает необходимость работы только в сторону востока. Но gps.range() у нас на сервере всего 64 блока, поэтому уйдя далее этого расстояния необходимо отрисовывать новую карту и вставлять её в gps приемник, что очень сильно напрягает. А так бы можно было сделать визуальное и звуковое оповещение над каким блоком копать вниз и на сколько. Визуально показывать на сколько копать вниз, звуком пищать на широте и долготе залегания ресурсов. При этом сам модуль gps ставить невнутри в робта, а в контейнер для улучшений,иначе нужно будет разбирать робота чтобы поменять карту. Еще опечалил тот факт, что роботам увеличили энергохранилище во много раз, а планшет судя по расходу энергии оставили на стандартном уровне. Поэтому планшет и без геосканера разряжается в теченииполучаса простого программирования в нём..Надеюсь поправят и запас энергии и дальность работы gps от одной карты . Собственно для привлечения внимания к этому факту и написана статья.
-
1 баллНи секунды в этом не сомневался! Орехи роботом колол?=) Пищевой мод - это сила. Ему ведь целые сайты и форумы посвящены. Куда там моду ОС до яблок, пирожков и малины с крыжовником и голоданием. Какая там ненависть? =) Мне ваш МТ до лампочки. Хоть покемонов там устанавливайте с космическими печками. Я на МТ один раз зашел в первую минуту когда там надо было что-то проадминить или срегенить, не помню, и никогда там больше и в страшном сне себя не видел. А МТ-шники все время набегами заходят на ИТ, и в чат орут, что у вас тут детский сервер, то еще что. Зафлудили весь форум этой едой уже. И помни! Проект бы никогда бы не создался, не было бы комп. модов и канала Рида о программировании. Чисто на твоем греге он никому не нужен в той концепции и "бездонатности", в которой он есть. И откололся не ИТ от МТ, а МТ возник, как писк и продукт недовольства постоянного и того, что не хватает модов там кому-то. Я б молчал, если бы там был онлайн хотя бы одинаковый с ИТ. Так что не ставь слона с ног на голову, и не рассказывай, кто тут кого ненавидит Желание игроков играть на комп. проекте с сервером, мягко говоря, не мощном,с большой кучей модов, и есть та заноза в мягком месте, которая порождает эти никому не нужные холивары про моды их интересность и нужность. Делайте там что хотите и устанавливайте какие хотите моды, какие вам там не заблагорассудится, только не смеши, и не сравнивай и не ставь на чаши одних весов мод из "200 строчек" на еду с ОС.
-
1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
