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
297 메뉴 몬스터도감 Tankentai사이드뷰에 작동하도록 수정 13 카르와푸딩의아틀리에 2009.05.22 3775
296 기타 스크립트강좌 4 아하!잘봤어요. 2009.05.04 2158
295 이동 및 탈것 대각선 이동 스크립트 17 아방스 2009.05.02 3676
294 이동 및 탈것 A* 알고리즘을 이용한 길찾기 스크립트 3 file 허걱 2009.04.20 3527
293 기타 KGC 리버스 데미지! 28 루시페르 2009.04.13 2979
292 타이틀/게임오버 [자작] 타이틀 화면 없이 게임을 시작하자! Title Skiper 29 케류 2009.04.05 4423
291 기타 [자작] 횡스크롤 점프스크립트 18 file 좀비사냥꾼 2009.04.03 4276
290 키입력 답을 입력하는 텍스트박스 스크립트!! 21 file 좀비사냥꾼 2009.03.29 4206
289 기타 캐릭터 소개화면 16 file 좀비사냥꾼 2009.03.29 6044
» 장비 KGC장비종류 추가 스크립트. 36 file 루시페르 2009.03.28 4674
287 장비 KGC확장장비창 스크립트 15 file 티라엘 2009.03.27 3622
286 상태/속성 어떤 상태일때에만 사용가능한 스킬 14 file 좀비사냥꾼 2009.03.25 3266
285 메뉴 [자작]명성치 사용 시스템(메뉴 출력) 16 Rainsy 2009.03.22 4360
284 기타 시야범위 스크립트 18 file 좀비사냥꾼 2009.03.19 4047
283 메시지 문자픽쳐 표시 스크립트 7 file 좀비사냥꾼 2009.03.19 4144
282 이름입력 한글로 이름 입력하는 스크립트입니다. 55 file 헤르코스 2009.03.18 6662
281 타이틀/게임오버 타이틀화면 커스터마이즈 29 file 可わいい 2009.03.16 6141
280 전투 ORBS [새로운 전투 방식] 48 file 아방스 2009.03.04 10207
279 기타 액터선택지제작 간편화 스크립트 7 Evangelista 2009.02.26 4082
278 이름입력 아이템 이름을 내마음대로 정하자! name_changer 1.0v 26 file Last H 2009.02.25 4067
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 32 Next
/ 32