#==============================================================================
#                     「装備条件の追加」(ACE) Ver.1.2
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   スクリプトの改変は自由に行って頂いて構いませんが
#   その場合も元のスクリプトの作成者として名前を載せて下さい。
#   また配布前に必ず、ブログにある利用規約を確認して下さい。
#
#------------------------------------------------------------------------------
#   
#   アイテムの装備条件に、アクター、クラスの指定や
#   一定以上のステータスを必要とする設定を追加できます。
#   これにより武器防具タイプの簡略化や、より装備品の特色を出せます。
#   
#   使い方は、アイテムのメモ欄にタグを記述します。
#   
#   <装備条件 アクター n>    n番のアクター専用装備
#   <装備条件 クラス n>      n番のクラス専用装備
#   
#   アクターとクラスのタグは、複数設定が可能です。
#   
#   <装備条件 level n>       レベルがn以上の場合、装備可能
#   
#   ステータスのタグは、levelの他に
#   mhp,mmp,atk,def,mat,mdf,agi,lukが指定可能です。
#   タグは各ステータス毎に1つだけ設定可能です。
#   
#   通常の武器防具タイプの条件に「加えて」
#   設定されているアクター、クラス、各ステータスの
#   全ての装備条件を満たした場合、装備可能になります。
#   
#==============================================================================
class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 装備可能判定(再定義)
  #--------------------------------------------------------------------------
  def equippable?(item)
    return false unless item.is_a?(RPG::EquipItem)
    return false if equip_type_sealed?(item.etype_id)
    
    return false unless equip_actorid_ok?(item)
    return false unless equip_classid_ok?(item)
    return false unless equip_status_ok?(item)
    
    return equip_wtype_ok?(item.wtype_id) if item.is_a?(RPG::Weapon)
    return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor)
    return false
  end
  #--------------------------------------------------------------------------
  # ● 装備条件(アクター)
  #--------------------------------------------------------------------------
  def equip_actorid_ok?(item)
    list = []
    item.note.scan(/\<\s*装備条件\s*アクター\s*(\d+)\s*\>/){|s| list.push($1.to_i)}
    return list.empty? ? true : list.include?(self.id)
  end
  #--------------------------------------------------------------------------
  # ● 装備条件(クラス)
  #--------------------------------------------------------------------------
  def equip_classid_ok?(item)
    list = []
    item.note.scan(/\<\s*装備条件\s*クラス\s*(\d+)\s*\>/){|s| list.push($1.to_i)}
    return list.empty? ? true : list.include?(self.class.id)
  end
  #--------------------------------------------------------------------------
  # ● 装備条件(ステータス)
  #--------------------------------------------------------------------------
  def equip_status_ok?(item)
    return false if item.note[/\<\s*装備条件\s*[Ll][Ee][Vv][Ee][Ll]\s*(\d+)\s*\>/] && $1.to_i >= self.level
    return false if item.note[/\<\s*装備条件\s*[Mm][Hh][Pp]\s*(\d+)\s*\>/] && $1.to_i >= self.mhp
    return false if item.note[/\<\s*装備条件\s*[Mm][Mm][Pp]\s*(\d+)\s*\>/] && $1.to_i >= self.mmp
    return false if item.note[/\<\s*装備条件\s*[Aa][Tt][Kk]\s*(\d+)\s*\>/] && $1.to_i >= self.atk
    return false if item.note[/\<\s*装備条件\s*[Dd][Ee][Ff]\s*(\d+)\s*\>/] && $1.to_i >= self.def
    return false if item.note[/\<\s*装備条件\s*[Mm][Aa][Tt]\s*(\d+)\s*\>/] && $1.to_i >= self.mat
    return false if item.note[/\<\s*装備条件\s*[Mm][Dd][Ff]\s*(\d+)\s*\>/] && $1.to_i >= self.mdf
    return false if item.note[/\<\s*装備条件\s*[Aa][Gg][Ii]\s*(\d+)\s*\>/] && $1.to_i >= self.agi
    return false if item.note[/\<\s*装備条件\s*[Ll][Uu][Kk]\s*(\d+)\s*\>/] && $1.to_i >= self.luk
    return true
  end
end