XP 스크립트

메세지 플러스 3.1v의 96x96 얼굴 픽쳐를 대신해

128x128 사이즈의 얼굴픽쳐를 사용할수있게 확장했습니다.

아래의 스크립트를 복사해서 main스크립트 위에 삽입시켜주시면 됩니다.


-사용법

문장의 입력을 하실때

f[얼굴파일이름] name[이름]

쓰시고 문장을 입력하면 됩니다.

얼굴 파일이 없을시에는 f[얼굴파일이름]이걸 입력 안하면 됩니다

순서는 반드시 얼굴다음에 이름이 와야합니다

얼굴파일은 *.png확장자를 사용하고 게임폴더내의 Graphics폴더안의 pictures폴더에 있어야합니다.

사이즈는 128x128보다 크면 오른쪽과 아랫쪽이 잘립니다.


#==============================================================================
# ■ 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
      # 편의상 ,"\" 을 "00" 에 변환
      @now_text.gsub!(/\/) { "00" }
      # "C" 을 "01" 에 ,"G" 를 "02" 에 ,
      # "S" 를 "03" 에 ,"A" 를 "04" 에 변환
      @now_text.gsub!(/[Cc][([0-9]+)]/) { "01[#{$1}]" }
      @now_text.gsub!(/[Gg]/) { "02" }
      @now_text.gsub!(/[Ss][([0-9]+)]/) { "03[#{$1}]" }
      @now_text.gsub!(/[Aa][(.*?)]/) { "04[#{$1}]" }
      @now_text.gsub!(/[.]/) { "05" }
      @now_text.gsub!(/[|]/) { "06" }
      # 경합 하면(자) 무엇인가 거북하기 때문에 ,16이후를 사용하는
      @now_text.gsub!(/[>]/) { "16" }
      @now_text.gsub!(/[<]/) { "17" }
      @now_text.gsub!(/[!]/) { "20" }
      @now_text.gsub!(/[~]/) { "21" }
      @now_text.gsub!(/[Ee][([0-9]+)]/) { "22[#{$1}]" }
      # 인덴트 설정(추가 부분)
      @now_text.gsub!(/[Ii]/) { "23" }
      # 텍스트 투과율 지정(추가 부분)
      @now_text.gsub!(/[Oo][([0-9]+)]/) { "24[#{$1}]" }
      # 텍스트 사이즈 지정(추가 부분)
      @now_text.gsub!(/[Hh][([0-9]+)]/) { "25[#{$1}]" }
      # 공백 삽입(추가 부분)
      @now_text.gsub!(/[Bb][([0-9]+)]/) { "26[#{$1}]" }
      # 루비 표시(추가 부분)
      @now_text.gsub!(/[Rr][(.*?)]/) { "27[#{$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 == "00"
            # 본래의 문자에 되돌리는
            c = ""
          end
          # C[n] 의 경우
          if c == "01"
            # 문자색을 변경
            @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 == "02"
            # 골드 윈도우를 작성
            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 == "03"
            # 문자색을 변경
            @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 == "04"
            # 재생 파일을 변경하기 위한 준비
            @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 == "04"
            # 다음의 문자에
            c = ""
          end
          # . 의 경우
          if c == "05"
            @write_wait += 5
            c = ""
          end
          # | 의 경우
          if c == "06"
            @write_wait += 20
            c = ""
          end
          # > 의 경우
          if c == "16"
            text_not_skip = false
            c = ""
          end
          # <의 경우
          if c == "17"
            text_not_skip = true
            c = ""
          end
          # !의 경우
          if c == "20"
            @mid_stop = true
            c = ""
          end
          # ~의 경우
          if c == "21"
            terminate_message
            return
          end
          # I의 경우(추가 부분)
          if c == "23"
            # 지금의@x를 인덴트 위치로 설정
            @indent = @x
            c = ""
          end
          # O의 경우(추가 부분)
          if c == "24"
            @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 == "25"
            @now_text.sub!(/[([0-9]+)]/, "")
            self.contents.font.size = [[$1.to_i, 6].max, 32].min
            c = ""
          end
          # B의 경우(추가 부분)
          if c == "26"
            @now_text.sub!(/[([0-9]+)]/, "")
            @x += $1.to_i
            c = ""
          end
          # R의 경우(추가 부분)
          if c == "27"
            @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 == "30"
            # 아이콘 파일명을 취득
            @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 == "22"
            # []부분의 제거
            @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!
    # 30(은)는 아이콘 표시용의 순서. 30[아이콘 파일명]으로 정의.
    case option
    when "i"
      unless $data_items[index].name == nil
        r = sprintf("30[%s]%s", $data_items[index].icon_name, $data_items[index].name)
      end
    when "w"
      unless $data_weapons[index].name == nil
        r = sprintf("30[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
      end
    when "a"
      unless $data_armors[index].name == nil
        r = sprintf("30[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
      end
    when "s"
      unless $data_skills[index].name == nil
        r = sprintf("30[%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

Comment '37'
  • ?
    케나이슬라이드 2008.11.09 19:21
    좋은 스크립트로군요
  • ?
    킬라롯 2008.11.09 23:27
    감사합니다.
    원래 있던 메세지플러스3.1버젼에서 그림크기만 따로 설정했습니다 ㅎㅎ
  • ?
    건빵지존 2008.11.10 20:26
    꽤 기네요... 그런데 128X128 만들기가 쉬울라나?
  • ?
    킬라롯 2008.11.10 21:56
    알툴즈의 알씨를 쓰시면 크기를 도트깨짐현상없이 변경하실수있습니다(원본이 정사각형인 경우에 한해서요)
  • ?
    아잉흥행 2008.11.20 15:15
    이거 잘되나요?
  • ?
    면상포맷해 2009.02.07 19:45
    잘쓸께여~
  • ?
    단기천리 2009.04.10 12:27
    완전 기다리고 기다리던 스크립트! 이렇게 크게 이미지를 넣을 수 있다니 행복해염 ㅋㅋㅋ
  • ?
    허무군ㄱ- 2009.05.26 00:13
    퍼감니다~
  • ?
    도겸 2009.07.01 20:28
    감사합니다 잘 사용하겟습니다아!~~
  • ?
    오덕후 2010.01.10 15:16

    우왕 감사!

    제가 딱 원하던거 ㅋ

  • ?
    유스갈 2010.01.22 02:55

    감사합니다.

  • ?
    룰랄루루 2010.01.27 18:18

    감사요~~~아주 잘쓸게요~

  • ?
    옹알이 2010.02.17 15:08

    왜 안돼는거야!

  • profile
    팅팅이 2011.01.30 15:27

    잘돼는데요;; 스크립트가셔서 Main에서 오른쪽버튼 누르시고, 추가를 누르면 새로 만들어집니다.

    그럼 거기에다가 저걸 복사해서 붙여넣기하면 잘됩니다^^*그리고 확인을 눌러주시면됩니다.ㅎㅎ 도움되셨기 바래요 ㅎㅎ

  • ?
    고양이씨 2010.02.21 18:33

    감사합니다 ^^

  • ?
    신세경님 2010.02.25 18:14

    감사합니다

  • ?
    L Triple 2010.02.28 21:41

    다들 되는데 왜 저는 안될까요...

    다른 스크립트는 잘 되는데.

  • ?
    까칠한규진군 2010.03.05 17:19

    저도인''

     

     

     

     

     

     

     

     

  • ?
    깜돌고냥 2010.03.28 14:57

    혹시 모르시는 분들을위해 몇마디 적을게요.

     

    이걸복사해서 스크립트편집기의 정확히 어디에 붙이는거냐면,

     

    스크립트 맨위에보시면 window_Message 라고 쓰여있죠?

     

    그럼 쓰인대로 window_Message의 맨아래칸에 붙여넣기를 합니다.

     

    그리고 글에 보면 name 이나 f 라고 쓰여있죠? 저도 많이 했갈리는데

     

    /이게아니라 요고 W위에 가로로 줄그어져있는걸 누르면 요렇게 됩니다.

     

    또, name 하신다음엔 바로[] 요걸 쓰시고 그안에 이름을쓰신뒤 한칸뛰고 글을쓰시면 됩니다.

     

    예) name[깜돌고냥] 잘아시겠죠??

     

    요렇게요ㅎㅎ

  • ?
    KMS 2011.02.18 22:15
    C++님의 댓글도 성의 없게 느껴집니다.
    정확히 말해야지 'P로 시작하는 텅빈 그림파일'이라고 하면 뭔지 못 알아 듣는 건 당연합니다.
  • ?
    C++ 2011.02.09 23:03

    설명이 너무 어렵네요 . .

    제가 다시 알려드릴게요 .

    일단 얼굴그래픽을 준비해야겠죠 ?

    그 얼굴그래픽을 다운받아서 캐릭터 파일 안으로 들어가서

    또 P로 시작하는 . . 텅 빈 그림파일 넣는 폴더가 있습니다 .

    그 폴더에 얼굴을 넣고요 ,

    그리고 스크립트를 Main 위에 스크립트 넣는칸을 추가시켜줍시다 .

    그후 안에 스크립트를 복사해 넣습니다 .

    그리고 NPC를 만든후 문장의표시에 가셔서

    W 에 - 가 그어진거 있죠 ? 여기서는

    이렇게 나오는데 그런게 있어요 .

    가로획 그어진거 .

    그걸 하신후 'Wf[얼굴 그래픽의 이름] 자네는 누군가 ? '

    이렇게 쓰시면되요 .

     

  • ?
    구레귈궭 2014.10.05 17:03

    P로 시작하는게 아마 픽쳐폴더인거같네요.
    W에 -가 그어진거는 뭔소리죠? \ 이거인가요?

    글고 분명 오류가 나는건 152번째줄인데 이분들은 왜 152번째줄은 수정을 안하시고..;

  • ?
    亞진리亞 2010.07.04 03:31

    진짜되네 ㅎㅎㅎㅎ

  • ?
    다렐 2010.08.18 18:14

    ㅠㅠㅠ사랑해요 엉엉

  • ?
    Krrrr7 2010.10.27 18:02

    잘쓸케요

    페이퍼타워리 요기잉네

  • ?
    리엘쿤 2010.11.27 09:27

    잘 사용할게요!

  • ?
    보드 2011.01.07 11:15

     

  • ?
    아처 2011.03.18 23:59

    if c == "01" 이 줄에서 syntaxerror 뜨는데 어떻게 해야 돼나요...

  • ?
    윌스 2011.05.23 14:16

    감사합니다~^^

  • ?
    졸라맨요원 2011.07.02 20:17

    저도 아처님 처럼 그런 글뜨는데요ㅕ ㅜㅜ

  • ?

    제목 없음.png : 대화창에 얼굴, 이름 띄우기

    ABS 에쓰고 보니까 이렇게 뜹니다.사진첨부.

  • ?
    케로징 2012.01.04 18:53

    음..

    왜 나도 아쳐님 처럼 오류가 뜰까나요..?

  • ?
    마이크로소프트 2012.01.05 10:01

    149 부터 @now_text.gsub! 라고 써있는 것이 있는데 이것이 자꾸 에러가 뜨네요

    고쳐주세요

    얼굴을 뛰우게 하고 싶은데

  • ?
    hkm 2013.12.24 23:30
    149번째 줄
    @now_text.gsub!(/[Cc][([0-9]+)]/) { "01[#{$1}]" }
    위에서 뭔가 에러가 있다는데요
  • profile
    예준 2014.06.21 17:45
    좋아요!
  • ?
    러블리뀨 2014.08.22 18:12
    149번째줄에 @now_text.gsub!(/[Cc][([0-9]+)]/) { "01[#{$1}]" }여기서 에러나는데 어떻게해야되여?
  • ?
    구레귈궭 2014.10.05 16:53

    안되는데...

    149번째줄 구문오류라는데요...


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
1021 메시지 Taylor's Simple Message System 2000 Alkaid 2020.07.05 241
1020 제작도구 [XP/VX/VXA] Doodad's Editor by newold Alkaid 2020.07.12 381
1019 이름입력 한글조합입력기(영어가능) file 조규진1 2019.11.10 491
1018 전투 전투중에 장비들 교체하기 file 레이스89 2017.08.19 592
1017 기타 [All RGSS] FileTest (Unicode) file Cheapmunk 2014.12.29 611
1016 맵/타일 맵연결 스크립트 (데모첨부) file 게임애호가 2018.06.15 684
1015 기타 에어리어 설정 by RPG Advocate 백호 2009.02.22 709
1014 기타 Boat Script 백호 2009.02.21 729
1013 기타 Localization by ForeverZer0, KK20 습작 2013.04.26 738
1012 기타 Materia System file 백호 2009.02.21 749
1011 기타 Real-Time Day Night 3 백호 2009.02.22 751
1010 스킬 SG_Escape Only Skills by sandgolem (SDK호환) 백호 2009.02.22 752
1009 기타 killer님 요청하신 스크립트 두번째입니다. 나뚜루 2009.02.21 758
1008 기타 Letter by Letter Message Window by slipknot@rmxp.org (SDK호환) 1 file 백호 2009.02.22 760
1007 기타 Advanced Gold display by Dubealex 1 백호 2009.02.22 761
1006 스킬 Skill Requirements by SephirothSpawn (SDK호환) file 백호 2009.02.22 763
1005 기타 Sphere Grid System file 백호 2009.02.21 765
1004 기타 AMS-Advanced Message Script Edited by Dubleax 3 file 백호 2009.02.21 765
1003 스킬 SG_Skill Break by sandgolem (SDK호환) 백호 2009.02.22 772
1002 기타 Activation_system file 백호 2009.02.22 775
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52