Randal
Seigneur (Nv 2)
Nombre de messages : 425
Age : 31
Point(s) Fort(s) : Tout
Point(s) Faible(s) : Rien
Niveau RPG Maker : Dieu
Logiciel préféré : RMXP
Date d'inscription : 08/01/2007
|
Sujet: Bestiaire Sam 2 Juin 2007 - 15:14 |
|
|
script créé par KrazPlay, revu et corrigé par arnonaud
Vous avez pleins d'ennemis ? Vous voulez afficher un menu avec toutes ses caractéristiques ? Voici deux images qui parlent beaucoup sur ce menu bestiaire :
http://storage.canalblog.com/92/76/199551/9051492.jpg http://storage.canalblog.com/99/90/199551/9051498.jpg
- Ce script à pour fonction d'afficher un bestiaire des monstres du jeu. Les monstres ne se rajouteront au bestiaire que une fois vaincu.
- Pour l'utiliser faite un évenement et faites "insérer un script" et collez y le texte suivant:
$scene = Scene_Liste_Monstres.new
- Pour l'installer faite ceci: Copiez le code ci-dessous, ouvrez l'éditeur de script (F11) et créez en un nouveau au dessus de Main. Nommez le script: "Scene_liste_Monstres" et collez-y le code!
Code:
- Code:
-
#============================== # ■ Scene_Liste_Monstres v2 par Krazplay #------------------------------ # Ce scrîpt fonctionne avec les scrîpts Window_Monstres et Window_details_monstre. # N'oubliez pas que les variables 4001 à 4000+Nbre de monstres dans votre database # sont utilisés pour mémoriser le nombre de monstres tués de chaque sorte. # Pour appeller ce menu il suffit d'écrire la ligne suivante : # $scene = Scene_Liste_Monstres.new # Si vous venez depuis un menu vous pouvez ajouter cela : # $vientdumenu = 1 # Cela permet de revenir dans le menu et non sur la carte après avoir consulter # le bestiaire. # A propos de @detailspardefaut et @nomspardefaut respectivement ligne 26 et 197 # Ces 2 variables sont mis en vrai par défaut, mais vous pouvez les mettre en # false. Si @detailspardefaut est mis en false vous ne pourrez voir les détails # des ennemis que si vous en avez tuer au moins un, si @nomspardefaut est mis # en false vous ne verrez pas le nom des ennemis que vous n'avez jamais tué. # Je remercie aussi celui qui a créé le graphique de défense élémentale, seule # chose que je n'ai pas faite moi-même, j'ai du y opérer quelques modifications # mais il fonctionne parfaitement ;) #============================== # Revu et corrigé par Arnonaud le 21 Décembre 2006! Bon Making!
class Scene_Liste_Monstres
def initialize @detailspardefaut = false end
def main @monstres_window = Window_Monstres.new(0,0) Graphics.transition @monstres_window.refresh loop do Graphics.update #Efface ce qu'on pourrait voir par transparence Input.update update_command if $scene != self #Si la scène ne doit plus être celle-ci @monstres_window.dispose #On efface la fenêtre des monstres break #On casse la boucle sinon on restera tjs ici end end end #main
def update_command if Input.trigger?(Input::B) #B = Bouton échap $game_system.se_play($data_system.cancel_se) if @monstres_window.active? == 1 if $vientdumenu == 1 $vientdumenu = 0 $scene = Scene_Menu.new(0) #On repart dans le menu (curseur sur Objets) else $scene = Scene_Map.new #On repart sur la carte end Graphics.freeze #Pour éviter une transition trop brutal end if @Window_details_monstre_active == 1 @Window_details_monstre.dispose @Window_details_monstre_active = 0 @monstres_window = Window_Monstres.new(@memo[0], @memo[1]) end end
if Input.trigger?(Input::RIGHT) if @monstres_window.active? == 1 @monstres_window.nettoyage @monstres_window.pageplusun @monstres_window.refresh end if @Window_details_monstre_active == 1 and @monstres_window.selection+@pagetourne < $data_enemies.size-1 if $game_variables[4000 + @monstres_window.selection+@pagetourne+1] != 0 or @detailspardefaut == true @Window_details_monstre.dispose @pagetourne += 1 @Window_details_monstre = Window_details_monstre.new(@monstres_window.selection+@pagetourne) end end end
if Input.trigger?(Input::LEFT) if @monstres_window.active? == 1 @monstres_window.nettoyage @monstres_window.pagemoinsun @monstres_window.refresh end if @Window_details_monstre_active == 1 and @monstres_window.selection+@pagetourne > 1 if $game_variables[4000 + @monstres_window.selection+@pagetourne-1] != 0 or @detailspardefaut == true @Window_details_monstre.dispose @pagetourne -= 1 @Window_details_monstre = Window_details_monstre.new(@monstres_window.selection+@pagetourne) end end end
if Input.trigger?(Input::UP) if @monstres_window.active? == 1 @monstres_window.nettoyage @monstres_window.ligneplusun @monstres_window.refresh end end
if Input.trigger?(Input::DOWN) if @monstres_window.active? == 1 @monstres_window.nettoyage @monstres_window.lignemoinsun @monstres_window.refresh end end
if Input.trigger?(Input::C) #Confirmer if @monstres_window.active? == 1 and @Window_details_monstre_active != 1 if $game_variables[4000 + @monstres_window.selection] != 0 or @detailspardefaut == true @pagetourne = 0 @memo = @monstres_window.inactive @monstres_window.dispose @Window_details_monstre_active = 1 @Window_details_monstre = Window_details_monstre.new(@monstres_window.selection) end end end
end #update_command end #class Scene_Liste_Monstres
#============================== # ■ Window_Monstres v2 par Krazplay #------------------------------ #Permet de créer une fenêtre avec le nom de tout les ennemis tués et combien de #fois ils ont été tués. #============================== class Window_Monstres < Window_Base
def initialize(page, ligne) @nomspardefaut = false @active = 1 @page = page @ligne = ligne #Taille du cadre que l'on voie, mais dont on ne peut pas écrire dessus : super(0, 0, 640, 480) #Image invisible où l'on va pouvoir écrire dessus : self.contents = Bitmap.new(width-32, height-32) self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.clear self.contents.draw_text(20, 0, 500, 32, "Noms des monstres :") self.contents.draw_text(400, 0, 500, 32, "Nombres tués :") #Call'aile du canard de la dernière page : @dernierepage = Integer($data_enemies.size / 15) + 1 @derniereligne = Integer($data_enemies.size % 15) - 1 refresh end #def initialize
def refresh self.contents.draw_text(240, 420, 500, 32, "Page " + (@page+1).to_s + " / " + @dernierepage.to_s) self.cursor_rect.set(0, (40 + 26*@ligne), 580, 27) m = 1 if @page == @dernierepage - 1 monstremoins = 15 - (($data_enemies.size - 1) % 15) else monstremoins = 0 end for i in (1 + 15*@page)...(16 + 15*@page - monstremoins) if $game_variables[4000 + i] != 0 or @nomspardefaut == true self.contents.draw_text(20, (26 * m) + 15, 500, 26, $data_enemies[i].name) else self.contents.draw_text(20, (26 * m) + 15, 500, 26, "???") end self.contents.draw_text(470, (26 * m) + 15, 500, 26, $game_variables[4000 + i].to_s) m += 1 end end #end refresh def pageplusun if @page < @dernierepage -1 @page += 1 end if @ligne > @derniereligne -1 and @page == @dernierepage -1 @ligne = @derniereligne -1 end end def pagemoinsun if @page > 0 @page -= 1 end end def ligneplusun if @ligne > 0 @ligne -= 1 end end def lignemoinsun if @ligne < 14 unless @ligne >= @derniereligne -1 and @page == @dernierepage -1 @ligne += 1 end end end def selection return (@ligne+1) + (@page*15) end def nettoyage self.contents.clear self.contents.draw_text(20, 0, 500, 32, "Noms des monstres :") self.contents.draw_text(400, 0, 500, 32, "Nombres tués :") end def active? return @active end def inactive @active=0 return [@page,@ligne] end end #class Window_Monstres
#------------------------------ # ● draw_actor_battler de Krazplay # Dessine le battler de l'acteur aux coordonnées x,y # L'acteur peut aussi bien être un monstre qu'un personnage #------------------------------ class Window_Base < Window def draw_actor_battler(actor, x, y) bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue) cw = bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x - cw / 2, y - ch / 2, bitmap, src_rect) end end
#============================== # Graphic_Def_Elem #============================== class Window_Base FONT_SIZE = 18 WORD_ELEMENT_GUARD = "Déf. Elémentale" NUMBER_OF_ELEMENTS = 8 ELEMENT_ORDER = [1,3,8,5,2,4,7,6] GRAPH_SCALINE_COLOR = Color.new(255, 255, 255, 128) GRAPH_SCALINE_COLOR_SHADOW = Color.new( 0, 0, 0, 192) GRAPH_LINE_COLOR = Color.new(255, 255, 64, 255) GRAPH_LINE_COLOR_MINUS = Color.new( 64, 255, 255, 255) GRAPH_LINE_COLOR_PLUS = Color.new(255, 64, 64, 255) end #============================== # �¡ Window_Status #============================== class Window_Base #------------------------------ def draw_enemy_element_radar_graph(enemy, x, y, radius = 56) cx = x + radius + FONT_SIZE + 48 cy = y + radius + FONT_SIZE + 32 self.contents.font.color = system_color #self.contents.draw_text(x, y, 104, 32, WORD_ELEMENT_GUARD) for loop_i in 0..NUMBER_OF_ELEMENTS if loop_i == 0
else @pre_x = @now_x @pre_y = @now_y @pre_ex = @now_ex @pre_ey = @now_ey @color1 = @color2 end if loop_i == NUMBER_OF_ELEMENTS eo = ELEMENT_ORDER[0] else eo = ELEMENT_ORDER[loop_i] end er = element_pourcent(enemy, eo) estr = $data_system.elements[eo] @color2 = er < 0 ? GRAPH_LINE_COLOR_MINUS : er > 100 ? GRAPH_LINE_COLOR_PLUS : GRAPH_LINE_COLOR th = Math::PI * (0.5 - 2.0 * loop_i / NUMBER_OF_ELEMENTS) @now_x = cx + (radius * Math.cos(th)).floor @now_y = cy - (radius * Math.sin(th)).floor @now_wx = cx + ((radius+FONT_SIZE*2/2) * Math.cos(th)).floor - FONT_SIZE @now_wy = cy - ((radius+FONT_SIZE*1/2) * Math.sin(th)).floor - FONT_SIZE/2 @now_vx = cx + ((radius+FONT_SIZE*6/2) * Math.cos(th)).floor - FONT_SIZE @now_vy = cy - ((radius+FONT_SIZE*3/2) * Math.sin(th)).floor - FONT_SIZE/2 @now_ex = cx + (er.abs*radius/100 * Math.cos(th)).floor @now_ey = cy - (er.abs*radius/100 * Math.sin(th)).floor if loop_i == 0 @pre_x = @now_x @pre_y = @now_y @pre_ex = @now_ex @pre_ey = @now_ey @color1 = @color2 else
end next if loop_i == 0 self.contents.draw_line(cx+1,cy+1, @now_x+1,@now_y+1, GRAPH_SCALINE_COLOR_SHADOW) self.contents.draw_line(@pre_x+1,@pre_y+1, @now_x+1,@now_y+1, GRAPH_SCALINE_COLOR_SHADOW) self.contents.draw_line(cx,cy, @now_x,@now_y, GRAPH_SCALINE_COLOR) self.contents.draw_line(@pre_x,@pre_y, @now_x,@now_y, GRAPH_SCALINE_COLOR) self.contents.draw_line(@pre_ex,@pre_ey, @now_ex,@now_ey, @color1, 2, @color2) self.contents.font.size = FONT_SIZE self.contents.font.color = system_color self.contents.draw_text(@now_wx,@now_wy, FONT_SIZE*2, FONT_SIZE, estr, 1) self.contents.font.color = Color.new(255,255,255,128) self.contents.draw_text(@now_vx,@now_vy, FONT_SIZE*2, FONT_SIZE, er.to_s + "%", 2) end end #end
#------------------------------ # ● 属性補正値の取得 # element_id : 属性 ID #------------------------------ def element_pourcent(enemy, element_id) table = [0,200,150,100,50,0,-100] return table[enemy.element_ranks[element_id]] end end #============================== # �¸ ¦O�����C�u���¦ #============================== class Bitmap def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color) distance = (start_x - end_x).abs + (start_y - end_y).abs if end_color == start_color for i in 1..distance x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i if width == 1 self.set_pixel(x, y, start_color) else self.fill_rect(x, y, width, width, start_color) end end else for i in 1..distance x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i r = start_color.red * (distance-i)/distance + end_color.red * i/distance g = start_color.green * (distance-i)/distance + end_color.green * i/distance b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance if width == 1 self.set_pixel(x, y, Color.new(r, g, b, a)) else self.fill_rect(x, y, width, width, Color.new(r, g, b, a)) end end end end end Ouvrez le script "Scene_Battle 2" et allez cherchez la ligne 147, il y a ceci :
unless enemy.hidden
Rajoutez juste en dessous :
# Ajout pour la liste des monstres de Krazplay $game_variables[4000 + enemy.id] += 1
Dernière édition par le Sam 2 Juin 2007 - 16:03, édité 3 fois
|
|