Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: [XP] Système de durabilité Sam 14 Sep 2013 - 18:47 | |
| Durability System Auteur : Mat Description : Ce système permet d'appliquer une durabilité aux armes et armures qui se désagrège aux fils des combats. Si le héros est touché, son armure perds en durabilité Si le héros est en garde, son bouclier perds en durabilité Si le coup est un coup critique, son casque perds en durabilité Si l'attaquant réussi son coup, son arme perd en durabilité Dépendance : Database Management v1Advanced ItemsScript : - Code:
-
#=============================================================================== # ■ Durability System #------------------------------------------------------------------------------- # Auteur : Mat # Version : 1.0 # Date : 09/07/2008 #------------------------------------------------------------------------------- # Ce système permet d'appliquer une durabilité aux armes et armures qui se # désagrège aux fils des combats. # # Si le Game_Actor est touché, son armure perds en durabilité # Si le Game_Actor est en garde, son bouclier perds en durabilité # Si le coup est un coup critique, son casque perds en durabilité # Si l'attaquant réussi son coup, son arme perd en durabilité # # Dépendance : # - Database Management # - Advanced Item #------------------------------------------------------------------------------- # Utilisation : # # 1) Installation : # Copier le Database Management dans un script au dessus de Main. # Copier tous les scripts Advanced_Item 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 deux dossiers # nommer "ArmorDurability Data" et "WeaponDurability Data"dans le dossier # de votre jeu, contenant un fichier tout deux un fichier nommé # "template.dbsl". Il suffit de copier le template et de remplir les # différents champs et ceci pour chaque arme et armure. # #------------------------------------------------------------------------------- # Personnalisation : # Durabilité par défaut lorsqu'elle n'est pas défini dans la base de données : DEFAULT_DURABILITY = 1000 # Reduction de la durabilité lors d'un coup : DURABILITY_REDUCE = 1 # Cout d'un point de reparation : DURABILITY_PRICE = 1 #===============================================================================
Database.create_table("WeaponDurability") { |t| t.column :weapon_id, :integer, 0 t.column :max_durability, :integer, 0 }
Database.create_table("ArmorDurability") { |t| t.column :armor_id, :integer, 0 t.column :max_durability, :integer, 0 }
#=============================================================================== # ▼ Game_Weapon #------------------------------------------------------------------------------- # Ajout des attributs durability et max_durability #=============================================================================== class Game_Weapon attr_accessor :durability #durabilité actuelle de l'arme attr_accessor :max_durability #durabilité maximale de l'arme
#============================================================================= # ● setup # weapon_id : id de l'objet RPG::Weapon servant à l'initialisation. #============================================================================= alias durability_setup_weapon setup def setup(weapon_id) durability_setup_weapon(weapon_id) weapon = Database::WeaponDurability.find { |weapon| weapon.weapon_id == weapon_id } @max_durability = weapon != nil ? weapon.max_durability : DEFAULT_DURABILITY @durability = @max_durability end #============================================================================= # ● price #----------------------------------------------------------------------------- # Définition du prix de l'arme ponctué par sa durabilité #============================================================================= def price return (@price * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● atk #----------------------------------------------------------------------------- # Définition de l'atk de l'arme ponctué par sa durabilité #============================================================================= def atk return (@atk * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● pdef #----------------------------------------------------------------------------- # Définition du pdef de l'arme ponctué par sa durabilité #============================================================================= def pdef return (@pdef * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● mdef #----------------------------------------------------------------------------- # Définition du mdef de l'arme ponctué par sa durabilité #============================================================================= def mdef return (@mdef * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● str_plus #----------------------------------------------------------------------------- # Définition du str_plus de l'arme ponctué par sa durabilité #============================================================================= def str_plus return (@str_plus * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● dex_plus #----------------------------------------------------------------------------- # Définition du dex_plus de l'arme ponctué par sa durabilité #============================================================================= def dex_plus return (@dex_plus * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● agi_plus #----------------------------------------------------------------------------- # Définition du agi_plus de l'arme ponctué par sa durabilité #============================================================================= def agi_plus return (@agi_plus * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● int_plus #----------------------------------------------------------------------------- # Définition du int_plus de l'arme ponctué par sa durabilité #============================================================================= def int_plus return (@int_plus * (@durability.to_f / @max_durability.to_f)).to_i end
#============================================================================= # ● repare #----------------------------------------------------------------------------- # Redonne toute sa durabilité à l'arme #============================================================================= def repare @durability = @max_durability end #============================================================================= # ● repare_price #----------------------------------------------------------------------------- # Définie le prix de réparation de l'arme #============================================================================= def repare_price return (@max_durability - @durability) * DURABILITY_PRICE end #============================================================================= # ● reduce_durability # reduce : le nombre par lequelle sera reduit la durabilité #----------------------------------------------------------------------------- # Permet de diminuer la durabilité de l'arme #============================================================================= def reduce_durability(reduce) @durability -= reduce if(@durability > 0) end end
#=============================================================================== # ▼ Game_Armor #------------------------------------------------------------------------------- # Ajout des attributs durability et max_durability #=============================================================================== class Game_Armor attr_accessor :durability #durabilité actuelle de l'armure attr_accessor :max_durability #durabilité maximale de l'armure
#============================================================================= # ● setup # armor_id : id de l'objet RPG::Armor servant à l'initialisation. #============================================================================= alias durability_setup_armor setup def setup(armor_id) durability_setup_armor(armor_id) armor = Database::ArmorDurability.find { |armor| armor.armor_id == armor_id } @max_durability = armor ? armor.max_durability : DEFAULT_DURABILITY @durability = @max_durability end #============================================================================= # ● price #----------------------------------------------------------------------------- # Définition du prix de l'armure ponctué par sa durabilité #============================================================================= def price return (@price * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● atk #----------------------------------------------------------------------------- # Définition de l'atk de l'armure ponctué par sa durabilité #============================================================================= def atk return (@atk * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● pdef #----------------------------------------------------------------------------- # Définition du pdef de l'armure ponctué par sa durabilité #============================================================================= def pdef return (@pdef * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● mdef #----------------------------------------------------------------------------- # Définition du mdef de l'armure ponctué par sa durabilité #============================================================================= def mdef return (@mdef * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● str_plus #----------------------------------------------------------------------------- # Définition du str_plus de l'armure ponctué par sa durabilité #============================================================================= def str_plus return (@str_plus * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● dex_plus #----------------------------------------------------------------------------- # Définition du dex_plus de l'armure ponctué par sa durabilité #============================================================================= def dex_plus return (@dex_plus * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● agi_plus #----------------------------------------------------------------------------- # Définition du agi_plus de l'armure ponctué par sa durabilité #============================================================================= def agi_plus return (@agi_plus * (@durability.to_f / @max_durability.to_f)).to_i end #============================================================================= # ● int_plus #----------------------------------------------------------------------------- # Définition du int_plus de l'armure ponctué par sa durabilité #============================================================================= def int_plus return (@int_plus * (@durability.to_f / @max_durability.to_f)).to_i end
#============================================================================= # ● repare #----------------------------------------------------------------------------- # Redonne toute sa durabilité à l'armure #============================================================================= def repare @durability = @max_durability end #============================================================================= # ● repare_price #----------------------------------------------------------------------------- # Définie le prix de réparation de l'armure #============================================================================= def repare_price return (@max_durability - @durability) * DURABILITY_PRICE end #============================================================================= # ● reduce_durability # reduce : le nombre par lequelle sera reduit la durabilité #----------------------------------------------------------------------------- # Permet de diminuer la durabilité de l'armure #============================================================================= def reduce_durability(reduce) @durability -= reduce if(@durability > 0) end end
#=============================================================================== # ▼ Game_Actor #------------------------------------------------------------------------------- # Redéfiniton de la méthode attack_effect afin de prendre en compte la réduction # de durabilité des armures. #=============================================================================== class Game_Actor < Game_Battler #============================================================================= # ● attack_effect # attaker : attaquant #----------------------------------------------------------------------------- # Si le Game_Actor est touché, son armure perds en durabilité # Si le Game_Actor est en garde, son bouclier perds en durabilité # Si le coup est un coup critique, son casque perds en durabilité #============================================================================= def attack_effect(attacker) self.critical = false hit_result = (rand(100) < attacker.hit) if hit_result == true if @armor1 != nil @armor1.reduce_durability(DURABILITY_REDUCE) end atk = [attacker.atk - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 self.damage *= elements_correct(attacker.element_set) self.damage /= 100 if self.damage > 0 if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true if @armor3 != nil @armor3.reduce_durability(DURABILITY_REDUCE) end end if self.guarding? self.damage /= 2 if @armor2 != nil @armor2.reduce_durability(DURABILITY_REDUCE) end end end if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end eva = 8 * self.agi / attacker.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) end if hit_result == true remove_states_shock self.hp -= self.damage @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) else self.damage = "Miss" self.critical = false end return true end end
#=============================================================================== # ▼ Game_Ennemy #------------------------------------------------------------------------------- # Redéfiniton de la méthode attack_effect afin de prendre en compte la réduction # de durabilité de l'arme. #=============================================================================== class Game_Enemy < Game_Battler
#============================================================================= # ● attack_effect # attaker : attaquant #----------------------------------------------------------------------------- # Si l'attaquant réussi son coup, son arme perd en durabilité #============================================================================= def attack_effect(attacker) self.critical = false hit_result = (rand(100) < attacker.hit) if hit_result == true if attacker.weapon != nil attacker.weapon.reduce_durability(DURABILITY_REDUCE) end atk = [attacker.atk - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 self.damage *= elements_correct(attacker.element_set) self.damage /= 100 if self.damage > 0 if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true end if self.guarding? self.damage /= 2 end end if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end eva = 8 * self.agi / attacker.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) end if hit_result == true remove_states_shock self.hp -= self.damage @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) else self.damage = "Miss" self.critical = false end return true end end
Modification des fenêtres : - Code:
-
#=============================================================================== # ▼ Window_Item #=============================================================================== class Window_Item < Window_Selectable #============================================================================= # ● update_help #============================================================================= def update_help text = "" if self.item != nil text += self.item.description if !self.item.is_a?(Game_Item) text += " " + self.item.durability.to_s + "/" + self.item.max_durability.to_s end end @help_window.set_text(text) end end
#=============================================================================== # ▼ Window_EquipItem #=============================================================================== class Window_EquipItem < Window_Selectable #============================================================================= # ● update_help #============================================================================= def update_help text = "" if self.item != nil text += self.item.description if !self.item.is_a?(Game_Item) text += " " + self.item.durability.to_s + "/" + self.item.max_durability.to_s end end @help_window.set_text(text) end end
#=============================================================================== # ▼ Window_EquipRight #=============================================================================== class Window_EquipRight < Window_Selectable #============================================================================= # ● update_help #============================================================================= def update_help text = "" if self.item != nil text += self.item.description if !self.item.is_a?(Game_Item) text += " " + self.item.durability.to_s + "/" + self.item.max_durability.to_s end end @help_window.set_text(text) end end
#=============================================================================== # ▼ Window_ShopSell #=============================================================================== class Window_ShopSell < Window_Selectable #============================================================================= # ● update_help #============================================================================= def update_help text = "" if self.item != nil text += self.item.description if !self.item.is_a?(Game_Item) text += " " + self.item.durability.to_s + "/" + self.item.max_durability.to_s end end @help_window.set_text(text) end
end |
|
Mat Paysan (niveau 2)
Messages postés : 17 Date d'inscription : 05/09/2013 Jauge LPC :
| Sujet: Re: [XP] Système de durabilité Sam 14 Sep 2013 - 18:52 | |
| Scène de réparation : - Code:
-
#=============================================================================== # ▼ Scene_Repare #------------------------------------------------------------------------------- # Cette scène permet de réparer les armes et armures #------------------------------------------------------------------------------- # Pour appeler cette scene, utiliser le code $scene = Scene_Repare.new #=============================================================================== class Scene_Repare #============================================================================= # ● main #============================================================================= def main @help_window = Window_Help.new @command_window = Window_RepareCommand.new
@gold_window = Window_Gold.new @gold_window.x = 480 @gold_window.y = 64 @repare_window = Window_Repare.new @repare_window.active = false @repare_window.help_window = @help_window Graphics.transition
loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @help_window.dispose @command_window.dispose @gold_window.dispose @repare_window.dispose end #============================================================================= # ● update #============================================================================= def update @help_window.update @command_window.update @gold_window.update @repare_window.update
if @command_window.active update_command return end
if @repare_window.active update_repare return end end #============================================================================= # ● update_command #============================================================================= def update_command if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.decision_se) @command_window.active = false @repare_window.active = true @repare_window.refresh when 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Map.new end return end end #============================================================================= # ● update_repare #============================================================================= def update_repare if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @command_window.active = true @repare_window.active = false @help_window.set_text("") return end if Input.trigger?(Input::C) @item = @repare_window.item if @item == nil or @item.is_a?(Game_Item) or @item.repare_price == 0 $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.shop_se) @item.repare $game_party.lose_gold(@item.repare_price) @gold_window.refresh @repare_window.refresh end end end
#=============================================================================== # ▼ Window_RepareCommand #=============================================================================== class Window_RepareCommand < Window_Selectable
#============================================================================= # ● initialize #============================================================================= def initialize super(0, 64, 480, 64) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize @item_max = 2 @column_max = 2 @commands = ["Reparer", "Annuler"] refresh self.index = 0 end
#============================================================================= # ● refresh #============================================================================= def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end
#============================================================================= # ● draw_item #============================================================================= def draw_item(index) x = 4 + index * 240 self.contents.draw_text(x, 0, 128, 32, @commands[index]) end end
#=============================================================================== # ▼ Window_Repare #=============================================================================== class Window_Repare < Window_Selectable
#============================================================================= # ● initialize #============================================================================= def initialize super(0, 128, 640, 352) @column_max = 1 refresh self.index = 0 end
#============================================================================= # ● refresh #============================================================================= def item return @data[self.index] end
#============================================================================= # ● refresh #============================================================================= def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = $game_party.items + $game_party.weapons + $game_party.armors @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) item = @data[index] if !item.is_a?(Game_Item) && (item.durability != item.max_durability) 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 / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) 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, item.name, 0) text = item.is_a?(Game_Item) ? "" : item.repare_price.to_s self.contents.draw_text(x + 256, y, 24, 32, text , 2) end
#============================================================================= # ● update_help #============================================================================= def update_help text = "" if self.item != nil text += self.item.description if !self.item.is_a?(Game_Item) text += " " + self.item.durability.to_s + "/" + self.item.max_durability.to_s end end @help_window.set_text(text) end end
Utilisation : Copier le Database Management dans un script au dessus de Main. Copier le Advanced Items dans un script au dessus de Main. Copier ce script dans un nouveau script entre les deux dépendances et Main. Lancer une première fois votre jeu. Le jeu créera ainsi deux dossiers nommer "ArmorDurability Data" et "WeaponDurability Data"dans le dossier de votre jeu, contenant un fichier tout deux un fichier nommé "template.dbsl". Il suffit de copier le template et de remplir les différents champs et ceci pour chaque arme et armure. Il n'est pas nécessaire de définir la durabilité de chaque arme et armure, si rien n'est donné la valeur DEFAULT_DURABILITY en début de script est utilisé On peut personnalisé la perte de durabilité et le coup de réparation en début de script : Réduction de la durabilité lors d'un coup : DURABILITY_REDUCE = 1 Coût d'un point de réparation : DURABILITY_PRICE = 1 |
|
Elekami Fondateur
Messages postés : 19071 Date d'inscription : 19/07/2008 Jauge LPC :
| Sujet: Re: [XP] Système de durabilité Dim 15 Sep 2013 - 1:04 | |
| Bonsoir, merci du partage, je t'ajoute des points. |
|
Contenu sponsorisé
| Sujet: Re: [XP] Système de durabilité | |
| |
|