#==============================================================================
# ■ 防具タイプで装備拡張 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
|