设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1437|回复: 2
打印 上一主题 下一主题

[已经解决] 能不能帮忙汉化一下

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
341
在线时间
453 小时
注册时间
2009-10-2
帖子
125
跳转到指定楼层
1
发表于 2011-5-4 15:43:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求汉化脚本


#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 拡張装備画面 - KGC_ExtendedEquipScene ◆ VX ◆
#_/    ◇ Last update : 2009/01/25 ◇
#_/----------------------------------------------------------------------------
#_/  機能を強化した装備画面を作成します。
#_/============================================================================
#_/ 【基本機能】≪ヘルプウィンドウ機能拡張≫ より下に導入してください。
#_/ 【装備】≪スキル習得装備≫ より下に導入してください。
#_/ 【装備】≪装備拡張≫ より上に導入してください。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

$data_system = load_data("Data/System.rvdata") if $data_system == nil

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

module KGC
module ExtendedEquipScene
  # ◆ パラメータ名
  VOCAB_PARAM = {
    :hit => "命中率",        # 命中率
    :eva => "回避率",        # 回避率
    :cri => "クリティカル",  # クリティカル率
  }  # ← この } は消さないこと!

  # ◆ 装備変更時に表示するパラメータ
  #  表示したい順に , で区切って記入。
  #  :maxhp .. 最大 HP
  #  :maxmp .. 最大 MP
  #  :atk   .. 攻撃力
  #  :def   .. 防御力
  #  :spi   .. 精神力
  #  :agi   .. 敏捷性
  #  :hit   .. 命中率
  #  :eva   .. 回避率
  #  :cri   .. クリティカル率
  EQUIP_PARAMS = [ :atk, :def, :spi, :agi, :hit, :eva, :cri ]

  # ◆ 拡張装備コマンドを使用する
  #  true  : 「最強装備」「すべて外す」コマンドを使用可能
  #  false : 装備変更のみ
  USE_COMMAND_WINDOW = true
  # ◆ 装備画面のコマンド名
  COMMANDS = [
    "装備変更",    # 装備変更
    "最強装備",    # 最強装備
    "すべて外す",  # すべて外す
  ]  # ← この ] は消さないこと!
  # ◆ 装備画面コマンドのヘルプ
  COMMAND_HELP = [
    "装備を変更します。",            # 装備変更
    "最も強力な武具を装備します。",  # 最強装備
    "すべての武具を外します。",      # すべて外す
  ]  # ← この ] は消さないこと!

  # ◆ 最強装備を行わない装備種別
  #  最強装備から除外する装備種別を記述。
  #  -1..武器  0..盾  1..頭  2..身体  3..装飾品  4~..≪装備拡張≫ で定義
  IGNORE_STRONGEST_KIND = [3, 5]

  # ◆ 最強武器選択時のパラメータ優先順位
  #  優先順位の高い順に , で区切って記入。
  #  :atk .. 攻撃力
  #  :def .. 防御力
  #  :spi .. 精神力
  #  :agi .. 敏捷性
  STRONGEST_WEAPON_PARAM_ORDER = [ :atk, :spi, :agi, :def ]
  # ◆ 最強防具選択時のパラメータ優先順位
  #  指定方法は武器と同じ。
  STRONGEST_ARMOR_PARAM_ORDER  = [ :def, :spi, :agi, :atk ]

  # ◆ AP ウィンドウを使用する
  #  true  : 使用する
  #  false : 使用しない
  #  ≪スキル習得装備≫ 併用時のみ有効。
  SHOW_AP_WINDOW    = true
  # ◆ AP ウィンドウに表示するスキル数
  #  多くしすぎすると表示がバグります。
  #  (4 以下を推奨)
  AP_WINDOW_SKILLS  = 4
  # ◆ AP ウィンドウの習得スキル名のキャプション
  AP_WINDOW_CAPTION = "習得#{Vocab.skill}"
  # ◆ AP ウィンドウの表示切り替えボタン
  #  このボタンを押すと、AP ウィンドウの表示/非表示が切り替わる。
  AP_WINDOW_BUTTON  = Input::X
end
end

#==============================================================================
# ☆ カスタマイズ項目 終了 - Customize END ☆
#==============================================================================

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

module KGC::ExtendedEquipScene
  # パラメータ取得用 Proc
  GET_PARAM_PROC = {
    :atk => Proc.new { |n| n.atk },
    :def => Proc.new { |n| n.def },
    :spi => Proc.new { |n| n.spi },
    :agi => Proc.new { |n| n.agi },
  }
  # 最強アイテム用構造体
  StrongestItem = Struct.new("StrongestItem", :index, :item)
end

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

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

module Vocab
  # 命中率
  def self.hit
    return KGC::ExtendedEquipScene::VOCAB_PARAM[:hit]
  end

  # 回避率
  def self.eva
    return KGC::ExtendedEquipScene::VOCAB_PARAM[:eva]
  end

  # クリティカル率
  def self.cri
    return KGC::ExtendedEquipScene::VOCAB_PARAM[:cri]
  end
end

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

#==============================================================================
# □ Window_ExtendedEquipCommand
#------------------------------------------------------------------------------
#   拡張装備画面で、実行する操作を選択するウィンドウです。
#==============================================================================

class Window_ExtendedEquipCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(160, KGC::ExtendedEquipScene::COMMANDS)
    self.active = false
    self.z = 1000
  end
  #--------------------------------------------------------------------------
  # ● ヘルプウィンドウの更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(KGC::ExtendedEquipScene::COMMAND_HELP[self.index])
  end
end

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

#==============================================================================
# □ Window_EquipBaseInfo
#------------------------------------------------------------------------------
#   装備画面で、アクターの基本情報を表示するウィンドウです。
#==============================================================================

class Window_EquipBaseInfo < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x     : ウィンドウの X 座標
  #     y     : ウィンドウの Y 座標
  #     actor : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    super(x, y, Graphics.width / 2, WLH + 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 0, 0)
    # EP 制を使用する場合は EP を描画
    if $imported["EquipExtension"] && KGC::EquipExtension::USE_EP_SYSTEM
      draw_actor_ep(@actor, 116, 0, Graphics.width / 2 - 148)
    end
  end
end

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

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

class Window_Equip < Window_Selectable

  unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW

  #--------------------------------------------------------------------------
  # ● カーソルを 1 ページ後ろに移動
  #--------------------------------------------------------------------------
  def cursor_pagedown
    return if Input.repeat?(Input::R)
    super
  end
  #--------------------------------------------------------------------------
  # ● カーソルを 1 ページ前に移動
  #--------------------------------------------------------------------------
  def cursor_pageup
    return if Input.repeat?(Input::L)
    super
  end

  end  # <-- unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW

  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active

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

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

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

class Window_EquipItem < Window_Item
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x          : ウィンドウの X 座標
  #     y          : ウィンドウの Y 座標
  #     width      : ウィンドウの幅
  #     height     : ウィンドウの高さ
  #     actor      : アクター
  #     equip_type : 装備部位
  #--------------------------------------------------------------------------
  alias initialize_KGC_ExtendedEquipScene initialize
  def initialize(x, y, width, height, actor, equip_type)
    width = Graphics.width / 2

    initialize_KGC_ExtendedEquipScene(x, y, width, height, actor, equip_type)

    @column_max = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  alias refresh_KGC_ExtendedEquipScene refresh  unless $@
  def refresh
    return if @column_max == 2  # 無駄な描画はしない

    refresh_KGC_ExtendedEquipScene
  end
end

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

#==============================================================================
# □ Window_ExtendedEquipStatus
#------------------------------------------------------------------------------
#   拡張装備画面で、アクターの能力値変化を表示するウィンドウです。
#==============================================================================

class Window_ExtendedEquipStatus < Window_EquipStatus
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_writer   :equip_type               # 装備タイプ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x     : ウィンドウの X 座標
  #     y     : ウィンドウの Y 座標
  #     actor : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    @equip_type = -1
    @caption_cache = nil
    super(x, y, actor)
    @new_item = nil
    @new_param = {}
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    super
    @caption_cache.dispose if @caption_cache != nil
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ内容の作成
  #--------------------------------------------------------------------------
  def create_contents
    self.contents.dispose
    self.contents = Bitmap.new(Graphics.width / 2 - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    return if @equip_type < 0

    if @caption_cache == nil
      create_cache
    else
      self.contents.clear
      self.contents.blt(0, 0, @caption_cache, @caption_cache.rect)
    end
    draw_item_name(@actor.equips[@equip_type], 0, 0)
    draw_item_name(@new_item, 24, WLH)
    KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|
      draw_parameter(0, WLH * (i + 2), param)
    }
  end
  #--------------------------------------------------------------------------
  # ○ キャッシュ生成
  #--------------------------------------------------------------------------
  def create_cache
    create_contents

    self.contents.font.color = system_color
    self.contents.draw_text(0, WLH, 20, WLH, "→")
    # パラメータ描画
    KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|
      draw_parameter_name(0, WLH * (i + 2), param)
    }

    @caption_cache = Bitmap.new(self.contents.width, self.contents.height)
    @caption_cache.blt(0, 0, self.contents, self.contents.rect)
  end
  #--------------------------------------------------------------------------
  # ○ 能力値名の描画
  #     x    : 描画先 X 座標
  #     y    : 描画先 Y 座標
  #     type : 能力値の種類
  #--------------------------------------------------------------------------
  def draw_parameter_name(x, y, type)
    case type
    when :maxhp
      name = Vocab.hp
    when :maxmp
      name = Vocab.mp
    when :atk
      name = Vocab.atk
    when :def
      name = Vocab.def
    when :spi
      name = Vocab.spi
    when :agi
      name = Vocab.agi
    when :hit
      name = Vocab.hit
    when :eva
      name = Vocab.eva
    when :cri
      name = Vocab.cri
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x + 4, y, 96, WLH, name)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 156, y, 20, WLH, "→", 1)
  end
  #--------------------------------------------------------------------------
  # ● 装備変更後の能力値設定
  #     new_param : 装備変更後のパラメータの配列
  #     new_item  : 変更後の装備
  #--------------------------------------------------------------------------
  def set_new_parameters(new_param, new_item)
    changed = false
    # パラメータ変化判定
    KGC::ExtendedEquipScene::EQUIP_PARAMS.each { |k|
      if @new_param[k] != new_param[k]
        changed = true
        break
      end
    }
    changed |= (@new_item != new_item)

    if changed
      @new_item = new_item
      @new_param = new_param
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● 能力値の描画
  #     x    : 描画先 X 座標
  #     y    : 描画先 Y 座標
  #     type : 能力値の種類
  #--------------------------------------------------------------------------
  def draw_parameter(x, y, type)
    case type
    when :maxhp
      value = @actor.maxhp
    when :maxmp
      value = @actor.maxmp
    when :atk
      value = @actor.atk
    when :def
      value = @actor.def
    when :spi
      value = @actor.spi
    when :agi
      value = @actor.agi
    when :hit
      value = @actor.hit
    when :eva
      value = @actor.eva
    when :cri
      value = @actor.cri
    end
    new_value = @new_param[type]
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 106, y, 48, WLH, value, 2)
    if new_value != nil
      self.contents.font.color = new_parameter_color(value, new_value)
      self.contents.draw_text(x + 176, y, 48, WLH, new_value, 2)
    end
  end
