AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le deal à ne pas rater :
Pokémon EV06 : où acheter le Bundle Lot 6 Boosters Mascarade ...
Voir le deal

Partagez
 

 [VX] Choix dynamique d'un visage dans les messages

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeLun 26 Mai 2008 - 20:30

Ce script permet d'afficher le visage d'un acteur ou d'un membre de l'équipe (en plus de quelques option supplémentaires venant de ADS dont l'affichage des balloons d'émotions au dessus des personnages)
Les screens:
[VX] Choix dynamique d'un visage dans les messages Fromca10
[VX] Choix dynamique d'un visage dans les messages Fromca11
Il s'agit 2 fois du même héro avec un changement d'apparence. Lors du changement d'apparence, le visage du héro se modifie également pour refléter ce à quoi il ressemble maintenant. Plutôt que de gérer individuellement les fenêtres \af[1] est utiliser dans ce cas-ci tel que démontrer dans cette fenêtre:
[VX] Choix dynamique d'un visage dans les messages Catgir10

Et voici le script:
Code:
# Window_Message by RPG-Maker VX
# ADS by modern algebra (rmrk.net)
# MyMessage by MirainoHikari (MH)
#
# Syntaxe des options de message
#
# \v[VAR]                    - Affiche la variable #VAR
# \n[ID]                      - Affiche le nom du personnage ID (liste des personnages)
# \c[COLOR]                - Modifie la couleur du texte pour la couleur avec l'id COLOR
# \G                            - Affiche la fenêtre de monnaie
# \.                              - Attend 1/4 sec (15 frames) avant de poursuivre le message
# \|                            - Attend 1 sec (60 frames) avant de poursuivre le message
# \!                            - Attend que le joueur appuie sur une touche avant de poursuivre le message
# \>                            - Affiche le texte rapidement
# \<                            - Affiche le texte lentement
# \^                            - N'arrête pas le texte à la fin de l'affichage du message
#
# \af[ID]                      - Affiche le visage du personnage ID (liste des personnages)
# \pf[ID]                      - Affiche le visage du personnage ID (liste d'équipe)
# \ns[ID]                      - Affiche le nom de la compétence ID (liste des skills)
#
# \bln[TAGET,BALOON] - Affiche l'emotion avec l'id BALOON sur l'evenement avec l'id TARGET (si 0, sur héro)
#
# \ac[ID]                    - Affiche la classe du personnage ID (liste d'équipe)
# \np[ID]                      - Affiche le nom du personnage ID (liste d'équipe)
# \ne[ID]                    - Affiche le nom de l'événement selon ID de l'event sur la carte active
# \nc[ID]                    - Affiche le nom de la classe ID (liste des classes)
# \nm[ID]                    - Affiche le nom du monstre ID (liste des monstres)
# \ni[ID]                      - Affiche le nom de l'objet ID (liste des items)
# \nw[ID]                    - Affiche le nom de l'arme ID (liste des armes)
# \na[ID]                    - Affiche le nom de l'armure ID (liste des armures)
# \pi[ID]                      - Affiche le prix de l'objet ID (liste des items)
# \pw[ID]                    - Affiche le prix de l'arme ID (liste des armes)
# \pa[ID]                    - Affiche le prix de l'arme ID (liste des armes)
# \ii[ID]                      - Affiche l'icone de l'objet ID (liste des items)
# \iw[ID]                      - Affiche l'icone de l'arme ID (liste des armes)
# \ia[ID]                      - Affiche l'icone de l'arme ID (liste des armes)

#==============================================================================
# MyMessage
#------------------------------------------------------------------------------
#  Remplace le script de base Window_Message
#==============================================================================

