Habitant Lv.6
Age : 26 Inscrit le : 29/03/2011 Messages : 122
| Sujet: Amélioration Weapon_Level_System_script Dim 3 Avr 2011 - 10:09 | |
| Bonjour, j'aimerais que quelqu'un modifie ce script de façon à ce que lorsque la personne améliore son arme, cette dernière puisse changer d'apparence. Le script est le suivant : - Code:
-
#========================================================= # Weapon Level System script # by Akin # Traduction française (partielle) : Blockade #========================================================= # Quand l'arme gagne un niveau ces stats augmente # Pour ouvrir la fenêtre d'amélioration : # "$scene = Scene_Weapons_Upgrade.new" # # Cherchez A34sZ1A pour trouver les formules utilisées # pour calculer les nombre de points donnés lors d'une amélioration # et pour le prix de l'amélioration # # Le script utilise Window_Confirm class scripté par # Prexus #=========================================================
# C'est la classe window confirm scripté par Pexus class Window_Confirm < Window_Selectable def initialize(index = -1) super(192, 168, 160, 80) create_contents @item_max = 2 @column_max = 2 self.index = index self.active = false self.openness = 0 refresh end #-------------------------------------------------------------------------- def refresh for i in 0..@item_max rect = item_rect(i) self.contents.clear_rect(rect) end self.contents.draw_text(0, 0, self.contents.width, WLH, "Confirmation?", 1) rect = item_rect(0) self.contents.draw_text(rect, "Oui", 1) rect = item_rect(1) self.contents.draw_text(rect, "Non", 1) end #-------------------------------------------------------------------------- def item_rect(index) rect = Rect.new(0, 0, 0, 0) rect.width = (contents.width + @spacing) / @column_max - @spacing rect.height = WLH rect.x = index % @column_max * (rect.width + @spacing) rect.y = (index / @column_max * WLH) + WLH return rect end end
# Ce module donne un niveau supplémentaire pour chaque arme module RPG class Weapon < BaseItem attr_accessor :level alias akin_weapon_level_system_ini initialize def initialize akin_weapon_level_system_ini @level = 1 end end end
# Ce module calcule le niveau supplémentaire de chaque arme module Akin_Weapons def self.level_up(weapon_input) if weapon_input.level == nil or weapon_input.level == 0 weapon_input.level = 1 end weapon_input.level += 1 #--------Fonctions niveau supplémentaire-------------A34sZ1A ----------------------- # Les stats augmentent de 20 % de leur valeur précédente + 1 # A chaque niveau supplémentaire cette formule est appliquée # Soyez sure que vous renvoyez un entier grâce à "Integer()" # Si vous modifiez la fonction, une autre à besoin d'être changée # cherchez BZ8q1 weapon_input.atk = Integer(weapon_input.atk * 1.2 + 1) weapon_input.def = Integer(weapon_input.def * 1.2 + 1) weapon_input.spi = Integer(weapon_input.spi * 1.2 + 1) weapon_input.agi = Integer(weapon_input.agi * 1.2 + 1) #-------Fin des fonctions niveau supplémentaire----------------------------------------- end end
#------------------------------------------------------------------------------ # Ajoute des méthodes à window_base pour afficher l'icône de l'arme équipée #==============================================================================
class Window_Base < Window def draw_actor_weapon(actor, x, y) self.contents.font.color = power_up_color self.contents.draw_text(x, y, 96, WLH, "Equipé :") self.contents.font.color = normal_color n = actor.weapon_id equiped_weapon = $data_weapons[n] if equiped_weapon == nil self.contents.draw_text(x + 8, y + WLH, 192, WLH, "Aucun") else self.contents.draw_text(x + 8, y + WLH, 192, WLH, equiped_weapon.name) if equiped_weapon.level == nil or equiped_weapon.level == 0 $data_weapons[n].level = 1 equiped_weapon = $data_weapons[n] end self.contents.font.color = system_color self.contents.draw_text(x + 8, y + WLH * 2, 112, WLH, "Arme Niv. :") self.contents.font.color = normal_color self.contents.draw_text(x + 120, y + WLH * 2, 64, WLH, equiped_weapon.level) end end end
#============================================================================== # ** Window_Char_WeaponStatus #------------------------------------------------------------------------------ # Cette fenêtre affiche chaque arme des joueurs, le niveau des armes sur l'écran #==============================================================================
class Window_Char_WeaponStatus < Window_Selectable #-------------------------------------------------------------------------- # * Initialisation de l'objet # x : Coordonnée X de la fenêtre # y : Coordonnée Y de la fenêtre #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 384, 416) refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.members.size for actor in $game_party.members draw_actor_face(actor, 2, actor.index * 96 + 2, 92) x = 104 y = actor.index * 96 + WLH / 2 draw_actor_name(actor, x, y) draw_actor_class(actor, x, y + WLH * 2) draw_actor_level(actor, x, y + WLH * 1) draw_actor_weapon(actor, x + 96, y) end end #-------------------------------------------------------------------------- # * Update cursor #-------------------------------------------------------------------------- def update_cursor if @index < 0 # No cursor self.cursor_rect.empty elsif @index < @item_max # Normal self.cursor_rect.set(0, @index * 96, contents.width, 96) elsif @index >= 100 # Self self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96) else # All self.cursor_rect.set(0, 0, contents.width, @item_max * 96) end end end
#============================================================================== # ** Window_Akin_Price #------------------------------------------------------------------------------ # Cette fenêtre affiche le prix de l'amélioration #=============================================================================
class Window_Akin_Price < Window_Base #-------------------------------------------------------------------------- # * Initialisation de l'objet # x : Coordonnée X de la fenêtre # y : Coordonnée Y de la fenêtre #-------------------------------------------------------------------------- def initialize(x, y, price = 0) super(x, y, 160, 72) @price = price refresh(@price) end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh(price) self.contents.clear self.contents.draw_text(0, -4, 80, 24, "Prix") draw_currency_value(price, 4, 12, 120) end end
#============================================================================== # ** Window_WeapUpgradeStatus #------------------------------------------------------------------------------ # Cette fenêtre vous indique ce que l'amélioration fera a votre arme #==============================================================================
class Window_WeapUpgradeStatus < Window_Base #-------------------------------------------------------------------------- # * Initialisation de l'objet # x : Coordonnée X de la fenêtre # y : Coordonnée Y de la fenêtre # actor : Héros #-------------------------------------------------------------------------- def initialize(x, y, weapon) super(x, y, 160, WLH * 4 + 32) @weapon = weapon refresh(@weapon) end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh(weapon) @weapon = weapon unless @weapon == nil self.contents.clear draw_parameter(0, 0, 0) draw_parameter(0, WLH * 1, 1) draw_parameter(0, WLH * 2, 2) draw_parameter(0, WLH * 3, 3) end end #-------------------------------------------------------------------------- # * Paramètres après l'équipement # new_atk : Attaque après l'équipement # new_def : Défense après l'équipement # new_spi : Esprit/Intelligence après l'équipement # new_agi : Agilité après l'équipement #-------------------------------------------------------------------------- def set_new_stats(new_atk, new_def, new_spi, new_agi) if @new_atk != new_atk or @new_def != new_def or @new_spi != new_spi or @new_agi != new_agi @new_atk = new_atk @new_def = new_def @new_spi = new_spi @new_agi = new_agi refresh(@weapon) end end #-------------------------------------------------------------------------- # * Get Post Equip Parameter Drawing Color # old_value : parameter before equipment change # new_value : parameter after equipment change #-------------------------------------------------------------------------- def new_parameter_color(old_value, new_value) if new_value > old_value # Get stronger return power_up_color elsif new_value == old_value # No change return normal_color else # Get weaker return power_down_color end end #-------------------------------------------------------------------------- # * Afficher les paramètres # x : draw spot x-coordinate # y : draw spot y-coordinate # type : type du paramètre (0 - 3) #-------------------------------------------------------------------------- def draw_parameter(x, y, type) case type when 0 name = "For." # inscrivez Ici ce qui correspond à la Force (5 Caractères Max.) value = @weapon.atk new_value = @new_atk when 1 name = "Def." # inscrivez Ici ce qui correspond à la Défense (5 Caractères Max.) value = @weapon.def new_value = @new_def when 2 name = "Int." # inscrivez Ici ce qui correspond à la Intelligence (5 Caractères Max.) value = @weapon.spi new_value = @new_spi when 3 name = "Agi." # inscrivez Ici ce qui correspond à la Agilité (5 Caractères Max.) value = @weapon.agi new_value = @new_agi end self.contents.font.color = system_color self.contents.draw_text(x + 4, y, 80, WLH, name) self.contents.font.color = normal_color self.contents.draw_text(x + 50, y, 30, WLH, value, 2) self.contents.font.color = system_color self.contents.draw_text(x + 79, y, 20, WLH, ">", 1) if new_value != nil self.contents.font.color = new_parameter_color(value, new_value) self.contents.draw_text(x + 98, y, 30, WLH, new_value, 2) end end end
#============================================================================== # ** Scene_Weapons_Upgrade #------------------------------------------------------------------------------ # Cette classe indique le processus d'amélioration de l'arme #==============================================================================
class Scene_Weapons_Upgrade < Scene_Base #-------------------------------------------------------------------------- # * Initialisation de l'objet # weapon_up_index : Position initiale du curseur de commande #-------------------------------------------------------------------------- def initialize(weapon_up_index = 0, player_index = 0) @weapon_up_index = weapon_up_index @actor_index = player_index @actor = $game_party.members[player_index] n = @actor.weapon_id @weapon = $data_weapons[n] end #-------------------------------------------------------------------------- # * Démarrage du processus #-------------------------------------------------------------------------- def start super create_menu_background create_select_window @gold_window = Window_Gold.new(384, 360) @character_window = Window_Char_WeaponStatus.new(0, 0) @header_window = Window_Base.new(384, 0, 160, 80) #--------Shop Heading --------------------A34sZ1A ----------------------- @header_window.contents.draw_text(0, 0, 128, 24, "Choisissez l'arme", 1) @header_window.contents.draw_text(0, 24, 128, 24, "à améliorer", 1) #--------Shop Heading End ----------------A34sZ1A ----------------------- @upgrade_window = Window_WeapUpgradeStatus.new(384, 160, @weapon) @upgrade_window.visible = false @price_window = Window_Akin_Price.new(384, 288, 0) @price_window.visible = false @confirm_window = Window_Confirm.new @confirm_window.visible = false end #-------------------------------------------------------------------------- # * Fin du processus #-------------------------------------------------------------------------- def terminate super dispose_menu_background @select_window.dispose @gold_window.dispose @character_window.dispose @header_window.dispose @upgrade_window.dispose @price_window.dispose @confirm_window.dispose $game_party.last_actor_index = 0 end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super update_menu_background @select_window.update @gold_window.update @character_window.update @confirm_window.update if @select_window.active @upgrade_window.visible = false @price_window.visible = false update_select_selection elsif @character_window.active @upgrade_window.visible = true @price_window.visible = true update_actor_selection update_weapon_upgrade elsif @confirm_window.active update_confirm_window_selection end end #-------------------------------------------------------------------------- # * Création d'une fenêtre de confirmation #-------------------------------------------------------------------------- def create_select_window #--------Textes du menus -------------A34sZ1A ------------------------ s1 = "Améliorer" s2 = "Quitter" #------- Fin---------------------------------------------------------------------- @select_window = Window_Command.new(160, [s1, s2]) @select_window.x = 384 @select_window.y = 80 @select_window.index = @weapon_up_index end #-------------------------------------------------------------------------- # * Update Command Selection #-------------------------------------------------------------------------- def update_select_selection if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) Sound.play_decision case @select_window.index when 0 # Upgrade start_actor_selection when 1 # Back return_scene end end end #-------------------------------------------------------------------------- # * Start Actor Selection #-------------------------------------------------------------------------- def start_actor_selection @select_window.active = false @character_window.active = true @character_window.index = 0 end #-------------------------------------------------------------------------- # * End Actor Selection #-------------------------------------------------------------------------- def end_actor_selection @select_window.active = true @character_window.active = false @character_window.index = -1 end #-------------------------------------------------------------------------- # * Update Actor Selection #-------------------------------------------------------------------------- def update_actor_selection if Input.trigger?(Input::B) @upgrade_window.visible = false @price_window.visible = false Sound.play_cancel end_actor_selection elsif Input.trigger?(Input::C) $game_party.last_actor_index = @character_window.index upgrade_weapon($game_party.last_actor_index) end end #-------------------------------------------------------------------------- # * Update Confirm Window #-------------------------------------------------------------------------- def update_confirm_window_selection if Input.trigger?(Input::B) Sound.play_cancel @confirm_window.active = false @confirm_window.visible = false @confirm_window.index = 0 @character_window.active = true @confirm_window.close elsif Input.trigger?(Input::C) if @confirm_window.index == 0 # Yes @confirm_window.active = false @confirm_window.visible = false @confirm_window.index = 0 @character_window.active = true Sound.play_use_skill player_index = @character_window.index @actor = $game_party.members[player_index] n = @actor.weapon_id equiped_weapon = $data_weapons[n] $game_party.lose_gold(@price) Akin_Weapons.level_up(equiped_weapon) @character_window.refresh @gold_window.refresh elsif @confirm_window.index == 1 # No Sound.play_cancel @confirm_window.active = false @confirm_window.visible = false @confirm_window.index = 0 @character_window.active = true @confirm_window.close end end end #-------------------------------------------------------------------------- # * Update Upgrade Window #-------------------------------------------------------------------------- def update_weapon_upgrade player_index = @character_window.index @actor = $game_party.members[player_index] n = @actor.weapon_id @weapon = $data_weapons[n] unless @weapon == nil #--------Formule des prix -------------A34sZ1A ----------------------- # Les prix augmentent de 20 % de leur valeur précédente + 1 # La valeur est affiché dans la fenêtre # Soyez sur que la valeur soit un entier en utilisant ".to_i" # Si vous modifiez la fonction, une autre à besoin d'être changée # cherchez SER23 temp = Math.exp(@weapon.level / 1.7) @price = 3000 * @weapon.level + temp @price = @price.to_i #-------Fin de la formule des prix --------------------------------------------- @upgrade_window.refresh(@weapon) @price_window.refresh(@price) @upgrade_window.visible = true @price_window.visible = true if @weapon.level < 20 #--------Fonctions niveau supplémentaire------BZ8q1-------A34sZ1A ----------------------- # Les niveaux augmentent de 20 % de leur valeur précédente + 1 # Faites que cette formule soit la même que celle mise pour le niveau supplémentaire # La valeur est affiché dans la fenêtre # Soyez sur que la valeur soit un entier en utilisant "Integer()" after_atk = Integer(@weapon.atk * 1.2 + 1) after_def = Integer(@weapon.def * 1.2 + 1) after_spi = Integer(@weapon.spi * 1.2 + 1) after_agi = Integer(@weapon.agi * 1.2 + 1) #-------Fin des fonctions niveau supplémentaire----------------------------------------- @upgrade_window.set_new_stats(after_atk, after_def, after_spi, after_agi) else @upgrade_window.set_new_stats(@weapon.atk, @weapon.def, @weapon.spi, @weapon.agi) @price_window.refresh("/ ") end else @upgrade_window.visible = false @price_window.visible = false end end #-------------------------------------------------------------------------- # * Upgrade Weapon Selected #-------------------------------------------------------------------------- def upgrade_weapon(player_index) @actor = $game_party.members[player_index] n = @actor.weapon_id equiped_weapon = $data_weapons[n] if equiped_weapon == nil Sound.play_buzzer else #--------Formule des prix ----SER23---------A34sZ1A ------------------- # Les niveaux augmentent de 20 % de leur valeur précédente + 1 # Faites que cette formule soit la même que celle mise pour la formule des prix # La valeur est affiché dans la fenêtre # Soyez sur que la valeur soit un entier en utilisant ".to_i" temp = Math.exp(@weapon.level / 1.7) @price = 100 * @weapon.level + temp @price = @price.to_i #-------Fin de la Formule des prix --------------------------------------------- #--------Niveau maximum de l'arme-------------A34sZ1A ----------------------- # Changer le nombre après"if equiped_weapon.level >=" # en le niveau maximum que l'arme peut atteindre if equiped_weapon.level >= 20 #--------Fin niveau maximum de l'arme---- ---A34sZ1A ----------------------- Sound.play_buzzer elsif @price > $game_party.gold Sound.play_buzzer else Sound.play_decision @confirm_window.visible = true @character_window.active = false @confirm_window.open @confirm_window.index = 0 @confirm_window.active = true end @character_window.refresh end end #-------------------------------------------------------------------------- # * Retour à la map #-------------------------------------------------------------------------- def return_scene #--------Fin du retour-------------A34sZ1A ----------------------- # Éditez cette ligne de code si vous voulez utiliser ce système par # le menu principal #$scene = Scene_Menu.new(0) # Changez ce nombre pour placer le curseur dans le menu $scene = Scene_Map.new end end
# Cela édite la classe Scene_File pour ajouter une option de sauvegarde et de chargement des niveaux des armes. class Scene_File < Scene_Base #-------------------------------Alias List alias akin_weaps_write_save_data write_save_data alias akin_weaps_read_save_data read_save_data def write_save_data(file) akin_weaps_write_save_data(file) Marshal.dump($data_weapons, file) end def read_save_data(file) akin_weaps_read_save_data(file) $data_weapons = Marshal.load(file) end end |
|