防具タイプで拡張装備


防具タイプを利用して装備拡張を行います。 変更点 2012:01:15 ・最強装備に対応
#==============================================================================
# ■ 防具タイプで装備拡張 By 貪藻矢射妥←
#------------------------------------------------------------------------------
# 防具タイプを利用して装備拡張を行います。
# 
#==============================================================================
# 更新っぽいもの
# 2012:01:15
# ・最強装備に対応

$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["Equip_Extend"] = true

#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
# の内部で使用され、Game_Party クラス($game_party)からも参照されます。
#==============================================================================

module Equip_Extend
  # ◆ 拡張装備タイプ
  # [[拡張後の装備タイプ, 拡張したい装備タイプ], ...]
  # 防具タイプ[足]:5を作成し、装飾品に関連付けたい場合は [5, 4] にする
  INNER_ETYPE = [[5, 3], [6, 4]]
  
  # ◆ 拡張防具タイプ
  # INNER_ETYPE で設定した分設定してください。
  ATYPE_EXTEND = {
                  INNER_ETYPE[0] => [[ 9, 10, 11], [13, 14, 15]], 
                  INNER_ETYPE[1] => [[19, 20],     [17, 18]    ], 
                 }
end

class Game_Actor < Game_Battler
  include Equip_Extend
  #--------------------------------------------------------------------------
  # ● 装備スロットの配列を取得
  #--------------------------------------------------------------------------
  def equip_slots
    return [0,0,2,5,3,4,4,6] if dual_wield?       # 二刀流
    return [0,1,2,5,3,4,4,6]                      # 通常
  end
  
  #--------------------------------------------------------------------------
  # ● 装備できない装備品を外す
  #     item_gain : 外した装備品をパーティに戻す
  #--------------------------------------------------------------------------
  def release_unequippable_items(item_gain = true)
    @equips.each_with_index do |item, i|
      if equip_slots[i] > 4
        for cnt in INNER_ETYPE
          if equip_slots[i] == cnt[0]
            if !equippable?(item.object) || item.object.etype_id != cnt[1]
              trade_item_with_party(nil, item.object) if item_gain
              item.object = nil
            end
          end
        end
      else
        if !equippable?(item.object) || item.object.etype_id != equip_slots[i]
          trade_item_with_party(nil, item.object) if item_gain
          item.object = nil
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 最強装備
  #--------------------------------------------------------------------------
  def optimize_equipments
    clear_equipments
    equip_slots.size.times do |i|
      next if !equip_change_ok?(i)
      if equip_slots[i] > 4
        for cnt in INNER_ETYPE
          if equip_slots[i] == cnt[0]
            items = $game_party.equip_items.select do |item|
              item.etype_id == cnt[1] &&
              equippable?(item) && item.performance >= 0 &&
              (item.is_a?(RPG::Armor) && 
              ATYPE_EXTEND[cnt][0].include?(item.atype_id))
            end
          end
        end
      else
        items = $game_party.equip_items.select do |item|
          item.etype_id == equip_slots[i] &&
          equippable?(item) && item.performance >= 0
        end
      end
      change_equip(i, items.max_by {|item| item.performance })
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備の変更
  #     slot_id : 装備スロット ID
  #     item    : 武器/防具(nil なら装備解除)
  #--------------------------------------------------------------------------
  def change_equip(slot_id, item)
    return unless trade_item_with_party(item, equips[slot_id])
    
    if equip_slots[slot_id] > 4
      for cnt in INNER_ETYPE
        if item && item.etype_id == cnt[1]
          return if item && equip_slots[slot_id] != cnt[0]
        end
      end
    else
      return if item && equip_slots[slot_id] != item.etype_id
    end
    @equips[slot_id].object = item
    refresh
  end
end

#==============================================================================
# ■ Window_EquipSlot
#------------------------------------------------------------------------------
#  装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
#==============================================================================

class Window_EquipSlot < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 表示行数の取得
  #--------------------------------------------------------------------------
  def visible_line_number
    return 5 + 3
  end
end

#==============================================================================
# ■ Window_EquipItem
#------------------------------------------------------------------------------
#  装備画面で、装備変更の候補となるアイテムの一覧を表示するウィンドウです。
#==============================================================================

class Window_EquipItem < Window_ItemList
  include Equip_Extend
  #--------------------------------------------------------------------------
  # ● アイテムをリストに含めるかどうか
  #--------------------------------------------------------------------------
  def include?(item)
    return true if item == nil
    return false unless item.is_a?(RPG::EquipItem)
    return false if @slot_id < 0
    
    if item.is_a?(RPG::Armor)
      for cnt in INNER_ETYPE
        if @actor.equip_slots[@slot_id] == cnt[0]
          return false if ATYPE_EXTEND[cnt][1].include?(item.atype_id)
          return true if ATYPE_EXTEND[cnt][0].include?(item.atype_id) && @actor.equippable?(item)
        end
        if @actor.equip_slots[@slot_id] == cnt[1]
          return true if ATYPE_EXTEND[cnt][1].include?(item.atype_id) && @actor.equippable?(item)
          return false if ATYPE_EXTEND[cnt][0].include?(item.atype_id)
        end
      end
    end
    return false if item.etype_id != @actor.equip_slots[@slot_id]
    return @actor.equippable?(item)
  end
end
薄赤色の部分にて拡張元の装備タイプと拡張先の防具タイプのセットを配列で設定します。 薄橙色の部分にて拡張元の装備アイテムと拡張先の装備アイテムの防具タイプの一覧を設定します。 薄緑色の部分にて拡張したタイプの設定を行います。 例えば[身体]を拡張して[インナー]を作成したい場合は以下のようにしてみます。 で、こんな感じになります。

戻る