스킬

스킬 도감

by 백호 posted Feb 21, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
#스킬 도감
#
#기본적으로 설정 방법법은 아이템 도감과 같습니다.
#스킬의 카테고리명을 @skill_kind_name 로 설정.
#@kind_row (으)로 설정한 카테고리명을 늘어놓고 싶은 차례로 설정.
#@skill_kind_element_name 에는 @skill_kind_name 에 대응한
#카테고리 판정용의 속성명을 설정해 주세요.
#
#이벤트 커멘드 「스크립트」로
#skill_book_max 로 최대 등록수
#skill_book_now 로 현재 등록수
#skill_book_comp로 완성율(소수점 이하 잘라버림)
#을 취득할 수 있습니다.
#그리고 ,skill_book_max("카테고리명")과 같이
#카테고리명을 인수에 건네주면(자) , 그 카테고리의
#최대 등록수를 취득할 수 있습니다.
#현재 등록수 , 완성율도 같습니다.
#
#2005.2.21
#·몰래 버그 수정입니다.
#변경점 skill_book_category_now
#
#2005.3.9
#·위력0시에는 「-」이라고 표기할까 선택할 수 있도록(듯이).
#
#2005.11.26
#·레이팅0의 스테이트를 표시하지 않게 선택 가능하게.

module Skill_Book_Config
  SHOW_COMPLETE_TYPE = 3        #도감 완성율의 표시 방법
                                #0:표시 없음 1:현재수/최대수 2:%표시 3:양쪽 모두
  DRAW_POW_ZERO = false          #위력0때 그대로 표시하는지 어떤지
                                #true:하는 false:하지 않는
  ZERO_POW_TEXT = "-"          #위력0때 표시하지 않는 경우 대신에 표시하는 말
  SHOW_ZERO_RATING_STATE = false #레이팅0의 스테이트도 표시해?
                                #true:하는 false:하지 않는
end

class Window_SkillBook_Info < Window_Selectable
  include Skill_Book_Config
end

class Data_SkillBook
  attr_reader :skill_kind_name
  attr_reader :kind_row
  attr_reader :skill_id_data
  attr_reader :skill_kind_element_name
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize
   
    # ↓이하 , 설정용의 여러 가지
    @skill_kind_name = ["기술", "마술", "그 외"]
    @kind_row = ["기술",
                "마술",
                "그 외"]
    @skill_kind_element_name = ["물리 스킬", "마술 스킬", "그 외 스킬"]
    # ↑코코까지
   
    @skill_id_data = skill_book_id_set
  end
  #--------------------------------------------------------------------------
  # ● 지정된 종류 표시명의 정보를 돌려주는
  #--------------------------------------------------------------------------
  def kind_search(name)
    if @skill_kind_name.include?(name)
      return [0, @skill_kind_name.index(name)]
    end
  end
  #--------------------------------------------------------------------------
  # ● 도감용 등록 무시 속성 취득
  #--------------------------------------------------------------------------
  def no_add_element
    no_add = 0
    # 등록 무시의 속성ID을 취득
    for i in 1...$data_system.elements.size
      if $data_system.elements[i] =~ /도감 등록 무효/
        no_add = i
        break
      end
    end
    return no_add
  end
 
  #--------------------------------------------------------------------------
  # ● 지정된 속성명의 것ID을 돌려주는
  #--------------------------------------------------------------------------
  def element_search(element_name)
    return nil if element_name == nil
    for i in 1...$data_system.elements.size
      if $data_system.elements[i] =~ /^#{element_name}/
        return i
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # ● 도감용 스킬ID설정
  #--------------------------------------------------------------------------
  def skill_book_id_set
    data = []
    no_add = no_add_element
    if @skill_kind_element_name.size == 0
      data[0] = [0]
      for i in 1...$data_skills.size
        skill = $data_skills[i]
        next if skill.name == ""
        next if skill.element_set.include?(no_add)
        data[0].push(skill.id)
      end
    else
      for i in 0...@skill_kind_element_name.size
        data[i] = [0]
        element_id = element_search(@skill_kind_element_name[i])
        for j in 1...$data_skills.size
          skill = $data_skills[j]
          next if skill.name == ""
          next if skill.element_set.include?(no_add)
          if skill.element_set.include?(element_id)
            data[i].push(skill.id)
          end
        end
      end
    end
    return data
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 스킬을 기억하는
  #    skill_id : 스킬 ID
  #--------------------------------------------------------------------------
  alias game_actor_skill_book_learn_skill learn_skill
  def learn_skill(skill_id)
    game_actor_skill_book_learn_skill(skill_id)
    $game_system.add_skill_count(skill_id)
  end
end

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 기본 속성 표시
  #--------------------------------------------------------------------------
  def draw_attack_element(x, y, element_set)
    elem_temp = []
    for i in element_set
      elem = $data_system.elements[i]
      elem_temp.push("염") if elem == "염"
      elem_temp.push("빙") if elem == "빙"
      elem_temp.push("뢰") if elem == "뢰"
      elem_temp.push("수") if elem == "수"
      elem_temp.push("토") if elem == "토"
      elem_temp.push("풍") if elem == "풍"
      elem_temp.push("광") if elem == "광"
      elem_temp.push("암") if elem == "암"
    end
    if elem_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "없음")
      return
    end
    ox = 0
    for name in elem_temp
      cx = self.contents.text_size(name).width
      self.contents.draw_text(x+ox, y, cx, 32, name)
      ox += cx+8
    end
  end
  #--------------------------------------------------------------------------
  # ● 무기 속성 표시
  #--------------------------------------------------------------------------
  def draw_attack_wp_element(x, y, element_set)
    elem_temp = []
    for i in element_set
      elem = $data_system.elements[i]
      elem_temp.push("참") if elem == "참"
      elem_temp.push("타") if elem == "타"
      elem_temp.push("돌") if elem == "돌"
      elem_temp.push("쏘아 맞히고") if elem == "쏘아 맞히고"
      elem_temp.push("마") if elem == "마"
    end
    if elem_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "없음")
      return
    end
    ox = 0
    for name in elem_temp
      cx = self.contents.text_size(name).width
      self.contents.draw_text(x+ox, y, cx, 32, name)
      ox += cx+8
    end
  end
  #--------------------------------------------------------------------------
  # ● 특공 속성 표시
  #--------------------------------------------------------------------------
  def draw_attack_weak_element(x, y, element_set)
    elem_temp = []
    for i in element_set
      elem = $data_system.elements[i]
      elem_temp.push("불사") if elem == "대 불사"
      elem_temp.push("뱀")  if elem == "대 뱀"
      elem_temp.push("수서") if elem == "대 수서"
      elem_temp.push("수")  if elem == "대 수"
      elem_temp.push("귀")  if elem == "대 귀"
      elem_temp.push("조")  if elem == "대 새"
      elem_temp.push("악마") if elem == "대 악마"
      elem_temp.push("천사") if elem == "대 천사"
    end
    if elem_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "없음")
      return
    end
    ox = 0
    for name in elem_temp
      cx = self.contents.text_size(name).width
      self.contents.draw_text(x+ox, y, cx, 32, name)
      ox += cx+8
    end
  end
  #--------------------------------------------------------------------------
  # ● 스테이트 부여 표시
  #--------------------------------------------------------------------------
  def draw_attack_add_state(x, y, plus_state_set)
    state_temp = []
    for i in plus_state_set
      state = $data_states[i]
      if state.name != "" and (Skill_Book_Config::SHOW_ZERO_RATING_STATE or state.rating >= 1)
        state_temp.push(state.name)
      end
    end
    if state_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "없음")
      return
    end
    ox = 0
    oy = 0
    for name in state_temp
      cx = self.contents.text_size(name).width
      if ox + cx + 4 >= self.contents.width - 128
        ox = 0
        oy += 1
      end
      self.contents.draw_text(x+ox, y+oy*32, cx, 32, name)
      ox += cx+8
    end
  end
  #--------------------------------------------------------------------------
  # ● 효과 범위를 돌려주는
  #--------------------------------------------------------------------------
  def draw_scope(scope)
    case scope
    when 0
      return "없음"
    when 1
      return "적 단체"
    when 2
      return "적 전체"
    when 3
      return "아군 단체"
    when 4
      return "아군 전체"
    when 5
      return "아군 단체"
    when 6
      return "아군 전체"
    when 7
      return "사용자"
    end
  end
end

class Game_Temp
  attr_accessor :skill_book_data
  alias temp_skill_book_data_initialize initialize
  def initialize
    temp_skill_book_data_initialize
    @skill_book_data = Data_SkillBook.new
  end
end

class Game_System
  attr_accessor :skill_count              # 입수 스킬 정보(도감용)
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  alias game_system_skill_book_initialize initialize
  def initialize
    game_system_skill_book_initialize
    @skill_count = {}
  end
  #--------------------------------------------------------------------------
  # ● 스킬의 획득 정보의 추가(도감용)
  #    0:무 획득 1:획득제
  #--------------------------------------------------------------------------
  def add_skill_count(skill_id, type=0)
    if type == -1
      @skill_count[skill_id] = 0
    else
      @skill_count[skill_id] = 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 스킬 도감의 최대 등록수를 취득
  #--------------------------------------------------------------------------
  def skill_book_max
    kind_data = $game_temp.skill_book_data.skill_kind_name
    size = 0
    for kind in kind_data
      size += skill_book_category_max(kind)
    end
    return size
  end
  #--------------------------------------------------------------------------
  # ● 스킬 도감의 현재 등록수를 취득
  #--------------------------------------------------------------------------
  def skill_book_now
    kind_data = $game_temp.skill_book_data.skill_kind_name
    size = 0
    for kind in kind_data
      size += skill_book_category_now(kind)
    end
    return size
  end
  #--------------------------------------------------------------------------
  # ● 스킬 도감의 완성율을 취득
  #--------------------------------------------------------------------------
  def skill_book_complete_percentage
    s_max = skill_book_max.to_f
    s_now = skill_book_now.to_f
    comp = s_now / s_max * 100
    return comp.truncate
  end
  #--------------------------------------------------------------------------
  # ● 스킬 도감의 카테고리별 최대 등록수를 취득
  # category:카테고리명
  #--------------------------------------------------------------------------
  def skill_book_category_max(category)
    id_data = $game_temp.skill_book_data.skill_id_data.dup
    index = $game_temp.skill_book_data.kind_search(category)[1]
    size = id_data[index].size - 1
    return size
  end
  #--------------------------------------------------------------------------
  # ● 스킬 도감의 카테고리별 현재 등록수를 취득
  # category:카테고리명
  #--------------------------------------------------------------------------
  def skill_book_category_now(category)
    now_skill_info = @skill_count.keys
    index = $game_temp.skill_book_data.kind_search(category)[1]
    # 등록 무시의 속성ID을 취득
    no_add = $game_temp.skill_book_data.no_add_element
    elename = $game_temp.skill_book_data.skill_kind_element_name[index]
    element_id = $game_temp.skill_book_data.element_search(elename)
    new_skill_info = []
    for i in now_skill_info
      skill = $data_skills[i]
      next if skill == nil
      next if skill.name == ""
      next if skill.element_set.include?(no_add)
      if element_id == nil or skill.element_set.include?(element_id)
        new_skill_info.push(skill.id)
      end
    end
    return new_skill_info.size
  end
  #--------------------------------------------------------------------------
  # ● 스킬 도감의 카테고리별 완성율을 취득
  # category:카테고리명
  #--------------------------------------------------------------------------
  def skill_book_category_complete_percentage(category)
    s_max = skill_book_category_max(category).to_f
    s_now = skill_book_category_now(category).to_f
    comp = s_now / s_max * 100
    return comp.truncate
  end
end

class Interpreter
  def skill_book_max(category=nil)
    if category == nil
      return $game_system.skill_book_max
    else
      return $game_system.skill_book_category_max(category)
    end
  end
  def skill_book_now(category=nil)
    if category == nil
      return $game_system.skill_book_now
    else
      return $game_system.skill_book_category_now(category)
    end
  end
  def skill_book_comp(category=nil)
    if category == nil
      return $game_system.skill_book_complete_percentage
    else
      return $game_system.skill_book_category_complete_percentage(category)
    end
  end
end

class Window_SkillBook < Window_Selectable
  attr_reader  :data
  attr_reader  :item_kind
  attr_reader  :item_index
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize(index=0)
    super(0, 64, 640, 416)
    @column_max = 2
    @book_data = $game_temp.skill_book_data
    @data = data_set(index)
    @data.shift
    #@data.sort!
    @item_max = @data.size
    @item_kind = index
    self.index = 0
    #refresh
  end
  def new_data_set(index)
    @data = data_set(index)
    @data.shift
    #@data.sort!
    @item_max = @data.size
  end
  #--------------------------------------------------------------------------
  # ● 입수 데이터를 취득
  #--------------------------------------------------------------------------
  def data_set(index)
    kind_row_data = @book_data.kind_search(@book_data.kind_row[index])
    @item_kind = kind_row_data[0]
    @item_index = kind_row_data[1]
    data = []
    case @item_kind
    when 0
      data = @book_data.skill_id_data[@item_index].dup
    end
    return data
  end
  #--------------------------------------------------------------------------
  # ● 표시 허가 취득
  #--------------------------------------------------------------------------
  def show?(kind, id)
    case kind
    when 0
      if $game_system.skill_count[id] == 0 or $game_system.skill_count[id] == nil
        return false
      else
        return true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 아이템 취득
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● 리프레쉬
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    #항목수가 0 나오지 않으면 비트 맵을 작성해 , 전 항목을 묘화
    return if @item_max == 0
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 항목의 묘화
  #    index : 항목 번호
  #--------------------------------------------------------------------------
  def draw_item(index)
    case @item_kind
    when 0
      item = $data_skills[@data[index]]
      id = @book_data.skill_id_data[@item_index].index(item.id)
    end
    return if item == nil
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, 32, 32, id.to_s)
    if show?(@item_kind, item.id)
      bitmap = RPG::Cache.icon(item.icon_name)
      opacity = 255
      self.contents.blt(x+48, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
      self.contents.draw_text(x+48 + 28, y, 212, 32, item.name, 0)
    else
      self.contents.draw_text(x+48 + 28, y, 212, 32, "-----", 0)
      return
    end
  end
end

class Window_SkillBook_Info < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0+64+64, 640, 480-64-64)
    @book_data = $game_temp.skill_book_data
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = -1
  end
  #--------------------------------------------------------------------------
  # ● 리프레쉬
  #--------------------------------------------------------------------------
  def refresh(item_id, item_kind, item_index)
    self.contents.clear
    self.contents.font.size = 22
    case item_kind
    when 0
      draw_skill_info(item_id, item_index)
    end
  end
  #--------------------------------------------------------------------------
  # ● 스킬 묘화
  #--------------------------------------------------------------------------
  def draw_skill_info(item_id, item_index)
    item = $data_skills[item_id]
    rect = Rect.new(4, 0, 160, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = 255
    self.contents.blt(4+48, 0 + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.font.color = normal_color
    id = @book_data.skill_id_data[item_index].index(item.id)
    self.contents.draw_text(4, 0, 32, 32, id.to_s)
    self.contents.draw_text(4+48 + 28, 0, 212, 32, item.name, 0)
   
    cost = item.sp_cost.to_s
    self.contents.draw_text(4+48 + 28 + 232, 0, 48, 32, cost.to_s, 2)
   
    #skill_kind = skill_kind_name(item.element_set)
    #self.contents.draw_text(320+96, 0, 160, 32, skill_kind, 0)
    self.contents.font.color = text_color(2)
    self.contents.draw_text(4, 32, 48, 32, "위력", 0)
    self.contents.font.color = normal_color
    if item.power == 0 and DRAW_POW_ZERO == false
      pow = ZERO_POW_TEXT
    else
      pow = item.power.to_s
    end
    self.contents.draw_text(4+48, 32, 48, 32, pow, 2)
   
    self.contents.font.color = system_color
    self.contents.draw_text(4, 64, 48, 32, "범위", 0)
    self.contents.font.color = normal_color
    self.contents.draw_text(4+96+16, 64, 128, 32, draw_scope(item.scope), 0)
   
    self.contents.font.color = system_color
    self.contents.draw_text(4, 96, 96, 32, "기본 속성")
    self.contents.draw_text(4, 128, 96, 32, "특공 속성")
    self.contents.draw_text(4, 160, 96, 32, "부여 스테이트")
    self.contents.font.color = normal_color
    draw_attack_element(4+96+16, 96, item.element_set)
    draw_attack_weak_element(4+96+16, 128, item.element_set)
    draw_attack_add_state(4+96+16, 160, item.plus_state_set)
   
    @help_window.set_text(item.description)
  end
  #--------------------------------------------------------------------------
  # ● 헬프 텍스트 갱신
  #--------------------------------------------------------------------------
  def update_help
    #더미
  end
end


class Scene_SkillBook
  include Skill_Book_Config
  #--------------------------------------------------------------------------
  # ● 메인 처리
  #--------------------------------------------------------------------------
  def main
    # 윈도우를 작성
    @title_window = Window_Base.new(0, 0, 640, 64)
    @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
    @title_window.contents.draw_text(4, 0, 320, 32, "스킬 도감", 0)
    draw_comp
    @main_window = Window_SkillBook.new
    @main_window.active = false
    @main_window.index = -1
    @help_window = Window_Help.new
    @help_window.z = 110
    @help_window.y = 64
    @help_window.visible = false
    command = $game_temp.skill_book_data.kind_row
    @kind_window = Window_Command.new(160, command)
    @kind_window.z = 110
    @kind_window.x = 320 - @kind_window.width / 2
    @kind_window.y = 240 - @kind_window.height / 2
    @kind_window.active = true
    # 인포메이션 윈도우를 작성 (불가시·비액티브하게 설정)
    @info_window = Window_SkillBook_Info.new
    @info_window.z = 110
    @info_window.visible = false
    @info_window.active = false
    # 헬프 윈도우를 관련짓고
    @info_window.help_window = @help_window
    @visible_index = 0
    @now_kind = nil
    # 트란지션 실행
    Graphics.transition
    # 메인 루프
    loop do
      # 게임 화면을 갱신
      Graphics.update
      # 입력 정보를 갱신
      Input.update
      # 프레임 갱신
      update
      # 화면이 바뀌면(자) 루프를 중단
      if $scene != self
        break
      end
    end
    # 트란지션 준비
    Graphics.freeze
    # 윈도우를 해방
    @title_window.dispose
    @help_window.dispose
    @main_window.dispose
    @kind_window.dispose
    @info_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    # 윈도우를 갱신
    #@help_window.update
    @main_window.update
    @kind_window.update
    @info_window.update
    if @info_window.active
      update_info
      return
    end
    # 메인 윈도우가 액티브의 경우: update_target 를 부르는
    if @main_window.active
      update_main
      return
    end
    # 종류 윈도우가 액티브의 경우: update_kind 를 부르는
    if @kind_window.active
      update_kind
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (종류 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_kind
    # C 버튼이 밀렸을 경우
    if Input.trigger?(Input::C)
      # 결정 SE 을 연주
      $game_system.se_play($data_system.decision_se)
      if @now_kind != @kind_window.index
        @main_window.new_data_set(@kind_window.index)
        @main_window.refresh
        @now_kind = @kind_window.index
      end
      subtitle = $game_temp.skill_book_data.kind_row[@kind_window.index]
      title = "스킬 도감:"+subtitle
      @title_window.contents.clear
      @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
      @title_window.contents.draw_text(4, 0, 320, 32, title, 0)
      draw_comp(subtitle)
      @kind_window.active = false
      @kind_window.visible = false
      @main_window.active = true
      @main_window.index = 0
      return
    end
    # B 버튼이 밀렸을 경우
    if Input.trigger?(Input::B)
      # 캔슬 SE 을 연주
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (메인 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_main
    # B 버튼이 밀렸을 경우
    if Input.trigger?(Input::B)
      # 캔슬 SE 을 연주
      $game_system.se_play($data_system.cancel_se)
      @main_window.active = false
      @kind_window.active = true
      @kind_window.visible = true
      @main_window.index = -1
      @title_window.contents.clear
      @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
      @title_window.contents.draw_text(4, 0, 320, 32, "스킬 도감", 0)
      draw_comp
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger?(Input::C)
      if @main_window.item == nil or
        @main_window.show?(@main_window.item_kind, @main_window.item) == false
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 결정 SE 을 연주
      $game_system.se_play($data_system.decision_se)
      @main_window.active = false
      @info_window.active = true
      @info_window.visible = true
      @visible_index = @main_window.index
      @info_window.refresh(@main_window.item, @main_window.item_kind, @main_window.item_index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (인포메이션 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_info
    # B 버튼이 밀렸을 경우
    if Input.trigger?(Input::B)
      # 캔슬 SE 을 연주
      $game_system.se_play($data_system.cancel_se)
      @main_window.active = true
      @info_window.active = false
      @info_window.visible = false
      @help_window.visible = false
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger?(Input::C)
      # 결정 SE 을 연주
      $game_system.se_play($data_system.decision_se)
      return
    end
    if Input.trigger?(Input::L)
      # 결정 SE 을 연주
      $game_system.se_play($data_system.decision_se)
      loop_end = false
      while loop_end == false
        if @visible_index != 0
          @visible_index -= 1
        else
          @visible_index = @main_window.data.size - 1
        end
        loop_end = true if @main_window.show?(@main_window.item_kind,@main_window.data[@visible_index])
      end
      id = @main_window.data[@visible_index]
      @info_window.refresh(id, @main_window.item_kind, @main_window.item_index)
      return
    end
    if Input.trigger?(Input::R)
      # 결정 SE 을 연주
      $game_system.se_play($data_system.decision_se)
      loop_end = false
      while loop_end == false
        if @visible_index != @main_window.data.size - 1
          @visible_index += 1
        else
        @visible_index = 0
        end
        loop_end = true if @main_window.show?(@main_window.item_kind,@main_window.data[@visible_index])
      end
      id = @main_window.data[@visible_index]
      @info_window.refresh(id, @main_window.item_kind, @main_window.item_index)
      return
    end
  end
  def draw_comp(category=nil)
    if SHOW_COMPLETE_TYPE != 0
      if category == nil
        case SHOW_COMPLETE_TYPE
        when 1
          s_now = $game_system.skill_book_now
          s_max = $game_system.skill_book_max
          text = s_now.to_s + "/" + s_max.to_s
        when 2
          comp = $game_system.skill_book_complete_percentage
          text = comp.to_s + "%"
        when 3
          s_now = $game_system.skill_book_now
          s_max = $game_system.skill_book_max
          comp = $game_system.skill_book_complete_percentage
          text = s_now.to_s + "/" + s_max.to_s + " " + comp.to_s + "%"
        end
      else
        case SHOW_COMPLETE_TYPE
        when 1
          s_now = $game_system.skill_book_category_now(category)
          s_max = $game_system.skill_book_category_max(category)
          text = s_now.to_s + "/" + s_max.to_s
        when 2
          comp = $game_system.skill_book_category_complete_percentage(category)
          text = comp.to_s + "%"
        when 3
          s_now = $game_system.skill_book_category_now(category)
          s_max = $game_system.skill_book_category_max(category)
          comp = $game_system.skill_book_category_complete_percentage(category)
          text = s_now.to_s + "/" + s_max.to_s + " " + comp.to_s + "%"
        end
      end
      if text != nil
        @title_window.contents.draw_text(320, 0, 288, 32,  text, 2)
      end
    end
  end
end