Mage Lv.11
Age : 26 Avertissements : 3 Inscrit le : 03/04/2010 Messages : 512
| Sujet: [VX] Weapon Level System Sam 22 Mai 2010 - 19:01 | |
| Voici un petit script que j'ai trouvé sur Oniromancie et que j'aimerais partager. En voici l'auteur : Akin Le traducteur est Blockade. Ce script permet d'appeler un magasin d'évolution des armes. Il n'y pas de versions, que je sache, je ne connais pas la date de sortie de ce script. Toutes les consignes figurent dans le script. Il vous suffira d'appeler le script en mettant : $scene = Scene_Weapons_Upgrade.new . Le script : - 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
Pour ceux qui voudraient une démo et des screens, je les fais tout de suite. EDIT : Le screen : Le screen La démo : http://www.megaupload.com/?d=7C0UQBUI |
|
Ex-Admin Cruelle
Age : 32 Inscrit le : 03/07/2008 Messages : 2441
| Sujet: Re: [VX] Weapon Level System Lun 24 Mai 2010 - 14:07 | |
| Ouais je l'avais déjà posté. Mais y'a eu un hack je sais pas quand, et il a disparu. Donc bah merci de le re-poster, mais c'est pas "Le traducteur", mais "La traduction à été faite par". Ça fait mieux, et je suis pas un gars *_* |
|
Habitant Lv.6
Inscrit le : 22/08/2011 Messages : 101
| Sujet: Re: [VX] Weapon Level System Sam 30 Mar 2013 - 20:03 | |
| Désolé du nécropost, mais je voulais signaler que le script contient apparemment un défaut. La limite de 3000 pièce permet en effet de ne pas améliorer l'arme si on n'a pas l'argent, par contre, au delà, imaginons je suis au niveau 3, je veux le niveau 4 qui coûte 12 000 Or, il me sera attribué même si je n'ai que 10 000 Or. Mon compte sera vidé, mais l'amélioration est possible ce qui ne devrait pas être le cas.
D'où cela peut il bien venir ? Voulez-vous des screens pour prouver ce que j'avance ? |
|