查看: 892|回复: 0

[已经过期] 關於KGC的裝備品改造腳本的問題

[复制链接]
梦石
0
星屑
703
在线时间
313 小时
注册时间
2013-6-1
回帖
125
发表于 2013-9-6 19:58:53 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 e900003 于 2013-9-6 20:22 编辑

如題
這個腳本要怎麼設定
因為全都是日文  看過說明我根本看不懂設定內容...

另外我給個原腳本網址  
點我

[pre lang="ruby" line="1"]#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 装備品改造 - KGC_AlterEquipment ◆
#_/    ◇ Last update : 2008/01/12 ◇
#_/----------------------------------------------------------------------------
#_/  装備品を改造し、特殊効果を付加する機能を追加します。
#_/============================================================================
#_/ ≪戦闘難易度[BattleDifficulty]≫より上
#_/ ≪装備拡張[EquipExtension]≫より下
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

$data_states = load_data("Data/States.rxdata") if $data_states == nil

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

module KGC
  # ◆改造武器最大数
  #  多すぎると動作やセーブファイルが重くなります。(300 以下を推奨)
  AEQ_WEAPON_MAX = 100
  # ◆改造防具最大数
  AEQ_ARMOR_MAX = 100
  # ◆改造回数を付加
  #  true を指定すると、名称の末尾に +1 等が付く。
  AEQ_SHOW_ALTER_COUNT = true
  # ◆改造回数の書式
  #  【{n}…改造回数】
  AEQ_ALTER_COUNT_FORMAT = "+{n}"

  # ◆装備名変更に使用するアクターのID(名前入力バッファ)
  AEQ_RENAME_ACTOR_ID = 13
  # ◆装備名の最大文字数(MAX:16)
  AEQ_RENAME_MAX_LENGTH = 16
  # ◆装備名変更画面に移行するボタン
  #  (A,X,Y,Z を推奨。nil にすると装備名変更機能無し)
  AEQ_RENAME_BUTTON = Input::A

  # ◆改造可能回数
  #  武器名の [ALT{n}] を省略した場合に使用。
  #  負数を指定すると何度でも改造可能。
  AEQ_ALTERABLE_COUNT = -1
  # ◆除外装備タイプ
  #  改造不可能にする装備タイプ配列(≪装備拡張≫に対応)
  AEQ_EXCLUDE_EQUIP_TYPE = [4]
  # ◆除外武器
  #  改造不可能にする武器ID配列
  AEQ_EXCLUDE_WEAPONS = []
  # ◆除外防具
  #  改造不可能にする防具ID配列
  AEQ_EXCLUDE_ARMORS = []

  # ◆武器ファクター一覧
  #  ≪"名称", "ヘルプ", [[タイプ, ID], ...], 費用, [使用アイテムID, 個数], ...≫
  #  【タイプ】0..攻撃属性  1..ステート[+]  2..ステート[-]  3..能力値強化
  #  【  ID  】改造時に使用する属性/ステートのID
  #  【 費用 】改造費用。武器の価格に対する割合(%)
  #  配列なので、忘れずに末尾に , を付けてください。
  #  (最後の項目だけは付けても付けなくても良い)
  AEQ_WEAPON_FACTORS = [
    # 属性
    ["[炎]攻撃", "武器に炎属性を付加します。", [[0, 1]], 10, [13, 1]],
    ["[氷]攻撃", "武器に氷属性を付加します。", [[0, 2]], 10, [14, 1]],
    ["[雷]攻撃", "武器に雷属性を付加します。", [[0, 3]], 10, [15, 1]],
    ["[水]攻撃", "武器に水属性を付加します。", [[0, 4]], 10, [15, 1]],
    ["[土]攻撃", "武器に土属性を付加します。", [[0, 5]], 10, [13, 1]],
    ["[風]攻撃", "武器に風属性を付加します。", [[0, 6]], 10, [16, 1]],
    ["[光]攻撃", "武器に光属性を付加します。", [[0, 7]], 10, [14, 1]],
    ["[闇]攻撃", "武器に闇属性を付加します。", [[0, 8]], 10, [16, 1]],
    # ステート
    ["[即死]攻撃", "武器に即死効果を付加します。", [[1, 1]], 20, [10, 1], [13, 1]],
    # 能力値強化
    ["[攻撃力]上昇", "武器の攻撃力を5%上げます。", [[3, 27]], 10, [13, 1]],
  ]  # ←この ] は消さないこと

  # ◆防具ファクター一覧
  #  ≪"名称", "ヘルプ", [[タイプ, ID], ...], 費用, [使用アイテムID, 個数], ...≫
  #  【タイプ】0..防御属性  1..防御ステート  2..能力値強化
  #  【  ID  】改造時に使用する属性/ステートのID
  #  【 費用 】改造費用。防具の価格に対する割合(%)
  AEQ_ARMOR_FACTORS = [
    # 属性
    ["[炎]防御", "防具に炎耐性を付加します。", [[0, 1]], 10, [13, 1]],
    ["[氷]防御", "防具に氷耐性を付加します。", [[0, 2]], 10, [14, 1]],
    ["[雷]防御", "防具に雷耐性を付加します。", [[0, 3]], 10, [15, 1]],
    ["[水]防御", "防具に水耐性を付加します。", [[0, 4]], 10, [15, 1]],
    ["[土]防御", "防具に土耐性を付加します。", [[0, 5]], 10, [13, 1]],
    ["[風]防御", "防具に風耐性を付加します。", [[0, 6]], 10, [16, 1]],
    ["[光]防御", "防具に光耐性を付加します。", [[0, 7]], 10, [14, 1]],
    ["[闇]防御", "防具に闇耐性を付加します。", [[0, 8]], 10, [16, 1]],
    # ステート
    ["[即死]防御", "防具に即死耐性を付加します。", [[1, 1]], 20, [10, 1], [13, 1]],
    # 能力値強化
    ["[物理攻撃力]+20",  "防具の物理攻撃力を 20 上げます。", [[2, 30]], 10, [13, 1]],
    ["[物理防御力]上昇", "防具の物理防御力を5%上げます。", [[2, 28]], 10, [14, 1]],
  ]  # ←この ] は消さないこと

  # ◆価格 0 の武器価格計算式
  #  【 atk…攻撃力  pdef…物理防御  mdef…魔法防御  str_p…腕力+
  #     dex_p…器用さ+  agi_p…素早さ+  int_p…魔力+ 】
  #  改造費用算出に使用。(売却することはできない)
  AEQ_WEAPON_PRICE_FORMULA =
    "(atk + pdef + mdef + (str_p + dex_p + agi_p + int_p).abs) * 30"
  # ◆価格 0 の防具価格計算式
  #  【 pdef…物理防御  mdef…魔法防御  eva…回避修正  str_p…腕力+
  #     dex_p…器用さ+  agi_p…素早さ+  int_p…魔力+ 】
  AEQ_ARMOR_PRICE_FORMULA =
    "(pdef + mdef + (eva + str_p + dex_p + agi_p + int_p).abs) * 30"

  # ◆改造画面背景透過
  AEQ_BACK_TRANSPARENT = true

  # ◆「武器改造」名称
  AEQ_COMMAND_WEAPON_ALTER   = "武器改造"
  # ◆「改造装備破棄」名称
  AEQ_COMMAND_WEAPON_DISPOSE = "改造装備破棄"
  # ◆「防具改造」名称
  AEQ_COMMAND_ARMOR_ALTER    = "防具改造"
  # ◆「改造防具破棄」名称
  AEQ_COMMAND_ARMOR_DISPOSE  = "改造防具破棄"

  # ◆「武器改造」ヘルプ
  AEQ_HELP_WEAPON_ALTER   = "所持している武器を改造します。"
  # ◆「改造装備破棄」ヘルプ
  AEQ_HELP_WEAPON_DISPOSE = "改造した武器を破棄します。"
  # ◆「防具改造」ヘルプ
  AEQ_HELP_ARMOR_ALTER    = "所持している防具を改造します。"
  # ◆「改造防具破棄」ヘルプ
  AEQ_HELP_ARMOR_DISPOSE  = "改造した防具を破棄します。"

  # ◆改造武器リスト空欄の表示文字列
  AEQ_TEXT_NO_WEAPON = "- No weapon -"
  # ◆改造防具リスト空欄の表示文字列
  AEQ_TEXT_NO_ARMOR  = "- No armor -"

  # ◆付加属性を表示する範囲
  #  ([Integer][Range]クラスの配列)
  AEQ_ELEMENT_RANGE = [1..8]
  # ◆付加/解除ステートを表示する範囲
  #  (指定方法は AEQ_ELEMENT_RANGE と同様)
  AEQ_STATE_RANGE = [1...$data_states.size]

  # ◆武器改造確認コマンド
  AEQ_ALTER_COMMAND   = ["改造する", "やめる"]
  # ◆武器破棄確認コマンド
  AEQ_DISPOSE_COMMAND = ["破棄する", "やめる"]
  # ◆ファクター付加確認コマンド
  AEQ_FACTOR_COMMAND  = ["付加する", "やめる"]
  #  ※↑3項目は、コマンド数を変更するとバグります。
