Lune Custom Window

9 Respostas   2521 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Tópico criado em: 04/01/2014 às 04:39 - Última modificação por Raizen em 04/01/2014 às 04:44

Lune Custom Window

Compativel com: RMVXAce
Compatibilidade :boa
Facilidade de uso: difícil
Lag gerado: baixo
Condições de Uso
  Pode ser modificado, e divulgado em outros lugares, mas peço que não retire os créditos.

Para que serve o script

O script permite que você mesmo sem conhecimento algum em scripts, possa criar janelas para o seu jogo, basicamente você pode criar uma tela e colocar textos, variáveis, entre outros, dando um suporte muito grande e uma customização extremamente elevada para o script, leia atentamente as instruções, toda a liberdade que é dada no script requer um cuidado extra para montar a sua própria janela como desejar.

O número de janelas, variáveis e todos objetos dentro da sua tela é ilimitado, como também é ilimitado o número de janelas que pretende criar.

Funções pre-configuradas no script,

  • Adicionar variáveis
  • Adicionar faces
  • Adicionar characters
  • Adicionar imagens
  • Adicionar textos
  • Adicionar sub-janelas
  • Mudar nome da fonte, e configurações da fonte.
Script.

Código: [Selecionar]
module Lune_Custom_Config
Janela = []


#=======================================================
#         Lune Custom Window
# Autor: Raizen
# Comunidade: www.centrorpg.com
# O script permite que uma janela seja criada seguindo
# as especificações do usuário, assim mesmo sem conhecimento
# algum em scripts, é possível criar uma tela para auxiliar
# nos sistemas por eventos.
#=======================================================

# Como o script permite infinitas Janelas a serem criadas, uma variável será
# quem irá decidir qual janela aparecerá e ela é essa.
# $lune_custom_scene
# para escolher a janela 3 por exemplo basta,
# Chamar Script: $lune_custom_scene = 3

# Para ativar a Janela personalizada
# Chamar Script: SceneManager.call(Lune_Custom_Scene)


# é possível criar inúmeras janelas seguindo o template,
# leia atentamente.

# IMPORTANTE:

# Para qualquer campo em branco, deixe da seguinte maneira "",
# Exemplo, não tenho imagens para colocar então...
# 'Pictures' => "",

# Imagens na pasta Graphics/Custom_Win, será necessário criar esse diretório.
#===========================================================================
#---------------------------------------------------------------------------
#  Janela 0, Essa janela cria absolutamente nada :) (descrição da sua janela)
#---------------------------------------------------------------------------
#===========================================================================


Janela[0] = { #Coloque o ID da janela a sua escolha, Janela[id]

# tempo de Fadein, exemplo 'Fadein' => 10,
'Fadein' => 10,

# Nome da fonte, "" para pegar a fonte padrão, Ex 'FontName' => "Comic Sans MS",
'FontName' => "",

# Som a ser tocado ao sair da tela , Ex: 'Sound' => "Cancel2",
'Sound' => "Cancel2",

# Janelas criadas, seguindo o seguinte template,
# 'Windows' => [[posição x, posição y, largura, altura]],
# é possível colocar um número ilimitado de janelas, basta colocar virgula
# e abrir outro colchete, exemplo com 3 janelas,
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100], [1, 2, 3, 4]],
# Depois da virgula pode pular linhas, ex:
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100],
#[1, 2, 3, 4]],
'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100]],

# Textos inseridos na janela, seguindo o template,
# 'Texts' => [["Texto", pos x, pos y, tamanho fonte (0 para padrão, 20), cor da fonte]],
# A cor da fonte é um número que é baseado na windowskin, veja as cores na windowskin.
# Assim como as janelas o procedimento é o mesmo para múltiplos textos.
'Texts' => [["Janela de Relacionamento", 0, 0, 0, 20],["Personagem1", 0, 200, 0, 0]],

# Variáveis inseridos na janela, seguindo o template,
# 'Variables' => [[numero da variavel, pos x, pos y, tamanho fonte(0 = padrão), cor fonte]],
# Ilimitadas variáveis, seguindo a mesma ideia dos demais.
'Variables' => [[1, 50, 70, 0, 1],[2, 50, 270, 20, 21]],

# Imagens inseridas na janela, seguindo o template,
# 'Pictures' => [["NomedaImagem", pos x, pos y, imagem superior ou inferior? true = superior, false = inferior]],
'Pictures' => [["ArrowDown", 200, 200, true],
["ArrowUp", 300, 200, true],
["ArrowLeft", 400, 200, true],
["ArrowRight", 300, 300, true]],

# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party'(escolher se o id eh do ator ou da party), id do personagem, pos x, pos y]],
'Faces' => [['actor', 2, 200, 200], ['party', 0, 300, 300]],
# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party', id do personagem, pos x, pos y]],
'Characters' => [['actor', 2, 300, 400], ['party', 3, 200, 300]],

}

#===========================================================================
#---------------------------------------------------------------------------
#===========================================================================



#===========================================================================
#---------------------------------------------------------------------------
#  Janela 1, Essa janela tem o sistema de namoro
#  Template reduzido
#---------------------------------------------------------------------------
#===========================================================================


Janela[1] = {
'Fadein' => 10,
'FontName' => "",
'Sound' => "Cancel2",
#[x, y, largura, altura]
'Windows' => [[0, 0, 272, 208],
[272, 0, 272, 208],
[0, 208, 272, 208],
[272, 208, 272, 208]],
#["Texto", x, y, tamanho fonte, cor fonte]
'Texts' => [["Janela de Relacionamento", 120, 0, 0, 30],
["Natty", 0, 30, 0, 0],
["May", 272, 30, 0, 0],
["KaHh", 0, 238, 0, 0],
["Pretty", 272, 238, 0, 0],
["Relacionamento", 100, 50, 0, 0],
["Relacionamento", 372, 50, 0, 0],
["Relacionamento", 100, 258, 0, 0],
["Relacionamento", 372, 258, 0, 0],
["/ 100", 140, 80, 0, 0],
["/ 100", 412, 80, 0, 0],
["/ 100", 140, 288, 0, 0],
["/ 100", 412, 288, 0, 0],
],
#[num variavel, x, y, tamanho fonte, cor fonte]
'Variables' => [
[1, 100, 80, 0, 20],
[2, 372, 80, 0, 20],
[3, 100, 288, 0, 20],
[4, 372, 288, 0, 20],],
#["NomeImagem", x, y, Imagemsuperior?]
'Pictures' => "",
# ['actor' ou 'party', id, x, y]
'Faces' => [['actor', 2, 0, 50],
['actor', 6, 0, 258],
['actor', 8, 272, 50],
['actor', 9, 272, 258],],
# ['actor' ou 'party', id, x, y]
'Characters' => "",

}


#===========================================================================
#---------------------------------------------------------------------------
#===========================================================================


end
#==============================================================================
#              TEMPLATE, NÃO MODIFIQUE, UTILIZE CASO SUA
#              JANELA PAROU DE FUNCIONAR.

=begin

#===========================================================================
#---------------------------------------------------------------------------
#  Janela 0, Essa janela cria absolutamente nada :) (descrição da sua janela)
#---------------------------------------------------------------------------
#===========================================================================

Janela[0] = { #Coloque o ID da janela a sua escolha, Janela[id]

# tempo de Fadein, exemplo 'Fadein' => 10,
'Fadein' => 10,

# Nome da fonte, "" para pegar a fonte padrão, Ex 'FontName' => "Comic Sans MS",
'FontName' => "",

# Som a ser tocado ao sair da tela , Ex: 'Sound' => "Cancel2",
'Sound' => "Cancel2",

# Janelas criadas, seguindo o seguinte template,
# 'Windows' => [[posição x, posição y, largura, altura]],
# é possível colocar um número ilimitado de janelas, basta colocar virgula
# e abrir outro colchete, exemplo com 3 janelas,
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100], [1, 2, 3, 4]],
# Depois da virgula pode pular linhas, ex:
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100],
#[1, 2, 3, 4]],
'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100]],

# Textos inseridos na janela, seguindo o template,
# 'Texts' => [["Texto", pos x, pos y, tamanho fonte (0 para padrão, 20), cor da fonte]],
# A cor da fonte é um número que é baseado na windowskin, veja as cores na windowskin.
# Assim como as janelas o procedimento é o mesmo para múltiplos textos.
'Texts' => [["Janela de Relacionamento", 0, 0, 0, 20],["Personagem1", 0, 200, 0, 0]],

# Variáveis inseridos na janela, seguindo o template,
# 'Variables' => [[numero da variavel, pos x, pos y, tamanho fonte(0 = padrão), cor fonte]],
# Ilimitadas variáveis, seguindo a mesma ideia dos demais.
'Variables' => [[1, 50, 70, 0, 1],[2, 50, 270, 20, 21]],

# Imagens inseridas na janela, seguindo o template,
# 'Pictures' => [["NomedaImagem", pos x, pos y, imagem superior ou inferior? true = superior, false = inferior]],
'Pictures' => [["ArrowDown", 200, 200, true],
["ArrowUp", 300, 200, true],
["ArrowLeft", 400, 200, true],
["ArrowRight", 300, 300, true]],

# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party'(escolher se o id eh do ator ou da party), id do personagem, pos x, pos y]],
'Faces' => [['actor', 2, 200, 200], ['party', 0, 300, 300]],
# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party', id do personagem, pos x, pos y]],
'Characters' => [['actor', 2, 300, 400], ['party', 3, 200, 300]],

}
#===========================================================================
#---------------------------------------------------------------------------
#===========================================================================


=end



#==============================================================================
#==============================================================================

#                  AQUI COMEÇA O SCRIPT

#==============================================================================
#==============================================================================
$lune_custom_scene = 0


#==============================================================================
# ** Lune_Custom_Scene
#------------------------------------------------------------------------------
#  Esta classe executa os processos de imagem pela sua janela personalizada
#==============================================================================

class Lune_Custom_Scene < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def initialize
    create_windows
    @fadeout = false
    @speed = Lune_Custom_Config::Janela[$lune_custom_scene]['Fadein']
    super
  end
  #--------------------------------------------------------------------------
  # * Atualização do processo
  #--------------------------------------------------------------------------
  def update
    super
    @main_window.contents_opacity >= 255 ? continue_update : fadein   
  end
  #--------------------------------------------------------------------------
  # * Efeito de transição de tela
  #--------------------------------------------------------------------------
  def fadein
    @main_window.contents_opacity += @speed
    @pics.each {|pic| pic.opacity += @speed} if @pics
    @windows.each {|pic| pic.opacity += @speed} if @windows
  end
  #--------------------------------------------------------------------------
  # * Criação das Janelas
  #--------------------------------------------------------------------------
  def create_windows
    win = Lune_Custom_Config::Janela[$lune_custom_scene]['Windows']
    @main_window = Lune_Custom_Window.new
    @main_window.opacity = 0
    @main_window.contents_opacity = 0
    @main_window.z = 50
    return if win.empty?
    @windows = Array.new
    for n in 0...win.size
      @windows[n] = Window_Base.new(win[n][0], win[n][1], win[n][2], win[n][3])
      @windows[n].z = 30
      @windows[n].opacity = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Atualização pós
  #--------------------------------------------------------------------------
  def continue_update
    if Input.trigger?(:B)
        RPG::SE.new(Lune_Custom_Config::Janela[$lune_custom_scene]['Sound']).play
        return_scene
    end
  end
  #--------------------------------------------------------------------------
  # * Finalização do processo
  #--------------------------------------------------------------------------
  def terminate
    @pics.each {|pic| pic.bitmap.dispose; pic.dispose} if @pics
    @windows.each {|pic| pic.dispose} if @windows
    super
  end
end

#==============================================================================
# ** Lune_Custom_Window
#------------------------------------------------------------------------------
#  Esta janela desenha de acordo com o que é configurado pelo usuário.
#==============================================================================

class Lune_Custom_Window < Window_Base
include Lune_Custom_Config
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, Graphics.width, Graphics.height)
    @var = $lune_custom_scene
    refresh
  end
  #--------------------------------------------------------------------------
  # * Atualização de imagens
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    create_variables
    create_texts
    create_pictures
    create_faces
    create_characters
  end
  #--------------------------------------------------------------------------
  # * Criação das variáveis
  #--------------------------------------------------------------------------
  def create_variables
  win = Janela[@var]['Variables']
    return if win.empty?
    for n in 0...win.size
      contents.font.size = win[n][3] unless win[n][3] == 0
      contents.font.color = text_color(win[n][4])
      contents.font.name = Janela[@var]['FontName'] unless Janela[@var]['FontName'].empty?
      draw_text_ex(win[n][1], win[n][2], $game_variables[win[n][0]].to_s)
      reset_font_settings
    end
  end
  #--------------------------------------------------------------------------
  # * Criação dos Textos
  #--------------------------------------------------------------------------
  def create_texts
  win = Janela[@var]['Texts']
    return if win.empty?
    for n in 0...win.size
      contents.font.size = win[n][3] unless win[n][3] == 0
      contents.font.color = text_color(win[n][4])
      contents.font.name = Janela[@var]['FontName'] unless Janela[@var]['FontName'].empty?
      draw_text_ex(win[n][1], win[n][2], win[n][0])
      reset_font_settings
    end
  end
  #--------------------------------------------------------------------------
  # * Renderização das Imagens
  #--------------------------------------------------------------------------
  def create_pictures
  win = Janela[@var]['Pictures']
    return if win.empty?
    @pics = Array.new
    for n in 0...win.size
      @pics[n] = Sprite.new
      @pics[n].bitmap = Cache.custom_win(win[n][0])
      win[n][3] == true ? @pics[n].z = 60 : @pics[n].z = 40
      @pics[n].x = win[n][1]
      @pics[n].y = win[n][2]
      @pics[n].opacity = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Renderização das Faces
  #--------------------------------------------------------------------------
  def create_faces
  win = Janela[@var]['Faces']
    return if win.empty?
    for n in 0...win.size
      win[n][0] == 'actor' ? act = $game_actors[win[n][1]] : act = $game_party.members[win[n][1]]
      draw_actor_face(act, win[n][2], win[n][3])
    end
  end
  #--------------------------------------------------------------------------
  # * Renderização dos Personagens
  #--------------------------------------------------------------------------
  def create_characters
  win = Janela[@var]['Characters']
    return if win.empty?
    for n in 0...win.size
      win[n][0] == 'actor' ? act = $game_actors[win[n][1]] : act = $game_party.members[win[n][1]]
      draw_character(act.character_name, act.character_index, win[n][2], win[n][3])
    end
  end
  #--------------------------------------------------------------------------
  # * Desenho do texto com caracteres de controle
  #     x    : coordenada X
  #     y    : coordenada Y
  #     text : string de texto
  #--------------------------------------------------------------------------
  def draw_text_ex(x, y, text)
    text = convert_escape_characters(text)
    pos = {x: x, y: y, new_x: x, height: calc_line_height(text)}
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
end


#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
#  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
# Para acelerar o carregamento e preservar memória, este módulo matém o
# objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
# pré-existentes quando mesmo Bitmap é requerido novamente.
#==============================================================================


module Cache
  #--------------------------------------------------------------------------
  # * Carregamento dos gráficos de animação
  #     filename : nome do arquivo
  #     hue      : informações da alteração de tonalidade
  #--------------------------------------------------------------------------
  def self.custom_win(filename)
    load_bitmap("Graphics/Custom_Win/", filename)
  end
end



Imagens
Exemplo de como chamei a tela a seguir.
Spoiler
[close]

Tela de namoro, foi feito para mostrar a maleabilidade do script.
Coloquei as meninas da comunidade, espero que não se importem  s2 :3
Spoiler
[close]

Download

Não necessário

Créditos e Avisos

 Raizen

Ludo

  • Veterano
  • *
  • Posts: 873
  • Ouros: 1227
  • Um homem não moldado pela dor, ainda é um menino
Resposta 1: 04/01/2014 às 10:15 - Última modificação por LuRocha em 04/01/2014 às 10:19

eu te amo Raizen
Um maravilhoso script, pelo menos pra mim que ainda não manjo nada de Script ficou 100% maleável e fácil de entender e editar.

eu tenho uma dúvida, e se eu não quiser que apareça janela alguma?? só texto e variáveis??

EDIT:
deixei zero nas janelas e funcionou legal, eu com certeza usarei este script em meus projetos, mas sem janelas de windowskin, muito obrigado
Clique e conheça o meu canal - Canal RPG Maker Zone

GDL

Resposta 2: 04/01/2014 às 10:28

Nice, que bom que tirou essa ideia do papel, Raizen. Vou usar também com certeza, até porque abre uma infinidade de possibilidades na hora de usar um menu ou sistema por eventos. Ah, o nível de usabilidade do script não está tão alto a ponto de merecer o difícil ali nas dificuldade haha



Brandt

Resposta 3: 04/01/2014 às 12:22

Nossa! Não é possível!

Parabéns Raizen! Mais um script excelente! Agora os scripters podem descansar um pouco! Realmente pode permitir que os que não sabem RGSS possam fazer suas próprias cenas, assim evitando aquela montanha de pedidos simples mas que consomem tempo...

Mais uma vez, parabéns, vou testar e dou um edit aqui.
~ Masked

Lima

Resposta 4: 04/01/2014 às 12:33

Vamos lá ver o que consigo fazer com este script!

Parabéns!

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 5: 04/01/2014 às 12:55

eu te amo Raizen
Um maravilhoso script, pelo menos pra mim que ainda não manjo nada de Script ficou 100% maleável e fácil de entender e editar.

eu tenho uma dúvida, e se eu não quiser que apareça janela alguma?? só texto e variáveis??

EDIT:
deixei zero nas janelas e funcionou legal, eu com certeza usarei este script em meus projetos, mas sem janelas de windowskin, muito obrigado
tb te amo s2, xD, enfim qualquer dúvida só mandar x).


Nice, que bom que tirou essa ideia do papel, Raizen. Vou usar também com certeza, até porque abre uma infinidade de possibilidades na hora de usar um menu ou sistema por eventos. Ah, o nível de usabilidade do script não está tão alto a ponto de merecer o difícil ali nas dificuldade haha
Ah eu não sei hsuAHS, é difícil saber quando está fácil ou difícil já que eu mexo com scripts, bom vlws manolo eu modifico lá a dificuldade k.

Nossa! Não é possível!

Parabéns Raizen! Mais um script excelente! Agora os scripters podem descansar um pouco! Realmente pode permitir que os que não sabem RGSS possam fazer suas próprias cenas, assim evitando aquela montanha de pedidos simples mas que consomem tempo...

Mais uma vez, parabéns, vou testar e dou um edit aqui.

Veremos shuAHSu, dá pra fazer algumas coisas legais, ainda é meio limitado o script xD, mas as coisas simples podem ser feitas aqui sem problema.

Vamos lá ver o que consigo fazer com este script!

Parabéns!
Qualquer dúvida e talz, só mandar.

Ludo

  • Veterano
  • *
  • Posts: 873
  • Ouros: 1227
  • Um homem não moldado pela dor, ainda é um menino
Resposta 6: 05/01/2014 às 09:28

Raizen, estou personalizando o script, eu gostaria de poder atualiza-lo junto com o resto do jogo, para que funcione tipo uma HUD que exibe dados de variáveis tipo HP, MP mas não atualiza, entra em uma scene e para todo o jogo e qualquer ação que estiver acontecendo. por exemplo, coloquei um evento paralelo para adicionar 1 a variável mas ela nao muda durante a exibição
Clique e conheça o meu canal - Canal RPG Maker Zone

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 7: 05/01/2014 às 13:24 - Última modificação por Raizen em 05/01/2014 às 13:48

Ah isso é.. algo que tenho que ver para atualizar, vou modificar o script já já e te aviso, ai eu coloco essa função, ai no caso basta manter toda a parte acima do aqui começa o script intacto pra não perder suas config.


Edit: LuRocha, fiz um que atualiza a janela, então processos paralelos devem funcionar normalmente,
Código: [Selecionar]
module Lune_Custom_Config
Janela = []


#=======================================================
#         Lune Custom Window
# Autor: Raizen
# Comunidade: www.centrorpg.com
# O script permite que uma janela seja criada seguindo
# as especificações do usuário, assim mesmo sem conhecimento
# algum em scripts, é possível criar uma tela para auxiliar
# nos sistemas por eventos.
#=======================================================

# Como o script permite infinitas Janelas a serem criadas, uma variável será
# quem irá decidir qual janela aparecerá e ela é essa.
# $lune_custom_scene
# para escolher a janela 3 por exemplo basta,
# Chamar Script: $lune_custom_scene = 3

# Para ativar a Janela personalizada
# Chamar Script: SceneManager.call(Lune_Custom_Scene)


# é possível criar inúmeras janelas seguindo o template,
# leia atentamente.

# IMPORTANTE:

# Para qualquer campo em branco, deixe da seguinte maneira "",
# Exemplo, não tenho imagens para colocar então...
# 'Pictures' => "",

#===========================================================================
#---------------------------------------------------------------------------
#  Janela 0, Essa janela cria absolutamente nada :) (descrição da sua janela)
#---------------------------------------------------------------------------
#===========================================================================


Janela[0] = { #Coloque o ID da janela a sua escolha, Janela[id]

# tempo de Fadein, exemplo 'Fadein' => 10,
'Fadein' => 10,

# Nome da fonte, "" para pegar a fonte padrão, Ex 'FontName' => "Comic Sans MS",
'FontName' => "",

# Som a ser tocado ao sair da tela , Ex: 'Sound' => "Cancel2",
'Sound' => "Cancel2",

# Janelas criadas, seguindo o seguinte template,
# 'Windows' => [[posição x, posição y, largura, altura]],
# é possível colocar um número ilimitado de janelas, basta colocar virgula
# e abrir outro colchete, exemplo com 3 janelas,
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100], [1, 2, 3, 4]],
# Depois da virgula pode pular linhas, ex:
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100],
#[1, 2, 3, 4]],
'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100]],

# Textos inseridos na janela, seguindo o template,
# 'Texts' => [["Texto", pos x, pos y, tamanho fonte (0 para padrão, 20), cor da fonte]],
# A cor da fonte é um número que é baseado na windowskin, veja as cores na windowskin.
# Assim como as janelas o procedimento é o mesmo para múltiplos textos.
'Texts' => [["Janela de Relacionamento", 0, 0, 0, 20],["Personagem1", 0, 200, 0, 0]],

# Variáveis inseridos na janela, seguindo o template,
# 'Variables' => [[numero da variavel, pos x, pos y, tamanho fonte(0 = padrão), cor fonte]],
# Ilimitadas variáveis, seguindo a mesma ideia dos demais.
'Variables' => [[1, 50, 70, 0, 1],[2, 50, 270, 20, 21]],

# Imagens inseridas na janela, seguindo o template,
# 'Pictures' => [["NomedaImagem", pos x, pos y, imagem superior ou inferior? true = superior, false = inferior]],
'Pictures' => [["ArrowDown", 200, 200, true],
["ArrowUp", 300, 200, true],
["ArrowLeft", 400, 200, true],
["ArrowRight", 300, 300, true]],

# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party'(escolher se o id eh do ator ou da party), id do personagem, pos x, pos y]],
'Faces' => [['actor', 2, 200, 200], ['party', 0, 300, 300]],
# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party', id do personagem, pos x, pos y]],
'Characters' => [['actor', 2, 300, 400], ['party', 3, 200, 300]],

}

#===========================================================================
#---------------------------------------------------------------------------
#===========================================================================



#===========================================================================
#---------------------------------------------------------------------------
#  Janela 1, Essa janela tem o sistema de namoro
#  Template reduzido
#---------------------------------------------------------------------------
#===========================================================================


Janela[1] = {
'Fadein' => 10,
'FontName' => "",
'Sound' => "Cancel2",
#[x, y, largura, altura]
'Windows' => [[0, 0, 272, 208],
[272, 0, 272, 208],
[0, 208, 272, 208],
[272, 208, 272, 208]],
#["Texto", x, y, tamanho fonte, cor fonte]
'Texts' => [["Janela de Relacionamento", 120, 0, 0, 30],
["Natty", 0, 30, 0, 0],
["May", 272, 30, 0, 0],
["KaHh", 0, 238, 0, 0],
["Pretty", 272, 238, 0, 0],
["Relacionamento", 100, 50, 0, 0],
["Relacionamento", 372, 50, 0, 0],
["Relacionamento", 100, 258, 0, 0],
["Relacionamento", 372, 258, 0, 0],
["/ 100", 140, 80, 0, 0],
["/ 100", 412, 80, 0, 0],
["/ 100", 140, 288, 0, 0],
["/ 100", 412, 288, 0, 0],
],
#[num variavel, x, y, tamanho fonte, cor fonte]
'Variables' => [
[1, 100, 80, 0, 20],
[2, 372, 80, 0, 20],
[3, 100, 288, 0, 20],
[4, 372, 288, 0, 20],],
#["NomeImagem", x, y, Imagemsuperior?]
'Pictures' => "",
# ['actor' ou 'party', id, x, y]
'Faces' => [['actor', 2, 0, 50],
['actor', 6, 0, 258],
['actor', 8, 272, 50],
['actor', 9, 272, 258],],
# ['actor' ou 'party', id, x, y]
'Characters' => "",

}


#===========================================================================
#---------------------------------------------------------------------------
#===========================================================================


end
#==============================================================================
#              TEMPLATE, NÃO MODIFIQUE, UTILIZE CASO SUA
#              JANELA PAROU DE FUNCIONAR.

=begin

#===========================================================================
#---------------------------------------------------------------------------
#  Janela 0, Essa janela cria absolutamente nada :) (descrição da sua janela)
#---------------------------------------------------------------------------
#===========================================================================

Janela[0] = { #Coloque o ID da janela a sua escolha, Janela[id]

# tempo de Fadein, exemplo 'Fadein' => 10,
'Fadein' => 10,

# Nome da fonte, "" para pegar a fonte padrão, Ex 'FontName' => "Comic Sans MS",
'FontName' => "",

# Som a ser tocado ao sair da tela , Ex: 'Sound' => "Cancel2",
'Sound' => "Cancel2",

# Janelas criadas, seguindo o seguinte template,
# 'Windows' => [[posição x, posição y, largura, altura]],
# é possível colocar um número ilimitado de janelas, basta colocar virgula
# e abrir outro colchete, exemplo com 3 janelas,
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100], [1, 2, 3, 4]],
# Depois da virgula pode pular linhas, ex:
# 'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100],
#[1, 2, 3, 4]],
'Windows' => [[0, 0, 100, 100],[100, 100, 100, 100]],

# Textos inseridos na janela, seguindo o template,
# 'Texts' => [["Texto", pos x, pos y, tamanho fonte (0 para padrão, 20), cor da fonte]],
# A cor da fonte é um número que é baseado na windowskin, veja as cores na windowskin.
# Assim como as janelas o procedimento é o mesmo para múltiplos textos.
'Texts' => [["Janela de Relacionamento", 0, 0, 0, 20],["Personagem1", 0, 200, 0, 0]],

# Variáveis inseridos na janela, seguindo o template,
# 'Variables' => [[numero da variavel, pos x, pos y, tamanho fonte(0 = padrão), cor fonte]],
# Ilimitadas variáveis, seguindo a mesma ideia dos demais.
'Variables' => [[1, 50, 70, 0, 1],[2, 50, 270, 20, 21]],

# Imagens inseridas na janela, seguindo o template,
# 'Pictures' => [["NomedaImagem", pos x, pos y, imagem superior ou inferior? true = superior, false = inferior]],
'Pictures' => [["ArrowDown", 200, 200, true],
["ArrowUp", 300, 200, true],
["ArrowLeft", 400, 200, true],
["ArrowRight", 300, 300, true]],

# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party'(escolher se o id eh do ator ou da party), id do personagem, pos x, pos y]],
'Faces' => [['actor', 2, 200, 200], ['party', 0, 300, 300]],
# Faces inseridas na janela, seguindo o template,
# 'Faces' => [['actor' ou 'party', id do personagem, pos x, pos y]],
'Characters' => [['actor', 2, 300, 400], ['party', 3, 200, 300]],

}
#===========================================================================
#---------------------------------------------------------------------------
#===========================================================================


=end



#==============================================================================
#==============================================================================

#                  AQUI COMEÇA O SCRIPT

#==============================================================================
#==============================================================================
$lune_custom_scene = 0


#==============================================================================
# ** Lune_Custom_Scene
#------------------------------------------------------------------------------
#  Esta classe executa os processos de imagem pela sua janela personalizada
#==============================================================================

class Lune_Custom_Scene < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def initialize
    $game_player.straighten
    $game_map.refresh
    create_windows
    @fadeout = false
    @speed = Lune_Custom_Config::Janela[$lune_custom_scene]['Fadein']
    super
  end
  #--------------------------------------------------------------------------
  # * Atualização do processo
  #--------------------------------------------------------------------------
  def update
    super
    $game_map.update(true)
    $game_timer.update
    @main_window.refresh if Graphics.frame_count % 3 == 1
    @main_window.contents_opacity >= 255 ? continue_update : fadein   
  end
  #--------------------------------------------------------------------------
  # * Efeito de transição de tela
  #--------------------------------------------------------------------------
  def fadein
    @main_window.contents_opacity += @speed
    @pics.each {|pic| pic.opacity += @speed} if @pics
    @windows.each {|pic| pic.opacity += @speed} if @windows
  end
  #--------------------------------------------------------------------------
  # * Criação das Janelas
  #--------------------------------------------------------------------------
  def create_windows
    win = Lune_Custom_Config::Janela[$lune_custom_scene]['Windows']
    @main_window = Lune_Custom_Window.new
    @main_window.opacity = 0
    @main_window.contents_opacity = 0
    @main_window.z = 50
    return if win.empty?
    @windows = Array.new
    for n in 0...win.size
      @windows[n] = Window_Base.new(win[n][0], win[n][1], win[n][2], win[n][3])
      @windows[n].z = 30
      @windows[n].opacity = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Atualização pós
  #--------------------------------------------------------------------------
  def continue_update
    if Input.trigger?(:B)
        RPG::SE.new(Lune_Custom_Config::Janela[$lune_custom_scene]['Sound']).play
        return_scene
    end
  end
  #--------------------------------------------------------------------------
  # * Finalização do processo
  #--------------------------------------------------------------------------
  def terminate
    @pics.each {|pic| pic.bitmap.dispose; pic.dispose} if @pics
    @windows.each {|pic| pic.dispose} if @windows
    super
  end
end

#==============================================================================
# ** Lune_Custom_Window
#------------------------------------------------------------------------------
#  Esta janela desenha de acordo com o que é configurado pelo usuário.
#==============================================================================

class Lune_Custom_Window < Window_Base
include Lune_Custom_Config
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, Graphics.width, Graphics.height)
    @var = $lune_custom_scene
    create_pictures
    refresh
  end
  #--------------------------------------------------------------------------
  # * Atualização de imagens
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    create_variables
    create_texts
    create_faces
    create_characters
  end
  #--------------------------------------------------------------------------
  # * Criação das variáveis
  #--------------------------------------------------------------------------
  def create_variables
  win = Janela[@var]['Variables']
    return if win.empty?
    for n in 0...win.size
      contents.font.size = win[n][3] unless win[n][3] == 0
      contents.font.color = text_color(win[n][4])
      contents.font.name = Janela[@var]['FontName'] unless Janela[@var]['FontName'].empty?
      draw_text_ex(win[n][1], win[n][2], $game_variables[win[n][0]].to_s)
      reset_font_settings
    end
  end
  #--------------------------------------------------------------------------
  # * Criação dos Textos
  #--------------------------------------------------------------------------
  def create_texts
  win = Janela[@var]['Texts']
    return if win.empty?
    for n in 0...win.size
      contents.font.size = win[n][3] unless win[n][3] == 0
      contents.font.color = text_color(win[n][4])
      contents.font.name = Janela[@var]['FontName'] unless Janela[@var]['FontName'].empty?
      draw_text_ex(win[n][1], win[n][2], win[n][0])
      reset_font_settings
    end
  end
  #--------------------------------------------------------------------------
  # * Renderização das Imagens
  #--------------------------------------------------------------------------
  def create_pictures
  win = Janela[@var]['Pictures']
    return if win.empty?
    @pics = Array.new
    for n in 0...win.size
      @pics[n] = Sprite.new
      @pics[n].bitmap = Cache.custom_win(win[n][0])
      win[n][3] == true ? @pics[n].z = 60 : @pics[n].z = 40
      @pics[n].x = win[n][1]
      @pics[n].y = win[n][2]
      @pics[n].opacity = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Renderização das Faces
  #--------------------------------------------------------------------------
  def create_faces
  win = Janela[@var]['Faces']
    return if win.empty?
    for n in 0...win.size
      win[n][0] == 'actor' ? act = $game_actors[win[n][1]] : act = $game_party.members[win[n][1]]
      draw_actor_face(act, win[n][2], win[n][3])
    end
  end
  #--------------------------------------------------------------------------
  # * Renderização dos Personagens
  #--------------------------------------------------------------------------
  def create_characters
  win = Janela[@var]['Characters']
    return if win.empty?
    for n in 0...win.size
      win[n][0] == 'actor' ? act = $game_actors[win[n][1]] : act = $game_party.members[win[n][1]]
      draw_character(act.character_name, act.character_index, win[n][2], win[n][3])
    end
  end
  #--------------------------------------------------------------------------
  # * Desenho do texto com caracteres de controle
  #     x    : coordenada X
  #     y    : coordenada Y
  #     text : string de texto
  #--------------------------------------------------------------------------
  def draw_text_ex(x, y, text)
    text = convert_escape_characters(text)
    pos = {x: x, y: y, new_x: x, height: calc_line_height(text)}
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
end


#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
#  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
# Para acelerar o carregamento e preservar memória, este módulo matém o
# objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
# pré-existentes quando mesmo Bitmap é requerido novamente.
#==============================================================================


module Cache
  #--------------------------------------------------------------------------
  # * Carregamento dos gráficos de animação
  #     filename : nome do arquivo
  #     hue      : informações da alteração de tonalidade
  #--------------------------------------------------------------------------
  def self.custom_win(filename)
    load_bitmap("Graphics/Custom_Win/", filename)
  end
end


Ludo

  • Veterano
  • *
  • Posts: 873
  • Ouros: 1227
  • Um homem não moldado pela dor, ainda é um menino
Resposta 8: 05/01/2014 às 20:40

Ah isso é.. algo que tenho que ver para atualizar, vou modificar o script já já e te aviso, ai eu coloco essa função, ai no caso basta manter toda a parte acima do aqui começa o script intacto pra não perder suas config.


Edit: LuRocha, fiz um que atualiza a janela, então processos paralelos devem funcionar normalmente,

Muito obrigado por se incomodar, testei e está atualizando, acho que pra maioria é melhor da primeira forma como foi apresentado para servir para criar um menu personalizado, mas no meu caso eu gostaria de usar uma série de variáveis sem as janelas sobre uma HUD por imagens durante um sistema de batalha por eventos, então ao invés de uma cena separada, fosse apenas exibição dos valores e strings e os eventos funcionando normalmente sem interrupções.
Clique e conheça o meu canal - Canal RPG Maker Zone

K.A.O.S

  • *
  • Posts: 261
  • Ouros: 177
Resposta 9: 05/01/2014 às 20:45

 Raizen e seus scripts que sempre visam uma boa customização!  :wow: Testei ele aqui rapidinho e gostei bastante do resultado, parabéns pelo ótimo script! Consigo até ver as diversas possibilidades ao usar ele, haha!
Clique nas imagens p/ visualizar as aulas