Modding:Creating Recipes/ru: Difference between revisions

From Vintage Story Wiki
(Created page with "=== Типовые рецепты ===")
No edit summary
 
(21 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<languages/>
{{GameVersion|1.16}}


Прежде чем создавать рецепты, рекомендуем сначала прочитать [[Basic Item|Основа предмета]], чтобы понять это руководство.
Прежде чем создавать рецепты, рекомендуем сначала прочитать [[Basic Item|Основа предмета]], чтобы понять это руководство.
Line 4: Line 6:
== Основы ==
== Основы ==


Давайте создадим рецепт для нашей палочки, который мы добавили в руководстве [[Basic Item|основа предмета]].  
Давайте создадим рецепт для нашей палочки, который мы добавили в руководстве {{ll|Modding:Basic Item|nsp=1}}. Другие рецепты можно найти в <code>assets/survival/recipes/</code>.


=== Шаблон ингредиентов ===
=== Шаблон ингредиентов ===
Line 14: Line 16:
который будет выглядеть так:
который будет выглядеть так:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
ingredientPattern: "P S S",
ingredientPattern: "P,S,S",
width: 1,
width: 1,
height: 3,
height: 3,
</syntaxhighlight>
</syntaxhighlight>


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


=== Ингредиенты ===
=== Ингредиенты ===
Line 76: Line 78:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
ingredientPattern: "P S S",
ingredientPattern: "P,S,S",
width: 1,
width: 1,
height: 3,
height: 3,
Line 89: Line 91:
Чтобы добавить эти рецепты для крафта в ваш мод, вам нужно создать еще одну папку в вашем рабочем пространстве <code>assets/myadvancedwand/recipes/grid/</code> и скопировать туда файлы.
Чтобы добавить эти рецепты для крафта в ваш мод, вам нужно создать еще одну папку в вашем рабочем пространстве <code>assets/myadvancedwand/recipes/grid/</code> и скопировать туда файлы.


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


== Продвинутые рецепты ==
== Продвинутые рецепты ==
Line 95: Line 97:
=== Типовые рецепты ===
=== Типовые рецепты ===


There are more complicated things you can do with recipes. This the recipe for wooden planks which are crafted out of logs:
Есть более сложные вещи, которые вы можете сделать с рецептами. Это рецепт для деревянных досок, которые сделаны из бревен:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
Line 104: Line 106:
width: 1,
width: 1,
height: 1,
height: 1,
output: { type: "block", code: "planks-{wood}", quantity: 4  }
output: { type: "block", code: "planks-{wood}-hor", quantity: 4  }
}
}
</syntaxhighlight>
</syntaxhighlight>


Instead of having a recipe for every wood type, you can assign a name to an ingredient (in this case it is <code>name: "wood"</code>) and everything identified by <code>*</code> will later on replaced be for the output. Meaning <code>{wood}</code> will be replaced by the type of the giving log.
Вместо того, чтобы иметь рецепт для каждого типа древесины, вы можете назначить имя ингредиенту (в данном случае это <code>name: "wood"</code>), и все обозначенное <code>*</code>, позже будет заменено на выходе. Значение <code>{wood}</code> будет заменено типом используемого дерева.


For example if we would have a birch log block, its code would be <code>log-birch-ud</code>, so <code>*</code> would stand for <code>birch</code>, therefore the output will be converted from <code>code: "planks-{wood}"</code> to <code>code: "planks-birch"</code>.
Например, если бы у нас был блок бревна березы, его код был бы <code>log-birch-ud</code>, поэтому <code>*</code> будет означать <code>birch</code>, поэтому выходные данные будут преобразованы из <code>code: "planks-{wood}-hor"</code> в <code>code: "planks-birch-hor"</code>.


=== Преобразование ингредиента в другой предмет при создании ===
Иногда вы хотите сохранить один или несколько ингредиентов, но преобразовать их в другой предмет после создания. Например, при изготовлении медово-серной припарки игроку нужна чаша, наполненная медом, но чаша не расходуется для ее изготовления. Вместо этого чаша с медом превращается в пустую чашу. Для этого к ингредиенту добавляется свойство <code>returnedStack</code>. Значение этого свойства должно содержать <code>type</code> и <code>code</code>, как и стандартные свойства ингредиента. Это говорит рецепту, какой предмет вернуть игроку.
Продолжая пример медово-серной припарки, чаша меда в качестве ингредиента выглядит как <code>"B": { type: "block", code: "bowl-honey" }</code>, но игрок проиграет чаша, если рецепт был написан таким образом. Нам нужно добавить <code>returnedStack</code> в свойства ингредиента и указать, каким элементом его заменить. В этом случае игрок должен получить пустую миску вместо миски с медом <code>returnedStack: { type: "block", code: "bowl-burned" }</code>. Это свойство размещается рядом со свойствами <code>type</code> и <code>code</code> ингредиента. Собираем все вместе:
<syntaxhighlight lang="json">
{
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  }
}
</syntaxhighlight>
=== Расходует более одной прочности на инструмент ===
Чтобы сбалансировать потребление долговечности, это можно сделать, добавив <code>toolDurabilityCost</code> и <code>isTool</code>. Это рецепт измельчителя:
<syntaxhighlight lang="json">
{
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 }
}
</syntaxhighlight>
=== Разделение рецептов на одной странице справочника ===
Иногда количество рецептов для одного предмета может стать огромным, чтобы отделить важные, это можно сделать, добавив <code>recipeGroup</code>. Это рецепты деревянной лестницы:
<syntaxhighlight lang="json">
{
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  }
}
</syntaxhighlight>
=== Ограничение определенным классом ===
Рецепт может быть ограничен определенным [[Classes/ru|классом]]. Это можно сделать, добавив <code>requiresTrait</code>. Это рецепт набора для шитья:
<syntaxhighlight lang="json">
{
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"  }
}
</syntaxhighlight>
=== Копирование атрибутов ===
Некоторые рецепты могут потребовать копирования атрибутов. Это можно сделать, добавив <code>copyAttributesFrom</code>. Это рецепт для ящика с надписью:
<syntaxhighlight lang="json">
{
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" }  }
}
</syntaxhighlight>


{{Navbox/modding|Vintage Story}}
{{Navbox/modding|Vintage Story}}

Latest revision as of 15:35, 22 November 2023

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 ItemEntityBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity 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