- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(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' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
[VXAce] Script de PopUp
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 :
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 :
- 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
- onikowaiMembre
- Nombre de messages : 396
Age : 38
Localisation : Vaucluse
Distinction : aucune
Date d'inscription : 04/01/2013
Re: [VXAce] Script de PopUp
Dim 12 Jan 2014 - 10:22
Ca ne me servira pas mais merci du partage.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum