잡담

문제 스크립트

by 버질 posted Nov 06, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 많은 사람 파티 - KGC_LargeParty ◆ VX ◆
#_/    ◇ Last update : 2008/04/27 ◇
#_/----------------------------------------------------------------------------
#_/  5명 이상의 대규모 파티를 구축 가능하게 합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ 커스터마이즈 항목 - Customize ★
#==============================================================================

module KGC
module LargeParty
  # ◆ 파티 편성 허가를 나타내는 스윗치 번호
  #  이 스윗치의 ON/OFF 그리고 파티 편성의 허가/불허가 (을)를 바꿉니다.
  PARTYFORM_SWITCH          = 1
  # ◆ 전투중의 파티 편성 허가를 나타내는 스윗치 번호
  #  ↑(와)과 다른 번호를 지정하면, 전투중만의 교체 가부를 설정할 수 있습니다.
  BATTLE_PARTYFORM_SWITCH   = 1
  # ◆ 디폴트의 편성 허가 플래그
  #  true (으)로 하면, 「뉴 게임」선택시에 양쪽 모두의 파티 편성 허가 스윗치가
  #  자동적으로 ON (이)가 됩니다.
  DEFAULT_PARTYFORM_ENABLED = true

  # ◆ 전투 멤버 최대수 (디폴트치)
  #  5 이상으로 하면, 전투 화면의 스테이터스가 약간 봐 괴로워집니다.
  MAX_BATTLE_MEMBERS = 5
  # ◆ 파티 멤버 최대수
  #  Game_Party::MAX_MEMBERS (을)를 덧쓰기합니다.
  #  100 이상으로 하면 [Window_MenuStatus] 하지만 버그.
  MAX_MEMBERS = 99

  # ◆ 고정 멤버의 줄서 바꾸어를 금지
  #  스크립트로부터의 조작 이외에서는 줄서 바꾸어 할 수 없게 됩니다.
  FORBID_CHANGE_SHIFT_FIXED = false

  # ◆ 대기 멤버의 배경색
  #  색을 바꾸지 않는 경우는  Color.new(0, 0, 0, 0)
  STAND_BY_COLOR = Color.new(0, 0, 0, 128)
  # ◆ 고정 멤버의 배경색
  FIXED_COLOR    = Color.new(255, 128, 64, 96)
  # ◆ 줄서 바꾸어 때의 배경색
  SELECTED_COLOR = Color.new(64, 255, 128, 128)

  # ◆ 파티 편성 버튼 (메뉴 화면용)
  #  메뉴 화면에서 이 버튼을 누르면, 파티 편성 화면으로 이행합니다.
  #  사용하지 않는 경우는 nil
  MENU_PARTYFORM_BUTTON      = Input::A
  # ◆ 메뉴 화면에 파티 편성 커멘드를 추가한다
  #  추가하는 장소는, 메뉴 커멘드의 최하부입니다.
  #  다른 부분에 추가하고 싶으면,≪커스텀 메뉴 커멘드≫ (을)를 이용하십시오.
  USE_MENU_PARTYFORM_COMMAND = true
  # ◆ 메뉴 화면의 파티 편성 커멘드의 명칭
  VOCAB_MENU_PARTYFORM       = "Party"

  # ◆ 전투중에 파티 편성 커멘드를 사용한다
  #  추가하는 장소는, 파티 커멘드의 최하부( 「도망친다」의 아래)입니다.
  USE_BATTLE_PARTYFORM   = true
  # ◆ 전투중의 파티 편성 커멘드의 명칭
  VOCAB_BATTLE_PARTYFORM = "교체"

  # ◆ 편성 화면의 캐릭터 묘화 사이즈 [폭, 높이]
  #  액터의 보행 그래픽의 사이즈에 따라 고쳐 써 주세요.
  PARTY_FORM_CHARACTER_SIZE   = [40, 48]
  # ◆ 편성 화면의 전투 멤버 윈도우의 공난에 표시하는 텍스트
  BATTLE_MEMBER_BLANK_TEXT    = "EMPTY"
  # ◆ 편성 화면의 파티 멤버 윈도우의 최대행수
  #  스테이터스 윈도우가 화면에서는 봐 나오는 경우는,
  #  이 값을 1 (으)로 해 주세요.
  PARTY_MEMBER_WINDOW_ROW_MAX = 2
  # ◆ 편성 화면의 파티 멤버 윈도우에 전투 멤버를 표시한다
  SHOW_BATTLE_MEMBER_IN_PARTY = false
  # ◆ 편성 화면의 파티 멤버 윈도우의 공난에 표시하는 텍스트
  PARTY_MEMBER_BLANK_TEXT     = ""

  # ◆ 편성 화면의 캡션 윈도우의 폭
  CAPTION_WINDOW_WIDTH  = 192
  # ◆ 편성 화면의 전투 멤버 윈도우의 캡션
  BATTLE_MEMBER_CAPTION = "전투 멤버"

  if SHOW_BATTLE_MEMBER_IN_PARTY
    # ◆ 편성 화면의 파티 멤버 윈도우의 캡션
    #  SHOW_BATTLE_MEMBER_IN_PARTY = true 때
    PARTY_MEMBER_CAPTION = "파티 멤버"
  else
    # ◆ 편성 화면의 파티 멤버 윈도우의 캡션
    #  SHOW_BATTLE_MEMBER_IN_PARTY = false 때
    PARTY_MEMBER_CAPTION = "대기 멤버"
  end

  # ◆ 편성 확인 윈도우의 폭
  CONFIRM_WINDOW_WIDTH    = 160
  # ◆ 편성 확인 윈도우의 문자열
  #  ※커멘드수·차례를 변경하면 버그.
  CONFIRM_WINDOW_COMMANDS = ["완료", "중지", "취소"]

  # ◆ 숍 화면의 스테이터스 윈도우 스크롤시에 사용하는 버튼
  #  이 버튼을 누르고 있는 동안, 상하 버튼으로 스크롤 할 수 있습니다.
  #  스크롤을 무효로 하는 경우는 nil (을)를 지정.
  #  ≪헬프 윈도우 기능확장≫병용시는, 위에 도입한 것을 우선.
  SHOP_STATUS_SCROLL_BUTTON = Input::A

  # ◆ 대기 멤버 획득 경험치 비율【단위:‰(천분율 1‰=0.1%)】
  #  500 (이)라면 50.0% 입니다.
  STAND_BY_EXP_RATE = 500
  # ◆ 결과 화면에서 대기 멤버의 레벨업을 표시한다
  #  false (으)로 하면, 전투 멤버만 표시합니다.
  SHOW_STAND_BY_LEVEL_UP = true
  # ◆ 전투 이외에도 대기 멤버를 표시한다
  #  true  : 전투 이외에서는 항상 전원을 표시.
  #  false : 교체시 이외는, 대기 멤버를 없는 것으로서 취급한다.
  SHOW_STAND_BY_MEMBER_NOT_IN_BATTLE = true
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["LargeParty"] = true

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ KGC::Commands
#==============================================================================

module KGC
module Commands
  # 멤버의 소트 형식
  SORT_BY_ID    = 0  # ID순
  SORT_BY_NAME  = 1  # 이름순
  SORT_BY_LEVEL = 2  # 레벨순서

  module_function
  #--------------------------------------------------------------------------
  # ○ 파티 편성 화면의 호출
  #--------------------------------------------------------------------------
  def call_partyform
    return if $game_temp.in_battle
    $game_temp.next_scene = :partyform
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버 최대수를 설정
  #     value : 인원수 (생략 했을 경우는 디폴트치를 사용)
  #--------------------------------------------------------------------------
  def set_max_battle_member_count(value = nil)
    $game_party.max_battle_member_count = value
  end
  #--------------------------------------------------------------------------
  # ○ 파티 인원수가 가득한가
  #--------------------------------------------------------------------------
  def party_full?
    return $game_party.full?
  end
  #--------------------------------------------------------------------------
  # ○ 파티 편성 가부를 설정
  #     enabled : 유효 플래그 (생략시 : true)
  #--------------------------------------------------------------------------
  def permit_partyform(enabled = true)
    $game_switches[KGC::LargeParty::PARTYFORM_SWITCH] = enabled
  end
  #--------------------------------------------------------------------------
  # ○ 전투중의 파티 편성 가부를 설정
  #     enabled : 유효 플래그 (생략시 : true)
  #--------------------------------------------------------------------------
  def permit_battle_partyform(enabled = true)
    $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH] = enabled
  end
  #--------------------------------------------------------------------------
  # ○ 액터의 고정 상태를 설정
  #     actor_id : 액터 ID
  #     fixed    : 고정 플래그 (생략시 : true)
  #--------------------------------------------------------------------------
  def fix_actor(actor_id, fixed = true)
    $game_party.fix_actor(actor_id, fixed)
  end
  #--------------------------------------------------------------------------
  # ○ 줄대체
  #    멤버의 index1 번째와 index2 번째를 바꿔 넣는다
  #--------------------------------------------------------------------------
  def change_party_shift(index1, index2)
    $game_party.change_shift(index1, index2)
  end
  #--------------------------------------------------------------------------
  # ○ 멤버 정렬 (승순)
  #     sort_type : 소트 형식 (SORT_BY_xxx)
  #     reverse   : true (이)라면 내림차순
  #--------------------------------------------------------------------------
  def sort_party_member(sort_type = SORT_BY_ID, reverse = false)
    $game_party.sort_member(sort_type, reverse)
  end
  #--------------------------------------------------------------------------
  # ○ 대기 멤버의 ID (을)를 취득
  #--------------------------------------------------------------------------
  def get_stand_by_member_ids
    result = []
    $game_party.stand_by_members.each { |actor| result << actor.id }
    return result
  end
  #--------------------------------------------------------------------------
  # ○ 액터가 대기 멤버인가
  #     actor_id : 액터 ID
  #--------------------------------------------------------------------------
  def stand_by_member?(actor_id)
    return get_stand_by_member_ids.include?(actor_id)
  end
  #--------------------------------------------------------------------------
  # ○ 액터를 전투 멤버에 가세한다
  #     actor_id : 액터 ID
  #     index    : 추가 위치 (생략시는 최후미)
  #--------------------------------------------------------------------------
  def add_battle_member(actor_id, index = nil)
    $game_party.add_battle_member(actor_id, index)
  end
  #--------------------------------------------------------------------------
  # ○ 액터를 전투 멤버로부터 제외한다
  #     actor_id : 액터 ID
  #--------------------------------------------------------------------------
  def remove_battle_member(actor_id)
    $game_party.remove_battle_member(actor_id)
  end
  #--------------------------------------------------------------------------
  # ○ 고정 액터 이외를 전투 멤버로부터 제외한다
  #--------------------------------------------------------------------------
  def remove_all_battle_member
    $game_party.all_members.each { |actor|
      $game_party.remove_battle_member(actor.id)
    }
  end
  #--------------------------------------------------------------------------
  # ○ 랜덤 출격
  #--------------------------------------------------------------------------
  def random_launch
    new_battle_members = $game_party.fixed_members
    candidates = $game_party.all_members - new_battle_members
    num = [$game_party.max_battle_member_count - new_battle_members.size,
      candidates.size].min
    return if num <= 0

    # 랜덤에 선택한다
    ary = (0...candidates.size).to_a.sort_by { rand }
    ary[0...num].each { |i| new_battle_members << candidates[i] }
    $game_party.set_battle_member(new_battle_members)
  end
end
end

class Game_Interpreter
  include KGC::Commands
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Vocab
#==============================================================================

module Vocab
  # 「파티 편성」커멘드명 (메뉴)
  def self.partyform
    return KGC::LargeParty::VOCAB_MENU_PARTYFORM
  end

  # 「파티 편성」커멘드명 (전투)
  def self.partyform_battle
    return KGC::LargeParty::VOCAB_BATTLE_PARTYFORM
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 파티내 인덱스 취득
  #--------------------------------------------------------------------------
  def party_index
    return $game_party.all_members.index(self)
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버나 판정
  #--------------------------------------------------------------------------
  def battle_member?
    return $game_party.battle_members.include?(self)
  end
  #--------------------------------------------------------------------------
  # ○ 고정 멤버나 판정
  #--------------------------------------------------------------------------
  def fixed_member?
    return $game_party.fixed_members.include?(self)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Party
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # ● 정수
  #--------------------------------------------------------------------------
  MAX_MEMBERS = KGC::LargeParty::MAX_MEMBERS  # 최대 파티 인원수
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  alias initialize_KGC_LargeParty initialize
  def initialize
    initialize_KGC_LargeParty

    @max_battle_member_count = nil
    @battle_member_count = 0
    @fixed_actors = []
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버 최대수취득
  #--------------------------------------------------------------------------
  def max_battle_member_count
    if @max_battle_member_count == nil
      return KGC::LargeParty::MAX_BATTLE_MEMBERS
    else
      return @max_battle_member_count
    end
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버 최대수변경
  #--------------------------------------------------------------------------
  def max_battle_member_count=(value)
    if value.is_a?(Integer)
      value = [value, 1].max
    end
    @max_battle_member_count = value
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버수취득
  #--------------------------------------------------------------------------
  def battle_member_count
    if @battle_member_count == nil
      @battle_member_count = @actors.size
    end
    @battle_member_count =
      [@battle_member_count, @actors.size, max_battle_member_count].min
    return @battle_member_count
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버수설정
  #--------------------------------------------------------------------------
  def battle_member_count=(value)
    @battle_member_count = [[value, 0].max,
      @actors.size, max_battle_member_count].min
  end
  #--------------------------------------------------------------------------
  # ● 멤버의 취득
  #--------------------------------------------------------------------------
  alias members_KGC_LargeParty members
  def members
    if $game_temp.in_battle ||
        !KGC::LargeParty::SHOW_STAND_BY_MEMBER_NOT_IN_BATTLE
      return battle_members
    else
      return members_KGC_LargeParty
    end
  end
  #--------------------------------------------------------------------------
  # ○ 전멤버의 취득
  #--------------------------------------------------------------------------
  def all_members
    return members_KGC_LargeParty
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버의 취득
  #--------------------------------------------------------------------------
  def battle_members
    result = []
    battle_member_count.times { |i| result << $game_actors[@actors[i]] }
    return result
  end
  #--------------------------------------------------------------------------
  # ○ 대기 멤버의 취득
  #--------------------------------------------------------------------------
  def stand_by_members
    return (all_members - battle_members)
  end
  #--------------------------------------------------------------------------
  # ○ 고정 멤버의 취득
  #--------------------------------------------------------------------------
  def fixed_members
    result = []
    @fixed_actors.each { |i| result << $game_actors[i] }
    return result
  end
  #--------------------------------------------------------------------------
  # ● 초기 파티의 셋업
  #--------------------------------------------------------------------------
  alias setup_starting_members_KGC_LargeParty setup_starting_members
  def setup_starting_members
    setup_starting_members_KGC_LargeParty

    self.battle_member_count = @actors.size
  end
  #--------------------------------------------------------------------------
  # ● 전투 테스트용 파티의 셋업
  #--------------------------------------------------------------------------
  alias setup_battle_test_members_KGC_LargeParty setup_battle_test_members
  def setup_battle_test_members
    setup_battle_test_members_KGC_LargeParty

    self.battle_member_count = @actors.size
  end
  #--------------------------------------------------------------------------
  # ○ 멤버의 신규 설정
  #     new_member : 새로운 멤버
  #--------------------------------------------------------------------------
  def set_member(new_member)
    @actors = []
    new_member.each { |actor| @actors << actor.id }
  end
  #--------------------------------------------------------------------------
  # ○ 전투 멤버의 신규 설정
  #     new_member : 새로운 전투 멤버
  #--------------------------------------------------------------------------
  def set_battle_member(new_member)
    new_battle_member = []
    new_member.each { |actor|
      @actors.delete(actor.id)
      new_battle_member << actor.id
    }
    @actors = new_battle_member + @actors
    self.battle_member_count = new_member.size
  end
  #--------------------------------------------------------------------------
  # ○ 파티 편성을 허가하고 있을까 판정
  #--------------------------------------------------------------------------
  def partyform_enable?
    return $game_switches[KGC::LargeParty::PARTYFORM_SWITCH]
  end
  #--------------------------------------------------------------------------
  # ○ 전투중의 파티 편성을 허가하고 있을까 판정
  #--------------------------------------------------------------------------
  def battle_partyform_enable?
    return false unless partyform_enable?
    return $game_switches[KGC::LargeParty::BATTLE_PARTYFORM_SWITCH]
  end
  #--------------------------------------------------------------------------
  # ○ 멤버가 가득한가 판정
  #--------------------------------------------------------------------------
  def full?
    return (@actors.size >= MAX_MEMBERS)
  end
  #--------------------------------------------------------------------------
  # ○ 고정 액터나 판정
  #     actor_id : 판정하는 액터의 ID
  #--------------------------------------------------------------------------
  def actor_fixed?(actor_id)
    return @fixed_actors.include?(actor_id)
  end
  #--------------------------------------------------------------------------
  # ● 액터를 가세한다
  #     actor_id : 액터 ID
  #--------------------------------------------------------------------------
  alias add_actor_KGC_LargeParty add_actor
  def add_actor(actor_id)
    last_size = @actors.size

    add_actor_KGC_LargeParty(actor_id)

    if last_size < @actors.size
      self.battle_member_count += 1
    end
  end
  #--------------------------------------------------------------------------
  # ○ 액터를 전투 멤버에 가세한다
  #     actor_id : 액터 ID
  #     index    : 추가 위치 (생략시는 최후미)
  #--------------------------------------------------------------------------
  def add_battle_member(actor_id, index = nil)
    return unless @actors.include?(actor_id)  # 파티에 없다
    if index == nil
      return if battle_members.include?($game_actors[actor_id])  # 출격이 끝난 상태
      return if battle_member_count == max_battle_member_count   # 인원수가 최대
      index = battle_member_count
    end

    @actors.delete(actor_id)
    @actors.insert(index, actor_id)
    self.battle_member_count += 1
  end
  #--------------------------------------------------------------------------
  # ○ 액터를 전투 멤버로부터 제외한다
  #     actor_id : 액터 ID
  #--------------------------------------------------------------------------
  def remove_battle_member(actor_id)
    return unless @actors.include?(actor_id)  # 파티에 없다
    return if actor_fixed?(actor_id)          # 고정이 끝난 상태
    return if stand_by_members.include?($game_actors[actor_id])  # 대기중

    @actors.delete(actor_id)
    @actors.push(actor_id)
    self.battle_member_count -= 1
  end
  #--------------------------------------------------------------------------
  # ○ 액터의 고정 상태를 설정
  #     actor_id : 액터 ID
  #     fixed    : 고정 플래그 (생략시 : false)
  #--------------------------------------------------------------------------
  def fix_actor(actor_id, fixed = false)
    return unless @actors.include?(actor_id)  # 파티에 없다

    if fixed
      # 고정
      unless @fixed_actors.include?(actor_id)
        @fixed_actors << actor_id
        unless battle_members.include?($game_actors[actor_id])
          self.battle_member_count += 1
        end
      end
      # 강제 출격
      apply_force_launch
    else
      # 고정 해제
      @fixed_actors.delete(actor_id)
    end
    $game_player.refresh
  end
  #--------------------------------------------------------------------------
  # ○ 강제 출격 적용
  #--------------------------------------------------------------------------
  def apply_force_launch
    while (fixed_members - battle_members).size > 0
      # 고정 상태가 아닌 멤버를 적당하게 가져와 교체
      actor1 = stand_by_members.find { |a| @fixed_actors.include?(a.id) }
      actor2 = battle_members.reverse.find { |a| !@fixed_actors.include?(a.id) }
      index1 = @actors.index(actor1.id)
      index2 = @actors.index(actor2.id)
      @actors[index1], @actors[index2] = @actors[index2], @actors[index1]

      # 전투 멤버가 전원 고정되면 돌아온다 (엔들레스 루프 방지)
      all_fixed = true
      battle_members.each { |actor|
        unless actor.fixed_member?
          all_fixed = false
          break
        end
      }
      break if all_fixed
    end
  end
  #--------------------------------------------------------------------------
  # ○ 멤버 정렬 (승순)
  #     sort_type : 소트 형식 (SORT_BY_xxx)
  #     reverse   : true (이)라면 내림차순
  #--------------------------------------------------------------------------
  def sort_member(sort_type = KGC::Commands::SORT_BY_ID,
                  reverse = false)
    # 버퍼를 준비
    b_actors = battle_members
    actors = all_members - b_actors
    f_actors = fixed_members
    # 고정 캐릭터는 소트 하지 않는다
    if KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED
      actors -= f_actors
      b_actors -= f_actors
    end

    # 소트
    case sort_type
    when KGC::Commands::SORT_BY_ID     # ID순
      actors.sort!   { |a, b| a.id <=> b.id }
      b_actors.sort! { |a, b| a.id <=> b.id }
    when KGC::Commands::SORT_BY_NAME   # 이름순
      actors.sort!   { |a, b| a.name <=> b.name }
      b_actors.sort! { |a, b| a.name <=> b.name }
    when KGC::Commands::SORT_BY_LEVEL  # 레벨순서
      actors.sort!   { |a, b| a.level <=> b.level }
      b_actors.sort! { |a, b| a.level <=> b.level }
    end
    # 반전
    if reverse
      actors.reverse!
      b_actors.reverse!
    end

    # 고정 캐릭터를 선두에 가져온다
    if KGC::LargeParty::FORBID_CHANGE_SHIFT_FIXED
      actors = f_actors + actors
      b_actors = f_actors + b_actors
    end

    # 복귀
    set_member(actors)
    set_battle_member(b_actors)

    apply_force_launch
    $game_player.refresh
  end
  #--------------------------------------------------------------------------
  # ○ 줄대체
  #    전투 멤버의 index1 번째와 index2 번째를 바꿔 넣는다
  #--------------------------------------------------------------------------
  def change_shift(index1, index2)
    size = @actors.size
    if index1 >= size || index2 >= size
      return
    end
    buf = @actors[index1]
    @actors[index1] = @actors[index2]
    @actors[index2] = buf
    $game_player.refresh
  end
  #--------------------------------------------------------------------------
  # ● 전투용 스테이트의 해제 (전투 종료시에 호출해)
  #--------------------------------------------------------------------------
  def remove_states_battle
    for actor in all_members
      actor.remove_states_battle
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Command
#==============================================================================

class Window_Command < Window_Selectable
  unless method_defined?(:add_command)
  #--------------------------------------------------------------------------
  # ○ 커멘드를 추가
  #    추가한 위치를 돌려준다
  #--------------------------------------------------------------------------
  def add_command(command)
    @commands << command
    @item_max = @commands.size
    item_index = @item_max - 1
    refresh_command
    draw_item(item_index)
    return item_index
  end
  #--------------------------------------------------------------------------
  # ○ 커멘드를 리프레쉬
  #--------------------------------------------------------------------------
  def refresh_command
    buf = self.contents.clone
    self.height = [self.height, row_max * WLH + 32].max
    create_contents
    self.contents.blt(0, 0, buf, buf.rect)
    buf.dispose
  end
  #--------------------------------------------------------------------------
  # ○ 커멘드를 삽입
  #--------------------------------------------------------------------------
  def insert_command(index, command)
    @commands.insert(index, command)
    @item_max = @commands.size
    refresh_command
    refresh
  end
  #--------------------------------------------------------------------------
  

 

 

 

 

입니다.

TAG •