рандомное задание для майнкрафт
Generating files.
You can save it, to get the same output again when reusing the randomizer
Your Randomization Seed:
Only the characters A-Z, a-z and 0-9 are supported.
You need to have access to the map files to use the generated datapack
Not supported in (J) 1.13.X
Chests in Dungeons, Mineshafts, etc.
Fishing, Hero of the Village Gifts, etc.
Added Loot-Table randomization support for Minecraft Java v1.16
Added Crafting Recipe randomization support for Minecraft Java v1.16
Added Crafting Recipe randomization support for Minecraft Java v1.14
Added Loot-Table randomization support for Minecraft Java v1.13
Added Crafting Recipe randomization support for Minecraft Java v1.13
Fixed «Empty Randomizations» being possible again
Added Crafting Recipe randomization support for Minecraft Java v1.15
UI changes to the randomization page. (The page no longer reloads completely when updating progress)
Fixed broken loot tables in Minecraft Java v1.15 loot table datapack
Added Loot-Table randomization support for Minecraft Java v1.15
Updated UI to reflect Minecraft Java v1.15’s UI more
Fixed «killed_by_player» condition reappearing
Shulkerboxes drop themselves
Renamed to «Minecraft Randomizer»
Added information file into the zip file, telling people to not extract the zip file
Blaze Rods are now obtainable
Small adjustments to prevent «empty» loot tables from being generated
Added instructions based on feedback from hungryhyena78
You can now choose which loot table types are being randomized
Reverted some of the changes for JavaScript detection, due to progress not always being shown when JavaScript is actually activated
The generator page should be way less aggressive now, when having JavaScript disabled
Made some adjustments to keep the server cleaner in case someone aborts the process (PHP Session file removal)
Added proper styling to the website to make it a bit more pleasing to look at
First Version of Loot Table randomizer by SethBling (PHP Port) released
Randomizer Website Developer Fasguy Original LootTable Randomizer Developer SethBling PclZip Developer Vincent Minecraft Developer Studio Mojang Special Thanks hungryhyena78 iBazly jesserules101 Please send help Web development is a pain
Создание генератора мира для minecraft
Введение
Думаю, почти все читатели Хабра слышали про майнкрафт, кто-то играл в сингле, кто-то на одном из многочисленных серверов, был даже небольшой сервер у кого-то из хабраюзеров. После двух месяцев игры я задумался — а реально ли написать свой генератор карты? Как оказалось, это вполне возможно сделать за несколько дней неторопливого гугления и кодинга.
Немного технической части
Выбор языка
Реализовать такую структуру можно на любом языке, я остановился Delphi 7. Во-первых, это пока единственный язык, который я знаю, во-вторых, именно на 7 версии года 4 назад я начинал писать блокноты по мануалам из Игромании.
Так как данные хранятся в сжатом виде, нам необходим модуль zlib.
Я использовал ZlibEx
Для начала создадим класс чанка, в который будем впоследствии писать данные
Код этого класса:
Функция getoffset выдает нужое смещение по формуле y + ( z *128 + ( x * 128 * 16 ) )
Добавим в var пару переменных:
Процедура для сборки всех чанков в готовый файл:
Всё, теперь мы имеем метод записи любого блока по любой координате, в пределах региона. При желании, несложно повторить то же для остальных регионов, надо строк 10 кода.
Обертка для writeblock:
Генерация мира, его сжатие и сохранение.
Результат:
Можно генерировать не только пиксельарт, но произвольные фигуры, все, что можно задать какой-либо формулой. Например, пол в виде синусоиды:
Тема: Генератор построек
Опции темы
Поиск по теме
Отображение
Генератор построек
у сферы только 1 параметр:
также для удобство можете перевести сферу в 2Д и по шагово стройть её.
Второй генератор у нас «Еллипсойд»
у еллипсойда есть 4 параметра:
также для удобство можете перевести еллипсойд в 2Д и по шагово стройть её.
Третий генератор Torus или как я называю «пончик»
у торуса 3 параметра:
также для удобство можете перевести торус в 2Д и по шагово стройть её.
у элипса 2 параметра:
у обсерваторий есть только 1 параметр:
у визарда есть 4 параметра:
у маяка есть 3 параметра:
3 пользователей сказали cпасибо moxeve1999 за это полезное сообщение:
Пасибо плутон
а сайт полезный))0
Пасибо плутон
а сайт полезный))0
Для строителей МоСТа вполне удобен WorldEdit.
Имхо, но для меня удобен WE.
Гайд meh.
Автоматический генератор квестов
Хочу рассказать о генераторе квестов, который я делаю для своей браузерной ZPG.
Несмотря на то, что вопрос автоматической генерации заданий в RPG достаточно древний, общедоступных работающих версий таких генераторов почти нет (скорее совсем нет), если не считать совсем примитивных вариантов. Работ по этой теме тоже не много, хотя, если активно гуглить, кое-что можно откопать. Поэтому надеюсь, что этот текст (и сам генератор, ссылка на репозиторий есть в конце статьи) будет полезен.
ZPG — Zero Player Game — игра без участия игрока, ближайший популярный аналог — Годвилль.
Персонаж игрока (герой) в игре действует полностью самостоятельно и основным его занятием является, конечно, выполнение заданий NPC.
Ключевым моментом является то, что задания нелинейные и игрок должен делать выбор, какому NPC его герой будет помогать, а какому вредить. От этого напрямую зависит «судьба мира» (например, NPC может покинуть игру, если ему многие будут вредить).
Кроме того, герой обладает «характером», который может влиять на его действия при выполнении задания (например, можно указать, что он будет стремиться помогать конкретному NPC).
Опыт герой получает только за выполнение заданий.
Исходя из этого, был нужен механизм создания интересных и сложных заданий, не противоречащих здравому смыслу и требующих от игрока подумать, прежде чем делать выбор.
Далее вместо «квест» я буду использовать термин «история», как более удобный для объяснения (каждый квест и есть история, ограниченная парой условностей, поэтому разумнее говорить именно о генераторе историй).
Постановка задачи
Требования, которые я выдвинул к историям, можно сформулировать так:
История — это направленный ацикличный связный граф. Узлы которого описывают состояние (требования к состоянию) объектов-участников и окружающей среды на конкретном этапе истории, а рёбра определяют возможные переходы между этими этапами.
Из определения плавно вытекает идея реализации истории в виде машины состояний, которая отдаётся под управление игре.
В итоге наш генератор должен на основе информации о текущем состоянии мира создавать граф истории, обладающей перечисленными ранее свойствами.
В свою очередь, полученный граф должен интерпретироваться логикой игры. Которая на основе информации о текущем состоянии истории и ожидаемом будущем состоянии будет инициировать необходимые изменения в действиях героя или окружающей среде, ведущие к выполнению всех требований, необходимых для перехода истории на следующий этап.
Сам интерпретатор реализуется достаточно тривиально (в конце статьи будет ссылка на пример реализации).
Структура истории
Итак, история — это граф, состоящий из узлов и рёбер. Каждый узел обладает списком требований (или проверок, если хотите), которые должны выполняться, чтобы история могла перейти в состояние, соответствующее узлу. Требованием может быть нахождение героя в конкретном месте или наличие у него нужной суммы денег.
Кроме самих требований к состоянию «мира» для каждого узла добавлен список действий, которые необходимо выполнить, когда история окажется в этом узле. Конечно, их можно было бы оформить и в качестве отдельных узлов с требованиями, но это значительно увеличило бы сам граф и усложнило его анализ разработчиками. Действием, в данном случае, может быть отправка сообщения игроку, начало сражения с монстром или выдача награды герою. Такие же списки действий назначены на начало и конец движения по ребру.
Примерно вот так может выглядеть простая история.
Перемещение между узлами можно представить в виде цикла:
Генерация истории
История может состоять из нескольких «атомарных» заданий. Например, больной NPC может отправить героя за лекарством к ведьме, которая потребует за него услугу (выполнение другого «вложенного» задания).
Поэтому строится она из набора «атомарных» шаблонов. Шаблон представляет собой такой же граф истории, но со всеми вариантами развития событий (даже теми, которые могут сделать историю противоречивой).
Важным моментом здесь является соединение шаблонов (помним, что в итоге у нас должен быть связный граф):
Связывание родительской истории с началом дочерней происходит просто — родительская создаёт ребро из нужного узла в единственный стартовый узел дочерней истории.
Конечных же узлов может быть несколько, и они могут иметь разный семантический смысл для истории. Например, в истории про ведьму герой может не только выполнить её задание, но и провалить его, соответственно, дуги из разных конечных узлов необходимо вести строго в соответствующие им по смыслу узлы родительской истории.
Для этого в каждом конечном узле указывается список результатов задания для каждого из объектов участников. На текущий момент возможных результатов три:
Постобработка и проверка корректности
После описанных выше действий, у нас на руках будет визуально правильный граф истории, но без гарантии непротиворечивости. В таком графе содержатся все варианты развития событий, даже противоречащие текущему состоянию мира.
Например, в одной из веток герой может вредить своему другу. Или два NPC, отмеченные врагами, могут действовать сообща.
Если проверка прошла успешно, то у нас появилась новая история.
Если нет — начинаем создавать её сначала.
Подход с полным откатом может привести к очень длительной генерации, в случае, если мир игры очень маленький и обладает большим количеством связей. Но на практике обычно объектов в мире много, а связей между ними мало, поэтому проблем нет.
В случае частых ошибок, игра, использующая генератор, может уменьшить количество устанавливаемых свойств мира (например, перестать учитывать отношение дружбы). Сам генератор не пытается делать дополнительных предположений о состоянии мира.
Ссылки
Генератор написан на Python, выложен на github под BSD лицензией: