XP 스크립트

#==============================================================================
# ■  Window_Message
#------------------------------------------------------------------------------
# 문장 표시에 사용하는 메세지 윈도우입니다.
#==============================================================================

class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize
    super(80, 304, 480, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    @update_text = true #걳
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    self.active = false
    self.index = -1
  end
  #--------------------------------------------------------------------------
  # ● 해방
  #--------------------------------------------------------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● 메세지 종료 처리
  #--------------------------------------------------------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    @update_text = true #★
    # 표시중 플래그를 클리어
    @contents_showing = false
    # 메세지 콜백을 부르는
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end
    # 문장 , 선택사항 , 수치 입력에 관한 변수를 클리어
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0
    # 골드 윈도우를 개방
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
  end
  #--------------------------------------------------------------------------
  # ★ 리프레쉬
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    @x = @y = 0
    @cursor_width = 0
    # 선택사항이라면 인덴트를 실시하는
    if $game_temp.choice_start == 0
      @x = 8
    end
    # 표시 기다리는 메세지가 있는 경우 
    if $game_temp.message_text != nil
      @text = $game_temp.message_text
      # 제어 문자 처리
      begin
        last_text = @text.clone
        @text.gsub!(/\[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
      end until @text == last_text
      @text.gsub!(/\[Nn][([0-9]+)]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 편의상 ,"\\" 을 "00" 에 변환
      @text.gsub!(/\\/) { "00" }
      # "\C" 을 "01" 에 ,"\G" 를 "02" 에 변환
      @text.gsub!(/\[Cc][([0-9]+)]/) { "01[#{$1}]" }
      @text.gsub!(/\[Gg]/) { "02" }
    end
  end
  #--------------------------------------------------------------------------
  # ● 윈도우의 위치와 불투명도의 설정
  #--------------------------------------------------------------------------
  def reset_window
    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
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = 160
  end
  #--------------------------------------------------------------------------
  # ★ 문자의 갱신
  #--------------------------------------------------------------------------
  def update_text
  # 표시 기다리는 메세지가 있는 경우
    if @text != nil
      # c 에 1 문자를 취득 (문자를 취득할 수 없게 될 때까지 루프)
      while ((c = @text.slice!(/./m)) != nil)
      # \ 의 경우
        if c == "00"
          # 본래의 문자에 되돌리는
          c = "\"
        end
        # C[n] 의 경우
        if c == "01"
          # 문자색을 변경
          @text.sub!(/[([0-9]+)]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
        end
        # G 의 경우
        if c == "02"
          # 골드 윈도우를 작성
          if @gold_window == nil
            @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
          # 다음의 문자에
          next
        end
        # 개행 문자의 경우
        if c == "n"
          # 선택사항이라면 커서의 폭을 갱신
          if @y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, @x].max
          end
          # y 에 1 를 가산
          @y += 1
          @x = 0
          # 선택사항이라면 인덴트를 실시하는
          if @y >= $game_temp.choice_start
            @x = 8
          end
          # 다음의 문자에
          next
        end
        # 문자를 묘화
        self.contents.draw_text(4 + @x, 32 * @y, 40, 32, c)
        # x 에 묘화 한 문자의 폭을 가산
        @x += self.contents.text_size(c).width
        # 결정 SE 을 연주
        $game_system.se_play($data_system.decision_se)
        return
      end
    end
    # 선택사항의 경우
    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
    @update_text = false #★
  end
  #-----------------------------------------------------------------------------------------
  # ● 프레임 갱신
  #------------------------------------------------------------------------------------
  def update
    super
    # 용명의 경우★
    if @fade_in
      self.contents_opacity = 255
      if @input_number_window != nil
        @input_number_window.contents_opacity = 255
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
    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 @update_text
        update_text
        return
      end
      # 선택사항의 표시중이 아니면 포즈 싸인을 표시
      if $game_temp.choice_max == 0
        self.pause = true
      end
      if self.pause == true && Input.dir4 != 0
        terminate_message
      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
        terminate_message if self.pause == true
      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
        terminate_message
      end
      return
    end
    # 페이드아웃중 이외로 표시 기다리는 메세지나 선택사항이 있는 경우
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      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 = 0
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 커서의 구형 갱신
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
end

Who's 백호

?

이상혁입니다.

http://elab.kr

Comment '8'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
661 이동 및 탈것 Super Simple Vehicle System Enhanced 8.0 by DerVVulfman 1 Alkaid 2010.12.12 1956
660 변수/스위치 Switchless Common Events by PK8(XP/VX/VXA) Alkaid 2012.09.15 1199
659 메뉴 Tales Of Symphonia Menu 8 file 백호 2009.02.21 1744
658 기타 Tax Script 1.2 by The Darklord@rmxp.org 2 file 백호 2009.02.22 1130
657 메시지 Taylor's Simple Message System 2000 Alkaid 2020.07.05 241
656 기타 Terrain Encounter Areas by SephirothSpawn 백호 2009.02.22 778
655 기타 Tetris Attack by trickster 1 file 백호 2009.02.22 986
654 기타 Text Scroll by Dubealex (Release 3) 2 file 백호 2009.02.22 939
653 기타 Text to RGSS by DerVVulfman Alkaid 2011.04.18 1319
652 영상 The AVI Player 1.3 by DerVVulfman 3 Alkaid 2010.10.08 1706
651 기타 The General Monster Generator 1.1 by DerVVulfman 1 file Alkaid 2011.03.02 1496
650 전투 The Lycan ABS by DerVVulfman Alkaid 2013.07.22 1895
649 변수/스위치 The Self Data Suite by PK8 (XP/VX/VXA) Alkaid 2012.09.14 1232
648 기타 Trailing Characters ver.1 by SephirothSpawn 6 file 백호 2009.02.22 1551
647 그래픽 Transition Pack 1.11 by Fantasist Alkaid 2011.01.22 2043
646 스킬 Trickster's Bag of Skill Effects file 백호 2009.02.22 1077
645 스킬 Trickster's Bag of Skill Effects (SDK 필요) Alkaid 2012.09.17 1289
644 이동 및 탈것 Trickster's Caterpillar System 0.99 3 Alkaid 2010.12.23 1590
643 메뉴 Trickster's Plug 'n' Play Gradient Bar 2.0 1 file 백호 2009.02.22 2051
642 전투 Trickster씨의 전투 시스템 (SDK 필수?) Alkaid 2012.09.18 3256
Board Pagination Prev 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 52 Next
/ 52