class Window_Message < Window_Selectable
  def initialize
    super(0, 288, 544, 128)
    self.z = 200
    self.active = false
    self.index = -1
    self.openness = 0
    @opening = false            # WIndow opening flag
    @closing = false            # Window closing flag
    @text = nil                # Remaining text to be displayed
    @contents_x = 0            # X coordinate for drawing next character
    @contents_y = 0            # Y coordinate for drawing next character
    @line_count = 0            # Line count drawn up until now
    @wait_count = 0            # Wait count
    @background = 0            # Background type
    @position = 2              # Display position
    @show_fast = false          # Fast forward flag
    @line_show_fast = false    # Fast forward by line flag
    @pause_skip = false        # Input standby omission flag
    @restart_line = 0          # MH : new line default position
    create_gold_window
    create_number_input_window
    create_back_sprite
  end
  #--------------------------------------------------------------------------
  # ● New Page
  #--------------------------------------------------------------------------
  def new_page
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
      @restart_line = 0
    else
      name = $game_message.face_name
      index = $game_message.face_index
      draw_face(name, index, 0, 0)
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end
  #--------------------------------------------------------------------------
  # ● New Line
  #--------------------------------------------------------------------------
  def new_line
    if $game_message.face_name.empty?
      @contents_x = @restart_line
    else
      @contents_x = 112
    end
    @contents_y += WLH
    @line_count += 1
    @line_show_fast = false
  end
  #--------------------------------------------------------------------------
  # ● Convert
  #--------------------------------------------------------------------------
  def convert_special_characters
    # Original
    @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
    @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
    @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
    @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
    @text.gsub!(/\\G/)              { "\x02" }
    @text.gsub!(/\\\./)            { "\x03" }
    @text.gsub!(/\\\|/)            { "\x04" }
    @text.gsub!(/\\!/)              { "\x05" }
    @text.gsub!(/\\>/)              { "\x06" }
    @text.gsub!(/\\</)              { "\x07" }
    @text.gsub!(/\\\^/)            { "\x08" }
    @text.gsub!(/\\\\/)            { "\\" }
    # By MH
    @text.gsub!(/\\AF\[(\d+)\]/i) { "\x77[#{$1.to_i}]"} # Actor Face
    @text.gsub!(/\\PF\[(\d+)\]/i) { "\x11[#{$1.to_i}]"} # Party Face
    @text.gsub!(/\\NS\[(\d+)\]/i) { $data_skills[$1.to_i].name } # Skill Name
    @text.gsub!(/\\IS\[(\d+)\]/i) { "\x98[#{$data_skills[$1.to_i].icon_index}]" } # Skill Icon
    # FROM ADS
    @text.gsub! (/\\BLN\[(\d+,\d+)\]/i) { "\x96[#{$1.to_s}]" } # Balloon
    @text.gsub!(/\\AC\[(\d+)\]/i) { $game_actors[$1.to_i].class.name } # Actor Class
    @text.gsub!(/\\NC\[(\d+)\]/i) { $data_classes[$1.to_i].name } # Class Name
    @text.gsub!(/\\NP\[(\d+)\]/i) { $game_party.members[$1.to_i].name } # Actor Name by Party Index
    begin
      @text.gsub!(/\\NE\[(\d+)\]/i) { $game_map.events[$1.to_i].name } # Event Name
    rescue
    end
    @text.gsub!(/\\NM\[(\d+)\]/i) { $data_enemies[$1.to_i].name } # Monster Name
    @text.gsub!(/\\NI\[(\d+)\]/i) { $data_items[$1.to_i].name }  # Item Name
    @text.gsub!(/\\NW\[(\d+)\]/i) { $data_weapons[$1.to_i].name } # Weapon Name
    @text.gsub!(/\\NA\[(\d+)\]/i) { $data_armors[$1.to_i].name } # Armor Name
    @text.gsub!(/\\PI\[(\d+)\]/i) { $data_items[$1.to_i].price.to_s } # Item Price
    @text.gsub!(/\\PW\[(\d+)\]/i) { $data_weapons[$1.to_i].price.to_s } # Weapon Price
    @text.gsub!(/\\PA\[(\d+)\]/i) { $data_armors[$1.to_i].price.to_s } # Armor Price
    @text.gsub! (/\\II\[(\d+)\]/i) { "\x98[#{$data_items[$1.to_i].icon_index}]" } # Item Icon
    @text.gsub! (/\\IW\[(\d+)\]/i) { "\x98[#{$data_weapons[$1.to_i].icon_index}]" } # Weapon Icon
    @text.gsub! (/\\IA\[(\d+)\]/i) { "\x98[#{$data_armors[$1.to_i].icon_index}]" } # Armor Icon
  end
  #--------------------------------------------------------------------------
  # ● Update Message
  #--------------------------------------------------------------------------
  def update_message
    loop do
      c = @text.slice!(/./m)            # Get next text character
      case c
      when nil                          # There is no text that must be drawn
        finish_message                  # Finish update
        break
      when "\x00"                      # New line
        new_line
        if @line_count >= MAX_LINE      # If line count is maximum
          unless @text.empty?          # If there is more
            self.pause = true          # Insert number input
            break
          end
        end
      when "\x01"                      # \C[n]  (text character color change)
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)
        next
      when "\x02"                      # \G  (gold display)
        @gold_window.refresh
        @gold_window.open
      when "\x03"                      # \.  (wait 1/4 second)
        @wait_count = 15
        break
      when "\x04"                      # \|  (wait 1 second)
        @wait_count = 60
        break
      when "\x05"                      # \!  (Wait for input)
        self.pause = true
        break
      when "\x06"                      # \>  (Fast display ON)
        @line_show_fast = true
      when "\x07"                      # \<  (Fast display OFF)
        @line_show_fast = false
      when "\x08"                      # \^  (No wait for input)
        @pause_skip = true
      when "\x77" #MH
        @text.sub! (/\[(\d*)\]/, "")
        actor = $game_actors[$1.to_i]
        begin
        draw_face(actor.face_name, actor.face_index, 0, 0)
        rescue
        end
        @contents_x = 112
        @restart_line = 112
      when "\x11" #MH
        @text.sub! (/\[(\d*)\]/, "")
        actor = $game_party.members[$1.to_i]
        begin
        draw_face(actor.face_name, actor.face_index, 0, 0)
        rescue
        end
        @contents_x = 112
        @restart_line = 112
      when "\x96"                        # Show Balloon #ADS
        # Extract Target and Balloon ID
        @text.sub! (/\[(\d*),(\d*)\]/, "")
        # If target is player
        if $1.to_i == 0
          $game_player.balloon_id = $2.to_i
        else
          return if $game_map.events[$1.to_i] == nil
          $game_map.events[$1.to_i].balloon_id = $2.to_i
        end
      when "\x98"                      # \icon (Icon) #ADS
        @text.sub!(/\[(\d*)\]/, "")
        draw_icon ($1.to_i, @contents_x, @contents_y)
        @contents_x += 24
      when "\x99"                      # \name (Namebox) #ADS
        @text.sub!(/\[(.*?)\]/, "")
        create_name_window ($1.to_s)
      else                              # when text is normal text
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
      end
      break unless @show_fast or @line_show_fast
    end
  end