end

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

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

#--------------------------------------------------------------------------
# ○ 装備品改造画面呼び出し
#--------------------------------------------------------------------------
def call_equip_alter
  # プレイヤーの姿勢を矯正
  $game_player.straighten
  # 装備品改造画面に切り替え
  $scene = Scene_AlterEquipment.new
end

module AlteredEquipment
  #--------------------------------------------------------------------------
  # ○ 改造武器破棄
  #     index : 改造武器番号 (1~AEQ_WEAPON_MAX)
  #--------------------------------------------------------------------------
  def self.dispose_weapon(index)
    # 破棄できない場合は戻る
    if index < 1 || index > KGC::AEQ_WEAPON_MAX ||
        $game_party.alter_weapons[index - 1] == nil
      return
    end
    # 指定武器を破棄
    id = $game_party.alter_weapons[index - 1].id
    $game_party.alter_weapons[index - 1] = nil
    $data_weapons[id] = RPG::Weapon2.new
    $game_party.lose_weapon(id, 99)
  end
  #--------------------------------------------------------------------------
  # ○ 改造防具破棄
  #     index : 改造防具番号 (1~AEQ_ARMOR_MAX)
  #--------------------------------------------------------------------------
  def self.dispose_armor(index)
    # 破棄できない場合は戻る
    if index < 1 || index > KGC::AEQ_ARMOR_MAX ||
        $game_party.alter_armors[index - 1] == nil
      return
    end
    # 指定防具を破棄
    id = $game_party.alter_armors[index - 1].id
    $game_party.alter_armors[index - 1] = nil
    $data_armors[id] = RPG::Armor2.new
    $game_party.lose_armor(id, 99)
  end
  #--------------------------------------------------------------------------
  # ○ 指定IDの武器と、それを改造した武器をすべて破棄
  #     id : 武器ID
  #--------------------------------------------------------------------------
  def self.dispose_all_weapon(id)
    weapons = $game_party.alter_weapons.find_all { |w|
      w != nil && w.original_id == id
    }
    weapons.each { |w|
      index = $game_party.alter_weapons.index(w) + 1
      dispose_weapon(index)
    }
    $game_party.lose_weapon(id, 99)
  end
  #--------------------------------------------------------------------------
  # ○ 指定IDの防具と、それを改造した防具をすべて破棄
  #     id : 防具ID
  #--------------------------------------------------------------------------
  def self.dispose_all_armor(id)
    armors = $game_party.alter_armors.find_all { |a|
      a != nil && a.original_id == id
    }
    armors.each { |a|
      index = $game_party.alter_armors.index(a) + 1
      dispose_armor(index)
    }
    $game_party.lose_armor(id, 99)
  end
end

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

#==============================================================================
# □ 武器・防具 共用モジュール
#==============================================================================

module KGC_AlterEquipment_WA
  #--------------------------------------------------------------------------
  # ○ オリジナル名取得
  #--------------------------------------------------------------------------
  def original_name
    return @name
  end
  #--------------------------------------------------------------------------
  # ○ 改造可能回数取得
  #--------------------------------------------------------------------------
  def alterable_count
    return original_name =~ /\[ALT[ ]*(\d+)\]/i ? $1.to_i : KGC::AEQ_ALTERABLE_COUNT
  end
end

module KGC_AlterEquipment_WA2
  attr_writer :change_name
  #--------------------------------------------------------------------------
  # ○ 改造回数を除去した名称取得
  #--------------------------------------------------------------------------
  def plain_name
    if KGC::AEQ_SHOW_ALTER_COUNT
      rg = (KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/(.*){n}/i) {
        "[#{$1}]{#{$1.scan(/./).size}}\\d+"
      }).gsub(/\-/) {"\-"}
      return name.gsub(%r(#{rg}$)i) {""}
    else
      return name
    end
  end
  #--------------------------------------------------------------------------
  # ○ 残り改造可能回数取得
  #--------------------------------------------------------------------------
  def alterable_count
    return (@name =~ /\[ALT[ ]*(\d+)\]/i ? $1.to_i : KGC::AEQ_ALTERABLE_COUNT) - @alter_count
  end
  #--------------------------------------------------------------------------
  # ○ オリジナルID取得
  #--------------------------------------------------------------------------
  def original_id
    return @original_id
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数取得
  #--------------------------------------------------------------------------
  def alter_count
    @alter_count = 0 if @alter_count == nil
    return @alter_count
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数加算
  #--------------------------------------------------------------------------
  def add_alter_count
    @alter_count = 0 if @alter_count == nil
    @alter_count += 1
    self.show_alter_count
  end
end

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

#==============================================================================
# ■ RPG::Weapon
#==============================================================================

class RPG::Weapon
  include KGC_AlterEquipment_WA
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/\[.*\]/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 回避修正
  #--------------------------------------------------------------------------
  def eva
    return 0
  end
end

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

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

class RPG::Armor
  include KGC_AlterEquipment_WA
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/\[.*\]/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 攻撃力
  #--------------------------------------------------------------------------
  def atk
    return 0
  end
end

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

#==============================================================================
# □ RPG::Weapon2
#==============================================================================

class RPG::Weapon2 < RPG::Weapon
  include KGC_AlterEquipment_WA2
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @eva = 0

    @original_id = 0
    @original_price = 0
    @alter_count = 0
  end
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/\[.*\]/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 回避修正
  #--------------------------------------------------------------------------
  def eva
    @eva = 0 if @eva == nil
    return @eva
  end
  #--------------------------------------------------------------------------
  # ○ 改造費用算出
  #--------------------------------------------------------------------------
  def alter_cost(factor)
    if @original_price == 0
      formula = KGC::AEQ_WEAPON_PRICE_FORMULA.dup
      formula.gsub!(/atk/i)   {"@atk"}
      formula.gsub!(/pdef/i)  {"@pdef"}
      formula.gsub!(/mdef/i)  {"@mdef"}
      formula.gsub!(/eva/i)   {""}
      formula.gsub!(/str_p/i) {"@str_plus"}
      formula.gsub!(/dex_p/i) {"@dex_plus"}
      formula.gsub!(/agi_p/i) {"@agi_plus"}
      formula.gsub!(/int_p/i) {"@int_plus"}
      cost = eval(formula)
    else
      cost = @original_price
    end
    cost = cost * factor[3] / 100
    return Integer(cost)
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加可否
  #--------------------------------------------------------------------------
  def can_add_factor?(factor)
    # 価格判定
    if $game_party.gold < self.alter_cost(factor)
      return false
    end
    # アイテム所持判定
    (4...factor.size).each { |i|
      if $game_party.item_number(factor[0]) < factor[1]
        return false
      end
    }
    (0...factor[2].size).each { |i|
      # 付加済み判定
      case factor[2][0]
      when 0  # 属性
        if @element_set.include?(factor[2][1])
          return false
        end
      when 1  # ステート付加
        if @plus_state_set.include?(factor[2][1])
          return false
        end
      when 2  # ステート解除
        if @minus_state_set.include?(factor[2][1])
          return false
        end
      end
    }
    return true
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加
  #--------------------------------------------------------------------------
  def add_factor(factor)
    (0...factor[2].size).each { |i|
      # ファクターを付加
      case factor[2][0]
      when 0  # 属性
        @element_set.push(factor[2][1])
        @element_set.sort!
      when 1  # ステート付加
        @plus_state_set.push(factor[2][1])
        @plus_state_set.sort!
      when 2  # ステート解除
        @minus_state_set.push(factor[2][1])
        @minus_state_set.sort!
      when 3  # 能力値
        return if (state = $data_states[factor[2][1]]) == nil
        if state.original_name =~ /\[EQAL[ ]*(?:%|%)\]/i
          @atk += @atk * state.atk_rate / 100
          @pdef += @pdef * state.pdef_rate / 100
          @mdef += @mdef * state.mdef_rate / 100
          @eva += @eva * state.eva / 100
          @str_plus += @str_plus * state.str_rate / 100
          @dex_plus += @dex_plus * state.dex_rate / 100
          @agi_plus += @agi_plus * state.agi_rate / 100
          @int_plus += @int_plus * state.int_rate / 100
        else
          @atk += state.atk_rate
          @pdef += state.pdef_rate
          @mdef += state.mdef_rate
          @eva += state.eva
          @str_plus += state.str_rate
          @dex_plus += state.dex_rate
          @agi_plus += state.agi_rate
          @int_plus += state.int_rate
        end
      end
    }
    # 金消費
    $game_party.lose_gold(self.alter_cost(factor))
    # アイテム消費
    (4...factor.size).each { |i|
      $game_party.lose_item(factor[0], factor[1])
    }
    # 改造回数加算
    self.add_alter_count
  end
  #--------------------------------------------------------------------------
  # ○ 武器情報をコピー
  #--------------------------------------------------------------------------
  def copy_weapon(id)
    weapon = $data_weapons[id]
    @original_id = id
    @change_name = nil
    self.show_alter_count
    @icon_name = weapon.icon_name.dup
    @description = weapon.description.dup
    @animation1_id = weapon.animation1_id
    @animation2_id = weapon.animation2_id
    @price = 0
    @original_price = weapon.price
    @atk = weapon.atk
    @pdef = weapon.pdef
    @mdef = weapon.mdef
    @eva = 0
    @str_plus = weapon.str_plus
    @dex_plus = weapon.dex_plus
    @agi_plus = weapon.agi_plus
    @int_plus = weapon.int_plus
    @element_set = weapon.element_set.dup
    @plus_state_set = weapon.plus_state_set.dup
    @minus_state_set = weapon.minus_state_set.dup
    # 装備可能者を設定
    (1...$data_classes.size).each { |i|
      actor_class = $data_classes
      # 改造対象の武器を装備できるクラスの場合
      if actor_class.weapon_set.include?(id)
        # 装備可能武器に追加
        actor_class.weapon_set.push(@id)
      else
        # 装備できない場合は装備可能武器から削除
        actor_class.weapon_set.delete(@id)
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数表示
  #--------------------------------------------------------------------------
  def show_alter_count
    @name = (@change_name != nil ? @change_name :
      $data_weapons[@original_id].original_name).dup
    if KGC::AEQ_SHOW_ALTER_COUNT
      @name += KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/{n}/i) {"#{@alter_count}"}
    end
  end
end

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

#==============================================================================
# □ RPG::Armor2
#==============================================================================

class RPG::Armor2 < RPG::Armor
  include KGC_AlterEquipment_WA2
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @atk = 0

    @original_id = 0
    @original_price = 0
    @alter_count = 0
  end
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/\[.*\]/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 攻撃力
  #--------------------------------------------------------------------------
  def atk
    @atk = 0 if @atk == nil
    return @atk
  end
  #--------------------------------------------------------------------------
  # ○ 改造費用算出
  #--------------------------------------------------------------------------
  def alter_cost(factor)
    if @original_price == 0
      formula = KGC::AEQ_ARMOR_PRICE_FORMULA.dup
      formula.gsub!(/atk/i)   {""}
      formula.gsub!(/pdef/i)  {"@pdef"}
      formula.gsub!(/mdef/i)  {"@mdef"}
      formula.gsub!(/eva/i)   {"@eva"}
      formula.gsub!(/str_p/i) {"@str_plus"}
      formula.gsub!(/dex_p/i) {"@dex_plus"}
      formula.gsub!(/agi_p/i) {"@agi_plus"}
      formula.gsub!(/int_p/i) {"@int_plus"}
      cost = eval(formula)
    else
      cost = @original_price
    end
    cost = cost * factor[3] / 100
    return Integer(cost)
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加可否
  #--------------------------------------------------------------------------
  def can_add_factor?(factor)
    # 価格判定
    if $game_party.gold < self.alter_cost(factor)
      return false
    end
    # アイテム所持判定
    (4...factor.size).each { |i|
      if $game_party.item_number(factor[0]) < factor[1]
        return false
      end
    }
    (0...factor[2].size).each { |i|
      # 付加済み判定
      case factor[2][0]
      when 0  # 防御属性
        if @guard_element_set.include?(factor[2][1])
          return false
        end
      when 1  # 防御ステート
        if @guard_state_set.include?(factor[2][1])
          return false
        end
      end
    }
    return true
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加
  #--------------------------------------------------------------------------
  def add_factor(factor)
    # 金消費
    $game_party.lose_gold(self.alter_cost(factor))
    # アイテム消費
    (4...factor.size).each { |i|
      $game_party.lose_item(factor[0], factor[1])
    }
    (0...factor[2].size).each { |i|
      # ファクターを付加
      case factor[2][0]
      when 0  # 防御属性
        @guard_element_set.push(factor[2][1])
        @guard_element_set.sort!
      when 1  # 防御ステート
        @guard_state_set.push(factor[2][1])
        @guard_state_set.sort!
      when 2  # 能力値
        return if (state = $data_states[factor[2][1]]) == nil
        if state.original_name =~ /\[EQAL[ ]*(?:%|%)\]/i
          @atk += @atk * state.atk_rate / 100
          @pdef += @pdef * state.pdef_rate / 100
          @mdef += @mdef * state.mdef_rate / 100
          @eva += @eva * state.eva / 100
          @str_plus += @str_plus * state.str_rate / 100
          @dex_plus += @dex_plus * state.dex_rate / 100
          @agi_plus += @agi_plus * state.agi_rate / 100
          @int_plus += @int_plus * state.int_rate / 100
        else
          @atk += state.atk_rate
          @pdef += state.pdef_rate
          @mdef += state.mdef_rate
          @eva += state.eva
          @str_plus += state.str_rate
          @dex_plus += state.dex_rate
          @agi_plus += state.agi_rate
          @int_plus += state.int_rate
        end
      end
    }
    # 改造回数加算
    self.add_alter_count
  end
  #--------------------------------------------------------------------------
  # ○ 防具情報をコピー
  #--------------------------------------------------------------------------
  def copy_armor(id)
    armor = $data_armors[id]
    @original_id = id
    @change_name = nil
    self.show_alter_count
    @icon_name = armor.icon_name.dup
    @description = armor.description.dup
    @kind = armor.kind
    @auto_state_id = armor.auto_state_id
    @price = 0
    @original_price = armor.price
    @atk = 0
    @pdef = armor.pdef
    @mdef = armor.mdef
    @eva = armor.eva
    @str_plus = armor.str_plus
    @dex_plus = armor.dex_plus
    @agi_plus = armor.agi_plus
    @int_plus = armor.int_plus
    @guard_element_set = armor.guard_element_set.dup
    @guard_state_set = armor.guard_state_set.dup
    # 装備可能者を設定
    (1...$data_classes.size).each { |i|
      actor_class = $data_classes
      # 改造対象の武器を装備できるクラスの場合
      if actor_class.armor_set.include?(id)
        # 装備可能武器に追加
        actor_class.armor_set.push(@id)
      else
        # 装備できない場合は装備可能武器から削除
        actor_class.armor_set.delete(@id)
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数表示
  #--------------------------------------------------------------------------
  def show_alter_count
    @name = (@change_name != nil ? @change_name :
      $data_armors[@original_id].original_name).dup
    if KGC::AEQ_SHOW_ALTER_COUNT
      @name += KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/{n}/i) {"#{@alter_count}"}
    end
  end
end

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

#==============================================================================
# ■ RPG::State
#==============================================================================

class RPG::State
  #--------------------------------------------------------------------------
  # ● 名前の取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/\[.*\]/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ オリジナル名取得
  #--------------------------------------------------------------------------
  def original_name
    return @name
  end
end

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

#==============================================================================
# ■ Game_Temp
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :equipment_alter_rename
  attr_accessor :equipment_alter_rename_type
  attr_accessor :equipment_alter_rename_id
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_AlterEquipment initialize
  def initialize
    initialize_KGC_AlterEquipment

    @equipment_alter_rename = false
    @equipment_alter_rename_type = 0
    @equipment_alter_rename_id = 0
  end
end

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

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 回避修正の取得
  #--------------------------------------------------------------------------
  alias eva_KGC_AlterEquipment eva
  def eva
    n = eva_KGC_AlterEquipment
    if self.is_a?(Game_Actor)
      # 改造した武器の回避修正を加算
      equip_weapon_list.each { |weapon| n += weapon.eva }
    end
    return n
  end
end

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

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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 基本攻撃力の取得
  #--------------------------------------------------------------------------
  alias base_atk_KGC_AlterEquipment base_atk
  def base_atk
    n = base_atk_KGC_AlterEquipment

    # 改造した防具の攻撃力を加算
    equip_armor_list.each { |armor| n += armor.atk }
    return n
  end

  unless $imported["EquipExtension"]
  #--------------------------------------------------------------------------
  # ○ 装備武器リストの取得
  #--------------------------------------------------------------------------
  def equip_weapon_list
    result = [$data_weapons[@weapon_id]]
    return result.compact
  end
  #--------------------------------------------------------------------------
  # ○ 装備防具リストの取得
  #--------------------------------------------------------------------------
  def equip_armor_list
    result = []
    (1..4).each { |i| result << $data_armors[eval("@armor#{i}_id")] }
    return result.compact
  end
  end
end

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

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

class Game_Party
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_AlterEquipment initialize
  def initialize
    initialize_KGC_AlterEquipment

    @alter_weapons = []
    @alter_armors = []
  end
  #--------------------------------------------------------------------------
  # ○ 改造装備取得
  #--------------------------------------------------------------------------
  def alter_weapons
    @alter_weapons = [] if @alter_weapons == nil
    return @alter_weapons
  end
  #--------------------------------------------------------------------------
  # ○ 改造装備設定
  #--------------------------------------------------------------------------
  def alter_weapons=(ary)
    @alter_weapons = [] if @alter_weapons == nil
    @alter_weapons = ary
  end
  #--------------------------------------------------------------------------
  # ○ 改造防具取得
  #--------------------------------------------------------------------------
  def alter_armors
    @alter_armors = [] if @alter_armors == nil
    return @alter_armors
  end
  #--------------------------------------------------------------------------
  # ○ 改造防具設定
  #--------------------------------------------------------------------------
  def alter_armors=(ary)
    @alter_armors = [] if @alter_armors == nil
    @alter_armors = ary
  end
end

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

#==============================================================================
# □ Window_AlterEquipmentCommand
#------------------------------------------------------------------------------
#  装備改造画面で、操作を選択するウィンドウです。
#==============================================================================

class Window_AlterEquipmentCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @commands = [KGC::AEQ_COMMAND_WEAPON_ALTER, KGC::AEQ_COMMAND_WEAPON_DISPOSE,
      KGC::AEQ_COMMAND_ARMOR_ALTER, KGC::AEQ_COMMAND_ARMOR_DISPOSE]
    @item_max = @commands.size
    @column_max = @commands.size
    @item_width = (width - 32) / @commands.size
    self.z = 1000
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    for i in 0...@commands.size
      rect = Rect.new(@item_width * i, 0, @item_width, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
      self.contents.font.color = system_color
      self.contents.draw_text(rect, @commands, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if index != -1
      self.cursor_rect.set(@item_width * index, 0, @item_width, 32)
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    case self.index
    when 0
      @help_window.set_text(KGC::AEQ_HELP_WEAPON_ALTER)
    when 1
      @help_window.set_text(KGC::AEQ_HELP_WEAPON_DISPOSE)
    when 2
      @help_window.set_text(KGC::AEQ_HELP_ARMOR_ALTER)
    when 3
      @help_window.set_text(KGC::AEQ_HELP_ARMOR_DISPOSE)
    end
  end
end

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

#==============================================================================
# □ Window_AlterEquipmentLeft
#------------------------------------------------------------------------------
#  装備改造画面で、改造する装備スロットの一覧を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentLeft < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 128, 320, 352)
    self.active = false
    self.index = -1
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    @column_max = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ 装備の取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(type = 0)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # スロット一覧を作成
    case type
    when 0
      for i in 0...KGC::AEQ_WEAPON_MAX
        weapon = $game_party.alter_weapons
        @data.push(weapon)
      end
    when 1
      for i in 0...KGC::AEQ_ARMOR_MAX
        armor = $game_party.alter_armors
        @data.push(armor)
      end
    end
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max
      draw_item(i, type)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index, type)
    item = @data[index]
    x = 36
    y = index * 32
    self.contents.font.color = text_color(6)
    self.contents.draw_text(x - 32, y, 32, 32, (index + 1).to_s, 1)
    if item != nil
      case type
      when 0
        number = $game_party.weapon_number(item.id)
      when 1
        number = $game_party.armor_number(item.id)
      end
      ac = item.alterable_count
      if number > 0 && ac != 0
        self.contents.font.color = normal_color
        opacity = 255
      else
        self.contents.font.color = disabled_color
        opacity = ac != 0 ? 255 : 160
      end
      icon = RPG::Cache.icon(item.icon_name)
      self.contents.blt(x, y + 4, icon, icon.rect, opacity)
      self.contents.draw_text(x + 28, y, 224, 32, item.name)
    else
      self.contents.font.color = disabled_color
      case type
      when 0
        self.contents.draw_text(x, y, 256, 32, KGC::AEQ_TEXT_NO_WEAPON, 1)
      when 1
        self.contents.draw_text(x, y, 256, 32, KGC::AEQ_TEXT_NO_ARMOR, 1)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ 項目の再描画
  #--------------------------------------------------------------------------
  def redraw_item(index, type)
    case type
    when 0
      @data[index] = $game_party.alter_weapons[index]
    when 1
      @data[index] = $game_party.alter_armors[index]
    end
    self.contents.fill_rect(0, index * 32, 288, 32, Color.new(0, 0, 0, 0))
    self.draw_item(index, type)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

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

#==============================================================================
# □ Window_AlterEquipmentRight
#------------------------------------------------------------------------------
#  装備改造画面で、所持している装備一覧を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentRight < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320, 128, 320, 352)
    self.active = false
    self.visible = false
    self.index = 0
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    @column_max = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ 装備の取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(type = 0)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    case type
    when 0
      unless KGC::AEQ_EXCLUDE_EQUIP_TYPE.include?(0)
        # 所持している武器を追加
        (1...$alter_weapon_start).each { |i|
          if $game_party.weapon_number(i) > 0 &&
              $data_weapons.alterable_count != 0 &&
              !KGC::AEQ_EXCLUDE_WEAPONS.include?(i)
            @data << $data_weapons
          end
        }
      end
    when 1
      # 所持している防具を追加
      (1...$alter_armor_start).each { |i|
        if $game_party.armor_number(i) > 0 &&
            $data_armors.alterable_count != 0 &&
            !KGC::AEQ_EXCLUDE_ARMORS.include?(i) &&
            !KGC::AEQ_EXCLUDE_EQUIP_TYPE.include?($data_armors.kind + 1)
          @data << $data_armors
        end
      }
    end
    # 個数が 0 の場合は nil を追加
    @data.push(nil) if @data.size == 0
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max
      draw_item(i, type)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index, type)
    item = @data[index]
    return if item == nil
    x = 4
    y = index * 32
    icon = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, icon, icon.rect)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 216, 32, item.name)
    case type
    when 0
      number = $game_party.weapon_number(item.id)
    when 1
      number = $game_party.armor_number(item.id)
    end
    self.contents.draw_text(x + 244, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 260, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

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

#==============================================================================
# □ Window_AlterEquipmentStatus
#------------------------------------------------------------------------------
#  装備改造画面で、選択した装備の能力を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320, 128, 320, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    self.z = 500
    refresh(nil)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(item, factor = nil)
    self.contents.clear
    if factor == nil  # アイテムステータス
      return if item == nil || item.name == ""
      draw_parameter(item, factor)
      draw_element(item, factor)
      draw_state(item, factor)
    else  # 素材アイテム数
      return if factor == nil
      draw_material(item, factor)
    end
  end
  #--------------------------------------------------------------------------
  # ○ パラメータ描画
  #--------------------------------------------------------------------------
  def draw_parameter(item, factor)
    self.contents.font.size = 20
    self.contents.font.color = system_color
    self.contents.draw_text(4,    0, 80, 32, $data_system.words.atk)
    self.contents.draw_text(148,  0, 80, 32, $data_system.words.pdef)
    self.contents.draw_text(4,   32, 80, 32, $data_system.words.mdef)
    self.contents.draw_text(148, 32, 80, 32, "回避修正")
    self.contents.draw_text(4,   64, 80, 32, $data_system.words.str)
    self.contents.draw_text(148, 64, 80, 32, $data_system.words.dex)
    self.contents.draw_text(4,   96, 80, 32, $data_system.words.agi)
    self.contents.draw_text(148, 96, 80, 32, $data_system.words.int)

    self.contents.font.color = normal_color
    self.contents.draw_text(84,   0, 48, 32, item.atk.to_s, 2)
    self.contents.draw_text(228,  0, 48, 32, item.pdef.to_s, 2)
    self.contents.draw_text(84,  32, 48, 32, item.mdef.to_s, 2)
    self.contents.draw_text(228, 32, 48, 32, item.eva.to_s, 2)
    self.contents.draw_text(84,  64, 48, 32, item.str_plus.to_s, 2)
    self.contents.draw_text(228, 64, 48, 32, item.dex_plus.to_s, 2)
    self.contents.draw_text(84,  96, 48, 32, item.agi_plus.to_s, 2)
    self.contents.draw_text(228, 96, 48, 32, item.int_plus.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # ○ 属性描画
  #--------------------------------------------------------------------------
  def draw_element(item, factor)
    ix = 4
    iy = 148
    self.contents.font.size = 18
    self.contents.font.color = system_color
    case item
    when RPG::Weapon
      self.contents.draw_text(32, 128, 160, 20, "攻撃属性")
      elements = item.element_set.dup
    when RPG::Armor
      self.contents.draw_text(32, 128, 160, 20, "防御属性")
      elements = item.guard_element_set.dup
    end
    self.contents.font.color = normal_color
    skip = true
    elements.each { |element|
      KGC::AEQ_ELEMENT_RANGE.each { |rng|
        case rng
        when Integer
          skip = element != rng
        when Range
          skip = !rng.member?(element)
        end
      }
      next if skip
      text = "[#{$data_system.elements[element]}]"
      cx = self.contents.text_size(text).width
      self.contents.draw_text(ix, iy, cx + 8, 20, text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 20
        if iy >= 192
          break
        end
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ ステート性描画
  #--------------------------------------------------------------------------
  def draw_state(item, factor)
    # 付加/防御ステート描画
    ix = 4
    iy = 212
    self.contents.font.color = system_color
    case item
    when RPG::Weapon
      self.contents.draw_text(32, 192, 160, 20, "付加ステート")
      states = item.plus_state_set.dup
    when RPG::Armor
      self.contents.draw_text(32, 192, 160, 20, "防御ステート")
      states = item.guard_state_set.dup
    end
    self.contents.font.color = normal_color
    self.contents.font.size = 18
    skip = true
    states.each { |state|
      KGC::AEQ_STATE_RANGE.each { |rng|
        case rng
        when Integer
          skip = state != rng
        when Range
          skip = !rng.member?(state)
        end
      }
      next if skip
      text = "[#{$data_states[state].name}]"
      cx = self.contents.text_size(text).width
      self.contents.draw_text(ix, iy, cx + 8, 20, text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 24
        if iy >= 256
          break
        end
      end
    }
    return if item.is_a?(RPG::Armor)
    # 解除ステート描画
    ix = 4
    iy = 276
    self.contents.font.color = system_color
    self.contents.draw_text(32, 256, 160, 20, "解除ステート")
    self.contents.font.color = normal_color
    self.contents.font.size = 18
    skip = true
    item.minus_state_set.each { |state|
      KGC::AEQ_STATE_RANGE.each { |rng|
        case rng
        when Integer
          skip = state != rng
        when Range
          skip = !rng.member?(state)
        end
      }
      next if skip
      text = "[#{$data_states[state].name}]"
      cx = self.contents.text_size(text).width
      self.contents.draw_text(ix, iy, cx + 8, 20, text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 24
        if iy >= 320
          break
        end
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 素材描画
  #--------------------------------------------------------------------------
  def draw_material(item, factor)
    self.contents.font.size = 22
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 128, 32, "改造費用")
    self.contents.draw_text(232, 0, 48, 32, $data_system.words.gold)
    self.contents.font.color = normal_color
    self.contents.draw_text(104, 0, 128, 32, item.alter_cost(factor).to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(4, 32, 128, 32, "所持金")
    self.contents.draw_text(232, 32, 48, 32, $data_system.words.gold)
    self.contents.font.color = normal_color
    self.contents.draw_text(104, 32, 128, 32, $game_party.gold.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(4, 64, 128, 32, "消費アイテム")
    for i in 4...factor.size
      self.contents.font.color = system_color
      self.contents.draw_text(4, 128 + (i - 4) * 64, 80, 32, "必要数")
      self.contents.draw_text(144, 128 + (i - 4) * 64, 80, 32, "所持数")
      self.contents.font.color = normal_color
      text = $data_items[factor[0]].name
      icon = RPG::Cache.icon($data_items[factor[0]].icon_name)
      self.contents.blt(4, 100 + (i - 4) * 64, icon, icon.rect)
      self.contents.draw_text(32, 96 + (i - 4) * 64, 256, 32, text)
      self.contents.draw_text(84, 128 + (i - 4) * 64, 48, 32, factor[1].to_s, 2)
      self.contents.draw_text(224, 128 + (i - 4) * 64, 48, 32, $game_party.item_number(factor[0]).to_s, 2)
    end
  end
end

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

#==============================================================================
# □ Window_AlterEquipmentFactor
#------------------------------------------------------------------------------
#  装備改造画面で、付加要素一覧を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentFactor < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320, 128, 320, 352)
    @column_max = 1
    self.active = false
    self.visible = false
    self.index = 0
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
  end
  #--------------------------------------------------------------------------
  # ○ ファクターの取得
  #--------------------------------------------------------------------------
  def factor
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(item)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @item = item
    @data = []
    # 付加できるファクターを追加
    case item
    when RPG::Weapon
      factors = KGC::AEQ_WEAPON_FACTORS
    when RPG::Armor
      factors = KGC::AEQ_ARMOR_FACTORS
    end
    for i in 0...factors.size
      factor = factors
      next if factor == nil
      @data.push(factor)
    end
    # 個数が 0 の場合は nil を追加
    @data.push(nil) if @data.size == 0
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    factor = @data[index]
    return if factor == nil
    x = 4
    y = index * 32
    if @item.can_add_factor?(factor)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    self.contents.draw_text(x, y, 280, 32, factor[0], 0)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.factor == nil ? "" : self.factor[1])
  end
end

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

#==============================================================================
# ■ Scene_Title
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # ● コマンド : ニューゲーム
  #--------------------------------------------------------------------------
  alias command_new_game_KGC_AlterEquipment command_new_game
  def command_new_game
    # 元の処理を実行
    command_new_game_KGC_AlterEquipment

    # 改造装備を初期化
    $alter_weapon_start = $data_weapons.size
    for i in 0...KGC::AEQ_WEAPON_MAX
      $data_weapons[$alter_weapon_start + i] = RPG::Weapon2.new
    end
    $alter_armor_start = $data_armors.size
    for i in 0...KGC::AEQ_ARMOR_MAX
      $data_armors[$alter_armor_start + i] = RPG::Armor2.new
    end
  end
end

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

#==============================================================================
# ■ Scene_Load
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # ● 決定時の処理
  #--------------------------------------------------------------------------
  alias on_decision_KGC_AlterEquipment on_decision
  def on_decision(filename)
    on_decision_KGC_AlterEquipment(filename)

    return unless FileTest.exist?(filename)  # ファイルが存在しない場合は戻る
    restore_altered_equipment
  end
  #--------------------------------------------------------------------------
  # ○ 改造装備を復元
  #--------------------------------------------------------------------------
  def restore_altered_equipment
    # 改造装備を取得
    $alter_weapon_start = $data_weapons.size
    for i in 0...KGC::AEQ_WEAPON_MAX
      if $game_party.alter_weapons == nil
        $data_weapons[$alter_weapon_start + i] = RPG::Weapon2.new
      else
        $data_weapons[$alter_weapon_start + i] = $game_party.alter_weapons
        weapon = $game_party.alter_weapons
        weapon.show_alter_count
        # 装備可能者を設定
        for i in 1...$data_classes.size
          actor_class = $data_classes
          # 改造対象の武器を装備できるクラスの場合
          if actor_class.weapon_set.include?(weapon.original_id)
            # 装備可能武器に追加
            actor_class.weapon_set.push(weapon.id)
          else
            # 装備できない場合は装備可能武器から削除
            actor_class.weapon_set.delete(weapon.id)
          end
        end
      end
    end
    $alter_armor_start = $data_armors.size
    for i in 0...KGC::AEQ_ARMOR_MAX
      if $game_party.alter_armors == nil
        $data_armors[$alter_armor_start + i] = RPG::Armor2.new
      else
        $data_armors[$alter_armor_start + i] = $game_party.alter_armors
        armor = $game_party.alter_armors
        armor.show_alter_count
        # 装備可能者を設定
        for i in 1...$data_classes.size
          actor_class = $data_classes
          # 改造対象の武器を装備できるクラスの場合
          if actor_class.armor_set.include?(armor.original_id)
            # 装備可能武器に追加
            actor_class.armor_set.push(armor.id)
          else
            # 装備できない場合は装備可能武器から削除
            actor_class.armor_set.delete(armor.id)
          end
        end
      end
    end
  end
end

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

#==============================================================================
# ■ Scene_Name
#==============================================================================

class Scene_Name
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias main_KGC_AlterEquipment main
  def main
    # 元の処理を実行
    main_KGC_AlterEquipment

    # 装備名変更の場合
    if $game_temp.equipment_alter_rename
      case $game_temp.equipment_alter_rename_type
      when 0
        type = "weapon"
      when 1
        type = "armor"
      end
      equip = eval("$data_#{type}s[$game_temp.equipment_alter_rename_id]")
      equip.change_name = @actor.name.dup
      equip.show_alter_count
      $game_temp.equipment_alter_rename_type = 0
      $game_temp.equipment_alter_rename_id = 0
      $game_temp.equipment_alter_rename = false
      # 装備品改造画面に切り替え
      $scene = Scene_AlterEquipment.new
    end
  end
end

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

#==============================================================================
# □ Scene_AlterEquipment
#------------------------------------------------------------------------------
#  装備改造画面の処理を行うクラスです。
#==============================================================================

class Scene_AlterEquipment
  #--------------------------------------------------------------------------
  # ○ メイン処理
  #--------------------------------------------------------------------------
  def main
    @spriteset = Spriteset_Map.new if KGC::AEQ_BACK_TRANSPARENT
    # ウィンドウを作成
    if $imported["HelpExtension"]
      @help_window = Window_HelpExtension.new
    else
      @help_window = Window_Help.new
    end
    @help_window.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    @command_window = Window_AlterEquipmentCommand.new
    @left_window = Window_AlterEquipmentLeft.new
    @right_window = Window_AlterEquipmentRight.new
    @factor_window = Window_AlterEquipmentFactor.new
    @status_window = Window_AlterEquipmentStatus.new
    # ヘルプウィンドウを関連付け
    @command_window.help_window = @help_window
    @left_window.help_window = @help_window
    @right_window.help_window = @help_window
    @factor_window.help_window = @help_window
    # カーソル位置を設定
    @left_window.index = 0
    @status_window.refresh(@left_window.item)
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    @command_window.dispose
    @left_window.dispose
    @right_window.dispose
    @factor_window.dispose
    @status_window.dispose
    @left_command_window.dispose if @left_command_window != nil
    @right_command_window.dispose if @right_command_window != nil
    @factor_command_window.dispose if @factor_command_window != nil
    @spriteset.dispose if KGC::AEQ_BACK_TRANSPARENT
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @command_window.refresh
    @left_window.refresh
    @right_window.refresh
    @factor_window.refresh(nil)
    @status_window.refresh(nil)
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @command_window.update
    @left_window.update
    @right_window.update
    @factor_window.update
    # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
    if @command_window.active
      update_command
      return
    end
    # レフトウィンドウがアクティブの場合: update_left を呼ぶ
    if @left_window.active
      @status_window.x = 320
      update_left
      return
    end
    # ライトウィンドウがアクティブの場合: update_right を呼ぶ
    if @right_window.active
      @status_window.x = 0
      update_right
      return
    end
    # ファクター追加ウィンドウがアクティブの場合: update_factor を呼ぶ
    if @factor_window.active
      @status_window.x = 0
      update_factor
      return
    end
    # レフトコマンドウィンドウがアクティブの場合: update_left_command を呼ぶ
    if @left_command_window != nil && @left_command_window.active
      update_left_command
      return
    end
    # ライトコマンドウィンドウがアクティブの場合: update_right_command を呼ぶ
    if @right_command_window != nil && @right_command_window.active
      update_right_command
      return
    end
    # ファクターコマンドウィンドウがアクティブの場合: update_factor_command を呼ぶ
    if @factor_command_window != nil && @factor_command_window.active
      update_factor_command
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (コマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_command
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # レフトウィンドウに切り替え
      case @command_window.index
      when 0..1
        @type = 0
      when 2..3
        @type = 1
      end
      @command_window.active = false
      @command_window.visible = false
      @left_window.refresh(@type)
      @left_window.active = true
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (レフトウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_left
    # 選択項目が変更された場合
    if @now_sel_left != @left_window.index
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item)
      @now_sel_left = @left_window.index
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # コマンドウィンドウに切り替え
      @command_window.active = true
      @command_window.visible = true
      @left_window.active = false
      @now_sel_left = nil
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # コマンドウィンドウの選択肢で分岐
      case @command_window.index
      when 0, 2  # 装備改造の場合
        # 既に改造装備がある場合
        if @left_window.item != nil
          # これ以上改造できない場合
          if @left_window.item.alterable_count == 0
            # ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # ファクター追加ウィンドウをリフレッシュ
          @factor_window.refresh(@left_window.item)
          # ファクター追加ウィンドウに切り替え
          @left_window.active = false
          @factor_window.active = true
          @factor_window.visible = true
        else
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # ステータスウィンドウをリフレッシュ
          @status_window.refresh(@right_window.item)
          # ライトウィンドウに切り替え
          @left_window.active = false
          @right_window.refresh(@type)
          @right_window.active = true
          @right_window.visible = true
        end
        @now_sel_left = nil
      when 1, 3  # 改造装備破棄の場合
        # 既に改造装備がある場合
        if @left_window.item != nil &&
            ((@type == 0 && $game_party.weapon_number(@left_window.item.id) >= 1) ||
            (@type == 1 && $game_party.armor_number(@left_window.item.id) >= 1))
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # レフトコマンドウィンドウ作成
          @left_command_window = Window_Command.new(256, KGC::AEQ_DISPOSE_COMMAND)
          @left_command_window.back_opacity = 160
          @left_command_window.x = 320 - @left_command_window.width / 2
          @left_command_window.y = 240 - @left_command_window.height / 2
          @left_command_window.z = 1000
          @left_command_window.index = 1
          # レフトコマンドウィンドウに切り替え
          @left_command_window.active = true
          @left_window.active = false
          @now_sel_left = nil
        else
          # ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
        end
      end
      return
    end
    # 装備名変更ボタンが押された場合
    if KGC::AEQ_RENAME_BUTTON != nil && Input.trigger?(KGC::AEQ_RENAME_BUTTON)
      item = @left_window.item
      # 既に改造装備がある場合
      if item != nil &&
          ((@type == 0 && $game_party.weapon_number(item.id) >= 1) ||
          (@type == 1 && $game_party.armor_number(item.id) >= 1))
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # 名前変更画面に切り替え
        $game_actors[KGC::AEQ_RENAME_ACTOR_ID].name = item.plain_name
        $game_temp.name_actor_id = KGC::AEQ_RENAME_ACTOR_ID
        $game_temp.name_max_char = KGC::AEQ_RENAME_MAX_LENGTH
        $game_temp.equipment_alter_rename_type = @type
        $game_temp.equipment_alter_rename_id = item.id
        $game_temp.equipment_alter_rename = true
        $scene = Scene_Name.new
      else
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ライトウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_right
    # 選択項目が変更された場合
    if @now_sel_right != @right_window.index
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@right_window.item)
      @now_sel_right = @right_window.index
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item)
      # レフトウィンドウに切り替え
      @left_window.active = true
      @right_window.active = false
      @right_window.visible = false
      @right_window.index = 0
      @now_sel_right = nil
      # ヘルプウィンドウ文字列を消去
      @help_window.set_text("")
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 空欄を選択した場合
      if @right_window.item == nil
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # ライトコマンドウィンドウ作成
      @right_command_window = Window_Command.new(256, KGC::AEQ_ALTER_COMMAND)
      @right_command_window.back_opacity = 160
      @right_command_window.x = 320 - @right_command_window.width / 2
      @right_command_window.y = 240 - @right_command_window.height / 2
      @right_command_window.z = 1000
      # ライトコマンドウィンドウに切り替え
      @right_command_window.active = true
      @right_window.active = false
      @now_sel_right = nil
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ファクター追加ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_factor
    # 選択項目が変更された場合
    if @now_sel_factor != @factor_window.index
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item, @factor_window.factor)
      @now_sel_factor = @factor_window.index
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item)
      # レフトウィンドウに切り替え
      @left_window.active = true
      @factor_window.active = false
      @factor_window.visible = false
      @factor_window.index = 0
      @now_sel_factor = nil
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      factor = @factor_window.factor
      # nil チェック
      impossible = factor == nil
      # ファクター付加判定
      impossible |= !@left_window.item.can_add_factor?(factor)
      # 付加できない場合
      if impossible
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # ファクターコマンドウィンドウ作成
      @factor_command_window = Window_Command.new(256, KGC::AEQ_FACTOR_COMMAND)
      @factor_command_window.back_opacity = 160
      @factor_command_window.x = 320 - @factor_command_window.width / 2
      @factor_command_window.y = 240 - @factor_command_window.height / 2
      @factor_command_window.z = 1000
      @factor_command_window.index = 1
      # ファクターコマンドウィンドウに切り替え
      @factor_command_window.active = true
      @factor_window.active = false
      @now_sel_factor = nil
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (レフトコマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_left_command
    @left_command_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # レフトウィンドウに切り替え
      @left_command_window.dispose
      @left_command_window = nil
      @left_window.active = true
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @left_command_window.index
      when 0
        # 装備 SE を演奏
        $game_system.se_play($data_system.equip_se)
        # 選択した改造装備を削除
        id = @left_window.item.id
        case @type
        when 0
          $game_party.alter_weapons[@left_window.index] = nil
          $data_weapons[id] = RPG::Weapon2.new
          $game_party.lose_weapon(id, 99)
        when 1
          $game_party.alter_armors[@left_window.index] = nil
          $data_armors[id] = RPG::Armor2.new
          $game_party.lose_armor(id, 99)
        end
        # 再描画
        @left_window.redraw_item(@left_window.index, @type)
        # レフトウィンドウに切り替え
        @left_command_window.dispose
        @left_command_window = nil
        @left_window.active = true
      when 1
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # レフトウィンドウに切り替え
        @left_command_window.dispose
        @left_command_window = nil
        @left_window.active = true
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ライトコマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_right_command
    @right_command_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ライトウィンドウに切り替え
      @right_command_window.dispose
      @right_command_window = nil
      @right_window.active = true
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @right_command_window.index
      when 0
        # 装備 SE を演奏
        $game_system.se_play($data_system.equip_se)
        case @type
        when 0
          # 改造する武器を設定
          id = @left_window.index + $alter_weapon_start
          # 武器の内容を設定
          $game_party.alter_weapons[@left_window.index] = RPG::Weapon2.new
          weapon = $game_party.alter_weapons[@left_window.index]
          weapon.id = id
          weapon.copy_weapon(@right_window.item.id)
          $data_weapons[id] = $game_party.alter_weapons[@left_window.index]
          # 改造装備を 1 個取得
          $game_party.gain_weapon(id, 1)
          # 改造対象の武器を削除
          $game_party.lose_weapon(@right_window.item.id, 1)
        when 1
          # 改造する防具を設定
          id = @left_window.index + $alter_armor_start
          # 防具の内容を設定
          $game_party.alter_armors[@left_window.index] = RPG::Armor2.new
          armor = $game_party.alter_armors[@left_window.index]
          armor.id = id
          armor.copy_armor(@right_window.item.id)
          $data_armors[id] = $game_party.alter_armors[@left_window.index]
          # 改造装備を 1 個取得
          $game_party.gain_armor(id, 1)
          # 改造対象の防具を削除
          $game_party.lose_armor(@right_window.item.id, 1)
        end
        # ウィンドウをリフレッシュ
        @left_window.redraw_item(@left_window.index, @type)
        @right_window.refresh(@type)
        @status_window.refresh(@left_window.item)
        # レフトウィンドウに切り替え
        @right_command_window.dispose
        @right_command_window = nil
        @left_window.active = true
        @right_window.active = false
        @right_window.visible = false
        @right_window.index = 0
        # ヘルプウィンドウ文字列を消去
        @help_window.set_text("")
      when 1
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # ライトウィンドウに切り替え
        @right_command_window.dispose
        @right_command_window = nil
        @right_window.active = true
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ファクターコマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_factor_command
    @factor_command_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ファクターウィンドウに切り替え
      @factor_command_window.dispose
      @factor_command_window = nil
      @factor_window.active = true
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @factor_command_window.index
      when 0
        # 装備 SE を演奏
        $game_system.se_play($data_system.equip_se)
        # 装備を改造
        case @type
        when 0
          $game_party.alter_weapons[@left_window.index].add_factor(@factor_window.factor)
        when 1
          $game_party.alter_armors[@left_window.index].add_factor(@factor_window.factor)
        end
        # ウィンドウをリフレッシュ
        @left_window.redraw_item(@left_window.index, @type)
        @status_window.refresh(@left_window.item)
        # レフトウィンドウに切り替え
        @factor_command_window.dispose
        @factor_command_window = nil
        @left_window.active = true
        @factor_window.active = false
        @factor_window.visible = false
        @factor_window.index = 0
        # ヘルプウィンドウ文字列を消去
        @help_window.set_text("")
      when 1
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # ファクターウィンドウに切り替え
        @factor_command_window.dispose
        @factor_command_window = nil
        @factor_window.active = true
      end
      return
    end
  end
end
[/pre]
  
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部