#==============================================================================
#                   「装備スロットカスタム」(ACE) ver1.0
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#   その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
#   装備スロットを自由に設定することが出来ます。
#   アクター毎や職業別に指定が可能で
#   また装備品やステートによって変化させることも出来ます。
#   
#   これによって特殊な装備のキャラクターを作成することや
#   オリジナルの装備システムを設定することが可能です。
#   ブログに作例を紹介しているので参考にして下さい。
#   
#   使い方は、初期設定で共通のスロットを設定します。
#   またデータベースのメモ欄に
#   <装備スロット [0,1,2,3,4]>
#   <二刀流スロット [0,0,2,3,4]>
#   とタグを入れることで、装備スロットを指定できます。
#   
#   設定の優先順位は、ステート・装備品・アクター・職業の順番です。
#   装備スロットが変化する=装備品が外れる可能性があるので
#   特にステートと装備品でのスロット変更には注意が必要です。
#
#==============================================================================

#◇初期設定
module Nana
module ESC
  
  #基本の装備スロットの設定
  # 0:武器  1:盾  2:頭  3:身体  4:装飾品
  NORMAL = [0, 1, 2, 3, 4]
  
  #二刀流の装備スロットの設定
  # 0:武器  1:盾  2:頭  3:身体  4:装飾品
  DUAL = [0, 0, 2, 3, 4]
  
end
end

#==============================================================================
class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● 装備スロット指定
  #--------------------------------------------------------------------------
  def equip_slots_n
    @note.scan(/<装備スロット\s*\[(.+)\]\s*>/)
    list = []
    $1.split(/\s*,\s*/).each{|s| list.push(s.to_i)} if $1
    return list != [] ? list : nil
  end
  #--------------------------------------------------------------------------
  # ● 二刀流スロット指定
  #--------------------------------------------------------------------------
  def equip_slots_d
    @note.scan(/<二刀流スロット\s*\[(.+?)\]\s*>/)
    list = []
    $1.split(/\s*,\s*/).each{|s| list.push(s.to_i)} if $1
    return list != [] ? list : nil
  end
end

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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 装備スロット指定を取得
  #--------------------------------------------------------------------------
  def equip_slots_n
    self.states.each do |state|
      next unless state && state.equip_slots_n
      return state.equip_slots_n
    end
    self.equips.each do |equip|
      next unless equip && equip.equip_slots_n
      return equip.equip_slots_n
    end
    return self.actor.equip_slots_n if self.actor.equip_slots_n
    return self.class.equip_slots_n if self.class.equip_slots_n
    return Nana::ESC::NORMAL
  end
  #--------------------------------------------------------------------------
  # ● 二刀流スロット指定を取得
  #--------------------------------------------------------------------------
  def equip_slots_d
    self.states.each do |state|
      next unless state && state.equip_slots_d
      return state.equip_slots_d
    end
    self.equips.each do |equip|
      next unless equip && equip.equip_slots_d
      return equip.equip_slots_d
    end
    return self.actor.equip_slots_d if self.actor.equip_slots_d
    return self.class.equip_slots_d if self.class.equip_slots_d
    return Nana::ESC::DUAL
  end
  #--------------------------------------------------------------------------
  # ● 装備スロットの配列を取得
  #--------------------------------------------------------------------------
  def equip_slots
    return equip_slots_d if dual_wield?       # 二刀流
    return equip_slots_n                      # 通常
  end
  #--------------------------------------------------------------------------
  # ● 装備タイプからスロット ID のリストに変換
  #--------------------------------------------------------------------------
  def slot_list(etype_id)
    result = []
    equip_slots.each_with_index {|e, i| result.push(i) if e == etype_id }
    result
  end
end

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

class Window_EquipSlot < Window_Selectable
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    create_contents
    refresh
  end
end