end

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

#==============================================================================
# □ Window_ExtendedEquipAPViewer
#------------------------------------------------------------------------------
#   拡張装備画面で、習得スキルを表示するウィンドウです。
#==============================================================================

if $imported["EquipLearnSkill"]
class Window_ExtendedEquipAPViewer < Window_APViewer
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :item                     # 表示対象のアイテム
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x      : ウィンドウの X 座標
  #     y      : ウィンドウの Y 座標
  #     width  : ウィンドウの幅
  #     height : ウィンドウの高さ
  #     actor  : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height, actor)
    @item = nil
    super
    self.index = -1
    self.active = false
  end
  #--------------------------------------------------------------------------
  # ○ アイテム設定
  #--------------------------------------------------------------------------
  def item=(new_item)
    @item = new_item
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @data = []
    @can_gain_ap_skills = @actor.can_gain_ap_skills
    @equipment_skills = @actor.equipment_skills(true)

    skills = (@item == nil ? [] : @item.learn_skills)
    skills.each { |i|
      @data << $data_skills[i]
    }
    @item_max = @data.size
    create_contents
    draw_caption
    @item_max.times { |i| draw_item(i) }
  end
  #--------------------------------------------------------------------------
  # ○ キャプションを描画
  #--------------------------------------------------------------------------
  def draw_caption
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, width - 96, WLH,
      KGC::ExtendedEquipScene::AP_WINDOW_CAPTION, 1)
    self.contents.draw_text(width - 96, 0, 64, WLH, Vocab.ap, 1)
    self.contents.font.color = normal_color
  end
  #--------------------------------------------------------------------------
  # ○ スキルをマスク表示するかどうか
  #     skill : スキル
  #--------------------------------------------------------------------------
  def mask?(skill)
    return false
  end
  #--------------------------------------------------------------------------
  # ○ 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    rect.y += WLH
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      draw_item_name(skill, rect.x, rect.y)
      if skill.need_ap > 0
        if @actor.ap_full?(skill) || @actor.skill_learn?(skill)
          # マスター
          text = Vocab.full_ap_skill
        else
          # AP 蓄積中
          text = sprintf("%4d/%4d", @actor.skill_ap(skill.id), skill.need_ap)
        end
      end
      # AP を描画
      rect.x = rect.width - 80
      rect.width = 80
      self.contents.font.color = normal_color
      self.contents.draw_text(rect, text, 2)
    end
  end
end
end  # <-- if $imported["EquipLearnSkill"]

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

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

class Scene_Equip < Scene_Base
  #--------------------------------------------------------------------------
  # ○ 定数
  #--------------------------------------------------------------------------
  STANDARD_WIDTH  = Graphics.width / 2
  ANIMATION_SPPED = 8
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias start_KGC_ExtendedEquipScene start
  def start
    start_KGC_ExtendedEquipScene

    # ステータスウィンドウを作り直す
    @status_window.dispose
    @status_window = Window_ExtendedEquipStatus.new(0, 0, @actor)

    create_command_window

    @last_item = RPG::Weapon.new
    @base_info_window = Window_EquipBaseInfo.new(
      0, @help_window.height, @actor)

    if $imported["EquipLearnSkill"] && KGC::ExtendedEquipScene::SHOW_AP_WINDOW
      @ap_window = Window_ExtendedEquipAPViewer.new(0, 0, 64, 64, @actor)
    end

    adjust_window_for_extended_equiop_scene
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウの座標・サイズを拡張装備画面向けに調整
  #--------------------------------------------------------------------------
  def adjust_window_for_extended_equiop_scene
    @base_info_window.width = @equip_window.width

    @equip_window.x = 0
    @equip_window.y = @base_info_window.y + @base_info_window.height
    @equip_window.height = Graphics.height - @equip_window.y
    @equip_window.active = false
    @equip_window.z = 100

    @status_window.x = 0
    @status_window.y = @equip_window.y
    @status_window.width = STANDARD_WIDTH
    @status_window.height = @equip_window.height
    @status_window.visible = false
    @status_window.z = 100

    @item_windows.each { |window|
      window.x = @equip_window.width
      window.y = @help_window.height
      window.z = 50
      window.height = Graphics.height - @help_window.height
    }

    if @ap_window != nil
      @ap_window.width = @item_windows[0].width
      @ap_window.height =
        (KGC::ExtendedEquipScene::AP_WINDOW_SKILLS + 1) * Window_Base::WLH + 32
      @ap_window.x = @equip_window.width
      @ap_window.y = Graphics.height - @ap_window.height
      @ap_window.z = @item_windows[0].z + 10
      @ap_window.refresh
    end

    # コマンドウィンドウ不使用の場合
    unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
      @command_window.visible = false
      @command_window.active = false
      @equip_window.active = true
      @equip_window.call_update_help
    end
  end
  #--------------------------------------------------------------------------
  # ○ コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_ExtendedEquipCommand.new
    @command_window.help_window = @help_window
    @command_window.active = true
    @command_window.x = (Graphics.width - @command_window.width) / 2
    @command_window.y = (Graphics.height - @command_window.height) / 2
    @command_window.update_help

    # 装備固定なら「最強装備」「すべて外す」を無効化
    if @actor.fix_equipment
      @command_window.draw_item(1, false)
      @command_window.draw_item(2, false)
    end
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  alias terminate_KGC_ExtendedEquipScene terminate
  def terminate
    terminate_KGC_ExtendedEquipScene

    @command_window.dispose
    @base_info_window.dispose
    @ap_window.dispose if @ap_window != nil
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウをリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_window
    @base_info_window.refresh
    @equip_window.refresh
    @status_window.refresh
    @item_windows.each { |window| window.refresh }
    @ap_window.refresh if @ap_window != nil
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_ExtendedEquipScene update
  def update
    update_command_window
    if @command_window.active
      update_KGC_ExtendedEquipScene
      update_command_selection
    else
      update_KGC_ExtendedEquipScene
      update_ap_window
    end
  end
  #--------------------------------------------------------------------------
  # ○ コマンドウィンドウの更新
  #--------------------------------------------------------------------------
  def update_command_window
    @command_window.update
  end
  #--------------------------------------------------------------------------
  # ● ステータスウィンドウの更新
  #--------------------------------------------------------------------------
  def update_status_window
    @base_info_window.update
    @status_window.update

    if @command_window.active || @equip_window.active
      @status_window.set_new_parameters({}, nil)
    elsif @item_window.active
      return if @last_item == @item_window.item

      @last_item = @item_window.item
      temp_actor = Marshal.load(Marshal.dump(@actor))
      temp_actor.change_equip(@equip_window.index, @item_window.item, true)
      param = {
        :maxhp => temp_actor.maxhp,
        :maxmp => temp_actor.maxmp,
        :atk   => temp_actor.atk,
        :def   => temp_actor.def,
        :spi   => temp_actor.spi,
        :agi   => temp_actor.agi,
        :hit   => temp_actor.hit,
        :eva   => temp_actor.eva,
        :cri   => temp_actor.cri,
      }
      @status_window.equip_type = @equip_window.index
      @status_window.set_new_parameters(param, @last_item)
      Graphics.frame_reset
    end
  end
  #--------------------------------------------------------------------------
  # ○ AP ウィンドウの更新
  #--------------------------------------------------------------------------
  def update_ap_window
    return if @ap_window == nil

    # 表示/非表示切り替え
    button = KGC::ExtendedEquipScene::AP_WINDOW_BUTTON
    if button != nil && Input.trigger?(button)
      Sound.play_decision
      if @ap_window.openness == 255
        @ap_window.close
      else
        @ap_window.open
      end
    end

    # 表示内容更新
    @ap_window.update
    new_item = (@equip_window.active ? @equip_window.item : @item_window.item)
    @ap_window.item = new_item if @ap_window.item != new_item

    # 位置更新
    ay = @ap_window.y
    ayb = @ap_window.y + @ap_window.height  # AP window: Bottom
    cy = @item_window.y + 16
    cy += @item_window.cursor_rect.y if @item_window.active
    cyb = cy + Window_Base::WLH             # Cursor rect: Bottom
    bottom = (ay != @item_window.y)
    if bottom
      # 下で被る
      @ap_window.y = @item_window.y if ay < cyb
    else
      # 上で被る
      @ap_window.y = Graphics.height - @ap_window.height if cy < ayb
    end
  end
  #--------------------------------------------------------------------------
  # ○ コマンド選択の更新
  #--------------------------------------------------------------------------
  def update_command_selection
    update_window_position_for_equip_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    elsif Input.trigger?(Input::R)
      Sound.play_cursor
      next_actor
    elsif Input.trigger?(Input::L)
      Sound.play_cursor
      prev_actor
    elsif Input.trigger?(Input::C)
      case @command_window.index
      when 0  # 装備変更
        Sound.play_decision
        # 装備部位ウィンドウに切り替え
        @equip_window.active   = true
        @command_window.active = false
        @command_window.close
      when 1  # 最強装備
        if @actor.fix_equipment
          Sound.play_buzzer
          return
        end
        Sound.play_equip
        process_equip_strongest
      when 2  # すべて外す
        if @actor.fix_equipment
          Sound.play_buzzer
          return
        end
        Sound.play_equip
        process_remove_all
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備部位選択の更新
  #--------------------------------------------------------------------------
  alias update_equip_selection_KGC_ExtendedEquipScene update_equip_selection
  def update_equip_selection
    update_window_position_for_equip_selection
    if Input.trigger?(Input::A)
      if @actor.fix_equipment
        Sound.play_buzzer
        return
      end
      # 選択している装備品を外す
      Sound.play_equip
      @actor.change_equip(@equip_window.index, nil)
      refresh_window
    elsif Input.trigger?(Input::B)
      Sound.play_cancel
      if KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
        show_command_window
      else
        # コマンドウィンドウ不使用なら終了
        return_scene
      end
      return
    elsif Input.trigger?(Input::R)
      unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
        # コマンドウィンドウ不使用時のみ切り替え
        Sound.play_cursor
        prev_actor
        return
      end
    elsif Input.trigger?(Input::L)
      unless KGC::ExtendedEquipScene::USE_COMMAND_WINDOW
        # コマンドウィンドウ不使用時のみ切り替え
        Sound.play_cursor
        next_actor
        return
      end
    elsif Input.trigger?(Input::C)
      # 前回のアイテムをダミーにする
      @last_item = RPG::Weapon.new
    end

    update_equip_selection_KGC_ExtendedEquipScene
  end
  #--------------------------------------------------------------------------
  # ○ コマンドウィンドウに切り替え
  #--------------------------------------------------------------------------
  def show_command_window
    @equip_window.active   = false
    @command_window.active = true
    @command_window.open
  end
  #--------------------------------------------------------------------------
  # ● アイテム選択の更新
  #--------------------------------------------------------------------------
  alias update_item_selection_KGC_ExtendedEquipScene update_item_selection
  def update_item_selection
    update_window_position_for_item_selection

    update_item_selection_KGC_ExtendedEquipScene

    if Input.trigger?(Input::C)
      @base_info_window.refresh
    end
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ位置の更新 (装備部位選択)
  #--------------------------------------------------------------------------
  def update_window_position_for_equip_selection
    return if @item_window.x == @equip_window.width

    @base_info_window.width = @equip_window.width
    @item_window.x = [@item_window.x + ANIMATION_SPPED, @equip_window.width].min
    if @ap_window != nil
      @ap_window.x = @item_window.x
    end
    @equip_window.visible  = true
    @status_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ位置の更新 (アイテム選択)
  #--------------------------------------------------------------------------
  def update_window_position_for_item_selection
    return if @item_window.x == STANDARD_WIDTH

    @base_info_window.width = STANDARD_WIDTH
    @item_window.x = [@item_window.x - ANIMATION_SPPED, STANDARD_WIDTH].max
    if @ap_window != nil
      @ap_window.x = @item_window.x
    end
    @equip_window.visible  = false
    @status_window.visible = true
  end
  #--------------------------------------------------------------------------
  # ○ 最強装備の処理
  #--------------------------------------------------------------------------
  def process_equip_strongest
    # 以前のパラメータを保存
    last_hp = @actor.hp
    last_mp = @actor.mp
    # 最強装備対象の種別を取得
    types = [-1]
    types += ($imported["EquipExtension"] ? @actor.equip_type : [0, 1, 2, 3])
    ignore_types   = KGC::ExtendedEquipScene::IGNORE_STRONGEST_KIND.clone
    judged_indices = []
    weapon_range   = 0..(@actor.two_swords_style ? 1 : 0)

    # 装備対象の武具をすべて外す
    types.each_with_index { |t, i|
      @actor.change_equip(i, nil) unless ignore_types.include?(t)
    }

    # 最強武器装備
    weapon_range.each { |i|
      judged_indices << i
      # 1本目が両手持ちの場合は2本目を装備しない
      if @actor.two_swords_style
        weapon = @actor.weapons[0]
        next if weapon != nil && weapon.two_handed
      end
      weapon = get_strongest_weapon(i)
      @actor.change_equip(i, weapon) if weapon != nil
    }

    # 両手持ち武器を持っている場合は盾 (防具1) を装備しない
    weapon = @actor.weapons[0]
    if weapon != nil && weapon.two_handed
      judged_indices |= [1]
    end

    # 最強防具装備
    exist = true
    while exist
      strongest = get_strongest_armor(types, ignore_types, judged_indices)
      if strongest != nil
        @actor.change_equip(strongest.index, strongest.item)
        judged_indices << strongest.index
      else
        exist = false
      end
    end

    # 以前のパラメータを復元
    @actor.hp = last_hp
    @actor.mp = last_mp

    refresh_window
  end
  #--------------------------------------------------------------------------
  # ○ 最も強力な武器を取得
  #     equip_type : 装備部位
  #    該当するアイテムがなければ nil を返す。
  #--------------------------------------------------------------------------
  def get_strongest_weapon(equip_type)
    # 装備可能な武器を取得
    equips = $game_party.items.find_all { |item|
      valid = item.is_a?(RPG::Weapon) && @actor.equippable?(item)
      if valid && $imported["EquipExtension"]
        valid = @actor.ep_condition_clear?(equip_type, item)
      end
      valid
    }
    return nil if equips.empty?

    param_order = KGC::ExtendedEquipScene::STRONGEST_WEAPON_PARAM_ORDER
    return get_strongest_item(equips, param_order)
  end
  #--------------------------------------------------------------------------
  # ○ 最も強力なアイテムを取得
  #     equips      : 装備品リスト
  #     param_order : パラメータ優先順位
  #--------------------------------------------------------------------------
  def get_strongest_item(equips, param_order)
    result = []
    param_order.each { |param|
      # パラメータ順にソート
      get_proc = KGC::ExtendedEquipScene::GET_PARAM_PROC[param]
      equips   = equips.sort_by { |item| -get_proc.call(item) }
      # 最もパラメータが高いアイテムを取得
      highest = equips[0]
      result  = equips.find_all { |item|
        get_proc.call(highest) == get_proc.call(item)
      }
      # 候補が1つに絞れたら終了
      break if result.size == 1
      equips = result.clone
    }

    # 最も ID が大きいアイテムを取得
    return (result.sort_by { |v| -v.id })[0]
  end
  #--------------------------------------------------------------------------
  # ○ 最も強力な防具を取得 (StrongestItem)
  #     types          : 装備部位リスト
  #     ignore_types   : 無視する部位リスト
  #     judged_indices : 判定済み部位番号リスト
  #    該当するアイテムがなければ nil を返す。
  #--------------------------------------------------------------------------
  def get_strongest_armor(types, ignore_types, judged_indices)
    # 装備可能な防具を取得
    equips = $game_party.items.find_all { |item|
      item.is_a?(RPG::Armor) &&
        !ignore_types.include?(item.kind) &&
        @actor.equippable?(item)
    }
    return nil if equips.empty?

    param_order = KGC::ExtendedEquipScene::STRONGEST_ARMOR_PARAM_ORDER

    # 最強防具を探す
    until equips.empty?
      armor = get_strongest_item(equips, param_order)
      types.each_with_index { |t, i|
        next if judged_indices.include?(i)
        next if armor.kind != t
        if $imported["EquipExtension"]
          next unless @actor.ep_condition_clear?(i, armor)
        end
        return KGC::ExtendedEquipScene::StrongestItem.new(i, armor)
      }
      equips.delete(armor)
    end
    return nil
  end
  #--------------------------------------------------------------------------
  # ○ すべて外す処理
  #--------------------------------------------------------------------------
  def process_remove_all
    type_max = ($imported["EquipExtension"] ? @actor.equip_type.size : 4) + 1
    type_max.times { |i| @actor.change_equip(i, nil) }
    refresh_window
  end
end
...

Lv1.梦旅人

梦石
0
星屑
55
在线时间
116 小时
注册时间
2008-5-12
帖子
264
2
发表于 2011-5-4 20:22:44 | 只看该作者
本帖最后由 shinliwei 于 2011-5-4 20:25 编辑
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 拡張装備画面 - KGC_ExtendedEquipScene ◆ VX ◆
  3. #_/    ◇ Last update : 2008/02/10 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  機能を強化した装備画面を作成します。
  6. #_/============================================================================
  7. #_/ 【基本機能】≪ヘルプウィンドウ機能拡張≫ より下に導入してください。
  8. #_/ 【装備】≪装備拡張≫ より上に導入してください。
  9. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  10. #==============================================================================
  11. # ★ カスタマイズ項目 - Customize ★
  12. # ★        自定义项目部分        ★
  13. #==============================================================================

  14. module KGC
  15. module ExtendedEquipScene
  16.   # ◆ パラメータ名
  17.   # ◆ 能力值名称
  18.   VOCAB_PARAM = {
  19.     :hit => "命中率",        # 命中率
  20.     :eva => "回避率",        # 回避率
  21.     :cri => "爆击率",        # 爆击率
  22.   }  # ← 这个不可删除!

  23.   # ◆ 装備変更時に表示するパラメータ
  24.   #  表示したい順に , で区切って記入。
  25.   # ◆ 更换装备时显示的能力值
  26.   #  依照我们所想要显示的顺序
  27.   #  :maxhp .. 最大 HP
  28.   #  :maxmp .. 最大 MP
  29.   #  :atk   .. 攻撃力
  30.   #  :def   .. 防御力
  31.   #  :spi   .. 精神力
  32.   #  :agi   .. 敏捷性
  33.   #  :hit   .. 命中率
  34.   #  :eva   .. 回避率
  35.   #  :cri   .. 爆击率
  36.   EQUIP_PARAMS = [ :atk, :def, :spi, :agi, :hit, :eva, :cri]

  37.   # ◆ 装備画面のコマンド名
  38.   # ◆ 装備场景的命令名称
  39.   COMMANDS = [
  40.     "更换装备",    # 更换装備
  41.   ]  # ← 这个不可删除!
  42.   
  43.   # ◆ 装備画面コマンドのヘルプ
  44.   # ◆ 装備场景命令说明
  45.   # ← 这个不可删除!

  46.   # ◆ 最強装備を行わない装備種別
  47.   #  最強装備から除外する装備種別を記述。
  48.   #  -1..武器  0..盾  1..頭  2..身体  3..装飾品  4~..≪装備拡張≫ で定義
  49.   # ◆ 忽视最强装备的装备种类
  50.   #  设置没有最强装备的装备种类,以下面的数字分类
  51.   #  -1..武器  0..盾类防具  1..頭部防具  2..身体防具  3..装飾品  4~..装备扩充的定义

  52.   IGNORE_STRONGEST_KIND = [3, 5]
  53. end
  54. end

  55. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  56. $imported = {} if $imported == nil
  57. $imported["ExtendedEquipScene"] = true

  58. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  59. #==============================================================================
  60. # ■ Vocab
  61. #==============================================================================

  62. module Vocab
  63.   # 命中率
  64.   def self.hit
  65.     return KGC::ExtendedEquipScene::VOCAB_PARAM[:hit]
  66.   end

  67.   # 回避率
  68.   def self.eva
  69.     return KGC::ExtendedEquipScene::VOCAB_PARAM[:eva]
  70.   end

  71.   # 会心一击率
  72.   def self.cri
  73.     return KGC::ExtendedEquipScene::VOCAB_PARAM[:cri]
  74.   end
  75. end

  76. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  77. #==============================================================================
  78. # □ Window_ExtendedEquipCommand
  79. #------------------------------------------------------------------------------
  80. #   拡張装備画面で、実行する操作を選択するウィンドウです。
  81. #==============================================================================

  82. class Window_ExtendedEquipCommand < Window_Command
  83.   #--------------------------------------------------------------------------
  84.   # ● オブジェクト初期化
  85.   #--------------------------------------------------------------------------
  86.   def initialize
  87.     super(160, KGC::ExtendedEquipScene::COMMANDS)
  88.     self.active = false
  89.     self.z = 1000
  90.   end
  91. end

  92. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  93. #==============================================================================
  94. # □ Window_EquipBaseInfo
  95. #------------------------------------------------------------------------------
  96. #   装備画面で、アクターの基本情報を表示するウィンドウです。
  97. #==============================================================================

  98. class Window_EquipBaseInfo < Window_Base
  99.   #--------------------------------------------------------------------------
  100.   # ● オブジェクト初期化
  101.   #     x     : ウィンドウの X 座標
  102.   #     y     : ウィンドウの Y 座標
  103.   #     actor : アクター
  104.   #--------------------------------------------------------------------------
  105.   def initialize(x, y, actor)
  106.     super(x, y, Graphics.width / 2, WLH + 32)
  107.     @actor = actor
  108.     refresh
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● リフレッシュ
  112.   #--------------------------------------------------------------------------
  113.   def refresh
  114.     self.contents.clear
  115.     draw_actor_name(@actor, 0, 0)
  116.     # EP 制を使用する場合は EP を描画
  117.     if $imported["EquipExtension"] && KGC::EquipExtension::USE_EP_SYSTEM
  118.       draw_actor_ep(@actor, 116, 0, Graphics.width / 2 - 148)
  119.     end
  120.   end
  121. end

  122. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  123. #==============================================================================
  124. # ■ Window_EquipItem
  125. #==============================================================================

  126. class Window_EquipItem < Window_Item
  127.   #--------------------------------------------------------------------------
  128.   # ● オブジェクト初期化
  129.   #     x          : ウィンドウの X 座標
  130.   #     y          : ウィンドウの Y 座標
  131.   #     width      : ウィンドウの幅
  132.   #     height     : ウィンドウの高さ
  133.   #     actor      : アクター
  134.   #     equip_type : 装備部位
  135.   #--------------------------------------------------------------------------
  136.   alias initialize_KGC_ExtendedEquipScene initialize
  137.   def initialize(x, y, width, height, actor, equip_type)
  138.     width = Graphics.width / 2

  139.     initialize_KGC_ExtendedEquipScene(x, y, width, height, actor, equip_type)

  140.     @column_max = 1
  141.     refresh
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● リフレッシュ
  145.   #--------------------------------------------------------------------------
  146.   alias refresh_KGC_ExtendedEquipScene refresh
  147.   def refresh
  148.     return if @column_max == 2  # 無駄な描画は行わない

  149.     refresh_KGC_ExtendedEquipScene
  150.   end
  151. end

  152. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  153. #==============================================================================
  154. # □ Window_ExtendedEquipStatus
  155. #------------------------------------------------------------------------------
  156. #   拡張装備画面で、アクターの能力値変化を表示するウィンドウです。
  157. #==============================================================================

  158. class Window_ExtendedEquipStatus < Window_EquipStatus
  159.   #--------------------------------------------------------------------------
  160.   # ○ 公開インスタンス変数
  161.   #--------------------------------------------------------------------------
  162.   attr_writer   :equip_type               # 装備タイプ
  163.   #--------------------------------------------------------------------------
  164.   # ● オブジェクト初期化
  165.   #     x     : ウィンドウの X 座標
  166.   #     y     : ウィンドウの Y 座標
  167.   #     actor : アクター
  168.   #--------------------------------------------------------------------------
  169.   def initialize(x, y, actor)
  170.     @equip_type = -1
  171.     @caption_cache = nil
  172.     super(x, y, actor)
  173.     @new_item = nil
  174.     @new_param = {}
  175.     refresh
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 解放
  179.   #--------------------------------------------------------------------------
  180.   def dispose
  181.     super
  182.     @caption_cache.dispose if @caption_cache != nil
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● ウィンドウ内容の作成
  186.   #--------------------------------------------------------------------------
  187.   def create_contents
  188.     self.contents.dispose
  189.     self.contents = Bitmap.new(Graphics.width / 2 - 32, height - 32)
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● リフレッシュ
  193.   #--------------------------------------------------------------------------
  194.   def refresh
  195.     return if @equip_type < 0

  196.     if @caption_cache == nil
  197.       create_cache
  198.     else
  199.       self.contents.clear
  200.       self.contents.blt(0, 0, @caption_cache, @caption_cache.rect)
  201.     end
  202.     draw_item_name(@actor.equips[@equip_type], 0, 0)
  203.     draw_item_name(@new_item, 24, WLH)
  204.     KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|
  205.       draw_parameter(0, WLH * (i + 2), param)
  206.     }
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ○ キャッシュ生成
  210.   #--------------------------------------------------------------------------
  211.   def create_cache
  212.     create_contents

  213.     self.contents.font.color = system_color
  214.     self.contents.draw_text(0, WLH, 20, WLH, "→")
  215.     # パラメータ描画
  216.     KGC::ExtendedEquipScene::EQUIP_PARAMS.each_with_index { |param, i|
  217.       draw_parameter_name(0, WLH * (i + 2), param)
  218.     }

  219.     @caption_cache = Bitmap.new(self.contents.width, self.contents.height)
  220.     @caption_cache.blt(0, 0, self.contents, self.contents.rect)
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ○ 能力値名の描画
  224.   #     x    : 描画先 X 座標
  225.   #     y    : 描画先 Y 座標
  226.   #     type : 能力値の種類
  227.   #--------------------------------------------------------------------------
  228.   def draw_parameter_name(x, y, type)
  229.     case type
  230.     when :maxhp
  231.       name = Vocab.hp
  232.     when :maxmp
  233.       name = Vocab.mp
  234.     when :atk
  235.       name = Vocab.atk
  236.     when :def
  237.       name = Vocab.def
  238.     when :spi
  239.       name = Vocab.spi
  240.     when :agi
  241.       name = Vocab.agi
  242.     when :hit
  243.       name = Vocab.hit
  244.     when :eva
  245.       name = Vocab.eva
  246.     when :cri
  247.       name = Vocab.cri
  248.     end
  249.     self.contents.font.color = system_color
  250.     self.contents.draw_text(x + 4, y, 96, WLH, name)
  251.     self.contents.font.color = system_color
  252.     self.contents.draw_text(x + 156, y, 20, WLH, "→", 1)
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 装備変更後の能力値設定
  256.   #     new_param : 装備変更後のパラメータの配列
  257.   #     new_item  : 変更後の装備
  258.   #--------------------------------------------------------------------------
  259.   def set_new_parameters(new_param, new_item)
  260.     changed = false
  261.     # パラメータ変化判定
  262.     KGC::ExtendedEquipScene::EQUIP_PARAMS.each { |k|
  263.       if @new_param[k] != new_param[k]
  264.         changed = true
  265.         break
  266.       end
  267.     }
  268.     changed |= (@new_item != new_item)

  269.     if changed
  270.       @new_item = new_item
  271.       @new_param = new_param
  272.       refresh
  273.     end
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 能力値の描画
  277.   #     x    : 描画先 X 座標
  278.   #     y    : 描画先 Y 座標
  279.   #     type : 能力値の種類
  280.   #--------------------------------------------------------------------------
  281.   def draw_parameter(x, y, type)
  282.     case type
  283.     when :maxhp
  284.       value = @actor.maxhp
  285.     when :maxmp
  286.       value = @actor.maxmp
  287.     when :atk
  288.       value = @actor.atk
  289.     when :def
  290.       value = @actor.def
  291.     when :spi
  292.       value = @actor.spi
  293.     when :agi
  294.       value = @actor.agi
  295.     when :hit
  296.       value = @actor.hit
  297.     when :eva
  298.       value = @actor.eva
  299.     when :cri
  300.       value = @actor.cri
  301.     end
  302.     new_value = @new_param[type]
  303.     self.contents.font.color = normal_color
  304.     self.contents.draw_text(x + 106, y, 48, WLH, value, 2)
  305.     if new_value != nil
  306.       self.contents.font.color = new_parameter_color(value, new_value)
  307.       self.contents.draw_text(x + 176, y, 48, WLH, new_value, 2)
  308.     end
  309.   end
  310. end

  311. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  312. #==============================================================================
  313. # ■ Scene_Equip
  314. #==============================================================================

  315. class Scene_Equip < Scene_Base
  316.   #--------------------------------------------------------------------------
  317.   # ○ 定数
  318.   #--------------------------------------------------------------------------
  319.   STANDARD_WIDTH  = Graphics.width / 2
  320.   ANIMATION_SPPED = 8
  321.   #--------------------------------------------------------------------------
  322.   # ● 開始処理
  323.   #--------------------------------------------------------------------------
  324.   alias start_KGC_ExtendedEquipScene start
  325.   def start
  326.     start_KGC_ExtendedEquipScene

  327.     # ステータスウィンドウを作り直す
  328.     @status_window.dispose
  329.     @status_window = Window_ExtendedEquipStatus.new(0, 0, @actor)

  330.     create_command_window

  331.     @last_item = RPG::Weapon.new
  332.     @base_info_window = Window_EquipBaseInfo.new(
  333.       0, @help_window.height, @actor)

  334.     adjust_window_for_extended_equiop_scene
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ○ ウィンドウの座標・サイズを拡張装備画面向けに調整
  338.   #--------------------------------------------------------------------------
  339.   def adjust_window_for_extended_equiop_scene
  340.     @base_info_window.width = @equip_window.width

  341.     @equip_window.x = 0
  342.     @equip_window.y = @base_info_window.y + @base_info_window.height
  343.     @equip_window.height = Graphics.height - @equip_window.y
  344.     @equip_window.active = false
  345.     @equip_window.z = 100

  346.     @status_window.x = 0
  347.     @status_window.y = @equip_window.y
  348.     @status_window.width = STANDARD_WIDTH
  349.     @status_window.height = @equip_window.height
  350.     @status_window.visible = false
  351.     @status_window.z = 100

  352.     @item_windows.each { |window|
  353.       window.x = @equip_window.width
  354.       window.y = @help_window.height
  355.       window.z = 50
  356.       window.height = Graphics.height - @help_window.height
  357.     }
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ○ コマンドウィンドウの作成
  361.   #--------------------------------------------------------------------------
  362.   def create_command_window
  363.     @command_window = Window_ExtendedEquipCommand.new
  364.     @command_window.help_window = @help_window
  365.     @command_window.active = true
  366.     @command_window.x = (Graphics.width - @command_window.width) / 2
  367.     @command_window.y = (Graphics.height - @command_window.height) / 2
  368.     @command_window.update_help

  369.     # 装備固定なら「最強装備」「すべて外す」を無効化
  370.     if @actor.fix_equipment
  371.       @command_window.draw_item(1, false)
  372.       @command_window.draw_item(2, false)
  373.     end
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ● 終了処理
  377.   #--------------------------------------------------------------------------
  378.   alias terminate_KGC_ExtendedEquipScene terminate
  379.   def terminate
  380.     terminate_KGC_ExtendedEquipScene

  381.     @command_window.dispose
  382.     @base_info_window.dispose
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ○ ウィンドウをリフレッシュ
  386.   #--------------------------------------------------------------------------
  387.   def refresh_window
  388.     @base_info_window.refresh
  389.     @equip_window.refresh
  390.     @status_window.refresh
  391.     @item_windows.each { |window| window.refresh }
  392.     Graphics.frame_reset
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● フレーム更新
  396.   #--------------------------------------------------------------------------
  397.   alias update_KGC_ExtendedEquipScene update
  398.   def update
  399.     update_command_window
  400.     if @command_window.active
  401.       update_KGC_ExtendedEquipScene
  402.       update_command_selection
  403.     else
  404.       update_KGC_ExtendedEquipScene
  405.     end
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ○ コマンドウィンドウの更新
  409.   #--------------------------------------------------------------------------
  410.   def update_command_window
  411.     @command_window.update
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● ステータスウィンドウの更新
  415.   #--------------------------------------------------------------------------
  416.   def update_status_window
  417.     @base_info_window.update
  418.     @status_window.update

  419.     if @command_window.active || @equip_window.active
  420.       @status_window.set_new_parameters({}, nil)
  421.     elsif @item_window.active
  422.       return if @last_item == @item_window.item

  423.       @last_item = @item_window.item
  424.       temp_actor = Marshal.load(Marshal.dump(@actor))
  425.       temp_actor.change_equip(@equip_window.index, @item_window.item, true)
  426.       param = {
  427.         :maxhp => temp_actor.maxhp,
  428.         :maxmp => temp_actor.maxmp,
  429.         :atk   => temp_actor.atk,
  430.         :def   => temp_actor.def,
  431.         :spi   => temp_actor.spi,
  432.         :agi   => temp_actor.agi,
  433.         :hit   => temp_actor.hit,
  434.         :eva   => temp_actor.eva,
  435.         :cri   => temp_actor.cri,
  436.       }
  437.       @status_window.equip_type = @equip_window.index
  438.       @status_window.set_new_parameters(param, @last_item)
  439.       Graphics.frame_reset
  440.     end
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ○ コマンド選択の更新
  444.   #--------------------------------------------------------------------------
  445.   def update_command_selection
  446.     update_window_position_for_equip_selection
  447.     if Input.trigger?(Input::B)
  448.       Sound.play_cancel
  449.       return_scene
  450.     elsif Input.trigger?(Input::R)
  451.       Sound.play_cursor
  452.       next_actor
  453.     elsif Input.trigger?(Input::L)
  454.       Sound.play_cursor
  455.       prev_actor
  456.     elsif Input.trigger?(Input::C)
  457.       case @command_window.index
  458.       when 0  # 装備変更
  459.         Sound.play_decision
  460.         # 装備部位ウィンドウに切り替え
  461.         @equip_window.active = true
  462.         @command_window.active = false
  463.         @command_window.close
  464.       when 1  # 最強装備
  465.         if @actor.fix_equipment
  466.           Sound.play_buzzer
  467.           return
  468.         end
  469.         Sound.play_equip
  470.         process_equip_strongest
  471.       when 2  # すべて外す
  472.         if @actor.fix_equipment
  473.           Sound.play_buzzer
  474.           return
  475.         end
  476.         Sound.play_equip
  477.         process_remove_all
  478.       end
  479.     end
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● 装備部位選択の更新
  483.   #--------------------------------------------------------------------------
  484.   alias update_equip_selection_KGC_ExtendedEquipScene update_equip_selection
  485.   def update_equip_selection
  486.     update_window_position_for_equip_selection
  487.     if Input.trigger?(Input::A)
  488.       if @actor.fix_equipment
  489.         Sound.play_buzzer
  490.         return
  491.       end
  492.       # 選択している装備品を外す
  493.       Sound.play_equip
  494.       @actor.change_equip(@equip_window.index, nil)
  495.       @base_info_window.refresh
  496.       @equip_window.refresh
  497.       @item_window.refresh
  498.     elsif Input.trigger?(Input::B)
  499.       Sound.play_cancel
  500.       # コマンドウィンドウに切り替え
  501.       @equip_window.active = false
  502.       @command_window.active = true
  503.       @command_window.open
  504.       return
  505.     elsif Input.trigger?(Input::R) || Input.trigger?(Input::L)
  506.       # アクター切り替えを無効化
  507.       return
  508.     elsif Input.trigger?(Input::C)
  509.       # 前回のアイテムをダミーにする
  510.       @last_item = RPG::Weapon.new
  511.     end

  512.     update_equip_selection_KGC_ExtendedEquipScene
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● アイテム選択の更新
  516.   #--------------------------------------------------------------------------
  517.   alias update_item_selection_KGC_ExtendedEquipScene update_item_selection
  518.   def update_item_selection
  519.     update_window_position_for_item_selection

  520.     update_item_selection_KGC_ExtendedEquipScene

  521.     if Input.trigger?(Input::C)
  522.       @base_info_window.refresh
  523.     end
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ○ ウィンドウ位置の更新 (装備部位選択)
  527.   #--------------------------------------------------------------------------
  528.   def update_window_position_for_equip_selection
  529.     return if @item_window.x == @equip_window.width

  530.     @base_info_window.width = @equip_window.width
  531.     @item_window.x = [@item_window.x + ANIMATION_SPPED, @equip_window.width].min
  532.     @equip_window.visible = true
  533.     @status_window.visible = false
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ○ ウィンドウ位置の更新 (アイテム選択)
  537.   #--------------------------------------------------------------------------
  538.   def update_window_position_for_item_selection
  539.     return if @item_window.x == STANDARD_WIDTH

  540.     @base_info_window.width = STANDARD_WIDTH
  541.     @item_window.x = [@item_window.x - ANIMATION_SPPED, STANDARD_WIDTH].max
  542.     @equip_window.visible = false
  543.     @status_window.visible = true
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ○ 最強装備の処理
  547.   #--------------------------------------------------------------------------
  548.   def process_equip_strongest
  549.     # 最強装備対象の種別を取得
  550.     type = [-1]
  551.     type += ($imported["EquipExtension"] ? @actor.equip_type : [0, 1, 2, 3])
  552.     type -= KGC::ExtendedEquipScene::IGNORE_STRONGEST_KIND
  553.     weapon_range = (@actor.two_swords_style ? 0..1 : 0)

  554.     # 最強装備
  555.     type.each_index { |i|
  556.       case i
  557.       when weapon_range  # 武器
  558.         weapon = strongest_item(i, -1)
  559.         next if weapon == nil
  560.         @actor.change_equip(i, weapon)
  561.       else               # 防具
  562.         armor = strongest_item(i, type[i])
  563.         next if armor == nil
  564.         @actor.change_equip(i, armor)
  565.       end
  566.     }

  567.     refresh_window
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ○ 最も強力なアイテムを取得
  571.   #     equip_type : 装備部位
  572.   #     kind       : 種別 (-1..武器  0~..防具)
  573.   #    該当するアイテムがなければ nil を返す。
  574.   #--------------------------------------------------------------------------
  575.   def strongest_item(equip_type, kind)
  576.     result = nil
  577.     case kind
  578.     when -1  # 武器
  579.       # 装備可能な武器を取得
  580.       weapons = $game_party.items.find_all { |item|
  581.         valid = item.is_a?(RPG::Weapon) && @actor.equippable?(item)
  582.         if valid && $imported["EquipExtension"]
  583.           valid = @actor.ep_condition_clear?(equip_type, item)
  584.         end
  585.         valid
  586.       }
  587.       # 最も atk が高い武器を取得
  588.       weapons.each { |item|
  589.         if result == nil || result.atk <= item.atk
  590.           result = item
  591.         end
  592.       }
  593.     else     # 防具
  594.       # 装備可能な防具を取得
  595.       armors = $game_party.items.find_all { |item|
  596.         valid = item.is_a?(RPG::Armor) && item.kind == kind &&
  597.           @actor.equippable?(item)
  598.         if valid && $imported["EquipExtension"]
  599.           valid = @actor.ep_condition_clear?(equip_type, item)
  600.         end
  601.         valid
  602.       }
  603.       # 最も def が高い防具を取得
  604.       armors.each { |item|
  605.         if result == nil || result.def <= item.def
  606.           result = item
  607.         end
  608.       }
  609.     end

  610.     return result
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ○ すべて外す処理
  614.   #--------------------------------------------------------------------------
  615.   def process_remove_all
  616.     type_max = ($imported["EquipExtension"] ? @actor.equip_type.size : 3) + 1
  617.     type_max.times { |i| @actor.change_equip(i, nil) }
  618.     refresh_window
  619. end
  620. end
