| | Systeme de forge | |
| | Auteur | Message |
---|
Jordinateur Blob
Nombre de messages : 260 Localisation : Devant mon ordinateur !(enfin sa dépend, peut-être avec ma copine aussi ^^) Humeur/Caractère : Aller a l'école T_T Date d'inscription : 12/05/2006
| Sujet: Systeme de forge Sam 20 Mai - 14:22 | |
| Script de forge by "Forum RPG Créateurs Centrales" Voici un script qui va vous permettre, a la manière d'un final fantasy 8 ou 9, d'améliorer vos jeux en faisant un système de forge... Crée un script nommé "Crafting System" et introduiser ceci à l'intérieur : - 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 = ["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 = "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, ["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) @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
| |
| | | Jordinateur Blob
Nombre de messages : 260 Localisation : Devant mon ordinateur !(enfin sa dépend, peut-être avec ma copine aussi ^^) Humeur/Caractère : Aller a l'école T_T Date d'inscription : 12/05/2006
| Sujet: Re: Systeme de forge Sam 20 Mai - 14:23 | |
| L'UTILISATION : 1.Ingrédiens : :arrow:L' étalage des objets utilisés pour l' objet désiré. Ces étélages consistent simplement en un index des onjets dans la base de données.Par exemple, dans l' image ci-dessous, l' ID de la tablette est de 30, l' ID de la carte et du fruit est de 31 et 32. Si nous voulons faire un récipient qui utilise ces trois objets, celà devra être comme suivant : - Code:
-
[30,31,32] note: vous DEVEZ mettre les crochets ! Vous pouvez vouloir que vos recipients ne soit pas consistués uniquement d' objets. Peut-être voulez vous un recipient qui transforme une épée normale en épée de feu avec un souffle de dragon. Pour faire ceci vous devrez spécifier le type d' objet que vous utilisez avec un numéro. -les objets sont de type 0 -les armures sont de type 1 -les armes sont de type 2 Dans cas, l' étalage des objets devra donner le code suivant : - Code:
-
[0,0,0]
Maintenant que nous connaissons l' ID et le type de nos ingrédients, que devons-nous faire maintenant ? Vous l' avez deviné ! Le nombre d' objet du même type que requiert le recipient. Supposons que nous voulons un objet du même type alors notre code sera : - Code:
-
[1,1,1] LE RESULTAT De même que pour les ingrédient, vous devez préciser l' ID de l' objet que vous voulez créer. La seule différence est que maintenant il n' y a aucun besoin de le mettre dans un étalage. Par exemple, si vous voulez créer une epée mythril son ID sera de 4 (dans la base de données). De même que pour les ingredients, vous devez dire au recipient quel type d' objet voulez vous créer (comme dit précedament, 0 pour objet, 1 pour amures et 2 pour les armes) Encore une fois, ce n' est pas un étage. Par exemple, pour créer un récipient faisant que pour créer un épée Mythril, une carte, une tablette et un fruit sont requis, utiliser le code suivant : - Code:
-
igredients = [30,31,32] types = [0,0,0] quantities = [1,1,1] sword=Game_Recipe.new(ingredients, types, quantities,4,2)
Info : Le mot "sword" ne compte pas car dans le craft screen (j' ignore ce que ca doit être ndt)le nom de l' objet crée va être affiché, pas le nom de l' objet Maintenant que le nouveau recipient à été crée, ' équipe doit l' apprendre.Pour ce, faites le code suivant : - Code:
-
$game_party.learn_recipe(sword)
Enfin pour entrer dans le menu de forge faites le code suivant : - Code:
-
$scene=Scene_Craft.new
Info : Par défaut, sortir de l' écran de forge vous améne au menu principal. LES RECETTES les SEULES choses que vous devez modifier sont en rouge, le typte, l' ID et le nombre des igredients et le type et l' iD du résultat Tout ce que avez à faire est de copier-coller ceci autant de fois que avez besoin de recipients. Finalement, si vous voulez que votre équipe apprenne le recipient (ou comment forger des objets ), utilisez les lignes de codes suivantes : - Code:
-
$game_party.learn_recipe([4,2]) $game_party.learn_recipe([8,1]) $game_party.learn_recipe([4,0])
La premiere vous montre comment créer l' épée dont l' ID est 4 (le 2 c' es le type d' objet, souvenez-vous-en) La seconde, pour créer la 8eme armure la troisieme le 4eme objet Comme je l' ai dit plus tôt, je vous ai montré comment faire plusieurs récipients pour le même objet en résultat. Supposons que nous avons mis le code suivant aprés les récipients : - Code:
-
ingredients = [30,31] ingredient_types = [0,0] quantities = [1,1] result = 4 result_type = 0 @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type)) Vous preciserez qu' il y a recipient pour le quatrieme objet (le parfum).Si vous voulez quel' équipe apprennes ce recipient faites ce code: - Code:
-
$game_party.learn_recipe([4,0],2)
Ajouter le 2 pour spécifier que l' équipe apprends le recipient du scrîpt. Devinez comment cela marche pour la version 3,4,5,6 ... Vous pouvez le télécharger le demo du scripts : ici http://membres.multimania.fr/rpgcc/Demos/Demo14.rar PS : J'ai installé le script chez moi, e til marche parfaitement...Quoique, j'ai vu sur un forum qu'il y avait un problème avec le script, alors il ont donné ce lien là : http://xrpg2.clicdev.com/f/?CDCookie=xrpg2&showtopic=3833 Apparemment, il y le VRAI script sur ce site, alors si sa ne marche pas avec celui que je vous ai donné, copiez le script qu'il y a sur le site que je viens de donner, et collez-le dans "Crafting_Systeme", à la place du script que je vous ai donné...Mais logiquement, il ne devrait pas y avoir de problème de script... | |
| | | | Systeme de forge | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |