VX 스크립트

저번에 올린 확장장비메뉴 스크립트는 모두해제, 최강장비 장착등을 표시하는 스크립트이므로,
이것과는 별개인 스크립트였습니다.(어떤 분들은 이걸 보고 퍼가신듯....)
어쨋든 이번엔 장비의 종류, 즉 장착할수 있는 장비의 종류를 증가시킬수 있는
스크립트를 KGC에서 가져와보았습니다.(물론 이것도 꼭 필요한 부분만 한글번역)



아래의 스크립트를 잘 보시면
EXTRA_EQUIP_KIND라고 적힌 부분에 저는 신발과 칭호를 적어놓았습니다.
그리고 그 얼마 밑에 보시면   EQUIP_TYPE = [0, 1, 2, 4, 3, 3, 5]라고 적힌 부분이 있는데
여기에서 0은 방패, 1은 투구, 2는 신체(갑옷), 3은 장신구를 의미합니다. 장신구를 하나만
사용하시고 싶으신 분은 여기서 3을 하나 제거하시면 되구요. 그리고 아까 EXTRA_EQUIP_KIND
에서 그 괄호 안에는 큰 따옴표 안에 원하시는 장비종류의 이름을 정하시면 되구요(2개 이상도 가능합니다.)
또한 제가 올려놓은 예에 비교하자면 EQUIP_TYPE의 4는 첫번째 항목"신발", 그리고 두번째 항목인 "칭호"는
숫자 5가 되겠죠. 뒤에 더 많은 항목이 붙게 되면 차례대로 6,7,8 이런식으로 타입의 숫자설정이 자동적으로 되게
됩니다.
또한 EQUIP_TYPE에 있는 숫자의 배열은 메뉴에 표시될 장비장착 표시의 배열을 의미합니다.
지금 현재의 상태로 해석하자면 현재는 위에서부터 차례대로 방패, 투구, 신체, 신발, 장신구, 장신구, 칭호가
됩니다. 어쨋든 이 사용법을 따라 자유롭게 사용하시면 아무런 문제가 없을 듯합니다.
또한, 장비를 쓸 때 EP(equipment point)의 사용을 설정하실수 있습니다.
이건 제가 사용을 안하니 잘 모르니, 개인적으로 EP사용 설정을 바꾸셔서 사용을 해보세요....
그리고 여기서 주의할점!
추가된 종류의 장비는 꼭 메모에
장비종류 N(여기서 N은 종류의 이름 ex:장비종류 신발)
을 적어주셔야 된다는 것! 스크립트 유용하게 사용하시길 바랍니다!

아래서부터 복사.

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 装備拡張 - KGC_EquipExtension ◆ VX ◆
#_/    ◇ Last update : 2008/11/24 ◇
#_/----------------------------------------------------------------------------
#_/  装備関連の機能を拡張します。
#_/============================================================================
#_/ 【メニュー】≪拡張装備画面≫ より下に導入してください。
#_/ 【スキル】≪パッシブスキル≫ より上に導入してください。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================

module KGC
module EquipExtension
  # ◆ 拡張装備種別
  #  先頭から順に 4, 5, 6, ... が割り当てられる。
  EXTRA_EQUIP_KIND = ["신발", "칭호"]

  # ◆ 装備箇所リスト
  #  武器の後に、ここで指定した順番で並ぶ。
  #  ※ 装備箇所が最低一つないと、二刀流がバグる可能性があります。
  #   ** 装備種別一覧 **
  #  0..盾  1..頭  2..身体  3..装飾品  4~..↑で定義
  EQUIP_TYPE = [0, 1, 2, 4, 3, 3, 5]

  # ◆ EP (Equip Point) 制を使用する
  #  true  : EP で装備品を制限。
  #  false : 通常の装備システム。
  USE_EP_SYSTEM  = false
  # ◆ EP の名前
  VOCAB_EP       = "EP"
  # ◆ EP の名前 (略)
  VOCAB_EP_A     = "E"
  # ◆ ステータス画面に EP を表示する
  SHOW_STATUS_EP = false

  # ◆ 消費 EP 既定値
  #  消費 EP が指定されていない装備品で使用。
  DEFAULT_EP_COST   = 1
  # ◆ 消費 EP 0 は表示しない
  HIDE_ZERO_EP_COST = true

  # ◆ EP 上限
  EP_MAX = 20
  # ◆ EP 下限
  EP_MIN = 5
  # ◆ 最大 EP 算出式
  #   level..アクターのレベル
  #  自動的に整数変換されるので、結果が小数になってもOK。
  EP_CALC_EXP = "level * 0.3 + 4"
  # ◆ アクター毎の最大 EP 算出式
  PERSONAL_EP_CALC_EXP = []
  #  ここから下に、アクターごとの最大 EP を
  #   PERSONAL_EP_CALC_EXP[アクター ID] = "計算式"
  #  という書式で指定。
  #  計算式は EP_CALC_EXP と同様の書式。
  #  指定しなかったアクターは EP_CALC_EXP を使用。
  #   <例> ラルフだけ優遇
  # PERSONAL_EP_CALC_EXP[1] = "level * 0.5 + 5"

  # ◆ 消費 EP 値の色 (アイテム名の末尾に付く数値)
  #  数値  : C[n] と同じ色。
  #  Color : 指定した色。 ( Color.new(128, 255, 255) など )
  EP_COST_COLOR        = 23
  # ◆ EP ゲージの開始色
  EP_GAUGE_START_COLOR = 28
  # ◆ EP ゲージの終了色
  EP_GAUGE_END_COLOR   = 29
end
end

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

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

module KGC::EquipExtension
  # EP 制を使用しない場合の設定
  unless USE_EP_SYSTEM
    SHOW_STATUS_EP = false
    HIDE_ZERO_EP_COST = true
  end

  # 正規表現
  module Regexp
    # ベースアイテム
    module BaseItem
      # 消費 EP
      EP_COST = /<EPs*(d+)>/i
      # 装備タイプ
      EQUIP_TYPE = /<(?:EQUIP_TYPE|装備タイプ)s*(d+(?:s*,s*d+)*)>/
    end

    # 防具
    module Armor
      # 装備種別
      EQUIP_KIND = /<(?:EQUIP_KIND|장비종류)s*(.+)>/i
    end
  end
end

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

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

module KGC
module Commands
  module_function
  #--------------------------------------------------------------------------
  # ○ アクターの装備を修復
  #--------------------------------------------------------------------------
  def restore_equip
    (1...$data_actors.size).each { |i|
      actor = $game_actors[i]
      actor.restore_equip
    }
  end
  #--------------------------------------------------------------------------
  # ○ アクターの装備タイプを設定
  #     actor_id   : アクター ID
  #     equip_type : 装備タイプ
  #--------------------------------------------------------------------------
  def set_actor_equip_type(actor_id, equip_type = nil)
    actor = $game_actors[actor_id]
    return if actor == nil
    actor.equip_type = equip_type
  end
  #--------------------------------------------------------------------------
  # ○ アクターの MaxEP 補正値の取得
  #     actor_id    : アクター ID
  #     variable_id : 取得した値を代入する変数の ID
  #--------------------------------------------------------------------------
  def get_actor_own_ep(actor_id, variable_id = 0)
    value = $game_actors[actor_id].maxep_plus
    $game_variables[variable_id] = value if variable_id > 0
    return value
  end
  #--------------------------------------------------------------------------
  # ○ アクターの MaxEP 補正値の変更
  #     actor_id : アクター ID
  #     value    : MaxEP 補正値
  #--------------------------------------------------------------------------
  def set_actor_own_ep(actor_id, value)
    $game_actors[actor_id].maxep_plus = value
  end
  #--------------------------------------------------------------------------
  # ○ アクターの MaxEP 補正値の増加
  #     actor_id : アクター ID
  #     value    : 増加量
  #--------------------------------------------------------------------------
  def gain_actor_ep(actor_id, value)
    $game_actors[actor_id].maxep_plus += value
  end
  #--------------------------------------------------------------------------
  # ○ アクターの装備を変更
  #     actor_id   : アクター ID
  #     index      : 装備部位 (0~)
  #     item_id    : 武器 or 防具 ID (0 で解除)
  #     force_gain : 未所持なら取得 (true or false)
  #--------------------------------------------------------------------------
  def change_actor_equipment(actor_id, index, item_id, force_gain = false)
    actor = $game_actors[actor_id]
    return if actor == nil

    item = (index == 0 ? $data_weapons[item_id] : $data_armors[item_id])
    if actor.two_swords_style && index == 1
      item = $data_weapons[item_id]
    end
    if force_gain && $game_party.item_number(item) == 0
      $game_party.gain_item(item, 1)
    end
    actor.change_equip_by_id(index, item_id)
  end
end
end

class Game_Interpreter
  include KGC::Commands
end

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

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

module Vocab
  # EP
  def self.ep
    return KGC::EquipExtension::VOCAB_EP
  end

  # EP (略)
  def self.ep_a
    return KGC::EquipExtension::VOCAB_EP_A
  end

  # 拡張防具欄
  def self.extra_armor(index)
    return KGC::EquipExtension::EXTRA_EQUIP_KIND[index]
  end
end

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

#==============================================================================
# ■ RPG::BaseItem
#==============================================================================

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ○ 装備拡張のキャッシュを作成
  #--------------------------------------------------------------------------
  def create_equip_extension_cache
    @__ep_cost = KGC::EquipExtension::DEFAULT_EP_COST
    @__equip_type = []

    self.note.each_line { |line|
      case line
      when KGC::EquipExtension::Regexp::BaseItem::EP_COST
        # 消費 EP
        @__ep_cost = $1.to_i
      when KGC::EquipExtension::Regexp::BaseItem::EQUIP_TYPE
        # 装備タイプ
        @__equip_type = []
        $1.scan(/d+/) { |num|
          @__equip_type << num.to_i
        }
      end
    }

    # EP 制を使用しない場合は消費 EP = 0
    @__ep_cost = 0 unless KGC::EquipExtension::USE_EP_SYSTEM
  end
  #--------------------------------------------------------------------------
  # ○ 消費 EP
  #--------------------------------------------------------------------------
  def ep_cost
    create_equip_extension_cache if @__ep_cost == nil
    return @__ep_cost
  end
  #--------------------------------------------------------------------------
  # ○ 装備タイプ
  #--------------------------------------------------------------------------
  def equip_type
    create_equip_extension_cache if @__equip_type == nil
    return @__equip_type
  end
end

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

#==============================================================================
# ■ RPG::Armor
#==============================================================================

class RPG::Armor < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ○ 装備拡張のキャッシュを作成
  #--------------------------------------------------------------------------
  def create_equip_extension_cache
    super
    @__kind = -1

    self.note.each_line { |line|
      if line =~ KGC::EquipExtension::Regexp::Armor::EQUIP_KIND
        # 装備種別
        e_index = KGC::EquipExtension::EXTRA_EQUIP_KIND.index($1)
        next if e_index == nil
        @__kind = e_index + 4
      end
    }
  end

unless $@
  #--------------------------------------------------------------------------
  # ○ 種別
  #--------------------------------------------------------------------------
  alias kind_KGC_EquipExtension kind
  def kind
    create_equip_extension_cache if @__kind == nil
    return (@__kind == -1 ? kind_KGC_EquipExtension : @__kind)
  end
end

end

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

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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_writer   :equip_type               # 装備タイプ
  attr_writer   :maxep_plus               # MaxEP 補正値
  #--------------------------------------------------------------------------
  # ● セットアップ
  #     actor_id : アクター ID
  #--------------------------------------------------------------------------
  alias setup_KGC_EquipExtension setup
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @extra_armor_id = []

    setup_KGC_EquipExtension(actor_id)

    @__last_equip_type = nil
    restore_equip
  end
  #--------------------------------------------------------------------------
  # ○ MaxEP 取得
  #--------------------------------------------------------------------------
  def maxep
    calc_exp = KGC::EquipExtension::PERSONAL_EP_CALC_EXP[self.id]
    if calc_exp == nil
      calc_exp = KGC::EquipExtension::EP_CALC_EXP
    end
    n = Integer(eval(calc_exp)) + maxep_plus
    return [[n, ep_limit].min, KGC::EquipExtension::EP_MIN].max
  end
  #--------------------------------------------------------------------------
  # ○ EP 取得
  #--------------------------------------------------------------------------
  def ep
    n = 0
    equips.compact.each { |item| n += item.ep_cost }
    return [maxep - n, 0].max
  end
  #--------------------------------------------------------------------------
  # ○ EP 上限取得
  #--------------------------------------------------------------------------
  def ep_limit
    return KGC::EquipExtension::EP_MAX
  end
  #--------------------------------------------------------------------------
  # ○ MaxEP 補正値取得
  #--------------------------------------------------------------------------
  def maxep_plus
    @maxep_plus = 0 if @maxep_plus == nil
    return @maxep_plus
  end
  #--------------------------------------------------------------------------
  # ○ 防具欄の取得
  #--------------------------------------------------------------------------
  def equip_type
    if @equip_type.is_a?(Array)
      return @equip_type
    else
      return KGC::EquipExtension::EQUIP_TYPE
    end
  end
  #--------------------------------------------------------------------------
  # ○ 防具欄の数
  #--------------------------------------------------------------------------
  def armor_number
    return equip_type.size
  end
  #--------------------------------------------------------------------------
  # ○ 拡張防具欄の数
  #--------------------------------------------------------------------------
  def extra_armor_number
    return [armor_number - 4, 0].max
  end
  #--------------------------------------------------------------------------
  # ○ 防具 ID リストの取得
  #--------------------------------------------------------------------------
  def extra_armor_id
    @extra_armor_id = [] if @extra_armor_id == nil
    return @extra_armor_id
  end
  #--------------------------------------------------------------------------
  # ● 防具オブジェクトの配列取得
  #--------------------------------------------------------------------------
  alias armors_KGC_EquipExtension armors
  def armors
    result = armors_KGC_EquipExtension

    # 5番目以降の防具を追加
    extra_armor_number.times { |i|
      armor_id = extra_armor_id[i]
      result << (armor_id == nil ? nil : $data_armors[armor_id])
    }
    return result
  end
  #--------------------------------------------------------------------------
  # ● 装備の変更 (オブジェクトで指定)
  #     equip_type : 装備部位
  #     item       : 武器 or 防具 (nil なら装備解除)
  #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  #--------------------------------------------------------------------------
  alias change_equip_KGC_EquipExtension change_equip
  def change_equip(equip_type, item, test = false)
    n = (item != nil ? $game_party.item_number(item) : 0)

    change_equip_KGC_EquipExtension(equip_type, item, test)

    # 拡張防具欄がある場合のみ
    if extra_armor_number > 0 && (item == nil || n > 0)
      item_id = item == nil ? 0 : item.id
      case equip_type
      when 5..armor_number  # 拡張防具欄
        @extra_armor_id = [] if @extra_armor_id == nil
        @extra_armor_id[equip_type - 5] = item_id
      end
    end

    restore_battle_skill if $imported["SkillCPSystem"]
  end
  #--------------------------------------------------------------------------
  # ● 装備の破棄
  #     item : 破棄する武器 or 防具
  #    武器/防具の増減で「装備品も含める」のとき使用する。
  #--------------------------------------------------------------------------
  alias discard_equip_KGC_EquipExtension discard_equip
  def discard_equip(item)
    last_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]

    discard_equip_KGC_EquipExtension(item)

    curr_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
    return unless item.is_a?(RPG::Armor)  # 防具でない
    return if last_armors != curr_armors  # 既に破棄された

    # 拡張防具欄を検索
    extra_armor_number.times { |i|
      if extra_armor_id[i] == item.id
        @extra_armor_id[i] = 0
        break
      end
    }

    restore_battle_skill if $imported["SkillCPSystem"]
  end
  #--------------------------------------------------------------------------
  # ● 職業 ID の変更
  #     class_id : 新しい職業 ID
  #--------------------------------------------------------------------------
  alias class_id_equal_KGC_EquipExtension class_id=
  def class_id=(class_id)
    class_id_equal_KGC_EquipExtension(class_id)

    return if extra_armor_number == 0  # 拡張防具欄がない

    # 装備できない拡張防具を外す
    for i in 5..armor_number
      change_equip(i, nil) unless equippable?(equips[i])
    end
  end
  #--------------------------------------------------------------------------
  # ○ EP 条件クリア判定
  #     equip_type : 装備部位
  #     item       : 武器 or 防具
  #--------------------------------------------------------------------------
  def ep_condition_clear?(equip_type, item)
    return true if item == nil  # nil は解除なので OK

    curr_item = equips[equip_type]
    offset = (curr_item != nil ? curr_item.ep_cost : 0)
    return false if self.ep < (item.ep_cost - offset)   # EP 不足

    return true
  end
  #--------------------------------------------------------------------------
  # ○ 装備を修復
  #--------------------------------------------------------------------------
  def restore_equip
    return if @__last_equip_type == equip_type

    # 以前の装備品・パラメータを退避
    last_equips = equips
    last_hp = self.hp
    last_mp = self.mp
    if $imported["SkillCPSystem"]
      last_battle_skill_ids = battle_skill_ids.clone
    end

    # 全装備解除
    last_equips.each_index { |i| change_equip(i, nil) }

    # 装備品・パラメータを復元
    last_equips.compact.each { |item| equip_legal_slot(item) }
    self.hp = last_hp
    self.mp = last_mp
    if $imported["SkillCPSystem"]
      last_battle_skill_ids.each_with_index { |s, i| set_battle_skill(i, s) }
    end
    @__last_equip_type = equip_type.clone
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  # ○ 装備品を正しい箇所にセット
  #     item : 武器 or 防具
  #--------------------------------------------------------------------------
  def equip_legal_slot(item)
    if item.is_a?(RPG::Weapon)
      if @weapon_id == 0
        # 武器 1
        change_equip(0, item)
      elsif two_swords_style && @armor1_id == 0
        # 武器 2 (二刀流の場合)
        change_equip(1, item)
      end
    elsif item.is_a?(RPG::Armor)
      if !two_swords_style && item.kind == equip_type[0] && @armor1_id == 0
        # 先頭の防具 (二刀流でない場合)
        change_equip(1, item)
      else
        # 装備箇所リストを作成
        list = [-1, @armor2_id, @armor3_id, @armor4_id]
        list += extra_armor_id
        # 正しい、かつ空いている箇所にセット
        equip_type.each_with_index { |kind, i|
          if kind == item.kind && list[i] == 0
            change_equip(i + 1, item)
            break
          end
        }
      end
    end
  end
end

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

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ○ EP の文字色を取得
  #     actor : アクター
  #--------------------------------------------------------------------------
  def ep_color(actor)
    return knockout_color if actor.maxep > 0 && actor.ep == 0
    return normal_color
  end
  #--------------------------------------------------------------------------
  # ○ EP ゲージの色 1 の取得
  #--------------------------------------------------------------------------
  def ep_gauge_color1
    color = KGC::EquipExtension::EP_GAUGE_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ○ EP ゲージの色 2 の取得
  #--------------------------------------------------------------------------
  def ep_gauge_color2
    color = KGC::EquipExtension::EP_GAUGE_END_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ○ EP の描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #     width : 幅
  #--------------------------------------------------------------------------
  def draw_actor_ep(actor, x, y, width = 120)
    draw_actor_ep_gauge(actor, x, y, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, Vocab::ep_a)
    self.contents.font.color = ep_color(actor)
    xr = x + width
    if width < 120
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.ep, 2)
    else
      self.contents.draw_text(xr - 90, y, 40, WLH, actor.ep, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxep, 2)
    end
    self.contents.font.color = normal_color
  end
  #--------------------------------------------------------------------------
  # ○ EP ゲージの描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #     width : 幅
  #--------------------------------------------------------------------------
  def draw_actor_ep_gauge(actor, x, y, width = 120)
    gw = width * actor.ep / [actor.maxep, 1].max
    gc1 = ep_gauge_color1
    gc2 = ep_gauge_color2
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
  #--------------------------------------------------------------------------
  # ○ 消費 EP の描画
  #     item    : 武器 or 防具
  #     rect    : 描画する領域
  #     enabled : 許可状態
  #--------------------------------------------------------------------------
  def draw_equipment_ep_cost(item, rect, enabled = true)
    return if item == nil
    # 消費 EP 0 を表示しない場合
    return if KGC::EquipExtension::HIDE_ZERO_EP_COST && item.ep_cost == 0

    color = KGC::EquipExtension::EP_COST_COLOR
    self.contents.font.color = (color.is_a?(Integer) ?
      text_color(color) : color)
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(rect, item.ep_cost, 2)
  end
end

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

#==============================================================================
# ■ Window_Equip
#==============================================================================

class Window_Equip < Window_Selectable
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @data = @actor.equips.clone
    @item_max = [@data.size, @actor.armor_number + 1].min
    create_contents

    # 装備箇所を描画
    self.contents.font.color = system_color
    if @actor.two_swords_style
      self.contents.draw_text(4,       0, 92, WLH, Vocab::weapon1)
      self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2)
    else
      self.contents.draw_text(4,       0, 92, WLH, Vocab::weapon)
      name = armor_slot_name(@actor.equip_type[0])
      self.contents.draw_text(4, WLH * 1, 92, WLH, name)
    end
    for i in 1...@actor.armor_number
      name = armor_slot_name(@actor.equip_type[i])
      self.contents.draw_text(4, WLH * (i + 1), 92, WLH, name)
    end

    # 装備品を描画
    rect = Rect.new(92, 0, self.width - 128, WLH)
    @item_max.times { |i|
      rect.y = WLH * i
      draw_item_name(@data[i], rect.x, rect.y)
      draw_equipment_ep_cost(@data[i], rect)
    }
  end
  #--------------------------------------------------------------------------
  # ○ 防具欄の名称を取得
  #     kind : 種別
  #--------------------------------------------------------------------------
  def armor_slot_name(kind)
    case kind
    when 0..3
      return eval("Vocab.armor#{kind + 1}")
    else
      return Vocab.extra_armor(kind - 4)
    end
  end

unless $imported["ExtendedEquipScene"]
  #--------------------------------------------------------------------------
  # ● カーソルを 1 ページ後ろに移動
  #--------------------------------------------------------------------------
  def cursor_pagedown
    return if Input.repeat?(Input::R)
    super
  end
  #--------------------------------------------------------------------------
  # ● カーソルを 1 ページ前に移動
  #--------------------------------------------------------------------------
  def cursor_pageup
    return if Input.repeat?(Input::L)
    super
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active

    if Input.repeat?(Input::RIGHT)
      cursor_pagedown
    elsif Input.repeat?(Input::LEFT)
      cursor_pageup
    end
  end
end

end

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

#==============================================================================
# ■ Window_EquipItem
#==============================================================================

class Window_EquipItem < Window_Item
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @item_enabled = []
    super
    @data.each { |item| @item_enabled << enable?(item) }
  end
  #--------------------------------------------------------------------------
  # ● アイテムをリストに含めるかどうか
  #     item : アイテム
  #--------------------------------------------------------------------------
  def include?(item)
    return true if item == nil
    if @equip_type == 0
      return false unless item.is_a?(RPG::Weapon)
    else
      return false unless item.is_a?(RPG::Armor)
      return false unless item.kind == @equip_type - 1
    end
    return @actor.equippable?(item)
  end
  #--------------------------------------------------------------------------
  # ● アイテムを許可状態で表示するかどうか
  #     item : アイテム
  #--------------------------------------------------------------------------
  def enable?(item)
    return false unless @actor.equippable?(item)                      # 装備不可
    return false unless @actor.ep_condition_clear?(@equip_type, item)  # EP 不足

    return true
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    super(index)   
    rect = item_rect(index)
    item = @data[index]

    # 個数表示分の幅を削る
    cw = self.contents.text_size(sprintf(":%2d", 0)).width
    rect.width -= cw + 4
    draw_equipment_ep_cost(item, rect, enable?(item))
  end
  #--------------------------------------------------------------------------
  # ○ 簡易リフレッシュ
  #     equip_type : 装備部位
  #--------------------------------------------------------------------------
  def simple_refresh(equip_type)
    # 一時的に装備部位を変更
    last_equip_type = @equip_type
    @equip_type = equip_type

    @data.each_with_index { |item, i|
      # 許可状態が変化した項目のみ再描画
      if enable?(item) != @item_enabled[i]
        draw_item(i)
        @item_enabled[i] = enable?(item)
      end
    }
    # 装備部位を戻す
    @equip_type = last_equip_type
  end
end

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

#==============================================================================
# ■ Window_EquipStatus
#==============================================================================

class Window_EquipStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  alias refresh_KGC_EquipExtension refresh
  def refresh
    refresh_KGC_EquipExtension

    draw_actor_ep(@actor, 120, 0, 56) if KGC::EquipExtension::USE_EP_SYSTEM
  end
end

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

#==============================================================================
# ■ Window_Status
#==============================================================================

class Window_Status < Window_Base

if KGC::EquipExtension::SHOW_STATUS_EP
  #--------------------------------------------------------------------------
  # ● 基本情報の描画
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  alias draw_basic_info_KGC_EquipExtension draw_basic_info
  def draw_basic_info(x, y)
    draw_basic_info_KGC_EquipExtension(x, y)

    draw_actor_ep(@actor, x + 160, y + WLH * 4)
  end
end

  #--------------------------------------------------------------------------
  # ● 装備品の描画
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  def draw_equipments(x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, WLH, Vocab::equip)

    item_number = [@actor.equips.size, @actor.armor_number + 1].min
    item_number.times { |i|
      draw_item_name(@actor.equips[i], x + 16, y + WLH * (i + 1))
    }
  end
end

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

#==============================================================================
# ■ Window_ShopStatus
#==============================================================================

class Window_ShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● アクターの現装備と能力値変化の描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #--------------------------------------------------------------------------
  def draw_actor_parameter_change(actor, x, y)
    return if @item.is_a?(RPG::Item)
    enabled = actor.equippable?(@item)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(x, y, 200, WLH, actor.name)
    if @item.is_a?(RPG::Weapon)
      item1 = weaker_weapon(actor)
    elsif actor.two_swords_style and @item.kind == 0
      item1 = nil
    else
      index = actor.equip_type.index(@item.kind)
      item1 = (index != nil ? actor.equips[1 + index] : nil)
    end
    if enabled
      if @item.is_a?(RPG::Weapon)
        atk1 = item1 == nil ? 0 : item1.atk
        atk2 = @item == nil ? 0 : @item.atk
        change = atk2 - atk1
      else
        def1 = item1 == nil ? 0 : item1.def
        def2 = @item == nil ? 0 : @item.def
        change = def2 - def1
      end
      self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
    end
    draw_item_name(item1, x, y + WLH, enabled)
  end
end

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

#==============================================================================
# ■ Scene_Equip
#==============================================================================

class Scene_Equip < Scene_Base
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  EQUIP_TYPE_MAX = KGC::EquipExtension::EXTRA_EQUIP_KIND.size + 5
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     actor_index : アクターインデックス
  #     equip_index : 装備インデックス
  #--------------------------------------------------------------------------
  alias initialize_KGC_EquipExtension initialize
  def initialize(actor_index = 0, equip_index = 0)
    initialize_KGC_EquipExtension(actor_index, equip_index)

    unit = ($imported["LargeParty"] ?
      $game_party.all_members : $game_party.members)
    actor = unit[actor_index]
    @equip_index = [@equip_index, actor.armor_number].min
  end
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_item_windows_KGC_EquipExtension create_item_windows
  def create_item_windows
    create_item_windows_KGC_EquipExtension

    kind = equip_kind(@equip_index)
    EQUIP_TYPE_MAX.times { |i|
      @item_windows[i].visible = (kind == i)
    }
  end
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの更新
  #--------------------------------------------------------------------------
  def update_item_windows
    kind = equip_kind(@equip_window.index)
    for i in 0...EQUIP_TYPE_MAX
      @item_windows[i].visible = (kind == i)
      @item_windows[i].update
    end
    @item_window = @item_windows[kind]
    @item_window.simple_refresh(@equip_window.index)
  end
  #--------------------------------------------------------------------------
  # ○ 装備欄の種別を取得
  #     index : 装備欄インデックス
  #--------------------------------------------------------------------------
  def equip_kind(index)
    if index == 0
      return 0
    else
      return @actor.equip_type[index - 1] + 1
    end
  end

unless $imported["ExtendedEquipScene"]
  #--------------------------------------------------------------------------
  # ● ステータスウィンドウの更新
  #--------------------------------------------------------------------------
  def update_status_window
    if @equip_window.active
      @status_window.set_new_parameters(nil, nil, nil, nil)
    elsif @item_window.active
      temp_actor = Marshal.load(Marshal.dump(@actor))
      temp_actor.change_equip(@equip_window.index, @item_window.item, true)
      new_atk = temp_actor.atk
      new_def = temp_actor.def
      new_spi = temp_actor.spi
      new_agi = temp_actor.agi
      @status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
    end
    @status_window.update
  end
end

  #--------------------------------------------------------------------------
  # ● アイテム選択の更新
  #--------------------------------------------------------------------------
  alias update_item_selection_KGC_EquipExtension update_item_selection
  def update_item_selection
    if Input.trigger?(Input::C)
      # 装備不可能な場合
      index = @equip_window.index
      item = @item_window.item
      unless item == nil ||
          (@actor.equippable?(item) && @actor.ep_condition_clear?(index, item))
        Sound.play_buzzer
        return
      end
    end

    update_item_selection_KGC_EquipExtension
  end
end

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

#==============================================================================
# ■ Scene_File
#==============================================================================

class Scene_File < Scene_Base
  #--------------------------------------------------------------------------
  # ● セーブデータの読み込み
  #     file : 読み込み用ファイルオブジェクト (オープン済み)
  #--------------------------------------------------------------------------
  alias read_save_data_KGC_EquipExtension read_save_data
  def read_save_data(file)
    read_save_data_KGC_EquipExtension(file)

    KGC::Commands.restore_equip
    Graphics.frame_reset
  end
end
------------------------------------------------------------------------------------------------------------------------------------------
스크린샷은 제가 올린 "확장장비스크립트"의 스크린샷을 참고하세요..
그리고 예제 올려달라는 분께서 이 예제를 올려달라고 하신건지는 모르겠지만,
하여튼 장비를 추가한 예제를 올려드렸습니다~

Comment '36'
  • ?
    트랜스푸마 2009.03.31 17:21
    정말 감사합니다 그런데 칭호 대신 장갑으로 바꾸고 새 방어구를 만들어 메모에 장비종류 장갑 이렇게 했는데
    장비착용이 되질 않습니다. 도대체 제가 무엇을 잘못했는지 모르겠습니다 ㅠㅠ
  • ?
    루시페르 2009.03.31 19:05
    혹시 직업의 착용가능장비 설정에 그 장비의 사용을 가능하게 설정안하지 않으셨나요?
    저도 한번 그렇게 낚인적이 있거든요...
    그리고 또한, 장비종류를 설정하실 때 <장비종류 장갑>처럼 앞뒤에 괄호를 넣어주셔야
    됩니다~
  • ?
    이리엘 2012.09.14 20:53
    엌ㅋㅋ님 사랑해요(?)
    알고보니 클래스에서 장비설정을 안한....;;
  • ?
    허인 2009.06.02 19:27
    이거 잘돼나요?
  • ?
    줄리안 2009.06.07 19:03

    99번째 줄에 '장비종류' 라는 말을 지우면 그냥 <장갑> 이런식으로 해도 된답니다^^

  • ?
    lhh9606 2009.06.14 16:55
    오!굿
  • ?
    lhh9606 2009.06.14 17:04

    저기 죄송하지만 제가 19번줄에:EXTRA_EQUIP_KIND = ["신발", "칭호","하의"]이렇게했는데

    장비창들어가니까 신발.칭호.칭호.칭호로 되있더군요.

    어떻게하져??

  • ?
    lhh9606 2009.06.14 17:07

    아님!!!!!!!!!

    성공했음

  • ?
    허인 2009.07.11 12:12
    난이거 안돼던데 ㅋㅋ 오류나서 만들던 게임 폭팔햇다는ㄷㄷ
  • ?
    푸른에나 2009.07.25 16:41

    오류나는데요....

    Script '장비확장' line 987: SystemStackError occurred.

    stack level too deep 

  • ?
    칼리아 2009.09.15 20:14
    ㄳㄳ
  • ?
    칼리아 2009.09.15 20:49

    으악..

    Game_Actor에 문제가 생겼어요.443줄에..

    님쪽게임에는 문제는 없는데?

  • ?
    텐가와 2009.09.16 20:58

    감사합니다 잘쓰겠습니다

     

  • ?
    카린저 2009.11.28 00:07

    Game _ Actor 에 443줄에 에러가 나네요 ;;;

  • ?
    카린저 2009.11.28 00:14

    음 ... 아무래도 스크립트 충돌인거 같군요 ㅠㅠ

     

  • ?
    카린저 2009.11.28 00:16

    파티 스크립트와 충돌했네요 ㅎㄷㄷ;;

  • ?
    오리엔탈 2009.12.02 20:15

    예술이당~

     

  • ?
    Berylll 2009.12.25 23:28

    짱이네염 ㅋ 잘쓰겟습니다 ㅎㅎ.

  • ?
    Berylll 2009.12.25 23:39

    ㄱ-/... 쓰는데 ;; 메모창에 <장비종류 신발> 써넣고 나면 템 획득이 안된다는...

  • ?
    1000℃ 복숭아 2010.01.09 14:42

    정말감사합니다!!

    덕분에 반지 목걸이 따로할 수 있게 됐네요.

  • profile
    새장속새 2010.01.12 15:52

     아주 유용한...

    감사합니다~

  • ?

    고맙습니다.

  • ?
    낙서 2010.02.16 19:41

     

  • ?
    KOREA♬♪ 2010.03.07 18:22

    장신구를 지우고 칭호를 넣어야하나....하고 고민하다 스크립트로 해결않될까하고왔다가

    행복하게 답을 얻어갑니다. ㅎㅎ

     

  • ?
    KOREA♬♪ 2010.03.14 13:27

    이거..... 캐릭터가 이도류일경우 문제가 생기네요 ㅠㅠ

  • ?
    Sharnhoiste 2010.04.20 13:26

    ㅎㅎㅎ 나도 낚였었네...

     

    ------------------------------------------------------------------------------------------------------------------

    혹시 직업의 착용가능장비 설정에 그 장비의 사용을 가능하게 설정안하지 않으셨나요?
    저도 한번 그렇게 낚인적이 있거든요...
    그리고 또한, 장비종류를 설정하실 때 <장비종류 장갑>처럼 앞뒤에 괄호를 넣어주셔야
    됩니다~

    -------------------------------------------------------------------------------------------------------------------
     
    이말이 딱 맞음...ㅋㅋㅋ
  • ?
    메이퍼 2010.09.01 16:41

    좋지만 에러가 뜨는;; 스트립트 충돌일까요?

    그래도 꽤 유용하네요ㅎㅎ

  • ?
    이렐 2010.12.27 22:31

    감사합니다

  • ?
    에스테반 2011.01.08 19:08

    감사합니다!

  • ?
    rsh9894 2011.05.29 17:33

    감사합니다^^

  • ?
    rpg좋쿤하 2011.08.01 16:33

    장갑같은 경우는 방어구설정에서 뭐로설정하죠?

     

  • ?
    시옷청룡 2011.08.09 22:34

    장비가 늘어나긴 하는데... 새로 만든 장비는 인식이 안되네요...

     

    <장비종류 장갑>이렇게 써봐도 목걸이(원래 장신구였던 3번)란에 떠요...ㅠ

     

    제가 스크립트를 좀 많이 집어넣었는데 충돌인걸까요...;

  • profile
    DevilEx 2011.08.26 20:35

    감사합니다 .

  • ?
    린네 2013.05.01 15:16
    근데이거 어디에 넣어야되요?
  • ?
    린네님 축하합니다.^^ 2013.05.01 15:16
    포인트 팡팡!에 당첨되셨습니다.
    린네님은 7포인트를 보너스로 받으셨습니다.
  • ?
    빡새 2013.06.30 17:22
    감사합니다

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
537 키입력 Key Simulator by Fantasist 습작 2013.05.01 1176
536 메뉴 kgc 파라미터 배분 09/07/25 13 시트르산 2010.09.24 2327
535 메뉴 KGC - 커스텀 메뉴 커멘드 (번역) 1 듀란테 2015.07.27 1078
534 기타 KGC counter 스크립트. 반격기 추가스크립트입니다. 4 우켈킁 2011.03.31 1812
533 기타 KGC 리버스 데미지! 28 루시페르 2009.04.13 2979
532 미니맵 KGC 미니 맵 22 file RPGbooster 2008.10.08 4036
531 미니맵 KGC 미니맵 스크립트 (한글번역) 45 file 레오 2009.02.01 6555
530 기타 KGC 스크립트 라이브러리 7 훈덕 2009.05.31 2611
529 장비 KGC 확장 장비 화면 2009/02/15 13 시트르산 2010.09.25 3112
528 아이템 KGC]아이템 합성 29 file 찌나 2008.03.08 5123
527 전투 KGC]전투형태 오버드라이브(턴알) 13 찌나 2008.03.08 5656
526 그래픽 KGC_BitmapExtension : 비트맵 클래스 확장 8 file soleone 2010.07.18 3176
525 타이틀/게임오버 KGC_TitleDirection 알기쉽게 설명추가 5 파이어 2011.01.03 2662
» 장비 KGC장비종류 추가 스크립트. 36 file 루시페르 2009.03.28 4674
523 기타 KGC파라미터배분 2 (VX전용) 20 file 카르와푸딩의아틀리에 2009.07.21 3269
522 기타 KGC패시브 스크립트 30 카르와푸딩의아틀리에 2009.10.07 3551
521 장비 KGC확장장비창 스크립트 15 file 티라엘 2009.03.27 3622
520 HUD KH HUD (HP MP 게이지바 스크립트) 41 아방스 2010.12.17 6422
519 Khai's Window Helper 1.4 1 Man... 2008.10.28 1272
518 KID's Luck Systems(무슨 뜻?) 4 Man... 2008.10.27 1378
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32