|
| Auteur | Message |
---|
Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: [XP] Système de craft Sam 14 Sep 2013 - 18:15 | |
| Craft System Auteur : Mat Description : Ce système permet de créer des formules qui, à partir d'une liste d'ingrédients, vont crées des objets. Dépendance : Database Management v1Script : - Code:
-
#=============================================================================== # ■ Craft System #------------------------------------------------------------------------------- # Auteur : Mat # Version : 2.0 # Date : 08/10/2008 #------------------------------------------------------------------------------- # Ce système permet de créer des formules qui, à partir d'une liste # d'ingrédients, vont crées des objets. # # Dépendance : # - Database Management #------------------------------------------------------------------------------- #Utilisation : # # 1) Installation : # Copier le Database Management dans un script au dessus de Main. # Copier ce script dans un nouveau script entre Database Management # et Main. # # 2) Utilisation : # Lancer une première fois votre jeu. Le jeu créera ainsi un dossier # nommer "Recipes Data" dans le dossier de votre jeu, contenant un fichier # "template.dbsl". Il suffit de copier le template et de remplir les # différents champs et ceci autant de fois qu'il faut de formule. # # ATTENTION : le champs name doit être unique pour chaque formule. # # Lorsque votre jeu est pret à être diffusé, il suffit de supprimer # le dossier "Recipes Data" pour garder la base secrète et non modifiable # # Note concernant l'attribut result_kind : Les valeurs autorisés sont # 1 = le résultat est une arme # 2 = le résultat est une armure # 3 = le résultat est un objet #===============================================================================
Database.create_table("Recipes") { |t| t.column :name, :string t.column :result_id, :integer t.column :result_kind, :integer t.column :weapons, :hash t.column :armors, :hash t.column :items, :hash }
#=============================================================================== # ▼ Game_Recipe #------------------------------------------------------------------------------- # Cette classe modélise les formules #=============================================================================== class Game_Recipe attr_reader :name #nom de la formule attr_reader :result_id #identifiant de l'objet résultat de la formule attr_reader :result_kind #type d'objet du résultat attr_reader :weapons #liste d'armes nécessaire pour créer le résultat attr_reader :armors #liste d'armures nécessaire pour créer le résultat attr_reader :items #liste d'items nécessaire pour créer le résultat
#============================================================================= # ● initialize # name : le nom en base de la formule #============================================================================= def initialize(name) recipe = Database::Recipes.find { |recipe| recipe.name == name } @name = recipe.name @result_id = recipe.result_id @result_kind = recipe.result_kind @weapons = recipe.weapons @armors = recipe.armors @items = recipe.items end
#============================================================================= # ● realisable? # Méthode qui permet de savoir si la formule peut être réalisé # Retourne true si la formule est realisable, false dans le cas contraire #============================================================================= def realisable? @weapons.each do |item_id,item_number| number = $game_party.weapon_number(item_id) return false if number < item_number end @armors.each do |item_id,item_number| number = $game_party.armors_number(item_id) return false if number < item_number end @items.each do |item_id,item_number| number = $game_party.item_number(item_id) return false if number < item_number end return true end #============================================================================= # ● combine # Méthode active des forumles. C'est cette fonction qui retire les # ingredient de l'inventaire et rajoute le résultat #============================================================================= def combine case @result_kind when 1 $game_party.gain_weapon(@result_id, 1) when 2 $game_party.gain_armor(@result_id, 1) when 3 $game_party.gain_item(@result_id, 1) end @weapons.each do |item_id,item_number| $game_party.lose_weapon(item_id, item_number) end @armors.each do |item_id,item_number| $game_party.lose_armor(item_id, item_number) end @items.each do |item_id,item_number| $game_party.lose_item(item_id, item_number) end end end
#=============================================================================== # ▼ Scene_Title #=============================================================================== class Scene_Title #============================================================================= # ● command_new_game #============================================================================= alias craft_command_new_game command_new_game def command_new_game $game_recipes = { } for recipe in Database::Recipes if recipe.name != "" and recipe.name != nil $game_recipes[recipe.name] = Game_Recipe.new(recipe.name) end end craft_command_new_game end end
#=============================================================================== # ▼ Scene_Save #=============================================================================== class Scene_Save #============================================================================= # ● write_save_data # file : nom du fichier de sauvegarde #============================================================================= alias craft_write_save_data write_save_data def write_save_data(file) craft_write_save_data(file) Marshal.dump($game_recipes, file) end end
#=============================================================================== # ▼ Scene_Load #=============================================================================== class Scene_Load #============================================================================= # ● read_data # file : nom du fichier où se trouvent les données à charger #============================================================================= alias craft_read_save_data read_save_data def read_save_data(file) craft_read_save_data(file) $game_recipes = Marshal.load(file) end end
Dernière édition par Mat le Dim 1 Déc 2013 - 22:17, édité 1 fois (Raison : COrrection de bug) |
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Sam 14 Sep 2013 - 18:22 | |
| Scene_Craft : - Code:
-
#=============================================================================== # ■ Scene_Craft #------------------------------------------------------------------------------- # Cette scène n'est qu'un exemple de réalisation possible à partir du script # Craft System. # C'est à chaque projet de réaliser sa propre interface et non au système de # vous la fournir. #-------------------------------------------------------------------------------
#=============================================================================== # ▼ Window_Recipe #=============================================================================== class Window_Recipe < Window_Selectable attr_writer :ingredient_window #============================================================================= # ● initialize #============================================================================= def initialize(ingredient_window) super(0, 0, 210, 480) @ingredient_window = ingredient_window refresh self.index = 0 end #============================================================================= # ● update #============================================================================= alias recipe_update update def update recipe_update @ingredient_window.recipe = self.item end #============================================================================= # ● refresh #============================================================================= def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] for key in $game_recipes.keys @data.push($game_recipes[key]) end @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize for i in 0...@item_max draw_item(i) end end end #============================================================================= # ● draw_item #============================================================================= def draw_item(index) recipe = @data[index] if recipe.realisable? self.contents.font.color = normal_color else self.contents.font.color = disabled_color end x = 4 y = index * 32 rect = Rect.new(x, y, self.width - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) case recipe.result_kind when 1 bitmap = RPG::Cache.icon($data_weapons[recipe.result_id].icon_name) when 2 bitmap = RPG::Cache.icon($data_armors[recipe.result_id].icon_name) when 3 bitmap = RPG::Cache.icon($data_items[recipe.result_id].icon_name) end opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, recipe.name, 0) end #============================================================================= # ● item #============================================================================= def item return @data[self.index] end end
#=============================================================================== # ▼ Window_Ingredient #=============================================================================== class Window_Ingredient < Window_Base attr_writer :recipe #============================================================================= # ● initialize #============================================================================= def initialize super(210, 0, 430, 480) end #============================================================================= # ● update #============================================================================= alias ingredient_update update def update ingredient_update refresh end #============================================================================= # ● refresh #============================================================================= def refresh if self.contents != nil self.contents.dispose self.contents = nil end self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize case @recipe.result_kind when 1 result = $data_weapons[@recipe.result_id] when 2 result = $data_armors[@recipe.result_id] when 3 result = $data_items[@recipe.result_id] end if result != nil draw_header(result) @item_y = 186 @recipe.weapons.each do |weapon_id, weapon_number| draw_item(weapon_id, weapon_number, 1) end @recipe.armors.each do |armor_id, armor_number| draw_item(armor_id, armor_number, 2) end @recipe.items.each do |item_id, item_number| draw_item(item_id, item_number, 3) end end end #============================================================================= # ● draw_header #============================================================================= def draw_header(result) self.contents.draw_text(0, 0, 100, 32, "Résultat : ", 0) self.contents.draw_text(110, 0, 330, 32, result.name, 0) self.contents.draw_text(0, 45, 150, 32, "Description : ", 0) self.contents.draw_text(0, 77, 430, 32, result.description, 0) self.contents.draw_text(0, 122, 430, 32, "Ingrédients : ", 0) self.contents.draw_text(0, 154, 430, 32, "Nom", 0) self.contents.draw_text(170, 154, 430, 32, "Nécessaire", 0) self.contents.draw_text(300, 154, 430, 32, "Possédés", 0) end #============================================================================= # ● draw_item #============================================================================= def draw_item(id, necessary, kind) case kind when 1 ingredient = $data_weapons[id] number = $game_party.weapon_number(id) when 2 ingredient = $data_armors[id] number = $game_party.armor_number(id) when 3 ingredient = $data_items[id] number = $game_party.item_number(id) end rect = Rect.new(0, @item_y, self.width - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(ingredient.icon_name) self.contents.font.color = normal_color self.contents.blt(0, @item_y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(28, @item_y, 212, 32, ingredient.name, 0) self.contents.draw_text(220, @item_y, 212, 32, necessary.to_s, 0) if number >= necessary self.contents.font.color = Color.new(0,255,0) else self.contents.font.color = Color.new(255,0,0) end self.contents.draw_text(340, @item_y, 212, 32, number.to_s, 0) @item_y += 32 end end
#=============================================================================== # ▼ Scene_Craft #=============================================================================== class Scene_Craft #============================================================================= # ● main #============================================================================= def main @ingredient_window = Window_Ingredient.new @ingredient_window.active = false @recipe_window = Window_Recipe.new(@ingredient_window) @ingredient_window.recipe = @recipe_window.item
Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @recipe_window.dispose @ingredient_window.dispose end #============================================================================= # ● update #============================================================================= def update @recipe_window.update @ingredient_window.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) recipe = @recipe_window.item if recipe == nil or not recipe.realisable? $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) recipe.combine @recipe_window.refresh @ingredient_window.refresh end end end
Utilisation : Copier le Database Management dans un script au dessus de Main. Copier ce script dans un nouveau script entre Database Management et Main. Lancer une première fois votre jeu. Le jeu créera ainsi un dossier nommer "Recipes Data" dans le dossier de votre jeu, contenant un fichier "template.dbsl". Il suffit de copier le template et de remplir les différents champs et ceci autant de fois qu'il faut de formule. L'attribut result_kind : Les valeurs autorisés sont 1 = le résultat est une arme 2 = le résultat est une armure 3 = le résultat est un objet Exemple : Créer un fichier "potion.dbsl" dans le dossier "Recipes Data". Remplisser le avec le contenu : - Code:
-
Database::Recipes name: "Potion de Soin" result_id: 1 result_kind: 3 weapons: {} armors: {} items: {12 => 2, 32=> 1}
Le recette crée une "Potion" (result_id: 1) contre 2 Herbes (12 => 2) et 1 Fruit (32=> 1).
Dernière édition par Mat le Ven 29 Nov 2013 - 19:26, édité 1 fois |
| | | City Hunter Administrateur
Messages postés : 6524 Date d'inscription : 25/05/2011 Jauge LPC :
| Sujet: Re: [XP] Système de craft Dim 15 Sep 2013 - 10:21 | |
| Merci du partage Je t'ajoute des points ! |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Ven 22 Nov 2013 - 1:31 | |
| Je ne sais pas si c'est moi qui ne sait pas utiliser ce script, ou que je n'ai pas compris la fonction du script. J'ai rempli les champs comme indiqué, tout est en .dbsl, mais j'ai un bug quand je lance le projet depuis l'éditeur :
?????NameError????? uninitialized constant Database::Serialization::Antidote
Quand je lance le projet normalement, je suis perdu après pour appeler la scène de craft, comment faut-il s'y prendre ?
PS : ça m'embêterait un peu d'avoir tout foirer, sachant que j'ai passé la journée à placer toutes les informations de craft d'objet, et il me reste les armes, armures etc... Mais j'ose plus rien faire, sous peur de tout faire pour rien :S |
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Mer 27 Nov 2013 - 15:16 | |
| Peux-tu m'envoyer le premier fichier de ton dossier "Recipes Data" ? Je pense qu'il doit être mal formater. |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Mer 27 Nov 2013 - 18:19 | |
| Voici le premier fichier : http://www.sendspace.com/file/8fn2ad
Tous mes fichiers sont fait pareil, et l'erreur apparaît pour chaque fichier. |
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Jeu 28 Nov 2013 - 9:58 | |
| Sur la ligne name, utilise les guillemets autour du nom (Antidote -> "Antidote" etc...). |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Jeu 28 Nov 2013 - 16:14 | |
| J'avais pas fait attention à ce détail, honte à moi ><' Effectivement, il n'y a plus d'erreur avec les "" Pour appeler le script, je fais insérez un script et j'appel bien "Scene_Craft" ? Je demande en même temps au passage pour être sûr de ne pas faire d'erreur. |
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Jeu 28 Nov 2013 - 19:20 | |
| Pour ouvrir la scène, il faut bien faire - Code:
-
$scene = Scene_Craft.new
dans un événement. |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Jeu 28 Nov 2013 - 19:38 | |
| C'est bien ce que je faisais, mais j'avais un bug, rmxp ne reconnait pas la méthode "keys" : - Spoiler:
Du coups, moi ce que je fais, je l'enlève, alors je le relance, une fenêtre apparaît en me disant "toto", puis lance la scène, puis bug x) J'ai bien aimé le toto :3 |
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Ven 29 Nov 2013 - 19:14 | |
| Je viens de voir que j'ai un debug qui est resté d'où le 'toto' Sinon, utilises-tu un autre script que celui-ci ? |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Ven 29 Nov 2013 - 20:01 | |
| A part ton script, je n'utilise pas d'autre script de craft.
|
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Ven 29 Nov 2013 - 20:06 | |
| Même si ça ne concerne pas le craft, y a-t-il d'autres scripts dans le projet ? |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Ven 29 Nov 2013 - 20:20 | |
| Oui je t'envoie la liste par mp ^^ |
| | | Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Dim 1 Déc 2013 - 22:19 | |
| Le bug soulevé par Donchouwa est corrigé. J'ai mis à jour le premier post avec ce correctif. |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: [XP] Système de craft Dim 1 Déc 2013 - 22:29 | |
| Merci pour le suivi, Matt. Et hop, des points. |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Dim 1 Déc 2013 - 23:22 | |
| Je te donne aussi des points pour m'avoir aidé ^^ |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: [XP] Système de craft Lun 2 Déc 2013 - 0:29 | |
| Encore faut-il en avoir pour cela, mais c'est l'intention qui compte. x) |
| | | Donchouwa Chevalier (niveau 2)
Messages postés : 88 Date d'inscription : 19/11/2013 Jauge LPC :
| Sujet: Re: [XP] Système de craft Lun 2 Déc 2013 - 2:52 | |
| |
| | | Contenu sponsorisé
| Sujet: Re: [XP] Système de craft | |
| |
| | | |
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |