#==============================================================================
#                       「進化スキル」(ACE) Ver.1.0
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇利用規約
#   この素材はフリーゲームにのみご利用頂けます。
#   シェアウェア、販売作品への利用は原則として禁止します。(詳細はブログ参照)
#   利用される場合はスクリプト作成者として「奈々」とURLを明記し
#   配布時にブログで利用規約の確認と、利用報告を行って下さい。
#
#------------------------------------------------------------------------------
#   
#   スキルのメモ欄にタグを記述することで、以下の機能を追加します。(複数可)
#   
#   <前提スキル n>:特定のスキルを習得していないとスキルがリストに現れません。
#           装備品やアイテムで自由にスキルを習得するゲーム向きです。
#   <削除スキル n>:特定のスキルをリストから消します。
#           上位互換のスキル習得時や、スキルのデメリットとして。
#   <進化スキル n>:両者の組み合わせです。
#           スキルの進化・派生を演出することができます。
#   
#==============================================================================

#==============================================================================
# ■ RPG::Skill
#------------------------------------------------------------------------------
# スキルのデータクラス。
#==============================================================================
class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ● 前提スキルの定義(追加定義)
  #--------------------------------------------------------------------------  
  def premise_skills
    list = []
    @note.scan(/<前提スキル\s?(\d*)>/) {|s|
      list.push($1.to_i) if $1
    }
    @note.scan(/<進化スキル\s?(\d*)>/) {|s|
      list.push($1.to_i) if $1
    }
    return list.uniq
  end
  #--------------------------------------------------------------------------
  # ● 削除スキルの定義(追加定義)
  #--------------------------------------------------------------------------  
  def deleted_skills
    list = []
    @note.scan(/<削除スキル\s?(\d*)>/) {|s|
      list.push($1.to_i) if $1
    }
    @note.scan(/<進化スキル\s?(\d*)>/) {|s|
      list.push($1.to_i) if $1
    }
    return list.uniq
  end
end


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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルオブジェクトの配列取得
  #--------------------------------------------------------------------------
  alias n7evo_skills skills
  def skills
    skill_evolve[0].sort.collect {|id| $data_skills[id] }
  end
  #--------------------------------------------------------------------------
  # ● 所持スキルの分類処理
  # 戻り値:[使用可能スキル,進化済スキル,未進化スキル]のスキルID配列
  #--------------------------------------------------------------------------
  def skill_evolve
    #各ローカル変数の準備
    list = []
    n7evo_skills.each{|skill| list.push(skill.id)}
    list.uniq!
    p list
    useable = []
    evolved = []
    unevolve = []
    flag = false
    
    #前提スキルの判定
    loop do
      flag = false
      list.each do |id|
        next if useable.include?(id)
        if $data_skills[id].premise_skills
          if $data_skills[id].premise_skills == ($data_skills[id].premise_skills & useable)
            useable.push(id)
            flag = true
          end
        else
          useable.push(id)
          flag = true
        end
      end
      break if flag == false
      p "loop"
    end
    p useable
    
    #未進化スキルの確定
    unevolve = list - useable
    
    #削除スキルの判定、進化済スキルの確定
    useable.each do |uid|
      $data_skills[uid].deleted_skills.each do |did|
        evolved.push(did) if useable.include?(did)
      end
    end
    
    #使用可能スキルの確定
    useable -= evolved
    p useable
    p evolved
    
    return [useable, evolved, unevolve]
  end
end