#==============================================================================
#                   「スキル採用属性」(ACE) ver1.0  by奈々
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#
#------------------------------------------------------------------------------
#
#   スキルの属性「通常攻撃」に対して変更を行うスクリプトです。
#   デフォルトはアクターの持つ攻撃属性「全て」から一番有効な属性が選ばれます。
#
#   ・採用属性
#   スキルのメモ欄に<採用属性 ID>と書いて設定します。(複数設定可)
#   このスキルの「通常攻撃」属性はアクターの持つ攻撃属性のうち
#   「採用属性になっているもの」から一番有効な属性が選ばれます。
#   
#   ・不採用属性
#   スキルのメモ欄に<不採用属性 ID>と書いて設定します。(複数設定可)
#   このスキルの「通常攻撃」属性はアクターの持つ攻撃属性のうち
#   「不採用属性以外」から一番有効な属性が選ばれます。
#
#   採用属性が1つでも設定されている場合、不採用属性は無効になります。
#   また例えばアクターの攻撃属性に採用属性が1つも無かった場合など
#   結果的に属性なしになった場合は0%扱いになります。(通常の属性なしは100%)
#
#==============================================================================
class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ● 採用属性を取得
  #--------------------------------------------------------------------------
  def accept_elements
    list = []
    @note.scan(/<採用属性\s?(\d*)>/) {|s| list.push($1.to_i) if $1}
    return list
  end
  #--------------------------------------------------------------------------
  # ● 不採用属性を取得
  #--------------------------------------------------------------------------
  def non_accept_elements
    list = []
    @note.scan(/<不採用属性\s?(\d*)>/) {|s| list.push($1.to_i) if $1}
    return list
  end
end

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ○ スキル/アイテムの属性修正値を取得(再定義)
  #--------------------------------------------------------------------------
  def item_element_rate(user, item)
    if item.damage.element_id < 0
      user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements, item)
    else
      element_rate(item.damage.element_id)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 属性の最大修正値の取得(再定義)
  #     elements : 属性 ID の配列
  #    与えられた属性の中で最も有効な修正値を返す
  #--------------------------------------------------------------------------
  def elements_max_rate(elements, item)
    if item.accept_elements != []
      elements &= item.accept_elements
    elsif item.non_accept_elements != []
      elements -= item.non_accept_elements
    end
    elements.inject([0.0]) {|r, i| r.push(element_rate(i)) }.max
  end
end