ItemProduceRecipe
Overview
Section titled “Overview”ItemProduceRecipe.xml defines item production recipes: skill requirements, material costs, success rates, experience rewards, and crafting outputs for the item production system.
Version Support
Section titled “Version Support”| Version | Status |
|---|---|
| v92 | Full |
| v90 | - |
| v86 | - |
DSL Support
Section titled “DSL Support”Entity: itemProduceRecipes
Operations: create, update, delete, upsert
Inline blocks:
item:— creates/updates ItemTemplate.xml with recipe-specific defaults
itemProduceRecipes: create: - id: 100001 recipeItemId: 200001 needSkillId: 1 categoryId: 10 result: id: 300001 count: 5 materials: - id: 400001 count: 3
update: - id: 100001 changes: categoryId: 20
delete: - 100001
upsert: - id: 100002 recipeItemId: 200002 needSkillId: 2 categoryId: 15 result: id: 300002 count: 1Quick Recipes
Section titled “Quick Recipes”Create with Inline Item Block (Recommended)
Section titled “Create with Inline Item Block (Recommended)”itemProduceRecipes: create: - id: 100001 # Inline item block - automatically creates ItemTemplate entry item: # Tier 3: Required user input (6 fields) name: "legendary_blade_recipe" level: 65 rareGrade: 3 # 0=Common, 1=Uncommon, 2=Rare, 3=Superior icon: "Icon_Items.scroll_weapon_metal_Tex" buyPrice: 2000000 sellPrice: 200000
# Tier 2: Optional overrides (defaults applied if omitted) category: "recipe" # Default: "generalMaterial" combatItemSubType: "combatRecipe" # Default: "generalMaterial"
# Recipe properties needSkillId: 1 needGrade: 1 needSkillProf: 100 maxSkillProf: 500 categoryId: 10 subFatiguePoint: 5 addOnSuccessProf: 10 obtainable: true result: id: 300001 count: 5Creates recipe 100001 with an automatically generated ItemTemplate entry (ID 100001). The system applies 39 hard defaults (Tier 1) including combatItemType: RECIPE, plus 13 soft defaults (Tier 2) for common recipe item attributes.
Create a Basic Recipe (Traditional Approach)
Section titled “Create a Basic Recipe (Traditional Approach)”itemProduceRecipes: create: - id: 100001 recipeItemId: 200001 needSkillId: 1 needGrade: 1 needSkillProf: 100 maxSkillProf: 500 categoryId: 10 subFatiguePoint: 5 addOnSuccessProf: 10 obtainable: true result: id: 300001 count: 5Creates a basic crafting recipe with ID 100001 that produces 5 units of item 300001. Requires skill ID 1 at grade 1 with 100 proficiency.
Create with Material Requirements
Section titled “Create with Material Requirements”itemProduceRecipes: create: - id: 100001 recipeItemId: 200001 needSkillId: 1 needGrade: 1 needSkillProf: 100 maxSkillProf: 500 categoryId: 10 subFatiguePoint: 5 addOnSuccessProf: 10 obtainable: true result: id: 300001 count: 5 materials: - id: 400001 count: 3 - id: 400002 count: 5 - id: 400003 count: 1Creates a recipe requiring three different material items: 3 units of item 400001, 5 units of item 400002, and 1 unit of item 400003.
Create with Critical Success
Section titled “Create with Critical Success”itemProduceRecipes: create: - id: 100001 recipeItemId: 200001 needSkillId: 1 needGrade: 1 needSkillProf: 100 maxSkillProf: 500 produceCriticalRate: 0.15 exp: "50" categoryId: 10 subFatiguePoint: 5 addOnSuccessProf: 10 obtainable: true result: id: 300001 count: 5 criticalItemId: 300002 criticalItemCount: 10Creates a recipe with a 15% critical success rate. Normal success produces 5 units of item 300001, while critical success produces 10 units of item 300002 instead.
Update Recipe Properties
Section titled “Update Recipe Properties”itemProduceRecipes: update: - id: 100001 changes: categoryId: 20 produceCriticalRate: 0.25 exp: "150"Updates recipe 100001 to change its category to 20, increase critical rate to 25%, and adjust experience reward to “150”.
Create with Inline Item and Materials
Section titled “Create with Inline Item and Materials”itemProduceRecipes: create: - id: 100001 item: name: "advanced_armor_design" level: 70 rareGrade: 2 icon: "Icon_Items.scroll_armor_Tex" buyPrice: 3500000 sellPrice: 350000 tradable: false # Tier 2 override - make recipe bound needSkillId: 6 needGrade: 2 needSkillProf: 250 maxSkillProf: 800 categoryId: 15 subFatiguePoint: 10 addOnSuccessProf: 15 obtainable: true result: id: 300010 count: 1 materials: - id: 400001 count: 10 - id: 400002 count: 5 - id: 400003 count: 2Creates recipe with inline item block that overrides the Tier 2 default for tradable (making the recipe item bound). The 39 Tier 1 defaults and remaining 12 Tier 2 defaults are applied automatically.
Update Result Only
Section titled “Update Result Only”itemProduceRecipes: update: - id: 100001 changes: result: count: 10Updates only the result count of recipe 100001 from 5 to 10 units. Other result properties (id, criticalItemId, criticalItemCount) remain unchanged.
Update with Material Replacement
Section titled “Update with Material Replacement”itemProduceRecipes: update: - id: 100001 changes: materials: - id: 400001 count: 5 - id: 400004 count: 2Replaces the entire materials list for recipe 100001. Previous material requirements are discarded and replaced with the new list.
Delete Recipes
Section titled “Delete Recipes”itemProduceRecipes: delete: - 100001 - 100002 - 100003Removes recipes with IDs 100001, 100002, and 100003 from the datasheet.
Upsert with Inline Item (Create or Update)
Section titled “Upsert with Inline Item (Create or Update)”itemProduceRecipes: upsert: - id: 100001 item: name: "master_weapon_recipe" level: 75 rareGrade: 3 icon: "Icon_Items.scroll_weapon_master_Tex" buyPrice: 5000000 sellPrice: 500000 needSkillId: 2 needGrade: 2 needSkillProf: 200 maxSkillProf: 600 categoryId: 20 subFatiguePoint: 10 addOnSuccessProf: 15 obtainable: true result: id: 300001 count: 8 materials: - id: 400001 count: 4Creates a new recipe and its ItemTemplate entry if ID 100001 doesn’t exist, or replaces both completely if they do exist.
Properties Reference
Section titled “Properties Reference”Recipe (Root)
Section titled “Recipe (Root)”| Property | Type | Since | Required | Description |
|---|---|---|---|---|
id | int | v92 | ✅ | Unique identifier for this recipe |
recipeItemId | int | v92 | ❌ | Item template ID that unlocks or represents this recipe. Mutually exclusive with item block—use one or the other, not both. |
item | object | v92 | ❌ | Inline item block for creating recipe items automatically. See Item (Inline Block) below. Mutually exclusive with recipeItemId. |
obtainable | boolean | v92 | ✅ | Whether this recipe can be obtained by players |
needSkillId | int | v92 | ✅ | Skill ID required to use this recipe |
needGrade | int | v92 | ✅ | Minimum skill grade required |
needSkillProf | int | v92 | ✅ | Minimum skill proficiency required |
maxSkillProf | int | v92 | ✅ | Maximum skill proficiency at which this recipe gives experience |
produceCriticalRate | decimal | v92 | ❌ | Probability of critical success (0.0 to 1.0) |
exp | string | v92 | ❌ | Experience points awarded on successful crafting |
categoryId | int | v92 | ✅ | Recipe category for UI organization |
subFatiguePoint | int | v92 | ✅ | Fatigue points consumed when using this recipe |
addOnSuccessProf | int | v92 | ✅ | Skill proficiency points gained on successful crafting |
result | object | v92 | ❌ | Output configuration (what items are produced) |
materials | list | v92 | ❌ | Material requirements (max 7 entries) |
Result (Nested)
Section titled “Result (Nested)”Represents the output of a successful recipe execution.
| Property | Type | Since | Required | Description |
|---|---|---|---|---|
id | int | v92 | ✅ | Item template ID produced on normal success |
count | int | v92 | ✅ | Quantity of items produced on normal success |
criticalItemId | int | v92 | ❌ | Item template ID produced on critical success |
criticalItemCount | int | v92 | ❌ | Quantity of items produced on critical success |
Material (Nested)
Section titled “Material (Nested)”Represents a material requirement for the recipe. Maximum 7 materials per recipe.
| Property | Type | Since | Required | Description |
|---|---|---|---|---|
id | int | v92 | ✅ | Item template ID of the required material |
count | int | v92 | ✅ | Quantity of this material required |
Item (Inline Block)
Section titled “Item (Inline Block)”Defines a recipe item inline during create/upsert operations. When specified, automatically creates/updates the corresponding ItemTemplate entry with recipe-specific defaults.
Three-Tier Default System:
- Tier 1 (Hard Defaults): 39 attributes with 100% constant values (auto-applied, non-overridable). Includes critical discriminator
combatItemType: RECIPE. - Tier 2 (Soft Defaults): 13 attributes with high-frequency defaults (auto-applied, user-overridable). See properties marked with “(Tier 2 default)” below.
- Tier 3 (Required Input): 6 attributes users must provide.
Tier 3 - Required User Input:
| Property | Type | Since | Required | Description |
|---|---|---|---|---|
name | string | v92 | ✅ | Display name of the recipe item |
level | int | v92 | ✅ | Required level to use this recipe |
rareGrade | int | v92 | ✅ | Rarity grade: 0=Common, 1=Uncommon, 2=Rare, 3=Superior |
icon | string | v92 | ✅ | Icon asset path for the recipe item |
buyPrice | int | v92 | ✅ | Purchase price at NPC vendors |
sellPrice | int | v92 | ✅ | Sell price at NPC vendors |
Tier 2 - Optional Overrides (Defaults Applied if Omitted):
| Property | Type | Since | Default | Description |
|---|---|---|---|---|
category | string | v92 | "generalMaterial" | Item category. Common override: "recipe" for combat recipes. |
combatItemSubType | string | v92 | "generalMaterial" | Combat item subtype. Common override: "combatRecipe" for combat recipes. |
rank | int | v92 | 0 | Item rank for sorting/filtering |
requiredLevel | int | v92 | <level> | Required character level (defaults to recipe level) |
sortingNumber | int | v92 | 3 | UI sorting priority |
defaultValue | int | v92 | 561152 | Default item value (median from production data) |
dropType | int | v92 | 0 | Drop behavior: 0=Normal, 1=Special, 2=Rare |
maxDropUnit | int | v92 | 10 | Maximum units dropped at once |
tradable | boolean | v92 | true | Whether the recipe item can be traded. Override to false for bound recipes. |
warehouseStorable | boolean | v92 | true | Whether storable in personal warehouse |
guildWarehouseStorable | boolean | v92 | true | Whether storable in guild warehouse |
storeSellable | boolean | v92 | true | Whether sellable in player stores |
relocatable | boolean | v92 | true | Whether transferable across servers |
Tier 1 - Auto-Applied Hard Defaults (Non-Overridable):
39 attributes including combatItemType: RECIPE, boundType: None, boolean flags (artisanable, conversion, dismantlable, enchantEnable, etc.), numeric constants (maxStack=10, itemUseCount=1, etc.), and sound/asset paths. These are applied automatically and cannot be overridden.
XML Structure
Section titled “XML Structure”ItemProduceRecipe uses 2-level nesting:
<ItemProduceRecipe> <Recipe id="100001" recipeItemId="200001" obtainable="true" needSkillId="1" needGrade="1" needSkillProf="100" maxSkillProf="500" produceCriticalRate="0.15" exp="50" categoryId="10" subFatiguePoint="5" addOnSuccessProf="10"> <Result id="300001" count="5" criticalItemId="300002" criticalItemCount="10" /> <Materials> <Material id="400001" count="3" /> <Material id="400002" count="5" /> </Materials> </Recipe> <Recipe id="100002" recipeItemId="200002" obtainable="true" needSkillId="2" needGrade="1" needSkillProf="50" maxSkillProf="300" categoryId="15" subFatiguePoint="3" addOnSuccessProf="5"> <Result id="300003" count="1" /> <Materials> <Material id="400003" count="1" /> </Materials> </Recipe></ItemProduceRecipe>Structure:
Recipe: Identified byidResult: Single element within each RecipeMaterials/Material: List of material requirements (max 7)
Common Pitfalls
Section titled “Common Pitfalls”-
Inline Item vs RecipeItemId (Conflict Error E410): You cannot specify both
recipeItemIdanditem:block in the same operation. Choose one approach:- Use
item:block when creating a new recipe with a new recipe item (recommended, reduces authoring effort) - Use
recipeItemIdwhen referencing an existing ItemTemplate entry - Error message:
E410: Cannot specify both 'recipeItemId' and 'item' block at itemProduceRecipes.create[0]
- Use
-
Recipe Item ID Usage: The
recipeItemIdreferences an item inItemTemplate.xmlthat represents the recipe scroll or book. This is distinct from theresult.idwhich is the actual produced item. When using inlineitem:blocks, the system automatically setsrecipeItemId = id(recipe ID and item ID match). -
Inline Item Required Fields: When using the
item:block, all 6 Tier 3 fields are required:name,level,rareGrade,icon,buyPrice,sellPrice. Omitting any will cause aYamlParseException.MissingFielderror. -
RareGrade Range: The
rareGradefield in inline item blocks must be 0-3 (0=Common, 1=Uncommon, 2=Rare, 3=Superior). Other values will cause anInvalidEnumerror. -
Three-Tier Default System: When using inline item blocks:
- Tier 1 (39 fields): Automatically applied, non-overridable (e.g.,
combatItemType: RECIPE) - Tier 2 (13 fields): Automatically applied with defaults, but user-overridable (e.g.,
category: "generalMaterial") - Tier 3 (6 fields): User must provide all required values
Total: 58 item attributes set with only 6 required user inputs (89% reduction in authoring effort).
- Tier 1 (39 fields): Automatically applied, non-overridable (e.g.,
-
Tier 2 Overrides for Combat Recipes: For combat-related recipes (weapon/armor), override Tier 2 defaults:
item:# Required Tier 3 fields...category: "recipe" # Override default "generalMaterial"combatItemSubType: "combatRecipe" # Override default "generalMaterial" -
Required Attributes: When creating recipes with
recipeItemId(traditional approach),id,recipeItemId,obtainable,needSkillId,needGrade,needSkillProf,maxSkillProf,categoryId,subFatiguePoint, andaddOnSuccessProfare all required. When using inlineitem:blocks,recipeItemIdis automatically set and should not be specified. -
Result Element Required: While the
resultproperty is marked as optional in the schema, in practice most recipes require a result configuration to define what is produced. Create operations should include result data. -
Material Limit: Each recipe can contain at most 7 material entries. Exceeding this limit will cause validation errors against the XSD schema.
-
Critical Rate Range: If specified,
produceCriticalRatemust be a decimal value between 0.0 and 1.0 inclusive. Values like 15 (instead of 0.15) will be interpreted incorrectly. -
Experience as String: The
expfield is a string type, not an integer. This allows for formula expressions in some implementations. Numeric values should still be quoted:exp: "100". -
Partial Updates on Nested Elements: When updating a recipe, you can partially update the
resultby specifying only the fields you want to change (e.g., justcount). However, updatingmaterialsreplaces the entire materials list. -
Upsert Replaces Materials: The
upsertoperation replaces the entire recipe, including all material requirements. If materials are specified in an upsert, they completely replace any existing materials. To preserve existing materials while updating other fields, use theupdateoperation instead. -
Skill Proficiency Bounds: The
needSkillProfvalue should be less than or equal tomaxSkillProf. Recipes whereneedSkillProf > maxSkillProfmay behave unexpectedly in the game logic.