¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [VX Ace] Sistema de Mensajes Luna el Sáb Jul 28, 2012 12:26 am

Razor

avatar
Autor: Raizen
Versión: 1.1
Descripción: El script hace un sistema de mensajes mas interactivo entre los personajes agregando algunos complementos peculiares, como la opción de que el mensaje aparezca sobre un personaje o debajo de este.


Características



  • Plug 'n' Play
  • Fácil uso
  • No invade los limites de la pantalla [544x416, 640x480]
  • Configurable desde el modulo del script
  • No es necesario configurar cada mensaje



Capturas



Spoiler:







Instrucciones



  • Coloque el script arriba de Main y configure las opciones pertinentes en el modulo del script.
  • Para determinar si el juego fue completado o no basta activar el interruptor indicado en el modulo de las configuraciones.
  • El script esta en portugués pero traduje lo esencial [configuraciones en el modulo]
  • Esta imagen es opcional, la del "arrow" cursor que menciono en las instrucciones:


Script



Código:

module Lune_Message
#=======================================================
# Lune Message System
# Autor: Raizen [Creditos necesarios]
# Traduccion: JoseR.k. [Creditos no necesarios xD]
# Compatible con: RMVXAce
# El script permite mensajes en perspectiva con los eventos
# haciendo un modo mas interactivo de mensajes entre los
# npcs y personajes.

# Instrucciones

# Para utilizar el script basta con llamar el comando basico
# de mostrar mensaje, pudiendo contener una face o no.

# Antes de mostrar el mensaje configure el evento en el que quiere
# que aparezca el mensaje, y la posicion de este (encima o debajo)

# Tambien es posible escojer puntos diferentes de mensajes sin
# basarse en eventos

# Para configurar la posicion del mensaje haga lo siguiente:

# Llamar script: Lune_Message.config(p, id)

# Siendo "p" la posicion, esta puede ser:
# 1 = encima del personaje
# 0 = debajo del personaje

# ID la identidad del evento, 0 va a ser para que el mensaje se
# posicione en el heroe
# El tamano de la caja de texto es configurado automaticamente, pero tu
# debes escojer el espaciado de la fuente para que se ajuste mejora la fuente que
# estas usando. Esto lo configuras aqui:

Espacamento = 11 # 11 por defecto

# Tamano de los personajes (en pixeles) que aparecera en los mensajes, esto se hace
# para correjir el posicionamiento.

Tamanho = 48

# Nombre del archivo que servira de cursor para indicar el personaje
# que esta hablando.
# En caso de que no quieras que salga este cursor deja un espacio en blanco en
# las comillas, asi: imagem = ""
# La imagen debe estar en: Graphics/System
Imagem = "arrow"
# ========================================================================
# Aqui comienza el script, modifica si sabes lo que haces xD
# ========================================================================

def self.config(p, id)
posicao(p)
identificacao(id)
end

def self.posicao(p = nil)
@p = p unless p == nil
return @p
end

def self.identificacao(id = nil)
@id = id unless id == nil
return @id
end
end

#==============================================================================
# ** Janela auxiliar
#==============================================================================
class Lune_Window_Message < Window_Base
include Lune_Message
  def initialize(x, y, window_width, window_height)
    super(x, y, window_width, window_height)
    self.z = 199
    self.openness = 0
    @get_sprite = true
    @sprite_arrow = Sprite.new
    @sprite_arrow.bitmap = Cache.system(Imagem)
    if Lune_Message.identificacao == 0
      @lune_x = $game_player.screen_x
      @lune_y = $game_player.screen_y
      else
      @lune_x = $game_map.events[Lune_Message.identificacao].screen_x
      @lune_y = $game_map.events[Lune_Message.identificacao].screen_y
    end
    @sprite_arrow.x = @lune_x - 8
    @sprite_arrow.y = @lune_y - Lune_Message::Tamanho
  end
  def refresh
  if @get_sprite == true
  @sprite_arrow.y += 4
  @get_sprite = false
  else
  @sprite_arrow.y -= 4
  @get_sprite = true
  end
  end
  def openlune
    self.openness += 40
    self.openness <= 254 ? (return false) : (return true)
  end
  def closelune
    @sprite_arrow.opacity = 0 unless Imagem.nil?
    self.openness -= 40
    self.openness >= 1 ? (return false) : (return true)
  end
  def dispose
  @sprite_arrow.dispose
  super
  end
end

   
class Game_Message
# Retorna o valor da quantidade de linhas
  def get_lune_lines
    @lune_text_size = 0
    @texts.inject("") {|r, text| @lune_text_size += 1}
    return @lune_text_size
  end
