Sujet: [Résolu]Problème bestiaire Lun 6 Juin 2011 - 14:46
Bonjour à tous et à toutes,
J'ai un immense problème avec le script bestiaire placer-ci dessous.Le nombre de tuer n'augmente pas donc j'ai beaux tuer le monstre il n'apparait pas ainsi que c'est information.
Voici des screen avec les configuration au-dessus des screen
Spoiler:
# Si Vrai, les monstres qui n'ont pas encore été vaincus n'apparaissent pas du # tout dans la liste (même pas comme monstre inconnu) MONSTRES_INCONNUS_INVISIBLES = false # Si Vrai, les noms des monstres sont visibles même s'ils n'ont jamais été # tués, si Faux, ils apparaitront avec le nom précisé dans NOM_MONSTRE_INCONNU NOMS_PAR_DEFAUT = false # Si les monstres inconnus sont visibles mais que leurs noms n'apparaissent # pas s'ils n'ont pas encore été tué, alors c'est celui-là qui sera utilisé. NOM_MONSTRE_INCONNU = "Monstre inconnu" # Si vrai, on peut accéder aux détails d'un monstre même si l'on en a pas encore # tué un. DETAILS_PAR_DEFAUT = false
Spoiler:
# tout dans la liste (même pas comme monstre inconnu) MONSTRES_INCONNUS_INVISIBLES = true # Si Vrai, les noms des monstres sont visibles même s'ils n'ont jamais été # tués, si Faux, ils apparaitront avec le nom précisé dans NOM_MONSTRE_INCONNU NOMS_PAR_DEFAUT = false # Si les monstres inconnus sont visibles mais que leurs noms n'apparaissent # pas s'ils n'ont pas encore été tué, alors c'est celui-là qui sera utilisé. NOM_MONSTRE_INCONNU = "Monstre inconnu" # Si vrai, on peut accéder aux détails d'un monstre même si l'on en a pas encore # tué un. DETAILS_PAR_DEFAUT = false
Voila le script
Spoiler:
Code:
#============================================================================== # ■ Bestiaire pour RPG Maker VX #------------------------------------------------------------------------------ # Version 1.0 (15/02/2008) par Krazplay modifier par Raito-san # Dernière version, commentaires : # http://rpgmakerxp-factory.net/forum/index.php?topic=12494 # http://rpg-maker-vx.bbactif.com #------------------------------------------------------------------------------ # Ce script utilise les variables 4001 à 4000+Nbre de monstres dans votre base # de données. Cela peut facilement être modifié pour utiliser d'autres variables # que celles du jeu. # Pour appeller ce menu il suffit d'utiliser la ligne suivante : # $scene = Scene_Liste_Monstres.new # Cette scene renvoie au menu lorsqu'elle se termine, si vous voulez qu'elle # ramène sur la carte plutôt qu'au menu, ajouter l'argument false : # $scene = Scene_Liste_Monstres.new(false) # # N'oubliez pas de jeter un oeil à la configuration juste en-dessous ! #------------------------------------------------------------------------------ # Vous pouvez librement redistribuer ce script, y compris des versions modifiées. # Mais vous devez laisser la provenance (auteur/site) du script original, elle # est précisée au début des commentaires. #============================================================================== module KRAZ_SLM # Si Vrai, les monstres qui n'ont pas encore été vaincus n'apparaissent pas du # tout dans la liste (même pas comme monstre inconnu) MONSTRES_INCONNUS_INVISIBLES = false # Si Vrai, les noms des monstres sont visibles même s'ils n'ont jamais été # tués, si Faux, ils apparaitront avec le nom précisé dans NOM_MONSTRE_INCONNU NOMS_PAR_DEFAUT = false # Si les monstres inconnus sont visibles mais que leurs noms n'apparaissent # pas s'ils n'ont pas encore été tué, alors c'est celui-là qui sera utilisé. NOM_MONSTRE_INCONNU = "Monstre inconnu" # Si vrai, on peut accéder aux détails d'un monstre même si l'on en a pas encore # tué un. DETAILS_PAR_DEFAUT = false # Si la scene est appelée par le menu, il peut être sympa de remettre le curseur # sur la commande Bestiaire lorsqu'on y retourne. POSITION_DS_MENU = 0 # Définit quelles variables vont être utilisées. # N'oublier pas que cela commence à DEPART_VARIABLES+1, parce que le premier # monstre a l'ID 1 et non 0. DEPART_VARIABLES = 4000 # Les méthodes suivantes sont les seules références aux variables où sont # stockés le nombre d'ennemi tué de chaque sorte, donc si vous désirez ne pas # utiliser des variables du jeu, c'est uniquement ici que ça se passe. def self.nombre_tués(id_monstre) return $game_variables[DEPART_VARIABLES+id_monstre] end
def self.set_nombre_tués(id_monstre, nombre) $game_variables[DEPART_VARIABLES+id_monstre] = nombre end
def self.ajout_nombre_tués(id_monstre, nombre) $game_variables[DEPART_VARIABLES+id_monstre] += nombre end
# Ce qui suit permet de déplacer quasiment tout les textes présents dans le # script afin que vous puissiez le customiser ou le faire fonctionner dans une # autre résolution. #======> Positionnement des éléments <======# # Pour du 544x416 #-------------------------------------------# # La fenêtre générale prend automatiquement tout l'écran # Taille de la police FG_TP = 20 # Description des 2 colonnes FG_COL1 = "Nom du monstre :" FG_COL2 = "Nombre tués :" # Position des descriptions [x, y, longueur, hauteur] FG_PD1 = [10, 0, 200, 32] FG_PD2 = [334, 0, 200, 32] # Position du numéro du monstre selectionné [x, y, longueur, hauteur] FG_NM = [185, 360, 300, 32]
# Fenêtre liste des monstres [x, y, longueur, hauteur] # Attention cette fenêtre ne se voit pas, seul son contenu est visible. FM = [0, 30, 544, 350+32] # Nom du monstre [x, largeur max] FM_NM = [20, 300] # Nombre de monstres tués [x, largeur] # Attention alignement du texte à droite et non à gauche. FM_NMT = [406, 30]
# Fenêtre détails d'un monstre [x, y, largeur, hauteur] FD = [0, 0, 544, 416] # Vitesse ouverture/fermeture (255 le plus rapide) FD_V = 24 # Position de l'image du monstre [x, y] FD_B = [225, 188] # Taille de la police du nom du monstre FD_TT = 22 # Couleur du nom du monstre [Rouge, Vert, Bleu, Opacité] FD_CT = [255, 155, 155, 255] # Nom du monstre [x, y, longueur, hauteur] # Attention ici le nom est centré sur x FD_NM = [250, 0, 400, 32] # Taille de la police du reste de la fenêtre FD_TP = 20 # Utilise la couleur système pour la suite FD_COLOR_SYSTEM = true # Si vous ne désirez pas utiliser la couleur système # [Rouge, Vert, Bleu, Opacité] FD_CSA = [255, 155, 155, 255] # Pour tout ce qui suit, le nom de la caractéristique et sa valeur sont écrit # dans le même rectangle, mais la valeur est aligné à droite du rectangle. # Position HP [x, y, longueur, hauteur] FD_HP = [10, 30, 150, 32] # Points de vie FD_MP = [10, 55, 150, 32] # Points de magie FD_ATK = [300, 30, 200, 32] # Attaque FD_DEF = [300, 55, 200, 32] # Défense FD_SPI = [300, 80, 200, 32] # Esprit FD_AGI = [300, 105, 200, 32] # Agilité FD_EXP = [10, 280, 155, 32] # Experience FD_GOLD = [10, 305, 155, 32] # Argent # Mots désignants respectivement l'experience et les objets pouvant être laissé # par l'ennemi. FD_MEXP = "EXP" FD_MDROP = "Objets" # Position du mot FD_MDROP [x, y, longueur, hauteur] FD_DROP = [10, 330, 200, 32] # Position des objets droppé par l'ennemi [x, y, longueur, hauteur] FD_DR1 = [150, 330, 212, 32] FD_DR2 = [150, 355, 200, 32] # Graphique des défenses élémentales [x, y, rayon] FD_GDE = [300, 220, 40] ##=====> Fin positionnement des éléments pour 640x480 <=====## end
#============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ # Ajoute les monstres tués aux variables lorsqu'on gagne un combat ou fuit. #============================================================================== class Scene_Battle include KRAZ_SLM
alias kraz_slm_process_victory process_victory def process_victory compte_les_morts kraz_slm_process_victory end
alias kraz_slm_process_escape process_escape def process_escape compte_les_morts kraz_slm_process_escape end
def compte_les_morts for enemy in $game_troop.members if enemy.dead? KRAZ_SLM.ajout_nombre_tués(enemy.enemy_id, 1) end end end end
#============================================================================== # ■ Scene_Liste_Monstres #------------------------------------------------------------------------------ # La scène du bestiaire, tout simplement. #============================================================================== class Scene_Liste_Monstres include KRAZ_SLM
def initialize(vient_du_menu = true) # Pour savoir si l'on retourne au menu ou sur la carte à la fin de la scene. @vient_du_menu = vient_du_menu # Sert à vérifier si l'index de la fenêtre monstres a changé. # -1 pour forcer la mise à jour dès le départ @monstres_index = -1 end
def main @general_window = Window_General.new @monstres_window = Window_Monstres.new @details_monstre_window = Window_Details_Monstre.new @general_window.set_max_monstres(@monstres_window.data.size) @details_monstre_window.openness = 0 @details_monstre_window.active = false Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end @general_window.dispose @monstres_window.dispose end
def update # Mise à jour des fenêtre @general_window.update @monstres_window.update @details_monstre_window.update # On vérifie si le curseur a bougé if @monstres_window.index != @monstres_index @monstres_index = @monstres_window.index @general_window.affiche_numero(@monstres_index+1) end # Bouton de confirmation if Input.trigger?(Input::C) if @monstres_window.active and @monstres_window.data.size > 0 id_monstre = @monstres_window.data[@monstres_window.index][2] if KRAZ_SLM.nombre_tués(id_monstre) > 0 or DETAILS_PAR_DEFAUT @details_monstre_window.refresh(id_monstre) @details_monstre_window.active = true @details_monstre_window.open @monstres_window.active = false Sound.play_decision else Sound.play_buzzer end end # Bouton d'annulation elsif Input.trigger?(Input::B) Sound.play_cancel if @monstres_window.active $scene = @vient_du_menu ? Scene_Menu.new(POSITION_DS_MENU) : Scene_Map.new Graphics.freeze elsif @details_monstre_window.active @details_monstre_window.active = false @details_monstre_window.close @monstres_window.active = true end end if @details_monstre_window.active # Passage d'un monstre à l'autre lorsqu'on regarde leurs détails if Input.repeat?(Input::RIGHT) or Input.repeat?(Input::DOWN) data = @monstres_window.data new_index = index = @monstres_window.index data.size.times do new_index +=1 new_index = 0 if new_index >= data.size break if DETAILS_PAR_DEFAUT or data[new_index][1] > 0 end if new_index != index @details_monstre_window.refresh(data[new_index][2]) Sound.play_cursor @monstres_window.index = new_index end elsif Input.repeat?(Input::LEFT) or Input.repeat?(Input::UP) data = @monstres_window.data new_index = index = @monstres_window.index data.size.times do new_index -=1 new_index = data.size-1 if new_index < 0 break if DETAILS_PAR_DEFAUT or data[new_index][1] > 0 end @details_monstre_window.refresh(data[new_index][2]) if new_index != index @monstres_window.index = new_index if new_index != index @details_monstre_window.refresh(data[new_index][2]) Sound.play_cursor @monstres_window.index = new_index end end end end # update_command end # class Scene_Liste_Monstres #============================================================================== # ■ Window_General #------------------------------------------------------------------------------ # Fenêtre général #============================================================================== class Window_General < Window_Base include KRAZ_SLM
def affiche_numero(ind=1) # On efface une partie de la fenêtre (RGSS2!) avant d'écrire dessus self.contents.clear_rect(FG_NM[0], FG_NM[1], FG_NM[2], FG_NM[3]) self.contents.draw_text(FG_NM[0], FG_NM[1], FG_NM[2], FG_NM[3], "Monstre #{ind} / #{@max}") end
def set_max_monstres(max) @max = max end end #============================================================================== # ■ Window_Monstres #------------------------------------------------------------------------------ # Fenêtre avec le nom de tout les ennemis tués et combien de fois ils ont été # tués. Seul le texte de la fenêtre reste visible (l'opacité et l'opacité du # fond est mise à zéro). #============================================================================== class Window_Monstres < Window_Selectable include KRAZ_SLM
attr_reader :data
def initialize # Création de la fenêtre, on s'assure qu'elle au-dessus de la fenêtre 'General' super(FM[0], FM[1], FM[2], FM[3]) # On ne veut voir que le texte, donc opacité et back_opacity à 0 self.back_opacity = 0 self.opacity = 0 # Index à zéro lorsqu'on commence, une seule colonne self.index = 0 @column_max = 1 # @data est le tableau des données qui vont être affichées. # Ces éléments sont des tableaux [nom du monstre, nombre tué, id du monstre] @data = [] # Remplissage de @data for monstre in $data_enemies next if monstre == nil id = monstre.id tués = KRAZ_SLM.nombre_tués(id) if tués == 0 next if MONSTRES_INCONNUS_INVISIBLES nom = NOMS_PAR_DEFAUT ? monstre.name : NOM_MONSTRE_INCONNU @data.push([nom, tués, id]) else nom = monstre.name @data.push([nom, tués, id]) end end # Le nombre d'objets dans notre liste c'est évidement le nombre de monstre # qu'on va afficher @item_max = @data.size # Va mettre le bitmap à la bonne taille create_contents refresh end
def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end
def draw_item(index) tab_monstre = @data[index] if tab_monstre != nil self.contents.draw_text( FM_NM[0], (WLH * index), FM_NM[1], WLH, tab_monstre[0]) self.contents.draw_text(FM_NMT[0], (WLH * index),FM_NMT[1], WLH, tab_monstre[1].to_s, 2) end 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 return rect end
def update super if @column_max == 1 and self.active if Input.repeat?(Input::RIGHT) cursor_pagedown end if Input.repeat?(Input::LEFT) cursor_pageup end end end
end #class Window_Monstres
#============================================================================== # ■ Window_details_monstre #------------------------------------------------------------------------------ # Permet de créer une fenêtre avec les détails d'un ennemi #============================================================================== class Window_Details_Monstre < Window_Base include KRAZ_SLM
self.contents.draw_text(FD_EXP[0], FD_EXP[1], FD_EXP[2], FD_EXP[3], $data_enemies[monstre_id].exp.to_s, 2) self.contents.draw_text(FD_GOLD[0], FD_GOLD[1], FD_GOLD[2], FD_GOLD[3], $data_enemies[monstre_id].gold.to_s, 2) # Affichage objets que peuvent donner les ennemis if $data_enemies[monstre_id].drop_item1.kind != 0 item = $data_enemies[monstre_id].drop_item1 case item.kind when 1 icon_index = $data_items[item.item_id].icon_index name = $data_items[item.item_id].name when 2 icon_index = $data_weapons[item.weapon_id].icon_index name = $data_weapons[item.weapon_id].name when 3 icon_index = $data_armors[item.armor_id].icon_index name = $data_armors[item.armor_id].name end opacity = self.contents.font.color == normal_color ? 255 : 128 denom = $data_enemies[monstre_id].drop_item1.denominator.to_s
draw_icon(icon_index, FD_DR1[0], FD_DR1[1]+4) self.contents.draw_text(FD_DR1[0]+30, FD_DR1[1], FD_DR1[2], FD_DR1[3], name + " (1/#{denom})", 0) end if $data_enemies[monstre_id].drop_item2.kind != 0 item = $data_enemies[monstre_id].drop_item2 case item.kind when 1 icon_index = $data_items[item.item_id].icon_index name = $data_items[item.item_id].name when 2 icon_index = $data_weapons[item.weapon_id].icon_index name = $data_weapons[item.weapon_id].name when 3 icon_index = $data_armors[item.armor_id].icon_index name = $data_armors[item.armor_id].name end opacity = self.contents.font.color == normal_color ? 255 : 128 denom = $data_enemies[monstre_id].drop_item2.denominator draw_icon(icon_index, FD_DR2[0], FD_DR2[1]+4) self.contents.draw_text(FD_DR2[0]+30, FD_DR2[1], FD_DR2[2], FD_DR2[3], name + " (1/#{denom})", 0) end self.draw_enemy_element_radar_graph($data_enemies[monstre_id], FD_GDE[0], FD_GDE[1], FD_GDE[2]) end end
#-------------------------------------------------------------------------- # ● draw_actor_battler # 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 def draw_actor_battler(actor, x, y) bitmap = 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
#============================================================================== # ¡ 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, 134, 32, WORD_ELEMENT_GUARD) for loop_i in 0..NUMBER_OF_ELEMENTS if loop_i == 0
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
#-------------------------------------------------------------------------- # ● 属性補正値の取得 # 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
Edit: J'avais foutu tous mes scripts que j'avais ça ma pris +30min. et ils c'est même pas enregistrer alors que j'ai envoyer
Dernière édition par Beowolf le Mer 8 Juin 2011 - 11:40, édité 1 fois
Beowolf
Va-nu-pieds Lv.4
Inscrit le : 26/02/2011 Messages : 72
Sujet: Re: [Résolu]Problème bestiaire Lun 6 Juin 2011 - 21:30
Désoler pour le up et le double-post mais j'ai trouver la réponse c'est une incompatibilité au script de rapport de combat mais j'aimerais garder les 2 pourrait t'il avoir un scripteur pour me régler ça?
Voila les script:
Bestiaire:
Spoiler:
Code:
#============================================================================== # ■ Bestiaire 2.0 pour RPG Maker VX #------------------------------------------------------------------------------ # Version 2.0 (24/05/2010) par Krazplay # Où me trouver ? Si vous avez des questions ou problèmes : # Oniromancie => http://www.rpg-maker.fr/ # C'est là où je traine maintenant que la Factory a fermé :'( #------------------------------------------------------------------------------ # Ce script fonctionne aussi en 640x480, la fenêtre détaillant les monstres # reste en 544x416, mais elle est centrée au milieu de l'écran par défaut. #------------------------------------------------------------------------------ # Par défaut, ce script utilise les variables 4001 à 4000+Nbre de monstres dans # votre base de données. Assurez-vous qu'elles soient disponible ou changer # la configuration pour en utiliser d'autres (ou ne pas en utiliser du tout) #------------------------------------------------------------------------------ # Pour appeler ce menu il suffit d'utiliser la ligne suivante : # $scene = Scene_Bestiaire.new # Cette scene renvoie au menu lorsqu'elle se termine, si vous voulez qu'elle # ramène sur la carte plutôt qu'au menu, ajouter l'argument false : # $scene = Scene_Bestiaire.new(false) #------------------------------------------------------------------------------ # Vous pouvez librement diffuser ce script, y compris des versions modifiées. # Mais vous devez laisser la provenance (auteur/site) du script original, # c'est la moindre des choses :-) #============================================================================== module KRAZ_SLM # Si Vrai, les monstres qui n'ont pas encore été vaincus n'apparaissent pas du # tout dans la liste (même pas comme monstre inconnu) MONSTRES_INCONNUS_INVISIBLES = true # Si Vrai, les noms des monstres sont visibles même s'ils n'ont jamais été # tués, si Faux, ils apparaitront avec le nom précisé dans NOM_MONSTRE_INCONNU NOMS_PAR_DEFAUT = true # Si les monstres inconnus sont visibles mais que leurs noms n'apparaissent # pas s'ils n'ont pas encore été tué, alors c'est celui-là qui sera utilisé. NOM_MONSTRE_INCONNU = "Monstre inconnu" # Si vrai, on peut accéder aux détails d'un monstre même si l'on en a pas encore # tué un, utile pour voir à quoi ressemble le bestaire. DETAILS_PAR_DEFAUT = true # Si la scene est appelée par le menu, il peut être sympa de remettre le curseur # sur la commande Bestiaire lorsqu'on y retourne. POSITION_DS_MENU = 4 # Définit comment enregistrer les données # Si 0, tout est enregistré dans les variables du jeu, comme dans la première version # Si 1, tout est enregistré dans le tableau $game_system.bestaire TYPE_SAUVEGARDE = 0 # Définit quelles variables vont être utilisées dans le cas TYPE_SAUVEGARDE = 0 # N'oublier pas que cela commence à DEPART_VARIABLES+1, parce que le premier # monstre a l'ID 1 et non 0. DEPART_VARIABLES = 4000 # Les méthodes suivantes sont les seules références aux variables où sont # stockés le nombre d'ennemi tué de chaque sorte. def self.nombre_tués(id_monstre) return $game_variables[DEPART_VARIABLES+id_monstre] if TYPE_SAUVEGARDE == 0 return $game_system.bestiaire[id_monstre] end def self.set_nombre_tués(id_monstre, nombre) $game_variables[DEPART_VARIABLES+id_monstre] = nombre if TYPE_SAUVEGARDE == 0 $game_system.bestiaire[id_monstre] = nombre end def self.ajout_nombre_tués(id_monstre, nombre) $game_variables[DEPART_VARIABLES+id_monstre] += nombre if TYPE_SAUVEGARDE == 0 $game_system.bestiaire[id_monstre] += nombre end
# Ce qui suit permet de déplacer quasiment tout les textes présents dans le # script afin que vous puissiez le customiser ou le faire fonctionner dans une # nouvelle résolution. #======> Positionnement des éléments <======# #-------------------------------------------# # La fenêtre générale prend automatiquement tout l'écran # Taille de la police FG_TP = 24 # Description des 2 colonnes FG_COL1 = "BESTIAIRE" FG_COL2 = "(Nom)" FG_COL3 = "(Tué)" # Position des descriptions [x, y, longueur, hauteur] FG_PD1 = [10, 0, 200, 32] FG_PD2 = [300, 0, 200, 32] FG_PD3 = [455, 0, 200, 32] # Position du numéro du monstre selectionné [x, y, longueur, hauteur] FG_NM = [240, 420, 300, 32]
# Fenêtre liste des monstres [x, y, longueur, hauteur] # Attention cette fenêtre ne se voit pas, seul son contenu est visible. FM = [0, 41, 544, 370] # Nom du monstre [x, largeur max] FM_NM = [10, 300] # Nombre de monstres tués [x, largeur] # Attention alignement du texte à droite et non à gauche. FM_NMT = [200, 30]
# Position de la Fenêtre détails d'un monstre [x, y, largeur, hauteur] FD = [(Graphics.width-544)/2, (Graphics.height-416)/2, 544, 416] # Vitesse ouverture/fermeture (255 le plus rapide) FD_V = 24 # Taille de la police du nom du monstre FD_TT = 28 # Couleur du nom du monstre [Rouge, Vert, Bleu, Opacité] FD_CT = [255, 155, 155, 255] # Nom du monstre [x, y, longueur, hauteur] # Attention ici le nom est centré sur x FD_NM = [32, 0, 470, 32] # Position de l'image du monstre [x, y] FD_B = [355, 160] # Taille de la police du reste de la fenêtre FD_TP = 20 # Utilise la couleur système pour la suite FD_COLOR_SYSTEM = true # Si vous ne désirez pas utiliser la couleur système # [Rouge, Vert, Bleu, Opacité] FD_CSA = [255, 155, 155, 255] # Pour tout ce qui suit, le nom de la caractéristique et sa valeur sont écrit # dans le même rectangle, mais la valeur est aligné à droite du rectangle. # Position HP [x, y, longueur, hauteur] FD_HP = [10, 40, 165, 24] # Points de vie FD_MP = [10, 40+24, 165, 24] # Points de magie FD_ATK = [10, 40+3*24, 165, 24] # Attaque FD_DEF = [10, 40+4*24, 165, 24] # Défense FD_SPI = [10, 40+5*24, 165, 24] # Esprit FD_AGI = [10, 40+6*24, 165, 24] # Agilité FD_EXP = [10, 40+8*24, 155, 24] # Experience FD_GOLD = [10, 40+9*24, 155+20, 24] # Argent # Mots désignants respectivement l'experience, l'or et les objets pouvant être # laissé par l'ennemi. FD_MEXP = "EXP" FD_MGOLD = "Argent" FD_MDROP = "Objets" # Position du mot FD_MDROP [x, y, longueur, hauteur] FD_DROP = [10, 40+11*24, 200, 24] # Position des objets droppé par l'ennemi [x, y, longueur, hauteur] FD_DR1 = [20, 40+12*24, 220, 24] FD_DR2 = [20, 40+13*24, 220, 24] # Graphique des défenses élémentales [x, y, rayon] FD_GDE = [290, 239, 28] ##=====> Fin positionnement des éléments <=====## end
#============================================================================== # Graphic_Def_Elem #============================================================================== class Window_Base FONT_SIZE = 20 WORD_ELEMENT_GUARD = "Déf. Elémentale" NUMBER_OF_ELEMENTS = 8 # Nombre d'éléments affichés dans le graphique K_ELEMENT_ORDER1 = [1,3,8,5,2,4,7,6] # ID des éléments affichés dans le graphique # Second jeu d'élément pour le graphe ! # Si ça ne vous intéresse pas, mettre absolument à nil comme suit : #K_ELEMENT_ORDER2 = nil K_ELEMENT_ORDER2 = [9,11,16,13,10,12,15,14] 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
#============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ # Ajoute les monstres tués aux variables lorsqu'on gagne un combat ou fuit. #============================================================================== class Scene_Battle include KRAZ_SLM
alias kraz_slm_process_victory process_victory def process_victory compte_les_morts kraz_slm_process_victory end
alias kraz_slm_process_escape process_escape def process_escape compte_les_morts kraz_slm_process_escape end
def compte_les_morts for enemy in $game_troop.members if enemy.dead? KRAZ_SLM.ajout_nombre_tués(enemy.enemy_id, 1) end end end end
#============================================================================== # ■ Scene_Bestiaire #------------------------------------------------------------------------------ # La scène du bestiaire, tout simplement. #============================================================================== class Scene_Bestiaire include KRAZ_SLM
def initialize(vient_du_menu = true) # Pour savoir si l'on retourne au menu ou sur la carte à la fin de la scene. @vient_du_menu = vient_du_menu # Sert à vérifier si l'index de la fenêtre monstres a changé. # -1 pour forcer la mise à jour dès le départ @monstres_index = -1 # Retient le jeu d'élément utilisé pour le graphe @jeu_element = 0 end
def main @general_window = Window_General.new @monstres_window = Window_Monstres.new @details_monstre_window = Window_Details_Monstre.new @general_window.set_max_monstres(@monstres_window.data.size) @details_monstre_window.openness = 0 @details_monstre_window.active = false Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end @general_window.dispose @monstres_window.dispose end
def update # Mise à jour des fenêtre @general_window.update @monstres_window.update @details_monstre_window.update # On vérifie si le curseur a bougé if @monstres_window.index != @monstres_index @monstres_index = @monstres_window.index @general_window.affiche_numero(@monstres_index+1) end # Bouton de confirmation if Input.trigger?(Input::C) if @monstres_window.active and @monstres_window.data.size > 0 id_monstre = @monstres_window.data[@monstres_window.index][2] if KRAZ_SLM.nombre_tués(id_monstre) > 0 or DETAILS_PAR_DEFAUT @details_monstre_window.refresh(id_monstre) @details_monstre_window.active = true @details_monstre_window.open @monstres_window.active = false Sound.play_decision else Sound.play_buzzer end elsif @details_monstre_window.active # On change les éléments qui vont être affichés par le graphe @jeu_element = (@jeu_element + 1) % 2 @details_monstre_window.changer_jeu_d_elements(@jeu_element) # On rafraichit la fenêtre pour que ça prenne effet id_monstre = @monstres_window.data[@monstres_window.index][2] @details_monstre_window.refresh(id_monstre) end # Bouton d'annulation elsif Input.trigger?(Input::B) Sound.play_cancel if @monstres_window.active $scene = @vient_du_menu ? Scene_Menu.new(POSITION_DS_MENU) : Scene_Map.new Graphics.freeze elsif @details_monstre_window.active @details_monstre_window.active = false @details_monstre_window.close @monstres_window.active = true end end if @details_monstre_window.active # Passage d'un monstre à l'autre lorsqu'on regarde leurs détails if Input.repeat?(Input::RIGHT) or Input.repeat?(Input::DOWN) data = @monstres_window.data new_index = index = @monstres_window.index data.size.times do new_index +=1 new_index = 0 if new_index >= data.size break if DETAILS_PAR_DEFAUT or data[new_index][1] > 0 end if new_index != index @details_monstre_window.refresh(data[new_index][2]) Sound.play_cursor @monstres_window.index = new_index end elsif Input.repeat?(Input::LEFT) or Input.repeat?(Input::UP) data = @monstres_window.data new_index = index = @monstres_window.index data.size.times do new_index -=1 new_index = data.size-1 if new_index < 0 break if DETAILS_PAR_DEFAUT or data[new_index][1] > 0 end @details_monstre_window.refresh(data[new_index][2]) if new_index != index @monstres_window.index = new_index if new_index != index @details_monstre_window.refresh(data[new_index][2]) Sound.play_cursor @monstres_window.index = new_index end end end end # update end # class Scene_Bestiaire
#============================================================================== # ■ Window_General #------------------------------------------------------------------------------ # Fenêtre général #============================================================================== class Window_General < Window_Base include KRAZ_SLM
def affiche_numero(ind=1) # On efface une partie de la fenêtre (RGSS2!) avant d'écrire dessus self.contents.clear_rect(FG_NM[0], FG_NM[1], FG_NM[2], FG_NM[3]) self.contents.draw_text(FG_NM[0], FG_NM[1], FG_NM[2], FG_NM[3], "Monstre #{ind} / #{@max}") end
def set_max_monstres(max) @max = max end end
#============================================================================== # ■ Window_Monstres #------------------------------------------------------------------------------ # Fenêtre avec le nom de tout les ennemis tués et combien de fois ils ont été # tués. Seul le texte de la fenêtre reste visible (l'opacité et l'opacité du # fond est mise à zéro). #============================================================================== class Window_Monstres < Window_Selectable include KRAZ_SLM
attr_reader :data
def initialize # Création de la fenêtre, on s'assure qu'elle au-dessus de la fenêtre 'General' super(FM[0], FM[1], FM[2], FM[3]) # On ne veut voir que le texte, donc opacité et back_opacity à 0 self.back_opacity = 0 self.opacity = 0 # Deux colonnes, index à zéro lorsqu'on commence @column_max = 2 self.index = 0 # @data est le tableau des données qui vont être affichées. # Ces éléments sont des tableaux [nom du monstre, nombre tué, id du monstre] @data = [] # Remplissage de @data for monstre in $data_enemies next if monstre == nil id = monstre.id tués = KRAZ_SLM.nombre_tués(id) if tués == 0 next if MONSTRES_INCONNUS_INVISIBLES nom = NOMS_PAR_DEFAUT ? monstre.name : NOM_MONSTRE_INCONNU @data.push([nom, tués, id]) else nom = monstre.name @data.push([nom, tués, id]) end end # Le nombre d'objets dans notre liste c'est évidement le nombre de monstre # qu'on va afficher @item_max = @data.size # Va mettre le bitmap à la bonne taille create_contents refresh end
def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end
def draw_item(index) tab_monstre = @data[index] if tab_monstre != nil self.contents.draw_text( FM_NM[0] + 270*(index%@column_max), (index/2 * WLH), FM_NM[1], WLH, tab_monstre[0]) self.contents.draw_text(FM_NMT[0] + 270*(index%@column_max), (index/2 * WLH),FM_NMT[1], WLH, tab_monstre[1].to_s, 2) end 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 return rect end
def update super if @column_max == 1 and self.active if Input.repeat?(Input::RIGHT) cursor_pagedown end if Input.repeat?(Input::LEFT) cursor_pageup end end end
end #class Window_Monstres
#============================================================================== # ■ Window_details_monstre #------------------------------------------------------------------------------ # Permet de créer une fenêtre avec les détails d'un ennemi #============================================================================== class Window_Details_Monstre < Window_Base include KRAZ_SLM
self.contents.draw_text(FD_EXP[0], FD_EXP[1], FD_EXP[2], FD_EXP[3], $data_enemies[monstre_id].exp.to_s, 2) self.contents.draw_text(FD_GOLD[0], FD_GOLD[1], FD_GOLD[2], FD_GOLD[3], $data_enemies[monstre_id].gold.to_s+" #{Vocab.gold}", 2) # Affichage objets que peuvent donner les ennemis if $data_enemies[monstre_id].drop_item1.kind != 0 item = $data_enemies[monstre_id].drop_item1 case item.kind when 1 icon_index = $data_items[item.item_id].icon_index name = $data_items[item.item_id].name when 2 icon_index = $data_weapons[item.weapon_id].icon_index name = $data_weapons[item.weapon_id].name when 3 icon_index = $data_armors[item.armor_id].icon_index name = $data_armors[item.armor_id].name end opacity = self.contents.font.color == normal_color ? 255 : 128 denom = $data_enemies[monstre_id].drop_item1.denominator.to_s
draw_icon(icon_index, FD_DR1[0], FD_DR1[1]+1) self.contents.draw_text(FD_DR1[0]+30, FD_DR1[1], FD_DR1[2], FD_DR1[3], name + " (1/#{denom})", 0) end if $data_enemies[monstre_id].drop_item2.kind != 0 item = $data_enemies[monstre_id].drop_item2 case item.kind when 1 icon_index = $data_items[item.item_id].icon_index name = $data_items[item.item_id].name when 2 icon_index = $data_weapons[item.weapon_id].icon_index name = $data_weapons[item.weapon_id].name when 3 icon_index = $data_armors[item.armor_id].icon_index name = $data_armors[item.armor_id].name end opacity = self.contents.font.color == normal_color ? 255 : 128 denom = $data_enemies[monstre_id].drop_item2.denominator draw_icon(icon_index, FD_DR2[0], FD_DR2[1]+1) self.contents.draw_text(FD_DR2[0]+30, FD_DR2[1], FD_DR2[2], FD_DR2[3], name + " (1/#{denom})", 0) end self.draw_enemy_element_radar_graph($data_enemies[monstre_id], FD_GDE[0], FD_GDE[1], FD_GDE[2]) end
def changer_jeu_d_elements(id_jeu) if id_jeu == 0 @element_order = K_ELEMENT_ORDER1 elsif id_jeu == 1 and K_ELEMENT_ORDER2 != nil @element_order = K_ELEMENT_ORDER2 end end end
#-------------------------------------------------------------------------- # ● draw_actor_battler # 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 def draw_actor_battler(actor, x, y) bitmap = 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
#============================================================================== # ¡ 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, 134, 32, WORD_ELEMENT_GUARD) for loop_i in 0..NUMBER_OF_ELEMENTS if loop_i == 0
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
#-------------------------------------------------------------------------- # ● 属性補正値の取得 # 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
class Game_System attr_accessor :bestiaire alias kraz_bestiaire_initialize initialize def initialize @bestiaire = [] for i in 0...$data_enemies.size @bestiaire[i] = 0 end kraz_bestiaire_initialize end end
Spoiler:
Code:
#=============================================================== # ● [VX] ◦ Rapport de combat V3 #-------------------------------------------------------------- # ◦ Par Blockade # ◦ http://rpg-maker-vx.bbactif.com/forum.htm # ◦ Crée le 06/04/2009 # ◦ Version 3.7 # ◦ Remerciment à Woratana, Moghunter #-------------------------------------------------------------- #=============================================================== #=============================================================== # Notes de version : #--------------------------------------------------------------- # ~ Version 1.0 : # - Création du script # ~ Version 2.0 : # - Interface revue # - Regroupement et classement des objets gagnés # - Ajouts d'options de personalisations # ~ Version 3.0 : # - Le script distibue l'argent gagné correctement. # - Module de configuration entiérement revu # - Compatibilité améliorée # - Pop-up lors d'un level up qui affiche les caractéristiques # - Affiche les sorts gagnés # ~ Version 3.5 # - Meilleur affichage des caractéristiques quand le héros gagne un niveau # - Affichage du temps de combat # ~ Version 3.6 # - Mise à la norme de mes scripts # - Compatible avec 3 systèmes de combat : Combat VX, SBS, SBS avec ATB # - Détecte automatiquement le SBS # ~ Version 3.7 # - Correction d'un bug avec le SBS avec ATB, le rapport d'affichais deux fois #=============================================================== #=============================================================== # Utilisation : # Plug & Play, inserez le au dessus de Main ! # Jettez un coup d'oeil au module de configuration ! #=============================================================== module Blockade module Config_Report #=============================================================== # Blockade::Config_Report Début du Module de configuration #=============================================================== #------------------------------------------- # >> Configuration du texte #-------------------------------------------- # > Texte contenu dans l'help_window Text_help_window = "Rapport de Combat"
# > Dans la fenêtre de drop Drop_nil = "Aucun objet trouvé." # Si pas d'objet à la fin du combat Drop_objets = "Objets trouvés :" # Si des objets sont trouvées Drop_armures = "Armures trouvées :" # Si des armures sont trouvées Drop_armes = "Armes trouvées :" # Si des armes sont trouvées
# > Dans la fenêtre de changement de niveau Texte_hp = "HP " # Texte pour les Hp Texte_mp = "MP " # Texte pour les Mp Texte_atk = "Attaque " # Texte pour l'attaque Texte_def = "Défense " # Texte pour la défense Texte_int = "Intelligence " # Texte pour l'intelligence Texte_agi = "Agilité " # Texte pour l'agilité
# > Couleur des noms de caracteristiques Couleur_nom_carac = 4
# > Dans la fenêtre des nouveaux sorts Couleur_new_skill = 4 # Couleur de Texte_new_skill Texte_new_skill = "Nouveaux sorts : " # Texte pour introduire les nouveaux sorts #-------------------------------------------
#------------------------------------------- # >> Configuration des icones #-------------------------------------------- # > Dans la fenêtre de changement de niveau Icone_hp = 99 # Id de l'icone pour les PV Icone_mp = 100 # Id de l'icone pour les PM Icone_atk = 2 # Id de l'icone pour l'attaque Icone_def = 52 # Id de l'icone pour la défense Icone_int = 21 # Id de l'icone pour l'intelligence Icone_agi = 48 # Id de l'icone pour l'agilité
# > Dans la fenêtre des sorts Icone_new_skill = 130 #-------------------------------------------
#------------------------------------------- # >> Configuration des sons #-------------------------------------------- # > Quand un héros gagne un niveau Lvl_up_sound = "Recovery" # Nom du SE Lvl_up_volume = 80 # Volume entre 50-150 Lvl_up_tempo = 100 # Tempo entre 50-150 #=============================================================== # Blockade::Config_Report Fin du Module de configuration #=============================================================== end end
$imported = {} if $imported == nil $imported["Rapport_CombatV3"] = true
#============================================================================== # ** Scene_Battle #------------------------------------------------------------------------------ # Scene qui gère les combats #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # * Prend le temps au début du combat #-------------------------------------------------------------------------- alias start_battle_block start def start start_battle_block @temps = Time.now end
#-------------------------------------------------------------------------- # * Enpêche le rapport de s'afficher 2 fois (ATB fix) #-------------------------------------------------------------------------- alias judge_win_loss_block judge_win_loss unless $@ def judge_win_loss if defined?(::N02) return unless @fin_combat.nil? end judge_win_loss_block end #-------------------------------------------------------------------------- # * Processus de victoire #-------------------------------------------------------------------------- def process_victory if defined?(::N01) @status_window.visible = true @message_window.visible = false # ボスコラプスはウエイトを長く挟む for enemy in $game_troop.members break boss_wait = true if enemy.collapse_type == 3 end wait(440) if boss_wait wait(N01::WIN_WAIT) unless boss_wait # 動けないアクターを除いて勝利アクション for actor in $game_party.members unless actor.restriction >= 4 @spriteset.set_action(true, actor.index,actor.win) end end end @info_viewport.visible = false @message_window.visible = false RPG::BGM.stop $game_system.battle_end_me.play unless $BTEST $game_temp.map_bgm.play $game_temp.map_bgs.play end new_temps = Time.now temps = new_temps- @temps if temps >= 60 @temps_combat = (temps / 60).truncate @suffixe = @temps_combat > 1 ? "minutes" : "minute" else @temps_combat = temps.truncate @suffixe = "secondes" end @exp =$game_troop.exp_total @gold = $game_troop.gold_total @drop = $game_troop.make_drop_items $game_party.gain_gold(@gold) ini_variable Graphics.fadeout(30) afficher_rapport Graphics.fadein(20) end
#-------------------------------------------------------------------------- # * Initialise les variables #-------------------------------------------------------------------------- def ini_variable @fin_combat = true @actors_lvl_up = [] @num_passage= 0 end
#-------------------------------------------------------------------------- # * Afficher le rapport de combat #-------------------------------------------------------------------------- def afficher_rapport @help_window = Window_Help_Combat.new @heros_window = [] y=55 ; i=0 for actor in $game_party.members @heros_window[i] = Heros_Window.new(actor,y,@exp) @actors_lvl_up.push([actor,@heros_window[i].get_old_carac,@heros_window[i].get_new_carac,@heros_window[i].get_new_skills]) if @heros_window[i].level_up y +=74; i += 1 end @gold_exp_window = Gold_Exp_Window.new(@gold,@exp) @butin_window = Drop_Window.new(@drop) @help_window.set_text(Blockade::Config_Report::Text_help_window,Blockade::Config_Report::Alignement_texte,Blockade::Config_Report::Texte_temps_combat + "#{@temps_combat} #{@suffixe} ",Blockade::Config_Report::Alignement_texte_temps_combat) if @actors_lvl_up != [] RPG::SE.new(Blockade::Config_Report::Lvl_up_sound, Blockade::Config_Report::Lvl_up_volume, Blockade::Config_Report::Lvl_up_tempo).play @actor_window = Carac_Window.new(@actors_lvl_up[@num_passage]) new_skill = @actors_lvl_up[@num_passage] @actor_window2 = Skills_Window.new(@actors_lvl_up[@num_passage]) if @actors_lvl_up[@num_passage][3].size > 0 end end
#-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- alias update_block update unless $@ def update if @fin_combat != true update_block else # Si c'est la fin du combat @help_window.update @message_window.update for i in 0...@heros_window.size @heros_window[i].update end if @actors_lvl_up != [] @actor_window.update @actor_window2.update if @actors_lvl_up[@num_passage][3].size > 0 # if @heros_window[@num_passage].get_new_skills.size > 0 if Input.trigger?(Input::C) @num_passage += 1 @actor_window.dispose @actor_window2.visible = false if @actor_window2 != nil if @num_passage + 1 > @actors_lvl_up.size Input.update @actors_lvl_up = [] end # fin @num_passage if @actors_lvl_up != [] RPG::SE.new(Blockade::Config_Report::Lvl_up_sound, Blockade::Config_Report::Lvl_up_volume, Blockade::Config_Report::Lvl_up_tempo).play @actor_window = Carac_Window.new(@actors_lvl_up[@num_passage]) @actor_window2 = Skills_Window.new(@actors_lvl_up[@num_passage]) if @actors_lvl_up[@num_passage][3].size >0 # if @heros_window[@num_passage].get_new_skills.size > 0 end # fin @actors_lvl_up end # fin input else # si pas de lvl up end # Si on appuye sur Entrée if Input.trigger?(Input::C) and @actors_lvl_up == [] @help_window.dispose for i in 0...@heros_window.size @heros_window[i].dispose end @gold_exp_window.dispose @butin_window.dispose if $BTEST $scene = nil else Graphics.fadeout(30) battle_end(0) suppr_variables end end end end
#-------------------------------------------------------------------------- # * Reinitialise les variables #-------------------------------------------------------------------------- def suppr_variables @fin_combat = false @actors_lvl_up = [] end end
#============================================================================== # ** Window_Help_Combat #------------------------------------------------------------------------------ # This window shows skill and item explanations along with actor status. #============================================================================== class Window_Help_Combat < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0, 544, WLH + 32) end #-------------------------------------------------------------------------- # * Set Text # text : character string displayed in window # align : alignment (0..flush left, 1..center, 2..flush right) #-------------------------------------------------------------------------- def set_text(text1, align1,text2,align2) if text1 != @text1 or align1 != @align1 or text2 != @text2 or align2 != @align2 self.contents.clear self.contents.font.color = normal_color self.contents.draw_text(4, 0, self.width - 40, WLH, text1, align1) self.contents.draw_text(4, 0, self.width - 40, WLH, text2, align2) @text1 = text1 ; @align = align2 @text2 = text2 ; @align2 = align2 end end end
#============================================================================== # ** Skills_Window #------------------------------------------------------------------------------ # Affiche les sorts #============================================================================== class Skills_Window < Window_Base def initialize(actor_info) @new_skills = actor_info[3] super(300,58,244,230) afficher_sorts end
#-------------------------------------------------------------------------- # * Affiche les nouveaux sorts #-------------------------------------------------------------------------- def afficher_sorts self.contents.font.color = text_color(Blockade::Config_Report::Couleur_new_skill) self.contents.draw_text(25,0, 200, WLH, Blockade::Config_Report::Texte_new_skill) draw_icon(Blockade::Config_Report::Icone_new_skill,0,0) y = 25 for skills in @new_skills draw_item_name(skills,0,y) y += 25 end end end
#============================================================================== # ** Carac_Window #------------------------------------------------------------------------------ # Affiche les caractérisqtiques #============================================================================== class Carac_Window < Window_Base def initialize(actor) @actor = actor[0] @old_carac = actor[1] @new_carac = actor[2] @new_skills = actor[3] x = 100 x = 0 if @new_skills.size > 0 super(x,58,300,230) afficher_info_actor afficher_icone afficher_carac end
#-------------------------------------------------------------------------- # * Affiche le nom et le niveau du héros #-------------------------------------------------------------------------- def afficher_info_actor draw_character(@actor.character_name, @actor.character_index, 20, 40) self.contents.draw_text(40,0, 200, WLH, @actor.name) self.contents.draw_text(40,20,200,WLH,Blockade::Config_Report::Lvl + @old_carac[0].to_s + " > " + Blockade::Config_Report::Lvl + @new_carac[0].to_s) end
#-------------------------------------------------------------------------- # * Affiche les icones #-------------------------------------------------------------------------- def afficher_icone draw_icon(Blockade::Config_Report::Icone_hp,0,50) draw_icon(Blockade::Config_Report::Icone_mp ,0,75) draw_icon(Blockade::Config_Report::Icone_atk ,0,100) draw_icon(Blockade::Config_Report::Icone_def,0,125) draw_icon(Blockade::Config_Report::Icone_int,0,150) draw_icon(Blockade::Config_Report::Icone_agi,0,175) end
#-------------------------------------------------------------------------- # * Affiche les caractéristiques #-------------------------------------------------------------------------- def afficher_carac self.contents.font.color = text_color(Blockade::Config_Report::Couleur_nom_carac) self.contents.draw_text(25,50, 150, WLH, Blockade::Config_Report::Texte_hp) self.contents.draw_text(25,75, 150, WLH, Blockade::Config_Report::Texte_mp) self.contents.draw_text(25,100, 150, WLH, Blockade::Config_Report::Texte_atk) self.contents.draw_text(25,125, 150, WLH, Blockade::Config_Report::Texte_def) self.contents.draw_text(25,150, 150, WLH, Blockade::Config_Report::Texte_int) self.contents.draw_text(25,175, 150, WLH, Blockade::Config_Report::Texte_agi) self.contents.font.color = normal_color y = 50 for i in 1...@new_carac.size self.contents.draw_text(150,y, 105, WLH, @old_carac[i],0) self.contents.draw_text(150,y, 110, WLH, "> ",1) self.contents.font.color = power_up_color if @old_carac[i] < @new_carac[i] self.contents.font.color.alpha = 128 if @old_carac[i] == @new_carac[i] self.contents.draw_text(150,y, 105, WLH, @new_carac[i],2) self.contents.font.color.alpha = 255 self.contents.font.color = normal_color y +=25 end end end
#============================================================================== # ** Gold_Exp_Window #------------------------------------------------------------------------------ # Affiche l'argent et l'exp obtenus #============================================================================== class Gold_Exp_Window < Window_Base def initialize(gold,exp) super(0,350,200,65) self.contents.draw_text(0,-6,200,WLH,Blockade::Config_Report::Exp + exp.to_s) self.contents.draw_text(0,14,200,WLH,Blockade::Config_Report::Gold + gold.to_s) end end
#============================================================================== # ** Heros_Window #------------------------------------------------------------------------------ # Affiche les informations d'exp sur les héros #============================================================================== class Heros_Window < Window_Base def initialize(actor,y,exp) super(0,y,200,75) @actor = actor @exp = exp afficher_info end
#-------------------------------------------------------------------------- # * Renvoie les anciennes caractérisques #-------------------------------------------------------------------------- def get_old_carac return @old_carac end
#-------------------------------------------------------------------------- # * Renvoie les nouvelles caractérisques #-------------------------------------------------------------------------- def get_new_carac return @new_carac end
#-------------------------------------------------------------------------- # * Renvoie les nouveaux sorts #-------------------------------------------------------------------------- def get_new_skills if @new_skills.size > 0 return @new_skills else return [] end end #-------------------------------------------------------------------------- # * Determine si le heros a pris un ou plusieurs niveaux #-------------------------------------------------------------------------- def level_up return @level_up end #-------------------------------------------------------------------------- # * Couleur 1 de la barre #-------------------------------------------------------------------------- def exp_gauge_color1 return text_color(30) end
#-------------------------------------------------------------------------- # * Couleur 1 de la barre #-------------------------------------------------------------------------- def exp_gauge_color2 return text_color(31) end
#-------------------------------------------------------------------------- # * Dessine la barre d'exp #------------------------------------------------------------------------- def draw_actor_exp_meter(actor, x, y, width = 100) if actor.next_exp != 0 exp = actor.now_exp else exp = 1 end gw = width * exp / [actor.next_exp, 1].max gc1 = exp_gauge_color1 gc2 = exp_gauge_color2 self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color) self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2) self.contents.font.color = system_color self.contents.draw_text(x, y, 30, WLH, "Exp") self.contents.font.color = normal_color xr = x + width self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2) end end
#============================================================================== # ** Drop_Window #------------------------------------------------------------------------------ # Affiche les objets obtenus #============================================================================== class Drop_Window < Window_Base def initialize(drop) super(200,55,344,360) @drop = drop if @drop != [] trier_drop regrouper afficher_drop donner_drop else afficher_mess end end
#-------------------------------------------------------------------------- # * Trie le drop en fonction du type d'objet #------------------------------------------------------------------------- def trier_drop @armes = [] @armures = [] @items = [] for item in @drop if item.is_a?(RPG::Item) @items.push(item) end if item.is_a?(RPG::Armor) @armures.push(item) end if item.is_a?(RPG::Weapon) @armes.push(item) end end end
#-------------------------------------------------------------------------- # * Regroupe les objets par nombre #------------------------------------------------------------------------- def regrouper #------------------------------------------------------- # Pour les objets #------------------------------------------------------ if @items != [] @items_unique = @items.uniq @regroupement_item = {} for item in @items_unique @regroupement_item[item] = 0 end for item in @items if @regroupement_item.include?(item) @regroupement_item[item] += 1 end end end
#------------------------------------------------------- # Pour les armures #------------------------------------------------------ if @armures != [] @armure_unique = @armures.uniq @regroupement_armures = {} for armure in @armure_unique @regroupement_armures[armure] = 0 end for armure in @armures if @regroupement_armures.include?(armure) @regroupement_armures[armure] += 1 end end end
#------------------------------------------------------- # Pour les armes #------------------------------------------------------ if @armes != [] @armes_unique = @armes.uniq @regroupement_armes = {} for arme in @armes_unique @regroupement_armes[arme] = 0 end for arme in @armes if @regroupement_armes.include?(arme) @regroupement_armes[arme] += 1 end end end end
#-------------------------------------------------------------------------- # * Affiche les objets #------------------------------------------------------------------------- def afficher_drop y=0 # Initialisation de la coordonée y #------------------------------------------------------- # Pour les objets #------------------------------------------------------ if @items != [] self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_objets) y += 25 for item in @regroupement_item draw_icon(item[0].icon_index, 0, y) if item[1] > 1 quantite = " x" + item[1].to_s else quantite = "" end self.contents.draw_text(24, y, 172, WLH, item[0].name + quantite) y+=25 end end
y += 5 if @items.nil? == false # Si les objets on été affiché augmenter y de 5
#------------------------------------------------------- # Pour les armures #------------------------------------------------------ if @armures != [] self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_armures) y += 25 for armure in @regroupement_armures draw_icon(armure[0].icon_index, 0, y) if armure[1] > 1 quantite = " x" + armure[1].to_s else quantite = "" end self.contents.draw_text(24, y, 172, WLH, armure[0].name + quantite) y +=25 end end
y += 5 if @armures.nil? == false # Si les armures on été affichées augmenter y de 5
#------------------------------------------------------- # Pour les armes #------------------------------------------------------ if @armes != [] self.contents.draw_text(0,y,200,WLH,Blockade::Config_Report::Drop_armes) y += 25 for arme in @regroupement_armes draw_icon(arme[0].icon_index, 0, y) if arme[1] > 1 quantite = " x" + arme[1].to_s else quantite = "" end self.contents.draw_text(24, y, 172, WLH, arme[0].name + quantite) y +=25 end end end
#------------------------------------------------------- # Afficher un message si pas de drop #------------------------------------------------------ def afficher_mess self.contents.draw_text(0,0,360,WLH,Blockade::Config_Report::Drop_nil) end
#------------------------------------------------------- # Donne le drop à l'équipe #------------------------------------------------------ def donner_drop for item in @drop $game_party.gain_item(item, 1) end end end
#============================================================================== # ** Game_Actor #------------------------------------------------------------------------------ # Gére les données système sur les héros. #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # * Calcul de l'exp accumulée #-------------------------------------------------------------------------- def now_exp return @exp - @exp_list[@level] end
#-------------------------------------------------------------------------- # * Calcul de l'exp a avoir pour gagner un niveau #-------------------------------------------------------------------------- def next_exp return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0 end end
Je cherche aussi de mon coter et j'éditerais quand j'aurais trouver(si je trouve )
Merci d'avance.
Beowolf
Va-nu-pieds Lv.4
Inscrit le : 26/02/2011 Messages : 72
Sujet: Re: [Résolu]Problème bestiaire Mar 7 Juin 2011 - 22:10