Mr0 Administrateur
Nombre de messages : 457 Age : 29 Localisation : France Point faible : Informatique, jeux vidéos Date d'inscription : 14/02/2007
| Sujet: Re: Script bestiaire Jeu 17 Juil - 6:33 | |
| 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 ;) #============================== class Scene_Liste_Monstres def initialize @detailspardefaut = true 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_details_monstre v2 par Krazplay #------------------------------ #Permet de créer une fenêtre avec les détails d'un ennemi #============================== class Window_details_monstre < Window_Base def initialize(monstre_id) super(5, 5, 630, 470) self.contents = Bitmap.new(width-32, height-32) self.contents.font.name = "Arial" self.contents.clear draw_actor_battler($data_enemies[monstre_id], 215, 220) self.contents.font.size = 29 self.contents.font.color = Color.new(255, 155, 155, 255) monster_name_width = contents.text_size($data_enemies[monstre_id].name).width self.contents.draw_text(300 - (monster_name_width / 2), 0, 500, 32, $data_enemies[monstre_id].name) self.contents.font.size = 24 self.contents.font.color = normal_color self.contents.draw_text(50, 30, 300, 32, "HP : " + $data_enemies[monstre_id].maxhp.to_s) self.contents.draw_text(50, 55, 300, 32, "SP : " + $data_enemies[monstre_id].maxsp.to_s) self.contents.draw_text(400, 50, 300, 32, "Attaque :") self.contents.draw_text(550, 50, 300, 32, $data_enemies[monstre_id].atk.to_s) self.contents.draw_text(400, 80, 300, 32, "Déf physique :") self.contents.draw_text(550, 80, 300, 32, $data_enemies[monstre_id].débile.to_s) self.contents.draw_text(400, 110, 300, 32, "Déf magique :") self.contents.draw_text(550, 110, 300, 32, $data_enemies[monstre_id].mdef.to_s) self.contents.draw_text(400, 140, 300, 32, "Force :") self.contents.draw_text(550, 140, 300, 32, $data_enemies[monstre_id].str.to_s) self.contents.draw_text(400, 170, 300, 32, "Dextérité :") self.contents.draw_text(550, 170, 300, 32, $data_enemies[monstre_id].dex.to_s) self.contents.draw_text(400, 200, 300, 32, "Agilité :") self.contents.draw_text(550, 200, 300, 32, $data_enemies[monstre_id].agi.to_s) self.contents.draw_text(400, 230, 300, 32, "Intelligence :") self.contents.draw_text(550, 230, 300, 32, $data_enemies[monstre_id].int.to_s) self.contents.draw_text(10, 360, 300, 30, "Expérience : " + $data_enemies[monstre_id].exp.to_s) self.contents.draw_text(10, 385, 300, 30, "Argent : " + $data_enemies[monstre_id].gold.to_s) self.contents.draw_text(10, 410, 300, 30, "Objet détenu : ") if $data_enemies[monstre_id].weapon_id != 0 bitmap = RPG::Cache.icon($data_weapons[$data_enemies[monstre_id].weapon_id].icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(150, 410+4, bitmap, Rect.new(0, 0, 24, 24), opacity) #Icône self.contents.draw_text(150+30, 410, 212, 32, $data_weapons[$data_enemies[monstre_id].weapon_id].name, 0) #nom self.contents.draw_text(430, 410, 300, 30, $data_enemies[monstre_id].treasure_prob.to_s + " %") end if $data_enemies[monstre_id].armor_id != 0 bitmap = RPG::Cache.icon($data_armors[$data_enemies[monstre_id].armor_id].icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(150, 410+4, bitmap, Rect.new(0, 0, 24, 24), opacity) #Icône self.contents.draw_text(150+30, 410, 212, 32, $data_armors[$data_enemies[monstre_id].armor_id].name, 0) #nom self.contents.draw_text(430, 410, 300, 30, $data_enemies[monstre_id].treasure_prob.to_s + " %") end if $data_enemies[monstre_id].item_id != 0 bitmap = RPG::Cache.icon($data_items[$data_enemies[monstre_id].item_id].icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(150, 410+4, bitmap, Rect.new(0, 0, 24, 24), opacity) #Icône self.contents.draw_text(150+30, 410, 212, 32, $data_items[$data_enemies[monstre_id].item_id].name, 0) #nom self.contents.draw_text(430, 410, 300, 30, $data_enemies[monstre_id].treasure_prob.to_s + " %") end self.draw_enemy_element_radar_graph($data_enemies[monstre_id], 400, 270, radius = 30) end #def initialize end
#============================== # ¦ 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 = true @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 + [/i][url=http://gamerpro.exprimetoi.net/mailto:26*@ligne][i]26*@ligne[/i][/url][i]), 580, 27) m = 1 if @page == @dernierepage - 1 monstremoins = 15 - (($data_enemies.size - 1) % 15) else monstremoins = 0 end for i in (1 + [url=http://gamerpro.exprimetoi.net/mailto:15*@page)...(16]15*@page)...(16[/url] + [/i][url=http://gamerpro.exprimetoi.net/mailto:15*@page][i]15*@page[/i][/url][i] - 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, "Ennemi inconnu") 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 | |
|