Partagez
Aller en bas
avatar
Girlo
Membre

Nombre de messages : 468
Age : 23
Localisation : Chez ta mamie [punchline]
Distinction : Ronce-Man dans toute sa splendeur [Coco' ]
Date d'inscription : 31/07/2009

Yanfly Engine Ace - Ace Message System v1.01

le Mer 18 Jan 2012 - 12:48
Script : Ace Message Syctem v1.01 + Add-on de Yami : Bubble message
Créateur : Yanfly Engine Ace
Traducteur : Girlo
Présentation : Ce script permet de modifier le message dans le jeu. Par exemple de modifier la couleur ou la taille directement à partir du texte. Il permet aussi de créer une "Name Box" au dessus de la fenêtre du message. Ce script est très utile et simple d'utilisation.

A placer au dessus de Main, comme d'hab.

Code:
#==============================================================================
#
# ▼ Yanfly Engine Ace - Ace Message System v1.01
# -- Dernière MAJ: 2012.01.04
# -- Niveau: Normal
# -- Nécessite: n/a
# -- Traduction de Girlo le 09/01/2012
#==============================================================================

$imported = {} if $imported.nil?
$imported["YEA-MessageSystem"] = true

#==============================================================================
# ▼ Mises à jour
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.04 - Bug trouvé: \ii était \ic. Ce n'est plus le cas.
#            - Ajout: Police de fenêtre dans le texte de défilement.
# 2011.12.31 - Commencement du script et finission.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#
# Bien que RpgMaker VxAce est améliorer le système de message, il est tout de
# même encore à rajouter quelques fonctionnalités, tel que la name box, le
# choix d'ajuster la taille de la fenêtre du message pendant le jeu. Il 
# permet aussi à l'utilisateur d'utiliser plusieurs polices d'écriture et
# donne au joueur une avance rapide caractéristique des messages.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Copier le script et placer le en dessous de main.
# Esperons qu'il sera utile à tous les makers francophone.
#
# -----------------------------------------------------------------------------
# ▼ Les codes pour vos messages - Insérez les directement dans le texte.
# -----------------------------------------------------------------------------
#  Defaut:    Effet:
#    \v[x]    - Ecrire la valeur de la variable x.
#    \n[x]    - Ecrire le nom de l'acteur x.
#    \p[x]    - Ecrire le nom du membre de l'équipe x.
#    \g        - Ecrire le nom de la monnaie.
#    \c[x]    - Changer la couleur du texte par x.
#    \i[x]    - Insérer une icone dans le texte par x.
#    \{        - Augmenter la taille de l'écriture x8.
#    \}        - Diminuer la taille de l'écriture x8.
#    \$        - Ouvrir une fenêtre pour faire apparaître l'argent possédé.
#    \.        - Attendre 15 frammes (1/4 de seconde).
#    \|        - Attendre 60 frammes (1 seconde).
#    \!        - Attendre qu'une touche soit pressée.
#    \>        - Le texte suivant est instantanné.
#    \<        - Le texte qui suit n'est pas instantanné.
#    \^        - Passer au prochain message.
#    \\        - Ecrire "\" dans le message.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Attendre:  Effet:
#    \w[x]    - Attendre x frame (60 frames = 1 seconde).
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Nomfenêtre: Effet:
#    \n<x>    - Créer une name box en remplaçant x par le nom. A gauche. *Note
#    \nc<x>    - Créer une name box en remplaçant x par le nom. Au centre. *Note
#    \nr<x>    - Créer une name box en remplaçant x par le nom. A droite. *Note
#
#              *Note: Ceci est seulement pour les messages.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Position:  Effet:
#    \px[x]    - Définir la position x du texte x. *Note
#    \py[x]    - Définir la position y du texte x. *Note
#
#              *Note: Ceci est seulement pour les messages.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Externe:    Effet:
#    \oc[x]    - Saisir la couleur des bordures externes en x.
#    \oo[x]    - Saisir l'opacité des bordures externes en x.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Police:    Effet:
#    \fr      - Réinitialiser tous les changements de police.
#    \fz[x]    - Modifier la taille de police à x.
#    \fn[x]    - Modifier le nom de la police à x.
#    \fb      - Passer la police en gras.
#    \fi      - Passer la police en italique.
#    \fo      - Faire apparaître les contours de la police.
#    \fs      - Faire apparaître les ombres de la police.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Acteur:    Effet:
#    \af[x]    - Montrer le faceset de l'acteur x. *Note
#    \ac[x]    - Ecrire le nom de la classe de l'acteur x. *Note
#    \as[x]    - Ecrire le nom de la sous-classe de l'acteur x. *Note
#    \an[x]    - Ecrire le surnom de l'acteur x. *Note
#
#              *Note: Si x est égal à 0 ou négatif, il montrera les faces
#              des membres de l'équipe :
#                  0 - Leader de l'équipe.
#                  -1 - 1er membre non-leader.
#                  -2 - 2ème membre non leader. ETC.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  Noms:      Effet:
#    \nc[x]    - Ecrire le nom de la classe x.
#    \ni[x]    - Ecrire le nom de l'objet x.
#    \nw[x]    - Ecrire le nom de l'arme x.
#    \na[x]    - Ecrire le nom de l'armure x.
#    \ns[x]    - Ecrire le nom de la compétence x.
#    \nt[x]    - Ecrire le nom de l'état x.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#  NomsIcones: Effet:
#    \ic[x]    - Ecrire le nom de la classe x et y compris l'icone. *
#    \ii[x]    - Ecrire le nom de l'objet x et y compris l'icone.
#    \iw[x]    - Ecrire le nom de l'arme x et y compris l'icone.
#    \ia[x]    - Ecrire le nom de l'arumure x et y compris l'icone.
#    \is[x]    - Ecrire le nom de la compétence x et y compris l'icone.
#    \it[x]    - Ecrire le nom de l'état x et y compris l'icone.
#
#              *Note: Necessite YEA - Class System
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Ce sont les codes de texte ajouté avec ce script. Gardez à l'esprit que
# certains nombre de ces codes ne fonctionnent que pour ce texte de la
# fenêtre de message. Sinon ils vont travailler pour l'aide à la déscription,
# les biographies des acteurs, et d'autres.
#==============================================================================
# ▼ Compatibilité
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Ce script est strictement fait pour RpgMaker VxAce. Il est hautement
# improbable qu'il fonctionne avec Vx sans ajustements.
#
#==============================================================================

module YEA
  module MESSAGE
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Paramètres généraux des messages -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Ce qui est inscrit ci dessous sont les réglages de base qui auront une
    # incidence sur la majorité du script. Ajustez-les à votre gout.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Ce bouton est le bouton utilisé pour faire sauter instantanément les
    # fenêtres de messages. Maintenez la enfoncé pour l'effet. Notez que même
    # si elle accellerera le défilement, elle s'aretera toujours au pause.
    # Cependant ils iront automatiquement à la page suivante.
    TEXT_SKIP = :A    # Input::A is the shift button on keyboard.
   
    # Cette variable permet de régler le nombre visble de ligne indiqué dans le
    # message. Si vous ne souhaitez pas utiliser cette fonctionnalité définnissez
    # cette constante à 0 ou en dessous. Alors elle sera automatiquement de 4 rangées.
    VARIABLE_ROWS  = 21
   
    # Cette variable permet de régler la largeur de la fenêtre du message qui
    # s'affiche. Si vous ne souhaitez pas utiliser cette fonction, définnissez
    # la à 0 ou en dessous. Alors elle sera automatiquement à la largeur d'écran.
    VARIABLE_WIDTH = 22
   
    # C'est la quantité d'espace que la fenêtre de message retirait à chaque
    # fois qu'un face est utilisé. Par défaut: 112
    FACE_INDENT_X = 112
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Réglages de la name box -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # La name box est une petite fenêtre placé au dessus du message pour
    # libérer une ligne du message général et de faire plus ésthetique.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    NAME_WINDOW_X_BUFFER = -20    # position x de la name box.
    NAME_WINDOW_Y_BUFFER = 0      # position y de la name box
    NAME_WINDOW_PADDING  = 20      # Padding added to the horizontal position.
    NAME_WINDOW_OPACITY  = 255    # Opacité de la police de nom.
    NAME_WINDOW_COLOUR  = 6      # Couleur de la police du nom par défaut.
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Réglages de la police d'écriture des messages -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Ace Message System sépare la police d'écriture du système et celle des
    # messages. Ajustez les ci dessous pour régler vos polices.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Cette constante détermine les polices utilisées. Si la première indiquée
    # n'existe pas sur l'ordinateur du joueur, la deuxième sera à la suite
    # utilisé, la troisième et ainsi de suite.
    MESSAGE_WINDOW_FONT_NAME = ["Verdana", "Arial", "Courier New"]
   
    # Ces ajustements sont d'autres réglages conçernant la façon dont la police
    # du jeu apparaît. Notamment si elle est en gras, en italique, par défaut
    # etc.
    MESSAGE_WINDOW_FONT_SIZE    = 24      # Taille de la police.
    MESSAGE_WINDOW_FONT_BOLD    = false    # Gras par défaut?
    MESSAGE_WINDOW_FONT_ITALIC  = false    # Italique par défaut?
    MESSAGE_WINDOW_FONT_OUTLINE = true    # Apperçu par défaut?
    MESSAGE_WINDOW_FONT_SHADOW  = false    # Ombre par défaut?
   
  end # MESSAGE
end # YEA

#==============================================================================
# ▼ Ne rien modifié, ce point peut potentiellement provoquer des dommages
# causant l'ordinateur, l'incontinence, l'explosion de la tête de l'utilisateur,
# le coma, la mort et/ou l'halitose. Donc modifier à votre propre risque. (LOL)
#==============================================================================

#==============================================================================
# ■ Variable
#==============================================================================

module Variable
 
  #--------------------------------------------------------------------------
  # self.message_rows
  #--------------------------------------------------------------------------
  def self.message_rows
    return 4 if YEA::MESSAGE::VARIABLE_ROWS <= 0
    return 4 if $game_variables[YEA::MESSAGE::VARIABLE_ROWS] <= 0
    return $game_variables[YEA::MESSAGE::VARIABLE_ROWS]
  end
 
  #--------------------------------------------------------------------------
  # self.message_width
  #--------------------------------------------------------------------------
  def self.message_width
    return Graphics.width if YEA::MESSAGE::VARIABLE_WIDTH <= 0
    return Graphics.width if $game_variables[YEA::MESSAGE::VARIABLE_WIDTH] <= 0
    return $game_variables[YEA::MESSAGE::VARIABLE_WIDTH]
  end
 
end # Variable

#==============================================================================
# ■ Game_Interpreter
#==============================================================================

class Game_Interpreter
 
  #--------------------------------------------------------------------------
  # overwrite method: command_101
  #--------------------------------------------------------------------------
  def command_101
    wait_for_message
    $game_message.face_name = @params[0]
    $game_message.face_index = @params[1]
    $game_message.background = @params[2]
    $game_message.position = @params[3]
    while continue_message_string?
      @index += 1
      if @list[@index].code == 401
        $game_message.add(@list[@index].parameters[0])
      end
      break if $game_message.texts.size >= Variable.message_rows
    end
    case next_event_code
    when 102
      @index += 1
      setup_choices(@list[@index].parameters)
    when 103
      @index += 1
      setup_num_input(@list[@index].parameters)
    when 104
      @index += 1
      setup_item_choice(@list[@index].parameters)
    end
    wait_for_message
  end
 
  #--------------------------------------------------------------------------
  # new method: continue_message_string?
  #--------------------------------------------------------------------------
  def continue_message_string?
    return true if next_event_code == 101 && Variable.message_rows > 4
    return next_event_code == 401
  end
 
end # Game_Interpreter

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
 
  #--------------------------------------------------------------------------
  # new method: setup_message_font
  #--------------------------------------------------------------------------
  def setup_message_font
    @message_font = true
    change_color(normal_color)
    contents.font.out_color = Font.default_out_color
    contents.font.name = YEA::MESSAGE::MESSAGE_WINDOW_FONT_NAME
    contents.font.size = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SIZE
    contents.font.bold = YEA::MESSAGE::MESSAGE_WINDOW_FONT_BOLD
    contents.font.italic = YEA::MESSAGE::MESSAGE_WINDOW_FONT_ITALIC
    contents.font.outline = YEA::MESSAGE::MESSAGE_WINDOW_FONT_OUTLINE
    contents.font.shadow = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SHADOW
  end
 
  #--------------------------------------------------------------------------
  # alias method: reset_font_settings
  #--------------------------------------------------------------------------
  alias window_base_reset_font_settings_ams reset_font_settings
  def reset_font_settings
    if @message_font
      setup_message_font
    else
      window_base_reset_font_settings_ams
      contents.font.out_color = Font.default_out_color
      contents.font.outline = Font.default_outline
      contents.font.shadow = Font.default_shadow
    end
  end
 
  #--------------------------------------------------------------------------
  # alias method: convert_escape_characters
  #--------------------------------------------------------------------------
  alias window_base_convert_escape_characters_ams convert_escape_characters
  def convert_escape_characters(text)
    result = window_base_convert_escape_characters_ams(text)
    result = convert_ace_message_system_new_escape_characters(result)
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: convert_ace_message_system_new_escape_characters
  #--------------------------------------------------------------------------
  def convert_ace_message_system_new_escape_characters(result)
    #---
    result.gsub!(/\eFR/i) { "\eAMSF[0]" }
    result.gsub!(/\eFB/i) { "\eAMSF[1]" }
    result.gsub!(/\eFI/i) { "\eAMSF[2]" }
    result.gsub!(/\eFO/i) { "\eAMSF[3]" }
    result.gsub!(/\eFS/i) { "\eAMSF[4]" }
    #---
    result.gsub!(/\eAC\[(\d+)\]/i) { escape_actor_class_name($1.to_i) }
    result.gsub!(/\eAS\[(\d+)\]/i) { escape_actor_subclass_name($1.to_i) }
    result.gsub!(/\eAN\[(\d+)\]/i) { escape_actor_nickname($1.to_i) }
    #---
    result.gsub!(/\eNC\[(\d+)\]/i) { $data_classes[$1.to_i].name }
    result.gsub!(/\eNI\[(\d+)\]/i) { $data_items[$1.to_i].name }
    result.gsub!(/\eNW\[(\d+)\]/i) { $data_weapons[$1.to_i].name }
    result.gsub!(/\eNA\[(\d+)\]/i) { $data_armors[$1.to_i].name }
    result.gsub!(/\eNS\[(\d+)\]/i) { $data_skills[$1.to_i].name }
    result.gsub!(/\eNT\[(\d+)\]/i) { $data_states[$1.to_i].name }
    #---
    result.gsub!(/\eIC\[(\d+)\]/i) { escape_icon_item($1.to_i, :class) }
    result.gsub!(/\eII\[(\d+)\]/i) { escape_icon_item($1.to_i, :item) }
    result.gsub!(/\eIW\[(\d+)\]/i) { escape_icon_item($1.to_i, :weapon) }
    result.gsub!(/\eIA\[(\d+)\]/i) { escape_icon_item($1.to_i, :armour) }
    result.gsub!(/\eIS\[(\d+)\]/i) { escape_icon_item($1.to_i, :skill) }
    result.gsub!(/\eIT\[(\d+)\]/i) { escape_icon_item($1.to_i, :state) }
    #---
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: escape_actor_class_name
  #--------------------------------------------------------------------------
  def escape_actor_class_name(actor_id)
    if actor_id <= 0
      actor_id = $game_party.members[actor_id.abs].id
    end
    actor = $game_actors[actor_id]
    return "" if actor.nil?
    return actor.class.name
  end
 
  #--------------------------------------------------------------------------
  # new method: actor_subclass_name
  #--------------------------------------------------------------------------
  def escape_actor_subclass_name(actor_id)
    return "" unless $imported["YEA-ClassSystem"]
    if actor_id <= 0
      actor_id = $game_party.members[actor_id.abs].id
    end
    actor = $game_actors[actor_id]
    return "" if actor.nil?
    return "" if actor.subclass.nil?
    return actor.subclass.name
  end
 
  #--------------------------------------------------------------------------
  # new method: escape_actor_nickname
  #--------------------------------------------------------------------------
  def escape_actor_nickname(actor_id)
    if actor_id <= 0
      actor_id = $game_party.members[actor_id.abs].id
    end
    actor = $game_actors[actor_id]
    return "" if actor.nil?
    return actor.nickname
  end
 
  #--------------------------------------------------------------------------
  # new method: escape_icon_item
  #--------------------------------------------------------------------------
  def escape_icon_item(data_id, type)
    case type
    when :class
      return "" unless $imported["YEA-ClassSystem"]
      icon = $data_classes[data_id].icon_index
      name = $data_items[data_id].name
    when :item
      icon = $data_items[data_id].icon_index
      name = $data_items[data_id].name
    when :weapon
      icon = $data_weapons[data_id].icon_index
      name = $data_weapons[data_id].name
    when :armour
      icon = $data_armors[data_id].icon_index
      name = $data_armors[data_id].name
    when :skill
      icon = $data_skills[data_id].icon_index
      name = $data_skills[data_id].name
    when :state
      icon = $data_states[data_id].icon_index
      name = $data_states[data_id].name
    else; return ""
    end
    text = "\eI[#{icon}]" + name
    return text
  end
 
  #--------------------------------------------------------------------------
  # alias method: process_escape_character
  #--------------------------------------------------------------------------
  alias window_base_process_escape_character_ams process_escape_character
  def process_escape_character(code, text, pos)
    case code.upcase
    #---
    when 'FZ'
      contents.font.size = obtain_escape_param(text)
    when 'FN'
      text.sub!(/\[(.*?)\]/, "")
      font_name = $1.to_s
      font_name = Font.default_name if font_name.nil?
      contents.font.name = font_name.to_s
    #---
    when 'OC'
      colour = text_color(obtain_escape_param(text))
      contents.font.out_color = colour
    when 'OO'
      contents.font.out_color.alpha = obtain_escape_param(text)
    #---
    when 'AMSF'
      case obtain_escape_param(text)
      when 0; reset_font_settings
      when 1; contents.font.bold = !contents.font.bold
      when 2; contents.font.italic = !contents.font.italic
      when 3; contents.font.outline = !contents.font.outline
      when 4; contents.font.shadow = !contents.font.shadow
      end
    #---
    else
      window_base_process_escape_character_ams(code, text, pos)
    end
  end
 
end # Window_Base

#==============================================================================
# ■ Window_ChoiceList
#==============================================================================

class Window_ChoiceList < Window_Command
 
  #--------------------------------------------------------------------------
  # alias method: initialize
  #--------------------------------------------------------------------------
  alias window_choicelist_initialize_ams initialize
  def initialize(message_window)
    window_choicelist_initialize_ams(message_window)
    setup_message_font
  end
 
end # Window_ChoiceList

#==============================================================================
# ■ Window_ScrollText
#==============================================================================

class Window_ScrollText < Window_Base
 
  #--------------------------------------------------------------------------
  # alias method: initialize
  #--------------------------------------------------------------------------
  alias window_scrolltext_initialize_ams initialize
  def initialize
    window_scrolltext_initialize_ams
    setup_message_font
  end
 
end # Window_ScrollText

#==============================================================================
# ■ Window_NameMessage
#==============================================================================

class Window_NameMessage < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(message_window)
    @message_window = message_window
    super(0, 0, Graphics.width, fitting_height(1))
    self.opacity = YEA::MESSAGE::NAME_WINDOW_OPACITY
    self.z = @message_window.z + 1
    self.openness = 0
    setup_message_font
    @close_counter = 0
    deactivate
  end
 
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    return if self.active
    return if self.openness == 0
    return if @closing
    @close_counter -= 1
    return if @close_counter > 0
    close
  end
 
  #--------------------------------------------------------------------------
  # start_close
  #--------------------------------------------------------------------------
  def start_close
    @close_counter = 4
    deactivate
  end
 
  #--------------------------------------------------------------------------
  # force_close
  #--------------------------------------------------------------------------
  def force_close
    @close_counter = 0
    deactivate
    close
  end
 
  #--------------------------------------------------------------------------
  # start
  #--------------------------------------------------------------------------
  def start(text, x_position)
    @text = text.clone
    set_width
    create_contents
    set_x_position(x_position)
    set_y_position
    refresh
    activate
    open
  end
 
  #--------------------------------------------------------------------------
  # set_width
  #--------------------------------------------------------------------------
  def set_width
    text = @text.clone
    dw = standard_padding * 2 + text_size(text).width
    dw += YEA::MESSAGE::NAME_WINDOW_PADDING * 2
    dw += calculate_size(text.slice!(0, 1), text) until text.empty?
    self.width = dw
  end
 
  #--------------------------------------------------------------------------
  # calculate_size
  #--------------------------------------------------------------------------
  def calculate_size(code, text)
    case code
    when "\e"
      return calculate_escape_code_width(obtain_escape_code(text), text)
    else
      return 0
    end
  end
 
  #--------------------------------------------------------------------------
  # calculate_escape_code_width
  #--------------------------------------------------------------------------
  def calculate_escape_code_width(code, text)
    dw = -text_size("\e").width - text_size(code).width
    case code.upcase
    when 'C', 'OC', 'OO'
      dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width
      return dw
    when 'I'
      dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width
      dw += 24
      return dw
    when '{'
      make_font_bigger
    when '}'
      make_font_smaller
    when 'FZ'
      contents.font.size = obtain_escape_param(text)
    when 'FN'
      text.sub!(/\[(.*?)\]/, "")
      font_name = $1.to_s
      font_name = Font.default_name if font_name.nil?
      contents.font.name = font_name.to_s
    when 'AMSF'
      case obtain_escape_param(text)
      when 0; reset_font_settings
      when 1; contents.font.bold = !contents.font.bold
      when 2; contents.font.italic = !contents.font.italic
      when 3; contents.font.outline = !contents.font.outline
      when 4; contents.font.shadow = !contents.font.shadow
      end
    else
      return dw
    end
  end
 
  #--------------------------------------------------------------------------
  # set_y_position
  #--------------------------------------------------------------------------
  def set_x_position(x_position)
    case x_position
    when 1 # Left
      self.x = @message_window.x
      self.x += YEA::MESSAGE::NAME_WINDOW_X_BUFFER
    when 2 # 3/10
      self.x = @message_window.x
      self.x += @message_window.width * 3 / 10
      self.x -= self.width / 2
    when 3 # Center
      self.x = @message_window.x
      self.x += @message_window.width / 2
      self.x -= self.width / 2
    when 4 # 7/10
      self.x = @message_window.x
      self.x += @message_window.width * 7 / 10
      self.x -= self.width / 2
    when 5 # Right
      self.x = @message_window.x + @message_window.width
      self.x -= self.width
      self.x -= YEA::MESSAGE::NAME_WINDOW_X_BUFFER
    end
    self.x = [[self.x, Graphics.width - self.width].min, 0].max
  end
 
  #--------------------------------------------------------------------------
  # set_y_position
  #--------------------------------------------------------------------------
  def set_y_position
    case $game_message.position
    when 0
      self.y = @message_window.height
      self.y -= YEA::MESSAGE::NAME_WINDOW_Y_BUFFER
    else
      self.y = @message_window.y - self.height
      self.y += YEA::MESSAGE::NAME_WINDOW_Y_BUFFER
    end
  end
 
  #--------------------------------------------------------------------------
  # refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    reset_font_settings
    @text = sprintf("\eC[%d]%s", YEA::MESSAGE::NAME_WINDOW_COLOUR, @text)
    draw_text_ex(YEA::MESSAGE::NAME_WINDOW_PADDING, 0, @text)
  end
 
end # Window_NameMessage

#==============================================================================
# ■ Window_Message
#==============================================================================

class Window_Message < Window_Base
 
  #--------------------------------------------------------------------------
  # alias method: initialize
  #--------------------------------------------------------------------------
  alias window_message_initialize_ams initialize
  def initialize
    window_message_initialize_ams
    setup_message_font
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: window_width
  #--------------------------------------------------------------------------
  def window_width
    return Variable.message_width
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: window_height
  #--------------------------------------------------------------------------
  def window_height
    return fitting_height(Variable.message_rows)
  end
 
  #--------------------------------------------------------------------------
  # alias method: create_all_windows
  #--------------------------------------------------------------------------
  alias window_message_create_all_windows_ams create_all_windows
  def create_all_windows
    window_message_create_all_windows_ams
    @name_window = Window_NameMessage.new(self)
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: create_back_bitmap
  #--------------------------------------------------------------------------
  def create_back_bitmap
    @back_bitmap = Bitmap.new(width, height)
    rect1 = Rect.new(0, 0, Graphics.width, 12)
    rect2 = Rect.new(0, 12, Graphics.width, fitting_height(4) - 24)
    rect3 = Rect.new(0, fitting_height(4) - 12, Graphics.width, 12)
    @back_bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true)
    @back_bitmap.fill_rect(rect2, back_color1)
    @back_bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true)
  end
 
  #--------------------------------------------------------------------------
  # alias method: dispose_all_windows
  #--------------------------------------------------------------------------
  alias window_message_dispose_all_windows_ams dispose_all_windows
  def dispose_all_windows
    window_message_dispose_all_windows_ams
    @name_window.dispose
  end
 
  #--------------------------------------------------------------------------
  # alias method: update_all_windows
  #--------------------------------------------------------------------------
  alias window_message_update_all_windows_ams update_all_windows
  def update_all_windows
    window_message_update_all_windows_ams
    @name_window.update
  end
 
  #--------------------------------------------------------------------------
  # alias method: update_show_fast
  #--------------------------------------------------------------------------
  alias window_message_update_show_fast_ams update_show_fast
  def update_show_fast
    @show_fast = true if Input.press?(YEA::MESSAGE::TEXT_SKIP)
    window_message_update_show_fast_ams
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: input_pause
  #--------------------------------------------------------------------------
  def input_pause
    self.pause = true
    wait(10)
    Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) ||
      Input.press?(YEA::MESSAGE::TEXT_SKIP)
    Input.update
    self.pause = false
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: convert_escape_characters
  #--------------------------------------------------------------------------
  def convert_escape_characters(text)
    result = super(text.to_s.clone)
    result = namebox_escape_characters(result)
    result = message_escape_characters(result)
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: namebox_escape_characters
  #--------------------------------------------------------------------------
  def namebox_escape_characters(result)
    result.gsub!(/\eN\<(.+?)\>/i)  { namewindow($1, 1) }
    result.gsub!(/\eN1\<(.+?)\>/i) { namewindow($1, 1) }
    result.gsub!(/\eN2\<(.+?)\>/i) { namewindow($1, 2) }
    result.gsub!(/\eNC\<(.+?)\>/i) { namewindow($1, 3) }
    result.gsub!(/\eN3\<(.+?)\>/i) { namewindow($1, 3) }
    result.gsub!(/\eN4\<(.+?)\>/i) { namewindow($1, 4) }
    result.gsub!(/\eN5\<(.+?)\>/i) { namewindow($1, 5) }
    result.gsub!(/\eNR\<(.+?)\>/i) { namewindow($1, 5) }
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: namebox
  #--------------------------------------------------------------------------
  def namewindow(text, position)
    @name_text = text
    @name_position = position
    return ""
  end
 
  #--------------------------------------------------------------------------
  # new method: message_escape_characters
  #--------------------------------------------------------------------------
  def message_escape_characters(result)
    result.gsub!(/\eAF\[(\d+)\]/i) { change_face($1.to_i) }
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: change_face
  #--------------------------------------------------------------------------
  def change_face(actor_id)
    if actor_id <= 0
      actor_id = $game_party.members[actor_id.abs].id
    end
    actor = $game_actors[actor_id]
    return "" if actor.nil?
    $game_message.face_name = actor.face_name
    $game_message.face_index = actor.face_index
    return ""
  end
 
  #--------------------------------------------------------------------------
  # alias method: new_page
  #--------------------------------------------------------------------------
  alias window_message_new_page_ams new_page
  def new_page(text, pos)
    adjust_message_window_size
    window_message_new_page_ams(text, pos)
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_line_x
  #--------------------------------------------------------------------------
  def new_line_x
    return $game_message.face_name.empty? ? 0 : YEA::MESSAGE::FACE_INDENT_X
  end
 
  #--------------------------------------------------------------------------
  # new method: adjust_message_window_size
  #--------------------------------------------------------------------------
  def adjust_message_window_size
    self.height = window_height
    self.width = window_width
    create_contents
    update_placement
    self.x = (Graphics.width - self.width) / 2
    start_name_window
  end
 
  #--------------------------------------------------------------------------
  # new method: clear_name_window
  #--------------------------------------------------------------------------
  def clear_name_window
    @name_text = ""
    @name_position = 0
  end
 
  #--------------------------------------------------------------------------
  # new method: start_name_window
  #--------------------------------------------------------------------------
  def start_name_window
    return if @name_text == ""
    @name_window.start(@name_text, @name_position)
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: fiber_main
  #--------------------------------------------------------------------------
  def fiber_main
    $game_message.visible = true
    update_background
    update_placement
    loop do
      process_all_text if $game_message.has_text?
      process_input
      $game_message.clear
      @gold_window.close
      @name_window.start_close
      Fiber.yield
      break unless text_continue?
    end
    close_and_wait
    $game_message.visible = false
    @fiber = nil
  end
 
  #--------------------------------------------------------------------------
  # alias method: open_and_wait
  #--------------------------------------------------------------------------
  alias window_message_open_and_wait_ams open_and_wait
  def open_and_wait
    clear_name_window
    adjust_message_window_size
    window_message_open_and_wait_ams
  end
 
  #--------------------------------------------------------------------------
  # alias method: close_and_wait
  #--------------------------------------------------------------------------
  alias window_message_close_and_wait_ams close_and_wait
  def close_and_wait
    @name_window.force_close
    window_message_close_and_wait_ams
  end
 
  #--------------------------------------------------------------------------
  # alias method: all_close?
  #--------------------------------------------------------------------------
  alias window_message_all_close_ams all_close?
  def all_close?
    return window_message_all_close_ams && @name_window.close?
  end
 
  #--------------------------------------------------------------------------
  # alias method: process_escape_character
  #--------------------------------------------------------------------------
  alias window_message_process_escape_character_ams process_escape_character
  def process_escape_character(code, text, pos)
    case code.upcase
    when 'W' # Wait
      wait(obtain_escape_param(text))
    when 'PX'
      pos[:x] = obtain_escape_param(text)
    when 'PY'
      pos[:y] = obtain_escape_param(text)
    else
      window_message_process_escape_character_ams(code, text, pos)
    end
  end
 
end # Window_Message

#==============================================================================
#
# ▼ Fin du script.
#
#==============================================================================

Enjoy !

Add-on de Yami :

Code:
#==============================================================================
#
# ? Yami Script Ace - YEA Message System Add-on: Bubble Message
# -- Dernière MAJ : 2012.01.09
# -- Niveau : Normal
# -- Requis : Yanfly Engine Ace - Ace Message System v1.00+
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YSA-BubbleMessage"] = true

#==============================================================================
# ? MAJ
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.09 - Bugfix coordinate buffer.
#            - Update placement for face.
#            - Window flick.
#            - Out screen.
# 2012.01.05 - Update Coordinate buffer.
#              Fix a placement error.
# 2012.01.04 - Started and Finished script.
#
#==============================================================================
# ? Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Pour intaller le script, ouvrez l'éditeur de script et copier/coller ce script
# en dessous de Mateials mais au dessus de Main. N'oubliez pas de sauvergarder.
#
# -----------------------------------------------------------------------------
# Code pour la fenêtre du message - Ecrivez le direcetement dans le message.
# -----------------------------------------------------------------------------
#  Position:  Effect:
#    \bm[x]    - Placer la fenêtre du message à l'event x. *Note
#    \cbm      - Supprimer la fenêtre du message.
#
#              *Note: Mettre à 0 pour le placer au dessus du héros.
#
#==============================================================================
# ? Compatibilité.
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Ce script est strictement fait pour RpgMaker VxAce. Il est hautement
# improbable qu'il fonctionne avec Vx sans ajustements.
#
# Le script Yanfly Engine Ace - Ace Message System v1.00+, est requis pour
# le bon fonctionnement de ce script.
#
#==============================================================================

module YSA
  module POP_MESSAGE
    LIMIT_WIDTH = 480
    LIMIT_LINE = 2
    POP_X_BUFFER = 0
    POP_Y_BUFFER = -36
   
    FACE_SPRITE_X_BUFFER = 8      # Buffer x position of the name window.
    FACE_SPRITE_Y_BUFFER = 0      # Buffer y position of the name window.
    FACE_X_BUFFER_WINDOW_HEIGHT = true

    NAME_BUFFER_X_FROM_FACE = 112  # Only apply for Name Window left
   
    FADE_FACE = true
    MOVE_FACE = true # Only for first time
  end
end

#==============================================================================
# ? Ne rien modifié, ce point peut potentiellement provoquer des dommages
# causant l'ordinateur, l'incontinence, l'explosion de la tête de l'utilisateur,
# le coma, la mort et/ou l'halitose. Donc modifier à votre propre risque. (LOL)
#==============================================================================

#==============================================================================
# ¦ Game_Message
#==============================================================================

class Game_Message
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :face_sprite
 
end # Game_Message

#==============================================================================
# ¦ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :spriteset
 
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias pop_message_update update
  def update
    pop_message_update
    $game_message.face_sprite.update if $game_message.face_sprite
  end
 
end # Scene_Map

#==============================================================================
# ¦ Spriteset_Map
#==============================================================================

class Spriteset_Map
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :character_sprites
  attr_accessor :viewport1
 
end # Spriteset_Map

#==============================================================================
# ¦ Sprite_Message_Face
#==============================================================================

class Window_Message_Face < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 120, 120)
    self.opacity = 0
    self.visible = false
    @disposing = false
    @face_name = ""
    @face_index = 0
    @move_x = 0
    self.z = 100
  end
 
  #--------------------------------------------------------------------------
  # set_face
  #--------------------------------------------------------------------------
  def set_face(x, y)
    contents.clear
    if !$game_message.face_name.empty?
      draw_face($game_message.face_name, $game_message.face_index, 0, 0)
      self.x = x
      self.x += YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER
      if (@face_name != $game_message.face_name || @face_index != $game_message.face_index) && YSA::POP_MESSAGE::MOVE_FACE
        self.x -= 30
        @move_x = 30
        @face_name = $game_message.face_name
        @face_index = $game_message.face_index
        self.contents_opacity = 0 if YSA::POP_MESSAGE::FADE_FACE
      end
      self.y = y
      self.y -= 96
      self.y += YSA::POP_MESSAGE::FACE_SPRITE_Y_BUFFER
      self.visible = true
    else
      self.visible = false
    end
  end
 
  #--------------------------------------------------------------------------
  # hide_face
  #--------------------------------------------------------------------------
  def hide_face
    contents.clear
    self.visible = false
  end
 
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    self.contents_opacity += 15 if self.contents_opacity < 255
    unless @move_x <= 0
      self.x += 2
      @move_x -= 2
    end
  end
 
end # Sprite_Message_Face

#==============================================================================
# ¦ Window_Message
#==============================================================================

class Window_Message < Window_Base
 
  #--------------------------------------------------------------------------
  # alias method: message_escape_characters
  #--------------------------------------------------------------------------
  alias pop_message_message_escape_characters message_escape_characters
  def message_escape_characters(result)
    result.gsub!(/\eBM\[(\d+)\]/i) { event_pop_message_setup($1.to_i) }
    result.gsub!(/\eCBM/i) { event_pop_message_setup(-1) }
    result = pop_message_message_escape_characters(result)
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: event_pop_message_setup
  #--------------------------------------------------------------------------
  def event_pop_message_setup(event_id)
    @event_pop_id = event_id
    return ""
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_page
  #--------------------------------------------------------------------------
  def new_page(text, pos)
    adjust_message_window_size(text)
    window_message_new_page_ams(text, pos)
    if SceneManager.scene_is?(Scene_Map)
      if @event_pop_id && @event_pop_id >= 0
        contents.clear
        $game_message.face_sprite = Window_Message_Face.new if !$game_message.face_sprite
        $game_message.face_sprite.set_face(self.x, self.y)
        $game_message.face_sprite.y += (self.height / 5) * 2 if YSA::POP_MESSAGE::FACE_X_BUFFER_WINDOW_HEIGHT
        self.z = 98
        @name_window.x = self.x + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER + YSA::POP_MESSAGE::NAME_BUFFER_X_FROM_FACE if (@name_position == 1 || @name_position == 2) && $game_message.face_sprite
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # alias method: close
  #--------------------------------------------------------------------------
  alias pop_message_close close
  def close
    $game_message.face_sprite.hide_face if $game_message.face_sprite
    pop_message_close
  end
 
  #--------------------------------------------------------------------------
  # alias method: process_all_text
  #--------------------------------------------------------------------------
  alias pop_message_process_all_text process_all_text
  def process_all_text
    convert_escape_characters($game_message.all_text)
    pop_message_process_all_text
  end

  #--------------------------------------------------------------------------
  # alias method: update_placement
  #--------------------------------------------------------------------------
  alias event_pop_message_update_placement update_placement
  def update_placement
    if SceneManager.scene_is?(Scene_Map)
      if !@event_pop_id || @event_pop_id < 0
        event_pop_message_update_placement
        $game_message.face_sprite.hide_face if $game_message.face_sprite
      elsif @event_pop_id == 0
        hash = SceneManager.scene.spriteset.character_sprites
        character = hash[hash.size - 1]
        self.y = character.character.screen_y - self.height + YSA::POP_MESSAGE::POP_Y_BUFFER
        self.x = character.character.screen_x - self.width / 2 + YSA::POP_MESSAGE::POP_X_BUFFER
        if self.x < 0
          self.x = 0
        end
        if self.y < 0
          self.y = 64
        end
      elsif @event_pop_id > 0
        hash = SceneManager.scene.spriteset.character_sprites
        character = hash[@event_pop_id - 1]
        self.y = character.character.screen_y - self.height + YSA::POP_MESSAGE::POP_Y_BUFFER
        self.x = character.character.screen_x - self.width / 2 + YSA::POP_MESSAGE::POP_X_BUFFER
        if self.x < 0
          self.x = 0
        end
        if self.y < 0
          self.y = 64
        end
      end
    else
      event_pop_message_update_placement
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: cal_number_line
  #--------------------------------------------------------------------------
  def cal_number_line(text)
    result = 0
    text.each_line { result += 1 }
    return result
  end

  #--------------------------------------------------------------------------
  # alias method: adjust_message_window_size
  #--------------------------------------------------------------------------
  alias yea_me_pop_engine_adjust_message_window_size adjust_message_window_size
  def adjust_message_window_size(text = " ")
    if SceneManager.scene_is?(Scene_Map) && @event_pop_id && @event_pop_id >= 0
      n_line = cal_number_line(text) > YSA::POP_MESSAGE::LIMIT_LINE ? YSA::POP_MESSAGE::LIMIT_LINE : cal_number_line(text)
      self.height = fitting_height(n_line)
      self.width = text_size(text).width + 24
      self.width += new_line_x
      if self.width < YEA::MESSAGE::FACE_INDENT_X + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER + @name_window.width
        self.width += @name_window.width
      end
      if self.width > YSA::POP_MESSAGE::LIMIT_WIDTH
        self.width = YSA::POP_MESSAGE::LIMIT_WIDTH
      end
      create_contents
      update_placement
      start_name_window
    else
      yea_me_pop_engine_adjust_message_window_size
    end
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_line_x
  #--------------------------------------------------------------------------
  def new_line_x
    return $game_message.face_name.empty? ? 0 : (YEA::MESSAGE::FACE_INDENT_X + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER)
  end
 
end # Window_Message

#==============================================================================
#
# ? Fin du script.
#
#==============================================================================

P.S : Si un problème est détecté, veuillez me le préciser. Merci.



Dernière édition par Girlo le Mer 18 Jan 2012 - 13:32, édité 1 fois
avatar
UltimaSasuke
Membre

Nombre de messages : 88
Age : 22
Localisation : France, 05
Distinction : aucune
Date d'inscription : 27/07/2011

Re: Yanfly Engine Ace - Ace Message System v1.01

le Mer 18 Jan 2012 - 13:05
Merci pour cette traduction, j'utilise ce script depuis sa sortie mais ne l'ai pas traduit bon boulot. Il y a cette Add-on de Yami qui permet de réglé la taille de la fenêtre des texte et de les placé là ou l'on veut ce qui peut donner un aspect dinamique à une scéne. Non traduit je vous le propose si quelqu'un veut le traduire.

Code:
#==============================================================================
#
# ▼ Yami Script Ace - YEA Message System Add-on: Bubble Message
# -- Last Updated: 2012.01.09
# -- Level: Normal
# -- Requires: Yanfly Engine Ace - Ace Message System v1.00+
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YSA-BubbleMessage"] = true

#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.09 - Bugfix coordinate buffer.
#            - Update placement for face.
#            - Window flick.
#            - Out screen.
# 2012.01.05 - Update Coordinate buffer.
#              Fix a placement error.
# 2012.01.04 - Started and Finished script.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Message Window text Codes - These go inside of your message window.
# -----------------------------------------------------------------------------
#  Position:  Effect:
#    \bm[x]    - Sets Message Window position to event x. *Note
#    \cbm      - Cancel bubble message.
#
#              *Note: Set to 0 to sets position to Game Player.
#
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
# This script requires Yanfly Engine Ace - Ace Message System v1.00+, put this
# script below that one.
#
#==============================================================================

module YSA
  module POP_MESSAGE
    LIMIT_WIDTH = 480
    LIMIT_LINE = 2
    POP_X_BUFFER = 0
    POP_Y_BUFFER = -36
   
    FACE_SPRITE_X_BUFFER = 8      # Buffer x position of the name window.
    FACE_SPRITE_Y_BUFFER = 0      # Buffer y position of the name window.
    FACE_X_BUFFER_WINDOW_HEIGHT = true

    NAME_BUFFER_X_FROM_FACE = 112  # Only apply for Name Window left
   
    FADE_FACE = true
    MOVE_FACE = true # Only for first time
  end
end

#==============================================================================
# ▼ Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================

#==============================================================================
# ■ Game_Message
#==============================================================================

class Game_Message
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :face_sprite
 
end # Game_Message

#==============================================================================
# ■ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :spriteset
 
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias pop_message_update update
  def update
    pop_message_update
    $game_message.face_sprite.update if $game_message.face_sprite
  end
 
end # Scene_Map

#==============================================================================
# ■ Spriteset_Map
#==============================================================================

class Spriteset_Map
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :character_sprites
  attr_accessor :viewport1
 
end # Spriteset_Map

#==============================================================================
# ■ Sprite_Message_Face
#==============================================================================

class Window_Message_Face < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 120, 120)
    self.opacity = 0
    self.visible = false
    @disposing = false
    @face_name = ""
    @face_index = 0
    @move_x = 0
    self.z = 100
  end
 
  #--------------------------------------------------------------------------
  # set_face
  #--------------------------------------------------------------------------
  def set_face(x, y)
    contents.clear
    if !$game_message.face_name.empty?
      draw_face($game_message.face_name, $game_message.face_index, 0, 0)
      self.x = x
      self.x += YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER
      if (@face_name != $game_message.face_name || @face_index != $game_message.face_index) && YSA::POP_MESSAGE::MOVE_FACE
        self.x -= 30
        @move_x = 30
        @face_name = $game_message.face_name
        @face_index = $game_message.face_index
        self.contents_opacity = 0 if YSA::POP_MESSAGE::FADE_FACE
      end
      self.y = y
      self.y -= 96
      self.y += YSA::POP_MESSAGE::FACE_SPRITE_Y_BUFFER
      self.visible = true
    else
      self.visible = false
    end
  end
 
  #--------------------------------------------------------------------------
  # hide_face
  #--------------------------------------------------------------------------
  def hide_face
    contents.clear
    self.visible = false
  end
 
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    self.contents_opacity += 15 if self.contents_opacity < 255
    unless @move_x <= 0
      self.x += 2
      @move_x -= 2
    end
  end
 
end # Sprite_Message_Face

#==============================================================================
# ■ Window_Message
#==============================================================================

class Window_Message < Window_Base
 
  #--------------------------------------------------------------------------
  # alias method: message_escape_characters
  #--------------------------------------------------------------------------
  alias pop_message_message_escape_characters message_escape_characters
  def message_escape_characters(result)
    result.gsub!(/\eBM\[(\d+)\]/i) { event_pop_message_setup($1.to_i) }
    result.gsub!(/\eCBM/i) { event_pop_message_setup(-1) }
    result = pop_message_message_escape_characters(result)
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: event_pop_message_setup
  #--------------------------------------------------------------------------
  def event_pop_message_setup(event_id)
    @event_pop_id = event_id
    return ""
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_page
  #--------------------------------------------------------------------------
  def new_page(text, pos)
    adjust_message_window_size(text)
    window_message_new_page_ams(text, pos)
    if SceneManager.scene_is?(Scene_Map)
      if @event_pop_id && @event_pop_id >= 0
        contents.clear
        $game_message.face_sprite = Window_Message_Face.new if !$game_message.face_sprite
        $game_message.face_sprite.set_face(self.x, self.y)
        $game_message.face_sprite.y += (self.height / 5) * 2 if YSA::POP_MESSAGE::FACE_X_BUFFER_WINDOW_HEIGHT
        self.z = 98
        @name_window.x = self.x + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER + YSA::POP_MESSAGE::NAME_BUFFER_X_FROM_FACE if (@name_position == 1 || @name_position == 2) && $game_message.face_sprite
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # alias method: close
  #--------------------------------------------------------------------------
  alias pop_message_close close
  def close
    $game_message.face_sprite.hide_face if $game_message.face_sprite
    pop_message_close
  end
 
  #--------------------------------------------------------------------------
  # alias method: process_all_text
  #--------------------------------------------------------------------------
  alias pop_message_process_all_text process_all_text
  def process_all_text
    convert_escape_characters($game_message.all_text)
    pop_message_process_all_text
  end

  #--------------------------------------------------------------------------
  # alias method: update_placement
  #--------------------------------------------------------------------------
  alias event_pop_message_update_placement update_placement
  def update_placement
    if SceneManager.scene_is?(Scene_Map)
      if !@event_pop_id || @event_pop_id < 0
        event_pop_message_update_placement
        $game_message.face_sprite.hide_face if $game_message.face_sprite
      elsif @event_pop_id == 0
        hash = SceneManager.scene.spriteset.character_sprites
        character = hash[hash.size - 1]
        self.y = character.character.screen_y - self.height + YSA::POP_MESSAGE::POP_Y_BUFFER
        self.x = character.character.screen_x - self.width / 2 + YSA::POP_MESSAGE::POP_X_BUFFER
        if self.x < 0
          self.x = 0
        end
        if self.y < 0
          self.y = 64
        end
      elsif @event_pop_id > 0
        hash = SceneManager.scene.spriteset.character_sprites
        character = hash[@event_pop_id - 1]
        self.y = character.character.screen_y - self.height + YSA::POP_MESSAGE::POP_Y_BUFFER
        self.x = character.character.screen_x - self.width / 2 + YSA::POP_MESSAGE::POP_X_BUFFER
        if self.x < 0
          self.x = 0
        end
        if self.y < 0
          self.y = 64
        end
      end
    else
      event_pop_message_update_placement
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: cal_number_line
  #--------------------------------------------------------------------------
  def cal_number_line(text)
    result = 0
    text.each_line { result += 1 }
    return result
  end

  #--------------------------------------------------------------------------
  # alias method: adjust_message_window_size
  #--------------------------------------------------------------------------
  alias yea_me_pop_engine_adjust_message_window_size adjust_message_window_size
  def adjust_message_window_size(text = " ")
    if SceneManager.scene_is?(Scene_Map) && @event_pop_id && @event_pop_id >= 0
      n_line = cal_number_line(text) > YSA::POP_MESSAGE::LIMIT_LINE ? YSA::POP_MESSAGE::LIMIT_LINE : cal_number_line(text)
      self.height = fitting_height(n_line)
      self.width = text_size(text).width + 24
      self.width += new_line_x
      if self.width < YEA::MESSAGE::FACE_INDENT_X + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER + @name_window.width
        self.width += @name_window.width
      end
      if self.width > YSA::POP_MESSAGE::LIMIT_WIDTH
        self.width = YSA::POP_MESSAGE::LIMIT_WIDTH
      end
      create_contents
      update_placement
      start_name_window
    else
      yea_me_pop_engine_adjust_message_window_size
    end
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_line_x
  #--------------------------------------------------------------------------
  def new_line_x
    return $game_message.face_name.empty? ? 0 : (YEA::MESSAGE::FACE_INDENT_X + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER)
  end
 
end # Window_Message

#==============================================================================
#
# ▼ End of File
#
#==============================================================================
avatar
Girlo
Membre

Nombre de messages : 468
Age : 23
Localisation : Chez ta mamie [punchline]
Distinction : Ronce-Man dans toute sa splendeur [Coco' ]
Date d'inscription : 31/07/2009

Re: Yanfly Engine Ace - Ace Message System v1.01

le Mer 18 Jan 2012 - 13:13
Merci Ultima, je vais tenter de le traduire.


EDIT : Traduction de l'add-on :

Code:
#==============================================================================
#
# ? Yami Script Ace - YEA Message System Add-on: Bubble Message
# -- Dernière MAJ : 2012.01.09
# -- Niveau : Normal
# -- Requis : Yanfly Engine Ace - Ace Message System v1.00+
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YSA-BubbleMessage"] = true

#==============================================================================
# ? MAJ
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.09 - Bugfix coordinate buffer.
#            - Update placement for face.
#            - Window flick.
#            - Out screen.
# 2012.01.05 - Update Coordinate buffer.
#              Fix a placement error.
# 2012.01.04 - Started and Finished script.
#
#==============================================================================
# ? Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Pour intaller le script, ouvrez l'éditeur de script et copier/coller ce script
# en dessous de Mateials mais au dessus de Main. N'oubliez pas de sauvergarder.
#
# -----------------------------------------------------------------------------
# Code pour la fenêtre du message - Ecrivez le direcetement dans le message.
# -----------------------------------------------------------------------------
#  Position:  Effect:
#    \bm[x]    - Placer la fenêtre du message à l'event x. *Note
#    \cbm      - Supprimer la fenêtre du message.
#
#              *Note: Mettre à 0 pour le placer au dessus du héros.
#
#==============================================================================
# ? Compatibilité.
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Ce script est strictement fait pour RpgMaker VxAce. Il est hautement
# improbable qu'il fonctionne avec Vx sans ajustements.
#
# Le script Yanfly Engine Ace - Ace Message System v1.00+, est requis pour
# le bon fonctionnement de ce script.
#
#==============================================================================

module YSA
  module POP_MESSAGE
    LIMIT_WIDTH = 480
    LIMIT_LINE = 2
    POP_X_BUFFER = 0
    POP_Y_BUFFER = -36
   
    FACE_SPRITE_X_BUFFER = 8      # Buffer x position of the name window.
    FACE_SPRITE_Y_BUFFER = 0      # Buffer y position of the name window.
    FACE_X_BUFFER_WINDOW_HEIGHT = true

    NAME_BUFFER_X_FROM_FACE = 112  # Only apply for Name Window left
   
    FADE_FACE = true
    MOVE_FACE = true # Only for first time
  end
end

#==============================================================================
# ? Ne rien modifié, ce point peut potentiellement provoquer des dommages
# causant l'ordinateur, l'incontinence, l'explosion de la tête de l'utilisateur,
# le coma, la mort et/ou l'halitose. Donc modifier à votre propre risque. (LOL)
#==============================================================================

#==============================================================================
# ¦ Game_Message
#==============================================================================

class Game_Message
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :face_sprite
 
end # Game_Message

#==============================================================================
# ¦ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :spriteset
 
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias pop_message_update update
  def update
    pop_message_update
    $game_message.face_sprite.update if $game_message.face_sprite
  end
 
end # Scene_Map

#==============================================================================
# ¦ Spriteset_Map
#==============================================================================

class Spriteset_Map
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :character_sprites
  attr_accessor :viewport1
 
end # Spriteset_Map

#==============================================================================
# ¦ Sprite_Message_Face
#==============================================================================

class Window_Message_Face < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 120, 120)
    self.opacity = 0
    self.visible = false
    @disposing = false
    @face_name = ""
    @face_index = 0
    @move_x = 0
    self.z = 100
  end
 
  #--------------------------------------------------------------------------
  # set_face
  #--------------------------------------------------------------------------
  def set_face(x, y)
    contents.clear
    if !$game_message.face_name.empty?
      draw_face($game_message.face_name, $game_message.face_index, 0, 0)
      self.x = x
      self.x += YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER
      if (@face_name != $game_message.face_name || @face_index != $game_message.face_index) && YSA::POP_MESSAGE::MOVE_FACE
        self.x -= 30
        @move_x = 30
        @face_name = $game_message.face_name
        @face_index = $game_message.face_index
        self.contents_opacity = 0 if YSA::POP_MESSAGE::FADE_FACE
      end
      self.y = y
      self.y -= 96
      self.y += YSA::POP_MESSAGE::FACE_SPRITE_Y_BUFFER
      self.visible = true
    else
      self.visible = false
    end
  end
 
  #--------------------------------------------------------------------------
  # hide_face
  #--------------------------------------------------------------------------
  def hide_face
    contents.clear
    self.visible = false
  end
 
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    self.contents_opacity += 15 if self.contents_opacity < 255
    unless @move_x <= 0
      self.x += 2
      @move_x -= 2
    end
  end
 
end # Sprite_Message_Face

#==============================================================================
# ¦ Window_Message
#==============================================================================

class Window_Message < Window_Base
 
  #--------------------------------------------------------------------------
  # alias method: message_escape_characters
  #--------------------------------------------------------------------------
  alias pop_message_message_escape_characters message_escape_characters
  def message_escape_characters(result)
    result.gsub!(/\eBM\[(\d+)\]/i) { event_pop_message_setup($1.to_i) }
    result.gsub!(/\eCBM/i) { event_pop_message_setup(-1) }
    result = pop_message_message_escape_characters(result)
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: event_pop_message_setup
  #--------------------------------------------------------------------------
  def event_pop_message_setup(event_id)
    @event_pop_id = event_id
    return ""
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_page
  #--------------------------------------------------------------------------
  def new_page(text, pos)
    adjust_message_window_size(text)
    window_message_new_page_ams(text, pos)
    if SceneManager.scene_is?(Scene_Map)
      if @event_pop_id && @event_pop_id >= 0
        contents.clear
        $game_message.face_sprite = Window_Message_Face.new if !$game_message.face_sprite
        $game_message.face_sprite.set_face(self.x, self.y)
        $game_message.face_sprite.y += (self.height / 5) * 2 if YSA::POP_MESSAGE::FACE_X_BUFFER_WINDOW_HEIGHT
        self.z = 98
        @name_window.x = self.x + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER + YSA::POP_MESSAGE::NAME_BUFFER_X_FROM_FACE if (@name_position == 1 || @name_position == 2) && $game_message.face_sprite
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # alias method: close
  #--------------------------------------------------------------------------
  alias pop_message_close close
  def close
    $game_message.face_sprite.hide_face if $game_message.face_sprite
    pop_message_close
  end
 
  #--------------------------------------------------------------------------
  # alias method: process_all_text
  #--------------------------------------------------------------------------
  alias pop_message_process_all_text process_all_text
  def process_all_text
    convert_escape_characters($game_message.all_text)
    pop_message_process_all_text
  end

  #--------------------------------------------------------------------------
  # alias method: update_placement
  #--------------------------------------------------------------------------
  alias event_pop_message_update_placement update_placement
  def update_placement
    if SceneManager.scene_is?(Scene_Map)
      if !@event_pop_id || @event_pop_id < 0
        event_pop_message_update_placement
        $game_message.face_sprite.hide_face if $game_message.face_sprite
      elsif @event_pop_id == 0
        hash = SceneManager.scene.spriteset.character_sprites
        character = hash[hash.size - 1]
        self.y = character.character.screen_y - self.height + YSA::POP_MESSAGE::POP_Y_BUFFER
        self.x = character.character.screen_x - self.width / 2 + YSA::POP_MESSAGE::POP_X_BUFFER
        if self.x < 0
          self.x = 0
        end
        if self.y < 0
          self.y = 64
        end
      elsif @event_pop_id > 0
        hash = SceneManager.scene.spriteset.character_sprites
        character = hash[@event_pop_id - 1]
        self.y = character.character.screen_y - self.height + YSA::POP_MESSAGE::POP_Y_BUFFER
        self.x = character.character.screen_x - self.width / 2 + YSA::POP_MESSAGE::POP_X_BUFFER
        if self.x < 0
          self.x = 0
        end
        if self.y < 0
          self.y = 64
        end
      end
    else
      event_pop_message_update_placement
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: cal_number_line
  #--------------------------------------------------------------------------
  def cal_number_line(text)
    result = 0
    text.each_line { result += 1 }
    return result
  end

  #--------------------------------------------------------------------------
  # alias method: adjust_message_window_size
  #--------------------------------------------------------------------------
  alias yea_me_pop_engine_adjust_message_window_size adjust_message_window_size
  def adjust_message_window_size(text = " ")
    if SceneManager.scene_is?(Scene_Map) && @event_pop_id && @event_pop_id >= 0
      n_line = cal_number_line(text) > YSA::POP_MESSAGE::LIMIT_LINE ? YSA::POP_MESSAGE::LIMIT_LINE : cal_number_line(text)
      self.height = fitting_height(n_line)
      self.width = text_size(text).width + 24
      self.width += new_line_x
      if self.width < YEA::MESSAGE::FACE_INDENT_X + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER + @name_window.width
        self.width += @name_window.width
      end
      if self.width > YSA::POP_MESSAGE::LIMIT_WIDTH
        self.width = YSA::POP_MESSAGE::LIMIT_WIDTH
      end
      create_contents
      update_placement
      start_name_window
    else
      yea_me_pop_engine_adjust_message_window_size
    end
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: new_line_x
  #--------------------------------------------------------------------------
  def new_line_x
    return $game_message.face_name.empty? ? 0 : (YEA::MESSAGE::FACE_INDENT_X + YSA::POP_MESSAGE::FACE_SPRITE_X_BUFFER)
  end
 
end # Window_Message

#==============================================================================
#
# ? Fin du script.
#
#==============================================================================
avatar
Sagi
Membre

Nombre de messages : 38
Distinction : aucune
Date d'inscription : 19/03/2014

Re: Yanfly Engine Ace - Ace Message System v1.01

le Dim 23 Mar 2014 - 18:05
Je remonte ce sujet pour éviter de refaire un nouveau post,

Est ce qu'il est possible d'ajuster les fenêtres lorsqu'elles apparaissent ?

Un screen parlera mieux de lui même :


Voilà c'est assez moche et disproportionné, il y aurait-il un moyen de redimensionner correctement cela ? ^_^
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: Yanfly Engine Ace - Ace Message System v1.01

le Dim 23 Mar 2014 - 18:18

Kikou Sagi attention aux nécropost Smile

Lorsque tu as une question de la sorte tu dois le faire dans la catégorie adéquate.
avatar
Sagi
Membre

Nombre de messages : 38
Distinction : aucune
Date d'inscription : 19/03/2014

Re: Yanfly Engine Ace - Ace Message System v1.01

le Dim 23 Mar 2014 - 18:53
Justement ! je pense qu'il est plus adéquat de remonter un post de ce genre pour demander une modification plutôt que de faire un nouveau post qui, après avoir obtenu une réponse sombrera et polluera le fond du forum..

Ma demande pourra servir au personnes futur qui liront ce sujet car je parle clairement d'une amélioration de script.


Dernière édition par Sagi le Dim 23 Mar 2014 - 20:03, édité 1 fois
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: Yanfly Engine Ace - Ace Message System v1.01

le Dim 23 Mar 2014 - 18:58
Non, tu serais gentil de faire cette demande dans la section entraide merci.


Dernière édition par spywaretof le Dim 23 Mar 2014 - 21:40, édité 1 fois
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 24
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Re: Yanfly Engine Ace - Ace Message System v1.01

le Dim 23 Mar 2014 - 20:28
Houla... Changement de police, changement de couleur, écriture plus attentionnée, pas de doute... Il ne peut s'agir que d'une seule chose au monde...

affraid affraid affraid affraid Spy est maintenant modérateur  affraid affraid affraid affraid affraid 

Je ne comprends par contre pas pourquoi tout le monde poste encore des scripts dans cette section alors que j'ai posté le lien de la wikiliste qui recense tous les scripts actuels du marchés anglophones, hispanophone, portugophone, ritalophone, etc.
avatar
Xandiar
Membre

Nombre de messages : 497
Age : 22
Localisation : Suisse
Distinction : aucune
Date d'inscription : 12/10/2013

Re: Yanfly Engine Ace - Ace Message System v1.01

le Dim 23 Mar 2014 - 20:40
XtremeViper a écrit:Je ne comprends par contre pas pourquoi tout le monde poste encore des scripts dans cette section alors que j'ai posté le lien de la wikiliste qui recense tous les scripts actuels du marchés anglophones, hispanophone, portugophone, ritalophone, etc.

Sa permet de présenter un script précis, sa évite de chercher dans la liste (même si j'utilise énormément la wikiliste)
Contenu sponsorisé

Re: Yanfly Engine Ace - Ace Message System v1.01

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum