Bonjour !!
Voici un script assez simple qui vous permettra de faire des fiches pour chaques ennemis.
Il s'agit de la version de base, d'autre viendront par la suite afin d'offrir plus de possibilités d'utilisation.
Tout d'abord, petit screen pour voir ce que cela donne in-game :
Créez un nouveau script au dessus de " Main " et collez y ceci :
class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear num = $game_variables[1] # ID de la variable associé aux fiches enemy = $data_enemies[num] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end endend# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end endend
Il s'agit ici de la version " Fiche ".
Pour l'utiliser, c'est tres simple :
Créer un objet " Fiche " pour chaque ennemis ( Utilisable seulement sur la carte, non consommable ).
Créer un evenement commun pour chaque objet ( En appel ).
Programmer les comme ceci :
> Rendre variable " Fiche ennemi " egale à XX
> Inserer un script : $scene = Scene_Bestiaire.new
Et XX sera l'ID du monstre de la fiche.
Utiliser toujours la même variable ( Dont l'ID devra etre inscrite dans le script, ligne 15 ).
N'oubliez pas de lier les objets " Fiche " à leurs evenements commun respectif.
Ensuite, à vous de voir quand obtenir ces objets " Fiche ".
Ils s'utiliseront par le menu " Objet ".
------------------------------------------------------------
Voici la version Bestiaire complet !!
class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear $max = 32 # Nombre maximum d'ennemi !! enemy = $data_enemies[$num] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end endend# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::RIGHT) and $num != $max $num += 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::RIGHT) and $num == $max $num = 1 $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::LEFT) and $num > 1 $num -= 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::LEFT) and $num == 1 $num = $max $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::UP) and ($num + 10) <= $max $num += 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::UP) and ($num + 10) > $max $num = $max $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::DOWN) and ($num - 10) >= 1 $num -= 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::DOWN) and ($num - 10) < 1 $num = 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end endend
Pour l'utiliser, créer un objet " Bestiaire " avec un event commun programmé comme ceci :
> Inserer un script : $num = 1
$scene = Scene_Bestiaire.new
( 2 lignes dans la même commande d'event !! )
A la ligne 15 du script, entrez le nombre d'ennemi !!
( L'ID utilisé la plus élevé de votre base de donnée )
Les fleches de direction permettent de changer de page !!
--------------------------------------------------------------------
Voici la version " Bestiaire progressif " !!
Les ennemis y apparaissent au fur et à mesure que vous les tués !!
class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear $max = ($victime.size - 1) enemy = $data_enemies[$victime[$num]] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end end end# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::RIGHT) and $num != $max $num += 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::RIGHT) and $num == $max $num = 0 $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::LEFT) and $num > 0 $num -= 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::LEFT) and $num == 0 $num = $max $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::UP) and ($num + 10) <= $max $num += 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::UP) and ($num + 10) > $max $num = $max $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::DOWN) and ($num - 10) >= 1 $num -= 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::DOWN) and ($num - 10) < 1 $num = 0 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end endend
Il nous reste quelques modifications à faire.
Dans le script " Scene_Title ", inserer ceci à la ligne 18 :
$victime = []
Ca sert à créer votre tableau où seront stocké vos victimes.
Dans le script " Scene_Save ", inserer cette ligne à la suite des autres semblables ( L 83 ) :
Marshal.dump($victime, file)
Ca sert à sauvergarder vos victimes.
( A moins que vous ne preferiez tout recommencer à chaque partie ? )
Dans le script " Scene_Load ", inserer cette ligne à la suite des autres semblables ( L 83 ) :
$victime = Marshal.load(file)
Ca sert à charger vos victimes à chaque partie.
Dans le script " Scene_Battle 2 ", inserer ceci à la ligne 145 :
for enemy in $game_troop.enemies unless $victime.include?(enemy.id) then $victime.push(enemy.id) end end
Ca sert à classer vos victimes dans le tableau ( donc dans le bestiaire ).
Reste plus que une chose à vous dire :
Apres avoir tué au moins un monstre vous pouvez donner le bestiaire à votre héros.
Il peut s'agir d'un objet lié à un event commun.
L'event d'ouverture du bestiaire doit avoir la commande " inserer un script " avec ceci dedans :
$num = 0$scene = Scene_Bestiaire.new
Voici un script assez simple qui vous permettra de faire des fiches pour chaques ennemis.
Il s'agit de la version de base, d'autre viendront par la suite afin d'offrir plus de possibilités d'utilisation.
Tout d'abord, petit screen pour voir ce que cela donne in-game :
Créez un nouveau script au dessus de " Main " et collez y ceci :
class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear num = $game_variables[1] # ID de la variable associé aux fiches enemy = $data_enemies[num] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end endend# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end endend
Il s'agit ici de la version " Fiche ".
Pour l'utiliser, c'est tres simple :
Créer un objet " Fiche " pour chaque ennemis ( Utilisable seulement sur la carte, non consommable ).
Créer un evenement commun pour chaque objet ( En appel ).
Programmer les comme ceci :
> Rendre variable " Fiche ennemi " egale à XX
> Inserer un script : $scene = Scene_Bestiaire.new
Et XX sera l'ID du monstre de la fiche.
Utiliser toujours la même variable ( Dont l'ID devra etre inscrite dans le script, ligne 15 ).
N'oubliez pas de lier les objets " Fiche " à leurs evenements commun respectif.
Ensuite, à vous de voir quand obtenir ces objets " Fiche ".
Ils s'utiliseront par le menu " Objet ".
------------------------------------------------------------
Voici la version Bestiaire complet !!
class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear $max = 32 # Nombre maximum d'ennemi !! enemy = $data_enemies[$num] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end endend# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::RIGHT) and $num != $max $num += 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::RIGHT) and $num == $max $num = 1 $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::LEFT) and $num > 1 $num -= 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::LEFT) and $num == 1 $num = $max $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::UP) and ($num + 10) <= $max $num += 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::UP) and ($num + 10) > $max $num = $max $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::DOWN) and ($num - 10) >= 1 $num -= 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::DOWN) and ($num - 10) < 1 $num = 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end endend
Pour l'utiliser, créer un objet " Bestiaire " avec un event commun programmé comme ceci :
> Inserer un script : $num = 1
$scene = Scene_Bestiaire.new
( 2 lignes dans la même commande d'event !! )
A la ligne 15 du script, entrez le nombre d'ennemi !!
( L'ID utilisé la plus élevé de votre base de donnée )
Les fleches de direction permettent de changer de page !!
--------------------------------------------------------------------
Voici la version " Bestiaire progressif " !!
Les ennemis y apparaissent au fur et à mesure que vous les tués !!
class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear $max = ($victime.size - 1) enemy = $data_enemies[$victime[$num]] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end end end# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::RIGHT) and $num != $max $num += 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::RIGHT) and $num == $max $num = 0 $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::LEFT) and $num > 0 $num -= 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::LEFT) and $num == 0 $num = $max $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::UP) and ($num + 10) <= $max $num += 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::UP) and ($num + 10) > $max $num = $max $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::DOWN) and ($num - 10) >= 1 $num -= 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::DOWN) and ($num - 10) < 1 $num = 0 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end endend
Il nous reste quelques modifications à faire.
Dans le script " Scene_Title ", inserer ceci à la ligne 18 :
$victime = []
Ca sert à créer votre tableau où seront stocké vos victimes.
Dans le script " Scene_Save ", inserer cette ligne à la suite des autres semblables ( L 83 ) :
Marshal.dump($victime, file)
Ca sert à sauvergarder vos victimes.
( A moins que vous ne preferiez tout recommencer à chaque partie ? )
Dans le script " Scene_Load ", inserer cette ligne à la suite des autres semblables ( L 83 ) :
$victime = Marshal.load(file)
Ca sert à charger vos victimes à chaque partie.
Dans le script " Scene_Battle 2 ", inserer ceci à la ligne 145 :
for enemy in $game_troop.enemies unless $victime.include?(enemy.id) then $victime.push(enemy.id) end end
Ca sert à classer vos victimes dans le tableau ( donc dans le bestiaire ).
Reste plus que une chose à vous dire :
Apres avoir tué au moins un monstre vous pouvez donner le bestiaire à votre héros.
Il peut s'agir d'un objet lié à un event commun.
L'event d'ouverture du bestiaire doit avoir la commande " inserer un script " avec ceci dedans :
$num = 0$scene = Scene_Bestiaire.new