Моддинг:Базовое Руководство по Рецептам
Эта страница проверялась в последний раз для версии Vintage Story 1.20.4.
Введение
Цель
В этом руководстве вы создадите рецепты для сетки создания, которые помогут игрокам создать ваши ранее созданные палочку и блок! Рецепты это хороший способ дать игрокам доступ к вашему новому контенту.
Ассеты
Перед тем как начать, рекомендуется скачать рабочее пространство и ассеты для этого руководства. Там же можно найти завершенный файл.
Это руководство начинается со следующими ассетами:
- Настройка Мода и Структура Папки
- Заполненный Файл Blocktype
- Заполненный Файл Itemtype
- Заполненный Языковой Пакет
- Файлы Текстуры и Модели
- Пустой Файл для Сетки Создания
Требования
Предполагается, что вы уже знакомы со следующими темами:
- Настройка контентного мода и использование среды разработки.
- Функции модели, текстуры и языковых пакетов.
Не обязательно, но рекомендуется освоить следующие руководства:
- 2. Базовое Руководство по Предметам
- Файл 'Simple Wand' из этого руководства уже включён в рабочее пространство.
- 3. Базовое Руководство по Блокам
- Файл 'Simple Gold Block' из этого руководства уже включён в рабочее пространство.
Навигация в Ассетах
Просмотрите скачанное рабочее пространство. Вы должны уже понимать большинство этих файлов, тем не менее, есть ещё два новых:
- assets/simplerecipe/recipes/grid/simplewandrecipe.json - Пустой json файл. Который мы используем для создания рецепта для предмета 'Simple Wand'.
- assets/simplerecipe/recipes/grid/simpleblockrecipe.json - Пустой json файл. Который мы используем для создания рецепта для блока 'Simple Gold Block'.
Структура Файла Рецепта
Как вы могли заметить, все рецепты хранятся в папке 'recipes' - Также есть несколько подпапок, которые определяют тип рецепта.
В этом руководстве мы будем говорить о папке 'grid', все рецепты в которой предназначаются для сетки создания в инвентаре игрока.
Все возможные типы рецептов (с соответствующими названиями папок):
- alloy - Определяет рецепты разных сплавов для тигля.
- barrel - Определяет рецепты внутри бочек.
- clayforming - Определяет рецепты предметов, создаваемых с помощью механики лепки из глины.
- cooking - Определяет кулинарные рецепты для котелка для приготовления пищи.
- grid - Определяет рецепты для предметов, создаваемых в сетке создания в инвентаре игрока.
- knapping - Определяет рецепты предметов, создаваемых с помощью механики откалывания.
- smithing - Определяет рецепты для ковки на наковальне.
Создание Рецепта Предмета
В отличие от создания блока и предмета, проверять работоспособность рецептов будет довольно сложно, пока рецепт не будет дописан до конца, поскольку каждая строчка кода является обязательной и необходимой для создания рецепта.
При создании рецептов хорошим приёмом будет визуализировать то, что вы создаёте. Вот рецепт, который мы будем создавать в данном разделе:
Один горный хрусталь сверху двух палок. Это же волшебная палочка как-никак!
Файл Рецепта
Откройте файл 'simplewandrecipe.json' который лежит внутри 'recipes/grid'.
Чтобы создать новый рецепт для сетки создания игре нужна следующая информация:
- Ingredients - Определяет, какие объекты должны использоваться в сетке создания для получения выходного предмета (output).
- Pattern - Определяет, как надо расположить ингредиенты в сетке, а также ширину и высоту рецепта.
- Output - Определяет, какой объект должен получить игрок по завершению рецепта.
Вы заметите, что эту информацию можно располагать внутри json файла в любом порядке.
Шаблон Рецепта (Pattern)
Для начала, надо определить шаблон рецепта в json файле.
{
"ingredientPattern": "Q,S,S",
"width": 1,
"height": 3,
Эти три свойства определят шаблон и форму нашего рецепта.
Свойство 'ingredientPattern' задаёт список букв. Каждая уникальная буква определяет ингредиент. Хоть тут и используется Q для кварца (quartz) и S для палки (stick), вы можете назначать любые буквы какие сами захотите. Пока не думайте о синтаксисе этого свойства, мы поговорим об этом в следующем рецепте.
Свойство 'width' определяет, как много колонок будет в нашем рецепте.
Свойство 'height' определяет, как много строчек будет в нашем рецепте.
Ингеденты Рецепта (Ingredients)
Для корректной работы нашего рецепта, каждой уникальной букве из предыдущего свойства 'ingredientPattern' должен быть назначен 'ingredient'.
Добавьте этот код сразу после последнего свойства 'height'.
"ingredients": {
"Q": {
"type": "item",
"code": "game:clearquartz"
},
"S": {
"type": "item",
"code": "game:stick"
}
},
Свойство 'ingredients' немного отличается от всех свойств, что мы ранее рассматривали в руководствах, потому что это тип данных dictionary. В нашем случае это просто способ назначить каждому символу в шаблоне внутриигровой объект. У нас есть два уникальных символа: Q и S, и мы должны их оба добавить в этот список. Когда добавляете ингредиент, вам надо включить его type и code. С type всё просто - это либо "item" (предмет), либо "block" (блок). А code - это уникальный идентификатор предмета. В следующих руководствах мы рассмотрим несколько способов найти коды объектов, а сейчас мы просто возьмём game:clearquartz и game:stick.
Когда все уникальные буквы получили свои ингредиенты, можно двигаться дальше.
Выходной Предмет Рецепта (Output)
Выходной предмет определяет, какой объект должен получиться в рецепте. Добавьте последний кусочек кода в ваш файл сразу под секцией 'ingredients'.
"output": {
"type": "item",
"code": "simplewand"
}
}
Вы могли заметить, что свойство 'output' определяется очень похоже на то, как определялся ингредиент, используются аналогичные свойства 'type' и 'code'. И в нашем случае, чтобы создать нашу волшебную палочку, мы заполним эти свойства так: тип - item и код - simplewand.
Итоговый Рецепт
На этом ваш первый рецепт должен быть готов! Протестируйте его, перейдя к предмету "simplewand" во внутриигровом руководстве, или попробуйте его создать в режиме выживания.
Вот полный итоговый рецепт для сравнения:
simplewandrecipe.json |
{
"ingredientPattern": "Q,S,S",
"width": 1,
"height": 3,
"ingredients": {
"Q": {
"type": "item",
"code": "game:clearquartz"
},
"S": {
"type": "item",
"code": "game:stick"
}
},
"output": {
"type": "item",
"code": "simplewand"
}
}
|
Создание Рецепта Блока
Вы создадите вот такой рецепт к концу этого раздела:
Рецепт должен принимать любой молот, поверх 6 слитков золота, для создания блока из золотых кирпичей.
Файл Рецепта
Откройте файл 'simpleblockrecipe.json' который лежит внутри 'recipes/grid'.
Также, как и в прошлый раз, рецепту надо определить его ingredients, pattern, и output.
Шаблон Рецепта (Pattern)
Сперва, объявите шаблон рецепта внутри вашего json файла.
{
"ingredientPattern": "_H_,GGG,GGG",
"width": 3,
"height": 3,
Свойства те же, что и раньше, только в этот раз мы используем максимум из доступных строк и колонок.
Про свойство IngredientPattern
Свойство 'ingredientPattern' гораздо проще объяснить именно на этом рецепте. Каждая буква в шаблоне определяет уникальный ингредиент, хотя есть и несколько спецсимволов. Каждая секция, разделяемая запятыми, задаёт ряд в сетке создания. В примере выше у нас получаются ряды: "_H_", "GGG", "GGG". Каждая буква определяет место ингредиента в сетке создания. Нижнее подчеркивание ( _ ) говорит игре, что это место должно остаться пустым и оно в рецепте не используется.
Посмотрите на рецепт палочки и убедитесь, что теперь понимаете его ingredientPattern. Это рецепт 1х3, где каждая строчка разделена запятой.
Ингеденты Рецепта (Ingredients)
Этот рецепт использует два ингредиента - молот и золотой слиток.
Добавьте этот код сразу после последнего свойства 'height'.
"ingredients": {
"H": {
"type": "item",
"code": "game:hammer-*",
"isTool": true
},
"G": {
"type": "item",
"code": "game:ingot-gold"
}
},
Ингредиенты здесь следуют тем же правилам, что и в предыдущем рецепте, но тут как раз можно рассказать об ещё одном концепте.
Подстановочные Символы Ассетов
До сих пор вы ссылались на ассеты, особо не понимая как они работают. Это немаленькая тема, и рассматривать мы её будем в следующих руководствах. Сейчас нам важно понять, что такое Подстновочные символы и как они работают в коде свойства.
В Vintage Story существуют варианты каждого предмета, блока или сущности. Эти варианты используются для создания большого количества новых объектов, которые будут разделять идентичные свойства, при этом находясь в одном-единственном файле. Одним из примеров таких вариантов является молот. Существуют 9 молотов с практически одинаковым функционалом, однако для каждого из них используется свой вариант 'металла' для определения его материала. Каждый объект в игре должен иметь уникальный код, поэтому вариант предмета приписывают в конце его кода. Таким образом, получаем 9 кодов для молота:
- hammer-copper
- hammer-tinbronze
- hammer-bismuthbronze
- hammer-blackbronze
- hammer-gold
- hammer-silver
- hammer-iron
- hammer-meteoriciron
- hammer-steel
Когда дело дойдет до создания рецепта, вы не захотите создавать 9 разных рецептов для каждого молота, поэтому тут в игру вступают подстановочные символы. Эти символы позволяют модеру сгруппировать эти объекты вместе, используя символ звёздочки ( * ) в коде свойства. Увидев "hammer-*", игра примет любой объект, который начинается с "hammer-". Обратите внимание, что вам обязательно следует включить дефис, потому что просто указав "hammer*", рецепт будет принимать как молоты, так и любые оголовья молотов (hammerhead).
Вы научитесь создавать собственные варианты объектов в последующих руководствах для любителей.
Свойство "IsTool"
Существует несколько дополнительных свойств, которые можно включить в рецепт, чтобы сделать его чуть более сложным. Одно из таких свойств - это 'isTool'. Без этого свойства молот исчезнет после создания блока, но, поставив true на это свойство, мы отметим, что молот является инструментом, и он потеряет только одну единицу прочности вместо полного исчезновения.
Выходной Предмет Рецепта (Output)
Последняя секция нашего рецепта - это выходной предмет. Добавьте последнюю секцию кода в ваш файл рецепта сразу после секции с 'ингредиентами'.
"output": {
"type": "block",
"code": "simplegoldblock"
}
}
Как и в прошлый раз, мы просто подставляем код нашего блока. Обратите внимание, что в этот раз тип будет block.
Итоговый Рецепт
На этом ваш второй рецепт должен быть готов! Протестируйте его перейдя к предмету "simplegoldblock" во внутриигровом руководстве или попробуйте его создать в режиме выживания.
Вот полный итоговый рецепт для сравнения:
simpleblockrecipe.json |
{
"ingredientPattern": "_H_,GGG,GGG",
"width": 3,
"height": 3,
"ingredients": {
"H": {
"type": "item",
"code": "game:hammer-*",
"isTool": true
},
"G": {
"type": "item",
"code": "game:ingot-gold"
}
},
"output": {
"type": "block",
"code": "simplegoldblock"
}
}
|
Заключение
Поздравляем, вы создали два рецепта: для вашего нового предмета и для блока! Это руководство должно научить вас создавать простые рецепты, а также немного познакомить вас с вариантами и подстановочными символами.
Что Дальше?
Если хотите проверить свои знания, попробуйте выполнить задания из раздела "Дополнительные Задания" ниже.
Это последнее руководство из секции 'Для Начинающих'. Загляните в руководства для любителей , где вы узнаете больше о вариантах и проверке ошибок, а также о разработке более сложных блоков, предметов, сущностей и многого другого.
Дополнительные Задания
Хотите внести пару дополнительных изменений в этот мод? Попробуйте достичь следующих вещей!
Золотые слитки — это дороговато... Поменяйте рецепт блока так, чтобы он использовал кусочки золота. Код для кусочков золота: "game:metalbit-gold".
Показать решение |
В simpleblockrecipe.json',' измените "game:ingot-gold" на "game:metalbit-gold". |
Создайте ещё один рецепт, который будет использовать волшебную палочку и один древесный уголёк для создания алмаза. Коды предметов: "simplewand", "game:charcoal", и "game:gem-diamond-rough" соответственно. Обратите внимание, что палочка должна поглотиться рецептом в процессе создания — использование свойства "onTool" сломает рецепт, поскольку наша палочка не считается игрой за инструмент и она не имеет прочности.
Показать решение |
Создайте новый рецепт charcoaltodiamond.json внутри папок recipes/grid.
Ваш файл будет выглядеть примерно вот так: {
"ingredientPattern": "W,C",
"width": 1,
"height": 2,
"ingredients": {
"W": {
"type": "item",
"code": "simplewand"
},
"C": {
"type": "item",
"code": "game:charcoal"
}
},
"output": {
"type": "item",
"code": "game:gem-diamond-rough"
}
}
|