Poulet carnivore Lv.2
Inscrit le : 10/01/2012 Messages : 24
| Sujet: Adaptation vx ace script "Mix Skills System" permettant de fusioner des sorts Lun 16 Jan 2012 - 12:26 | |
| Bonjour/Bonsoir Je voudrais savoir si l'un de vous pourrait prendre ce script de Vx et de me l'adapter pour Ace. - Spoiler:
- Code:
-
#=============================================================== # ● [VX] ◦ Mix Skill System ◦ □ #-------------------------------------------------------------- # ◦ De Woratana [woratana@hotmail.com] # ◦ Thaiware RPG Maker Community # ◦ Crée le : 25/05/2008 # ◦ Version: 1.1 # ◦ Traduction Française : Blockade #-------------------------------------------------------------- # ◦ Fonctionnalités : # - Combine 2 sort ou plus pour obtenir de nouveaux sort(s) # - Choisissez les héros qui peuvent/ne peuvent utiliser chaque recette # - Pour choisir juste a sectionner les nouveaux sort, ou enlever certains mis par erreur # - Facilement personnalisable #-------------------------------------------------------------- # ◦ Comment l'utiliser : # - Appeler la scène : Scene_MixSkill grâce à la fonction d'appel : # $scene = Scene_Mixskill.new #=================================================================
#============================================================= # ** Constants Initialization (NE PAS ÉDITER CETTE PARTIE !) ** #------------------------------------------------------------- class Skill_Recipe attr_accessor :result, :skills, :user, :nonuser, :replace end class Scene_Mixskill < Scene_Base RECIPE = [] #============================================================= #============================================================= # ** [SETUP] SCENE MIXSPELL WINDOWS & TEXTS #------------------------------------------------------------- ACTOR_LIST_WIDTH = 172 # Largeur de la fenêtre de la liste des héros TOP_WINDOW_TEXT = 'Fusion de sort ' # Texte affiché en haut de la fenêtre au début TOP_WINDOW_TEXT_WITH_ACTOR = 'Fusion de sort pour : {name}' # Texte affiché, après avoir choisi son héros, utiliser {name} pour le nom du héros BOTTOM_WINDOW_TEXT_ACTOR = 'Choissisez un Héros.' # Texte affiché, quand un joueur a à choisir un héros pour fusionner ses sorts MIX_BUTTON = 'Démarrer la fusion !' # Bouton de la fusion MIX_BETWEEN = '---------------------------' # Texte entre le résultat de la fusion et les sorts choisis EXIT_BUTTON = 'Sortie' # Bouton de sortie dans la liste des héros SE_FOUND_RECIPE = 'Chime1' # L'effet sonore joué quand le joueur trouve une bonne recette SE_FOUND_RECIPE_VOLUME = 80 # Volume de l'effet sonore SE_MIXED = 'Chime2' # L'effet sonore, quand les sort sont fusionnés SE_MIXED_VOLUME = 80 #============================================================= =begin #============================================================= # ** [SETUP] Fusion de sort, recettes #------------------------------------------------------------- # .: RECIPE TEMPLATE :. #------------------------------------------------- data = Skill_Recipe.new data.skills = [ID du sort, ID du sort, ...] data.result = [ID du sort ID du sort, ...] data.replace = true (or) false data.user = [ID du héros, ID du héros, ...] data.nonuser = [ID du héros, ID du héros, ...] RECIPE << data #------------------------------------------------- # * data = Skill_Recipe.new: Crée une nouvelle recette. # * data.skills: Sort que vous avez à fusionner pour obtenir un nouveau # Vous devez avoir au moins 2 sort dans data.skills (ou la recette ne marchera pas). # * data.result: Sort(s) obtenu lors de la fusion des sort précédents( ligne d'au dessus) # Vous pouvez avoir un sort ou plus dans data.result # * data.user: Héros qui peuvent utiliser cette recette (Mettez 0 pour tout les les héros). # * data.nonuser: Héros qui ne peuvent pas utiliser cette recette. # Vous n'avez pas à utiliser data.nonuser si vous n'avez pas mis 0 pour data.user # Mettez [] si vous ne l'utilisez pas. # ** TIP: Quand le script vérifie, le héros qui peut utiliser chaque recette # Il vérifie d'abord les ID des héros qui non pas inclus dans data.nonuser d'abord . # Ensuite, il vérifie les ID des héros inclus dans data.user (ou) data.user (recettes) # inclus l0 (utilisable pour tous les héros). # # Par conséquent vous pouvez créer une recette qui marche pour tout les héros sauf pour les 2 et 3 # avec les configuration de data.user et data.nonuser comme cela : # data.user = [0] # data.nonuser = [2, 3] # * data.replace = true (or) false: Si vous voulez, quand vous fusionnez les sorts, que les sorts d'origine soit # effacés mettez true sinon mettez false # * RECIPE << data: Ajoute la recette dans la base de donnée #------------------------------------------------------------- =end #============================================================= data = Skill_Recipe.new data.skills = [9,12,13,14] data.result = [83] data.user = [0] data.nonuser = [6] data.replace = false RECIPE << data data = Skill_Recipe.new data.skills = [5 , 2, 10] data.result = [78] data.user = [1] data.nonuser = [] data.replace = true RECIPE << data data = Skill_Recipe.new data.skills = [36 , 37] data.result = [84] data.user = [0] data.nonuser = [1] data.replace = false RECIPE << data data = Skill_Recipe.new data.skills = [71 , 73, 75, 67, 61] data.result = [82] data.user = [6] data.nonuser = [] data.replace = true RECIPE << data data = Skill_Recipe.new data.skills = [82 , 84, 78, 83] data.result = [85] data.user = [0] data.nonuser = [] data.replace = true RECIPE << data data = Skill_Recipe.new data.skills = [85 , 37] data.result = [88, 87] data.user = [6] data.nonuser = [1] data.replace = true RECIPE << data data = Skill_Recipe.new data.skills = [12, 14,85] data.result = [88,86] data.user = [1] data.nonuser = [6] data.replace = true RECIPE << data #============================================================= def start super create_menu_background @help1 = Window_Help.new @help2 = Window_Help.new @help2.y = Graphics.height - @help2.height @sk = Window_MS_Skill.new(0, @help1.height, Graphics.width/2, Graphics.height - (@help1.height*2)) @sk.help_window = @help2 @sk_chosen = Window_MS_SkillList.new(@sk.width, @sk.y + @help1.height, @sk.width, @sk.height - @help1.height) @act_list = Window_MS_ActorList.new(ACTOR_LIST_WIDTH) @act_list.x = (Graphics.width - @act_list.width) / 2 @act_list.y = (Graphics.height - @act_list.height) / 2 @winmix = Window_Command.new(@sk.width, [MIX_BUTTON]) @winmix.x = @sk.width @winmix.y = @help1.height runstep(0) end def update super if @act_list.active @act_list.update if Input.trigger?(Input::C) @act_list.visible = @act_list.active = false case @act_list.define[@act_list.index] when 'exit' Sound.play_cancel $scene = Scene_Map.new else runstep(1) end elsif Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new end elsif @sk.active @sk.update if Input.trigger?(Input::C) if @sk_chosen.skills.include?(@sk.skill) Sound.play_cancel return end Sound.play_decision @sk_chosen.skills << @sk.skill refresh_chosen_data elsif Input.trigger?(Input::B) runstep(4) elsif Input.trigger?(Input::RIGHT) runstep(2) end elsif @winmix.active @winmix.update if Input.trigger?(Input::C) runstep(5) elsif Input.trigger?(Input::LEFT) runstep(3) elsif Input.trigger?(Input::B) runstep(4) end end end def terminate super @act_list.dispose @sk_chosen.dispose @sk.dispose @help1.dispose @help2.dispose dispose_menu_background end def refresh_chosen_data @sk.chosen = @sk_chosen.skills @sk_chosen.skills.uniq! @sk.chosen.uniq! data_mixable = spell_mixable(@sk_chosen.skills) @sk_chosen.result = data_mixable[0] @sk_chosen.result -= @sk.actor.skills @sk_chosen.replace = data_mixable[1] RPG::SE.new(SE_FOUND_RECIPE, SE_FOUND_RECIPE_VOLUME).play if !@sk_chosen.result.empty? @winmix.draw_item(0, !@sk_chosen.result.empty?) @sk_chosen.refresh @sk.refresh end def spell_mixable(chosen) skills = [] chosen.each {|i| skills << i.id if i.is_a?(RPG::Skill) } RECIPE.each_index do |r| next if RECIPE[r].nil? or RECIPE[r].skills.size < 2 or RECIPE[r].skills.size != skills.size or RECIPE[r].skills.sort != skills.sort next if RECIPE[r].nonuser.include?(@sk.actor.id) if RECIPE[r].user.include?(@sk.actor.id) or RECIPE[r].user.include?(0) result = RECIPE[r].result result_skills = [] result.each {|i| result_skills << $data_skills[i] unless $data_skills[i].nil? } return [result_skills, RECIPE[r].replace] end end return [[], true] end def runstep(id) case id when 0 @sk.visible = @sk.active = false @sk_chosen.visible = @sk_chosen.active = false @act_list.active = @act_list.visible = true @winmix.visible = @winmix.active = false @help1.set_text(TOP_WINDOW_TEXT, 1) @help2.set_text(BOTTOM_WINDOW_TEXT_ACTOR, 1) when 1 Sound.play_decision @act_list.active = @act_list.visible = false @sk.visible = @sk.active = true @sk_chosen.visible = true @sk_chosen.active = false @winmix.visible = true @winmix.active = false @winmix.index = -1 @sk.set_actor(@act_list.define[@act_list.index]) @help1.set_text(TOP_WINDOW_TEXT_WITH_ACTOR.gsub(/\{name\}/i){@sk.actor.name}, 1) @sk_chosen.clear @winmix.draw_item(0, !@sk_chosen.result.empty?) when 2 if @sk_chosen.result.empty? Sound.play_cancel else Sound.play_decision @winmix.index = 0 @winmix.active = true @sk.active = false @sk_lastindex = @sk.index @sk.index = -1 end when 3 Sound.play_decision @winmix.index = -1 @winmix.active = false @sk.active = true @sk.index = @sk_lastindex when 4 if @sk_chosen.skills.empty? Sound.play_decision runstep(0) else Sound.play_cancel @sk_chosen.skills.pop refresh_chosen_data end when 5 if @sk_chosen.result.empty? Sound.play_cancel else RPG::SE.new(SE_MIXED,SE_MIXED_VOLUME).play actor = @sk.actor ingrad = @sk_chosen.skills result = @sk_chosen.result ingrad.each {|i| actor.forget_skill(i.id) } if @sk_chosen.replace result.each {|i| actor.learn_skill(i.id) } runstep(1) end end end end
#============================================================================== # ** Window_MS_Skill #============================================================================== class Window_MS_Skill < Window_Selectable attr_accessor :chosen, :actor def initialize(x, y, width, height) super(x, y, width, height) @column_max = 1 @chosen = [] @data = [] self.index = 0 end
def skill return @data[self.index] end
def refresh @data = [] for skill in @actor.skills @data.push(skill) if skill.id == @actor.last_skill_id self.index = @data.size - 1 end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end def set_actor(actor) @actor = actor @chosen = [] self.index = 0 refresh end
def draw_item(index) skill = @data[index] return if @chosen.include?(skill) rect = item_rect(index) self.contents.clear_rect(rect) if skill != nil rect.width -= 4 draw_item_name(skill, rect.x, rect.y) end end
def update_help @help_window.set_text(skill == nil ? '' : skill.description) end end
#============================================================================== # ** Window_MS_SkillList #============================================================================== class Window_MS_SkillList < Window_Selectable attr_accessor :result, :skills, :replace def initialize(x, y, width, height) super(x, y, width, height) clear end
def refresh self.contents.clear @data = @result + [Scene_Mixskill::MIX_BETWEEN] + @skills @item_max = @data.size for i in 0...@item_max draw_item(i) end end
def draw_item(index, enabled = true) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] rect.width -= 4 if skill.is_a?(RPG::Skill) draw_icon(skill.icon_index, rect.x, rect.y, enabled) self.contents.font.color = @result.include?(skill) ? system_color : normal_color self.contents.draw_text(rect.x + 24, rect.y, rect.width-24, WLH, skill.name) else self.contents.font.color = normal_color self.contents.draw_text(rect.x, rect.y, rect.width, rect.height, skill, 1) end end def clear @result = [] @skills = [] @replace = true refresh end
def cursor_movable? return false end end
#============================================================================== # ** Window_MS_ActorList #============================================================================== class Window_MS_ActorList < Window_Command attr_reader :define def initialize(width) commands = [] @define = [] $game_party.members.each do |i| commands << i.name @define << i end commands << Scene_Mixskill::EXIT_BUTTON @define << 'exit' super(width, commands) end end
Merci d'avance |
|