复制代码
这个不是我翻译的 最強装備 すべて外す 2个项被我删掉了

另外这个脚本最好配合下面这个脚本一起使用
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 装備拡張 - KGC_EquipExtension ◆ VX ◆
  3. #_/    ◇ Last update : 2008/02/10 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  装備関連の機能を拡張します。
  6. #_/============================================================================
  7. #_/ 【メニュー】≪拡張装備画面≫ より下に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  9. #==============================================================================
  10. # ★ カスタマイズ項目 - Customize ★
  11. #==============================================================================

  12. module KGC
  13. module EquipExtension
  14.   # ◆ 扩张的装备种类名称
  15.   #  从前面的皆下去4, 5, 6, ...
  16.   EXTRA_EQUIP_KIND = ["颈部", "背部", "手部", "足部", "辅助"]

  17.   # ◆ 装备的顺序
  18.   #  以这里设置的顺序接续在武器的下面
  19.   #  ※ 装备个数最低为1,否则二刀流会出错
  20.   #   ** 装备种类一览 **
  21.   #  0..盾  1..頭部  2..身体  3..装飾品  4~..↑所定義的种类
  22.   EQUIP_TYPE = [0, 1, 4, 2, 5, 6, 7, 3, 8]

  23.   # ◆ EP (装备点数) 制是否要使用
  24.   USE_EP_SYSTEM = true
  25.   # ◆ EP 的名称
  26.   VOCAB_EP   = "负重力"
  27.   # ◆ EP 的名称 (略)
  28.   VOCAB_EP_A = "负重"
  29.   # ◆ 是否在状态介面显示EP值
  30.   SHOW_STATUS_EP = true

  31.   # ◆ 装备预设 EP 消耗点数
  32.   #  没有设定EP消耗点数的装备自动加上的点数
  33.   DEFAULT_EP_COST   = 1
  34.   # ◆ 当消耗 EP 值为 0 时隐藏
  35.   HIDE_ZERO_EP_COST = true

  36.   # ◆ EP 上限
  37.   EP_MAX = 200
  38.   # ◆ EP 下限
  39.   EP_MIN = 1
  40.   # ◆ 最大 EP 公式
  41.   #   MaxHP..角色最大体力值
  42.   #  计算後小数自动取整
  43.   EP_CALC_EXP = "base_maxhp/2 * 0.03+3"

  44.   # ◆ 消耗 EP 値的文字颜色 (接续在装备名称後面的文字)
  45.   #  数字  : 与 \C[n] 同样的颜色 (也就是在窗口外观设置的颜色色号)
  46.   #  Color : 指定颜色。 ( Color.new(128, 255, 255))
  47.   EP_COST_COLOR        = 23
  48.   # ◆ EP 槽開始色
  49.   EP_GAUGE_START_COLOR = 28
  50.   # ◆ EP 槽结束色
  51.   EP_GAUGE_END_COLOR   = 29
  52. end
  53. end

  54. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

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

  57. module KGC::EquipExtension
  58.   # EP 制を使用しない場合の設定
  59.   unless USE_EP_SYSTEM
  60.     SHOW_STATUS_EP = false
  61.     HIDE_ZERO_EP_COST = true
  62.   end

  63.   # 正規表現
  64.   module Regexp
  65.     # ベースアイテム
  66.     module BaseItem
  67.       # 消費 EP
  68.       EP_COST = /<EP\s*(\d+)>/i
  69.       # 装備タイプ
  70.       EQUIP_TYPE = /<(?:EQUIP_TYPE|装備タイプ)\s*(\d+(?:\s*,\s*\d+)*)>/
  71.     end

  72.     # 防具
  73.     module Armor
  74.       # 装備種別
  75.       EQUIP_KIND = /<(?:EQUIP_KIND|装备类别)\s*(.+)>/i
  76.     end
  77.   end
  78. end

  79. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  80. #==============================================================================
  81. # □ KGC::Commands
  82. #==============================================================================

  83. module KGC::Commands
  84.   module_function
  85.   #--------------------------------------------------------------------------
  86.   # ○ アクターの装備を修復
  87.   #--------------------------------------------------------------------------
  88.   def restore_equip
  89.     (1...$data_actors.size).each { |i|
  90.       actor = $game_actors[i]
  91.       actor.restore_equip
  92.     }
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ○ アクターの装備タイプを設定
  96.   #     actor_id   : アクター ID
  97.   #     equip_type : 装備タイプ
  98.   #--------------------------------------------------------------------------
  99.   def set_actor_equip_type(actor_id, equip_type = nil)
  100.     actor = $game_actors[actor_id]
  101.     return if actor == nil
  102.     actor.equip_type = equip_type
  103.   end
  104. end

  105. class Game_Interpreter
  106.   include KGC::Commands
  107. end

  108. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  109. #==============================================================================
  110. # ■ Vocab
  111. #==============================================================================

  112. module Vocab
  113.   # EP
  114.   def self.ep
  115.     return KGC::EquipExtension::VOCAB_EP
  116.   end

  117.   # EP (略)
  118.   def self.ep_a
  119.     return KGC::EquipExtension::VOCAB_EP_A
  120.   end

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

  126. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  127. #==============================================================================
  128. # ■ RPG::BaseItem
  129. #==============================================================================

  130. class RPG::BaseItem
  131.   #--------------------------------------------------------------------------
  132.   # ○ 装備拡張のキャッシュを作成
  133.   #--------------------------------------------------------------------------
  134.   def create_equip_extension_cache
  135.     @__ep_cost = KGC::EquipExtension::DEFAULT_EP_COST
  136.     @__equip_type = []

  137.     self.note.split(/[\r\n]+/).each { |line|
  138.       case line
  139.       when KGC::EquipExtension::Regexp::BaseItem::EP_COST
  140.         # 消費 EP
  141.         @__ep_cost = $1.to_i
  142.       when KGC::EquipExtension::Regexp::BaseItem::EQUIP_TYPE
  143.         # 装備タイプ
  144.         @__equip_type = []
  145.         $1.scan(/\d+/) { |num|
  146.           @__equip_type << num.to_i
  147.         }
  148.       end
  149.     }

  150.     # EP 制を使用しない場合は消費 EP = 0
  151.     @__ep_cost = 0 unless KGC::EquipExtension::USE_EP_SYSTEM
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ○ 消費 EP
  155.   #--------------------------------------------------------------------------
  156.   def ep_cost
  157.     create_equip_extension_cache if @__ep_cost == nil
  158.     return @__ep_cost
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ 装備タイプ
  162.   #--------------------------------------------------------------------------
  163.   def equip_type
  164.     create_equip_extension_cache if @__equip_type == nil
  165.     return @__equip_type
  166.   end
  167. end

  168. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  169. #==============================================================================
  170. # ■ RPG::Armor
  171. #==============================================================================

  172. class RPG::Armor < RPG::BaseItem
  173.   #--------------------------------------------------------------------------
  174.   # ○ 装備拡張のキャッシュを作成
  175.   #--------------------------------------------------------------------------
  176.   def create_equip_extension_cache
  177.     super
  178.     @__kind = -1

  179.     self.note.split(/[\r\n]+/).each { |line|
  180.       if line =~ KGC::EquipExtension::Regexp::Armor::EQUIP_KIND
  181.         # 装備タイプ
  182.         e_index = KGC::EquipExtension::EXTRA_EQUIP_KIND.index($1)
  183.         next if e_index == nil
  184.         @__kind = e_index + 4
  185.       end
  186.     }
  187.   end

  188. unless $@
  189.   #--------------------------------------------------------------------------
  190.   # ○ 種別
  191.   #--------------------------------------------------------------------------
  192.   alias kind_KGC_EquipExtension kind
  193.   def kind
  194.     create_equip_extension_cache if @__kind == nil
  195.     return (@__kind == -1 ? kind_KGC_EquipExtension : @__kind)
  196.   end
  197. end

  198. end

  199. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  200. #==============================================================================
  201. # ■ Game_Actor
  202. #==============================================================================

  203. class Game_Actor < Game_Battler
  204.   #--------------------------------------------------------------------------
  205.   # ● 公開インスタンス変数
  206.   #--------------------------------------------------------------------------
  207.   attr_writer   :equip_type               # 装備タイプ
  208.   #--------------------------------------------------------------------------
  209.   # ● セットアップ
  210.   #     actor_id : アクター ID
  211.   #--------------------------------------------------------------------------
  212.   alias setup_KGC_EquipExtension setup
  213.   def setup(actor_id)
  214.     actor = $data_actors[actor_id]
  215.     @extra_armor_id = []

  216.     setup_KGC_EquipExtension(actor_id)

  217.     restore_equip
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ○ MaxEP 取得
  221.   #--------------------------------------------------------------------------
  222.   def maxep
  223.     n = Integer(eval(KGC::EquipExtension::EP_CALC_EXP))
  224.     return [[n, ep_limit].min, KGC::EquipExtension::EP_MIN].max
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ○ EP 取得
  228.   #--------------------------------------------------------------------------
  229.   def ep
  230.     n = 0
  231.     equips.compact.each { |item| n += item.ep_cost }
  232.     return [maxep - n, 0].max
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ○ EP 上限取得
  236.   #--------------------------------------------------------------------------
  237.   def ep_limit
  238.     return KGC::EquipExtension::EP_MAX
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ○ 防具欄の取得
  242.   #--------------------------------------------------------------------------
  243.   def equip_type
  244.     if @equip_type.is_a?(Array)
  245.       return @equip_type
  246.     else
  247.       return KGC::EquipExtension::EQUIP_TYPE
  248.     end
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ○ 防具欄の数
  252.   #--------------------------------------------------------------------------
  253.   def armor_number
  254.     return equip_type.size
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ○ 拡張防具欄の数
  258.   #--------------------------------------------------------------------------
  259.   def extra_armor_number
  260.     return [armor_number - 4, 0].max
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ○ 防具 ID リストの取得
  264.   #--------------------------------------------------------------------------
  265.   def extra_armor_id
  266.     @extra_armor_id = [] if @extra_armor_id == nil
  267.     return @extra_armor_id
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 防具オブジェクトの配列取得
  271.   #--------------------------------------------------------------------------
  272.   alias armors_KGC_EquipExtension armors
  273.   def armors
  274.     result = armors_KGC_EquipExtension

  275.     # 5番目以降の防具を追加
  276.     extra_armor_number.times { |i|
  277.       armor_id = extra_armor_id[i]
  278.       result << (armor_id == nil ? nil : $data_armors[armor_id])
  279.     }
  280.     return result
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 装備の変更 (オブジェクトで指定)
  284.   #     equip_type : 装備部位
  285.   #     item       : 武器 or 防具 (nil なら装備解除)
  286.   #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  287.   #--------------------------------------------------------------------------
  288.   alias change_equip_KGC_EquipExtension change_equip
  289.   def change_equip(equip_type, item, test = false)
  290.     change_equip_KGC_EquipExtension(equip_type, item, test)

  291.     # 拡張防具欄がある場合のみ
  292.     if extra_armor_number > 0
  293.       item_id = item == nil ? 0 : item.id
  294.       case equip_type
  295.       when 5..armor_number  # 拡張防具欄
  296.         @extra_armor_id = [] if @extra_armor_id == nil
  297.         @extra_armor_id[equip_type - 5] = item_id
  298.       end
  299.     end

  300.     restore_battle_skill if $imported["SkillCPSystem"]
  301.     restore_passive_rev  if $imported["PassiveSkill"]
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 装備の破棄
  305.   #     item : 破棄する武器 or 防具
  306.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  307.   #--------------------------------------------------------------------------
  308.   alias discard_equip_KGC_EquipExtension discard_equip
  309.   def discard_equip(item)
  310.     last_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]

  311.     discard_equip_KGC_EquipExtension(item)

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

  315.     # 拡張防具欄を検索
  316.     extra_armor_number.times { |i|
  317.       if extra_armor_id[i] == item.id
  318.         @extra_armor_id[i] = 0
  319.         break
  320.       end
  321.     }

  322.     restore_battle_skill if $imported["SkillCPSystem"]
  323.     restore_passive_rev  if $imported["PassiveSkill"]
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ● 職業 ID の変更
  327.   #     class_id : 新しい職業 ID
  328.   #--------------------------------------------------------------------------
  329.   alias class_id_equal_KGC_EquipExtension class_id=
  330.   def class_id=(class_id)
  331.     class_id_equal_KGC_EquipExtension(class_id)

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

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

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

  348.     return true
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ○ 装備を修復
  352.   #--------------------------------------------------------------------------
  353.   def restore_equip
  354.     # 以前の装備品・パラメータを退避
  355.     last_equips = equips
  356.     last_hp = self.hp
  357.     last_mp = self.mp
  358.     if $imported["SkillCPSystem"]
  359.       last_battle_skill_ids = battle_skill_ids.clone
  360.     end

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

  363.     # 装備品・パラメータを復元
  364.     last_equips.compact.each { |item| equip_legal_slot(item) }
  365.     self.hp = last_hp
  366.     self.mp = last_mp
  367.     if $imported["SkillCPSystem"]
  368.       last_battle_skill_ids.each_with_index { |s, i| set_battle_skill(i, s) }
  369.     end
  370.     Graphics.frame_reset
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ○ 装備品を正しい箇所にセット
  374.   #     item : 武器 or 防具
  375.   #--------------------------------------------------------------------------
  376.   def equip_legal_slot(item)
  377.     if item.is_a?(RPG::Weapon)
  378.       if @weapon_id == 0
  379.         # 武器 1
  380.         change_equip(0, item)
  381.       elsif two_swords_style && @armor1_id == 0
  382.         # 武器 2 (二刀流の場合)
  383.         change_equip(1, item)
  384.       end
  385.     elsif item.is_a?(RPG::Armor)
  386.       if !two_swords_style && item.kind == equip_type[0] && @armor1_id == 0
  387.         # 先頭の防具 (二刀流でない場合)
  388.         change_equip(1, item)
  389.       else
  390.         # 装備箇所リストを作成
  391.         list = [-1, @armor2_id, @armor3_id, @armor4_id]
  392.         list += extra_armor_id
  393.         # 正しい、かつ空いている箇所にセット
  394.         equip_type.each_with_index { |kind, i|
  395.           if kind == item.kind && list[i] == 0
  396.             change_equip(i + 1, item)
  397.             break
  398.           end
  399.         }
  400.       end
  401.     end
  402.   end
  403. end

  404. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  405. #==============================================================================
  406. # ■ Window_Base
  407. #==============================================================================

  408. class Window_Base < Window
  409.   #--------------------------------------------------------------------------
  410.   # ○ EP の文字色を取得
  411.   #     actor : アクター
  412.   #--------------------------------------------------------------------------
  413.   def ep_color(actor)
  414.     return knockout_color if actor.maxep > 0 && actor.ep == 0
  415.     return normal_color
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ○ EP ゲージの色 1 の取得
  419.   #--------------------------------------------------------------------------
  420.   def ep_gauge_color1
  421.     color = KGC::EquipExtension::EP_GAUGE_START_COLOR
  422.     return (color.is_a?(Integer) ? text_color(color) : color)
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ○ EP ゲージの色 2 の取得
  426.   #--------------------------------------------------------------------------
  427.   def ep_gauge_color2
  428.     color = KGC::EquipExtension::EP_GAUGE_END_COLOR
  429.     return (color.is_a?(Integer) ? text_color(color) : color)
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ○ EP の描画
  433.   #     actor : アクター
  434.   #     x     : 描画先 X 座標
  435.   #     y     : 描画先 Y 座標
  436.   #     width : 幅
  437.   #--------------------------------------------------------------------------
  438.   def draw_actor_ep(actor, x, y, width = 120)
  439.     draw_actor_ep_gauge(actor, x, y, width)
  440.     self.contents.font.color = system_color
  441.     self.contents.draw_text(x, y, 30, WLH, Vocab::ep_a)
  442.     self.contents.font.color = ep_color(actor)
  443.     xr = x + width
  444.     if width < 120
  445.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.ep, 2)
  446.     else
  447.       self.contents.draw_text(xr - 90, y, 40, WLH, actor.ep, 2)
  448.       self.contents.font.color = normal_color
  449.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  450.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxep, 2)
  451.     end
  452.     self.contents.font.color = normal_color
  453.   end
  454.   #--------------------------------------------------------------------------
  455.   # ○ EP ゲージの描画
  456.   #     actor : アクター
  457.   #     x     : 描画先 X 座標
  458.   #     y     : 描画先 Y 座標
  459.   #     width : 幅
  460.   #--------------------------------------------------------------------------
  461.   def draw_actor_ep_gauge(actor, x, y, width = 120)
  462.     gw = width * actor.ep / [actor.maxep, 1].max
  463.     gc1 = ep_gauge_color1
  464.     gc2 = ep_gauge_color2
  465.     self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  466.     self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ○ 消費 EP の描画
  470.   #     item    : 武器 or 防具
  471.   #     rect    : 描画する領域
  472.   #     enabled : 許可状態
  473.   #--------------------------------------------------------------------------
  474.   def draw_equipment_ep_cost(item, rect, enabled = true)
  475.     return if item == nil
  476.     # 消費 EP 0 を表示しない場合
  477.     return if KGC::EquipExtension::HIDE_ZERO_EP_COST && item.ep_cost == 0

  478.     color = KGC::EquipExtension::EP_COST_COLOR
  479.     self.contents.font.color = (color.is_a?(Integer) ?
  480.       text_color(color) : color)
  481.     self.contents.font.color.alpha = enabled ? 255 : 128
  482.     self.contents.draw_text(rect, item.ep_cost, 2)
  483.   end
  484. end

  485. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  486. #==============================================================================
  487. # ■ Window_Equip
  488. #==============================================================================

  489. class Window_Equip < Window_Selectable
  490.   #--------------------------------------------------------------------------
  491.   # ● リフレッシュ
  492.   #--------------------------------------------------------------------------
  493.   def refresh
  494.     self.contents.clear
  495.     @data = @actor.equips.clone
  496.     @item_max = [@data.size, @actor.armor_number + 1].min
  497.     create_contents

  498.     # 装備箇所を描画
  499.     self.contents.font.color = system_color
  500.     if @actor.two_swords_style
  501.       self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon1)
  502.       self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2)
  503.     else
  504.       self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon)
  505.       name = armor_slot_name(@actor.equip_type[0])
  506.       self.contents.draw_text(4, WLH * 1, 92, WLH, name)
  507.     end
  508.     for i in [email protected]_number
  509.       name = armor_slot_name(@actor.equip_type[i])
  510.       self.contents.draw_text(4, WLH * (i + 1), 92, WLH, name)
  511.     end

  512.     # 装備品を描画
  513.     rect = Rect.new(92, 0, self.width - 128, WLH)
  514.     @item_max.times { |i|
  515.       rect.y = WLH * i
  516.       draw_item_name(@data[i], rect.x, rect.y)
  517.       draw_equipment_ep_cost(@data[i], rect)
  518.     }
  519.   end
  520.   #--------------------------------------------------------------------------
  521.   # ○ 防具欄の名称を取得
  522.   #     kind : 種別
  523.   #--------------------------------------------------------------------------
  524.   def armor_slot_name(kind)
  525.     case kind
  526.     when 0..3
  527.       return eval("Vocab.armor#{kind + 1}")
  528.     else
  529.       return Vocab.extra_armor(kind - 4)
  530.     end
  531.   end

  532. unless $imported["ExtendedEquipScene"]
  533.   #--------------------------------------------------------------------------
  534.   # ● カーソルを 1 ページ後ろに移動
  535.   #--------------------------------------------------------------------------
  536.   def cursor_pagedown
  537.     return if Input.repeat?(Input::R)
  538.     super
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ● カーソルを 1 ページ前に移動
  542.   #--------------------------------------------------------------------------
  543.   def cursor_pageup
  544.     return if Input.repeat?(Input::L)
  545.     super
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # ● フレーム更新
  549.   #--------------------------------------------------------------------------
  550.   def update
  551.     super
  552.     return unless self.active

  553.     if Input.repeat?(Input::RIGHT)
  554.       cursor_pagedown
  555.     elsif Input.repeat?(Input::LEFT)
  556.       cursor_pageup
  557.     end
  558.   end
  559. end

  560. end

  561. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  562. #==============================================================================
  563. # ■ Window_EquipItem
  564. #==============================================================================

  565. class Window_EquipItem < Window_Item
  566.   #--------------------------------------------------------------------------
  567.   # ● リフレッシュ
  568.   #--------------------------------------------------------------------------
  569.   def refresh
  570.     @item_enabled = []
  571.     super
  572.     @data.each { |item| @item_enabled << enable?(item) }
  573.   end
  574.   #--------------------------------------------------------------------------
  575.   # ● アイテムをリストに含めるかどうか
  576.   #     item : アイテム
  577.   #--------------------------------------------------------------------------
  578.   def include?(item)
  579.     return true if item == nil
  580.     if @equip_type == 0
  581.       return false unless item.is_a?(RPG::Weapon)
  582.     else
  583.       return false unless item.is_a?(RPG::Armor)
  584.       return false unless item.kind == @equip_type - 1
  585.     end
  586.     return @actor.equippable?(item)
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ● アイテムを許可状態で表示するかどうか
  590.   #     item : アイテム
  591.   #--------------------------------------------------------------------------
  592.   def enable?(item)
  593.     return false unless @actor.equippable?(item)                      # 装備不可
  594.     return false unless @actor.ep_condition_clear?(@equip_type, item)  # EP 不足

  595.     return true
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 項目の描画
  599.   #     index : 項目番号
  600.   #--------------------------------------------------------------------------
  601.   def draw_item(index)
  602.     super(index)   
  603.     rect = item_rect(index)
  604.     item = @data[index]

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

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

  629. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  630. #==============================================================================
  631. # ■ Window_EquipStatus
  632. #==============================================================================

  633. class Window_EquipStatus < Window_Base
  634.   #--------------------------------------------------------------------------
  635.   # ● リフレッシュ
  636.   #--------------------------------------------------------------------------
  637.   alias refresh_KGC_EquipExtension refresh
  638.   def refresh
  639.     refresh_KGC_EquipExtension

  640.     draw_actor_ep(@actor, 120, 0, 56) if KGC::EquipExtension::USE_EP_SYSTEM
  641.   end
  642. end

  643. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  644. #==============================================================================
  645. # ■ Window_Status
  646. #==============================================================================

  647. class Window_Status < Window_Base

  648. if KGC::EquipExtension::SHOW_STATUS_EP
  649.   #--------------------------------------------------------------------------
  650.   # ● 基本情報の描画
  651.   #     x : 描画先 X 座標
  652.   #     y : 描画先 Y 座標
  653.   #--------------------------------------------------------------------------
  654.   alias draw_basic_info_KGC_EquipExtension draw_basic_info
  655.   def draw_basic_info(x, y)
  656.     draw_basic_info_KGC_EquipExtension(x, y)

  657.     draw_actor_ep(@actor, x + 160, y + WLH * 4)
  658.   end
  659. end

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

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

  674. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  675. #==============================================================================
  676. # ■ Scene_Equip
  677. #==============================================================================

  678. class Scene_Equip < Scene_Base
  679.   #--------------------------------------------------------------------------
  680.   # ● 定数
  681.   #--------------------------------------------------------------------------
  682.   EQUIP_TYPE_MAX = KGC::EquipExtension::EXTRA_EQUIP_KIND.size + 5
  683.   #--------------------------------------------------------------------------
  684.   # ● オブジェクト初期化
  685.   #     actor_index : アクターインデックス
  686.   #     equip_index : 装備インデックス
  687.   #--------------------------------------------------------------------------
  688.   alias initialize_KGC_EquipExtension initialize
  689.   def initialize(actor_index = 0, equip_index = 0)
  690.     initialize_KGC_EquipExtension(actor_index, equip_index)

  691.     unit = ($imported["LargeParty"] ?
  692.       $game_party.all_members : $game_party.members)
  693.     actor = unit[actor_index]
  694.     @equip_index = [@equip_index, actor.armor_number].min
  695.   end
  696.   #--------------------------------------------------------------------------
  697.   # ● アイテムウィンドウの作成
  698.   #--------------------------------------------------------------------------
  699.   alias create_item_windows_KGC_EquipExtension create_item_windows
  700.   def create_item_windows
  701.     create_item_windows_KGC_EquipExtension

  702.     kind = equip_kind(@equip_index)
  703.     EQUIP_TYPE_MAX.times { |i|
  704.       @item_windows[i].visible = (kind == i)
  705.     }
  706.   end
  707.   #--------------------------------------------------------------------------
  708.   # ● アイテムウィンドウの更新
  709.   #--------------------------------------------------------------------------
  710.   def update_item_windows
  711.     kind = equip_kind(@equip_window.index)
  712.     for i in 0...EQUIP_TYPE_MAX
  713.       @item_windows[i].visible = (kind == i)
  714.       @item_windows[i].update
  715.     end
  716.     @item_window = @item_windows[kind]
  717.     @item_window.simple_refresh(@equip_window.index)
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ○ 装備欄の種別を取得
  721.   #     index : 装備欄インデックス
  722.   #--------------------------------------------------------------------------
  723.   def equip_kind(index)
  724.     if index == 0
  725.       return 0
  726.     else
  727.       return @actor.equip_type[index - 1] + 1
  728.     end
  729.   end

  730. unless $imported["ExtendedEquipScene"]
  731.   #--------------------------------------------------------------------------
  732.   # ● ステータスウィンドウの更新
  733.   #--------------------------------------------------------------------------
  734.   def update_status_window
  735.     if @equip_window.active
  736.       @status_window.set_new_parameters(nil, nil, nil, nil)
  737.     elsif @item_window.active
  738.       temp_actor = Marshal.load(Marshal.dump(@actor))
  739.       temp_actor.change_equip(@equip_window.index, @item_window.item, true)
  740.       new_atk = temp_actor.atk
  741.       new_def = temp_actor.def
  742.       new_spi = temp_actor.spi
  743.       new_agi = temp_actor.agi
  744.       @status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
  745.     end
  746.     @status_window.update
  747.   end
  748. end

  749.   #--------------------------------------------------------------------------
  750.   # ● アイテム選択の更新
  751.   #--------------------------------------------------------------------------
  752.   alias update_item_selection_KGC_EquipExtension update_item_selection
  753.   def update_item_selection
  754.     if Input.trigger?(Input::C)
  755.       # 装備不可能な場合
  756.       index = @equip_window.index
  757.       item = @item_window.item
  758.       unless item == nil ||
  759.           (@actor.equippable?(item) && @actor.ep_condition_clear?(index, item))
  760.         Sound.play_buzzer
  761.         return
  762.       end
  763.     end

  764.     update_item_selection_KGC_EquipExtension
  765.   end
  766. end

  767. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  768. #==============================================================================
  769. # ■ Scene_File
  770. #==============================================================================

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

  779.     KGC::Commands.restore_equip
  780.     Graphics.frame_reset
  781.   end
  782. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
99 小时
注册时间
2011-3-19
帖子
41
3
发表于 2011-5-5 20:33:27 | 只看该作者
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 装备扩展 - KGC_EquipExtension ◆ VX ◆
#_/    ◇ Last update : 2008/02/10 ◇
#_/----------------------------------------------------------------------------
#_/  扩展装备相关
#_/============================================================================
#_/ 【菜单】≪扩展装备画面面≫ 请从下导入。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ Customize项目 - Customize ★
#==============================================================================

module KGC
module EquipExtension
  # ◆ 扩张的装备种类名称
  #  从前面的皆下去4, 5, 6, ...
  EXTRA_EQUIP_KIND = ["颈部", "背部", "手部", "足部", "辅助"]

  # ◆ 装备的顺序
  #  以这里设置的顺序接续在武器的下面
  #  ※ 装备个数最低为1,否则二刀流会出错
  #   ** 装备种类一览 **
  #  0..盾  1..头部  2..身体  3..装饰品  4~..↑所定义的种类
  EQUIP_TYPE = [0, 1, 4, 2, 5, 6, 7, 3, 8]

  # ◆ EP (装备点数) 制是否要使用
  USE_EP_SYSTEM = true
  # ◆ EP 的名称
  VOCAB_EP   = "负重力"
  # ◆ EP 的名称 (略)
  VOCAB_EP_A = "负重"
  # ◆ 是否在状态接口显示EP值
  SHOW_STATUS_EP = true

  # ◆ 装备预设 EP 消耗点数
  #  没有设定EP消耗点数的装备自动加上的点数
  DEFAULT_EP_COST   = 1
  # ◆ 当消耗 EP 值为 0 时隐藏
  HIDE_ZERO_EP_COST = true

  # ◆ EP 上限
  EP_MAX = 200
  # ◆ EP 下限
  EP_MIN = 1
  # ◆ 最大 EP 公式
  #   MaxHP..角色最大体力值
  #  计算后小数自动取整
  EP_CALC_EXP = "base_maxhp/2 * 0.03+3"

  # ◆ 消耗 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
      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
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
  #--------------------------------------------------------------------------
  # ○ 生成扩展装备的cache
  #--------------------------------------------------------------------------
  def create_equip_extension_cache
    @__ep_cost = KGC::EquipExtension::DEFAULT_EP_COST
    @__equip_type = []

    self.note.split(/[
]+/).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
  #--------------------------------------------------------------------------
  # ○生成扩展装备的cache
  #--------------------------------------------------------------------------
  def create_equip_extension_cache
    super
    @__kind = -1

    self.note.split(/[
]+/).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               # 装备类别
  #--------------------------------------------------------------------------
  # ● set up
  #     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
      result << (armor_id == nil ? nil : $data_armors[armor_id])
    }
    return result
  end
  #--------------------------------------------------------------------------
  # ●変更装备(指定对象)
  #     equip_type : 装备部位
  #     item       : 武器 or 防具 (如果空则装备解除)
  #     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 == item.id
        @extra_armor_id = 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)
    end
  end
  #--------------------------------------------------------------------------
  # ○ EP 条件清除判定
  #     equip_type : 装备部位
  #     item       : 武器 or 防具
  #--------------------------------------------------------------------------
  def ep_condition_clear?(equip_type, item)
    return true if item == nil  # 为空可以解除
    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
    #退避以前的装备品・参数
    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
    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 == 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 gauge色 1
  #--------------------------------------------------------------------------
  def ep_gauge_color1
    color = KGC::EquipExtension::EP_GAUGE_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ○取得EP gauge色 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 guage描画
  #     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 [email protected]_number
      name = armor_slot_name(@actor.equip_type)
      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, rect.x, rect.y)
      draw_equipment_ep_cost(@data, 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"]
  #--------------------------------------------------------------------------
  # ●光标后移一页
  #--------------------------------------------------------------------------
  def cursor_pagedown
    return if Input.repeat?(Input::R)
    super
  end
  #--------------------------------------------------------------------------
  # ● 光标前移一页
  #--------------------------------------------------------------------------
  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
        draw_item(i)
        @item_enabled = 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, x + 16, y + WLH * (i + 1))
    }
  end
end

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

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

class Scene_Equip < Scene_Base
  #--------------------------------------------------------------------------
  # ● 常量
  #--------------------------------------------------------------------------
  EQUIP_TYPE_MAX = KGC::EquipExtension::EXTRA_EQUIP_KIND.size + 5
  #--------------------------------------------------------------------------
  # ● 对象初期化
  #     actor_index : 角色index
  #     equip_index : 装备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.visible = (kind == i)
    }
  end
  #--------------------------------------------------------------------------
  # ●更新状态窗口
  #--------------------------------------------------------------------------
  def update_item_windows
    kind = equip_kind(@equip_window.index)
    for i in 0...EQUIP_TYPE_MAX
      @item_windows.visible = (kind == i)
      @item_windows.update
    end
    @item_window = @item_windows[kind]
    @item_window.simple_refresh(@equip_window.index)
  end
  #--------------------------------------------------------------------------
  # ○取得装备栏类别
  #     index : 装备栏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



xfyx于2011-5-5 20:34补充以下内容:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 装备扩展 - KGC_EquipExtension ◆ VX ◆
#_/    ◇ Last update : 2008/02/10 ◇
#_/----------------------------------------------------------------------------
#_/  扩展装备相关
#_/============================================================================
#_/ 【菜单】≪扩展装备画面面≫ 请从下导入。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ Customize项目 - Customize ★
#==============================================================================

module KGC
module EquipExtension
  # ◆ 扩张的装备种类名称
  #  从前面的皆下去4, 5, 6, ...
  EXTRA_EQUIP_KIND = ["颈部", "背部", "手部", "足部", "辅助"]

  # ◆ 装备的顺序
  #  以这里设置的顺序接续在武器的下面
  #  ※ 装备个数最低为1,否则二刀流会出错
  #   ** 装备种类一览 **
  #  0..盾  1..头部  2..身体  3..装饰品  4~..↑所定义的种类
  EQUIP_TYPE = [0, 1, 4, 2, 5, 6, 7, 3, 8]

  # ◆ EP (装备点数) 制是否要使用
  USE_EP_SYSTEM = true
  # ◆ EP 的名称
  VOCAB_EP   = "负重力"
  # ◆ EP 的名称 (略)
  VOCAB_EP_A = "负重"
  # ◆ 是否在状态接口显示EP值
  SHOW_STATUS_EP = true

  # ◆ 装备预设 EP 消耗点数
  #  没有设定EP消耗点数的装备自动加上的点数
  DEFAULT_EP_COST   = 1
  # ◆ 当消耗 EP 值为 0 时隐藏
  HIDE_ZERO_EP_COST = true

  # ◆ EP 上限
  EP_MAX = 200
  # ◆ EP 下限
  EP_MIN = 1
  # ◆ 最大 EP 公式
  #   MaxHP..角色最大体力值
  #  计算后小数自动取整
  EP_CALC_EXP = "base_maxhp/2 * 0.03+3"

  # ◆ 消耗 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 = /<EP\s*(\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
      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
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
  #--------------------------------------------------------------------------
  # ○ 生成扩展装备的cache
  #--------------------------------------------------------------------------
  def create_equip_extension_cache
    @__ep_cost = KGC::EquipExtension::DEFAULT_EP_COST
    @__equip_type = []

    self.note.split(/[\r\n]+/).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
  #--------------------------------------------------------------------------
  # ○生成扩展装备的cache
  #--------------------------------------------------------------------------
  def create_equip_extension_cache
    super
    @__kind = -1

    self.note.split(/[\r\n]+/).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               # 装备类别
  #--------------------------------------------------------------------------
  # ● set up
  #     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
      result << (armor_id == nil ? nil : $data_armors[armor_id])
    }
    return result
  end
  #--------------------------------------------------------------------------
  # ●変更装备(指定对象)
  #     equip_type : 装备部位
  #     item       : 武器 or 防具 (如果空则装备解除)
  #     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 == item.id
        @extra_armor_id = 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)
    end
  end
  #--------------------------------------------------------------------------
  # ○ EP 条件清除判定
  #     equip_type : 装备部位
  #     item       : 武器 or 防具
  #--------------------------------------------------------------------------
  def ep_condition_clear?(equip_type, item)
    return true if item == nil  # 为空可以解除
    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
    #退避以前的装备品・参数
    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
    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 == 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 gauge色 1
  #--------------------------------------------------------------------------
  def ep_gauge_color1
    color = KGC::EquipExtension::EP_GAUGE_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ○取得EP gauge色 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 guage描画
  #     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 [email protected]_number
      name = armor_slot_name(@actor.equip_type)
      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, rect.x, rect.y)
      draw_equipment_ep_cost(@data, 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"]
  #--------------------------------------------------------------------------
  # ●光标后移一页
  #--------------------------------------------------------------------------
  def cursor_pagedown
    return if Input.repeat?(Input::R)
    super
  end
  #--------------------------------------------------------------------------
  # ● 光标前移一页
  #--------------------------------------------------------------------------
  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
        draw_item(i)
        @item_enabled = 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, x + 16, y + WLH * (i + 1))
    }
  end
end

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

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

class Scene_Equip < Scene_Base
  #--------------------------------------------------------------------------
  # ● 常量
  #--------------------------------------------------------------------------
  EQUIP_TYPE_MAX = KGC::EquipExtension::EXTRA_EQUIP_KIND.size + 5
  #--------------------------------------------------------------------------
  # ● 对象初期化
  #     actor_index : 角色index
  #     equip_index : 装备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.visible = (kind == i)
    }
  end
  #--------------------------------------------------------------------------
  # ●更新状态窗口
  #--------------------------------------------------------------------------
  def update_item_windows
    kind = equip_kind(@equip_window.index)
    for i in 0...EQUIP_TYPE_MAX
      @item_windows.visible = (kind == i)
      @item_windows.update
    end
    @item_window = @item_windows[kind]
    @item_window.simple_refresh(@equip_window.index)
  end
  #--------------------------------------------------------------------------
  # ○取得装备栏类别
  #     index : 装备栏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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-27 06:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表