Создание рецептов

From Vintage Story Wiki
This page is a translated version of the page Modding:Creating Recipes and the translation is 100% complete.
Other languages:

Эта страница проверялась в последний раз для версии Vintage Story 1.16.


Прежде чем создавать рецепты, рекомендуем сначала прочитать Основа предмета, чтобы понять это руководство.

Основы

Давайте создадим рецепт для нашей палочки, который мы добавили в руководстве Простой предмет . Другие рецепты можно найти в assets/survival/recipes/.

Шаблон ингредиентов

Давайте начнем с объявления шаблона или макета рецепта, в нашем примере мы хотим, чтобы игрок поместил кирку поверх двух палочек.

Recipe Wand Pickaxe.png

который будет выглядеть так:

	ingredientPattern: "P,S,S",
	width: 1,
	height: 3,

P и S являются идентификаторами, которые будут определены позже. Каждая строка разделена одной запятой или ТАБом (не пробелом!), а пустая ячейка помечена подчеркиванием _. Ширина этого рецепта 1 и в нем 3 строки.

Ингредиенты

Все, что нам нужно сделать сейчас, это определить идентификаторы, которые мы использовали ранее. В нашем примере P обозначает медную кирку, а S - обычную палку.

	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper"},
		"S": { type: "item", code: "game:stick"}
	},

Type является либо block, либо item, в зависимости от того, является ли он предметом или блоком.

Когда в рецептах есть ванильные предметы, им нужно game: перед названием предмета. Когда они из вашего собственного мода, вы можете просто поставить название предмета.

Чтобы узнать code каждого предмета (или блока), вы можете ввести .edi в консоль, которая добавит свойство code в всплывающую подсказку:

Recipe Stick Tooltip.png


Кроме того, мы могли бы добавить необходимое количество к нашим ингредиентам, поэтому вместо одной палки на слот мы могли бы потребовать больше:

	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper"},
		"S": { type: "item", code: "game:stick", quantity: 2}
	},

Еще одна вещь, которую мы могли бы сделать - вместо того, чтобы потреблять кирку, мы могли бы использовать ее как инструмент:

	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper", isTool: true},
		"S": { type: "item", code: "game:stick"}
	},

Это может привести к тому, что кирка потеряет одну прочность во время крафта, вместо того, чтобы потреблять всю кирку сразу.

Возврат (выход)

Нам все еще нужно определить результат, который довольно похож на определение ингредиентов:

	output: { type: "item", code: "wand-pickaxe"}

Теоретически, мы могли бы также добавить свойство quantity (количество) здесь.

Распространение

Вот как выглядит наш последний рецепт:

{
	ingredientPattern: "P,S,S",
	width: 1,
	height: 3,
	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper"},
		"S": { type: "item", code: "game:stick"}
	},
	output: { type: "item", code: "wand-pickaxe"}
}

Чтобы добавить эти рецепты для крафта в ваш мод, вам нужно создать еще одну папку в вашем рабочем пространстве assets/myadvancedwand/recipes/grid/ и скопировать туда файлы.

Вы можете скачать полный мод, включая предметы (Pre 1.15)здесь.

Продвинутые рецепты

Типовые рецепты

Есть более сложные вещи, которые вы можете сделать с рецептами. Это рецепт для деревянных досок, которые сделаны из бревен:

{
	ingredientPattern: "L",
	ingredients: {
		"L": { type: "block", code: "game:log-*-ud", name: "wood" }
	},
	width: 1,
	height: 1,
	output: { type: "block", code: "planks-{wood}-hor", quantity: 4  }
}

Вместо того, чтобы иметь рецепт для каждого типа древесины, вы можете назначить имя ингредиенту (в данном случае это name: "wood"), и все обозначенное *, позже будет заменено на выходе. Значение {wood} будет заменено типом используемого дерева.

Например, если бы у нас был блок бревна березы, его код был бы log-birch-ud, поэтому * будет означать birch, поэтому выходные данные будут преобразованы из code: "planks-{wood}-hor" в code: "planks-birch-hor".

Преобразование ингредиента в другой предмет при создании

Иногда вы хотите сохранить один или несколько ингредиентов, но преобразовать их в другой предмет после создания. Например, при изготовлении медово-серной припарки игроку нужна чаша, наполненная медом, но чаша не расходуется для ее изготовления. Вместо этого чаша с медом превращается в пустую чашу. Для этого к ингредиенту добавляется свойство returnedStack. Значение этого свойства должно содержать type и code, как и стандартные свойства ингредиента. Это говорит рецепту, какой предмет вернуть игроку.

Продолжая пример медово-серной припарки, чаша меда в качестве ингредиента выглядит как "B": { type: "block", code: "bowl-honey" }, но игрок проиграет чаша, если рецепт был написан таким образом. Нам нужно добавить returnedStack в свойства ингредиента и указать, каким элементом его заменить. В этом случае игрок должен получить пустую миску вместо миски с медом returnedStack: { type: "block", code: "bowl-burned" }. Это свойство размещается рядом со свойствами type и code ингредиента. Собираем все вместе:

{
	ingredientPattern: "SBS,_L_",
	ingredients: {
		"L": { type: "block", code: "linen-*" },
		"S": { type: "item", code: "powderedsulfur" },
		"B": {
			type: "block", 
			code: "bowl-honey",
			returnedStack: { type: "block", code: "bowl-burned" }
		}
	},
	width: 3,
	height: 2,
	output: { type: "item", code: "poultice-linen-honey-sulfur", quantity: 4  }
}

Расходует более одной прочности на инструмент

Чтобы сбалансировать потребление долговечности, это можно сделать, добавив toolDurabilityCost и isTool. Это рецепт измельчителя:

{
	ingredientPattern: "HL_,CL_,_L_",
	ingredients: {
		"H": { type: "item", code: "hammer-*", isTool: true, toolDurabilityCost: 10 },
		"C": { type: "item", code: "chisel-*", isTool: true, toolDurabilityCost: 10 },
		"L": { type: "block", code: "log-placed-*-ud", name: "wood" }
	},
	width: 3,
	height: 3,
	output: { type: "item", code: "pounder-oak", quantity: 1 }
}

Разделение рецептов на одной странице справочника

Иногда количество рецептов для одного предмета может стать огромным, чтобы отделить важные, это можно сделать, добавив recipeGroup. Это рецепты деревянной лестницы:

{
	ingredientPattern: "S_S,SSS,S_S",
	ingredients: {
		"S": { type: "item", code: "stick" }
	},
	width: 3,
	height: 3,
	recipeGroup: 1,
	output: { type: "block", code: "ladder-wood-north", quantity: 3  }
},
{
	ingredientPattern: "P_P,PSP,P_P",
	ingredients: {
		"P": { type: "item", code: "plank-*" },
		"S": { type: "item", code: "stick" }
	},
	width: 3,
	height: 3,
	output: { type: "block", code: "ladder-wood-north", quantity: 3  }
}

Ограничение определенным классом

Рецепт может быть ограничен определенным классом. Это можно сделать, добавив requiresTrait. Это рецепт набора для шитья:

{
	ingredientPattern: "FFS,FF_",
	requiresTrait: "clothier",
	ingredients: {
		"F": { type: "item", code: "flaxtwine" },
		"S": { type: "item", code: "stick" }
	},
	width: 3,
	height: 2,
	output: { type: "item", code: "sewingkit"  }
}

Копирование атрибутов

Некоторые рецепты могут потребовать копирования атрибутов. Это можно сделать, добавив copyAttributesFrom. Это рецепт для ящика с надписью:

{
	ingredientPattern: "S,C",
	ingredients: {
		"S": { type: "item", code: "paper-parchment" },
		"C": { type: "block", code: "crate" }
	},
	shapeless: true,
	copyAttributesFrom: 'C',
	width: 1,
	height: 2,
	output: { type: "block", code: "crate", attributes: { label: "paper-empty" }  }
}
Icon Sign.png

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.

Modding
Modding Introduction Getting Started Пакет тем
Content Modding Content Mods Developing a Content Mod Basic Tutorials Intermediate Tutorials Advanced Tutorials Content Mod Concepts
Code Modding Code Mods Setting up your Development Environment
Property Overview ItemEntityEntity BehaviorsBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity BehaviorsCollectible BehaviorsWorld properties
Workflows & Infrastructure Modding Efficiency TipsMod-engine compatibilityMod ExtensibilityVS Engine
Additional Resources Community Resources Modding API Updates Programming Languages List of server commandsList of client commandsClient startup parametersServer startup parameters
Example ModsAPI DocsGitHub Repository