# Retorna o valor do tamanho do texto.
  def get_lune_length
    @lune_length_size = 0
    @texts.inject("") {|r, text| @lune_length_size = text.size if text.size > @lune_length_size}
    return @lune_length_size
  end
 end
 
#==============================================================================
# ** Window_Message
#------------------------------------------------------------------------------
#  Esta janela de mensagem é usada para exibir textos.
#==============================================================================
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #--------------------------------------------------------------------------
class Window_Message < Window_Base
# aliasing
alias lune_message_update update 
  def initialize
    super(0, 0, Graphics.width, fitting_height(4))
    self.z = 200
    self.openness = 0
    create_all_windows
    create_back_bitmap
    create_back_sprite
    clear_instance_variables
  end
  def window_width
    $game_message.get_lune_length * Lune_Message::Espacamento + 15
  end
  #--------------------------------------------------------------------------
  # * Aquisição da altura da janela
  #--------------------------------------------------------------------------
  def window_height
    fitting_height($game_message.get_lune_lines)
  end
  def update(*args)
    lune_message_update(*args)
    @lune_message.refresh if @lune_message and Graphics.frame_count % 25 == 1
    self.opacity = 0
  end
  def fiber_main
    $game_message.visible = true
    update_background
    loop do
      process_all_text if $game_message.has_text?
      process_input
      $game_message.clear
      @gold_window.close
      Fiber.yield
      break unless text_continue?
    end
    @lune_message.opacity = 0 unless @lune_message == nil
    close_and_wait
    $game_message.visible = false
    @fiber = nil
  end
  def update_placement
    @gold_window.y = y > 0 ? 0 : Graphics.height - @gold_window.height
    unless Lune_Message.identificacao.nil?
      self.x = @lune_x - window_width / 2
      self.x -= (self.x + window_width - Graphics.width) if self.x + window_width >= Graphics.width
      self.x -= new_line_x
      self.x = [self.x,0].max   
      self.y = @lune_y
      self.y -= window_height + Lune_Message::Tamanho if Lune_Message.posicao == 1
      self.y = [self.y,0].max
      self.y -= (self.y + window_height - Graphics.height) if self.y + window_height >= Graphics.height
    end
  end
  #--------------------------------------------------------------------------
  # * Execução de todos texto
  #--------------------------------------------------------------------------
  def process_all_text
    if Lune_Message.identificacao == 0
      @lune_x = $game_player.screen_x
      @lune_y = $game_player.screen_y
      else
      @lune_x = $game_map.events[Lune_Message.identificacao].screen_x
      @lune_y = $game_map.events[Lune_Message.identificacao].screen_y
    end
    @lune_message.dispose unless @lune_message.nil?
    w = @lune_x - window_width / 2
    h = @lune_y
    $game_message.face_name.empty? ? (w = [w,0].max) : (w = [w,112].max)
    h -= window_height + Lune_Message::Tamanho if Lune_Message.posicao == 1
    h = [h,0].max
    w -= (w + window_width - Graphics.width) if w + window_width >= Graphics.width
    h -= (h + window_height - Graphics.height) if h + window_height >= Graphics.height
    @lune_message = Lune_Window_Message.new(w, h, window_width, window_height)
    @lune_face = Window_Base.new(w - 104, h + 8, 104, 104) unless $game_message.face_name.empty?
    open_and_wait
    update_placement
    text = convert_escape_characters($game_message.all_text)
    pos = {}
    new_page(text, pos)
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
    #--------------------------------------------------------------------------
  # * Abertura da janela e espeta até abertura total
  #--------------------------------------------------------------------------
  def open_and_wait
    @lune_message.openlune
    Fiber.yield until @lune_message.openlune
    open
  end
    #--------------------------------------------------------------------------
  # * Fechamento da janela e espeta até fechamento total
  #--------------------------------------------------------------------------
  def close_and_wait
    close
    Fiber.yield until all_close?
    @lune_message.closelune
    Fiber.yield until @lune_message.closelune
  end
    #--------------------------------------------------------------------------
  # * Execução de espera de entrada
  #--------------------------------------------------------------------------
  def input_pause
    wait(10)
    Fiber.yield until Input.trigger?( :B ) || Input.trigger?(:C)
    Input.update
    @lune_face.dispose unless @lune_face.nil?
    self.pause = false
  end
end

Un Saludo
Out.-





Todos mis aportes por Mediafire tienen contraseña, esa es: www.universomaker.net
Esto es para evitar plagio, asegúrense de copiar y pegar la contraseña.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.