VX 스크립트

KGC 스크립트입니다.
장비의 종류를 늘려줄 수 있으며, 장비에 고유 EP요구치를 설정해서 장착시 캐릭터의 EP를 소모하게 하는 기능입니다.

-------------------------------  사용법(원문 번역)  -------------------------------------------------------------------------------

방어구 종별의 작성
# ◆ 확장 장비 종별
EXTRA_EQUIP_KIND = ["족", "기능서"]

커스터마이즈 항목의 이 부분에서, 새롭게 작성하는 장비 종별을 지정합니다.
예에서는 「다리」와「기능서」라고 하는 종별을 작성합니다.
작성한 종별의 번호는, 선두로부터 순서에4, 5, 6, ...됩니다.
(예의 경우, 「다리」가4, 「기능서」가6)
커스터마이즈 항목으로 설정한 후, 방어구의 메모란에 <장비 종별 명칭> (을)를 추가합니다.

이 방어구는 「다리」로서 다루어지게 됩니다.

장비란의 변경
# ◆ 장비 개소 리스트
EQUIP_TYPE = [0, 1, 2, 4, 3, 3, 5]

장비란을 설정합니다.
여기서 지정한 순서로, 무기의 뒤에 줄섭니다.
액터를 쌍수검으로 했을 경우, 선두의 장비란이 2개째의 무기가 됩니다.
(따라서, 선두는0(으)로 하는 것이 좋다)
지정할 수 있는 수치는 아래 표대로입니다.

장비 종별 대응표
수치 장비 종별
0 순
1 두
2 신체
3 장식품
4 이후 EXTRA_EQUIP_KIND그리고 정의

장비란을 변경했을 경우, 이벤트 커멘드 「장비의 변경」이 정상적으로 기능하지 않게 됩니다.
(사양상, 무기만은 정상적으로 사용할 수 있습니다)
장비를 변경하는 경우는change_actor_equipment(을)를 사용해 주세요.

EP 제
≪스킬CP제≫ (와)과 같이, 장비품 고유의 EP (을)를 소비해 무기를 장비시키는 기능입니다.


액터명의 우측으로 표시되고 있는 것이, 현재의 EP 입니다.
아이템명의 우측에는, 그 아이템의 소비 EP 하지만 청색으로 표시됩니다.

문자색은, 커스터마이즈 항목으로 변경할 수 있습니다.

# ◆ EP (Equip Point) 제를 사용한다
USE_EP_SYSTEM = true

EP 제를 사용하는 경우는true(으)로 합니다.
false(으)로 했을 경우, 소비 EP 에 관계없이 장비 가능하게 됩니다.

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

# ◆ 소비 EP 0 (은)는 표시하지 않는다
HIDE_ZERO_EP_COST = true

true(으)로 하면, 소비 EP 하지만0의 경우, 아이템명에 소비 EP (을)를 표시하지 않게 됩니다.
false(으)로 하면, 항상 소비 EP (을)를 표시합니다.

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

# ◆ 최대 EP 산출식
EP_CALC_EXP = "level * 0.3 + 4"

최대 EP 의 값을 산출하는 식을 설정합니다.
이 식의 결과는, 자동적으로 정수에 변환됩니다.

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

# ◆ 소비 EP 값의 색 (아이템명의 말미를 뒤따르는 수치)
EP_COST_COLOR        = 23
# ◆ EP 게이지의 개시색
EP_GAUGE_START_COLOR = 28
# ◆ EP 게이지의 종료색
EP_GAUGE_END_COLOR   = 29

아이템명 우측의 소비 EP (이)나 EP 게이지의 색을 설정합니다.
개시색은 게이지 좌측의 색, 종료색은 게이지 우측의 색을 나타냅니다.
색에 수치를 지정했을 경우, 메세지 윈도우의 C[n] 그리고 표시되는 색을 사용합니다.
예를 들면,23(이)라면 C[23] (와)과 같은 색이 됩니다.

수치 이외에, 직접 Color 오브젝트로 지정할 수도 있습니다.
# ◆ EP 게이지의 개시색
#  청색으로 한다
EP_GAUGE_START_COLOR = Color.new(0, 0, 255)

익숙해지기 전에는, 별로 이 방법을 사용하지 않는 것이 좋을지도 모릅니다.
장비품의 소비 EP 설정
무기·방어구의 메모란에 <EP n> (을)를 추가합니다.
n에는, 장비할 때에 필요한 EP (을)를 반각으로 입력합니다.

이 아이템은,EP 하지만5없으면 장비할 수 없습니다.

이벤트용 커멘드
각 커멘드는, 이벤트 커멘드 「스크립트」에 기술해 사용합니다.

set_actor_equip_type(actor_id[, equip_type])
액터actor_id의 장비란을equip_type(으)로 변경합니다.
equip_type에는, 장비란을 커스터마이즈 항목과 같은 형식에서 지정합니다.
equip_type(을)를 생략 할까nil(을)를 지정하면, 커스터마이즈 항목으로 설정한 장비란으로 돌아옵니다.
# 액터ID:2 의 장비란을 「방패, 신체, 장식품, 장식품, 장식품」으로 한다
set_actor_equip_type(2, [0, 2, 3, 3, 3])

# 액터ID:2 의 장비란을 되돌린다
# (어느 쪽의 방법에서도 같다)
set_actor_equip_type(2, nil)
set_actor_equip_type(2)

change_actor_equipment(actor_id, index, item_id)
액터actor_id의 장비란index의 장비품을item_id(으)로 변경합니다.
index에는, 무기를0, 최초의 방어구란을1(으)로 한 번호를 지정합니다.
item_id에는, 변경 후의 무기 or 방어구의 ID (을)를 지정합니다.
장비를 해제하는 경우는,item_id에0(을)를 지정합니다.
# 액터ID:1 의 최초의 방어구(디폴트에서는 「방패」)를 방어구ID:5 (으)로 변경
change_actor_equipment(1, 1, 5)
# 액터ID:2 의 3번째의 방어구(디폴트에서는 「신체」)를 방어구ID:21 (으)로 변경
change_actor_equipment(2, 3, 21)
# 액터ID:3 의 무기를 벗는다
change_actor_equipment(3, 0, 0)



------------------- 스크립트 원문 ----------------------------------------------------------------------


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

#==============================================================================
# ★ カスタマイズ項目 - 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) 制を使用する
  USE_EP_SYSTEM = true
  # ◆ EP の名前
  VOCAB_EP   = "EP"
  # ◆ EP の名前 (略)
  VOCAB_EP_A = "E"
  # ◆ ステータス画面に EP を表示する
  SHOW_STATUS_EP = true

  # ◆ 消費 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 値の色 (アイテム名の末尾に付く数値)
  #  数値  : 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::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
  #--------------------------------------------------------------------------
  # ○ アクターの装備を変更
  #     actor_id   : アクター ID
  #     index      : 装備部位 (0~)
  #     item_id    : 武器 or 防具 ID (0 で解除)
  #--------------------------------------------------------------------------
  def change_actor_equipment(actor_id, index, item_id)
    actor = $game_actors[actor_id]
    return if actor == nil
    actor.change_equip_by_id(index, item_id)
  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.split(/[rn]+/).each { |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.split(/[rn]+/).each { |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               # 装備タイプ
  #--------------------------------------------------------------------------
  # ● セットアップ
  #     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)

    restore_equip
  end
  #--------------------------------------------------------------------------
  # ○ MaxEP 取得
  #--------------------------------------------------------------------------
  def maxep
    n = Integer(eval(KGC::EquipExtension::EP_CALC_EXP))
    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
  #--------------------------------------------------------------------------
  # ○ 防具欄の取得
  #--------------------------------------------------------------------------
  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)
    change_equip_KGC_EquipExtension(equip_type, item, test)

    # 拡張防具欄がある場合のみ
    if extra_armor_number > 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"]
    restore_passive_rev  if $imported["PassiveSkill"]
  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"]
    restore_passive_rev  if $imported["PassiveSkill"]
  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, WLH * 0, 92, WLH, Vocab::weapon1)
      self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2)
    else
      self.contents.draw_text(4, WLH * 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

---------------------------------------- 여기까지 --------------------------------------------------------------------------------

 

출처 : KGC software

Comment '18'
  • ?
    양념통닼 2008.06.10 09:00
    장비확장은 사용하고 있는데 ep는 사용하면 왠지 게임이 힘들어질지도......

    족 이라고 써있는 부분은 신발 등으로 고쳐서 써야 겠네요.
  • ?
    만들어보자꾸나 2008.06.10 14:07

     제가 지금 제작하고 있는 게임에는 ep기능을 적용시켰는데 기능이 다양해지는 긍정적인 측면도 있는 반면에 말씀대로
    그만큼 ep로 인해 게임 벨런싱에 변수가 많아지는게 단점이 되는것 같습니다.
     사용법을 그냥 번역기 돌린거라 ㄷㄷㄷ;  양해바랍니다..;

  • ?
    페르곤 2008.06.22 11:44

    와 혁명이다

  • ?
    페르곤 2008.06.22 11:47
    근데 왜 안되지
  • ?
    만들어보자꾸나 2008.06.22 17:16
     위 스크립트를 붙여넣는것 만으로도 작동은 합니다만,. 장비를 EP 설정할때는 스크립트를 좀 살펴볼 필요가 있을겁니다.
     아예 작동이 안되는 거라면 아마도 다른 스크립트와 충돌이 있어서가 아닐까 합니다.
     새프로젝트를 만들어서 테스트해 본 결과 바로 적용이 되었거든요.
     사용법은 http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/equip&tech=equip_extension 주소로
    가셔서 번역기 돌려보시면서 이해하시는게 더 빠를수도 있겠네요.
  • ?
    배군 2008.07.10 20:22
    이거 보면 다리 장비 탭하고 다른게 있지않습니까
    그거전용으로 어떻게 만들어야하죠??
    아좀 알려주셈 ㅠㅠ
  • ?
    만들어보자꾸나 2008.07.24 16:56
     데이터베이스의 장비설정에서 메모란에 장비종별명칭을 적으면 그 장비는 그 종류로 인식됩니다.
     다만, 종별을 설정했던 그 이름과 같아야겠죠.
     즉, 스크립트 내에서 종류에 '망토'라는 탭을 추가시켰다면, 데이터베이스에서 망토로 인식케할 장비의 메모란에
    '망토'를 그대로 써야 인식이 된다는 겁니다.  한 글자라도 틀리거나하면 인식이 안되니 주의..
  • ?
    배군 2008.07.24 17:15
    으헝 정말감사합니다 ㅠㅠ
    덕분에 잘 할수 있겠군요
  • ?
    만들어보자꾸나 2008.07.24 17:00
    아 그리고 스크립트를 직접 뜯어가면서 하시기 힘들면 올려놓은 스크립트대로의 설정은
    <装備種別 足>
    이런식으로 메모란에 써야됩니다.
     즉 앞에 '<装備種別' 를 그대로 카피해서 쓰고 한칸 띄우고 스크립트 윗부분에 탭 설정하는 곳에 썼던 종류이름을 그대로 쓰고
    '>'로 닫으면 됩니다.  '< >' 빠뜨리면 안됩니다.
  • ?
    bambumgi 2013.04.21 15:05
    87번째 줄에있는 装備種別를 따른걸로 바꾸면 그걸 입력하면 됩니다
  • ?
    배군 2008.07.20 11:49

    자세히 어떻게 말해야할질모르겟지만
    최대한 자세히 말하겠습니다.
    제가 추가 장비탭으로 망토와 신발장비를 만들었는데
    보면
    무기,장신구,방패,갑옷
    은 전용 장비가 있지않습니까
    그것처럼 신발탭 망토탭의 전용장비를 어떻게 만드느냐입니다.
    부탁드립니다. 알려주세요 ㅠ

  • ?
    만들어보자꾸나 2008.07.11 19:08
     좀더 구체적으로 말해주세요.  말씀의 뜻이 잘 이해가 안되서^^;
  • ?
    흑기사 2008.07.13 18:11 Files첨부 (1)


    전 이렇게 뜨는데요...
  • ?
    만들어보자꾸나 2008.07.14 16:42
     한자를 인식못할 때 저렇게 나오던데.. 스크립트 들어가셔서 ""안에 있는 부분을 한글로 고쳐서 쓰면 올바르게 나올 것 같아요.
  • ?
    주작GM 2008.07.25 13:49

    방어구 확장 어케 해요?

  • ?
    만들어보자꾸나 2008.07.25 15:57

     사용법 참고하시고 위에 다른분들 질문에 답한 답글들 참고하시면 될겁니다.

  • ?
    시옷청룡 2012.02.25 14:34

    '<>'이거 없이 해야 되는걸로 기억하는뎁...;

  • ?
    hjgdgjhsjkgsd 2013.10.17 12:59
    <装備種別 ~> 에 ~부분에는 한자말고 숫자나 한글로해도되나요?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5452
77 미니맵 미니맵 스크립트(아랫거랑 다른거) 75 file 츠키아 2008.08.08 6148
76 액터 스탯 시스탬 29 츠키아 2008.08.08 4217
75 다음 레벨까지의 경험치 강제조정 13 정의로운녀석 2008.07.24 3273
74 상점 상점 아이템 목록 정리 14 정의로운녀석 2008.07.22 3772
73 변수/스위치 맵에 변수와 스위치 설정하기.. 5 정의로운녀석 2008.07.22 1986
72 영상 RMVX에서 AVI 재생 스크립트 12 Nymph 2008.07.07 4114
71 전투 [vx] ATB 시스템. 10 만들어보자꾸나 2008.07.05 4928
70 메뉴 지난 메뉴 스크립트에 이은 스테이터스 스크립트! 5 file 독사 2008.06.29 3549
69 저장 [퍼옴] Neo_Save_System ver.1.0 10 레오 2008.06.14 4451
68 기타 [KGC]한계돌파 9 방콕족의생활 2008.06.13 3602
67 메뉴 헬프 윈도우 중앙표시 스크립트 11 file 양념통닼 2008.06.10 3349
» 장비 장비 확장 및 EP 기능 18 만들어보자꾸나 2008.06.10 3657
65 맵/타일 타일셋 변경 10 file 만들어보자꾸나 2008.06.08 4373
64 맵/타일 타일 태그 및 4방향 설정 7 file 만들어보자꾸나 2008.06.08 2670
63 기타 빛 이펙트 71 file DEVIL<Li Patanis Roni Kraudus> 2008.06.06 5861
62 미니맵 미니맵 띠우는 스크립트 ^^ 37 file 아방스 2008.06.02 7248
61 제작도구 게임제작에 필수인 테스트 플레이 고속화 스크립트! ! ! ! 25 양념통닼 2008.05.30 4448
60 키입력 커맨드 입력 스킬 시스템 17 file 양념통닼 2008.05.29 3348
59 메뉴 창 크기 변경 스크립트 6 file Incubus 2008.05.25 5945
58 키입력 마우스 시스템 Simple Mouse System (수정) 42 Incubus 2008.05.24 5696
Board Pagination Prev 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Next
/ 32