end

Ce code part à la fois du script Advance Dialog Script (ADS) de modern algebra et du MessageWindow par défaut du RPG maker. Je n'avais pas besoin d'ADS au complet, surtout que le script Paragrapher qui est essentiel à ADS bug avec certains autres de mes scripts.

Comme d'habitude, vous devez placer ce script dans la section Users Scripts au dessus de Main ce qui aurra pour effet de surcharger Window_Message. ATTENTION, seuls les focntion surcharger sont présente dans le script, vous ne devez pas remplacer Window_Message. Dans les messages, laisser l'image du personnage vide et commencer votre message par \af[1] pour afficher le visage de Actor[1] ou \pf[0] pour afficher celui de Member[0] (noter que les membres de l'équipe vont de 0 à nombre de coéquipier -1 et que les ID des acteurs vont de 1 à ID).

Je ne sais pas si ce script est incompatible avec advance face script, mais je n'ai pas testé puisque j'utilise la taille des facesets par défaut. Pour le tester, vous devrez placer le script de visage APRÈS le présent script puisque ce script surcharge le Window_Message qui viens bien avant la section Users Scripts.


Dernière édition par Zangther le Jeu 23 Aoû 2012 - 11:48, édité 7 fois
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
fabY
dYeu retraité prématurément
dYeu retraité prématurément
fabY


Masculin Age : 28
Inscrit le : 09/02/2008
Messages : 5357

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeLun 26 Mai 2008 - 22:07

On peut avoir des screens ?

Merci Smile
Revenir en haut Aller en bas
https://rpg-maker-vx.bbactif.com/
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Ajout des screens   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeMar 27 Mai 2008 - 0:15

Voilà, j'ai rajouté les screens dans le message d'origine. Le screen d'exemple d'entrée du texte utilise un script que je suis en train de mettre au point pour modifier les persos, il n'est pas tout à fait au point mais dès qu'il le sera, je le posterai lui aussi.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
fabY
dYeu retraité prématurément
dYeu retraité prématurément
fabY


Masculin Age : 28
Inscrit le : 09/02/2008
Messages : 5357

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeMar 27 Mai 2008 - 17:37

Super ce script !
Merci Wink
Revenir en haut Aller en bas
https://rpg-maker-vx.bbactif.com/
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeMer 28 Mai 2008 - 1:27

Ce n'est rien voyons. Ce qui m'étonne, c'est que personne n'y ait pensé avant, c'est tellement pratique.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
fabY
dYeu retraité prématurément
dYeu retraité prématurément
fabY


Masculin Age : 28
Inscrit le : 09/02/2008
Messages : 5357

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeMer 28 Mai 2008 - 11:57

En faite c'est surtout utile si c'est le héros qui choisis ces co-équipier.

Comme ça on risque pas de ce tromper quoi ^^.

Je te remercie amplement pour avoir en quelque sorte créer ce script.
Je me demandais aussi à quoi ça pouvais bien servir :/ ... Mais bon, maintenant, c'est sur, sans ce script, à part faire des variables et compagnie, on pouvais pas afficher le bon facset ^^.
Donc, script très utile ! Merci !
Revenir en haut Aller en bas
https://rpg-maker-vx.bbactif.com/
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 41
Inscrit le : 26/05/2008
Messages : 2360

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeJeu 29 Mai 2008 - 0:04

Wais bon. Il y a d'autre utilités aussi. Si tu permets à ton personnage de changer d'apparence (ce qui dans mon cas est un jeu basé entièrement sur cette faculté) c'est fort pratique. Ton perso change de forme, le face set évolue avec lui. Pense à ça... Tu veux que ton perso, en changeant de classe ou de niveau son apparence change (FF Tactique quelqu'un Wink) ben ce script le permet et t'as pas à te casser la tête. Peu importe l'apparence qu'il est rendu, s'il entamme un dialogue avec un NPC, bien on vois le bon visage.

Mais c'est certain que pour avoir une utilité encore plus apparente, ça prendrait aussi mon script de modification de personnages (qui n'est pas totalement au point encore, mais ça s'en vient). (Un script 100% Hikari cette fois Wink)


Dernière édition par MirainoHikari le Lun 9 Juin 2008 - 19:38, édité 1 fois
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
lesims100
Citadin Lv.7
Citadin Lv.7
avatar


Masculin Age : 31
Inscrit le : 06/04/2008
Messages : 167

[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitimeJeu 29 Mai 2008 - 11:18

Woaw merci ça peut être utile !
Revenir en haut Aller en bas
Contenu sponsorisé




[VX] Choix dynamique d'un visage dans les messages Empty
MessageSujet: Re: [VX] Choix dynamique d'un visage dans les messages   [VX] Choix dynamique d'un visage dans les messages Icon_minitime

Revenir en haut Aller en bas
 

[VX] Choix dynamique d'un visage dans les messages

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» [VX] BBcode dans vos messages
» HTML dans les messages
» Comment écrire en Japonais dans les messages??
» Insertion de script dans les messages [resolu]
» Afficher un faceset dans un choix.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Scripts VX - RGSS2 :: Évents & PNJs-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit