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



Le Deal du moment : -55%
Friteuse sans huile – PHILIPS – Airfryer ...
Voir le deal
49.99 €

Partagez
 

 Bubble message

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
RitoJS
Modérateur
Modérateur
RitoJS


Masculin Age : 30
Inscrit le : 22/12/2011
Messages : 1600

Bubble message Empty
MessageSujet: Bubble message   Bubble message Icon_minitimeSam 3 Aoû 2013 - 11:17

Crédit: Yami

Ce script vous permet d'avoir une boite de dialogue qui s'adapte à la longueur et largeur de chaque dialogue:
Bubble message 1TQPW

Code:
\bm[x]
Ce code permet d'afficher la boite de dialogue au-dessus de vos pnj. Remplacez "x" par l'id du pnj (pour le héros c'est "0").
Ce code est a placé dans vos messages.

Vous aurez aussi besoin de cette image (à placer dans le dossier Graphics/System):
Bubble message 1TQVV
Image, que vous pouvez personnaliser bien sûr.

Script:
Code:
#==============================================================================
#
# ¥ Yami Engine Symphony - Pop Message
# -- Last Updated: 2013.01.29
# -- Level: Easy
# -- Requires: n/a
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YES-PopMessage"] = true

#==============================================================================
# ¥ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2013.01.29 - Compatible with: YEA - Ace Message System Namebox.
# 2013.01.29 - Fixed a minor crash with Bubble Tag.
# 2013.01.28 - Finished Script.
# 2013.01.25 - Started Script.
#
#==============================================================================
# ¥ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script provides bubble messages feature, which makes message window pop
# over player's or event's head.
#
#==============================================================================
# ¥ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ¥ Materials/‘fÞ but above ¥ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Message Window text Codes - These go inside of your message window.
# -----------------------------------------------------------------------------
#  Code:      Effect:
#    \bm[x]    - Pops message on event ID x head.
#                Set x to 0 for player pop.
#    \cbm      - Cancel pops message manually.
#    \cbt[name] - Set bubble tag filename to name.
#
#==============================================================================
# ¥ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjustments.
#
#==============================================================================

#==============================================================================
# ¡ Configuration
#==============================================================================

module YES
  module POP_MESSAGE
   
    #===========================================================================
    # - Limit Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # The following below will adjust the limit options for pop message.
    #===========================================================================
    LIMIT_SETTING = { # Start.
      :width            =>  0, # Set to 0 to disable limitation.
      :lines            =>  4, # Set to 0 to disable limitation.
    } # End.
   
    #===========================================================================
    # - Effect Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # The following below will adjust the effect options for pop message.
    #===========================================================================
    EFFECT_SETTING = { # Start.
      :default_face    =>  false,# Use default face draw.
      # Effects for non-default face draw.
      :face_fade        =>  true, # Makes face to be fading when start message.
      :face_move        =>  true, # Makes face to be moving in when start message.
      # Bubble tag settings.
      :bubble_tag      =>  true, # Enables bubble tag for pop message.
      :bubble_name      =>  "BubbleTag", # Put bubble tag image into
                                        # Graphics/System
      :bubble_offset_y  =>  -6,
    } # End.
   
  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.
#==============================================================================

#==============================================================================
# ¡ Window_MessageFace
#==============================================================================

class Window_MessageFace < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 120, 120)
    self.opacity = 0
    self.contents_opacity = 0
    self.close
    @move_x = 0
  end
 
  #--------------------------------------------------------------------------
  # draw_content_face
  #--------------------------------------------------------------------------
  def draw_content_face
    if $game_message.face_name.empty?
      hide_face
    else
      self.y = - self.height
      contents.clear
      draw_face($game_message.face_name, $game_message.face_index, 0, 0)
    end
  end
 
  #--------------------------------------------------------------------------
  # fade_time
  #--------------------------------------------------------------------------
  def fade_time
    17
  end
 
  #--------------------------------------------------------------------------
  # move_time
  #--------------------------------------------------------------------------
  def move_time
    17
  end
 
  #--------------------------------------------------------------------------
  # move_rate
  #--------------------------------------------------------------------------
  def move_rate
    2
  end
 
  #--------------------------------------------------------------------------
  # show_face
  #--------------------------------------------------------------------------
  def show_face
    return if $game_message.face_name.empty?
    self.open
    #---
    if (YES::POP_MESSAGE::EFFECT_SETTING[:face_fade] ||
        YES::POP_MESSAGE::EFFECT_SETTING[:face_move])
        self.openness = 255
    end
    #---
    if YES::POP_MESSAGE::EFFECT_SETTING[:face_fade]
      self.contents_opacity = 0
    else
      self.contents_opacity = 255
    end
    #---
    if YES::POP_MESSAGE::EFFECT_SETTING[:face_move]
      @move_x = move_time * move_rate
      self.x -= @move_x
    end
  end
 
  #--------------------------------------------------------------------------
  # hide_face
  #--------------------------------------------------------------------------
  def hide_face
    close
  end
 
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    #---
    self.contents_opacity += 255.0 / fade_time
    #---
    if @move_x > 0
      rate = [move_rate, @move_x].min
      @move_x -= rate
      self.x += rate     
    end
  end
 
end # Window_MessageFace

#==============================================================================
# ¡ Window_Message
#==============================================================================

class Window_Message < Window_Base
 
  #--------------------------------------------------------------------------
  # new method: pop_message_initialize
  #--------------------------------------------------------------------------
  def pop_message_initialize(text)
    if text =~ /\\BM\[(\d+)\]/i
      setup_pop_message($1.to_i)
    end
    if text =~ /\\CBM/i
      cancel_pop_message
    end
    if text =~ /\\CBT\[(.*)\]/i
      create_bubble_sprite($1)
      @bubble_sprite.opacity = 255
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: process_pop_message
  #--------------------------------------------------------------------------
  def process_pop_message(text)
    text.gsub!(/\eCBT\[(.*)\]/i) { "" }
    text.gsub!(/\eBM\[(\d+)\]/i) { "" }
    text.gsub!(/\eCBM/i) { "" }
    text
  end
 
  #--------------------------------------------------------------------------
  # alias method: convert_escape_characters
  #--------------------------------------------------------------------------
  alias yes_pm_convert_escape_characters convert_escape_characters
  def convert_escape_characters(text)
    result = yes_pm_convert_escape_characters(text)
    result = process_pop_message(result)
    result
  end
 
  #--------------------------------------------------------------------------
  # new method: setup_pop_message
  #--------------------------------------------------------------------------
  def setup_pop_message(id)
    create_bubble_sprite
    adjust_window_size
    adjust_window_position(id)
    @bubble_sprite.opacity = 255
  end
 
  #--------------------------------------------------------------------------
  # new method: create_bubble_sprite
  #--------------------------------------------------------------------------
  def create_bubble_sprite(filename = nil)
    return unless YES::POP_MESSAGE::EFFECT_SETTING[:bubble_tag]
    filename = YES::POP_MESSAGE::EFFECT_SETTING[:bubble_name] unless filename
    bitmap = Cache.system(filename)
    @bubble_sprite ||= Sprite.new
    @bubble_sprite.z = self.z
    @bubble_sprite.opacity = 0
    @bubble_sprite.bitmap = bitmap
    @bubble_sprite.src_rect.set(0, 0, bitmap.width, bitmap.height / 2)
  end
 
  #--------------------------------------------------------------------------
  # new method: adjust_window_position
  #--------------------------------------------------------------------------
  def adjust_window_position(id)
    hash = $game_map.events
    character = id <= 0 ? $game_player : hash[id]
    #---
    bitmap = Cache.character(character.character_name)
    sign = character.character_name[/^[\!\$]./]
    if sign && sign.include?('$')
      ch = bitmap.height / 4
    else
      ch = bitmap.height / 8
    end
    #---
    self.x = character.screen_x - self.width / 2
    self.y = character.screen_y - self.height - ch
    if @bubble_sprite
      @bubble_sprite.x = character.screen_x - @bubble_sprite.width / 2
      @bubble_sprite.y = self.y + self.height
      @bubble_sprite.y += YES::POP_MESSAGE::EFFECT_SETTING[:bubble_offset_y]
    end
    #---
    end_x = self.x + self.width
    self.x = 0 if self.x < 0
    self.x = Graphics.width - self.width if end_x > Graphics.width
    if self.y < 0
      self.y = character.screen_y
      if @bubble_sprite
        @bubble_sprite.y = self.y - @bubble_sprite.height
        @bubble_sprite.y -= YES::POP_MESSAGE::EFFECT_SETTING[:bubble_offset_y]
        @bubble_sprite.src_rect.set(0, @bubble_sprite.height,
                                    @bubble_sprite.width, @bubble_sprite.height)
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: adjust_window_size
  #--------------------------------------------------------------------------
  def adjust_window_size
    text = convert_escape_characters($game_message.all_text)
    #---
    width = cal_width_line(text) + standard_padding * 2
    width = width + new_line_x
    if YES::POP_MESSAGE::LIMIT_SETTING[:width] > 0
      width = [YES::POP_MESSAGE::LIMIT_SETTING[:width], width]
    end
    #---
    lines = cal_number_line(text)
    if YES::POP_MESSAGE::LIMIT_SETTING[:lines] > 0
      lines = [YES::POP_MESSAGE::LIMIT_SETTING[:lines], lines].min
    end
    if YES::POP_MESSAGE::EFFECT_SETTING[:default_face]
      unless $game_message.face_name.empty?
        lines = [4, lines].max
      end
    end
    #---
    self.width = width
    self.height = fitting_height(lines)
    create_contents
  end
   
  #--------------------------------------------------------------------------
  # new method: cal_number_line
  #--------------------------------------------------------------------------
  def cal_number_line(text)
    result = 0
    text.each_line { result += 1 }
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: cal_width_line
  #--------------------------------------------------------------------------
  def cal_width_line(text)
    result = 0
    text.each_line { |line|
      result = text_size(line).width if result < text_size(line).width
    }
    return result
  end
 
  #--------------------------------------------------------------------------
  # new method: cancel_pop_message
  #--------------------------------------------------------------------------
  def cancel_pop_message
    update_placement
    reset_size
    create_bubble_sprite
  end
 
  #--------------------------------------------------------------------------
  # new method: reset_size
  #--------------------------------------------------------------------------
  def reset_size
    self.width = window_width
    self.height = window_height
    update_padding
    create_contents
  end
 
  #--------------------------------------------------------------------------
  # alias method: draw_face
  #--------------------------------------------------------------------------
  alias yes_pop_message_draw_face draw_face
  def draw_face(face_name, face_index, x, y, enabled = true)
    return unless YES::POP_MESSAGE::EFFECT_SETTING[:default_face]
    yes_pop_message_draw_face(face_name, face_index, x, y, enabled)
  end
 
  #--------------------------------------------------------------------------
  # alias method: update_placement
  #--------------------------------------------------------------------------
  alias yes_pop_message_update_placement update_placement
  def update_placement
    yes_pop_message_update_placement
    self.x = 0
  end
 
  #--------------------------------------------------------------------------
  # alias method: process_all_text
  #--------------------------------------------------------------------------
  alias yes_pop_message_process_all_text process_all_text
  def process_all_text
    pop_message_initialize($game_message.all_text)
    yes_pop_message_process_all_text
  end
 
  #--------------------------------------------------------------------------
  # alias method: open_and_wait
  #--------------------------------------------------------------------------
  alias yes_pop_message_open_and_wait open_and_wait
  def open_and_wait
    yes_pop_message_open_and_wait
    @face_window ||= Window_MessageFace.new
    @face_window.draw_content_face
    @face_window.x = self.x + 8
    @face_window.y += self.y + self.height
    @face_window.show_face
  end
 
  #--------------------------------------------------------------------------
  # alias method: close_and_wait
  #--------------------------------------------------------------------------
  alias yes_pop_message_close_and_wait close_and_wait
  def close_and_wait
    @face_window.hide_face
    @bubble_sprite.opacity = 0 if @bubble_sprite
    yes_pop_message_close_and_wait
    cancel_pop_message
  end
 
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias yes_pop_message_update update
  def update
    yes_pop_message_update
    if @face_window
      @face_window.update
      @face_window.z = self.z
    end
    if @bubble_sprite
      @bubble_sprite.update
      @bubble_sprite.z = self.z
    end
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: adjust_message_window_size
  # YEA - Message System Compatible
  #--------------------------------------------------------------------------
  def adjust_message_window_size
    start_name_window
  end
 
end # Window_Message

#==============================================================================
# ¡ Window_NameMessage
#==============================================================================
if $imported["YEA-MessageSystem"]
class Window_NameMessage < Window_Base
 
  #--------------------------------------------------------------------------
  # set_x_position
  #--------------------------------------------------------------------------
  alias yes_pm_set_x_position set_x_position
  def set_x_position(x_position)
    yes_pm_set_x_position(x_position)
    self.x += @message_window.new_line_x if x_position == 1
    self.z = @message_window.z
  end
 
end # Window_NameMessage
end

#==============================================================================
#
# ¥ End of File
#
#==============================================================================
Revenir en haut Aller en bas
http://lunarito.wordpress.com/
 

Bubble message

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

 Sujets similaires

-
» Message background
» Message aléatoire
» Message d'erreur
» Nom et message... [Résolu]
» Message de combat

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