질문과 답변

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 59565
RMVXA 전투시 애니메이션을 스킵하거나 고속 진행 시켜주는 스크립트가 있나요? 폴라 2015.08.19 208
RMVX 비주얼노벨을 제작할 예정이라 필요가 없는 hp, mp 란을 빼고 싶습니다. 타코야키 2015.08.18 194
RMVXA 대화풍선(말풍선)을 캐릭터위에 띄우는법을 알고싶습니다. 2 file 꼬닭 2015.08.18 1838
RMVX file corrupted 2 file 천둥번들 2015.08.17 204
RMVXA 혹시;; 반드시 디폴트로 남겨둬야 하는 스킬이 있는 건가요?? 2 아루쿠 2015.08.16 262
RMVXA 이동루트 캔슬 안되게 하는법 알려주세요. 3 2015.08.16 209
RMVXA 아이마르님이 올리신 사이드뷰 스크립트 질문 5 슈퍼울트라그레이트딜리셔스 2015.08.15 462
기타 윈도우10 데이터베이스 9 무명시절 2015.08.15 239
RMVX 랜덤 확률로 나가는 스킬 만드는 법 1 휴론 2015.08.15 268
RMVXA 전체키 스크립트 사용 방법좀요 ㅠ 1 SKT스피릿 2015.08.15 344
RMVX 몬스터가 스킬을 사용한 사람에게 공격을 못하는 스킬 8 file 휴론 2015.08.15 254
RMVX 캐릭터 여러명 같이 다니는거 어떻게 하나요 3 file helena 2015.08.14 211
RMXP 1초는 몇 프레임인가요? 5 저좀도와주세요 2015.08.14 3834
RMVXA 대사가 나오고 움직이는 NPC에 대해 오류가 있습니다. 4 file 그릇 2015.08.13 183
RMVXA 샘플맵 불러오기가 이상합니다. file 게임잘날아가는닝겐 2015.08.13 210
RMVXA 주사위 스크립트나 이벤트 만드는 법 종이상자. 2015.08.13 274
기타 도트가 뭐죠? 2 rpgvx유저 2015.08.12 188
RMVXA 스팀판 타일셋 질문 1 file asdfasdf111 2015.08.12 323
RMVXA 스킬을 사용한 캐릭터와 스킬의 대상이 된 캐릭터의 번호를 저장할 수 있나요? 2 폴라 2015.08.12 175
RMVXA 게임 디컴파일 3 게임잘날아가는닝겐 2015.08.11 345
Board Pagination Prev 1 ... 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 ... 518 Next
/ 518