조회 수 1894 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

#==============================================================================
# ■ Window_Message_Plus v3.1 수정버전:psh4989(네이버 wmftit)
# 128x128 픽쳐 수정 : killarot(네이버 dust_mite)
#==============================================================================
class Window_Message < Window_Selectable
  # 한 글자씩 묘사
  DEFAULT_TYPING_ENABLE = true                # false로 하면(자) 순간 표시
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  alias xrxs9_initialize initialize
  def initialize
    xrxs9_initialize
    # 재생 사운드명이 없는 경우는""으로 하는
    if $soundname_on_speak == nil then
      $soundname_on_speak = ""
    end
    # 외자 파일 패스 설정
    $gaiji_file = "./Graphics/Gaiji/sample.png"
    # 외자 데이터 읽기
    if FileTest.exist?($gaiji_file)
      @gaiji_cache = Bitmap.new($gaiji_file)
    else
      @gaigi_cache = nil
    end
    # 문자 투과 전송용 버퍼
    @opacity_text_buf = Bitmap.new(32, 32)
  end
  #--------------------------------------------------------------------------
  # ● 메세지 종료 처리
  #--------------------------------------------------------------------------
  alias xrxs9_terminate_message terminate_message
  def terminate_message
    if @name_window_frame != nil
      @name_window_frame.dispose
      @name_window_frame = nil
    end
    if @name_window_text  != nil
      @name_window_text.dispose
      @name_window_text  = nil
    end
    xrxs9_terminate_message
  end
  #--------------------------------------------------------------------------
  # ● 리프레쉬
  #--------------------------------------------------------------------------
  def refresh
    # 초기화
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size  = Font.default_size
    @x = @y = @max_x = @max_y = @indent = @lines = 0
    @face_indent = 0
    @opacity = 255
    @cursor_width = 0
    @write_speed = 0
    @write_wait = 0
    @mid_stop = false
    @face_file = nil
    # @popchar 가 -2 의 경우 , 표준 위치. -1의 경우 , 문자 센터. 
    # 0이상의 경우 캐릭터 팝. 0(은)는 주인공 ,1이후는 이벤트. 
    @popchar = -2
    # 선택사항이라면 인덴트를 실시하는
    if $game_temp.choice_start == 0
      @x = 8
    end
    # 표시 기다리는 메세지가 있는 경우
    if $game_temp.message_text != nil
      @now_text = $game_temp.message_text
      # 얼굴 표시 지정\F이 있을까? 
      if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then
        # 얼굴 그라를 묘화
        @face_file = $1 + ".png"
        self.contents.blt(0, 1, RPG::Cache.picture(@face_file), Rect.new(0, 0, 128, 128))
        # 전행 128픽셀의 인덴트를 넣는다. 
        @x = @face_indent = 128
        @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }
      end
      # 제어 문자 처리
      begin
      last_text = @now_text.clone
      # \V를 독자 루틴으로 변경(추가 부분)
      @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
      end until @now_text == last_text
      @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # \name이 있을까? 
      name_window_set = false
      if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil
        # 값을 설정
        name_window_set = true
        name_text = $1
        # \name[]부분을 삭제
        @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
      end
      # 윈도우 위치 판정
      if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then
        @popchar = $1.to_i
        if @popchar == -1
          @x = @indent = 48
          @y = 4
        end
        @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" }
      end
      # 윈도우폭의 취득
      @max_choice_x = 0
      if @popchar >= 0
        @text_save = @now_text.clone
        @max_x = 0
        @max_y = 4
        for i in 0..3
          line = @now_text.split(/\n/)[3-i]
          @max_y -= 1 if line == nil and @max_y <= 4-i
          next if line == nil
          line.gsub!(/\\\w\[(\w+)\]/) { "" }
          cx = contents.text_size(line).width
          @max_x = cx if cx > @max_x
          if i >= $game_temp.choice_start
            @max_choice_x = cx if cx > @max_choice_x
          end
        end
        self.width = @max_x + 32 + @face_indent
        self.height = (@max_y - 1) * 32 + 64
        @max_choice_x -= 68
        @max_choice_x -= @face_indent*216/128
      else
        @max_x = self.width - 32 - @face_indent
        for i in 0..3
          line = @now_text.split(/\n/)[i]
          next if line == nil
          line.gsub!(/\\\w\[(\w+)\]/) { "" }
          cx = contents.text_size(line).width
          if i >= $game_temp.choice_start
            @max_choice_x = cx if cx > @max_choice_x
          end
        end
        @max_choice_x += 8
      end
      # 선택사항이라면 커서의 폭을 갱신
      @cursor_width = 0
      #if @lines >= $game_temp.choice_start
      #  @cursor_width = [@cursor_width, @max_choice_x - @face_indent].max
      #end
      # 편의상 ,"\\\\" 을 "\000" 에 변환
      @now_text.gsub!(/\\\\/) { "\000" }
      # "\\C" 을 "\001" 에 ,"\\G" 를 "\002" 에 ,
      # "\\S" 를 "\003" 에 ,"\\A" 를 "\004" 에 변환
      @now_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      @now_text.gsub!(/\\[Gg]/) { "\002" }
      @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" }
      @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }
      @now_text.gsub!(/\\[.]/) { "\005" }
      @now_text.gsub!(/\\[|]/) { "\006" }
      # 경합 하면(자) 무엇인가 거북하기 때문에 ,\016이후를 사용하는
      @now_text.gsub!(/\\[>]/) { "\016" }
      @now_text.gsub!(/\\[<]/) { "\017" }
      @now_text.gsub!(/\\[!]/) { "\020" }
      @now_text.gsub!(/\\[~]/) { "\021" }
      @now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" }
      # 인덴트 설정(추가 부분)
      @now_text.gsub!(/\\[Ii]/) { "\023" }
      # 텍스트 투과율 지정(추가 부분)
      @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }
      # 텍스트 사이즈 지정(추가 부분)
      @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }
      # 공백 삽입(추가 부분)
      @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "\026[#{$1}]" }
      # 루비 표시(추가 부분)
      @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "\027[#{$1}]" }
      # 여기서 일단 윈도우 위치 갱신
      reset_window
      # \name이 있을까? 
      if name_window_set
        # 오프셋(offset) 위치
        off_x =  0
        off_y =  -10
        # 범위만 윈도우의 작성(margin를 2 로 설정)
        space = 2
        x = self.x + off_x - space / 2
        y = self.y + off_y - space / 2
        w = self.contents.text_size(name_text).width + 8 + space
        h = 26 + space
        @name_window_frame = Window_Frame.new(x, y, w, h)
        @name_window_frame.z = self.z + 1
        # 의사적인 공중 문자 묘사 윈도우를 작성
        x = self.x + off_x + 4
        y = self.y + off_y
        @name_window_text  = Air_Text.new(x, y, name_text)
        @name_window_text.z = self.z + 2
      end
    end
    # 윈도우를 갱신
    reset_window
    # 선택사항의 경우
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # 수치 입력의 경우
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    super
    # 용명의 경우
    if @fade_in
      self.contents_opacity += 24
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      return
    end
    @now_text = nil if @now_text == "" # 변환
    # 표시 기다리는 메세지가 있는 경우
    if @now_text != nil and @mid_stop == false
      if @write_wait > 0
        @write_wait -= 1
        return
      end
      text_not_skip = DEFAULT_TYPING_ENABLE
      while true
        # 최대 x y 의 보존. 
        @max_x = @x if @max_x < @x
        @max_y = @y if @max_y < @y
        # c 에 1 문자를 취득 (문자를 취득할 수 없게 될 때까지 루프)
        if (c = @now_text.slice!(/./m)) != nil
          # \\ 의 경우
          if c == "\000"
            # 본래의 문자에 되돌리는
            c = "\\"
          end
          # \C[n] 의 경우
          if c == "\001"
            # 문자색을 변경
            @now_text.sub!(/\[([0-9]+)\]/, "")
            color = $1.to_i
            if color >= 0 and color <= 7
              self.contents.font.color = text_color(color)
              if @opacity != nil
                color = self.contents.font.color
                self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)
              end
            end
            # 다음의 문자에
            c = ""
          end
          # \G 의 경우
          if c == "\002"
            # 골드 윈도우를 작성
            if @gold_window == nil and @popchar <= 0
              @gold_window = Window_Gold.new
              @gold_window.x = 560 - @gold_window.width
              if $game_temp.in_battle
                @gold_window.y = 192
              else
                @gold_window.y = self.y >= 128 ? 32 : 384
              end
              @gold_window.opacity = self.opacity
              @gold_window.back_opacity = self.back_opacity
            end
            # 다음의 문자에
            c = ""
          end
          # \S[n] 의 경우
          if c == "\003"
            # 문자색을 변경
            @now_text.sub!(/\[([0-9]+)\]/, "")
            speed = $1.to_i
            if speed >= 0 and speed <= 19
              @write_speed = speed
            end
            # 다음의 문자에
            c = ""
          end
          # \A[soundname] 의 경우
          if c == "\004"
            # 재생 파일을 변경하기 위한 준비
            @now_text.sub!(/\[(.*?)\]/, "")
            buftxt = $1.dup.to_s
            # 재생 파일명에"/"가 있을까? 
            if buftxt.match(/\//) == nil and buftxt != "" then
              # 없으면"Audio/SE/"을 결합하는
              $soundname_on_speak = "Audio/SE/" + buftxt
            else
              # 있으면 그대로 카피
              $soundname_on_speak = buftxt.dup
            end
            # 다음의 문자에
            c = ""
          elsif c == "\004" 
            # 다음의 문자에
            c = ""
          end
          # \. 의 경우
          if c == "\005"
            @write_wait += 5
            c = ""
          end
          # \| 의 경우
          if c == "\006"
            @write_wait += 20
            c = ""
          end
          # \> 의 경우
          if c == "\016"
            text_not_skip = false
            c = ""
          end
          # \<의 경우
          if c == "\017"
            text_not_skip = true
            c = ""
          end
          # \!의 경우
          if c == "\020"
            @mid_stop = true
            c = ""
          end
          # \~의 경우
          if c == "\021"
            terminate_message
            return
          end
          # \I의 경우(추가 부분)
          if c == "\023"
            # 지금의@x를 인덴트 위치로 설정
            @indent = @x
            c = ""
          end
          # \O의 경우(추가 부분)
          if c == "\024"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            @opacity = $1.to_i
            color = self.contents.font.color
            self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)
            c = ""
          end
          # \H의 경우(추가 부분)
          if c == "\025"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            self.contents.font.size = [[$1.to_i, 6].max, 32].min
            c = ""
          end
          # \B의 경우(추가 부분)
          if c == "\026"
            @now_text.sub!(/\[([0-9]+)\]/, "")
            @x += $1.to_i
            c = ""
          end
          # \R의 경우(추가 부분)
          if c == "\027"
            @now_text.sub!(/\[(.*?)\]/, "")
            # 문자를 묘화
            @x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity)
            # 문자 묘사의 것SE을 연주
            if $soundname_on_speak != ""
              Audio.se_play($soundname_on_speak)
            end
            c = ""
          end
          # 아이콘 묘화용 순서의 경우(추가 부분)
          if c == "\030"
            # 아이콘 파일명을 취득
            @now_text.sub!(/\[(.*?)\]/, "")
            # 아이콘을 묘화
            self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
            # 문자 묘사의 것SE을 연주
            if $soundname_on_speak != ""
              Audio.se_play($soundname_on_speak)
            end
            @x += 24
            # 다음의 문자에
            c = ""
          end
          # 개행 문자의 경우
          if c == "\n"
            # y 에 1 를 가산
            @lines += 1
            @y += 1
            @x = 0 + @indent + @face_indent
            # 선택사항이라면 인덴트를 실시하는
            if @lines >= $game_temp.choice_start
              @x = 8 + @indent + @face_indent
              # 커서의 갱신
              @cursor_width = @max_choice_x
            end
            # 다음의 문자에
            c = ""
          end
          # 외자 표시의 경우
          if c == "\022"
            # []부분의 제거
            @now_text.sub!(/\[([0-9]+)\]/, "")
            # 외자를 표시
            @x += gaiji_draw(4 + @x, @y * line_height + (line_height - self.contents.font.size), $1.to_i)
            # 다음의 문자에
            c = ""
          end
          if c != ""
            # 문자를 묘화
            self.contents.draw_text(4+@x, 32 * @y, 40, 32, c)
            @x += self.contents.text_size(c).width
            # 문자 묘사의 것SE을 연주
            if $soundname_on_speak != "" then
              Audio.se_play($soundname_on_speak)
            end
          end
          # B버튼이 밀렸을 경우
          if Input.press?(Input::B)
            text_not_skip = false
          end
        else
          text_not_skip = true
          break
        end
        # 종료 판정
        if text_not_skip
          break
        end
      end
      @write_wait += @write_speed
      return
    end
    # 수치 입력중의 경우
    if @input_number_window != nil
      @input_number_window.update
      # 결정
      if Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
          @input_number_window.number
        $game_map.need_refresh = true
        # 수치 입력 윈도우를 해방
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    # 메세지 표시중의 경우
    if @contents_showing
      # 선택사항의 표시중이 아니면 포즈 싸인을 표시
      if $game_temp.choice_max == 0
        self.pause = true
      end
      # 캔슬
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      # 결정
      if Input.trigger?(Input::C)
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        if @mid_stop
          @mid_stop = false
          return
        else
          terminate_message
        end
      end
      return
    end
    # 페이드아웃중 이외로 표시 기다리는 메세지나 선택사항이 있는 경우
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      refresh
      Graphics.frame_reset
      self.visible = true
      self.contents_opacity = 0
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    # 표시해야 할 메세지가 없지만 , 윈도우가 가시 상태의 경우
    if self.visible
      @fade_out = true
      self.opacity -= 48
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 캐릭터의 취득
  #     parameter : 파라미터
  #--------------------------------------------------------------------------
  def get_character(parameter)
    # 파라미터로 분기
    case parameter
    when 0  # 플레이어
      return $game_player
    else  # 특정의 이벤트
      events = $game_map.events
      return events == nil ? nil : events[parameter]
    end
  end
  #--------------------------------------------------------------------------
  # ● 윈도우의 위치와 불투명도의 설정
  #--------------------------------------------------------------------------
  def reset_window
    # 판정
    if @popchar >= 0
      events = $game_map.events
      if events != nil
        character = get_character(@popchar)
        x = [[character.screen_x -  0 - self.width / 2, 4].max, 636 - self.width].min
        y = [[character.screen_y - 48 - self.height, 4].max, 476 - self.height].min
        self.x = x
        self.y = y
      end
    elsif @popchar == -1
      self.x = -4
      self.y = -4
      self.width = 648
      self.height = 488
    else
      if $game_temp.in_battle
        self.y = 16
      else
        case $game_system.message_position
        when 0  # 상
          self.y = 16
        when 1  # 안
          self.y = 160
        when 2  # 하
          self.y = 304
        end
        self.x = 80
        if @face_file == nil
          self.width = 480
        else
          self.width = 600
          self.x -= 60
        end
        self.height = 160
      end
    end
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    if @face_file != nil
      self.contents.blt(0, 1, RPG::Cache.picture(@face_file), Rect.new(0, 0, 128, 128))
    end
    if @popchar == -1
      self.opacity = 255
      self.back_opacity = 0
    elsif $game_system.message_frame == 0
      self.opacity = 255
      self.back_opacity = 160
    else
      self.opacity = 0
      self.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  # ● 외자 묘화
  #--------------------------------------------------------------------------
  # x   :x 좌표
  # y   :y 좌표
  # num  :외자 번호
  # 돌아가 값:외자폭(@x증가치)
  #--------------------------------------------------------------------------
  def gaiji_draw(x, y, num)
    # 외자 데이터가 존재하지 않는 경우는 굳이 하지 않는
    if @gaiji_cache == nil
      return 0
    else
      # 지정한 외자가 캐쉬 범위를 넘고 있는 경우는 굳이 하지 않는
      if @gaiji_cache.width < num * 24
        return 0
      end
      # 문자 사이즈를 계산
      if self.contents.font.size >= 20 and self.contents.font.size <= 24
        size = 24
      else
        size = self.contents.font.size * 100 * 24 / 2200
      end
      # 외자 데이터를stretch_blt로 전송
      self.contents.stretch_blt(Rect.new(x, y, size, size), @gaiji_cache, Rect.new(num * 24, 0, 24, 24))
      # 문자 묘사의 것SE을 연주
      if $soundname_on_speak != "" then
        Audio.se_play($soundname_on_speak)
      end
      # 문자 사이즈를 돌려주는
      return size
    end
  end
  #--------------------------------------------------------------------------
  # ● line_height
  #--------------------------------------------------------------------------
  # 돌아가 치:행의 높이(@y증가치)를 돌려줍니다. 
  #--------------------------------------------------------------------------
  def line_height
    # 현상 , 선택사항등 에 대응을 할 수 없기 때문에 , 자동적으로32를 돌려줍니다. 
    return 32
    # 문자 사이즈를 계산
    if self.contents.font.size >= 20 and self.contents.font.size <= 24
      return 32
    else
      return self.contents.font.size * 15 / 10
    end
  end
  #--------------------------------------------------------------------------
  # ● 루비 문자 묘화
  #--------------------------------------------------------------------------
  # target :묘화 대상. Bitmap클래스를 지정. 
  # x      :x좌표
  # y      :y좌표
  # str   :묘화 캐릭터 라인. 본문,루비의 형식에서 입력. 
  #      ,단락이2개 이상 있었을 경우는 자동적으로 무시된다. 
  # opacity:투과율(0~255)
  # 돌아가 값 :문자폭(@x증가치). 
  #--------------------------------------------------------------------------
  def ruby_draw_text(target, x, y, str,opacity)
    # font size를 백업 해 두는
    sizeback = target.font.size
    # 루비 사이즈의 계산
    target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2
    rubysize = [rubysize, 6].max
    
    # opacity에 규정치 이상의 값이 들어가 있는 경우는 수정. 
    opacity = [[opacity, 0].max, 255].min
    # str(을)를split로 분할해 ,split_s에 격납
    split_s = str.split(/,/)
    # split_s이nil의 경우는""으로 해 두는(오동작 방지)
    split_s[0] == nil ? split_s[0] = "" : nil
    split_s[1] == nil ? split_s[1] = "" : nil
    # height와width를 계산
    height = sizeback + rubysize
    width  = target.text_size(split_s[0]).width
    # 버퍼용의 폭 계산(루비의 폭이 본문의 폭을 넘을 가능성이 있기 때문에(위해))
    target.font.size = rubysize
    ruby_width = target.text_size(split_s[1]).width
    target.font.size = sizeback
    buf_width = [target.text_size(split_s[0]).width, ruby_width].max
    # 본문의 묘화폭과 루비의 묘화폭의 차이를1/2로 해 변수에 격납(다음에 사용)
    width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0
    # opacity이255(투과 없음)의 경우는 통상 묘화
    if opacity == 255
    # 루비의 묘화
      target.font.size = rubysize
      target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1])
      target.font.size = sizeback
    # 본문의 묘화
      target.draw_text(x, y, width, target.font.size, split_s[0])
      return width
    else
      # 표시 텍스트의height,width가 버퍼 사이즈를 웃도는 경우는
      # 버퍼를 재생성한다. 
      if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height
        @opacity_text_buf.dispose
        @opacity_text_buf = Bitmap.new(buf_width, height)
      # 그렇지 않은 경우는 버퍼 클리어. 
      else
        @opacity_text_buf.clear
      end
      # 버퍼에 텍스트 묘화
      # 루비의 묘화
      @opacity_text_buf.font.size = rubysize
      @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1)
      @opacity_text_buf.font.size = sizeback
      # 본문의 묘화
      @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1)
      # 루비의 폭이 본문의 폭을 밑도는 경우
      if sub_x >= 0
        target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
      # 루비의 폭이 본문의 폭을 웃도는 경우
      else
        target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
      end
      # 문자 사이즈를 돌려주는
      return width
    end
  end
  #--------------------------------------------------------------------------
  # ● \V변환
  #--------------------------------------------------------------------------
  # option :옵션. 무 지정 또는 규정외의 경우는index의 유저 변수치를 돌려준다. 
  # index  :인덱스
  # 돌아가 값 :변환 결과(아이콘 표시용 순서 포함)
  #--------------------------------------------------------------------------
  def convart_value(option, index)
    # option이nil의 경우는""으로 고치는(오동작 방지)
    option == nil ? option = "" : nil
    # option는downcase해 둔다. 
    option.downcase!
    # \030(은)는 아이콘 표시용의 순서. \030[아이콘 파일명]으로 정의. 
    case option
    when "i"
      unless $data_items[index].name == nil
        r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name)
      end
    when "w"
      unless $data_weapons[index].name == nil
        r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
      end
    when "a"
      unless $data_armors[index].name == nil
        r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
      end
    when "s"
      unless $data_skills[index].name == nil
        r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)
      end
    else
      r = $game_variables[index]
    end
    r == nil ? r = "" : nil
    return r
  end
  #--------------------------------------------------------------------------
  # ● 해방
  #--------------------------------------------------------------------------
  def dispose
    terminate_message
    # 외자 캐쉬 개방
    if @gaiji_cache != nil
      unless @gaiji_cache.disposed?
        @gaiji_cache.dispose
      end
    end
    # 문자 투과 전송용 버퍼 개방
    unless @opacity_text_buf.disposed?
      @opacity_text_buf.dispose
    end
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● 커서의 구형 갱신
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8 + @indent + @face_indent, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
end
#==============================================================================
# ■ Window_Frame (범위만으로 내용이 없는 윈도우)
#==============================================================================
class Window_Frame < Window_Base
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    self.contents = nil
    #self.back_opacity = 240
  end
  #--------------------------------------------------------------------------
  # ● 해방
  #--------------------------------------------------------------------------
  def dispose
    super
  end
end
#==============================================================================
# ■ Air_Text (굳이 없는 곳에 문자 묘사 = 범위가 없는 순간 표시 메세지 윈도우)
#==============================================================================
class Air_Text < Window_Base
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize(x, y, designate_text)
    super(x-16, y-16, 32 + designate_text.size * 12, 56)
    self.opacity      = 0
    self.back_opacity = 0
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    w = self.contents.width
    h = self.contents.height
    self.contents.draw_text(0, 0, w, h, designate_text)
  end
  #--------------------------------------------------------------------------
  # ● 해방
  #--------------------------------------------------------------------------
  def dispose
    self.contents.clear
    super
  end
end


 

?
  • ?
    d가을 2017.03.11 09:14
    아 저기 스크립트를 적용하는 방법을 몰라 아직 안하는데 반신이에요? 아니면 그냥 얼굴이에요?

  1. Wav 파일 암호화 도구 - RMMV

    Date2016.11.30 CategoryRPGMV 플러그인 By러닝은빛 Views1228 Votes1
    Read More
  2. CSS 캔버스 필터

    Date2016.10.06 CategoryRPGMV 플러그인 By러닝은빛 Views910 Votes0
    Read More
  3. 화면 다중 분할 플러그인(Multiple Viewports)

    Date2016.08.25 CategoryRPGMV 플러그인 By러닝은빛 Views1173 Votes0
    Read More
  4. 텍스트 입력창(Keyboard Input Dialog)

    Date2016.08.09 CategoryRPGMV 플러그인 By러닝은빛 Views1416 Votes1
    Read More
  5. Font Setup

    Date2016.07.22 CategoryRPGXP 스크립트 By운님 Views1447 Votes0
    Read More
  6. 맵상에서 캐릭터 스프라이트 이미지를 offset해주는 플러그인

    Date2016.07.19 CategoryRPGMV 플러그인 Bylklslel Views1069 Votes0
    Read More
  7. Refresh Manager

    Date2016.05.24 CategoryRPGMV 플러그인 By러닝은빛 Views1382 Votes1
    Read More
  8. YouTube Player

    Date2016.05.08 CategoryRPGMV 플러그인 By러닝은빛 Views1477 Votes0
    Read More
  9. 이벤트 자동 추적 플러그인

    Date2016.04.27 CategoryRPGMV 플러그인 By러닝은빛 Views2698 Votes3
    Read More
  10. 픽쳐 터치 플러그인

    Date2016.04.17 CategoryRPGMV 플러그인 By양갱님 Views2035 Votes0
    Read More
  11. 이벤트 이름 표시하기

    Date2016.04.05 CategoryRPGMV 플러그인 By러닝은빛 Views2089 Votes1
    Read More
  12. VX Ace 용 8방향 이동 스크립트

    Date2016.03.17 CategoryRPGVX Ace 스크립트 By도라지power Views1653 Votes0
    Read More
  13. Item Stream

    Date2016.03.08 CategoryRPGMV 플러그인 By러닝은빛 Views3196 Votes0
    Read More
  14. 대화에 얼굴이 나오는 스크립트 by: killarot(네이버 dust_mite)(수정버전)

    Date2016.02.22 CategoryRPGXP 스크립트 By부초 Views1894 Votes0
    Read More
  15. 지속데미지 스크립트(MBS)

    Date2016.02.14 CategoryRPGVX Ace 스크립트 By天下太平 Views1516 Votes0
    Read More
  16. 한글 이름 입력창 2.1v

    Date2016.02.12 CategoryRPGMV 플러그인 By맛난호빵 Views2370 Votes0
    Read More
  17. 화면에 이미지를 표시하는 스크립트(C#)

    Date2016.02.04 Category유니티 스크립트 Byzerosium Views2369 Votes0
    Read More
  18. [plugin] YEP.58 – Item Synthesis (YEP엔진 아이템 합성 시스템)

    Date2016.01.21 CategoryRPGMV 플러그인 Byplam Views2368 Votes0
    Read More
  19. 윈도우 시스템 트레이로 최소화

    Date2016.01.21 CategoryRPGMV 플러그인 By러닝은빛 Views2028 Votes0
    Read More
  20. 유니티)캐릭터 좌우 이동 (C#)

    Date2016.01.05 Category유니티 스크립트 Byzerosium Views977 Votes0
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)