| 
 Blacksmith Script Edit - Ace -  06-18-2010
 
 Hi^^
 I found a Blacksmith Script by ForeverZer0.
 It takes items to forge new weapons or armor.
 You can also extract weapons and get a few items.
 
 I want it to work a little bit different:
 Instead of forging with items it should forge new weapons with old ones (like Final Fantasy 9) and new armor with old armor and accessoires.
 
 Here is the script
 http://forum.chaos-project.com/index.php/topic,6171.0.html
 
 Could someone help me? I think it should not take too much to edit, but I'm not sure
   
 
 Blacksmith Script Edit - mageone -  06-18-2010
 
 hi Zarox
 
 try this, maybe you like it :
 
 
 
 Code: #================================ # CRAFTING PROGRAM
 #----------------------------------------------------------------
 #-written by Deke
 #-yes_no window code created by Phsylomortis
 #----------------------------------------------------------------
 #================================
 
 #updates to Game_Party class
 
 class Game_Party
 
 attr_accessor       :recipes
 
 alias crafting_party_initialize initialize
 
 def initialize
 crafting_party_initialize
 @recipes=[]
 end
 
 #----------------------------------------------------------------------
 def know?(recipe, version = 1)
 unless recipe.is_a?(Game_Recipe)
 recipe = get_recipe_from_master_list(recipe, version)
 end
 return $game_party.recipes.include?(recipe)
 end
 
 #----------------------------------------------------------------------
 def learn_recipe(recipe , version = 1)
 unless recipe.is_a?(Game_Recipe)
 recipe = get_recipe_from_master_list(recipe, version)
 end
 if recipe.is_a?(Game_Recipe)
 unless know?(recipe)
 @recipes.push(recipe)
 end
 end
 end
 
 #----------------------------------------------------------------------
 def forget_recipe(recipe , version = 1)
 if !recipe.is_a?(Game_Recipe)
 recipe = get_recipe_from_master_list(recipe, version)
 end
 if recipe.is_a?(Game_Recipe)
 for i in 0...@recipes.size
 if recipe == @recipes[i]
 index = i
 break
 end
 end
 if index != nil
 @recipes.delete(@recipes[index])
 end
 end
 end
 
 #----------------------------------------------------------------------
 def get_recipe_from_master_list(item, version)
 index = nil
 for i in 0...$game_temp.recipe_list.size
 if item[0] == $game_temp.recipe_list[i].result and item[1] ==$game_temp.recipe_list[i].result_type
 version -= 1
 if version == 0
 index = i
 break
 end
 end
 end
 if index.is_a?(Integer)
 return ($game_temp.recipe_list[index])
 else
 return false
 end
 end
 
 end # of Game_Party updates
 
 #================================
 class Game_Recipe
 
 attr_reader :ingredients
 attr_reader :quantities
 attr_reader :result
 attr_reader :result_type
 attr_reader :ingredient_types
 
 #----------------------------------------------------------------------
 def initialize( ingredients, ingredient_types, quantities, result, result_type)
 @ingredients = ingredients
 @ingredient_types = ingredient_types
 @quantities = quantities
 @result = result
 @result_type = result_type
 end
 
 #----------------------------------------------------------------------
 def name
 case @result_type
 when 0
 name = $data_items[@result].name
 when 1
 name = $data_armors[@result].name
 when 2
 name = $data_weapons[@result].name
 end
 return name
 end
 
 #----------------------------------------------------------------------
 def have
 have_all = true
 for i in 0...@ingredients.size
 case @ingredient_types[i]
 when 0
 if $game_party.item_number(@ingredients[i]) < @quantities[i]
 have_all=false
 end
 when 1
 if $game_party.armor_number(@ingredients[i]) < @quantities[i]
 have_all=false
 end
 when 2
 if $game_party.weapon_number(@ingredients[i]) < @quantities[i]
 have_all=false
 end
 end
 end
 return have_all
 end
 
 #----------------------------------------------------------------------
 def decrement
 for i in 0...@ingredients.size
 case @ingredient_types[i]
 when 0
 $game_party.lose_item(@ingredients[i], @quantities[i])
 when 1
 $game_party.lose_armor(@ingredients[i], @quantities[i])
 when 2
 $game_party.lose_weapon(@ingredients[i], @quantities[i])
 end
 end
 end
 
 #----------------------------------------------------------------------
 def make
 if have
 case @result_type
 when 0
 $game_party.gain_item(@result, 1)
 when 1
 $game_party.gain_armor(@result, 1)
 when 2
 $game_party.gain_weapon(@result, 1)
 end
 decrement
 end
 end
 
 #----------------------------------------------------------------------
 def == (recipe)
 if recipe.is_a?(Game_Recipe)
 equal = true
 if recipe.ingredients != self.ingredients
 equal = false
 end
 if recipe.ingredient_types != self.ingredient_types
 equal = false
 end
 if recipe.quantities != self.quantities
 equal = false
 end
 if recipe.result != self.result
 equal=false
 end
 if recipe.result_type != self.result_type
 equal = false
 end
 else
 equal = false
 end
 return equal
 end
 
 end # of Game_Recipe class
 
 #===================================
 
 class Window_Craft < Window_Selectable
 
 #--------------------------------------------------------------------------
 def initialize
 super(0, 64, 240, 416)
 @column_max = 1
 refresh
 self.index = 0
 end
 
 #--------------------------------------------------------------------------
 def recipe
 return @data[self.index]
 end
 
 #--------------------------------------------------------------------------
 def refresh
 if self.contents != nil
 self.contents.dispose
 self.contents = nil
 end
 @data = []
 for i in 0...$game_party.recipes.size
 @data.push($game_party.recipes[i])
 end
 @item_max = @data.size
 if @item_max > 0
 self.contents = Bitmap.new(width - 32, row_max * 32)
 self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
 self.contents.font.size = $fontsize.is_a?(Integer) ? $fontsize : $defaultfontsize
 for i in 0...@item_max
 draw_item(i)
 end
 end
 end
 
 #--------------------------------------------------------------------------
 def draw_item(index)
 recipe = @data[index]
 self.contents.font.color = recipe.have ? normal_color : disabled_color
 x = 16
 y = index * 32
 self.contents.draw_text(x , y, self.width-32, 32, recipe.name, 0)
 end
 
 #--------------------------------------------------------------------------
 def update_help
 current_recipe = recipe
 if current_recipe.is_a?(Game_Recipe)
 case current_recipe.result_type
 when 0
 description = $data_items[current_recipe.result].description
 when 1
 description = $data_armors[current_recipe.result].description
 when 2
 description = $data_weapons[current_recipe.result].description
 end
 else
 description = ""
 end
 @help_window.set_text(description)
 @help_window.update
 end
 
 end # of Window_Craft
 
 #=======================================
 class Window_CraftResult < Window_Base
 
 #--------------------------------------------------------------------------
 def initialize
 super(240, 64, 400, 184)
 self.contents = Bitmap.new(width - 32, height - 32)
 self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
 self.contents.font.size = 20
 @result = nil
 @type = nil
 end
 
 #--------------------------------------------------------------------------
 def refresh
 self.contents.clear
 case @type
 when 0
 item = $data_items[@result]
 if item.recover_hp_rate > item.recover_hp
 hp_string = "HP Recovery% :"
 hp_stat = item.recover_hp_rate
 else
 hp_string = "HP Recovery Points:"
 hp_stat = item.recover_hp
 end
 if item.recover_sp_rate > item.recover_sp
 sp_string = "SP Recovery% :"
 sp_stat = item.recover_sp_rate
 else
 sp_string = "SP Recovery Points:"
 sp_stat = item.recover_sp
 end
 @strings = [hp_string, sp_string, "Phy. Def :" , "Mag. Def:", "Accuracy:", "Variance:"]
 @stats = [hp_stat, sp_stat, item. pdef_f, item.mdef_f, item.hit, item.variance,
 $game_party.item_number(@result)]
 @bitmap = RPG::Cache.icon(item.icon_name)
 when 1
 item = $data_armors[@result]
 @strings = ["PDF:", "MDF:", "EVA:", "FOR:", "DEX :", "VIT :", "ESP :"]
 @stats = [item.pdef, item.mdef, item.eva, item.str_plus, item.dex_plus,
 item.agi_plus, item.int_plus, $game_party.armor_number(@result) ]
 @bitmap = RPG::Cache.icon(item.icon_name)
 when 2
 item = $data_weapons[@result]
 @strings =["ATK :", "PDF:", "MDF:", "FOR :", "DEX :",
 "VIT :", "ESP :"]
 
 @stats = [item.atk, item.pdef, item.mdef, item.str_plus, item.dex_plus,
 item.agi_plus, item.int_plus, $game_party.weapon_number(@result) ]
 @bitmap = RPG::Cache.icon(item.icon_name)
 end
 for i in 0...@strings.size
 x = i%2 * 184
 y = i /2 *28 +32
 self.contents.font.color = normal_color
 self.contents.draw_text(x,y,100, 28,@strings[i])
 self.contents.font.color = system_color
 self.contents.draw_text(x + 110, y, 45, 28, @stats[i].to_s)
 end
 self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, 24, 24), 255)
 self.contents.font.color= normal_color
 self.contents.draw_text(40, 0, 300, 28, "Stats :")
 self.contents.font.color = system_color
 count = @stats[@stats.size - 1].to_s
 self.contents.draw_text(294, 0, 45, 28, count )
 end
 
 #----------------------------------------------------------------------
 def set_result(result , type)
 @result = result
 @type = type
 refresh
 end
 
 end #of Window_CraftResult
 
 #=======================================
 class Window_CraftIngredients < Window_Base
 
 #--------------------------------------------------------------------------
 def initialize
 super(240, 248, 400, 232)
 self.contents = Bitmap.new(width - 32, height - 32)
 self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
 self.contents.font.size = 20
 @ingredients = []
 @types = []
 @quantities = []
 @item = nil
 @count = 0
 end
 
 #--------------------------------------------------------------------------
 def refresh
 self.contents.clear
 for i in 0...@ingredients.size
 case @types[i]
 when 0
 @item = $data_items[@ingredients[i]]
 @count = $game_party.item_number(@ingredients[i])
 when 1
 @item = $data_armors[@ingredients[i]]
 @count = $game_party.armor_number(@ingredients[i])
 when 2
 @item = $data_weapons[@ingredients[i]]
 @count = $game_party.weapon_number(@ingredients[i])
 end
 y = i *26
 self.contents.blt(0, y, RPG::Cache.icon(@item.icon_name), Rect.new(0, 0, 24, 24), 255)
 self.contents.font.color = @count >= @quantities[i] ? normal_color : disabled_color
 self.contents.draw_text(30, y, 280, 28, @item.name)
 self.contents.draw_text(300, y, 45, 28, @quantities[i].to_s)
 self.contents.font.color = system_color
 self.contents.draw_text(245, y, 45, 28, @count.to_s )
 end
 end
 
 #--------------------------------------------------------------------------
 def set_ingredients(ingredients , types, quantities)
 @ingredients = ingredients
 @types = types
 @quantities = quantities
 refresh
 end
 
 end # of Window_CraftIngredients
 
 #======================================
 class Scene_Craft
 
 #--------------------------------------------------------------------------
 def initialize(craft_index=0, return_scene = "menu")
 @craft_index=craft_index
 @return_scene = return_scene
 end
 
 #--------------------------------------------------------------------------
 def main
 @craft_window = Window_Craft.new
 @craft_window.index=@craft_index
 @confirm_window = Window_Base.new(120, 188, 400, 64)
 @confirm_window.contents = Bitmap.new(368, 32)
 @confirm_window.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
 @confirm_window.contents.font.size = $fontsize.is_a?(Integer) ? $fontsize : $defaultfontsize
 @help_window = Window_Help.new
 @craft_window.help_window = @help_window
 @result_window=Window_CraftResult.new
 @ingredients_window=Window_CraftIngredients.new
 @yes_no_window = Window_Command.new(100, ["Oui", "Non"])
 @confirm_window.visible = false
 @confirm_window.z = 1500
 @yes_no_window.visible = false
 @yes_no_window.active = false
 @yes_no_window.index = 1
 @yes_no_window.x = 270
 @yes_no_window.y = 252
 @yes_no_window.z = 1500
 @label_window = Window_Base.new(450,200,190,52)
 @label_window.contents=Bitmap.new(@label_window.width - 32,@label_window.height - 32)
 @label_window.contents.font.size=20
 @label_window.contents.font.color = @label_window.normal_color
 @label_window.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
 @label_window.contents.draw_text(0, 0, @label_window.contents.width, 20, "   En possession    Nécéssaire")
 Graphics.transition
 loop do
 Graphics.update
 Input.update
 update
 if $scene != self
 break
 end
 end
 Graphics.freeze
 @help_window.dispose
 @craft_window.dispose
 @result_window.dispose
 @ingredients_window.dispose
 @confirm_window.dispose
 @yes_no_window.dispose
 @label_window.dispose
 end
 
 #--------------------------------------------------------------------------
 def update
 @craft_window.update
 @ingredients_window.update
 if $game_party.recipes.size > 0
 @result_window.set_result(@craft_window.recipe.result, @craft_window.recipe.result_type)
 @ingredients_window.set_ingredients(@craft_window.recipe.ingredients,
 @craft_window.recipe.ingredient_types,
 @craft_window.recipe.quantities)
 end
 if @craft_window.active
 update_craft
 return
 end
 if @yes_no_window.active
 confirm_update
 return
 end
 end
 
 #--------------------------------------------------------------------------
 def update_craft
 if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 if @return_scene == "menu"
 $scene = Scene_Menu.new(0)
 else
 $scene = Scene_Map.new
 end
 return
 end
 if Input.trigger?(Input::C)
 @recipe = @craft_window.recipe
 if @recipe.have
 @yes_no_window.active = true
 @craft_window.active = false
 else
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 end
 end
 
 #--------------------------------------------------------------------------
 def confirm_update
 @craft_index = @craft_window.index
 @confirm_window.visible = true
 @confirm_window.z = 1500
 @yes_no_window.visible = true
 @yes_no_window.active = true
 @yes_no_window.z = 1500
 @yes_no_window.update
 string = "Craft Weapon  " + @recipe.name + "?"
 cw = @confirm_window.contents.text_size(string).width
 center = @confirm_window.contents.width/2 - cw /2
 unless @drawn
 @confirm_window.contents.draw_text(center, 0, cw, 30, string)
 @drawn = true
 end
 if Input.trigger?(Input::C)
 if @yes_no_window.index == 0
 $game_system.se_play($data_system.decision_se)
 @recipe.make
 $game_system.se_play($data_system.save_se)
 $scene=Scene_Craft.new(@craft_index)
 else
 $game_system.se_play($data_system.cancel_se)
 $scene=Scene_Craft.new(@craft_index)
 end
 end
 if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 $scene=Scene_Craft.new(@craft_index)
 end
 end
 
 ingredients = [30,31,32]
 types = [0,0,0]
 quantities = [1,1,1]
 sword=Game_Recipe.new(ingredients, types, quantities,4,2)
 
 end # of Scene_Craft
This script allows weapons creation by crafting system.
 
 Events : this is working via script call.Edit the script and call the recipies.
 
 How it works :
 
 Make a new scrip above main and call it Crafting System or no matter what.
 
 1.INGREDIENTS
 A :
 Item to be used to make the desired item.
 This is just corresponding to the index of items in the data base.
 For example, the Item with ID no. 30 is the Lithograph, ID of Card and Fruit are 31 and 32
 If we want to make a recipe using those 3 items to make one, this is gona be written like that :
 [30,31,32]
 
 B :
 When you want the recipes to not be made only with items but with armors or weapons too,
 Specify the type of item with a number :
 
 -Items = 0
 -Armors = 1
 -Weapons = 2
 
 In this case the items recepe will be written like that  [0,0,0]
 
 C :
 When you know the ID and type of items required, then letâs specify the required quantity of each item.
 If we want an item of same type, then the spelling is like that : [1,1,1]
 
 2. THE RESULT
 A:
 As for ingredients you have to specify the type of the item that will  be created, and its ID.
 For example, if you wana make a Mithril Sword, its ID will be 4 in the Data Base.
 
 B:
 Like before with ingredients, specify the item type (0 for items,
 1 for armors and 2 for weapons)
 
 So, if you need 1 Lithograph + 1 Card + 1 Fruit to make a Mithril Sword, use this code :
 
 ingredients = [30,31,32]
 types = [0,0,0]
 quantities = [1,1,1]
 sword=Game_Recipe.new(ingredients, types, quantities,4,2)
 
 
 Now that your new recipie has been created, the party has to learn it, so use this code :
 
 $game_party.learn_recipe(sword)
 
 
 
 Finally to launch the Blacksmith screen use this code :
 
 $scene=Scene_Craft.new
 
 
 
 2.RECIPIES
 When you want your party to learn other recipies youâve created use this kind of codes :
 
 Code:
 
 $game_party.learn_recipe([4,2])
 $game_party.learn_recipe([8,1])
 $game_party.learn_recipe([4,0])
 
 
 The first one will make your party learn the receipie to create a Mithril Sword (4 is the ID of the Mithril Sword and 2 means Weapon)
 The second one is for the 8th armor
 The third one will be for the 4th item.
 
 
 Blacksmith Script Edit - Ace -  06-18-2010
 
 Hi,
 ty for your reply but when I paste the code in and call the recipe and after that the blacksmith, there is an error:
 Script Scene Craft line 63: Nomethod error occured
 undefinded method recipe list for #<game_temp:0x937f888>
 
 also I don't understand how to set up different ingredients^^
 
 
 Blacksmith Script Edit - mageone -  06-18-2010
 
 Zarox look at this demo i ve made for you
 
 http://rapidshare.com/files/400406498/Crafting.rar.html
 
 
 as you can see, i edit the recipies via script call.
 
 i ve found out about your bug. you need to add font and size info in the script Main (as it s done in the demo Mian script).
 i hope you like it :)
 
 
 ======================================================
 EDIT
 ======================================================
 
 btw, i ve forgot to say :
 
 i ve put a switch condition in the blacksmith so that the scene craft will be launched only if a recipi is known.
 this is because if you open crafting window while the party hasn't learnt any recipi, the game will crash
 
 
 Blacksmith Script Edit - Ace -  06-18-2010
 
 ah now it works, ty. And also ty for the demo, now I get it^^
 I like the other script more because you can make weapons cost gold. Also I like the layout (you see which char can equip the weapon and which stat raises) and the extract feature very much. So ty you so much, it's a cool script but a modified version of the one I postet would be better. if no one can edit the script I will take this one^^
 
 EDIT: Ok I decided to take this script. Maybe someone could add some prices for weapons and armors, then it would be awesome^^
 
 
 
 |