질문과 답변

Extra Form
module Lune_Message
#=======================================================
#         Lune Message System
# Autor: Raizen
# Compativel com: RMVXAce
# Comunidade: Centrorpg.com
# O script permite mensagens acima de eventos, 
# fazendo um modo mais interativo de mensagens entre
# npcs e personagens.

# Informações: Versão Atual 1.2
# O script pode substituir as versões antigas que não afetará 
# negativamente em nada no jogo.

#Atualização 1.1 => Adicionado setas para indicar o evento que está falando.
#Atualização 1.2 => Correção no dispose da imagem, e adicionado
#Atualização 1.3 => Sistema de mensagens da batalha colocada para padrão.
# a função de utilizar o modo antigo de mensagens.

# Instruções

# Para utilizar a mensagem basta chamar o comando basico
# de mostrar mensagem, podendo conter ou não uma face.

# antes do mostrar mensagem configure o evento que quer
# que apareça a mensagem, e a posição(acima ou abaixo) do evento.

# Também é possivel escolher pontos diferentes de mensagens sem se
# basear em eventos.

# Para configurar a posição da mensagem faça o seguinte.

# Chamar Script:Lune_Message.config(p, id)

# Sendo o p a posição que pode ser
# 1 = acima do personagem
# 0 = abaixo do personagem
# 2 = estilo de mensagens antiga

# Ou seja para desativar o script de mensagens e usar do modo antigo
# basta chamar script desse modo.
# Chamar Script:Lune_Message.config(2, 0)
# Coloque um Esperar 1 frame antes de mostrar a mensagem no modo antigo,
# para ser possível dar tempo de reconfigurar todas as posições antigas.

# ID sendo o ID do evento, e 0 o ID do personagem.
# Para o Herói coloque o valor 0.
# Espacamento é a correção do tamanho da janela, ajuste
# o valor para melhor ajustar a sua fonte.

Espacamento = 23

# Tamanho dos personagens(em pixels) que aparecerá as mensagens, para efeito 
# de correção

Tamanho = 48

# Nome do arquivo que servirá de cursor para indicar o personagem que
# está falando.
# Caso não queira arquivo algum para indicar, basta colocar desse modo.
# Imagem = ""
# A imagem deve estar na pasta Graphics/System dentro da pasta do seu projeto.
Imagem = ""
# ========================================================================
# Aqui começa o script modifique caso saiba o que está fazendo.
# ========================================================================

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
     @biggest = 0
     @texts.inject("") {|r, text| 
     if text.size > @lune_length_size
      @lune_length_size = text.size 
      @biggest = text.dup
      @biggest.delete! "\."
      @biggest.delete! "\!"
      @biggest.delete! "\c["
      @biggest.delete! "]"
      @biggest.delete! "["
      p @biggest
      end
     }
     return @biggest
   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  
alias lune_process_all_text process_all_text
alias lune_message_dispose dispose
alias lune_input_choice input_choice
  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
    text_size($game_message.get_lune_length).width + Lune_Message::Espacamento
  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)
    unless Lune_Message.posicao == 2
    @lune_message.refresh if @lune_message and Graphics.frame_count % 25 == 1
    self.opacity = 0
    end
  end
  def fiber_main
    $game_message.visible = true
    update_background
    lune_update_placement if Lune_Message.posicao == 2
    loop do
      if Lune_Message.posicao == 2
      lune_process_all_text if $game_message.has_text?
      else
      process_all_text if $game_message.has_text?
      end
      process_input
      $game_message.clear
      @gold_window.close
      Fiber.yield
      break unless text_continue?
    end
    @lune_message.opacity = 0 unless @lune_message == nil and Lune_Message.posicao == 2
    close_and_wait
    $game_message.visible = false
    @fiber = nil
  end
  def lune_update_placement
    @position = $game_message.position
    self.y = @position * (Graphics.height - height) / 2
    self.x = 0
    @gold_window.y = y > 0 ? 0 : Graphics.height - @gold_window.height
  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?
    update_placement
    text = convert_escape_characters($game_message.all_text)
    pos = {}
    new_page(text, pos)
    open_and_wait
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
    #--------------------------------------------------------------------------
  # * Abertura da janela e espeta até abertura total
  #--------------------------------------------------------------------------
  def open_and_wait
    unless Lune_Message.posicao == 2
    @lune_message.openlune 
    Fiber.yield until @lune_message.openlune
    open
  else 
    open
    Fiber.yield until open?
  end
  end
    #--------------------------------------------------------------------------
  # * Fechamento da janela e espeta até fechamento total
  #--------------------------------------------------------------------------
  def close_and_wait
    close
    Fiber.yield until all_close?
    @lune_message.closelune if @lune_message 
    Fiber.yield until @lune_message.closelune unless Lune_Message.posicao == 2
  end
    #--------------------------------------------------------------------------
  # * Execução de espera de entrada
  #--------------------------------------------------------------------------
  def input_pause
    self.pause = true if Lune_Message.posicao == 2
    wait(10)
    Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C)
    Input.update
    @lune_face.dispose unless @lune_face.nil?
    self.pause = false
  end
  def dispose
    @lune_message.dispose if @lune_message
    Lune_Message.config(2,0)
    lune_message_dispose
  end
  #--------------------------------------------------------------------------
  # * Execução de entrada de escolhas
  #--------------------------------------------------------------------------
  def input_choice
    lune_input_choice
    @lune_face.dispose unless @lune_face.nil?
  end
end








해당 스크립트는 Lune Message System 으로 말풍선 대화를 지원해주는데요.
특수문자까지 글자수를 인식해서 말풍선이 지나치게 크게 나오더라구요.
이 부분을 수정해주실 수 있는 분 없나요..ㅠㅠ

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 13181
RMVXA 메세지 한 글자마다 효과음이 나는 스크립트가 있나요? 2 Kaicien 2015.08.07 453
RMVX 스크립트가 충돌하는듯 합니다 3 file 유우니사막 2015.08.07 160
RMVX 총쏘는 이벤트 4 스윙터틀 2015.08.07 205
기타 스크립트에대해서 궁금합니다 3 아쳐 2015.08.06 157
사이트 이용 RPG게임을 만들때 필요한 프로그램은 어떻게 다운받나요? 1 Ailin 2015.08.06 425
RMVXA 이벤트를 사용하여 맵칩을 두면 아랫쪽에 빈공간이 생깁니다 1 file KIM곰 2015.08.06 156
RMVXA 이벤트 겹치기! 2 삡코 2015.08.06 182
RMVXA SRPG, 회전전투메뉴 시스탬을 만들고자 합니다. 도와주세요! 6 file mintory 2015.08.05 322
기타 업로드 방법 2 이.화 2015.08.05 91
스팀에서 RPG만들기 VX ACE삿는데 한글패치방법알려주세요 1 나츠야 히루 2015.08.05 574
RMVX 알만툴 충돌 (전체적인 오류) 도와주세요~ 3 하얀악어 2015.08.04 468
RMVXA 어디에 닿을시 화분이나 물건이 바닥으로 떨어지는 모습을 하고싶어요 2 다앙테 2015.08.04 333
RMVXA 스크립트 수정해주실분 찾아요.. 환장 2015.08.04 150
RMVXA 타이틀메뉴에서 "시작하기"만 눌렀을 때 간단한 Se 재생 2 정과장 2015.08.04 187
RMVXA 스위치와 커먼 이벤트를 사용하여 빛 효과 적용시키는거 어떻게 하나요 4 file KIM곰 2015.08.04 171
RMVXA 윈10 데이터베이스 크기조절 1 file 황금시계 2015.08.04 222
RMVXA 시간지나면 자라나는 농작물 3 file 삡코 2015.08.04 231
RMVXA 말풍선 스크립트가 정말로 필요합니다 환장 2015.08.03 175
RMVXA 불 형태의 칩을 휘날리는듯이 설정하고 싶은데 이동경로를 어떻게 설정해야하나요 2 file KIM곰 2015.08.03 148
RMVX 캐릭터가 자고있다 깨어나는거 어떻게하나요? 5 file 피의신랑 2015.08.03 213
Board Pagination Prev 1 ... 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 ... 517 Next
/ 517