| | La Forge | |
| | Auteur | Message |
---|
Riful lvl 18 : Bronze Fighter
Nombre de messages : 339 Alias : Un mec...je suis un mec...xD... Date d'inscription : 24/06/2005
| Sujet: La Forge Mer 25 Juil à 19:43 | |
| Et bien, Xanatos avait voulu faire d'une forge, mais ce n'etait pas un script mais un tuto. En cherchant j'ai trouvé un super script pour faire une forge, et je peux vous dire qu'il est fonctionnel ! Auteur : Deke Remarques : Ce scrit marche, je vous donnerais l'explication ci dessous. Fonctions : Un script pour faire une forge (construction d'arme / armure / item ?) Screen : Installation : Créer un script au-dessus de « Main » que nous appellerons « Crafting_program » (le nom importe peu !) et introduire ceci à l'intérieur : - Code:
-
#================================ # CRAFTING PROGRAM #---------------------------------------------------------------- #-written by Deke #-yes_no window code created by Phsylomortis #---------------------------------------------------------------- #================================
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 #copier-coller les 7 lignes suivantes afin de créer vos recettes ingredients = [] ingredient_types = [] quantities = [] result = result_type = @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type)) end end
#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 rendus :" hp_stat = item.recover_hp_rate else hp_string = "HP rendus:" hp_stat = item.recover_hp end if item.recover_sp_rate > item.recover_sp sp_string = "MP rendus :" sp_stat = item.recover_sp_rate else sp_string = "MP rendus:" sp_stat = item.recover_sp end @strings = [hp_string, sp_string, "Def phy:" , "Def mag:", "Précision:", "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 = ["Def phy:", "Def mag:", "Esquive:", "Force:", "Defense:", "Agilité:", "Intelligence:"] @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 =["Attaque:", "Def phy:", "Def mag:", "Force:", "Defense:", "Agilité:", "Intelligence:"] @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, "Possédé:") 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 | |
| | | Riful lvl 18 : Bronze Fighter
Nombre de messages : 339 Alias : Un mec...je suis un mec...xD... Date d'inscription : 24/06/2005
| Sujet: Re: La Forge Mer 25 Juil à 19:44 | |
| - Code:
-
#-------------------------------------------------------------------------- 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, "Possédé Besoin") 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 = "Fabriquer " + @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 Voilà, je vais vous faire une explication de comment ça marche. Tout commence à la ligne 21 : Entrer dans les crochets les chiffres de cette façon : ingredients : [l’ID des ingredients séparés par des virgules ","] ingredient_type : [objet : 0 / Armure :1 / Arme :2] quantities = [mettez les quantité des ingredients séparés par des virgules dans l'ordre respectif de ci-dessus result : l’ID de l’objet fabriqué result type : (objet :0 ; armure :1 ; arme :2) Il est normal que vous n'ayez toujours pas tout compris. Nous allons prendre un exemple. Vous voulez créer une arme du nom de Solar Sword. Pour cela vous avez besoin de: - 1 Bague solaire - ID : 41 - 1 Ruban de Runa - ID : 42 - 1 Mémoire 412 - ID : 43 - 30 Sceaux de feu - ID : 44 - 10 Hananosolar - ID : 45 La Solar Sword - ID - 7 Pour appeler la forge, appeler un script avec un event Code : $scene=Scene_Craft.new Pour qu’une recette soit accessible dans cette forge, appeler de nouveau un script Code : $game_party.learn_recipe([7,2]) Entre les crochets, mettre l’ID de l’objet obtenu, puis le type de l’objet (7 : L'ID de Solar Sword, 2 son type (arme) ). Revenons à notre script, cela donnera : - Code:
-
#======Solar Sword======# ingredients = [41,42,43,44,45] ingredient_types = [0,0,0,0,0,0] quantities = [1,1,1,30,10] result = 6 result_type = 2 @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type)) Tous les ingrédients dont on a besoin sont des objets, donc "0", pour les quantité, ils sont dans l'ordre respectif des ingrédients. Après vous devrez avoir tout saisi. Attaquons un deuxieme problème. Vous voulez que dans votre forge il y est plusieurs armes ! Vous copiez collé le : ingredients = [] ingredient_types = [] quantities = [] result = result_type = @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type)) Et mettez ce qu'il faut. ATTENTION ! Une erreur peut survenir si vous mettez ce petit bout, en dessous du end ! il faut le mettre au dessus ! dans mon cas j'ai fait comme ça (Riférus est le nom d'une autre arme) LIGNE 22 à LIGNE 41 (Alnéstère est le nom du forgeron) - Code:
-
#=====Alnestère=====#
#======Solar Sword======# ingredients = [41,42,43,44,45] ingredient_types = [0,0,0,0,0,0] quantities = [1,1,1,30,10] result = 6 result_type = 2 @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
#========Riférus=======# ingredients = [33,34,35,36,37,38] ingredient_types = [0,0,0,0,0,0] quantities = [5,50,1,1,1,1] result = 7 result_type = 2 @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type)) end end Voilà, c'est finit. | |
| | | Wakka211 Administrateur
Nombre de messages : 234 Age : 37 Alias : Nibelhem Date d'inscription : 04/06/2004
| Sujet: Re: La Forge Mar 31 Juil à 1:33 | |
| Wahou ça programme dit donc, je suis en pleine programmtion flash en ce moment | |
| | | Contenu sponsorisé
| Sujet: Re: La Forge | |
| |
| | | | La Forge | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |