diff --git a/db/import-tmpl/produce_db.yml b/db/import-tmpl/produce_db.yml new file mode 100644 index 0000000000..3e9449052c --- /dev/null +++ b/db/import-tmpl/produce_db.yml @@ -0,0 +1,49 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 diff --git a/db/import-tmpl/skill_changematerial_db.txt b/db/import-tmpl/skill_changematerial_db.txt deleted file mode 100644 index 981c689b95..0000000000 --- a/db/import-tmpl/skill_changematerial_db.txt +++ /dev/null @@ -1,11 +0,0 @@ -// Change Material Database -// -// Structure of Database: -// ID,ProductID,BaseRate,MakeAmount1,MakeAmountRate1...,MakeAmount5,MakeAmountRate5 -// -// NOTE: -// - ID is used to identify item order that will be used for overwriting on db/import. -// Value is started from 0 until 74 (MAX_SKILL_CHANGEMATERIAL_DB-1). Use same ID on import file to overwrite original result & requirements -// - Up to 5 ID/Amount pairs can be specified. -// - Rate = n/10% - diff --git a/db/pre-re/produce_db.yml b/db/pre-re/produce_db.yml new file mode 100644 index 0000000000..8c13d8f91c --- /dev/null +++ b/db/pre-re/produce_db.yml @@ -0,0 +1,54 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 + +Footer: + Imports: + - Path: db/pre-re/skill_produce_db.yml + - Path: db/pre-re/skill_changematerial_db.yml diff --git a/db/pre-re/skill_changematerial_db.yml b/db/pre-re/skill_changematerial_db.yml new file mode 100644 index 0000000000..540cb21dd1 --- /dev/null +++ b/db/pre-re/skill_changematerial_db.yml @@ -0,0 +1,45 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 diff --git a/db/pre-re/skill_produce_db.yml b/db/pre-re/skill_produce_db.yml new file mode 100644 index 0000000000..a2adc9a431 --- /dev/null +++ b/db/pre-re/skill_produce_db.yml @@ -0,0 +1,3009 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 + +Body: + - ItemLevel: 1 + Recipe: + - Product: Sword + SkillName: BS_SWORD + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 2 + - Product: Falchion + SkillName: BS_SWORD + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 30 + - Product: Blade + SkillName: BS_SWORD + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 45 + - Item: Tooth_Of_Bat + Amount: 25 + - Product: Knife + SkillName: BS_DAGGER + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 1 + - Item: Jellopy + Amount: 10 + - Product: Cutter + SkillName: BS_DAGGER + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 25 + - Product: Main_Gauche + SkillName: BS_DAGGER + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 50 + - Product: Katana + SkillName: BS_TWOHANDSWORD + SkillLevel: 1 + Consumed: + - Item: Horrendous_Mouth + Amount: 15 + - Item: Iron + Amount: 35 + - Product: Axe + SkillName: BS_AXE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 10 + - Product: Battle_Axe + SkillName: BS_AXE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 110 + - Product: Club + SkillName: BS_MACE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 3 + - Product: Mace + SkillName: BS_MACE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 30 + - Product: Waghnakh + SkillName: BS_KNUCKLE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 160 + - Item: Scarlet_Jewel + Amount: 1 + - Product: Javelin + SkillName: BS_SPEAR + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 3 + - Product: Spear + SkillName: BS_SPEAR + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 35 + - Product: Pike + SkillName: BS_SPEAR + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 70 + - ItemLevel: 2 + Recipe: + - Product: Lapier + SkillName: BS_SWORD + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 20 + - Product: Scimiter + SkillName: BS_SWORD + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 35 + - Product: Ring_Pommel_Saber + SkillName: BS_SWORD + SkillLevel: 2 + Consumed: + - Item: Claw_Of_Wolves + Amount: 50 + - Item: Steel + Amount: 40 + - Product: Dirk + SkillName: BS_DAGGER + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 17 + - Product: Dagger + SkillName: BS_DAGGER + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 30 + - Product: Stiletto + SkillName: BS_DAGGER + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 40 + - Product: Slayer + SkillName: BS_TWOHANDSWORD + SkillLevel: 2 + Consumed: + - Item: Decayed_Nail + Amount: 20 + - Item: Steel + Amount: 25 + - Product: Bastard_Sword + SkillName: BS_TWOHANDSWORD + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 45 + - Product: Hammer + SkillName: BS_AXE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 30 + - Product: Smasher + SkillName: BS_MACE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 20 + - Product: Flail + SkillName: BS_MACE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 33 + - Product: Chain + SkillName: BS_MACE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 45 + - Product: Knuckle_Duster + SkillName: BS_KNUCKLE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 50 + - Product: Hora + SkillName: BS_KNUCKLE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 65 + - Product: Guisarme + SkillName: BS_SPEAR + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 25 + - Product: Glaive + SkillName: BS_SPEAR + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 40 + - Product: Partizan + SkillName: BS_SPEAR + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 55 + - ItemLevel: 3 + Recipe: + - Product: Saber + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 5 + - Item: White_Jewel + Amount: 1 + - Product: Haedonggum + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Golden_Jewel + Amount: 1 + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 10 + - Product: Tsurugi + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Dark_Red_Jewel + Amount: 1 + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 15 + - Product: Flamberge + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Cardinal_Jewel_ + Amount: 1 + - Item: Oridecon + Amount: 16 + - Product: Gladius + SkillName: BS_DAGGER + SkillLevel: 3 + Consumed: + - Item: Blue_Jewel + Amount: 1 + - Item: Oridecon + Amount: 4 + - Item: Steel + Amount: 40 + - Product: Damascus + SkillName: BS_DAGGER + SkillLevel: 3 + Consumed: + - Item: Bluish_Green_Jewel + Amount: 1 + - Item: Oridecon + Amount: 4 + - Item: Steel + Amount: 60 + - Product: Two_Hand_Sword + SkillName: BS_TWOHANDSWORD + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 12 + - Item: Steel + Amount: 10 + - Product: Broad_Sword + SkillName: BS_TWOHANDSWORD + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 12 + - Item: Steel + Amount: 20 + - Product: Claymore + SkillName: BS_TWOHANDSWORD + SkillLevel: 3 + Consumed: + - Item: Crystal_Jewel___ + Amount: 1 + - Item: Oridecon + Amount: 16 + - Item: Steel + Amount: 20 + - Product: Buster + SkillName: BS_AXE + SkillLevel: 3 + Consumed: + - Item: Orcish_Cuspid + Amount: 30 + - Item: Oridecon + Amount: 4 + - Item: Steel + Amount: 20 + - Product: Two_Handed_Axe + SkillName: BS_AXE + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 10 + - Item: Violet_Jewel + Amount: 1 + - Product: Morning_Star + SkillName: BS_MACE + SkillLevel: 3 + Consumed: + - Item: Crystal_Jewel + Amount: 1 + - Item: Steel + Amount: 85 + - Product: Sword_Mace + SkillName: BS_MACE + SkillLevel: 3 + Consumed: + - Item: Sharp_Scale + Amount: 20 + - Item: Steel + Amount: 100 + - Product: Stunner + SkillName: BS_MACE + SkillLevel: 3 + Consumed: + - Item: Steel + Amount: 120 + - Item: Voucher_Of_Orcish_Hero + Amount: 1 + - Product: Fist + SkillName: BS_KNUCKLE + SkillLevel: 3 + Consumed: + - Item: Cardinal_Jewel + Amount: 10 + - Item: Oridecon + Amount: 4 + - Product: Claw + SkillName: BS_KNUCKLE + SkillLevel: 3 + Consumed: + - Item: Golden_Jewel + Amount: 10 + - Item: Oridecon + Amount: 8 + - Product: Finger + SkillName: BS_KNUCKLE + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 4 + - Item: White_Jewel + Amount: 10 + - Product: Trident + SkillName: BS_SPEAR + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 8 + - Item: Skyblue_Jewel + Amount: 5 + - Item: Steel + Amount: 10 + - Product: Halberd + SkillName: BS_SPEAR + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 12 + - Item: Steel + Amount: 10 + - Product: Lance + SkillName: BS_SPEAR + SkillLevel: 3 + Consumed: + - Item: Cardinal_Jewel + Amount: 3 + - Item: Evil_Horn + Amount: 2 + - Item: Oridecon + Amount: 12 + - ItemLevel: 11 + Recipe: + - Product: Str_Dish01 + Consumed: + - Item: Cooking_Oil + Amount: 1 + - Item: Grasshopper's_Leg + Amount: 5 + - Item: Old_Frying_Pan + Amount: 1 + NotConsumed: + - Item: Cookbook01 + - Product: Int_Dish01 + Consumed: + - Item: Grape + Amount: 3 + - Item: Red_Potion + Amount: 2 + NotConsumed: + - Item: Cookbook01 + - Product: Vit_Dish01 + Consumed: + - Item: Green_Herb + Amount: 10 + - Item: Nipper + Amount: 10 + - Item: Yellow_Potion + Amount: 1 + NotConsumed: + - Item: Cookbook01 + - Product: Agi_Dish01 + Consumed: + - Item: Chinese_Ink + Amount: 1 + - Item: Grain + Amount: 1 + - Item: Spawn + Amount: 10 + NotConsumed: + - Item: Cookbook01 + - Product: Dex_Dish01 + Consumed: + - Item: Grape + Amount: 2 + - Item: Honey + Amount: 1 + - Item: Red_Potion + Amount: 1 + NotConsumed: + - Item: Cookbook01 + - Product: Luk_Dish01 + Consumed: + - Item: Cooking_Oil + Amount: 1 + - Item: Old_Frying_Pan + Amount: 1 + - Item: Yoyo_Tail + Amount: 5 + NotConsumed: + - Item: Cookbook01 + - ItemLevel: 12 + Recipe: + - Product: Str_Dish02 + Consumed: + - Item: Green_Herb + Amount: 10 + - Item: Plain_Sauce + Amount: 1 + - Item: Sticky_Webfoot + Amount: 20 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook02 + - Product: Vit_Dish02 + Consumed: + - Item: Delicious_Fish + Amount: 1 + - Item: Fin + Amount: 5 + - Item: Flesh_Of_Clam + Amount: 10 + - Item: Gill + Amount: 5 + NotConsumed: + - Item: Cookbook02 + - Product: Int_Dish02 + Consumed: + - Item: Blue_Herb + Amount: 5 + - Item: Red_Herb + Amount: 10 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook02 + - Product: Agi_Dish02 + Consumed: + - Item: Carrot + Amount: 3 + - Item: Grain + Amount: 1 + - Item: Plain_Sauce + Amount: 1 + - Item: Pumpkin_Head + Amount: 5 + NotConsumed: + - Item: Cookbook02 + - Product: Dex_Dish02 + Consumed: + - Item: Cacao + Amount: 10 + - Item: Milk + Amount: 1 + - Item: Piece_Of_Cake + Amount: 1 + - Item: White_Platter + Amount: 1 + NotConsumed: + - Item: Cookbook02 + - Product: Luk_Dish02 + Consumed: + - Item: Apple_Juice + Amount: 3 + - Item: Carrot_Juice + Amount: 2 + - Item: Grape_Juice + Amount: 1 + - Item: Orange_Juice + Amount: 2 + NotConsumed: + - Item: Cookbook02 + - ItemLevel: 13 + Recipe: + - Product: Dex_Dish03 + Consumed: + - Item: Apple + Amount: 5 + - Item: Banana + Amount: 5 + - Item: Orange + Amount: 5 + - Item: Strawberry + Amount: 5 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Int_Dish03 + Consumed: + - Item: Honey + Amount: 2 + - Item: White_Herb + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Str_Dish03 + Consumed: + - Item: Chilli + Amount: 5 + - Item: Green_Herb + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Meat + Amount: 4 + - Item: Old_Frying_Pan + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Vit_Dish03 + Consumed: + - Item: Conch + Amount: 10 + - Item: Flesh_Of_Clam + Amount: 20 + - Item: Honey + Amount: 1 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Agi_Dish03 + Consumed: + - Item: Cheese + Amount: 10 + - Item: Nice_Sweet_Potato + Amount: 5 + - Item: Sweet_Sauce + Amount: 1 + - Item: Tentacle + Amount: 10 + NotConsumed: + - Item: Cookbook03 + - Product: Luk_Dish03 + Consumed: + - Item: Baked_Yam + Amount: 1 + - Item: Nice_Sweet_Potato + Amount: 10 + - Item: Sweet_Potato + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - ItemLevel: 14 + Recipe: + - Product: Int_Dish04 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Grape + Amount: 5 + - Item: Lemon + Amount: 4 + - Item: Orange + Amount: 10 + - Item: Strawberry + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Vit_Dish04 + Consumed: + - Item: Chinese_Ink + Amount: 20 + - Item: Old_Frying_Pan + Amount: 1 + - Item: Soft_Leaf + Amount: 10 + - Item: Tentacle + Amount: 30 + - Item: White_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Str_Dish04 + Consumed: + - Item: Green_Herb + Amount: 3 + - Item: Lemon + Amount: 1 + - Item: Meat + Amount: 5 + - Item: Red_Herb + Amount: 3 + - Item: Sweet_Sauce + Amount: 1 + - Item: Yellow_Herb + Amount: 2 + NotConsumed: + - Item: Cookbook04 + - Product: Dex_Dish04 + Consumed: + - Item: Bread + Amount: 5 + - Item: Cheese + Amount: 10 + - Item: Meat + Amount: 1 + - Item: Milk + Amount: 15 + - Item: Sweet_Sauce + Amount: 1 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Agi_Dish04 + Consumed: + - Item: Carrot + Amount: 10 + - Item: Grain + Amount: 3 + - Item: Hot_Sauce + Amount: 1 + - Item: Ice_Piece + Amount: 10 + - Item: Pumpkin_Head + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Luk_Dish04 + Consumed: + - Item: Delicious_Fish + Amount: 5 + - Item: Lip_Of_Ancient_Fish + Amount: 10 + - Item: Raccoon_Leaf + Amount: 10 + - Item: Sweet_Sauce + Amount: 2 + - Item: White_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - ItemLevel: 15 + Recipe: + - Product: Int_Dish05 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Blue_Potion + Amount: 1 + - Item: Fruit_Of_Mastela + Amount: 4 + - Item: Lemon + Amount: 2 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook05 + - Product: Str_Dish05 + Consumed: + - Item: Carrot + Amount: 3 + - Item: Cooking_Oil + Amount: 1 + - Item: Grain + Amount: 1 + - Item: Honey + Amount: 2 + - Item: Sweet_Potato + Amount: 10 + NotConsumed: + - Item: Cookbook05 + - Product: Dex_Dish05 + Consumed: + - Item: Great_Leaf + Amount: 6 + - Item: Leaflet_Of_Aloe + Amount: 3 + - Item: Leaflet_Of_Hinal + Amount: 2 + - Item: Sharp_Leaf + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook05 + - Product: Agi_Dish05 + Consumed: + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Pot + Amount: 1 + - Item: Pumpkin_Head + Amount: 20 + - Item: Red_Herb + Amount: 10 + - Item: Wing_Of_Red_Bat + Amount: 20 + NotConsumed: + - Item: Cookbook05 + - Product: Vit_Dish05 + Consumed: + - Item: Bun + Amount: 20 + - Item: Green_Herb + Amount: 20 + - Item: Hot_Sauce + Amount: 1 + - Item: Red_Spice + Amount: 1 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook05 + - Product: Luk_Dish05 + Consumed: + - Item: Cooking_Oil + Amount: 1 + - Item: Great_Leaf + Amount: 10 + - Item: Old_Frying_Pan + Amount: 2 + - Item: Scorpion's_Tail + Amount: 20 + - Item: Short_Leg + Amount: 10 + NotConsumed: + - Item: Cookbook05 + - ItemLevel: 16 + Recipe: + - Product: Str_Dish06 + Consumed: + - Item: Fruit_Of_Mastela + Amount: 1 + - Item: Honey + Amount: 2 + - Item: Meat + Amount: 10 + - Item: Shining_Scales + Amount: 20 + - Item: Yellow_Herb + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Int_Dish06 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Grape_Juice + Amount: 3 + - Item: Mushroom + Amount: 3 + - Item: Mushroom_Spore + Amount: 20 + - Item: Red_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Dex_Dish06 + Consumed: + - Item: Cheese + Amount: 10 + - Item: Hard_Peach + Amount: 20 + - Item: Milk + Amount: 10 + - Item: Orange_Juice + Amount: 5 + - Item: Piece_Of_Cake + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Agi_Dish06 + Consumed: + - Item: Chilli + Amount: 20 + - Item: Lemon + Amount: 20 + - Item: Prawn + Amount: 20 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Vit_Dish06 + Consumed: + - Item: Browny_Root + Amount: 20 + - Item: Honey + Amount: 2 + - Item: Mushroom + Amount: 1 + - Item: Mushroom_Spore + Amount: 20 + - Item: Root_Of_Maneater + Amount: 10 + NotConsumed: + - Item: Cookbook06 + - Product: Luk_Dish06 + Consumed: + - Item: Aloe + Amount: 1 + - Item: Clover + Amount: 10 + - Item: Reptile_Tongue + Amount: 5 + - Item: Starsand_Of_Witch + Amount: 10 + - Item: Thin_N'_Long_Tongue + Amount: 5 + NotConsumed: + - Item: Cookbook06 + - ItemLevel: 17 + Recipe: + - Product: Str_Dish07 + Consumed: + - Item: Coal + Amount: 2 + - Item: Hot_Sauce + Amount: 1 + - Item: Live_Coal + Amount: 1 + - Item: Meat + Amount: 10 + - Item: White_Herb + Amount: 10 + - Item: Wooden_Block + Amount: 15 + NotConsumed: + - Item: Cookbook07 + - Product: Int_Dish07 + Consumed: + - Item: Honey + Amount: 2 + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Royal_Jelly + Amount: 4 + - Item: White_Herb + Amount: 5 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook07 + - Product: Dex_Dish07 + Consumed: + - Item: Amulet + Amount: 5 + - Item: Bread + Amount: 10 + - Item: Fruit_Of_Mastela + Amount: 5 + - Item: Ment + Amount: 5 + - Item: Sweet_Sauce + Amount: 1 + - Item: Unripe_Apple + Amount: 2 + NotConsumed: + - Item: Cookbook07 + - Product: Agi_Dish07 + Consumed: + - Item: Anolian_Skin + Amount: 10 + - Item: Carrot + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 10 + - Item: Pumpkin_Head + Amount: 10 + - Item: Yellow_Herb + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook07 + - Product: Vit_Dish07 + Consumed: + - Item: Delicious_Fish + Amount: 2 + - Item: Fish_Tail + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 5 + - Item: Pet_Food + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + - Item: Wild_Boar's_Mane + Amount: 10 + NotConsumed: + - Item: Cookbook07 + - Product: Luk_Dish07 + Consumed: + - Item: Flesh_Of_Clam + Amount: 10 + - Item: Gill + Amount: 5 + - Item: Meat + Amount: 5 + - Item: Mushroom + Amount: 10 + - Item: Scales_Shell + Amount: 10 + - Item: Soft_Leaf + Amount: 10 + NotConsumed: + - Item: Cookbook07 + - ItemLevel: 18 + Recipe: + - Product: Str_Dish08 + Consumed: + - Item: Bear's_Foot + Amount: 20 + - Item: Carrot + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 2 + - Item: Leaflet_Of_Hinal + Amount: 1 + - Item: Plain_Sauce + Amount: 1 + - Item: Pumpkin_Head + Amount: 10 + NotConsumed: + - Item: Cookbook08 + - Product: Int_Dish08 + Consumed: + - Item: Leaf_Of_Yggdrasil + Amount: 3 + - Item: Leaflet_Of_Aloe + Amount: 10 + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Prickly_Fruit + Amount: 4 + - Item: Royal_Jelly + Amount: 6 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook08 + - Product: Dex_Dish08 + Consumed: + - Item: Bread + Amount: 10 + - Item: Cheese + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Meat + Amount: 5 + - Item: Royal_Jelly + Amount: 2 + - Item: Strawberry + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook08 + - Product: Agi_Dish08 + Consumed: + - Item: Aloebera + Amount: 1 + - Item: Carrot + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Meat + Amount: 10 + - Item: Pumpkin_Head + Amount: 10 + NotConsumed: + - Item: Cookbook08 + - Product: Vit_Dish08 + Consumed: + - Item: Grain + Amount: 2 + - Item: Leaf_Clothes + Amount: 20 + - Item: Meat + Amount: 20 + - Item: Plain_Sauce + Amount: 1 + - Item: Pumpkin_Head + Amount: 10 + - Item: Rainbow_Carrot + Amount: 5 + NotConsumed: + - Item: Cookbook08 + - Product: Luk_Dish08 + Consumed: + - Item: Grain + Amount: 5 + - Item: Leaf_Clothes + Amount: 10 + - Item: Plain_Sauce + Amount: 1 + - Item: Red_Spice + Amount: 2 + - Item: Strawberry + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook08 + - ItemLevel: 19 + Recipe: + - Product: Str_Dish09 + Consumed: + - Item: Cheese + Amount: 10 + - Item: Chinese_Ink + Amount: 10 + - Item: Coal + Amount: 2 + - Item: Green_Herb + Amount: 30 + - Item: Hot_Sauce + Amount: 1 + - Item: Pot + Amount: 1 + - Item: Tendon + Amount: 40 + NotConsumed: + - Item: Cookbook09 + - Product: Int_Dish09 + Consumed: + - Item: Alchol + Amount: 5 + - Item: Blue_Potion + Amount: 2 + - Item: Leaf_Of_Yggdrasil + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 10 + - Item: Orange + Amount: 10 + - Item: Royal_Jelly + Amount: 4 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook09 + - Product: Dex_Dish09 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Grape_Juice + Amount: 5 + - Item: Orange + Amount: 10 + - Item: Red_Spice + Amount: 1 + - Item: Strawberry + Amount: 10 + - Item: Tropical_Banana + Amount: 1 + - Item: Unripe_Apple + Amount: 5 + NotConsumed: + - Item: Cookbook09 + - Product: Agi_Dish09 + Consumed: + - Item: Meat + Amount: 10 + - Item: Plain_Sauce + Amount: 4 + - Item: Red_Herb + Amount: 5 + - Item: Royal_Jelly + Amount: 5 + - Item: Shoot + Amount: 20 + - Item: White_Herb + Amount: 10 + - Item: Yellow_Herb + Amount: 5 + NotConsumed: + - Item: Cookbook09 + - Product: Vit_Dish09 + Consumed: + - Item: Dragon's_Skin + Amount: 10 + - Item: Dragon_Train + Amount: 20 + - Item: Fatty_Chubby_Earthworm + Amount: 1 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaf_Of_Yggdrasil + Amount: 3 + - Item: Red_Spice + Amount: 1 + - Item: Royal_Jelly + Amount: 6 + NotConsumed: + - Item: Cookbook09 + - Product: Luk_Dish09 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Aloebera + Amount: 2 + - Item: Animal_Blood + Amount: 1 + - Item: Anodyne + Amount: 2 + - Item: Apple_Juice + Amount: 10 + - Item: Red_Spice + Amount: 1 + - Item: Royal_Jelly + Amount: 6 + NotConsumed: + - Item: Cookbook09 + - ItemLevel: 20 + Recipe: + - Product: Str_Dish10 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Aloebera + Amount: 2 + - Item: Blue_Potion + Amount: 2 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaf_Of_Yggdrasil + Amount: 10 + - Item: Pot + Amount: 1 + - Item: Royal_Jelly + Amount: 5 + - Item: Thin_N'_Long_Tongue + Amount: 20 + NotConsumed: + - Item: Cookbook10 + - Product: Int_Dish10 + Consumed: + - Item: Blue_Herb + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 5 + - Item: Lemon + Amount: 5 + - Item: Prickly_Fruit + Amount: 5 + - Item: Root_Of_Maneater + Amount: 10 + - Item: Royal_Jelly + Amount: 5 + - Item: Singing_Plant + Amount: 1 + - Item: Yggdrasilberry + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - Product: Dex_Dish10 + Consumed: + - Item: Alchol + Amount: 5 + - Item: Center_Potion + Amount: 3 + - Item: Ice_Piece + Amount: 10 + - Item: Illusion_Flower + Amount: 1 + - Item: Prickly_Fruit + Amount: 2 + - Item: Royal_Jelly + Amount: 4 + - Item: Spawns + Amount: 10 + - Item: Yggdrasilberry + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - Product: Agi_Dish10 + Consumed: + - Item: Aloebera + Amount: 2 + - Item: Bitter_Herb + Amount: 3 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaf_Of_Yggdrasil + Amount: 3 + - Item: Pot + Amount: 1 + - Item: Royal_Jelly + Amount: 10 + - Item: Scorpion's_Tail + Amount: 20 + - Item: Scropion's_Nipper + Amount: 20 + NotConsumed: + - Item: Cookbook10 + - Product: Vit_Dish10 + Consumed: + - Item: Amulet + Amount: 10 + - Item: Anodyne + Amount: 2 + - Item: Bitter_Herb + Amount: 2 + - Item: Heart_Of_Mermaid + Amount: 10 + - Item: Hot_Sauce + Amount: 2 + - Item: Immortal_Heart + Amount: 20 + - Item: Mementos + Amount: 10 + - Item: Seed_Of_Yggdrasil + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - Product: Luk_Dish10 + Consumed: + - Item: Four_Leaf_Clover + Amount: 2 + - Item: Fox_Tail + Amount: 10 + - Item: Izidor + Amount: 2 + - Item: Leaf_Of_Yggdrasil + Amount: 4 + - Item: Plain_Sauce + Amount: 1 + - Item: Root_Of_Maneater + Amount: 10 + - Item: Sharp_Leaf + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - ItemLevel: 21 + Recipe: + - Product: Iron + SkillName: BS_IRON + SkillLevel: 1 + Consumed: + - Item: Iron_Ore + Amount: 1 + - Product: Steel + SkillName: BS_STEEL + SkillLevel: 1 + Consumed: + - Item: Coal + Amount: 1 + - Item: Iron + Amount: 5 + - Product: Star_Crumb + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Sparkling_Dust + Amount: 10 + - Product: Flame_Heart + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Boody_Red + Amount: 10 + - Product: Mistic_Frozen + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Crystal_Blue + Amount: 10 + - Product: Great_Nature + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Yellow_Live + Amount: 10 + - Product: Rough_Wind + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Wind_Of_Verdure + Amount: 10 + - ItemLevel: 22 + Recipe: + - Product: Red_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Red_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Yellow_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Yellow_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: White_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: White_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Blue_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 1 + - Item: Empty_Potion + Amount: 1 + - Item: Scell + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Red_Slim_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Cactus_Needle + Amount: 1 + - Item: Empty_Cylinder + Amount: 1 + - Item: Red_Potion + Amount: 1 + NotConsumed: + - Item: Slim_Potion_Create_Book + - Product: Yellow_Slim_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 1 + - Item: Moustache_Of_Mole + Amount: 1 + - Item: Yellow_Potion + Amount: 1 + NotConsumed: + - Item: Slim_Potion_Create_Book + - Product: White_Slim_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 1 + - Item: Starsand_Of_Witch + Amount: 1 + - Item: White_Potion + Amount: 1 + NotConsumed: + - Item: Slim_Potion_Create_Book + - Product: Holy_Water + SkillName: AL_HOLYWATER + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Product: Poison_Bottle + SkillName: ASC_CDP + SkillLevel: 1 + Consumed: + - Item: Bee_Sting + Amount: 1 + - Item: Berserk_Potion + Amount: 1 + - Item: Cactus_Needle + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Karvodailnirol + Amount: 1 + - Item: Poison_Spore + Amount: 1 + - Item: Posionous_Canine + Amount: 1 + - Product: Fire_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Transparent_Cloth + Amount: 1 + NotConsumed: + - Item: FireBottle_Create_Book + - Product: Acid_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Item: Immortal_Heart + Amount: 1 + NotConsumed: + - Item: Acid_Create_Book + - Product: MenEater_Plant_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blossom_Of_Maneater + Amount: 2 + - Item: Empty_Bottle + Amount: 1 + NotConsumed: + - Item: Plant_Create_Book + - Product: Mini_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Detonator + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Tendon + Amount: 1 + NotConsumed: + - Item: Mine_Create_Book + - Product: Coating_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Heart_Of_Mermaid + Amount: 1 + - Item: Tooth_Of_ + Amount: 1 + NotConsumed: + - Item: Coating_Create_Book + - Product: Resist_Fire + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Lizard_Scruff + Amount: 2 + - Item: Red_Gemstone + Amount: 1 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Resist_Water + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Gemstone + Amount: 1 + - Item: Empty_Potion + Amount: 1 + - Item: Heart_Of_Mermaid + Amount: 3 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Resist_Earth + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Large_Jellopy + Amount: 2 + - Item: Yellow_Gemstone + Amount: 1 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Resist_Wind + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Gemstone + Amount: 1 + - Item: Empty_Potion + Amount: 1 + - Item: Moth_Dust + Amount: 3 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Anodyne + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Ment + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Aloebera + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Aloe + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Honey + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Alchol + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Item: Empty_Cylinder + Amount: 1 + - Item: Poison_Spore + Amount: 5 + - Item: Stem + Amount: 5 + NotConsumed: + - Item: Alcol_Create_Book + - Product: Germination_Breed + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Life_Force_Pot + Amount: 1 + - Item: Seed_Of_Life + Amount: 1 + - Item: Yggdrasilberry_Dew + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - ItemLevel: 23 + Recipe: + - Product: Elemental_Fire + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Scorpion's_Tail + Amount: 3 + - Item: Scroll + Amount: 1 + - Product: Elemental_Water + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Scroll + Amount: 1 + - Item: Snail's_Shell + Amount: 3 + - Product: Elemental_Earth + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Horn + Amount: 3 + - Item: Scroll + Amount: 1 + - Product: Elemental_Wind + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Colorful_Shell + Amount: 3 + - Item: Scroll + Amount: 1 + - ItemLevel: 24 + Recipe: + - Product: Ansila + SkillName: AB_ANCILLA + SkillLevel: 1 + Consumed: + - Item: Blue_Gemstone + Amount: 1 + - Product: Runstone_Nosiege + SkillName: RK_RUNEMASTERY + SkillLevel: 8 + Consumed: + - Item: Broken_Armor_Piece + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Old_Magic_Circle + Amount: 1 + - Product: Runstone_Rhydo + SkillName: RK_RUNEMASTERY + SkillLevel: 7 + Consumed: + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Red_Gemstone + Amount: 1 + - Product: Runstone_Verkana + SkillName: RK_RUNEMASTERY + SkillLevel: 9 + Consumed: + - Item: Dullahan_Armor + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Product: Runstone_Isia + SkillName: RK_RUNEMASTERY + SkillLevel: 2 + Consumed: + - Item: Burning_Heart + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Product: Runstone_Asir + SkillName: RK_RUNEMASTERY + SkillLevel: 5 + Consumed: + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Ogre_Tooth + Amount: 1 + - Product: Runstone_Urj + SkillName: RK_RUNEMASTERY + SkillLevel: 6 + Consumed: + - Item: Elder_Branch + Amount: 1 + - Item: Honey + Amount: 1 + - Item: Slender_Snake + Amount: 1 + - Product: Runstone_Turisus + SkillName: RK_RUNEMASTERY + SkillLevel: 1 + Consumed: + - Item: Claw_Of_Desert_Wolf + Amount: 1 + - Item: Cobold_Hair + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Product: Runstone_Pertz + SkillName: RK_RUNEMASTERY + SkillLevel: 3 + Consumed: + - Item: Dragon_Canine + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Tangled_Chain + Amount: 1 + - Product: Runstone_Hagalas + SkillName: RK_RUNEMASTERY + SkillLevel: 4 + Consumed: + - Item: Dragon's_Skin + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Item: Round_Shell + Amount: 1 + - ItemLevel: 25 + Recipe: + - Product: Guillotine_Antidote + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 5 + Consumed: + - Item: Blue_Herb + Amount: 1 + - Item: Green_Herb + Amount: 2 + - Item: White_Herb + Amount: 1 + - Product: Poison_Paralysis + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 1 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Amoena + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Poison_Toad's_Skin + Amount: 20 + - Product: Poison_Leech + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 4 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Nerium + Amount: 1 + - Item: Poison_Herb_Scopolia + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Oblivion + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 9 + Consumed: + - Item: Heart_Of_Mermaid + Amount: 10 + - Item: Izidor + Amount: 1 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Contamination + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 3 + Consumed: + - Item: Decayed_Nail + Amount: 25 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Seratum + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Numb + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 8 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Nerium + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Sticky_Poison + Amount: 10 + - Product: Poison_Fever + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 2 + Consumed: + - Item: Anolian_Skin + Amount: 20 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Rantana + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Laughing + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 7 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Makulata + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Poison_Spore + Amount: 10 + - Product: Poison_Fatigue + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 6 + Consumed: + - Item: Izidor + Amount: 1 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Sticky_Poison + Amount: 10 + - ItemLevel: 26 + Recipe: + - Product: Sacred_Masque + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Grasshopper's_Leg + Amount: 45 + - Item: Yoyo_Tail + Amount: 35 + - Product: Long_Hair + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Pencil_Case + Amount: 40 + - Item: Tiger's_Skin + Amount: 5 + - Product: Phracon + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Glass_Bead + Amount: 40 + - Item: Spawn + Amount: 45 + - Product: Lantern + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Blossom_Of_Maneater + Amount: 20 + - Item: Solid_Shell + Amount: 10 + - Product: Acorn + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Cactus_Needle + Amount: 30 + - Item: Snail's_Shell + Amount: 10 + - Product: Frozen_Heart + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Moth_Dust + Amount: 35 + - Item: Raccoondog_Doll + Amount: 25 + - Product: Horrendous_Mouth + BaseRate: 800 + Make: + - Amount: 9 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Dragon_Scale + Amount: 45 + - Item: Stem + Amount: 45 + - Product: Detrimindexta + BaseRate: 800 + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Chrysalis + Amount: 40 + - Item: Flesh_Of_Clam + Amount: 10 + - Product: Detonator + BaseRate: 800 + Make: + - Amount: 7 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Feather_Of_Birds + Amount: 25 + - Item: Nose_Ring + Amount: 45 + - Product: Tweezer + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Monkey_Doll + Amount: 5 + - Item: Worm_Peelings + Amount: 40 + - Product: Petite_DiablOfs_Horn + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Resin + Amount: 10 + - Item: Stone_Heart + Amount: 5 + - Product: Root_Of_Maneater + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Talon + Amount: 25 + - Item: Tooth_Of_ + Amount: 20 + - Product: Conch + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Gill + Amount: 5 + - Item: Immortal_Heart + Amount: 25 + - Product: Rotten_Scale + BaseRate: 800 + Make: + - Amount: 7 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Shell + Amount: 20 + - Item: Thin_N'_Long_Tongue + Amount: 50 + - Product: Elder_Pixie's_Beard + Make: + - Amount: 8 + Rate: 800 + - Amount: 12 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bee_Sting + Amount: 35 + - Item: Petite_DiablOfs_Wing + Amount: 45 + - Product: Lizard_Scruff + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Karvodailnirol + Amount: 15 + - Item: Scale_Of_Snakes + Amount: 20 + - Product: Emveretarcon + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Grasshopper_Doll + Amount: 40 + - Item: Heart_Of_Mermaid + Amount: 5 + - Product: Chinese_Ink + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bear's_Foot + Amount: 20 + - Item: Black_Ladle + Amount: 25 + - Product: Spiderweb + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Fin + Amount: 50 + - Item: Slender_Snake + Amount: 35 + - Product: Reins + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Chonchon_Doll + Amount: 30 + - Item: Stuffed_Doll + Amount: 50 + - Product: Wooden_Block + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Rotten_Bandage + Amount: 10 + - Item: Single_Cell + Amount: 10 + - Product: Tentacle + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Decayed_Nail + Amount: 40 + - Item: Wild_Boar's_Mane + Amount: 5 + - Product: Mixture + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Posionous_Canine + Amount: 15 + - Item: Powder_Of_Butterfly + Amount: 30 + - Product: Colorful_Shell + Make: + - Amount: 9 + Rate: 800 + - Amount: 13 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Horn + Amount: 50 + - Item: Zargon + Amount: 45 + - Product: Wing_Of_Moth + BaseRate: 800 + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Frozen_Rose + Amount: 20 + - Item: Reptile_Tongue + Amount: 30 + - Product: Nipper + Make: + - Amount: 6 + Rate: 800 + - Amount: 9 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Earthworm_Peeling + Amount: 40 + - Item: Sticky_Mucus + Amount: 25 + - Product: Turtle_Shell + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Fluff + Amount: 5 + - Item: Poring_Doll + Amount: 40 + - Product: Nail_Of_Orc + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Garlet + Amount: 10 + - Item: Raccoon_Leaf + Amount: 50 + - Product: Dragon_Canine + Make: + - Amount: 8 + Rate: 800 + - Amount: 12 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Osiris_Doll + Amount: 50 + - Item: Sticky_Webfoot + Amount: 35 + - Product: Skirt_Of_Virgin + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Head_Of_Medusa + Amount: 35 + - Item: Scales_Shell + Amount: 30 + - Product: Dragon_Train + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Sharpened_Cuspid + Amount: 35 + - Item: Tooth_Of_Bat + Amount: 25 + - Product: Dokkaebi_Horn + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Lip_Of_Ancient_Fish + Amount: 25 + - Item: Shining_Scales + Amount: 15 + - Product: Grit + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Crystal_Mirror + Amount: 35 + - Item: Limb_Of_Mantis + Amount: 50 + - Product: Sharp_Scale + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Clam_Shell + Amount: 20 + - Item: Horseshoe + Amount: 10 + - Product: Short_Leg + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Claw_Of_Wolves + Amount: 20 + - Item: Scell + Amount: 45 + - Product: Starsand_Of_Witch + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Blue_Porcelain + Amount: 15 + - Item: Insect_Feeler + Amount: 10 + - Product: Fox_Tail + Make: + - Amount: 2 + Rate: 800 + - Amount: 3 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Animal's_Skin + Amount: 10 + - Item: Rouge + Amount: 15 + - Product: Cobold_Hair + Make: + - Amount: 6 + Rate: 800 + - Amount: 9 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Jellopy + Amount: 45 + - Item: Wedding_Bouquet + Amount: 20 + - Product: Jaws_Of_Ant + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Spore_Doll + Amount: 20 + - Item: Witherless_Rose + Amount: 20 + - Product: Voucher_Of_Orcish_Hero + BaseRate: 800 + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Nail_Of_Mole + Amount: 45 + - Item: Tree_Root + Amount: 5 + - Product: Sacred_Marks + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Pumpkin_Head + Amount: 30 + - Item: Scorpion's_Tail + Amount: 10 + - Product: Alchol + BaseRate: 800 + Make: + - Amount: 9 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Orcish_Voucher + Amount: 50 + - Item: Skel_Bone + Amount: 40 + - Product: Crap_Shell + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Baphomet_Doll + Amount: 50 + - Item: Fish_Tail + Amount: 30 + - Product: Tendon + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Feather + Amount: 5 + - Item: Orcish_Cuspid + Amount: 25 + - Product: Tiger_Footskin + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Pointed_Scale + Amount: 5 + - Item: White_Platter + Amount: 20 + - Product: Hinalle + Make: + - Amount: 2 + Rate: 200 + - Amount: 4 + Rate: 800 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bunch_Of_Flowers + Amount: 45 + - Item: Moustache_Of_Mole + Amount: 40 + - Product: Counteragent + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Evil_Horn + Amount: 15 + - Item: Mementos + Amount: 30 + - Product: Tooth_Of_Ancient_Fish + Make: + - Amount: 6 + Rate: 800 + - Amount: 9 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bill_Of_Birds + Amount: 35 + - Item: Transparent_Cloth + Amount: 30 + - Product: Rat_Tail + Make: + - Amount: 7 + Rate: 800 + - Amount: 10 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Golden_Hair + Amount: 40 + - Item: Mushroom_Spore + Amount: 35 + - Product: Coal + BaseRate: 500 + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Guard + Amount: 1 + - Product: Steel + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Tsurugi + Amount: 1 + - Product: Cigar + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Orcish_Axe + Amount: 1 + - Product: Bone_Wand + BaseRate: 200 + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Broken_Farming_Utensil + Amount: 100 + - Item: Clattering_Skull + Amount: 100 + - Product: Cigar + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Orcish_Axe + Amount: 1 + - Item: Orcish_Voucher + Amount: 100 + - Product: Starsand_Of_Witch + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Moth_Dust + Amount: 100 + - Item: Scell + Amount: 100 + - Product: Soft_Feather + Make: + - Amount: 1 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Feather + Amount: 30 + - Item: Feather_Of_Birds + Amount: 30 + - Product: Wind_Of_Verdure + Make: + - Amount: 1 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Ice_Piece + Amount: 100 + - Product: Crystal_Blue + Make: + - Amount: 1 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Claw_Of_Wolves + Amount: 100 + - Product: Soft_Silk_Cloth + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Transparent_Cloth + Amount: 10 + - Product: Transparent_Cloth + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Soft_Silk_Cloth + Amount: 2 + - Product: Boost500_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Boost500 + Amount: 10 + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Product: Full_SwingK_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Item: Full_SwingK + Amount: 10 + - Product: Mana_Plus_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Item: Mana_Plus + Amount: 10 + - Product: Cure_Free_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Cure_Free + Amount: 10 + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Product: Stamina_Up_M_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Item: Stamina_Up_M + Amount: 10 + - Product: Digestive_F_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Digestive_F + Amount: 10 + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Product: HP_Inc_PotS_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: HP_Increase_PotionS + Amount: 10 + - Product: HP_Inc_PotM_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: HP_Increase_PotionM + Amount: 10 + - Product: HP_Inc_PotL_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: HP_Increase_PotionL + Amount: 10 + - Product: SP_Inc_PotS_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: SP_Increase_PotionS + Amount: 10 + - Product: SP_Inc_PotM_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: SP_Increase_PotionM + Amount: 10 + - Product: SP_Inc_PotL_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: SP_Increase_PotionL + Amount: 10 + - Product: En_White_PotZ_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: Enrich_White_PotionZ + Amount: 10 + - Product: Vitata500_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: Vitata500 + Amount: 10 + - Product: En_Cel_Juice_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: Enrich_Celermine_Juice + Amount: 10 + - ItemLevel: 27 + Recipe: + - Product: Savage_BBQ + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Black_Charcoal + Amount: 1 + - Item: Cooking_Skewer + Amount: 1 + - Item: Melange_Pot + Amount: 1 + - Item: Savage_Meat + Amount: 1 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Wug_Blood_Cocktail + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Cold_Ice + Amount: 2 + - Item: Melange_Pot + Amount: 1 + - Item: Wolf_Blood + Amount: 3 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Minor_Brisket + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Beef_Head_Meat + Amount: 2 + - Item: Large_Cookpot + Amount: 1 + - Item: Melange_Pot + Amount: 1 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Siroma_Icetea + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Comodo_Tropic_Fruit + Amount: 1 + - Item: Ice_Crystal + Amount: 2 + - Item: Ice_Fragment + Amount: 3 + - Item: Melange_Pot + Amount: 1 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Drocera_Herb_Stew + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 3 + - Item: Drocera_Tentacle + Amount: 3 + - Item: Large_Cookpot + Amount: 1 + - Item: Melange_Pot + Amount: 1 + - Item: Red_Herb + Amount: 3 + - Item: White_Herb + Amount: 3 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Petti_Tail_Noodle + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Cool_Gravy + Amount: 1 + - Item: Fine_Noodle + Amount: 1 + - Item: Melange_Pot + Amount: 1 + - Item: Petti_Tail + Amount: 2 + NotConsumed: + - Item: Mix_Cook_Book + - ItemLevel: 29 + Recipe: + - Product: Seed_Of_Horny_Plant + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Prickly_Fruit + Amount: 10 + NotConsumed: + - Item: Plant_Genetic_Grow + - Product: Bloodsuck_Plant_Seed + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Root_Of_Maneater + Amount: 10 + NotConsumed: + - Item: Plant_Genetic_Grow + - Product: Bomb_Mushroom_Spore + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Gun_Powder + Amount: 2 + - Item: Mushroom_Spore + Amount: 10 + - Item: Poison_Spore + Amount: 5 + NotConsumed: + - Item: Plant_Genetic_Grow + - Product: HP_Increase_PotionS + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Monster's_Feed + Amount: 5 + - Item: White_Herb + Amount: 10 + NotConsumed: + - Item: Increase_Stamina_Study + - Product: HP_Increase_PotionM + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: White_Herb + Amount: 10 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Increase_Stamina_Study + - Product: HP_Increase_PotionL + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Fruit_Of_Mastela + Amount: 3 + - Item: Holy_Water + Amount: 1 + - Item: Hot_Sauce + Amount: 1 + - Item: White_Herb + Amount: 15 + NotConsumed: + - Item: Increase_Stamina_Study + - Product: SP_Increase_PotionS + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Grape + Amount: 10 + - Item: Lemon + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Vital_Drink_CB + - Product: SP_Increase_PotionM + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 10 + - Item: Empty_Bottle + Amount: 10 + - Item: Honey + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Vital_Drink_CB + - Product: SP_Increase_PotionL + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 15 + - Item: Empty_Bottle + Amount: 10 + - Item: Royal_Jelly + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Vital_Drink_CB + - Product: Enrich_White_PotionZ + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Cylinder + Amount: 10 + - Item: White_Herb + Amount: 10 + - Item: White_Potion + Amount: 20 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Vitata500 + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 10 + - Item: Empty_Cylinder + Amount: 10 + - Item: Grape + Amount: 10 + - Item: Honey + Amount: 10 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Enrich_Celermine_Juice + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Awakening_Potion + Amount: 5 + - Item: Center_Potion + Amount: 5 + - Item: Empty_Cylinder + Amount: 10 + - Item: Hot_Sauce + Amount: 5 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Cure_Free + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 10 + - Item: Fruit_Of_Mastela + Amount: 1 + - Item: Green_Herb + Amount: 20 + - Item: Leaf_Of_Yggdrasil + Amount: 1 + - Item: Panacea + Amount: 5 + NotConsumed: + - Item: Quality_Potion_Book diff --git a/db/produce_db.yml b/db/produce_db.yml new file mode 100644 index 0000000000..b4f4f049b2 --- /dev/null +++ b/db/produce_db.yml @@ -0,0 +1,57 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 + +Footer: + Imports: + - Path: db/pre-re/produce_db.yml + Mode: Prerenewal + - Path: db/re/produce_db.yml + Mode: Renewal + - Path: db/import/produce_db.yml diff --git a/db/re/produce_db.yml b/db/re/produce_db.yml new file mode 100644 index 0000000000..ab37f435e3 --- /dev/null +++ b/db/re/produce_db.yml @@ -0,0 +1,54 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 + +Footer: + Imports: + - Path: db/re/skill_produce_db.yml + - Path: db/re/skill_changematerial_db.yml diff --git a/db/re/skill_changematerial_db.yml b/db/re/skill_changematerial_db.yml new file mode 100644 index 0000000000..da4f43d2d4 --- /dev/null +++ b/db/re/skill_changematerial_db.yml @@ -0,0 +1,911 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# Skill: Skill requirement. (Default: null) +# Name Skill name required. +# Level Skill level required. +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 + +Body: + + - ItemLevel: 26 + Recipe: + - Product: Sacred_Masque + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Grasshopper's_Leg + Amount: 45 + - Item: Yoyo_Tail + Amount: 35 + - Product: Long_Hair + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Pencil_Case + Amount: 40 + - Item: Tiger's_Skin + Amount: 5 + - Product: Phracon + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Glass_Bead + Amount: 40 + - Item: Spawn + Amount: 45 + - Product: Lantern + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Blossom_Of_Maneater + Amount: 20 + - Item: Solid_Shell + Amount: 10 + - Product: Acorn + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Cactus_Needle + Amount: 30 + - Item: Snail's_Shell + Amount: 10 + - Product: Frozen_Heart + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Moth_Dust + Amount: 35 + - Item: Raccoondog_Doll + Amount: 25 + - Product: Horrendous_Mouth + BaseRate: 800 + Make: + - Amount: 9 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Dragon_Scale + Amount: 45 + - Item: Stem + Amount: 45 + - Product: Detrimindexta + BaseRate: 800 + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Chrysalis + Amount: 40 + - Item: Flesh_Of_Clam + Amount: 10 + - Product: Detonator + BaseRate: 800 + Make: + - Amount: 7 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Feather_Of_Birds + Amount: 25 + - Item: Nose_Ring + Amount: 45 + - Product: Tweezer + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Monkey_Doll + Amount: 5 + - Item: Worm_Peelings + Amount: 40 + - Product: Petite_DiablOfs_Horn + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Resin + Amount: 10 + - Item: Stone_Heart + Amount: 5 + - Product: Root_Of_Maneater + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Talon + Amount: 25 + - Item: Tooth_Of_ + Amount: 20 + - Product: Conch + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Gill + Amount: 5 + - Item: Immortal_Heart + Amount: 25 + - Product: Rotten_Scale + BaseRate: 800 + Make: + - Amount: 7 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Shell + Amount: 20 + - Item: Thin_N'_Long_Tongue + Amount: 50 + - Product: Elder_Pixie's_Beard + Make: + - Amount: 8 + Rate: 800 + - Amount: 12 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bee_Sting + Amount: 35 + - Item: Petite_DiablOfs_Wing + Amount: 45 + - Product: Lizard_Scruff + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Karvodailnirol + Amount: 15 + - Item: Scale_Of_Snakes + Amount: 20 + - Product: Emveretarcon + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Grasshopper_Doll + Amount: 40 + - Item: Heart_Of_Mermaid + Amount: 5 + - Product: Chinese_Ink + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bear's_Foot + Amount: 20 + - Item: Black_Ladle + Amount: 25 + - Product: Spiderweb + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Fin + Amount: 50 + - Item: Slender_Snake + Amount: 35 + - Product: Reins + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Chonchon_Doll + Amount: 30 + - Item: Stuffed_Doll + Amount: 50 + - Product: Wooden_Block + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Rotten_Bandage + Amount: 10 + - Item: Single_Cell + Amount: 10 + - Product: Tentacle + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Decayed_Nail + Amount: 40 + - Item: Wild_Boar's_Mane + Amount: 5 + - Product: Mixture + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Posionous_Canine + Amount: 15 + - Item: Powder_Of_Butterfly + Amount: 30 + - Product: Colorful_Shell + Make: + - Amount: 9 + Rate: 800 + - Amount: 13 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Horn + Amount: 50 + - Item: Zargon + Amount: 45 + - Product: Wing_Of_Moth + BaseRate: 800 + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Frozen_Rose + Amount: 20 + - Item: Reptile_Tongue + Amount: 30 + - Product: Nipper + Make: + - Amount: 6 + Rate: 800 + - Amount: 9 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Earthworm_Peeling + Amount: 40 + - Item: Sticky_Mucus + Amount: 25 + - Product: Turtle_Shell + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Fluff + Amount: 5 + - Item: Poring_Doll + Amount: 40 + - Product: Nail_Of_Orc + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Garlet + Amount: 10 + - Item: Raccoon_Leaf + Amount: 50 + - Product: Dragon_Canine + Make: + - Amount: 8 + Rate: 800 + - Amount: 12 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Osiris_Doll + Amount: 50 + - Item: Sticky_Webfoot + Amount: 35 + - Product: Skirt_Of_Virgin + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Head_Of_Medusa + Amount: 35 + - Item: Scales_Shell + Amount: 30 + - Product: Dragon_Train + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Sharpened_Cuspid + Amount: 35 + - Item: Tooth_Of_Bat + Amount: 25 + - Product: Dokkaebi_Horn + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Lip_Of_Ancient_Fish + Amount: 25 + - Item: Shining_Scales + Amount: 15 + - Product: Grit + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Crystal_Mirror + Amount: 35 + - Item: Limb_Of_Mantis + Amount: 50 + - Product: Sharp_Scale + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Clam_Shell + Amount: 20 + - Item: Horseshoe + Amount: 10 + - Product: Short_Leg + BaseRate: 800 + Make: + - Amount: 6 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Claw_Of_Wolves + Amount: 20 + - Item: Scell + Amount: 45 + - Product: Starsand_Of_Witch + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Blue_Porcelain + Amount: 15 + - Item: Insect_Feeler + Amount: 10 + - Product: Fox_Tail + Make: + - Amount: 2 + Rate: 800 + - Amount: 3 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Animal's_Skin + Amount: 10 + - Item: Rouge + Amount: 15 + - Product: Cobold_Hair + Make: + - Amount: 6 + Rate: 800 + - Amount: 9 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Jellopy + Amount: 45 + - Item: Wedding_Bouquet + Amount: 20 + - Product: Jaws_Of_Ant + Make: + - Amount: 4 + Rate: 800 + - Amount: 6 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Spore_Doll + Amount: 20 + - Item: Witherless_Rose + Amount: 20 + - Product: Voucher_Of_Orcish_Hero + BaseRate: 800 + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Nail_Of_Mole + Amount: 45 + - Item: Tree_Root + Amount: 5 + - Product: Sacred_Marks + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Pumpkin_Head + Amount: 30 + - Item: Scorpion's_Tail + Amount: 10 + - Product: Alchol + BaseRate: 800 + Make: + - Amount: 9 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Orcish_Voucher + Amount: 50 + - Item: Skel_Bone + Amount: 40 + - Product: Crap_Shell + BaseRate: 800 + Make: + - Amount: 8 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Baphomet_Doll + Amount: 50 + - Item: Fish_Tail + Amount: 30 + - Product: Tendon + BaseRate: 800 + Make: + - Amount: 3 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Feather + Amount: 5 + - Item: Orcish_Cuspid + Amount: 25 + - Product: Tiger_Footskin + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Pointed_Scale + Amount: 5 + - Item: White_Platter + Amount: 20 + - Product: Hinalle + Make: + - Amount: 2 + Rate: 200 + - Amount: 4 + Rate: 800 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bunch_Of_Flowers + Amount: 45 + - Item: Moustache_Of_Mole + Amount: 40 + - Product: Counteragent + BaseRate: 800 + Make: + - Amount: 4 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Evil_Horn + Amount: 15 + - Item: Mementos + Amount: 30 + - Product: Tooth_Of_Ancient_Fish + Make: + - Amount: 6 + Rate: 800 + - Amount: 9 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bill_Of_Birds + Amount: 35 + - Item: Transparent_Cloth + Amount: 30 + - Product: Rat_Tail + Make: + - Amount: 7 + Rate: 800 + - Amount: 10 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Golden_Hair + Amount: 40 + - Item: Mushroom_Spore + Amount: 35 + - Product: Coal + BaseRate: 500 + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Guard + Amount: 1 + - Product: Steel + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Tsurugi + Amount: 1 + - Product: Cigar + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Orcish_Axe + Amount: 1 + - Product: Bone_Wand + BaseRate: 200 + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Broken_Farming_Utensil + Amount: 100 + - Item: Clattering_Skull + Amount: 100 + - Product: Cigar + Make: + - Amount: 1 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Orcish_Axe + Amount: 1 + - Item: Orcish_Voucher + Amount: 100 + - Product: Starsand_Of_Witch + BaseRate: 800 + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Moth_Dust + Amount: 100 + - Item: Scell + Amount: 100 + - Product: Soft_Feather + Make: + - Amount: 1 + Rate: 200 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Feather + Amount: 30 + - Item: Feather_Of_Birds + Amount: 30 + - Product: Wind_Of_Verdure + Make: + - Amount: 1 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Ice_Piece + Amount: 100 + - Product: Crystal_Blue + Make: + - Amount: 1 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Claw_Of_Wolves + Amount: 100 + - Product: Soft_Silk_Cloth + Make: + - Amount: 2 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Transparent_Cloth + Amount: 10 + - Product: Transparent_Cloth + Make: + - Amount: 5 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Soft_Silk_Cloth + Amount: 2 + - Product: Boost500_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Boost500 + Amount: 10 + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Product: Full_SwingK_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Item: Full_SwingK + Amount: 10 + - Product: Mana_Plus_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Item: Mana_Plus + Amount: 10 + - Product: Cure_Free_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Cure_Free + Amount: 10 + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Product: Stamina_Up_M_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Item: Stamina_Up_M + Amount: 10 + - Product: Digestive_F_To_Throw + Make: + - Amount: 1 + Rate: 100 + - Amount: 2 + Rate: 250 + - Amount: 5 + Rate: 500 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Digestive_F + Amount: 10 + - Item: Empty_Potion + Amount: 10 + - Item: Flexible_String + Amount: 10 + - Product: HP_Inc_PotS_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: HP_Increase_PotionS + Amount: 10 + - Product: HP_Inc_PotM_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: HP_Increase_PotionM + Amount: 10 + - Product: HP_Inc_PotL_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: HP_Increase_PotionL + Amount: 10 + - Product: SP_Inc_PotS_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: SP_Increase_PotionS + Amount: 10 + - Product: SP_Inc_PotM_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: SP_Increase_PotionM + Amount: 10 + - Product: SP_Inc_PotL_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: SP_Increase_PotionL + Amount: 10 + - Product: En_White_PotZ_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: Enrich_White_PotionZ + Amount: 10 + - Product: Vitata500_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: Vitata500 + Amount: 10 + - Product: En_Cel_Juice_To_Throw + Make: + - Amount: 10 + SkillName: GN_CHANGEMATERIAL + SkillLevel: 1 + Consumed: + - Item: Bottle_To_Throw + Amount: 10 + - Item: Enrich_Celermine_Juice + Amount: 10 diff --git a/db/re/skill_produce_db.yml b/db/re/skill_produce_db.yml new file mode 100644 index 0000000000..684c289c1d --- /dev/null +++ b/db/re/skill_produce_db.yml @@ -0,0 +1,2535 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### + +Header: + Type: PRODUCE_DB + Version: 1 + +Body: + - ItemLevel: 1 + Recipe: + - Product: Sword + SkillName: BS_SWORD + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 2 + - Product: Falchion + SkillName: BS_SWORD + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 30 + - Product: Blade + SkillName: BS_SWORD + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 45 + - Item: Tooth_Of_Bat + Amount: 25 + - Product: Knife + SkillName: BS_DAGGER + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 1 + - Item: Jellopy + Amount: 10 + - Product: Cutter + SkillName: BS_DAGGER + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 25 + - Product: Main_Gauche + SkillName: BS_DAGGER + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 50 + - Product: Katana + SkillName: BS_TWOHANDSWORD + SkillLevel: 1 + Consumed: + - Item: Horrendous_Mouth + Amount: 15 + - Item: Iron + Amount: 35 + - Product: Axe + SkillName: BS_AXE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 10 + - Product: Battle_Axe + SkillName: BS_AXE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 110 + - Product: Club + SkillName: BS_MACE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 3 + - Product: Mace + SkillName: BS_MACE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 30 + - Product: Waghnakh + SkillName: BS_KNUCKLE + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 160 + - Item: Scarlet_Jewel + Amount: 1 + - Product: Javelin + SkillName: BS_SPEAR + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 3 + - Product: Spear + SkillName: BS_SPEAR + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 35 + - Product: Pike + SkillName: BS_SPEAR + SkillLevel: 1 + Consumed: + - Item: Iron + Amount: 70 + - ItemLevel: 2 + Recipe: + - Product: Lapier + SkillName: BS_SWORD + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 20 + - Product: Scimiter + SkillName: BS_SWORD + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 35 + - Product: Ring_Pommel_Saber + SkillName: BS_SWORD + SkillLevel: 2 + Consumed: + - Item: Claw_Of_Wolves + Amount: 50 + - Item: Steel + Amount: 40 + - Product: Dirk + SkillName: BS_DAGGER + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 17 + - Product: Dagger + SkillName: BS_DAGGER + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 30 + - Product: Stiletto + SkillName: BS_DAGGER + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 40 + - Product: Slayer + SkillName: BS_TWOHANDSWORD + SkillLevel: 2 + Consumed: + - Item: Decayed_Nail + Amount: 20 + - Item: Steel + Amount: 25 + - Product: Bastard_Sword + SkillName: BS_TWOHANDSWORD + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 45 + - Product: Hammer + SkillName: BS_AXE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 30 + - Product: Smasher + SkillName: BS_MACE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 20 + - Product: Flail + SkillName: BS_MACE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 33 + - Product: Chain + SkillName: BS_MACE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 45 + - Product: Knuckle_Duster + SkillName: BS_KNUCKLE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 50 + - Product: Hora + SkillName: BS_KNUCKLE + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 65 + - Product: Guisarme + SkillName: BS_SPEAR + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 25 + - Product: Glaive + SkillName: BS_SPEAR + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 40 + - Product: Partizan + SkillName: BS_SPEAR + SkillLevel: 2 + Consumed: + - Item: Steel + Amount: 55 + - ItemLevel: 3 + Recipe: + - Product: Saber + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 5 + - Item: White_Jewel + Amount: 1 + - Product: Haedonggum + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Golden_Jewel + Amount: 1 + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 10 + - Product: Tsurugi + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Dark_Red_Jewel + Amount: 1 + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 15 + - Product: Flamberge + SkillName: BS_SWORD + SkillLevel: 3 + Consumed: + - Item: Cardinal_Jewel_ + Amount: 1 + - Item: Oridecon + Amount: 16 + - Product: Gladius + SkillName: BS_DAGGER + SkillLevel: 3 + Consumed: + - Item: Blue_Jewel + Amount: 1 + - Item: Oridecon + Amount: 4 + - Item: Steel + Amount: 40 + - Product: Damascus + SkillName: BS_DAGGER + SkillLevel: 3 + Consumed: + - Item: Bluish_Green_Jewel + Amount: 1 + - Item: Oridecon + Amount: 4 + - Item: Steel + Amount: 60 + - Product: Two_Hand_Sword + SkillName: BS_TWOHANDSWORD + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 12 + - Item: Steel + Amount: 10 + - Product: Broad_Sword + SkillName: BS_TWOHANDSWORD + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 12 + - Item: Steel + Amount: 20 + - Product: Claymore + SkillName: BS_TWOHANDSWORD + SkillLevel: 3 + Consumed: + - Item: Crystal_Jewel___ + Amount: 1 + - Item: Oridecon + Amount: 16 + - Item: Steel + Amount: 20 + - Product: Buster + SkillName: BS_AXE + SkillLevel: 3 + Consumed: + - Item: Orcish_Cuspid + Amount: 30 + - Item: Oridecon + Amount: 4 + - Item: Steel + Amount: 20 + - Product: Two_Handed_Axe + SkillName: BS_AXE + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 8 + - Item: Steel + Amount: 10 + - Item: Violet_Jewel + Amount: 1 + - Product: Morning_Star + SkillName: BS_MACE + SkillLevel: 3 + Consumed: + - Item: Crystal_Jewel + Amount: 1 + - Item: Steel + Amount: 85 + - Product: Sword_Mace + SkillName: BS_MACE + SkillLevel: 3 + Consumed: + - Item: Sharp_Scale + Amount: 20 + - Item: Steel + Amount: 100 + - Product: Stunner + SkillName: BS_MACE + SkillLevel: 3 + Consumed: + - Item: Steel + Amount: 120 + - Item: Voucher_Of_Orcish_Hero + Amount: 1 + - Product: Fist + SkillName: BS_KNUCKLE + SkillLevel: 3 + Consumed: + - Item: Cardinal_Jewel + Amount: 10 + - Item: Oridecon + Amount: 4 + - Product: Claw + SkillName: BS_KNUCKLE + SkillLevel: 3 + Consumed: + - Item: Golden_Jewel + Amount: 10 + - Item: Oridecon + Amount: 8 + - Product: Finger + SkillName: BS_KNUCKLE + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 4 + - Item: White_Jewel + Amount: 10 + - Product: Trident + SkillName: BS_SPEAR + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 8 + - Item: Skyblue_Jewel + Amount: 5 + - Item: Steel + Amount: 10 + - Product: Halberd + SkillName: BS_SPEAR + SkillLevel: 3 + Consumed: + - Item: Oridecon + Amount: 12 + - Item: Steel + Amount: 10 + - Product: Lance + SkillName: BS_SPEAR + SkillLevel: 3 + Consumed: + - Item: Cardinal_Jewel + Amount: 3 + - Item: Evil_Horn + Amount: 2 + - Item: Oridecon + Amount: 12 + - ItemLevel: 11 + Recipe: + - Product: Str_Dish01 + Consumed: + - Item: Cooking_Oil + Amount: 1 + - Item: Grasshopper's_Leg + Amount: 5 + - Item: Old_Frying_Pan + Amount: 1 + NotConsumed: + - Item: Cookbook01 + - Product: Int_Dish01 + Consumed: + - Item: Grape + Amount: 3 + - Item: Red_Potion + Amount: 2 + NotConsumed: + - Item: Cookbook01 + - Product: Vit_Dish01 + Consumed: + - Item: Green_Herb + Amount: 10 + - Item: Nipper + Amount: 10 + - Item: Yellow_Potion + Amount: 1 + NotConsumed: + - Item: Cookbook01 + - Product: Agi_Dish01 + Consumed: + - Item: Chinese_Ink + Amount: 1 + - Item: Grain + Amount: 1 + - Item: Spawn + Amount: 10 + NotConsumed: + - Item: Cookbook01 + - Product: Dex_Dish01 + Consumed: + - Item: Grape + Amount: 2 + - Item: Honey + Amount: 1 + - Item: Red_Potion + Amount: 1 + NotConsumed: + - Item: Cookbook01 + - Product: Luk_Dish01 + Consumed: + - Item: Cooking_Oil + Amount: 1 + - Item: Old_Frying_Pan + Amount: 1 + - Item: Yoyo_Tail + Amount: 5 + NotConsumed: + - Item: Cookbook01 + - ItemLevel: 12 + Recipe: + - Product: Str_Dish02 + Consumed: + - Item: Green_Herb + Amount: 10 + - Item: Plain_Sauce + Amount: 1 + - Item: Sticky_Webfoot + Amount: 20 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook02 + - Product: Vit_Dish02 + Consumed: + - Item: Delicious_Fish + Amount: 1 + - Item: Fin + Amount: 5 + - Item: Flesh_Of_Clam + Amount: 10 + - Item: Gill + Amount: 5 + NotConsumed: + - Item: Cookbook02 + - Product: Int_Dish02 + Consumed: + - Item: Blue_Herb + Amount: 5 + - Item: Red_Herb + Amount: 10 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook02 + - Product: Agi_Dish02 + Consumed: + - Item: Carrot + Amount: 3 + - Item: Grain + Amount: 1 + - Item: Plain_Sauce + Amount: 1 + - Item: Pumpkin_Head + Amount: 5 + NotConsumed: + - Item: Cookbook02 + - Product: Dex_Dish02 + Consumed: + - Item: Cacao + Amount: 10 + - Item: Milk + Amount: 1 + - Item: Piece_Of_Cake + Amount: 1 + - Item: White_Platter + Amount: 1 + NotConsumed: + - Item: Cookbook02 + - Product: Luk_Dish02 + Consumed: + - Item: Apple_Juice + Amount: 3 + - Item: Carrot_Juice + Amount: 2 + - Item: Grape_Juice + Amount: 1 + - Item: Orange_Juice + Amount: 2 + NotConsumed: + - Item: Cookbook02 + - ItemLevel: 13 + Recipe: + - Product: Dex_Dish03 + Consumed: + - Item: Apple + Amount: 5 + - Item: Banana + Amount: 5 + - Item: Orange + Amount: 5 + - Item: Strawberry + Amount: 5 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Int_Dish03 + Consumed: + - Item: Honey + Amount: 2 + - Item: White_Herb + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Str_Dish03 + Consumed: + - Item: Chilli + Amount: 5 + - Item: Green_Herb + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Meat + Amount: 4 + - Item: Old_Frying_Pan + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Vit_Dish03 + Consumed: + - Item: Conch + Amount: 10 + - Item: Flesh_Of_Clam + Amount: 20 + - Item: Honey + Amount: 1 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - Product: Agi_Dish03 + Consumed: + - Item: Cheese + Amount: 10 + - Item: Nice_Sweet_Potato + Amount: 5 + - Item: Sweet_Sauce + Amount: 1 + - Item: Tentacle + Amount: 10 + NotConsumed: + - Item: Cookbook03 + - Product: Luk_Dish03 + Consumed: + - Item: Baked_Yam + Amount: 1 + - Item: Nice_Sweet_Potato + Amount: 10 + - Item: Sweet_Potato + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook03 + - ItemLevel: 14 + Recipe: + - Product: Int_Dish04 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Grape + Amount: 5 + - Item: Lemon + Amount: 4 + - Item: Orange + Amount: 10 + - Item: Strawberry + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Vit_Dish04 + Consumed: + - Item: Chinese_Ink + Amount: 20 + - Item: Old_Frying_Pan + Amount: 1 + - Item: Soft_Leaf + Amount: 10 + - Item: Tentacle + Amount: 30 + - Item: White_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Str_Dish04 + Consumed: + - Item: Green_Herb + Amount: 3 + - Item: Lemon + Amount: 1 + - Item: Meat + Amount: 5 + - Item: Red_Herb + Amount: 3 + - Item: Sweet_Sauce + Amount: 1 + - Item: Yellow_Herb + Amount: 2 + NotConsumed: + - Item: Cookbook04 + - Product: Dex_Dish04 + Consumed: + - Item: Bread + Amount: 5 + - Item: Cheese + Amount: 10 + - Item: Meat + Amount: 1 + - Item: Milk + Amount: 15 + - Item: Sweet_Sauce + Amount: 1 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Agi_Dish04 + Consumed: + - Item: Carrot + Amount: 10 + - Item: Grain + Amount: 3 + - Item: Hot_Sauce + Amount: 1 + - Item: Ice_Piece + Amount: 10 + - Item: Pumpkin_Head + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - Product: Luk_Dish04 + Consumed: + - Item: Delicious_Fish + Amount: 5 + - Item: Lip_Of_Ancient_Fish + Amount: 10 + - Item: Raccoon_Leaf + Amount: 10 + - Item: Sweet_Sauce + Amount: 2 + - Item: White_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook04 + - ItemLevel: 15 + Recipe: + - Product: Int_Dish05 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Blue_Potion + Amount: 1 + - Item: Fruit_Of_Mastela + Amount: 4 + - Item: Lemon + Amount: 2 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook05 + - Product: Str_Dish05 + Consumed: + - Item: Carrot + Amount: 3 + - Item: Cooking_Oil + Amount: 1 + - Item: Grain + Amount: 1 + - Item: Honey + Amount: 2 + - Item: Sweet_Potato + Amount: 10 + NotConsumed: + - Item: Cookbook05 + - Product: Dex_Dish05 + Consumed: + - Item: Great_Leaf + Amount: 6 + - Item: Leaflet_Of_Aloe + Amount: 3 + - Item: Leaflet_Of_Hinal + Amount: 2 + - Item: Sharp_Leaf + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook05 + - Product: Agi_Dish05 + Consumed: + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Pot + Amount: 1 + - Item: Pumpkin_Head + Amount: 20 + - Item: Red_Herb + Amount: 10 + - Item: Wing_Of_Red_Bat + Amount: 20 + NotConsumed: + - Item: Cookbook05 + - Product: Vit_Dish05 + Consumed: + - Item: Bun + Amount: 20 + - Item: Green_Herb + Amount: 20 + - Item: Hot_Sauce + Amount: 1 + - Item: Red_Spice + Amount: 1 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Cookbook05 + - Product: Luk_Dish05 + Consumed: + - Item: Cooking_Oil + Amount: 1 + - Item: Great_Leaf + Amount: 10 + - Item: Old_Frying_Pan + Amount: 2 + - Item: Scorpion's_Tail + Amount: 20 + - Item: Short_Leg + Amount: 10 + NotConsumed: + - Item: Cookbook05 + - ItemLevel: 16 + Recipe: + - Product: Str_Dish06 + Consumed: + - Item: Fruit_Of_Mastela + Amount: 1 + - Item: Honey + Amount: 2 + - Item: Meat + Amount: 10 + - Item: Shining_Scales + Amount: 20 + - Item: Yellow_Herb + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Int_Dish06 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Grape_Juice + Amount: 3 + - Item: Mushroom + Amount: 3 + - Item: Mushroom_Spore + Amount: 20 + - Item: Red_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Dex_Dish06 + Consumed: + - Item: Cheese + Amount: 10 + - Item: Hard_Peach + Amount: 20 + - Item: Milk + Amount: 10 + - Item: Orange_Juice + Amount: 5 + - Item: Piece_Of_Cake + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Agi_Dish06 + Consumed: + - Item: Chilli + Amount: 20 + - Item: Lemon + Amount: 20 + - Item: Prawn + Amount: 20 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook06 + - Product: Vit_Dish06 + Consumed: + - Item: Browny_Root + Amount: 20 + - Item: Honey + Amount: 2 + - Item: Mushroom + Amount: 1 + - Item: Mushroom_Spore + Amount: 20 + - Item: Root_Of_Maneater + Amount: 10 + NotConsumed: + - Item: Cookbook06 + - Product: Luk_Dish06 + Consumed: + - Item: Aloe + Amount: 1 + - Item: Clover + Amount: 10 + - Item: Reptile_Tongue + Amount: 5 + - Item: Starsand_Of_Witch + Amount: 10 + - Item: Thin_N'_Long_Tongue + Amount: 5 + NotConsumed: + - Item: Cookbook06 + - ItemLevel: 17 + Recipe: + - Product: Str_Dish07 + Consumed: + - Item: Coal + Amount: 2 + - Item: Hot_Sauce + Amount: 1 + - Item: Live_Coal + Amount: 1 + - Item: Meat + Amount: 10 + - Item: White_Herb + Amount: 10 + - Item: Wooden_Block + Amount: 15 + NotConsumed: + - Item: Cookbook07 + - Product: Int_Dish07 + Consumed: + - Item: Honey + Amount: 2 + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Royal_Jelly + Amount: 4 + - Item: White_Herb + Amount: 5 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook07 + - Product: Dex_Dish07 + Consumed: + - Item: Amulet + Amount: 5 + - Item: Bread + Amount: 10 + - Item: Fruit_Of_Mastela + Amount: 5 + - Item: Ment + Amount: 5 + - Item: Sweet_Sauce + Amount: 1 + - Item: Unripe_Apple + Amount: 2 + NotConsumed: + - Item: Cookbook07 + - Product: Agi_Dish07 + Consumed: + - Item: Anolian_Skin + Amount: 10 + - Item: Carrot + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 10 + - Item: Pumpkin_Head + Amount: 10 + - Item: Yellow_Herb + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook07 + - Product: Vit_Dish07 + Consumed: + - Item: Delicious_Fish + Amount: 2 + - Item: Fish_Tail + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 5 + - Item: Pet_Food + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + - Item: Wild_Boar's_Mane + Amount: 10 + NotConsumed: + - Item: Cookbook07 + - Product: Luk_Dish07 + Consumed: + - Item: Flesh_Of_Clam + Amount: 10 + - Item: Gill + Amount: 5 + - Item: Meat + Amount: 5 + - Item: Mushroom + Amount: 10 + - Item: Scales_Shell + Amount: 10 + - Item: Soft_Leaf + Amount: 10 + NotConsumed: + - Item: Cookbook07 + - ItemLevel: 18 + Recipe: + - Product: Str_Dish08 + Consumed: + - Item: Bear's_Foot + Amount: 20 + - Item: Carrot + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 2 + - Item: Leaflet_Of_Hinal + Amount: 1 + - Item: Plain_Sauce + Amount: 1 + - Item: Pumpkin_Head + Amount: 10 + NotConsumed: + - Item: Cookbook08 + - Product: Int_Dish08 + Consumed: + - Item: Leaf_Of_Yggdrasil + Amount: 3 + - Item: Leaflet_Of_Aloe + Amount: 10 + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Prickly_Fruit + Amount: 4 + - Item: Royal_Jelly + Amount: 6 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook08 + - Product: Dex_Dish08 + Consumed: + - Item: Bread + Amount: 10 + - Item: Cheese + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Meat + Amount: 5 + - Item: Royal_Jelly + Amount: 2 + - Item: Strawberry + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Cookbook08 + - Product: Agi_Dish08 + Consumed: + - Item: Aloebera + Amount: 1 + - Item: Carrot + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaflet_Of_Hinal + Amount: 10 + - Item: Meat + Amount: 10 + - Item: Pumpkin_Head + Amount: 10 + NotConsumed: + - Item: Cookbook08 + - Product: Vit_Dish08 + Consumed: + - Item: Grain + Amount: 2 + - Item: Leaf_Clothes + Amount: 20 + - Item: Meat + Amount: 20 + - Item: Plain_Sauce + Amount: 1 + - Item: Pumpkin_Head + Amount: 10 + - Item: Rainbow_Carrot + Amount: 5 + NotConsumed: + - Item: Cookbook08 + - Product: Luk_Dish08 + Consumed: + - Item: Grain + Amount: 5 + - Item: Leaf_Clothes + Amount: 10 + - Item: Plain_Sauce + Amount: 1 + - Item: Red_Spice + Amount: 2 + - Item: Strawberry + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook08 + - ItemLevel: 19 + Recipe: + - Product: Str_Dish09 + Consumed: + - Item: Cheese + Amount: 10 + - Item: Chinese_Ink + Amount: 10 + - Item: Coal + Amount: 2 + - Item: Green_Herb + Amount: 30 + - Item: Hot_Sauce + Amount: 1 + - Item: Pot + Amount: 1 + - Item: Tendon + Amount: 40 + NotConsumed: + - Item: Cookbook09 + - Product: Int_Dish09 + Consumed: + - Item: Alchol + Amount: 5 + - Item: Blue_Potion + Amount: 2 + - Item: Leaf_Of_Yggdrasil + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 10 + - Item: Orange + Amount: 10 + - Item: Royal_Jelly + Amount: 4 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook09 + - Product: Dex_Dish09 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Grape_Juice + Amount: 5 + - Item: Orange + Amount: 10 + - Item: Red_Spice + Amount: 1 + - Item: Strawberry + Amount: 10 + - Item: Tropical_Banana + Amount: 1 + - Item: Unripe_Apple + Amount: 5 + NotConsumed: + - Item: Cookbook09 + - Product: Agi_Dish09 + Consumed: + - Item: Meat + Amount: 10 + - Item: Plain_Sauce + Amount: 4 + - Item: Red_Herb + Amount: 5 + - Item: Royal_Jelly + Amount: 5 + - Item: Shoot + Amount: 20 + - Item: White_Herb + Amount: 10 + - Item: Yellow_Herb + Amount: 5 + NotConsumed: + - Item: Cookbook09 + - Product: Vit_Dish09 + Consumed: + - Item: Dragon's_Skin + Amount: 10 + - Item: Dragon_Train + Amount: 20 + - Item: Fatty_Chubby_Earthworm + Amount: 1 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaf_Of_Yggdrasil + Amount: 3 + - Item: Red_Spice + Amount: 1 + - Item: Royal_Jelly + Amount: 6 + NotConsumed: + - Item: Cookbook09 + - Product: Luk_Dish09 + Consumed: + - Item: Alchol + Amount: 2 + - Item: Aloebera + Amount: 2 + - Item: Animal_Blood + Amount: 1 + - Item: Anodyne + Amount: 2 + - Item: Apple_Juice + Amount: 10 + - Item: Red_Spice + Amount: 1 + - Item: Royal_Jelly + Amount: 6 + NotConsumed: + - Item: Cookbook09 + - ItemLevel: 20 + Recipe: + - Product: Str_Dish10 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Aloebera + Amount: 2 + - Item: Blue_Potion + Amount: 2 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaf_Of_Yggdrasil + Amount: 10 + - Item: Pot + Amount: 1 + - Item: Royal_Jelly + Amount: 5 + - Item: Thin_N'_Long_Tongue + Amount: 20 + NotConsumed: + - Item: Cookbook10 + - Product: Int_Dish10 + Consumed: + - Item: Blue_Herb + Amount: 10 + - Item: Leaflet_Of_Aloe + Amount: 5 + - Item: Lemon + Amount: 5 + - Item: Prickly_Fruit + Amount: 5 + - Item: Root_Of_Maneater + Amount: 10 + - Item: Royal_Jelly + Amount: 5 + - Item: Singing_Plant + Amount: 1 + - Item: Yggdrasilberry + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - Product: Dex_Dish10 + Consumed: + - Item: Alchol + Amount: 5 + - Item: Center_Potion + Amount: 3 + - Item: Ice_Piece + Amount: 10 + - Item: Illusion_Flower + Amount: 1 + - Item: Prickly_Fruit + Amount: 2 + - Item: Royal_Jelly + Amount: 4 + - Item: Spawns + Amount: 10 + - Item: Yggdrasilberry + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - Product: Agi_Dish10 + Consumed: + - Item: Aloebera + Amount: 2 + - Item: Bitter_Herb + Amount: 3 + - Item: Hot_Sauce + Amount: 1 + - Item: Leaf_Of_Yggdrasil + Amount: 3 + - Item: Pot + Amount: 1 + - Item: Royal_Jelly + Amount: 10 + - Item: Scorpion's_Tail + Amount: 20 + - Item: Scropion's_Nipper + Amount: 20 + NotConsumed: + - Item: Cookbook10 + - Product: Vit_Dish10 + Consumed: + - Item: Amulet + Amount: 10 + - Item: Anodyne + Amount: 2 + - Item: Bitter_Herb + Amount: 2 + - Item: Heart_Of_Mermaid + Amount: 10 + - Item: Hot_Sauce + Amount: 2 + - Item: Immortal_Heart + Amount: 20 + - Item: Mementos + Amount: 10 + - Item: Seed_Of_Yggdrasil + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - Product: Luk_Dish10 + Consumed: + - Item: Four_Leaf_Clover + Amount: 2 + - Item: Fox_Tail + Amount: 10 + - Item: Izidor + Amount: 2 + - Item: Leaf_Of_Yggdrasil + Amount: 4 + - Item: Plain_Sauce + Amount: 1 + - Item: Root_Of_Maneater + Amount: 10 + - Item: Sharp_Leaf + Amount: 10 + - Item: Yellow_Spice + Amount: 1 + NotConsumed: + - Item: Cookbook10 + - ItemLevel: 21 + Recipe: + - Product: Iron + SkillName: BS_IRON + SkillLevel: 1 + Consumed: + - Item: Iron_Ore + Amount: 1 + - Product: Steel + SkillName: BS_STEEL + SkillLevel: 1 + Consumed: + - Item: Coal + Amount: 1 + - Item: Iron + Amount: 5 + - Product: Star_Crumb + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Sparkling_Dust + Amount: 10 + - Product: Flame_Heart + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Boody_Red + Amount: 10 + - Product: Mistic_Frozen + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Crystal_Blue + Amount: 10 + - Product: Great_Nature + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Yellow_Live + Amount: 10 + - Product: Rough_Wind + SkillName: BS_ENCHANTEDSTONE + SkillLevel: 1 + Consumed: + - Item: Wind_Of_Verdure + Amount: 10 + - ItemLevel: 22 + Recipe: + - Product: Red_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Red_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Yellow_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Yellow_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: White_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: White_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Blue_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 1 + - Item: Empty_Potion + Amount: 1 + - Item: Scell + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Red_Slim_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Cactus_Needle + Amount: 1 + - Item: Empty_Cylinder + Amount: 1 + - Item: Red_Potion + Amount: 1 + NotConsumed: + - Item: Slim_Potion_Create_Book + - Product: Yellow_Slim_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 1 + - Item: Moustache_Of_Mole + Amount: 1 + - Item: Yellow_Potion + Amount: 1 + NotConsumed: + - Item: Slim_Potion_Create_Book + - Product: White_Slim_Potion + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 1 + - Item: Starsand_Of_Witch + Amount: 1 + - Item: White_Potion + Amount: 1 + NotConsumed: + - Item: Slim_Potion_Create_Book + - Product: Holy_Water + SkillName: AL_HOLYWATER + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Product: Poison_Bottle + SkillName: ASC_CDP + SkillLevel: 1 + Consumed: + - Item: Bee_Sting + Amount: 1 + - Item: Berserk_Potion + Amount: 1 + - Item: Cactus_Needle + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Karvodailnirol + Amount: 1 + - Item: Poison_Spore + Amount: 1 + - Item: Posionous_Canine + Amount: 1 + - Product: Fire_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Transparent_Cloth + Amount: 1 + NotConsumed: + - Item: FireBottle_Create_Book + - Product: Acid_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Item: Immortal_Heart + Amount: 1 + NotConsumed: + - Item: Acid_Create_Book + - Product: MenEater_Plant_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blossom_Of_Maneater + Amount: 2 + - Item: Empty_Bottle + Amount: 1 + NotConsumed: + - Item: Plant_Create_Book + - Product: Mini_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Detonator + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Tendon + Amount: 1 + NotConsumed: + - Item: Mine_Create_Book + - Product: Coating_Bottle + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Heart_Of_Mermaid + Amount: 1 + - Item: Tooth_Of_ + Amount: 1 + NotConsumed: + - Item: Coating_Create_Book + - Product: Resist_Fire + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Lizard_Scruff + Amount: 2 + - Item: Red_Gemstone + Amount: 1 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Resist_Water + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Gemstone + Amount: 1 + - Item: Empty_Potion + Amount: 1 + - Item: Heart_Of_Mermaid + Amount: 3 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Resist_Earth + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Potion + Amount: 1 + - Item: Large_Jellopy + Amount: 2 + - Item: Yellow_Gemstone + Amount: 1 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Resist_Wind + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Gemstone + Amount: 1 + - Item: Empty_Potion + Amount: 1 + - Item: Moth_Dust + Amount: 3 + NotConsumed: + - Item: Elemental_Potion_Book + - Product: Anodyne + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Ment + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Aloebera + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Aloe + Amount: 1 + - Item: Empty_Bottle + Amount: 1 + - Item: Honey + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: Alchol + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Item: Empty_Cylinder + Amount: 1 + - Item: Poison_Spore + Amount: 5 + - Item: Stem + Amount: 5 + NotConsumed: + - Item: Alcol_Create_Book + - Product: Germination_Breed + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Life_Force_Pot + Amount: 1 + - Item: Seed_Of_Life + Amount: 1 + - Item: Yggdrasilberry_Dew + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - Product: aegis_100371 + SkillName: AM_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 1 + - Item: Seed_Of_Life + Amount: 1 + - Item: Yellow_Herb + Amount: 1 + NotConsumed: + - Item: Normal_Potion_Book + - ItemLevel: 23 + Recipe: + - Product: Elemental_Fire + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Scorpion's_Tail + Amount: 3 + - Item: Scroll + Amount: 1 + - Product: Elemental_Water + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Scroll + Amount: 1 + - Item: Snail's_Shell + Amount: 3 + - Product: Elemental_Earth + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Horn + Amount: 3 + - Item: Scroll + Amount: 1 + - Product: Elemental_Wind + SkillName: SA_CREATECON + SkillLevel: 1 + Consumed: + - Item: Colorful_Shell + Amount: 3 + - Item: Scroll + Amount: 1 + - ItemLevel: 24 + Recipe: + - Product: Ansila + SkillName: AB_ANCILLA + SkillLevel: 1 + Consumed: + - Item: Blue_Gemstone + Amount: 1 + - Product: Runstone_Nosiege + SkillName: RK_RUNEMASTERY + SkillLevel: 8 + Consumed: + - Item: Broken_Armor_Piece + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Old_Magic_Circle + Amount: 1 + - Product: Runstone_Rhydo + SkillName: RK_RUNEMASTERY + SkillLevel: 7 + Consumed: + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Red_Gemstone + Amount: 1 + - Product: Runstone_Verkana + SkillName: RK_RUNEMASTERY + SkillLevel: 9 + Consumed: + - Item: Dullahan_Armor + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Product: Runstone_Isia + SkillName: RK_RUNEMASTERY + SkillLevel: 2 + Consumed: + - Item: Burning_Heart + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Product: Runstone_Asir + SkillName: RK_RUNEMASTERY + SkillLevel: 5 + Consumed: + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Ogre_Tooth + Amount: 1 + - Product: Runstone_Urj + SkillName: RK_RUNEMASTERY + SkillLevel: 6 + Consumed: + - Item: Elder_Branch + Amount: 1 + - Item: Honey + Amount: 1 + - Item: Slender_Snake + Amount: 1 + - Product: Runstone_Turisus + SkillName: RK_RUNEMASTERY + SkillLevel: 1 + Consumed: + - Item: Claw_Of_Desert_Wolf + Amount: 1 + - Item: Cobold_Hair + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Product: Runstone_Pertz + SkillName: RK_RUNEMASTERY + SkillLevel: 3 + Consumed: + - Item: Dragon_Canine + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Item: Light_Granule + Amount: 1 + - Item: Tangled_Chain + Amount: 1 + - Product: Runstone_Hagalas + SkillName: RK_RUNEMASTERY + SkillLevel: 4 + Consumed: + - Item: Dragon's_Skin + Amount: 1 + - Item: Elder_Branch + Amount: 1 + - Item: Round_Shell + Amount: 1 + - Product: Runstone_Lux + SkillName: RK_RUNEMASTERY + SkillLevel: 10 + Consumed: + - Item: Gold + Amount: 3 + - Item: Light_Granule + Amount: 3 + - ItemLevel: 25 + Recipe: + - Product: Guillotine_Antidote + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 5 + Consumed: + - Item: Blue_Herb + Amount: 1 + - Item: Green_Herb + Amount: 2 + - Item: White_Herb + Amount: 1 + - Product: Poison_Paralysis + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 1 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Amoena + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Poison_Toad's_Skin + Amount: 20 + - Product: Poison_Leech + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 4 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Nerium + Amount: 1 + - Item: Poison_Herb_Scopolia + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Oblivion + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 9 + Consumed: + - Item: Heart_Of_Mermaid + Amount: 10 + - Item: Izidor + Amount: 1 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Contamination + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 3 + Consumed: + - Item: Decayed_Nail + Amount: 25 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Seratum + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Numb + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 8 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Nerium + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Sticky_Poison + Amount: 10 + - Product: Poison_Fever + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 2 + Consumed: + - Item: Anolian_Skin + Amount: 20 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Rantana + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Product: Poison_Laughing + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 7 + Consumed: + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Herb_Makulata + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Poison_Spore + Amount: 10 + - Product: Poison_Fatigue + SkillName: GC_RESEARCHNEWPOISON + SkillLevel: 6 + Consumed: + - Item: Izidor + Amount: 1 + - Item: Medicine_Bowl + Amount: 1 + - Item: Poison_Kit + Amount: 1 + - Item: Sticky_Poison + Amount: 10 + - ItemLevel: 27 + Recipe: + - Product: Savage_BBQ + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Black_Charcoal + Amount: 1 + - Item: Cooking_Skewer + Amount: 1 + - Item: Melange_Pot + Amount: 1 + - Item: Savage_Meat + Amount: 1 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Wug_Blood_Cocktail + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Cold_Ice + Amount: 2 + - Item: Melange_Pot + Amount: 1 + - Item: Wolf_Blood + Amount: 3 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Minor_Brisket + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Beef_Head_Meat + Amount: 2 + - Item: Large_Cookpot + Amount: 1 + - Item: Melange_Pot + Amount: 1 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Siroma_Icetea + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Comodo_Tropic_Fruit + Amount: 1 + - Item: Ice_Crystal + Amount: 2 + - Item: Ice_Fragment + Amount: 3 + - Item: Melange_Pot + Amount: 1 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Drocera_Herb_Stew + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 3 + - Item: Drocera_Tentacle + Amount: 3 + - Item: Large_Cookpot + Amount: 1 + - Item: Melange_Pot + Amount: 1 + - Item: Red_Herb + Amount: 3 + - Item: White_Herb + Amount: 3 + NotConsumed: + - Item: Mix_Cook_Book + - Product: Petti_Tail_Noodle + SkillName: GN_MIX_COOKING + SkillLevel: 1 + Consumed: + - Item: Cool_Gravy + Amount: 1 + - Item: Fine_Noodle + Amount: 1 + - Item: Melange_Pot + Amount: 1 + - Item: Petti_Tail + Amount: 2 + NotConsumed: + - Item: Mix_Cook_Book + - ItemLevel: 29 + Recipe: + - Product: Seed_Of_Horny_Plant + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Prickly_Fruit + Amount: 10 + NotConsumed: + - Item: Plant_Genetic_Grow + - Product: Bloodsuck_Plant_Seed + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Root_Of_Maneater + Amount: 10 + NotConsumed: + - Item: Plant_Genetic_Grow + - Product: Bomb_Mushroom_Spore + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Gun_Powder + Amount: 2 + - Item: Mushroom_Spore + Amount: 10 + - Item: Poison_Spore + Amount: 5 + NotConsumed: + - Item: Plant_Genetic_Grow + - Product: HP_Increase_PotionS + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: Monster's_Feed + Amount: 5 + - Item: White_Herb + Amount: 10 + NotConsumed: + - Item: Increase_Stamina_Study + - Product: HP_Increase_PotionM + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Hot_Sauce + Amount: 1 + - Item: White_Herb + Amount: 10 + - Item: Yellow_Herb + Amount: 10 + NotConsumed: + - Item: Increase_Stamina_Study + - Product: HP_Increase_PotionL + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Fruit_Of_Mastela + Amount: 3 + - Item: Holy_Water + Amount: 1 + - Item: Hot_Sauce + Amount: 1 + - Item: White_Herb + Amount: 15 + NotConsumed: + - Item: Increase_Stamina_Study + - Product: SP_Increase_PotionS + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Bottle + Amount: 10 + - Item: Grape + Amount: 10 + - Item: Lemon + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Vital_Drink_CB + - Product: SP_Increase_PotionM + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 10 + - Item: Empty_Bottle + Amount: 10 + - Item: Honey + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Vital_Drink_CB + - Product: SP_Increase_PotionL + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 15 + - Item: Empty_Bottle + Amount: 10 + - Item: Royal_Jelly + Amount: 10 + - Item: Sweet_Sauce + Amount: 1 + NotConsumed: + - Item: Vital_Drink_CB + - Product: Enrich_White_PotionZ + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Alchol + Amount: 1 + - Item: Empty_Cylinder + Amount: 10 + - Item: White_Herb + Amount: 10 + - Item: White_Potion + Amount: 20 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Vitata500 + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 10 + - Item: Empty_Cylinder + Amount: 10 + - Item: Grape + Amount: 10 + - Item: Honey + Amount: 10 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Enrich_Celermine_Juice + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Awakening_Potion + Amount: 5 + - Item: Center_Potion + Amount: 5 + - Item: Empty_Cylinder + Amount: 10 + - Item: Hot_Sauce + Amount: 5 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Cure_Free + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 10 + - Item: Fruit_Of_Mastela + Amount: 1 + - Item: Green_Herb + Amount: 20 + - Item: Leaf_Of_Yggdrasil + Amount: 1 + - Item: Panacea + Amount: 5 + NotConsumed: + - Item: Quality_Potion_Book + - Product: Ref_T_Potion + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 10 + - Item: Gold + Amount: 5 + - Item: Yggdrasilberry + Amount: 10 + - Product: Add_Atk_Potion + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 10 + - Item: Red_Herb + Amount: 45 + - Item: Seed_Of_Yggdrasil + Amount: 5 + - Product: Add_Matk_Potion + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Herb + Amount: 15 + - Item: Empty_Cylinder + Amount: 10 + - Item: Seed_Of_Yggdrasil + Amount: 5 + - Product: Concentrated_R_P + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 10 + - Item: Empty_Potion + Amount: 5 + - Item: Red_Syrup + Amount: 15 + - Product: Concentrated_B_P + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Blue_Syrup + Amount: 15 + - Item: Empty_Cylinder + Amount: 10 + - Item: Empty_Potion + Amount: 5 + - Product: Concentrated_G_P + SkillName: GN_S_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Empty_Cylinder + Amount: 10 + - Item: Empty_Potion + Amount: 5 + - Item: White_Syrup + Amount: 10 + - Item: Yellow_Syrup + Amount: 10 + - ItemLevel: 30 + Recipe: + - Product: Novice_Potion + Consumed: + - Item: Apple + Amount: 1 + - Item: Red_Herb + Amount: 2 + NotConsumed: + - Item: Novice_Combi_Book + - Product: N_Magnifier + Consumed: + - Item: Jellopy + Amount: 1 + - Item: Tree_Of_Archer_1 + Amount: 3 + NotConsumed: + - Item: Novice_Combi_Book + - Product: N_Fly_Wing + Consumed: + - Item: Feather + Amount: 2 + - Item: Fluff + Amount: 2 + - Item: Jellopy + Amount: 2 + NotConsumed: + - Item: Novice_Combi_Book + - Product: N_Cutter + Consumed: + - Item: Phracon + Amount: 1 + - Item: Shell + Amount: 10 + - Item: Worm_Peelings + Amount: 10 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Unripe_Apple2 + Consumed: + - Item: Apple + Amount: 1 + - Item: Green_Herb + Amount: 1 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Four_Leaf_Clover + Consumed: + - Item: Clover + Amount: 200 + - Item: Sticky_Mucus + Amount: 200 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Banana_Juice + Consumed: + - Item: Banana + Amount: 1 + - Item: Milk + Amount: 1 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Apple_Juice + Consumed: + - Item: Apple + Amount: 1 + - Item: Milk + Amount: 1 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Carrot_Juice + Consumed: + - Item: Carrot + Amount: 1 + - Item: Milk + Amount: 1 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Grape_Juice + Consumed: + - Item: Grape + Amount: 1 + - Item: Milk + Amount: 1 + NotConsumed: + - Item: Novice_Combi_Book + - Product: Unripe_Apple + Consumed: + - Item: Apple + Amount: 10 + - Item: Green_Herb + Amount: 20 + - Item: Sticky_Mucus + Amount: 10 + NotConsumed: + - Item: Novice_Combi_Book + - ItemLevel: 31 + Recipe: + - Product: Device_Capsule + SkillName: MT_M_MACHINE + SkillLevel: 1 + Consumed: + - Item: Magic_Gear_Fuel + Amount: 50 + - Item: Oridecon_Hammer + Amount: 5 + - Item: Portable_Furnace + Amount: 5 + NotConsumed: + - Item: Device_Creation_Guide + - Product: Auto_Battle_Capsule + SkillName: MT_M_MACHINE + SkillLevel: 1 + Consumed: + - Item: Magic_Gear_Fuel + Amount: 75 + - Item: Oridecon_Hammer + Amount: 5 + - Item: Portable_Furnace + Amount: 5 + NotConsumed: + - Item: Device_Creation_Guide + - ItemLevel: 32 + Recipe: + - Product: Flame_Acid_Bottle + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Acid_Bottle + Amount: 5 + - Item: Beaker + Amount: 1 + - Item: Boody_Red + Amount: 2 + - Item: Fire_Bottle + Amount: 5 + - Product: Earth_Acid_Bottle + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Acid_Bottle + Amount: 5 + - Item: Beaker + Amount: 1 + - Item: Fire_Bottle + Amount: 5 + - Item: Yellow_Live + Amount: 2 + - Product: Gale_Acid_Bottle + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Acid_Bottle + Amount: 5 + - Item: Beaker + Amount: 1 + - Item: Fire_Bottle + Amount: 5 + - Item: Wind_Of_Verdure + Amount: 2 + - Product: Icicle_Acid_Bottle + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Acid_Bottle + Amount: 5 + - Item: Beaker + Amount: 1 + - Item: Crystal_Blue + Amount: 2 + - Item: Fire_Bottle + Amount: 5 + - Product: High_Coating_Bottle + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Coating_Bottle + Amount: 10 + - Item: Empty_Bottle + Amount: 5 + - Product: High_Plant_Bottle + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Bloodsuck_Plant_Seed + Amount: 2 + - Item: Mandragora_Flowerpot + Amount: 5 + - Item: MenEater_Plant_Bottle + Amount: 10 + - Item: Seed_Of_Horny_Plant + Amount: 2 + - Product: Eye_Cleaner + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Empty_Bottle + Amount: 10 + - Item: Green_Herb + Amount: 3 + - Item: Holy_Water + Amount: 5 + - Item: White_Herb + Amount: 3 + - Product: Ear_Cleaner + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Blue_Herb + Amount: 2 + - Item: Empty_Bottle + Amount: 10 + - Item: Green_Herb + Amount: 3 + - Item: Holy_Water + Amount: 5 + - Product: Tonics + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Empty_Bottle + Amount: 10 + - Item: Holy_Water + Amount: 5 + - Item: Royal_Jelly + Amount: 3 + - Item: Yggdrasilberry + Amount: 2 + - Product: Mini_Extinguisher + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Crystal_Blue + Amount: 5 + - Item: Empty_Bottle + Amount: 10 + - Item: Holy_Water + Amount: 5 + - Item: Iron + Amount: 3 + - Product: Water_Of_Lucky + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Clover + Amount: 10 + - Item: Empty_Bottle + Amount: 10 + - Item: Green_Herb + Amount: 3 + - Item: Holy_Water + Amount: 5 + - Product: Strong_Antidote + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Empty_Bottle + Amount: 10 + - Item: Green_Herb + Amount: 10 + - Item: Holy_Water + Amount: 5 + - Item: Poison_Bottle + Amount: 3 + - Product: High_Energy_Chocolate + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Cacao + Amount: 3 + - Item: Empty_Bottle + Amount: 10 + - Item: Royal_Jelly + Amount: 3 + - Item: Seed_Of_Yggdrasil + Amount: 5 + - Product: Refined_Holy_Water + SkillName: BO_BIONIC_PHARMACY + SkillLevel: 1 + Consumed: + - Item: Beaker + Amount: 1 + - Item: Empty_Bottle + Amount: 10 + - Item: Holy_Water + Amount: 10 + - Item: Royal_Jelly + Amount: 3 diff --git a/doc/yaml/db/produce_db.yml b/doc/yaml/db/produce_db.yml new file mode 100644 index 0000000000..2bde8ce205 --- /dev/null +++ b/doc/yaml/db/produce_db.yml @@ -0,0 +1,28 @@ +########################################################################### +# Item Produce Database +########################################################################### +# +# Item Produce Settings +# +########################################################################### +# - ItemLevel Number which determines what kind of a crafting window will pop-up. +# Recipe: +# - Product AegisName of the produced item. +# SkillName Skill name required. (Default: null) +# SkillLevel Skill level required. (Default: 1) +# Consumed: List of items consumed to produce the Product. +# - Item AegisName of the consumed item. +# Amount Amount required. +# Clear Remove the item with the given AegisName from Consumed. (Optional) +# NotConsumed: List of items not consumed to produce the Product. (Default: null) +# - Item AegisName of the unconsumed item. +# Clear Remove the item with the given AegisName from NotConsumed. (Optional) +# +########################################################################### +# Additional fields for Change Material (ItemLevel: 26): +# +# BaseRate Base rate (in n/10%). (Default: 1000) +# Make: List of item amounts with their individual rate produced by Change Material. (Default: null) +# - Amount Amount of item created (unique to the list). +# Rate Rate to create the Amount (in n/10%). Default: 1000. 0 to remove on import. +########################################################################### diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 3a7ff9bef0..28d65c44a6 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -6383,37 +6383,34 @@ void clif_skill_estimation(map_session_data *sd,struct block_list *dst) void clif_skill_produce_mix_list( map_session_data *sd, int skill_id, int trigger ){ nullpo_retv(sd); - int fd = sd->fd; - - if( !session_isActive( fd ) ){ - return; - } - if (sd->menuskill_id == skill_id) return; //Avoid resending the menu twice or more times... if (skill_id == GC_CREATENEWPOISON) skill_id = GC_RESEARCHNEWPOISON; - WFIFOHEAD( fd, sizeof( struct PACKET_ZC_MAKABLEITEMLIST ) + MAX_SKILL_PRODUCE_DB * sizeof( struct PACKET_ZC_MAKABLEITEMLIST_sub ) ); - struct PACKET_ZC_MAKABLEITEMLIST *p = (struct PACKET_ZC_MAKABLEITEMLIST *)WFIFOP( fd, 0 ); + struct PACKET_ZC_MAKABLEITEMLIST *p = (struct PACKET_ZC_MAKABLEITEMLIST *)packet_buffer; p->packetType = 0x18d; int count = 0; - for( int i = 0; i < MAX_SKILL_PRODUCE_DB; i++ ){ - if (skill_can_produce_mix(sd,skill_produce_db[i].nameid, trigger, 1) && - (skill_id <= 0 || skill_produce_db[i].req_skill == skill_id) - ) - { - p->items[count].itemId = client_nameid( skill_produce_db[i].nameid ); - p->items[count].material[0] = 0; - p->items[count].material[1] = 0; - p->items[count].material[2] = 0; - count++; + for (const auto &itemlvit : skill_produce_db) { + if (itemlvit.second->data.empty()) + continue; + for (const auto &datait : itemlvit.second->data) { + if (skill_can_produce_mix(sd, datait.second->nameid, trigger, 1) != nullptr && + (skill_id <= 0 || (skill_id > 0 && datait.second->req_skill == skill_id)) + ) + { + p->items[count].itemId = client_nameid( datait.second->nameid ); + p->items[count].material[0] = 0; + p->items[count].material[1] = 0; + p->items[count].material[2] = 0; + count++; + } } } p->packetLength = sizeof( struct PACKET_ZC_MAKABLEITEMLIST ) + count * sizeof( struct PACKET_ZC_MAKABLEITEMLIST_sub ); - WFIFOSET( fd, p->packetLength ); + clif_send( p, p->packetLength, &sd->bl, SELF ); if( count > 0 ){ sd->menuskill_id = skill_id; @@ -6442,31 +6439,28 @@ void clif_cooking_list( map_session_data *sd, int trigger, uint16 skill_id, int return; } - int fd = sd->fd; - - if( !session_isActive( fd ) ){ - return; - } - - WFIFOHEAD( fd, sizeof( struct PACKET_ZC_MAKINGITEM_LIST ) + MAX_SKILL_PRODUCE_DB * sizeof( struct PACKET_ZC_MAKINGITEM_LIST_sub ) ); - struct PACKET_ZC_MAKINGITEM_LIST *p = (struct PACKET_ZC_MAKINGITEM_LIST *)WFIFOP( fd, 0 ); + struct PACKET_ZC_MAKINGITEM_LIST *p = (struct PACKET_ZC_MAKINGITEM_LIST *)packet_buffer; p->packetType = 0x25a; p->makeItem = list_type; // list type int count = 0; - for( int i = 0; i < MAX_SKILL_PRODUCE_DB; i++ ){ - if( !skill_can_produce_mix( sd, skill_produce_db[i].nameid, trigger, qty ) ){ + for (const auto &itemlvit : skill_produce_db) { + if (itemlvit.second->data.empty()) continue; - } + for (const auto &datait : itemlvit.second->data) { + if( skill_can_produce_mix( sd, datait.second->nameid, trigger, qty ) == nullptr ){ + continue; + } - p->items[count].itemId = client_nameid( skill_produce_db[i].nameid ); - count++; + p->items[count].itemId = client_nameid( datait.second->nameid ); + count++; + } } if( count > 0 || skill_id == AM_PHARMACY ){ p->packetLength = sizeof( struct PACKET_ZC_MAKINGITEM_LIST ) + count * sizeof( struct PACKET_ZC_MAKINGITEM_LIST_sub ); - WFIFOSET( fd, p->packetLength ); + clif_send( p, p->packetLength, &sd->bl, SELF ); sd->menuskill_id = skill_id; sd->menuskill_val = trigger; @@ -6477,7 +6471,7 @@ void clif_cooking_list( map_session_data *sd, int trigger, uint16 skill_id, int clif_msg_skill( sd, skill_id, INVENTORY_SPACE_FULL ); #else p->packetLength = sizeof( struct PACKET_ZC_MAKINGITEM_LIST ) + count * sizeof( struct PACKET_ZC_MAKINGITEM_LIST_sub ); - WFIFOSET( fd, p->packetLength ); + clif_send( p, p->packetLength, &sd->bl, SELF ); #endif } } @@ -13230,10 +13224,10 @@ void clif_parse_ProduceMix(int fd,map_session_data *sd){ return; } - int produce_idx; + std::shared_ptr produce = skill_can_produce_mix(sd,p->itemId,sd->menuskill_val, 1); - if( (produce_idx = skill_can_produce_mix(sd,p->itemId,sd->menuskill_val, 1)) ) - skill_produce_mix(sd,0,p->itemId,p->material[0],p->material[1],p->material[2],1,produce_idx-1); + if( produce != nullptr ) + skill_produce_mix(sd,0,p->itemId,p->material[0],p->material[1],p->material[2],1,produce); clif_menuskill_clear(sd); } @@ -13253,7 +13247,6 @@ void clif_parse_Cooking(int fd,map_session_data *sd) { const struct PACKET_CZ_REQ_MAKINGITEM *p = (struct PACKET_CZ_REQ_MAKINGITEM *)RFIFOP( fd, 0 ); int amount = sd->menuskill_val2 ? sd->menuskill_val2 : 1; - short food_idx = -1; if( p->type == 6 && sd->menuskill_id != GN_MIX_COOKING && sd->menuskill_id != GN_S_PHARMACY ) return; @@ -13264,8 +13257,11 @@ void clif_parse_Cooking(int fd,map_session_data *sd) { clif_menuskill_clear(sd); return; } - if( (food_idx = skill_can_produce_mix(sd,p->itemId,sd->menuskill_val, amount)) ) - skill_produce_mix(sd,(p->type>1?sd->menuskill_id:0),p->itemId,0,0,0,amount,food_idx-1); + + std::shared_ptr produce = skill_can_produce_mix(sd,p->itemId,sd->menuskill_val, amount); + + if( produce != nullptr ) + skill_produce_mix(sd,(p->type>1?sd->menuskill_id:0),p->itemId,0,0,0,amount,produce); clif_menuskill_clear(sd); } @@ -13457,7 +13453,7 @@ void clif_parse_SelectArrow(int fd,map_session_data *sd) { skill_arrow_create(sd,p->itemId); break; case SA_CREATECON: - skill_produce_mix(sd,SA_CREATECON,p->itemId,0,0,0,1,-1); + skill_produce_mix(sd,SA_CREATECON,p->itemId,0,0,0,1, nullptr); break; case GC_POISONINGWEAPON: skill_poisoningweapon(sd,p->itemId); @@ -19521,10 +19517,14 @@ void clif_elementalconverter_list( map_session_data *sd ){ p->packetType = HEADER_ZC_MAKINGARROW_LIST; int count = 0; - for( int i = 0; i < MAX_SKILL_PRODUCE_DB; i++ ){ - if( skill_can_produce_mix( sd, skill_produce_db[i].nameid, 23, 1 ) ){ - p->items[count].itemId = client_nameid( skill_produce_db[i].nameid ); - count++; + for (const auto &itemlvit : skill_produce_db) { + if (itemlvit.second->data.empty()) + continue; + for (const auto &datait : itemlvit.second->data) { + if( skill_can_produce_mix( sd, datait.second->nameid, 23, 1 ) ){ + p->items[count].itemId = client_nameid( datait.second->nameid ); + count++; + } } } diff --git a/src/map/map-server.vcxproj b/src/map/map-server.vcxproj index b1ef40a27c..c7e7ebff1e 100644 --- a/src/map/map-server.vcxproj +++ b/src/map/map-server.vcxproj @@ -363,12 +363,11 @@ - + - diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 1b78c58815..067ebd2276 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -64,26 +64,11 @@ struct skill_usave { uint16 skill_id, skill_lv; }; -struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB]; -static unsigned short skill_produce_count; - AbraDatabase abra_db; +MagicMushroomDatabase magic_mushroom_db; ReadingSpellbookDatabase reading_spellbook_db; SkillArrowDatabase skill_arrow_db; - -#define MAX_SKILL_CHANGEMATERIAL_DB 75 -#define MAX_SKILL_CHANGEMATERIAL_SET 3 -struct s_skill_changematerial_db { - t_itemid nameid; - unsigned short rate; - unsigned short qty[MAX_SKILL_CHANGEMATERIAL_SET]; - unsigned short qty_rate[MAX_SKILL_CHANGEMATERIAL_SET]; -}; -struct s_skill_changematerial_db skill_changematerial_db[MAX_SKILL_CHANGEMATERIAL_DB]; -static unsigned short skill_changematerial_count; - - -MagicMushroomDatabase magic_mushroom_db; +SkillProduceDatabase skill_produce_db; struct s_skill_unit_layout skill_unit_layout[MAX_SKILL_UNIT_LAYOUT]; int firewall_unit_pos; @@ -9204,7 +9189,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case AL_HOLYWATER: if(sd) { - if (skill_produce_mix(sd, skill_id, ITEMID_HOLY_WATER, 0, 0, 0, 1, -1)) { + if (skill_produce_mix(sd, skill_id, ITEMID_HOLY_WATER, 0, 0, 0, 1, nullptr)) { struct skill_unit* su; if ((su = map_find_skill_unit_oncell(bl, bl->x, bl->y, NJ_SUITON, NULL, 0)) != NULL) skill_delunit(su); @@ -9239,7 +9224,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case ASC_CDP: if(sd) { - if(skill_produce_mix(sd, skill_id, ITEMID_POISON_BOTTLE, 0, 0, 0, 1, -1)) //Produce a Poison Bottle. + if(skill_produce_mix(sd, skill_id, ITEMID_POISON_BOTTLE, 0, 0, 0, 1, nullptr)) //Produce a Poison Bottle. clif_skill_nodamage(src,bl,skill_id,skill_lv,1); else clif_skill_fail(sd,skill_id,USESKILL_FAIL_STUFF_INSUFFICIENT,0); @@ -9429,7 +9414,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (sd) { clif_skill_nodamage(src,bl,skill_id,skill_lv,1); //Prepare 200 White Potions. - if (!skill_produce_mix(sd, skill_id, ITEMID_WHITE_POTION, 0, 0, 0, 200, -1)) + if (!skill_produce_mix(sd, skill_id, ITEMID_WHITE_POTION, 0, 0, 0, 200, nullptr)) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); } break; @@ -9437,29 +9422,33 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (sd) { clif_skill_nodamage(src,bl,skill_id,skill_lv,1); //Prepare 200 Slim White Potions. - if (!skill_produce_mix(sd, skill_id, ITEMID_WHITE_SLIM_POTION, 0, 0, 0, 200, -1)) + if (!skill_produce_mix(sd, skill_id, ITEMID_WHITE_SLIM_POTION, 0, 0, 0, 200, nullptr)) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); } break; case AM_TWILIGHT3: if (sd) { int ebottle = pc_search_inventory(sd,ITEMID_EMPTY_BOTTLE); - short alcohol_idx = -1, acid_idx = -1, fire_idx = -1; + + std::shared_ptr produce_alcohol = skill_can_produce_mix(sd,ITEMID_ALCOHOL,-1, 100); + std::shared_ptr produce_acid = skill_can_produce_mix(sd,ITEMID_ACID_BOTTLE,-1, 50); + std::shared_ptr produce_fire = skill_can_produce_mix(sd,ITEMID_FIRE_BOTTLE,-1, 50); + if( ebottle >= 0 ) ebottle = sd->inventory.u.items_inventory[ebottle].amount; //check if you can produce all three, if not, then fail: - if (!(alcohol_idx = skill_can_produce_mix(sd,ITEMID_ALCOHOL,-1, 100)) //100 Alcohol - || !(acid_idx = skill_can_produce_mix(sd,ITEMID_ACID_BOTTLE,-1, 50)) //50 Acid Bottle - || !(fire_idx = skill_can_produce_mix(sd,ITEMID_FIRE_BOTTLE,-1, 50)) //50 Flame Bottle + if (produce_alcohol == nullptr //100 Alcohol + || produce_acid == nullptr //50 Acid Bottle + || produce_fire == nullptr //50 Flame Bottle || ebottle < 200 //200 empty bottle are required at total. ) { clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; } clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - skill_produce_mix(sd, skill_id, ITEMID_ALCOHOL, 0, 0, 0, 100, alcohol_idx-1); - skill_produce_mix(sd, skill_id, ITEMID_ACID_BOTTLE, 0, 0, 0, 50, acid_idx-1); - skill_produce_mix(sd, skill_id, ITEMID_FIRE_BOTTLE, 0, 0, 0, 50, fire_idx-1); + skill_produce_mix(sd, skill_id, ITEMID_ALCOHOL, 0, 0, 0, 100, produce_alcohol); + skill_produce_mix(sd, skill_id, ITEMID_ACID_BOTTLE, 0, 0, 0, 50, produce_acid); + skill_produce_mix(sd, skill_id, ITEMID_FIRE_BOTTLE, 0, 0, 0, 50, produce_fire); } break; case SA_DISPELL: @@ -10818,7 +10807,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case AB_ANCILLA: if( sd ) { clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - skill_produce_mix(sd, skill_id, ITEMID_ANCILLA, 0, 0, 0, 1, -1); + skill_produce_mix(sd, skill_id, ITEMID_ANCILLA, 0, 0, 0, 1, nullptr); } break; @@ -21406,74 +21395,83 @@ void skill_unit_move_unit_group(std::shared_ptr group, int16 * @param nameid Product requested * @param trigger Trigger criteria to match will 'ItemLv' * @param qty Amount of item will be created - * @return 0 If failed or Index+1 of item found on skill_produce_db[] + * @return nullptr If failed or s_skill_produce_db_entry on success */ -short skill_can_produce_mix(map_session_data *sd, t_itemid nameid, int trigger, int qty) +std::shared_ptr skill_can_produce_mix(map_session_data *sd, t_itemid nameid, int trigger, int qty) { - nullpo_ret(sd); + if (sd == nullptr) + return nullptr; - if (!item_db.exists(nameid)) - return 0; + if (!nameid || !item_db.exists(nameid)) + return nullptr; - short i, j; + std::shared_ptr produce = nullptr; - for (i = 0; i < MAX_SKILL_PRODUCE_DB; i++) { - if (skill_produce_db[i].nameid == nameid) { - if ((j = skill_produce_db[i].req_skill) > 0 && - pc_checkskill(sd,j) < skill_produce_db[i].req_skill_lv) - continue; // must iterate again to check other skills that produce it. [malufett] - if (j > 0 && sd->menuskill_id > 0 && sd->menuskill_id != j) - continue; // special case - break; + for (const auto &itemlvit : skill_produce_db) { + if (itemlvit.second->data.empty()) + continue; + for (const auto &datait : itemlvit.second->data) { + if (datait.second->nameid == nameid) { + if (datait.second->req_skill > 0 && pc_checkskill(sd, datait.second->req_skill) < datait.second->req_skill_lv) + continue; // must iterate again to check other skills that produce it. [malufett] + if (datait.second->req_skill > 0 && sd->menuskill_id > 0 && sd->menuskill_id != datait.second->req_skill) + continue; // special case + produce = datait.second; + break; + } } + if (produce != nullptr) + break; } if (nameid == ITEMID_HOMUNCULUS_SUPPLEMENT) { // Temporary check since the produce_db specifically wants the Pharmacy skill to use if (pc_checkskill(sd, AM_BIOETHICS) == 0) - return 0; + return nullptr; } - if (i >= MAX_SKILL_PRODUCE_DB) - return 0; + if (produce == nullptr) + return nullptr; // Cannot carry the produced stuff if (pc_checkadditem(sd, nameid, qty) == CHKADDITEM_OVERAMOUNT) - return 0; + return nullptr; // Matching the requested produce list if (trigger >= 0) { if (trigger > 20) { // Non-weapon, non-food item (itemlv must match) - if (skill_produce_db[i].itemlv != trigger) - return 0; + if (produce->itemlv != trigger) + return nullptr; } else if (trigger > 10) { // Food (any item level between 10 and 20 will do) - if (skill_produce_db[i].itemlv <= 10 || skill_produce_db[i].itemlv > 20) - return 0; + if (produce->itemlv <= 10 || produce->itemlv > 20) + return nullptr; } else { // Weapon (itemlv must be higher or equal) - if (skill_produce_db[i].itemlv > trigger) - return 0; + if (produce->itemlv > trigger) + return nullptr; } } - // Check on player's inventory - for (j = 0; j < MAX_PRODUCE_RESOURCE; j++) { - t_itemid nameid_produce; + if (produce->materials.empty()) + return produce; - if (!(nameid_produce = skill_produce_db[i].mat_id[j])) - continue; - if (skill_produce_db[i].mat_amount[j] == 0) { - if (pc_search_inventory(sd,nameid_produce) < 0) - return 0; + // Check on player's inventory + for (const auto &it : produce->materials) { + if (!item_db.exists(it.first)) + return nullptr; + if (it.second == 0) { + if (pc_search_inventory(sd, it.first) < 0) + return nullptr; } else { unsigned short idx, amt; for (idx = 0, amt = 0; idx < MAX_INVENTORY; idx++) - if (sd->inventory.u.items_inventory[idx].nameid == nameid_produce) + if (sd->inventory.u.items_inventory[idx].nameid == it.first) amt += sd->inventory.u.items_inventory[idx].amount; - if (amt < qty * skill_produce_db[i].mat_amount[j]) - return 0; + if (amt < qty * it.second) + return nullptr; } } - return i + 1; + + return produce; } /** @@ -21485,41 +21483,40 @@ short skill_can_produce_mix(map_session_data *sd, t_itemid nameid, int trigger, * @param slot2 * @param slot3 * @param qty Amount of requested item - * @param produce_idx Index of produce entry in skill_produce_db[]. (Optional. Assumed the requirements are complete, checked somewhere) + * @param s_skill_produce_db_entry. (Optional. Assumed the requirements are complete, checked somewhere) * @return True is success, False if failed */ -bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, int slot1, int slot2, int slot3, int qty, short produce_idx) +bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, int slot1, int slot2, int slot3, int qty, std::shared_ptr produce) { - int slot[3]; - int i, sc, ele, idx, equip, wlv, make_per = 0, flag = 0, skill_lv = 0; - int num = -1; // exclude the recipe - struct status_data *status; - nullpo_ret(sd); - status = status_get_status_data(&sd->bl); + if (!item_db.exists(nameid)) + return false; + + int i, sc, ele, equip, wlv, make_per = 0, flag = 0, skill_lv = 0; + int num = -1; // exclude the recipe + struct status_data *status = status_get_status_data(&sd->bl); if( sd->skill_id_old == skill_id ) skill_lv = sd->skill_lv_old; - if (produce_idx == -1) { - if( !(idx = skill_can_produce_mix(sd,nameid,-1, qty)) ) + if (produce == nullptr) { + produce = skill_can_produce_mix(sd,nameid,-1, qty); + if( produce == nullptr ) return false; - - idx--; } - else - idx = produce_idx; if (qty < 1) qty = 1; if (!skill_id) //A skill can be specified for some override cases. - skill_id = skill_produce_db[idx].req_skill; + skill_id = produce->req_skill; if( skill_id == GC_RESEARCHNEWPOISON ) skill_id = GC_CREATENEWPOISON; + int slot[3]; + slot[0] = slot1; slot[1] = slot2; slot[2] = slot3; @@ -21542,30 +21539,32 @@ bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, i } } - for (i = 0; i < MAX_PRODUCE_RESOURCE; i++) { - short x, j; - t_itemid id = skill_produce_db[idx].mat_id[i]; + if (!produce->materials.empty()) { + for (const auto &mat : produce->materials) { + short x, j; + t_itemid id = mat.first; - if (!item_db.exists(id)) - continue; - num++; - x = (skill_id == RK_RUNEMASTERY ? 1 : qty) * skill_produce_db[idx].mat_amount[i]; - do { - int y = 0; + if (!item_db.exists(id)) + continue; + num++; + x = (skill_id == RK_RUNEMASTERY ? 1 : qty) * mat.second; + do { + int y = 0; - j = pc_search_inventory(sd,id); + j = pc_search_inventory(sd,id); - if (j >= 0) { - y = sd->inventory.u.items_inventory[j].amount; - if (y > x) - y = x; - pc_delitem(sd,j,y,0,0,LOG_TYPE_PRODUCE); - } else { - ShowError("skill_produce_mix: material item error\n"); - return false; - } - x -= y; - } while( j >= 0 && x > 0 ); + if (j >= 0) { + y = sd->inventory.u.items_inventory[j].amount; + if (y > x) + y = x; + pc_delitem(sd,j,y,0,0,LOG_TYPE_PRODUCE); + } else { + ShowError("skill_produce_mix: material item error\n"); + return false; + } + x -= y; + } while( j >= 0 && x > 0 ); + } } if ((equip = (itemdb_isequip(nameid) && skill_id != GN_CHANGEMATERIAL && skill_id != GN_MAKEBOMB)) && itemdb_type(nameid) == IT_WEAPON ) @@ -21698,12 +21697,7 @@ bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, i qty = 1+rnd()%pc_checkskill(sd,GC_RESEARCHNEWPOISON); break; case GN_CHANGEMATERIAL: - for (i = 0; i < MAX_SKILL_CHANGEMATERIAL_DB; i++) { - if (skill_changematerial_db[i].nameid == nameid) { - make_per = skill_changematerial_db[i].rate * 10; - break; - } - } + make_per = produce->baserate * 10; break; case GN_S_PHARMACY: { @@ -21828,7 +21822,7 @@ bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, i + 20 * (sd->status.base_level + 1) + 20 * (status->dex + 1) + 100 * (rnd()%(30+5*(sd->cook_mastery/400) - (6+sd->cook_mastery/80)) + (6+sd->cook_mastery/80)) - - 400 * (skill_produce_db[idx].itemlv - 11 + 1) + - 400 * (produce->itemlv - 11 + 1) - 10 * (100 - status->luk + 1) - 500 * (num - 1) - 100 * (rnd()%4 + 1); @@ -21984,36 +21978,33 @@ bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, i clif_misceffect(&sd->bl,3); break; default: //Those that don't require a skill? - if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20) { //Cooking items. + if (produce->itemlv > 10 && produce->itemlv <= 20) { //Cooking items. clif_specialeffect(&sd->bl, EF_COOKING_OK, AREA); - pc_setparam(sd, SP_COOKMASTERY, sd->cook_mastery + ( 1 << ( (skill_produce_db[idx].itemlv - 11) / 2 ) ) * 5); + pc_setparam(sd, SP_COOKMASTERY, sd->cook_mastery + ( 1 << ( (produce->itemlv - 11) / 2 ) ) * 5); } break; } } if (skill_id == GN_CHANGEMATERIAL && tmp_item.amount) { //Success - int j, k = 0, l; + int k = 0, l; bool isStackable = itemdb_isstackable(tmp_item.nameid); - for (i = 0; i < MAX_SKILL_CHANGEMATERIAL_DB; i++) { - if (skill_changematerial_db[i].nameid == nameid){ - for (j = 0; j < MAX_SKILL_CHANGEMATERIAL_SET; j++){ - if (rnd()%1000 < skill_changematerial_db[i].qty_rate[j]){ - uint16 total_qty = qty * skill_changematerial_db[i].qty[j]; - tmp_item.amount = (isStackable ? total_qty : 1); - for (l = 0; l < total_qty; l += tmp_item.amount) { - if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) { - clif_additem(sd,0,0,flag); - if( battle_config.skill_drop_items_full ){ - map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0); - } + if (!produce->qty.empty()) { + for (const auto &qtyit : produce->qty) { + if (rnd()%1000 < qtyit.second){ + uint16 total_qty = qty * qtyit.first; + tmp_item.amount = (isStackable ? total_qty : 1); + for (l = 0; l < total_qty; l += tmp_item.amount) { + if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) { + clif_additem(sd,0,0,flag); + if( battle_config.skill_drop_items_full ){ + map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0); } } - k++; } + k++; } - break; } } if (k) { @@ -22138,10 +22129,10 @@ bool skill_produce_mix(map_session_data *sd, uint16 skill_id, t_itemid nameid, i clif_msg_skill(sd, skill_id, ITEM_PRODUCE_FAIL); break; default: - if (skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20 ) { //Cooking items. + if (produce->itemlv > 10 && produce->itemlv <= 20 ) { //Cooking items. clif_specialeffect(&sd->bl, EF_COOKING_FAIL, AREA); // todo: What in the world is this calculation - pc_setparam(sd, SP_COOKMASTERY, sd->cook_mastery - ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 )); + pc_setparam(sd, SP_COOKMASTERY, sd->cook_mastery - ( 1 << ((produce->itemlv - 11) / 2) ) - ( ( ( 1 << ((produce->itemlv - 11) / 2) ) >> 1 ) * 3 )); } break; } @@ -22483,49 +22474,54 @@ int skill_elementalanalysis(map_session_data* sd, int n, uint16 skill_lv, unsign } int skill_changematerial(map_session_data *sd, int n, unsigned short *item_list) { - int i, j, k, c, p = 0, amount; + int k, c, p = 0, amount; t_itemid nameid; nullpo_ret(sd); nullpo_ret(item_list); + uint16 item_lv = 26; + std::shared_ptr produce = skill_produce_db.find(item_lv); + if (produce == nullptr || produce->data.empty()) + return 0; + // Search for objects that can be created. - for( i = 0; i < MAX_SKILL_PRODUCE_DB; i++ ) { - if( skill_produce_db[i].itemlv == 26 && skill_produce_db[i].nameid > 0 ) { - p = 0; - do { - c = 0; - // Verification of overlap between the objects required and the list submitted. - for( j = 0; j < MAX_PRODUCE_RESOURCE; j++ ) { - if( skill_produce_db[i].mat_id[j] > 0 ) { - for( k = 0; k < n; k++ ) { - int idx = item_list[k*2+0]-2; + for (const auto &datait : produce->data) { + std::shared_ptr data = datait.second; - if( idx < 0 || idx >= MAX_INVENTORY ){ - return 0; - } + if (!item_db.exists(data->nameid)) + return 0; + if (data->materials.empty()) + return 0; - nameid = sd->inventory.u.items_inventory[idx].nameid; - amount = item_list[k*2+1]; - if( nameid > 0 && sd->inventory.u.items_inventory[idx].identify == 0 ){ - clif_msg_skill(sd,GN_CHANGEMATERIAL,ITEM_UNIDENTIFIED); - return 0; - } - if( nameid == skill_produce_db[i].mat_id[j] && (amount-p*skill_produce_db[i].mat_amount[j]) >= skill_produce_db[i].mat_amount[j] - && (amount-p*skill_produce_db[i].mat_amount[j])%skill_produce_db[i].mat_amount[j] == 0 ) // must be in exact amount - c++; // match - } + p = 0; + do { + c = 0; + // Verification of overlap between the objects required and the list submitted. + for (const auto &mat : data->materials) { + for( k = 0; k < n; k++ ) { + int idx = item_list[k*2]-2; + + if( idx < 0 || idx >= MAX_INVENTORY ){ + return 0; } - else - break; // No more items required + + nameid = sd->inventory.u.items_inventory[idx].nameid; + amount = item_list[k*2+1]; + if( nameid > 0 && sd->inventory.u.items_inventory[idx].identify == 0 ){ + clif_msg_skill(sd,GN_CHANGEMATERIAL,ITEM_UNIDENTIFIED); + return 0; + } + if (nameid == mat.first && (amount - p * mat.second) >= mat.second && (amount - p * mat.second) % mat.second == 0) // must be in exact amount + c++; // match } - p++; - } while(n == j && c == n); - p--; - if ( p > 0 ) { - skill_produce_mix(sd,GN_CHANGEMATERIAL,skill_produce_db[i].nameid,0,0,0,p,i); - return 1; } + p++; + } while(n == data->materials.size() && c == n); + p--; + if ( p > 0 ) { + skill_produce_mix(sd,GN_CHANGEMATERIAL,datait.second->nameid,0,0,0,p, datait.second); + return 1; } } @@ -24574,48 +24570,222 @@ static bool skill_parse_row_nocastdb(char* split[], int columns, int current) return true; } -/** Reads Produce db - * Structure: ProduceItemID,ItemLV,RequireSkill,Requireskill_lv,MaterialID1,MaterialAmount1,... +bool SkillProduceDatabase::add_itemconsumed(const ryml::NodeRef& node, std::shared_ptr &entry, bool isConsumed) { + for (const auto &it : node) { + if (this->nodeExists(it, "Clear")) { + std::string item_name; + + if (!this->asString(it, "Clear", item_name)) + return 0; + + std::shared_ptr item = item_db.search_aegisname(item_name.c_str()); + + if (item == nullptr) { + this->invalidWarning(it["Clear"], "Item %s does not exist.\n", item_name.c_str()); + return 0; + } + + if (entry->materials.erase(item->nameid) == 0) + this->invalidWarning(it["Clear"], "Item %s was not defined.\n", item_name.c_str()); + + continue; + } + + std::string item_name; + + if (!this->asString(it, "Item", item_name)) + return 0; + + std::shared_ptr item = item_db.search_aegisname(item_name.c_str()); + + if (item == nullptr) { + this->invalidWarning(it["Item"], "Item %s does not exist.\n", item_name.c_str()); + return 0; + } + + uint16 amount; + + if (!isConsumed) + amount = 0; + else { + if (!this->asUInt16Rate(it, "Amount", amount, MAX_AMOUNT)) + return 0; + } + + entry->materials[item->nameid] = amount; + } + return 1; +} + +const std::string SkillProduceDatabase::getDefaultLocation() { + return std::string(db_path) + "/produce_db.yml"; +} + +/** + * Reads and parses an entry from the produce_db. + * @param node: YAML node containing the entry. + * @return count of successfully parsed rows */ -static bool skill_parse_row_producedb(char* split[], int columns, int current) -{ - unsigned short x, y; - unsigned short id = atoi(split[0]); - t_itemid nameid = 0; - bool found = false; +uint64 SkillProduceDatabase::parseBodyNode(const ryml::NodeRef &node) { + uint16 itemlv; - if (id >= ARRAYLENGTH(skill_produce_db)) { - ShowError("skill_parse_row_producedb: Maximum db entries reached.\n"); - return false; + if (!this->asUInt16(node, "ItemLevel", itemlv)) + return 0; + + std::shared_ptr produce = this->find(itemlv); + bool exists = produce != nullptr; + + if (!exists) { + if (!this->nodesExist(node, { "Recipe" })) + return 0; + + produce = std::make_shared(); + produce->itemlv = itemlv; } - // Clear previous data, for importing support - memset(&skill_produce_db[id], 0, sizeof(skill_produce_db[id])); - // Import just for clearing/disabling from original data - if (!(nameid = strtoul(split[1], nullptr, 10))) { - //ShowInfo("skill_parse_row_producedb: Product list with ID %d removed from list.\n", id); - return true; + t_itemid nameid; + const ryml::NodeRef &subNode = node["Recipe"]; + + for (const auto &subit : subNode) { + std::string produced_name; + + if (this->nodeExists(subit, "Clear")) { + if (!this->asString(subit, "Clear", produced_name)) + return 0; + + std::shared_ptr item = item_db.search_aegisname(produced_name.c_str()); + + if (item == nullptr) { + this->invalidWarning(subit["Clear"], "Item %s does not exist.\n", produced_name.c_str()); + return 0; + } + + nameid = item->nameid; + + if (produce->data.erase(nameid) == 0) + this->invalidWarning(subit["Clear"], "Item %s was not defined.\n", produced_name.c_str()); + + continue; + } + + if (!this->asString(subit, "Product", produced_name)) + return 0; + + std::shared_ptr item = item_db.search_aegisname(produced_name.c_str()); + + if (item == nullptr) { + this->invalidWarning(subit["Product"], "Item %s does not exist.\n", produced_name.c_str()); + return 0; + } + + nameid = item->nameid; + + bool id_exists = produce->data.count(nameid) != 0; + std::shared_ptr entry; + + if (id_exists) + entry = produce->data[nameid]; + else { + entry = std::make_shared(); + entry->nameid = nameid; + } + + entry->itemlv = itemlv; + + if (this->nodeExists(subit, "BaseRate")) { // note: BaseRate is only used for skill changematerial (itemlv 26) + uint16 baserate; + + if (!this->asUInt16Rate(subit, "BaseRate", baserate, 1000)) + return 0; + + entry->baserate = baserate; + } else { + if (!id_exists) { + entry->baserate = 1000; + } + } + + if (this->nodeExists(subit, "Make")) { // note: Quantity is only used for skill changematerial (itemlv 26) + const ryml::NodeRef &QuantityNode = subit["Make"]; + + for (const auto &Quantityit : QuantityNode) { + uint16 amount; + + if (!this->asUInt16Rate(Quantityit, "Amount", amount, MAX_AMOUNT)) + return 0; + + uint16 rate; + + if (this->nodeExists(Quantityit, "Rate")) { + if (!this->asUInt16(Quantityit, "Rate", rate)) + return 0; + + if (rate == 0) { + if (entry->qty.erase(amount) == 0) + this->invalidWarning(Quantityit["Rate"], "Amount %hu was not defined.\n", amount); + continue; + } + if (rate > 1000) { + this->invalidWarning(Quantityit["Rate"], "Rate %hu can't be higher than 1000, capping.\n", rate); + rate = 1000; + } + } else { + rate = 1000; + } + + entry->qty[amount] = rate; + } + } + + if (this->nodeExists(subit, "SkillName")) { + std::string skill_name; + + if (!this->asString(subit, "SkillName", skill_name)) + return 0; + + uint16 skill_id = skill_name2id(skill_name.c_str()); + + if (!skill_id) { + this->invalidWarning(subit["SkillName"], "Invalid skill name \"%s\", skipping.\n", skill_name.c_str()); + return 0; + } + + entry->req_skill = skill_id; + } + + if (this->nodeExists(subit, "SkillLevel")) { + uint16 skill_lv; + + if (!this->asUInt16(subit, "SkillLevel", skill_lv)) + return 0; + + entry->req_skill_lv = static_cast(skill_lv); + } else { + if (!id_exists) { + entry->req_skill_lv = 1; + } + } + + if (this->nodeExists(subit, "Consumed")) { + if (!this->add_itemconsumed(subit["Consumed"], entry, true)) + return 0; + } + + if (this->nodeExists(subit, "NotConsumed")) { + if (!this->add_itemconsumed(subit["NotConsumed"], entry, false)) + return 0; + } + + if (!id_exists) { + produce->data.insert({ nameid, entry }); + this->total_id++; + } } - if (!item_db.exists(nameid)) { - ShowError("skill_parse_row_producedb: Invalid item %u.\n", nameid); - return false; - } + if (!exists) + this->put(itemlv, produce); - skill_produce_db[id].nameid = nameid; - skill_produce_db[id].itemlv = atoi(split[2]); - skill_produce_db[id].req_skill = atoi(split[3]); - skill_produce_db[id].req_skill_lv = atoi(split[4]); - - for (x = 5, y = 0; x+1 < columns && split[x] && split[x+1] && y < MAX_PRODUCE_RESOURCE; x += 2, y++) { - skill_produce_db[id].mat_id[y] = strtoul(split[x], nullptr, 10); - skill_produce_db[id].mat_amount[y] = atoi(split[x+1]); - } - - if (!found) - skill_produce_count++; - - return true; + return 1; } const std::string SkillArrowDatabase::getDefaultLocation() { @@ -24764,62 +24934,6 @@ uint64 AbraDatabase::parseBodyNode(const ryml::NodeRef& node) { return 1; } -/** Reads change material db - * Structure: ProductID,BaseRate,MakeAmount1,MakeAmountRate1...,MakeAmount5,MakeAmountRate5 - */ -static bool skill_parse_row_changematerialdb(char* split[], int columns, int current) -{ - uint16 id = atoi(split[0]); - t_itemid nameid = strtoul(split[1], nullptr, 10); - short rate = atoi(split[2]); - bool found = false; - int x, y; - - if (id >= MAX_SKILL_CHANGEMATERIAL_DB) { - ShowError("skill_parse_row_changematerialdb: Maximum amount of entries reached (%d), increase MAX_SKILL_CHANGEMATERIAL_DB\n",MAX_SKILL_CHANGEMATERIAL_DB); - return false; - } - - // Clear previous data, for importing support - if (skill_changematerial_db[id].nameid > 0) { - found = true; - memset(&skill_changematerial_db[id], 0, sizeof(skill_changematerial_db[id])); - } - - // Import just for clearing/disabling from original data - // NOTE: If import for disabling, better disable list from produce_db instead of here, or creation just failed with deleting requirements. - if (nameid == 0) { - memset(&skill_changematerial_db[id], 0, sizeof(skill_changematerial_db[id])); - //ShowInfo("skill_parse_row_changematerialdb: Change Material list with ID %d removed from list.\n", id); - return true; - } - - // Entry must be exists in skill_produce_db and with required skill GN_CHANGEMATERIAL - for (x = 0; x < MAX_SKILL_PRODUCE_DB; x++) { - if (skill_produce_db[x].nameid == nameid) - if( skill_produce_db[x].req_skill == GN_CHANGEMATERIAL ) - break; - } - - if (x >= MAX_SKILL_PRODUCE_DB) { - ShowError("skill_parse_row_changematerialdb: Not supported item ID (%u) for Change Material. \n", nameid); - return false; - } - - skill_changematerial_db[id].nameid = nameid; - skill_changematerial_db[id].rate = rate; - - for (x = 3, y = 0; x+1 < columns && split[x] && split[x+1] && y < MAX_SKILL_CHANGEMATERIAL_SET; x += 2, y++) { - skill_changematerial_db[id].qty[y] = atoi(split[x]); - skill_changematerial_db[id].qty_rate[y] = atoi(split[x+1]); - } - - if (!found) - skill_changematerial_count++; - - return true; -} - /** * Reads skill damage adjustment * @author [Lilith] @@ -24900,10 +25014,6 @@ static void skill_readdb(void) { //add other path here }; - memset(skill_produce_db,0,sizeof(skill_produce_db)); - memset(skill_changematerial_db,0,sizeof(skill_changematerial_db)); - skill_produce_count = skill_changematerial_count = 0; - skill_db.load(); for(i=0; i 0); - - sv_readdb(dbsubpath2, "produce_db.txt" , ',', 5, 5+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill_parse_row_producedb, i > 0); - sv_readdb(dbsubpath1, "skill_changematerial_db.txt" , ',', 5, 5+2*MAX_SKILL_CHANGEMATERIAL_SET, MAX_SKILL_CHANGEMATERIAL_DB, skill_parse_row_changematerialdb, i > 0); sv_readdb(dbsubpath1, "skill_damage_db.txt" , ',', 4, 3+SKILLDMG_MAX, -1, skill_parse_row_skilldamage, i > 0); aFree(dbsubpath1); @@ -24934,6 +25041,7 @@ static void skill_readdb(void) { magic_mushroom_db.load(); reading_spellbook_db.load(); skill_arrow_db.load(); + skill_produce_db.load(); skill_init_unit_layout(); skill_init_nounit_layout(); @@ -24945,6 +25053,7 @@ void skill_reload (void) { magic_mushroom_db.clear(); reading_spellbook_db.clear(); skill_arrow_db.clear(); + skill_produce_db.clear(); skill_readdb(); @@ -24989,6 +25098,7 @@ void do_final_skill(void) magic_mushroom_db.clear(); reading_spellbook_db.clear(); skill_arrow_db.clear(); + skill_produce_db.clear(); db_destroy(skillunit_db); db_destroy(skillusave_db); diff --git a/src/map/skill.hpp b/src/map/skill.hpp index 5adc61565b..fd9ca3e179 100644 --- a/src/map/skill.hpp +++ b/src/map/skill.hpp @@ -28,8 +28,6 @@ struct s_skill_unit_group; struct status_change_entry; class status_change; -#define MAX_SKILL_PRODUCE_DB 300 /// Max Produce DB -#define MAX_PRODUCE_RESOURCE 12 /// Max Produce requirements #define MAX_SKILL_LEVEL 13 /// Max Skill Level (for skill_db storage) #define MAX_MOBSKILL_LEVEL 100 /// Max monster skill level (on skill usage) #define MAX_SKILL_CRIMSON_MARKER 3 /// Max Crimson Marker targets (RL_C_MARKER) @@ -439,15 +437,38 @@ enum e_skill_blown { }; /// Create Database item -struct s_skill_produce_db { +struct s_skill_produce_db_entry { t_itemid nameid; /// Product ID - unsigned short req_skill; /// Required Skill - unsigned char req_skill_lv, /// Required Skill Level + uint16 req_skill; /// Required Skill + uint16 req_skill_lv, /// Required Skill Level itemlv; /// Item Level - t_itemid mat_id[MAX_PRODUCE_RESOURCE]; /// Materials needed - unsigned short mat_amount[MAX_PRODUCE_RESOURCE]; /// Amount of each materials + std::unordered_map materials; + + // additional rates/quantity data for skill_changematerial + uint16 baserate; + std::unordered_map qty; }; -extern struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB]; + +struct s_skill_produce_db { + uint16 itemlv; /// Item Level + std::unordered_map> data; /// item, entry +}; + +class SkillProduceDatabase : public TypesafeYamlDatabase { +private: + uint16 total_id = 0; + +public: + SkillProduceDatabase() : TypesafeYamlDatabase("PRODUCE_DB", 1) { + + } + + const std::string getDefaultLocation() override; + uint64 parseBodyNode(const ryml::NodeRef& node) override; + bool add_itemconsumed(const ryml::NodeRef& node, std::shared_ptr &entry, bool isConsumed); +}; + +extern SkillProduceDatabase skill_produce_db; /// Creating database arrow struct s_skill_arrow_db { @@ -621,8 +642,8 @@ bool skill_isNotOk_mercenary(uint16 skill_id, s_mercenary_data *md); bool skill_isNotOk_npcRange(struct block_list *src, uint16 skill_id, uint16 skill_lv, int pos_x, int pos_y); // Item creation -short skill_can_produce_mix( map_session_data *sd, t_itemid nameid, int trigger, int qty); -bool skill_produce_mix( map_session_data *sd, uint16 skill_id, t_itemid nameid, int slot1, int slot2, int slot3, int qty, short produce_idx ); +std::shared_ptr skill_can_produce_mix(map_session_data *sd, t_itemid nameid, int trigger, int qty); +bool skill_produce_mix( map_session_data *sd, uint16 skill_id, t_itemid nameid, int slot1, int slot2, int slot3, int qty, std::shared_ptr produce ); bool skill_arrow_create( map_session_data *sd, t_itemid nameid); diff --git a/src/tool/csv2yaml.cpp b/src/tool/csv2yaml.cpp index 2787f560c3..a216feb302 100644 --- a/src/tool/csv2yaml.cpp +++ b/src/tool/csv2yaml.cpp @@ -156,6 +156,16 @@ static void skilltree_txt_data(const std::string &modePath, const std::string &f sv_readdb(modePath.c_str(), "skill_tree.txt", ',', 3 + MAX_PC_SKILL_REQUIRE * 2, 5 + MAX_PC_SKILL_REQUIRE * 2, -1, pc_readdb_skilltree, false); } +// Produce database data to memory +static void produce_txt_data(const std::string &modePath, const std::string &fixedPath) { + skill_produce.clear(); + + if (fileExists(modePath + "/produce_db.txt")) + sv_readdb(modePath.c_str(), "produce_db.txt", ',', 5, 5+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill_parse_row_producedb, false); + if (fileExists(fixedPath + "/skill_changematerial_db.txt")) + sv_readdb(fixedPath.c_str(), "skill_changematerial_db.txt", ',', 5, 5+2*MAX_SKILL_CHANGEMATERIAL_SET, MAX_SKILL_CHANGEMATERIAL_DB, skill_parse_row_changematerialdb, false); +} + template bool process( const std::string& type, uint32 version, const std::vector& paths, const std::string& name, Func lambda, const std::string& rename = "" ){ for( const std::string& path : paths ){ @@ -560,13 +570,28 @@ bool Csv2YamlTool::initialize( int argc, char* argv[] ){ })) { return 0; } - + produce_txt_data(path_db_mode, path_db); + if (!process("PRODUCE_DB", 1, { path_db_mode }, "produce_db", [](const std::string &path, const std::string &name_ext) -> bool { + return skill_producedb_yaml(); + })) { + return 0; + } + + produce_txt_data(path_db_import, path_db_import); + if (!process("PRODUCE_DB", 1, { path_db_import }, "produce_db", [](const std::string &path, const std::string &name_ext) -> bool { + return skill_producedb_yaml(); + })) { + return 0; + } + + // TODO: add implementations ;-) + homunculus_txt_data(path_db_import, path_db_import); if (!process("HOMUNCULUS_DB", 1, { path_db_import }, "homunculus_db", [](const std::string& path, const std::string& name_ext) -> bool { return sv_readdb(path.c_str(), name_ext.c_str(), ',', 50, 50, MAX_HOMUNCULUS_CLASS, read_homunculusdb, false); })) { - return 0; - } + return 0; +} // TODO: add implementations ;-) @@ -2975,7 +3000,7 @@ static bool itemdb_read_db(const char* file) { body << YAML::Key << "NoUse"; body << YAML::BeginMap; if (it_nouse->second.override != 100) - body << YAML::Key << "Override" << YAML::Value << it_nouse->second.override; + body << YAML::Key << "Override" << YAML::Value << it_nouse->second.override; body << YAML::Key << "Sitting" << YAML::Value << "true"; body << YAML::EndMap; } @@ -2986,7 +3011,7 @@ static bool itemdb_read_db(const char* file) { body << YAML::Key << "Trade"; body << YAML::BeginMap; if (it_trade->second.override != 100) - body << YAML::Key << "Override" << YAML::Value << it_trade->second.override; + body << YAML::Key << "Override" << YAML::Value << it_trade->second.override; if (it_trade->second.drop) body << YAML::Key << "NoDrop" << YAML::Value << it_trade->second.drop; if (it_trade->second.trade) @@ -5281,3 +5306,166 @@ static bool read_homunculusdb(char* str[], int columns, int current) { int main( int argc, char *argv[] ){ return main_core( argc, argv ); } + +// Copied and adjusted from skill.cpp +static bool skill_parse_row_producedb(char* split[], int columns, int current) { + t_itemid nameid = static_cast(strtoul(split[1], nullptr, 10)); + + if (nameid == 0) { + ShowError("skill_parse_row_producedb: Removing an item for this DB must be done manually. Skipping.\n"); + return false; + } + + std::string *item_name = util::umap_find(aegis_itemnames, nameid); + + if (!item_name) { + ShowError("skill_parse_row_producedb: Invalid item %u.\n", nameid); + return false; + } + + uint16 skill_id = static_cast(strtoul(split[3], nullptr, 10)); + std::string* skill_name = util::umap_find( aegis_skillnames, skill_id ); + + if (skill_id != 0 && skill_name == nullptr) { + ShowError( "Skill name for skill id %hu is not known.\n", skill_id ); + return false; + } + + s_skill_produce_db_csv entry = {}; + + uint32 skill_lv = strtoul(split[4], nullptr, 10); + uint32 itemlv = strtoul(split[2], nullptr, 10); + + entry.produced_name = *item_name; + if (skill_name != nullptr) { + entry.req_skill_name = *skill_name; + entry.req_skill_lv = skill_lv; + } + + for (uint8 x = 5; x+1 < columns && split[x] && split[x+1]; x += 2) { + nameid = static_cast(strtoul(split[x], nullptr, 10)); + item_name = util::umap_find(aegis_itemnames, nameid); + + if (!item_name) { + ShowError("skill_parse_row_producedb: Invalid item %u.\n", nameid); + return false; + } + + uint32 amount = strtoul(split[x+1], nullptr, 10); + if (amount == 0) + entry.item_notconsumed.push_back(*item_name); + else + entry.item_consumed[ *item_name ] = amount; + } + + const auto &exists = skill_produce.find(itemlv); + + if (exists != skill_produce.end()) + exists->second.push_back(entry); + else { + std::vector produce; + + produce.push_back(entry); + skill_produce.insert({ itemlv, produce }); + } + + return true; +} + +// Copied and adjusted from skill.cpp +static bool skill_parse_row_changematerialdb(char* split[], int columns, int current) +{ + t_itemid nameid = static_cast(strtoul(split[1], nullptr, 10)); + + // Import just for clearing/disabling from original data + // NOTE: If import for disabling, better disable list from produce_db instead of here, or creation just failed with deleting requirements. + if (nameid == 0) { + ShowError("skill_parse_row_changematerialdb: Removing an item for this DB must be done manually. Skipping.\n"); + return false; + } + + std::string *produced_name = util::umap_find(aegis_itemnames, nameid); + + if (!produced_name) { + ShowError("skill_parse_row_changematerialdb: Invalid item %u.\n", nameid); + return false; + } + + s_skill_changematerial_db_csv item = {}; + + item.baserate = static_cast(strtoul(split[2], nullptr, 10)); + for (uint16 x = 3; x+1 < columns && split[x] && split[x+1]; x += 2) { + item.qty.insert({ static_cast(strtoul(split[x], nullptr, 10)), static_cast(strtoul(split[x+1], nullptr, 10)) }); + } + + skill_changematerial_db.insert({ *produced_name, item }); + + return true; +} + +static bool skill_producedb_yaml(void) { + for (const auto &produceit : skill_produce) { + body << YAML::BeginMap; + body << YAML::Key << "ItemLevel" << YAML::Value << produceit.first; + body << YAML::Key << "Recipe"; + body << YAML::BeginSeq; + + for (const auto &it : produceit.second) { + body << YAML::BeginMap; + body << YAML::Key << "Product" << YAML::Value << it.produced_name; + + // additional lines from skill_changematerial_db (which uses ItemLV 26) + if (produceit.first == 26) { + s_skill_changematerial_db_csv* changematerial = util::umap_find( skill_changematerial_db, it.produced_name ); + if (changematerial != nullptr) { + if (changematerial->baserate != 1000) + body << YAML::Key << "BaseRate" << YAML::Value << changematerial->baserate; + if (!changematerial->qty.empty()) { + body << YAML::Key << "Make"; + body << YAML::BeginSeq; + for (const auto &qit : changematerial->qty) { + body << YAML::BeginMap; + body << YAML::Key << "Amount" << YAML::Value << qit.first; + if (qit.second != 1000) + body << YAML::Key << "Rate" << YAML::Value << qit.second; + body << YAML::EndMap; + } + body << YAML::EndSeq; + } + } + } + + if (it.req_skill_lv > 0) { + body << YAML::Key << "SkillName" << YAML::Value << it.req_skill_name; + body << YAML::Key << "SkillLevel" << YAML::Value << it.req_skill_lv; + } + + if (!it.item_consumed.empty()) { + body << YAML::Key << "Consumed"; + body << YAML::BeginSeq; + for (const auto &itemit : it.item_consumed) { + body << YAML::BeginMap; + body << YAML::Key << "Item" << YAML::Value << itemit.first; + body << YAML::Key << "Amount" << YAML::Value << itemit.second; + body << YAML::EndMap; + } + body << YAML::EndSeq; + } + + if (!it.item_notconsumed.empty()) { + body << YAML::Key << "NotConsumed"; + body << YAML::BeginSeq; + for (const auto &itemit : it.item_notconsumed) { + body << YAML::BeginMap; + body << YAML::Key << "Item" << YAML::Value << itemit; + body << YAML::EndMap; + } + body << YAML::EndSeq; + } + body << YAML::EndMap; + } + body << YAML::EndSeq; + body << YAML::EndMap; + } + return true; +} diff --git a/src/tool/csv2yaml.hpp b/src/tool/csv2yaml.hpp index 7d8317f1e5..c139a6cda9 100644 --- a/src/tool/csv2yaml.hpp +++ b/src/tool/csv2yaml.hpp @@ -42,6 +42,10 @@ namespace rathena{ ///Maximum amount of items a combo may require #define MAX_ITEMS_PER_COMBO 6 #define MAX_HOM_SKILL_REQUIRE 5 +#define MAX_SKILL_CHANGEMATERIAL_DB 75 +#define MAX_SKILL_CHANGEMATERIAL_SET 3 +#define MAX_SKILL_PRODUCE_DB 300 /// Max Produce DB +#define MAX_PRODUCE_RESOURCE 12 /// Max Produce requirements struct s_skill_tree_entry_csv { std::string skill_name; @@ -65,6 +69,23 @@ std::unordered_map skill_nearnpc; std::unordered_map> hom_skill_tree; +struct s_skill_produce_db_csv { + std::string produced_name, + req_skill_name; + uint32 req_skill_lv, + itemlv; + std::map item_consumed; + std::vector item_notconsumed; +}; + +std::map> skill_produce; + +struct s_skill_changematerial_db_csv { + uint16 baserate; + std::map qty; +}; +std::unordered_map skill_changematerial_db; + static unsigned int level_penalty[3][CLASS_MAX][MAX_LEVEL * 2 + 1]; struct s_item_flag_csv2yaml { @@ -508,6 +529,9 @@ static bool mob_parse_row_chatdb(char* fields[], int columns, int current); static bool read_homunculus_expdb(const char* file); static bool mob_readdb_group(char* str[], int columns, int current); static bool mob_readdb_group_yaml(void); +static bool skill_parse_row_producedb(char* fields[], int columns, int current); +static bool skill_producedb_yaml(); +static bool skill_parse_row_changematerialdb(char* fields[], int columns, int current); static bool skill_parse_row_createarrowdb(char* fields[], int columns, int current); static bool pc_read_statsdb(const char* file); static bool guild_read_castledb(char* str[], int columns, int current);