Group: +Gold Member
Posts: 1,528
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 #---------------------------------------------------------------- #================================
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
#---------------------------------------------------------------------- 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
#-------------------------------------------------------------------------- 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 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 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
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.
Group: +Gold Member
Posts: 1,528
Type: Scripter
RM Skill: Undisclosed
Pleasure 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
__________________________
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.