Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

 
Reply to this topicStart new topic
> Crafting Script Help, Can't get it working
~SilverPhoenix~
post Oct 1 2011, 12:46 AM
Post #1


Level 6
Group Icon

Group: Member
Posts: 85
Type: Event Designer
RM Skill: Skilled




When I was browsing the internet for a crafting script, I found this: http://xrpg2.clicdev.com/f/?CDCookie=xrpg2...;showtopic=3833

Now the problem is that I can't get it working, and it was posted 2005, so there is no point in posting on that forum.


__________________________
Go to the top of the page
 
+Quote Post
   
Sailerius
post Oct 9 2011, 02:35 PM
Post #2


Blue Blue Glass Moon
Group Icon

Group: Revolutionary
Posts: 881
Type: Developer
RM Skill: Beginner




What do you mean by "can't get it working?" What's the problem?


__________________________
Go to the top of the page
 
+Quote Post
   
~SilverPhoenix~
post Oct 12 2011, 10:41 AM
Post #3


Level 6
Group Icon

Group: Member
Posts: 85
Type: Event Designer
RM Skill: Skilled




Sorry, I forgot to explain the problem.... I don't understand how to make recipes


__________________________
Go to the top of the page
 
+Quote Post
   
Night_Runner
post Oct 13 2011, 10:57 PM
Post #4


Level 50
Group Icon

Group: +Gold Member
Posts: 1,523
Type: Scripter
RM Skill: Undisclosed




I;ll just mention that I had to tweak the Crafting Program by Deke a little so that it would work on the non-postality versions:

Deke's Crafting Program
CODE
#================================
# CRAFTING PROGRAM
#----------------------------------------------------------------
#-written by Deke
#-yes_no window code created by Phsylomortis
#----------------------------------------------------------------
#================================

#updates to Game_Party class

$fontface = Font.default_name
$fontsize = Font.default_size

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 = ["Phy. Def:", "Mag. Def:", "Evasion plus:", "Strength plus:", "Dex. plus:",
                      "Agility plus:", "Int. plus:"]
       @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 =["Attack Power:", "Phy. Def:", "Mag. Def:", "Strength plus:", "Dex. plus:",
                   "Agility plus:", "Int. plus:"]
       @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, "Quantity curentley owned:")
   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 = "map")
   @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, ["Yes", "No"])
   @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, "   Have    Need")
   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) and $game_party.recipes.size != 0
     @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 = "Create " + @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

end # of Scene_Craft


And you create the list of recipe's in the separate script:
Sample Master list for crafting script
CODE
#================================
# Sample master list for crafting script
#----------------------------------------------------------------
#-written by Deke
#----------------------------------------------------------------
#================================

class Game_Temp
  attr_reader :recipe_list
  
  alias crafting_temp_initialize initialize

  def initialize
    crafting_temp_initialize
    @recipe_list=[]
    get_recipe_list
  end
  
  def get_recipe_list
    
    ingredients = [30,31,32]
    ingredient_types = [0,0,0]
    quantities = [1,1,1]
    result = 4
    result_type = 2
    @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
    
    ingredients = [29,30]
    ingredient_types = [0,0]
    quantities = [1,2]
    result = 8
    result_type = 1
    @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
    
    ingredients = [30,31,1]
    ingredient_types = [0,0,1]
    quantities = [1,1,3]
    result = 4
    result_type = 0
    @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
    
  end # of get_recipe_list method
end # of updates to Game_Temp Class


And to answer your question, I've taken a few print screens of everything and have tried to explain it as I go

Making Recipe's

As is shown, the you have the list of items, and a list of their types, where type 0 means item, 1 means armor, and 2 means weapon.
Make sure that for your list if ingredients, ingredient_type and quantities are all the same length (so if there's 4 items in the ingredients, you need 4 items in the type and quantities list as well).


Learning Recipe's

Where the 0 in the square brackets means the first item ( so starting at 0, count how many items there are before the recipe you're after)
Just keep in mind, this is how I'd do it, Deke has their own way


And once you have an event call the script $scene = Scene_Craft.new
The crafting scene





__________________________
K.I.S.S.
Want help with your scripting problems? Upload a demo! Or at the very least; provide links to the scripts in question.

Most important guide ever: Newbie's Guide to Switches
Go to the top of the page
 
+Quote Post
   
~SilverPhoenix~
post Oct 14 2011, 04:29 AM
Post #5


Level 6
Group Icon

Group: Member
Posts: 85
Type: Event Designer
RM Skill: Skilled




Thank you... again. This will be very useful. Very useful.


__________________________
Go to the top of the page
 
+Quote Post
   
Night_Runner
post Oct 14 2011, 02:07 PM
Post #6


Level 50
Group Icon

Group: +Gold Member
Posts: 1,523
Type: Scripter
RM Skill: Undisclosed




Pleasure happy.gif I admit that it looks like a very powerful crafting script, I have a few scripting problems with it, but it's a beautiful layout and does look very nice smile.gif


__________________________
K.I.S.S.
Want help with your scripting problems? Upload a demo! Or at the very least; provide links to the scripts in question.

Most important guide ever: Newbie's Guide to Switches
Go to the top of the page
 
+Quote Post
   

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 22nd May 2013 - 12:22 PM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker