1 YEA - Yanfly Message System Seg 26 Nov 2012, 17:46
Duran
Membro de Honra
Yanfly Engine Ace - Yanfly Message System
link original: aqui
Introdução:
Segue um script editor de mensagens, com diversos recursos, como colocar nome nas mensagens e talz. Mais instruções no script, que foi testado e aprovado por mim. :)
Screenshot:
Outras screens no blog do Autor.
Código:
- Código:
#==============================================================================
#
# ▼ Yanfly Engine Ace - Ace Message System v1.01
# -- Last Updated: 2012.01.04
# -- Level: Normal
# -- Requires: n/a
#
# Versão Traduzida por Fallen
# Contato: http://www.santuariorpgmaker.com/forum/index.php?action=profile;area=forumprofile
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-MessageSystem"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.04 - Bug Fixed: \ic tag was \ii. No longer the case.
# - Added: Scroll Text window now uses message window font.
# 2011.12.31 - Started Script and Finished.
#
# 10.01.2012 - Tradução Iniciado e Concluída.
#==============================================================================
# ▼ Introdução (adaptada) - Yanfly
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# É de se notar que o RPG Maker VX Ace melhorou significativamente no que se refere a mensagem, mas
# com certeza não dói adicionar mais algumas possibilidades ao mesmo, como janelas de nome, códigos de texto
# para adicionar ícones, nome de itens/armas e armaduras nas mensagens de um jeito dinânimo e belo.
# Este script também permite ao usuário, ajustar o tamanho da janela de mensagem durante o jogo. adicionar ou modificar
# a fonte, e dar a possibilidade de avançar o texto.
#
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Para instalar este script abra o editor, copie o código e cole acima do main
# e abaixo de (scripts adicionais)
#
# -----------------------------------------------------------------------------
# Message Window text Codes - Para serem colocados na janela de mensagem.
# -----------------------------------------------------------------------------
# Default: Effect:
# \v[x] - Escreve o valor da variável de Id [x] ,
# \n[x] - Escreve o nome do personagem (Actor) de Id [x]
# \p[x] - Escreve o nome do membro de ID X do grupo.
# \g - Escreve o nome da moeda corrente.
# \c[x] - Muda o cor do texto para ID [x] referente a cor na Windoskin.
# \i[x] - Exibe o ícone de id x na janela de mensagens.
# \{ - Aumenta o tamanho do texto por 8 pontos.
# \} - Diminue o tamanho do texto por 8 pontos.
# \$ - Abre a Janela de Dinheiro..
# \. - Espera 15 frames (1/4 de segundo).
# \| - Espera 60 frames (1 segundo).
# \! - Espera até alguma tecla ser pressionada.
# \> - O Texto seguinte vai surgir instantaneamente.
# \< - O Texto seguinte não surge mais instantaneamente.
# \^ - Pula a próxima mensagem.
# \\ - Escreve "\" na janela.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Wait: Effect:
# \w[x] - Espera x frames (60 frames = 1 segundo). Apenas na janela de mensagens.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# NameWindow: Effect:
# \n<x> - Cria uma janela de nome onde x é o texto exibido. Lado esquerdo. *Note
# \nc<x> - Cria uma janela de nome onde x é o texto exibido Centrado. *Note
# \nr<x> - Cria uma janela de nome onde x é o texto exibido. Lado direito. *Note
#
# *NotA: Funciona apenas nas janelas de mensagem.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Position: Effect:
# \px[x] - Muda a coordenada X do texto para o valor x. *Note
# \py[x] - Muda a coordenada Y do texto para o valor x. *Note
#
# *NotA: Funciona apenas nas janelas de mensagem.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Outline: Effect:
# \oc[x] - Muda a cor das bordas para x.
# \oo[x] - Muda a opacidade das bordas para x.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Font: Effect:
# \fr - Reseta todas as mudanças de fonte.
# \fz[x] - muda o tamanho da fonte para o valor x.
# \fn[x] - Muda o nome da fonte para x (X = nome da fonte referente a substituição.).
# \fb - Ativa o negrito.
# \fi - Ativa o itálico.
# \fo - Ativa a borda.
# \fs - Ativa a sombra de texto.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Actor: Effect:
# \af[x] -Mostra face do actor de Id x. *Note
# \ac[x] - Mostra o nome da classe do Actor de id x. *Note
# \as[x] - Mostre o nome da subclasse do Actor de id X. Requer: Class System. *Note
# \an[x] - Exibe o apelido (nickname) do actor de id X. *Note
#
# *Nota: Se x é 0 ou negativo, Mostrará a face referente a:.
# 0 - Líder
# -1 - 1º Membro não líder.
# -2 - 2º Membro não líder.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Names: Effect:
# \nc[x] - Exibe o nome da classe de Id x.
# \ni[x] - Exibe o nome do Item de id x.
# \nw[x] - Exibe o nome da Arma de Id .
# \na[x] - Exibe o nome da Armadura de Id x.
# \ns[x] - Exibe o nome da Habilidade de Id x.
# \nt[x] - Exibe o nome do Estado de Id x.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Icon Names: Effect:
# \ic[x] - Exibe o nome da Classe de Id x incluindo Ícone. *
# \ii[x] - Exibe o nome do item de Id x incluindo Ícone..
# \iw[x] - Exibe o nome da arma de Id x incluindo Ícone.
# \ia[x] - Exibe o nome armadura de Id x incluindo Ícone.
# \is[x] - Exibe o nome da Habilidade de Id x incluindo Ícone.
# \it[x] - Exibe o nome do Estado de Id x incluindo Ícone.
#
# *Nota: Requer YEA - Class System
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# E Foram esses todos os códigos de texto adicionados com o uso do script.
# Mantenha em mente alguns desses códigos apenas funcionarão nas Janela de Mensagens
# De qualquer forma, eles são muito úteis para textos de "Ajuda" para Descrições
# Biografia dos personagens e Etc.
#
#==============================================================================
# ▼ Compatibilidade
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Este script é apenas para RPG Maker VX Ace . Não é compatível com qualquer outra
# Engine sem ajustes.
#
#==============================================================================
module YEA
module MESSAGE
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Configurações Gerais da Janela de Mensagem
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# A seguir você pode modificar as configurações básicas e isso
# Irá personalizar algumas funcionalidades ao seu gosto. Ajuste como desejar.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Este botão ao ser pressionado irá passar o texto.
# a frente. Deve ser pressionado para o efeito ocorrer. Quando pressionado ele
# acelera as mensagens, mas se houver algum código de pausa ele continuará a esperar.
# Quando pressionado novamente, vai direto para próxima página de texto.
TEXT_SKIP = :A # Input::A Botão Shift do Teclado.
# Essa variável ajusta o número de linhas visiveis na janela de mensagens
# Se não deseja utilizar este recurso, mude o valor da constante para 0.
# Se o valor da linha for 0 ou menor, O valor será automaticamente mudado
# Para o padrão de 4 linhas.
VARIABLE_ROWS = 21
# Essa variável ajusta a largura da caixa de mensagens mostrada.
# Se não deseja utilizar este recurso mude a constante para 0.
# Se o valor da largura for 0 ou menor, se ajustará a largura padrão da janela.
VARIABLE_WIDTH = 22
# Esse valor é espaço que a janela vai começar a linha onde o texto será exibido
# Sempre que uma face for usada. Padrão: 112
FACE_INDENT_X = 112
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Configurações da Janela de Nome -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# A Janela de nome é a pequena caixa que aparece acima da janela padrão.
# É utlizada para exibir qualquer texto acima da janela de mensagens. como
# o próprio título sugere, um nome.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
NAME_WINDOW_X_BUFFER = -20 # Buffer x | Posição X da janela de nome.
NAME_WINDOW_Y_BUFFER = 0 # Buffer y | Posição Y da janela de nome
NAME_WINDOW_PADDING = 20 # Espaço adicionado a horizontal.
NAME_WINDOW_OPACITY = 255 # Opacidade da janela de nome
NAME_WINDOW_COLOUR = 6 # Cor do texto usado para nomes.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Configuração das Fontes -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# O Sistema de mensagem do Ace separa as fontes de maneira diferenciada para
# o uso in-game. Ajuste as configurações, e defina as suas fontes de jogo.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Essas constantes definem que fonte é usada. Se a primeira fonte não existe
# No computador do jogador, automaticamente a próxima fonte será
# utilizada no lugar da anterior.
MESSAGE_WINDOW_FONT_NAME = ["Arial", "Comic Sans MS", "Courier New"]
# Aqui se ajusta as configurações da maneira com a qual as fontes serão exibidas.
# Incluindo o tamanho padrão da fonte, se o texto será negrito por padrão,
# itáligo, terá bordas ou sombreado por padrão.
MESSAGE_WINDOW_FONT_SIZE = 20 # Tamanho da fonte.
MESSAGE_WINDOW_FONT_BOLD = false # Negrito por Padrão?
MESSAGE_WINDOW_FONT_ITALIC = false # Itálico por padrão?
MESSAGE_WINDOW_FONT_OUTLINE = true # borda por padrão?
MESSAGE_WINDOW_FONT_SHADOW = true # Sombra por padrão?
end # MESSAGE
end # YEA
#==============================================================================
# ▼ Editar qualquer coisa a partir deste ponto pode causar, alto dano ao computador
# incontinência, explosão da cabeça do usuário, coma, morte, Mau hálito
# Então edite por seu próprio risco.
#==============================================================================
#==============================================================================
# ■ 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
#==============================================================================
#
# ▼ End of File
#
#==============================================================================
Créditos:
Yanfly - Por criar o script.
Fallen - Por traduzir o Script