|
| | Système de capacités avec armes (FFIX) | |
| | Auteur | Message |
---|
Patchwork Auguste Polichinelle
Nombre de messages : 1382 Age : 43 Niveau Rpg Maker : se débrouille. Jeux Préférés : FF, Suikoden, Mario kart, ... Date d'inscription : 07/06/2007
| Sujet: Système de capacités avec armes (FFIX) Mar 20 Nov 2007, 23:08 | |
| Voici un script pour que vos personnages gagnent leurs capacités avec leurs armes. Tout d'abord, vous devez créer votre arme. Ensuite, créez une classe qui aura exactement le même nom que votre arme. Ajoutez à cette classe les capacités que vous voulez. Le niveau que vous choisirez pour obtenir ce skill sera proportionnel au chiffre que vous aurez paramétré dans le script. Exemple : - Si vous avez choisi le niveau 10 pour apprendre le skill et que dans le script vous avez "LEARNING_EXP_POINTS_MULTIPLIER = 5", alors le nombre de point de compétence nécessaire pour acquérir ce skill sera de 50. Voici le script : - Code:
-
################################################################################ # CONFIGURATION # ################################################################################ LEARNING_EXP_POINTS_MULTIPLIER=1
################################################################################ # SKILL LEARNING RESULTS # ################################################################################ #============================================================================== #========= SKILL LEARNING RESULTS #============================================================================== class Window_BattleResultSkillLearning < Window_Base attr_accessor :learnings #-------------------------------------------------------------------------- # learnings #-------------------------------------------------------------------------- def initialize() @learnings = [] super(160, 0, 320, learnings.size * 32 + 32) # self.contents = Bitmap.new(width - 32, height - 32) # self.y = 160 - height / 2 self.z = 203 self.back_opacity = 160 self.visible = false end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def refresh # print(@learnings.size.to_s) self.height=learnings.size * 32 + 32 self.y = 160 - height / 2 self.contents = Bitmap.new(width - 32, height - 32) self.contents.clear x = 4 y = 4 for learning in @learnings self.contents.draw_text(x,y,260,32,learning) # print(learning) y += 32 end end end
################################################################################ # STATUS WINDOWS # ################################################################################ #============================================================================== # ■ Window_Status_Equipment #------------------------------------------------------------------------------ class Window_Status_Equipment < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize(actor) super(0, 320, 640, 160) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.bold=true self.contents.font.size = 14 #$fontsize self.back_opacity = 255 self.opacity = 255 @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear x = 12 y = 0 actor=@actor self.contents.draw_text(x,y,200,32,"Equipment:") self.contents.font.bold=true y=y+24 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 18, $data_system.words.weapon) self.contents.font.color=normal_color draw_item_name_size($data_weapons[@actor.weapon_id], x+200, y,18) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 18, $data_system.words.armor1) self.contents.font.color=normal_color draw_item_name_size($data_armors[@actor.armor1_id], x+200, y,18) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 18, $data_system.words.armor2) self.contents.font.color=normal_color draw_item_name_size($data_armors[@actor.armor2_id], x+200, y,18) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 18, $data_system.words.armor3) self.contents.font.color=normal_color draw_item_name_size($data_armors[@actor.armor3_id], x+200, y,18) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96,18, $data_system.words.armor4) self.contents.font.color=normal_color draw_item_name_size($data_armors[@actor.armor4_id], x+200, y,18) end end
#============================================================================== # ■ Window_Status_Battle_Parameters #------------------------------------------------------------------------------ class Window_Status_Battle_Parameters < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize(actor) super(0, 160, 640, 160) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.bold=true self.contents.font.size = 14 self.back_opacity = 255 self.opacity = 255 @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear x = 12 y = 0 actor=@actor self.contents.draw_text(x,y,200,32,"Battle parameters:") y=y+24
self.contents.font.bold=true draw_actor_hp_color(actor, x, y, 12, 156) draw_actor_sp_color(actor, x + 300, y, 12, 154) y=y+24 self.contents.font.color=text_color(0)
y=y+16 bar1=Bar.new(x+70,y,60,8,self.contents) bar1.refresh(actor.str,255) bar2=Bar.new(x+370,y,60,8,self.contents) bar2.refresh(actor.atk,255)
y=y+15 bar3=Bar.new(x+70,y,60,8,self.contents) bar3.refresh(actor.int,255) bar4=Bar.new(x+370,y,60,8,self.contents) bar4.refresh(actor.pdef,255)
y=y+15 bar5=Bar.new(x+70,y,60,8,self.contents) bar5.refresh(actor.dex,255) bar6=Bar.new(x+370,y,60,8,self.contents) bar6.refresh(actor.mdef,255) y=y+15 bar2=Bar.new(x+70,y,60,8,self.contents) bar2.refresh(actor.agi,255) bar2=Bar.new(x+370,y,60,8,self.contents) bar2.refresh(actor.eva,255)
y=y-58
draw_actor_parameter_color(actor, x, y+15*0, 3,12) draw_actor_parameter_color(actor, x, y+15*1, 6,12) draw_actor_parameter_color(actor, x, y+15*2, 4,12) draw_actor_parameter_color(actor, x, y+15*3, 5,12) draw_actor_parameter_color(actor, x+300, y+15*0, 0,12) draw_actor_parameter_color(actor, x+300, y+15*1, 1,12) draw_actor_parameter_color(actor, x+300, y+15*2, 2,12) draw_actor_parameter_color(actor, x+300, y+15*3, 7,12)
y=y+90 self.contents.font.bold=false self.contents.draw_text(x,y,200,32,"Equipment:") self.contents.font.bold=true
y=y+24 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 32, $data_system.words.weapon) self.contents.font.color=normal_color draw_item_name($data_weapons[@actor.weapon_id], x+200, y) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 32, $data_system.words.armor1) self.contents.font.color=normal_color draw_item_name($data_armors[@actor.armor1_id], x+200, y) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 32, $data_system.words.armor2) self.contents.font.color=normal_color draw_item_name($data_armors[@actor.armor2_id], x+200, y) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 32, $data_system.words.armor3) self.contents.font.color=normal_color draw_item_name($data_armors[@actor.armor3_id], x+200, y) y+=18 self.contents.font.color=system_color self.contents.draw_text(x, y, 96, 32, $data_system.words.armor4) self.contents.font.color=normal_color draw_item_name($data_armors[@actor.armor4_id], x+200, y) end def dispose super end end
#============================================================================== # ■ Window_Status_Info #------------------------------------------------------------------------------ class Window_Status_Info < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize(actor) super(0, 0, 640, 160) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.bold=true self.contents.font.size = 14 #$fontsize self.back_opacity = 255 self.opacity = 255 @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear x = 128 y = 0 actor=@actor #draw_actor_graphic(actor, x/2, 64) draw_actor_face(actor, 0, y) #draw_actor_battle_graphic_opacity(actor, x-105, y, 255) self.contents.font.bold=true self.contents.font.name = Font.default_name self.contents.font.size = 14 self.contents.draw_text(x,y,100,32,"Name:") self.contents.font.name = "Ballpark" self.contents.font.size = 18 draw_actor_name(actor, x+100, y) y=y+24 self.contents.font.name = Font.default_name self.contents.font.size = 14 self.contents.draw_text(x,y,100,32,"Class:") #self.contents.font.name = "Ballpark" draw_actor_class(actor, x+100, y) y=y+24 self.contents.font.name = Font.default_name self.contents.font.size = 14 self.contents.draw_text(x,y,100,32,"Level:") #self.contents.font.name = "Ballpark" self.contents.draw_text(x+100,y,100,32,actor.level.to_s) #draw_actor_level(actor, x+100, y) y=y+16 self.contents.font.name = Font.default_name self.contents.font.size = 14 self.contents.draw_text(x,y,100,32,"Exp:") #self.contents.font.name = "Ballpark" self.contents.draw_text(x+100,y,100,32,actor.exp.to_s) #draw_actor_level(actor, x+100, y) y=y+16 self.contents.font.name = Font.default_name self.contents.font.size = 14 self.contents.draw_text(x,y,100,32,"Next:") #self.contents.font.name = "Ballpark" self.contents.draw_text(x+100,y,100,32,actor.next_rest_exp_s) #draw_actor_level(actor, x+100, y) y=y+24 self.contents.font.name = Font.default_name self.contents.font.size = 14 self.contents.draw_text(x,y,100,32,"Status:") draw_actor_state(actor, x + 100, y)
end end
#============================================================================== # ■ Window_Weapon #------------------------------------------------------------------------------ class Window_Weapon < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # actor : actor #-------------------------------------------------------------------------- def initialize(actor) super(0, 160, 640, 320) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.size = 14 self.contents.font.bold = true self.back_opacity = 255 self.opacity = 255 self.contents_opacity=255 @actor = actor refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear x = 12 y = 0 actor=@actor self.contents.draw_text(x,y,320,32,"Skills' learning status: ")
y+=24 self.contents.font.color = text_color(0) if $data_weapons[@actor.weapon_id] != nil self.contents.font.color=system_color self.contents.draw_text(x,y,320,20,"Weapon equipped: ") self.contents.font.color=normal_color self.contents.font.bold=true draw_item_name_size($data_weapons[@actor.weapon_id], x+200, y,18) #self.contents.draw_text(x+200,y,320,32, $data_weapons[@actor.weapon_id].name.to_s) | |
| | | Patchwork Auguste Polichinelle
Nombre de messages : 1382 Age : 43 Niveau Rpg Maker : se débrouille. Jeux Préférés : FF, Suikoden, Mario kart, ... Date d'inscription : 07/06/2007
| Sujet: Re: Système de capacités avec armes (FFIX) Mar 20 Nov 2007, 23:11 | |
| - Code:
-
y+=36 bars=[] learning_no=0 for class_no in 0 .. $data_classes.length if $data_classes[class_no] != nil if $data_classes[class_no].name == $data_weapons[@actor.weapon_id].name for learning_no in 0 ... $data_classes[class_no].learnings.length skill_name=$data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name skill_id=$data_classes[class_no].learnings[learning_no].skill_id bars[learning_no]=Bar.new(x+200,12+y+16*learning_no,100,8,self.contents) bars[learning_no].highlight_complete=true bars[learning_no].refresh([LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level,@actor.experience_points_skills[skill_name]].min,(LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level)) self.contents.draw_text(x,y+16*learning_no,320,32,skill_name.to_s) self.contents.draw_text(x+320,y+16*learning_no,120,32,[LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level,@actor.experience_points_skills[skill_name]].min.to_s+ " out of "+(LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level).to_s) if @actor.experience_points_skills[skill_name] >= LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level or actor.skill_learn?(skill_id) self.contents.draw_text(x+440,y+16*learning_no,120,32,"TECHNIQUE LEARNED") end end end end end y+=16*learning_no else self.contents.draw_text(x,y,320,32,"No weapon equipped") end # ACCESSORY y+=24 y+=24 self.contents.font.color = text_color(0) if $data_armors[@actor.armor4_id] != nil self.contents.font.color=system_color self.contents.draw_text(x,y,320,20,"Accessory equipped: ") self.contents.font.color=normal_color self.contents.font.bold=true draw_item_name_size($data_armors[@actor.armor4_id], x+200, y,18) y+=36 bars=[] for class_no in 0 .. $data_classes.length if $data_classes[class_no] != nil if $data_classes[class_no].name == $data_armors[@actor.armor4_id].name for learning_no in 0 ... $data_classes[class_no].learnings.length skill_name=$data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name skill_id=$data_classes[class_no].learnings[learning_no].skill_id bars[learning_no]=Bar.new(x+200,12+y+16*learning_no,100,8,self.contents) bars[learning_no].highlight_complete=true bars[learning_no].refresh([LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level,@actor.experience_points_skills[skill_name]].min,(LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level)) self.contents.draw_text(x,y+16*learning_no,320,32,skill_name.to_s) self.contents.draw_text(x+320,y+16*learning_no,120,32,[LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level,@actor.experience_points_skills[skill_name]].min.to_s+ " out of "+(LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level).to_s) if @actor.experience_points_skills[skill_name] >= LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level or actor.skill_learn?(skill_id) self.contents.draw_text(x+440,y+16*learning_no,120,32,"TECHNIQUE LEARNED") end end end end end else self.contents.draw_text(x,y,320,32,"No accessory equipped") end end end
################################################################################ # SCENE_STATUS # ################################################################################ #============================================================================== # ** Scene_Status #------------------------------------------------------------------------------ # This class performs status screen processing. #==============================================================================
class Scene_Status #-------------------------------------------------------------------------- # * Object Initialization # actor_index : actor index #-------------------------------------------------------------------------- def initialize(actor_index = 0, equip_index = 0) @actor_index = actor_index end #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Get actor @actor = $game_party.actors[@actor_index] # Make status windows @status_window_info = Window_Status_Info.new(@actor) #@status_window_info.back_opacity=0 @status_window_battle_parameters = Window_Status_Battle_Parameters.new(@actor) #@status_window_battle_parameters.back_opacity=0 @status_window_equipment = Window_Status_Equipment.new(@actor) #@status_window_equipment.back_opacity=0 @weapon_window = Window_Weapon.new(@actor) #@weapon_window.back_opacity=0 @status_window_battle_parameters.visible=!$weapon_window_visible @status_window_equipment.visible=!$weapon_window_visible @weapon_window.visible=$weapon_window_visible # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze # Dispose of windows @weapon_window.dispose @status_window_info.dispose @status_window_battle_parameters.dispose @status_window_equipment.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update
@weapon_window.update # If B button was pressed if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to menu screen $scene = Scene_Menu.new(3) return end if Input.trigger?(Input::C) @weapon_window.visible=!@weapon_window.visible @status_window_battle_parameters.visible=!@status_window_battle_parameters.visible @status_window_equipment.visible=!@status_window_equipment.visible $weapon_window_visible=!$weapon_window_visible return end # If R button was pressed if Input.trigger?(Input::R) # Play cursor SE $game_system.se_play($data_system.cursor_se) # To next actor @actor_index += 1 @actor_index %= $game_party.actors.size # Switch to different status screen $scene = Scene_Status.new(@actor_index) return end # If L button was pressed if Input.trigger?(Input::L) # Play cursor SE $game_system.se_play($data_system.cursor_se) # To previous actor @actor_index += $game_party.actors.size - 1 @actor_index %= $game_party.actors.size # Switch to different status screen $scene = Scene_Status.new(@actor_index) return end end end
################################################################################ # SCENE_BATTLE # ################################################################################ class Scene_Battle #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- alias update_skl update def update update_skl # If waiting if @wait_count > 0 # Decrease wait count @wait_count -= 1 return end case @phase when 5.1 # after battle phase skill learning update_phase5_1 end end
#-------------------------------------------------------------------------- # * Start After Battle Phase #-------------------------------------------------------------------------- alias start_phase5_skl start_phase5 def start_phase5 @skill_learning_window=Window_BattleResultSkillLearning.new exp = 0 # Loop for enemy in $game_troop.enemies # If enemy is not hidden unless enemy.hidden # Add EXP and amount of gold obtained exp += enemy.exp end end # Obtaining EXP for Weapon for i in 0...$game_party.actors.size actor = $game_party.actors[i] if actor.cant_get_exp? == false if $data_weapons[actor.weapon_id] != nil for class_no in 0 ... $data_classes.length if $data_classes[class_no] != nil if $data_classes[class_no].name == $data_weapons[actor.weapon_id].name for learning_no in 0 ... $data_classes[class_no].learnings.length skill_name=$data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name # add exp point for the skill actor.experience_points_skills[skill_name]+=exp #if (actor.experience_points_weapons[$data_weapons[actor.weapon_id].name] >= $data_classes[class_no].learnings[learning_no].level) and (actor.experience_points_weapons[$data_weapons[actor.weapon_id].name]-exp < $data_classes[class_no].learnings[learning_no].level) if (actor.experience_points_skills[skill_name] >= LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level) and (actor.experience_points_skills[skill_name]-exp < LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level) #LEARN SKILL actor.learn_skill($data_classes[class_no].learnings[learning_no].skill_id) # print(actor.name," has learned ", $data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name) @skill_learning_window.learnings.push(actor.name+" learned: "+$data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name) # print(@skill_learning_window.learnings.size.to_s) end end break end end end end end end # Obtaining EXP for Accessory for i in 0...$game_party.actors.size actor = $game_party.actors[i] if actor.cant_get_exp? == false if $data_armors[actor.armor4_id] != nil for class_no in 0 ... $data_classes.length if $data_classes[class_no] != nil if $data_classes[class_no].name == $data_armors[actor.armor4_id].name for learning_no in 0 ... $data_classes[class_no].learnings.length skill_name=$data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name # add exp point for the skill actor.experience_points_skills[skill_name]+=exp if (actor.experience_points_skills[skill_name] >= LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level) and (actor.experience_points_skills[skill_name]-exp < LEARNING_EXP_POINTS_MULTIPLIER*$data_classes[class_no].learnings[learning_no].level) #LEARN SKILL actor.learn_skill($data_classes[class_no].learnings[learning_no].skill_id) @skill_learning_window.learnings.push(actor.name+" learned: "+$data_skills[$data_classes[class_no].learnings[learning_no].skill_id].name) end end break end end end end end end
start_phase5_skl end
#-------------------------------------------------------------------------- # * Frame Update (after battle phase) #-------------------------------------------------------------------------- alias update_phase5_skl update_phase5 def update_phase5 # If wait count is larger than 0 if @phase5_wait_count > 0 update_phase5_skl else # If C button was pressed if Input.trigger?(Input::C) if @skill_learning_window.learnings.size>0 @result_window.visible = false @skill_learning_window.refresh @skill_learning_window.visible=true @phase=5.1 @wait_count = 16 else @skill_learning_window.dispose battle_end(0) end end end end
#-------------------------------------------------------------------------- # * Frame Update (after battle phase - SKILL LEARNING WINDOW) #-------------------------------------------------------------------------- def update_phase5_1 #print("update_phase5_1") # If C button was pressed if Input.trigger?(Input::C) @skill_learning_window.dispose battle_end(0) end end end
################################################################################ # GAME_ACTOR # ################################################################################ #=============================================================================== # EXP POINTS FOR WEAPONS AND SKILLS #=============================================================================== class Game_Actor < Game_Battler attr_accessor :experience_points_skills # alias setup_skl setup def setup(actor_id) setup_skl(actor_id) #INITIALIZE EXPERIENCE POINTS FOR SKILLS @experience_points_skills={} #print ("initializing exp points for skills") for skill in 0 .. $data_skills.length if $data_skills[skill] != nil @experience_points_skills[$data_skills[skill].name]=0 end end end end
Et quelques images,
Dernière édition par Patchwork le Sam 29 Mar 2008, 11:43, édité 1 fois | |
| | | deadcell Trouvère Follet
Nombre de messages : 625 Age : 35 Niveau Rpg Maker : Excellent Niveau Jeux Préférés : Final Fantasy, Resident evil... Date d'inscription : 21/03/2007
| Sujet: Re: Système de capacités avec armes (FFIX) Mar 08 Jan 2008, 13:05 | |
| J'ai une question: Ce script est super sympa ! Bravo à toi pour cette trouvaille ! Mais, est-il possible de faire la même chose pour les chimères ? Tu vois le système de PDC (points de compétence) de Final Fantasy VIII ? faire dans le même style ? | |
| | | Contenu sponsorisé
| Sujet: Re: Système de capacités avec armes (FFIX) | |
| |
| | | | Système de capacités avec armes (FFIX) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|