[]Message qui dure X frames avant de disparaitre
- Description -Vous en rêviez? Sihn l'a fait. Finis, les prises de tête lors de vos cinématiques!
Le message qui disparait automatiquement et reste synchro avec les actions de vos cinématiques est enfin arrivé!
Ce script permet d'afficher un message (via la commande "Afficher un message") qui disparait au bout d'un certain nombre de frames.
Il suffit d'inclure dans le message en question \t[nb_de_frames] et le tour est joué!
- script -- Code: Tout sélectionner
#===============================================================================
# ■ Message qui dure X frames
#===============================================================================
# Auteur : Sihn
# Version : 1.3
#-------------------------------------------------------------------------------
# Permet d'afficher un message qui s'efface automatiquement au bout d'un
# certain temps.
#===============================================================================
# Utilisation:
#
# Créé un nouveau message contenant \T[X]
# Remplacez X par un nombre de votre choix. Ce nombre sera la durée d'affichage
# du message en frames. (20 frames vaut environ 1 secondes)
# Bien entendu, les messages ne contenant pas cette commandes seront "normaux".
# Note: Durant un message temporaire, les commandes de l'événement affichant le
# message ne seront pas bloquées. (comme si vous utilisiez une commande "Jouée
# une animation", par exemple.)
# Cependant, vous pouvez faire en sorte que les commandes restent bloquées
# comme avant en remplaçant "false" ci-dessous par "true".
TIME_MESSAGE_STOP = false
#===============================================================================
class Game_Temp
attr_accessor :time_showing
alias time_showing_initialize initialize
def initialize
@time_showing = 0
time_showing_initialize
end
end
class Window_Message
def refresh
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
x = y = 0
@cursor_width = 0
if $game_temp.choice_start == 0
x = 8
end
if $game_temp.message_text != nil
text = $game_temp.message_text
begin
last_text = text.clone
text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
end until text == last_text
text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
end
text.gsub!(/\\\\/) { "\000" }
text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
text.gsub!(/\\[Gg]/) { "\002" }
text.gsub!(/\\[Tt]\[([0-9]+)\]/) { "\003[#{$1}]" }
while ((c = text.slice!(/./m)) != nil)
if c == "\000"
c = "\\"
end
if c == "\001"
text.sub!(/\[([0-9]+)\]/, "")
color = $1.to_i
if color >= 0 and color <= 7
self.contents.font.color = text_color(color)
end
next
end
if c == "\002"
if @gold_window == nil
@gold_window = Window_Gold.new
@gold_window.x = 560 - @gold_window.width
if $game_temp.in_battle
@gold_window.y = 192
else
@gold_window.y = self.y >= 128 ? 32 : 384
end
@gold_window.opacity = self.opacity
@gold_window.back_opacity = self.back_opacity
end
next
end
if c == "\003"
text.sub!(/\[([0-9]+)\]/, "")
$game_temp.time_showing = $1.to_i * 2
$game_temp.time_showing *= -1 if $game_temp.time_showing < 0
next
end
if c == "\n"
if y >= $game_temp.choice_start
@cursor_width = [@cursor_width, x].max
end
y += 1
x = 0
if y >= $game_temp.choice_start
x = 8
end
next
end
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
x += self.contents.text_size(c).width
end
end
if $game_temp.choice_max > 0
@item_max = $game_temp.choice_max
self.active = true
self.index = 0
end
if $game_temp.num_input_variable_id > 0
digits_max = $game_temp.num_input_digits_max
number = $game_variables[$game_temp.num_input_variable_id]
@input_number_window = Window_InputNumber.new(digits_max)
@input_number_window.number = number
@input_number_window.x = self.x + 8
@input_number_window.y = self.y + $game_temp.num_input_start * 32
end
end
def update
super
if @fade_in
self.contents_opacity += 24
if @input_number_window != nil
@input_number_window.contents_opacity += 24
end
if self.contents_opacity == 255
@fade_in = false
end
return
end
if @input_number_window != nil
@input_number_window.update
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
$game_variables[$game_temp.num_input_variable_id] =
@input_number_window.number
$game_map.need_refresh = true
@input_number_window.dispose
@input_number_window = nil
terminate_message
end
return
end
if @contents_showing
if $game_temp.choice_max == 0
self.pause = $game_temp.time_showing == 0
end
if Input.trigger?(Input::B)
if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
$game_system.se_play($data_system.cancel_se)
$game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
terminate_message
end
end
if $game_temp.time_showing == 0 or $game_temp.choice_max > 0
if Input.trigger?(Input::C)
if $game_temp.choice_max > 0
$game_system.se_play($data_system.decision_se)
$game_temp.choice_proc.call(self.index)
end
terminate_message
end
else
$game_temp.time_showing -= 1
if $game_temp.time_showing == 0
if $game_temp.choice_max > 0
$game_system.se_play($data_system.decision_se)
$game_temp.choice_proc.call(self.index)
end
terminate_message
end
end
return
end
if @fade_out == false and $game_temp.message_text != nil
@contents_showing = true
$game_temp.message_window_showing = true
reset_window
refresh
Graphics.frame_reset
self.visible = true
self.contents_opacity = 0
if @input_number_window != nil
@input_number_window.contents_opacity = 0
end
@fade_in = true
return
end
if self.visible
@fade_out = true
self.opacity -= 48
if self.opacity == 0
self.visible = false
@fade_out = false
$game_temp.message_window_showing = false
end
return
end
end
end
class Interpreter
alias message_waiting_update update
def update
if $game_temp.time_showing != 0 and
$game_temp.choice_cancel_type == 0 and
$game_temp.num_input_variable_id == 0 and
not TIME_MESSAGE_STOP
@message_waiting = false
end
message_waiting_update
end
end
- Mode d'emploi -Note: un résumé du mode d'emploi se trouve au début du script.
Tout d'abord, copier-coller ce script au dessus de Main, et nommez-le comme bon vous semble.
Ensuite, créé un message via la commande "Afficher un message", et dans ce message, incluez ceci: \t[nb_de_frames] en remplaçant nb_de_frames par le nombre de frames durant lesquelles le messages doit rester affichés.
Par exemple: "\t[40]Votre message" affichera "Votre message" durant 40 frames (soit 2 secondes environs).
Attention!
Lorsque vous faites un message temporaire, votre héros ne peut pas bouger (comme avec les messages normaux), mais l'événement, lui, continue son cours! (comme il le ferait avec une commande "Afficher une animation", par exemple)
Mais vous pouvez changer cela au début du script, à la ligne 21. Remplacez false par true.
Vous l'aurez remarqué, aucune commande "Insérer un script" n'est nécessaire.
Voila, j'espère que ce script vous sera utile! N'hésitez pas à m'avertir en cas de bug!