Partagez
Aller en bas
Skillo
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 30
Localisation : Rennes
Distinction : J'aime ce gars :P
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' Very Happy]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008

[VXAce] Script de PopUp Empty [VXAce] Script de PopUp

le Dim 12 Jan 2014 - 5:07
Auteur : Skillo

Version du script : V 1.0

Principe du script : C'est un script permettant d'afficher des message sous forme de popup sur la carte.

Instructions : Toute les explications sont dans le script

Screen :
[VXAce] Script de PopUp Mini_264141screen

Script:

Code:

#==============================================================================
# ** Skillo_PopUp fait par Skillo
#------------------------------------------------------------------------------
#  Ce script vous permet d'afficher une fenetre de popup.
#  Pour cela, il faut utiliser $game_popup.add("votre message") dans la
#  commande script de votre evenement.
#
#  Plusieurs options sont disponibles, en effets vous pouvez :
#
#  - changer le background de la fenetre avec $game_popup.set_background(x)
#   avec x come type de fond (0 = normal, 1 = fond noir, 2 = transparent)
#
#  - changer la largeur de la fenetre avec $game_popup.set_width(x)
#   sachant que 0 = tout l'ecran, 1 = 1/2 de l'écran, 2 = 1/3 de l'ecran, etc
#
#  - changer la position de la fenetre avec $game_popup.set_position(x,y)
#   avec pour valeur de x : 0 = gauche, 1 = centre, 2 = droite
#   et pour valeur de y : 0 = haut, 1 = centre, 2 = bas
#
#  - changer l'espace entre la fenetre et le bord de l'ecran avec la fonction
#   $game_popup.set_margin(x, y) avec x,y le nombre de pixel d'espace
#
#  - changer la durée d'affichage de la popup avec $game_popup.set_duration(x)
#    avec x le nombre de frames pendant lesquelles la fenetre est visible
#  
#  - restaurer la configuration par defaut avec $game_popup.reset
#
# La configuration de la popup est reste sauvegarder vous n'avez pas besoin de
# faire un $game_popup.set_width(1) à chaque fois que vous voulez faire un
# $game_popup.add("votre message"), une fois suffit. De plus la configuration
# est sauvegardee dans les fichiers de saave et sera chargee avec eux
#
# Example :
# si vous voulez afficher une popup qui fait la moitie de l'ecran en
# bas à droite avec un fond noir et collee aux bord de l'ecran :
#   $game_popup.set_width(1)
#   $game_popup.set_background(1)
#   $game_popup.set_position(2,2)
#   $game_popup.set_margin(0,0)
#   $game_popup.add("votre texte 1")
#
# si dans un autre evenement vous voulez afficher une autre popu dans les mêmes
# condition vous n'aurez qu'à faire :
#   $game_popup.add("votre texte 2")
#
# Pour finir les caractere speciaux tel que \N[1] fonctionnent aussi, il suffit
# de mettre \\N[1]. Exemple : $game_popup.add("Bienvenu \\N[1] !!")
#
#==============================================================================

#==============================================================================
# ** DataManager
#------------------------------------------------------------------------------
#  This module manages the database and game objects. Almost all of the
# global variables used by the game are initialized by this module.
#==============================================================================

module DataManager
  class << self
    #--------------------------------------------------------------------------
    # * Create Game Objects
    #--------------------------------------------------------------------------
    alias :skillo_popup_create_game_objects :create_game_objects
    def create_game_objects
      skillo_popup_create_game_objects
      $game_popup       = Game_PopUp.new
    end
    #--------------------------------------------------------------------------
    # * Create Save Contents
    #--------------------------------------------------------------------------
    alias :skillo_popup_make_save_contents :make_save_contents
    def make_save_contents
      contents = skillo_popup_make_save_contents
      contents[:popup]        = $game_popup
      contents      
    end
    #--------------------------------------------------------------------------
    # * Extract Save Contents
    #--------------------------------------------------------------------------
    alias :skillo_popup_extract_save_contents :extract_save_contents
    def extract_save_contents(contents)
      skillo_popup_extract_save_contents(contents)
      $game_popup        = contents[:popup]
      if $game_popup == nil
          $game_popup       = Game_PopUp.new
      end
    end
  end
end

#==============================================================================
# ** Game_PopUp
#------------------------------------------------------------------------------
#  This class handles the state of the popup window that displays text or
# selections, etc. The instance of this class is referenced by $game_popup.
#==============================================================================

class Game_PopUp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :texts                    # text array (in rows)
  attr_accessor :background               # background type
  attr_accessor :position_x               # display position on x axis
  attr_accessor :position_y               # display position on y axis
  attr_accessor :margin_x                 # margin on x axis
  attr_accessor :margin_y                 # margin on y axis
  attr_accessor :width                    # display size  
  attr_accessor :duration                 # display duration
  attr_accessor :visible                  # displaying a message
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    clear
    reset
    @visible = false
  end
  #--------------------------------------------------------------------------
  # * Clear
  #--------------------------------------------------------------------------
  def clear
    @texts = []
  end

  #--------------------------------------------------------------------------
  # * Reset
  #--------------------------------------------------------------------------  
  def reset
    @width = 0
    @background = 0
    @position_x = 0
    @margin_x = 12
    @position_y = 0
    @margin_y = 12
    @duration = 60
  end
  
  #--------------------------------------------------------------------------
  # * Set Margin
  #--------------------------------------------------------------------------
  def set_margin(margin_x,margin_y)
    @margin_x = margin_x
    @margin_y = margin_y
  end
  
  #--------------------------------------------------------------------------
  # * Set Position
  #--------------------------------------------------------------------------
  def set_position(x,y)
    @position_x = x
    @position_y = y
  end
  
  #--------------------------------------------------------------------------
  # * Set Background
  #--------------------------------------------------------------------------
  def set_background(background)
    @background = background
  end
  
  #--------------------------------------------------------------------------
  # * Set Width
  #--------------------------------------------------------------------------
  def set_width(width)
    @width = width
  end
  
  #--------------------------------------------------------------------------
  # * Set Duration
  #--------------------------------------------------------------------------
  def set_duration(duration)
    @duration = duration
  end
  
  #--------------------------------------------------------------------------
  # * Add Text
  #--------------------------------------------------------------------------
  def add(text)
    @texts.push(text)
  end
  #--------------------------------------------------------------------------
  # * Determine Existence of Text
  #--------------------------------------------------------------------------
  def has_text?
    @texts.size > 0
  end
  #--------------------------------------------------------------------------
  # * Determine if Busy
  #--------------------------------------------------------------------------
  def busy?
    has_text?
  end
  #--------------------------------------------------------------------------
  # * Get All Text Including New Lines
  #--------------------------------------------------------------------------
  def all_text
    @texts.inject("") {|r, text| r += text }
  end
end



#==============================================================================
# ** Window_PopUp
#------------------------------------------------------------------------------
#  This message window is used to display text as a popup.
#==============================================================================

class Window_PopUp < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, window_height)
    self.z = 200
    self.openness = 0
    create_back_bitmap
    create_back_sprite
    clear_instance_variables
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width / ($game_popup.width + 1)
  end
  #--------------------------------------------------------------------------
  # * Get Window Height
  #--------------------------------------------------------------------------
  def window_height
    fitting_height(visible_line_number)
  end
  #--------------------------------------------------------------------------
  # * Clear Instance Variables
  #--------------------------------------------------------------------------
  def clear_instance_variables
    @fiber = nil                # Fiber
    @background = 0             # Background type
    @position_y = 0               # Display position
    @position_x = 0
  end

  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    return 1
  end
  #--------------------------------------------------------------------------
  # * Free
  #--------------------------------------------------------------------------
  def dispose
    super
    dispose_back_bitmap
    dispose_back_sprite
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_back_sprite
    update_fiber
  end
  #--------------------------------------------------------------------------
  # * Update Fiber
  #--------------------------------------------------------------------------
  def update_fiber
    if @fiber
      @fiber.resume
    elsif $game_popup.busy?
      @fiber = Fiber.new { fiber_main }
      @fiber.resume
    else
      $game_popup.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # * Create Background Bitmap
  #--------------------------------------------------------------------------
  def create_back_bitmap
    @back_bitmap = Bitmap.new(width, height)
    rect1 = Rect.new(0, 0, width, 12)
    rect2 = Rect.new(0, 12, width, height - 24)
    rect3 = Rect.new(0, height - 12, 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
  #--------------------------------------------------------------------------
  # * Get Background Color 1
  #--------------------------------------------------------------------------
  def back_color1
    Color.new(0, 0, 0, 160)
  end
  #--------------------------------------------------------------------------
  # * Get Background Color 2
  #--------------------------------------------------------------------------
  def back_color2
    Color.new(0, 0, 0, 0)
  end
  #--------------------------------------------------------------------------
  # * Create Background Sprite
  #--------------------------------------------------------------------------
  def create_back_sprite
    @back_sprite = Sprite.new
    @back_sprite.bitmap = @back_bitmap
    @back_sprite.visible = false
    @back_sprite.z = z - 1
  end
  
  #--------------------------------------------------------------------------
  # * Free Background Bitmap
  #--------------------------------------------------------------------------
  def dispose_back_bitmap
    @back_bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # * Free Background Sprite
  #--------------------------------------------------------------------------
  def dispose_back_sprite
    @back_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # * Update Background Sprite
  #--------------------------------------------------------------------------
  def update_back_sprite
    @back_sprite.visible = (@background == 1)
    @back_sprite.y = y
    @back_sprite.x = x
    @back_sprite.opacity = openness
    @back_sprite.update
  end
  #--------------------------------------------------------------------------
  # * Main Processing of Fiber
  #--------------------------------------------------------------------------
  def fiber_main
    $game_popup.visible = true
    update_window
    update_background
    update_placement
    loop do
      process_all_text if $game_popup.has_text?
      wait($game_popup.duration)
      $game_popup.clear
      Fiber.yield
      break unless text_continue?
    end
    close_and_wait
    $game_popup.visible = false
    @fiber = nil
  end
  
  #--------------------------------------------------------------------------
  # * Update Window Background
  #--------------------------------------------------------------------------
  def update_background
    @background = $game_popup.background
    self.opacity = @background == 0 ? 255 : 0
  end
  
  #--------------------------------------------------------------------------
  # * Update Window Position
  #--------------------------------------------------------------------------
  def update_placement
    @position_x = $game_popup.position_x
    @position_y = $game_popup.position_y  
    margin_x = 0
    margin_y = 0
    if @position_x == 0
      margin_x = $game_popup.margin_x
    elsif @position_x == 2
      margin_x = -$game_popup.margin_x
    end
    if @position_y == 0
      margin_y = $game_popup.margin_y
    elsif @position_y == 2
      margin_y = -$game_popup.margin_y
    end
    self.x = @position_x * (Graphics.width - width)/2
    self.x += margin_x if $game_popup.width != 0
    self.y = @position_y * (Graphics.height - height)/2
    self.y += margin_y if $game_popup.width != 0

  end
  
  #--------------------------------------------------------------------------
  # * Update Window Width
  #--------------------------------------------------------------------------
  def update_window
    self.width =  Graphics.width / ($game_popup.width + 1)
    create_contents
    dispose_back_bitmap
    dispose_back_sprite
    create_back_bitmap
    create_back_sprite
  end
  
  #--------------------------------------------------------------------------
  # * Process All Text
  #--------------------------------------------------------------------------
  def process_all_text
    open_and_wait
    text = convert_escape_characters($game_popup.all_text)
    pos = {}
    set_pos(text, pos)
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
  
  #--------------------------------------------------------------------------
  # * New Page
  #--------------------------------------------------------------------------
  def set_pos(text, pos)
    contents.clear
    reset_font_settings
    realtext = convert_text_without_escape_characters(text)
    pos[:x] = (width - text_size(realtext).width)/2 - 8
    pos[:y] = 0
    pos[:new_x] = pos[:x]
    pos[:height] = calc_line_height(text)
  end

  #--------------------------------------------------------------------------
  # * Open Window and Wait for It to Fully Open
  #--------------------------------------------------------------------------
  def open_and_wait
    open
    Fiber.yield until open?
  end
  #--------------------------------------------------------------------------
  # * Close Window and Wait for It to Fully Close
  #--------------------------------------------------------------------------
  def close_and_wait
    close
    Fiber.yield until close?
  end
  
  #--------------------------------------------------------------------------
  # * Determine Whether to Continue Displaying Text
  #--------------------------------------------------------------------------
  def text_continue?
    $game_popup.has_text?
  end
  #--------------------------------------------------------------------------
  # * Wait
  #--------------------------------------------------------------------------
  def wait(duration)
    duration.times { Fiber.yield }
  end
  
  #--------------------------------------------------------------------------
  # * convert text without escape characters
  #--------------------------------------------------------------------------  
  def convert_text_without_escape_characters(text)
    result = text.to_s.clone
    result.gsub!(/\\/)            { "\e" }
    result.gsub!(/\e\e/)          { "\\" }
    result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
    result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
    result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
    result.gsub!(/\eG/i)          { Vocab::currency_unit }
    result.gsub!(/\eC\[(\d+)\]/i) { "" }
    result.gsub!(/\eI\[(\d+)\]/i) {
      res=""
      24.times { res += " " }
    }
    result
  end  
end


#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  This class performs the map screen processing.
#==============================================================================

class Scene_Map < Scene_Base
  
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  alias :skillo_popup_start :start
  def start
    skillo_popup_start
    $game_popup.visible = false
  end
    
  #--------------------------------------------------------------------------
  # * Create All Windows
  #--------------------------------------------------------------------------
  alias :skillo_popup_create_all_windows :create_all_windows
  def create_all_windows
    skillo_popup_create_all_windows
    create_popup_window
  end  
  
  #--------------------------------------------------------------------------
  # * Create Message Window
  #--------------------------------------------------------------------------
  def create_popup_window
    @popup_window = Window_PopUp.new
  end
end

onikowai
onikowai
Membre

Nombre de messages : 396
Age : 33
Localisation : Vaucluse
Distinction : aucune
Date d'inscription : 04/01/2013

[VXAce] Script de PopUp Empty Re: [VXAce] Script de PopUp

le Dim 12 Jan 2014 - 10:22
Ca ne me servira pas mais merci du partage.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum