#==============================================================================
#                   「連撃発動スクリプト」(ACE) ver.4.1  by奈々
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#   その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
#   スキルを一定確率で連続発動させるスクリプトです。
#   
# ◇使い方
#   
#   データベース「スキル、アイテム」のメモ欄にタグを書きます。
#   
#   <連撃A n%>      n%の確率で連続発動(個別判定)
#   <連撃B n%>      n%の確率で連続発動(合算判定)
#   <連撃上限 n>    連撃の発動を最大n回までに制限
#   <連撃影響 m>    使用者の持つ連撃設定を追加する(mは任意の数値)
#   
#   連撃タグは複数設定でき、AとBで扱いが異なります。
#   <連撃A 60%><連撃A 50%>の場合、60%の判定と50%の判定が行われます。
#   <連撃B 60%><連撃B 50%>の場合、100%の判定と10%の判定が行われます。
#   <連撃A 60%><連撃B 30%><連撃B 20%>の場合、60%の判定と50%の判定が行われます。
#   
#   <連撃上限 n>のタグを書いたスキルは
#   最大でもn回までしか連撃が発動しないようになります。
#   複数の上限が設定された場合、ステートの設定が優先され
#   それ以外やステート同士の場合は、より大きい上限が優先されます。
#   
#   
#   データベース「アクター、職業、ステート、エネミー、装備品」のメモ欄にタグを書きます。
#   それぞれ、<連撃影響 m>が設定されているスキルに対して連撃設定を追加します。
#   
#   <連撃A n% m>    <連撃影響 m>が設定されているスキルに対して<連撃A n%>を追加
#   <連撃B n% m>    <連撃影響 m>が設定されているスキルに対して<連撃A n%>を追加
#   <連撃上限 n m>  <連撃影響 m>が設定されているスキルに対して<連撃上限 n>を追加
#   
#   
#   因みに特徴の攻撃回数追加とは別物です。
#   同時に使った場合、単純な+ではなく、連撃回数*攻撃回数となります。
#
#==============================================================================

#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用
  #--------------------------------------------------------------------------
  alias nana_use_item use_item
  def use_item
    item = @subject.current_action.item
    repeats_back = item.repeats
    value = 0
    total = 0
    
    #連撃Aの判定
    #スキル/アイテムのタグ
    item.note.gsub(/<連撃A[ ]*(\d+)%>/){
      value = $1.to_i
      total += 1 if value >= (rand(100) + 1)
    }
    #装備品のタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.equips.each {|equip|
        next unless equip
        equip.note.gsub(/<連撃A[ ]*(\d+)%[ ]*#{type}>/){
          value = $1.to_i
          total += 1 if value >= (rand(100) + 1)
        }
      }
    } if @subject.actor?
    #アクターのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.actor.note.gsub(/<連撃A[ ]*(\d+)%[ ]*#{type}>/){
        value = $1.to_i
        total += 1 if value >= (rand(100) + 1)
      }
    } if @subject.actor?
    #クラスのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.class.note.gsub(/<連撃A[ ]*(\d+)%[ ]*#{type}>/){
        value = $1.to_i
        total += 1 if value >= (rand(100) + 1)
      }
    } if @subject.actor?
    #エネミーのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.enemy.note.gsub(/<連撃A[ ]*(\d+)%[ ]*#{type}>/){
        value = $1.to_i
        total += 1 if value >= (rand(100) + 1)
      }
    } if @subject.enemy?
    #ステートのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.states.each {|state|
        next unless state
        state.note.gsub(/<連撃A[ ]*(\d+)%[ ]*#{type}>/){
          value = $1.to_i
          total += 1 if value >= (rand(100) + 1)
        }
      }
    }

    #連撃Bの判定
    value = 0
    #スキル/アイテムのタグ
    item.note.gsub(/<連撃B[ ]*(\d+)%>/){
      value += $1.to_i
    }
    #装備品のタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.equips.each {|equip|
        next unless equip
        equip.note.gsub(/<連撃B[ ]*(\d+)%[ ]*#{type}>/){
          value += $1.to_i
        }
      }
    } if @subject.actor?
    #アクターのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.actor.note.gsub(/<連撃B[ ]*(\d+)%[ ]*#{type}>/){
        value += $1.to_i
      }
    } if @subject.actor?
    #クラスのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.class.note.gsub(/<連撃B[ ]*(\d+)%[ ]*#{type}>/){
        value += $1.to_i
      }
    } if @subject.actor?
    #エネミーのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.enemy.note.gsub(/<連撃B[ ]*(\d+)%[ ]*#{type}>/){
        value += $1.to_i
      }
    } if @subject.enemy?
    #ステートのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.states.each {|state|
        next unless state
        state.note.gsub(/<連撃B[ ]*(\d+)%[ ]*#{type}>/){
          value += $1.to_i
        }
      }
    }
    
    total += (value * 0.01).truncate 
    total += 1 if (value % 100) >= (rand(100) + 1)
    
    #連撃上限の判定
    value = -1
    #ステートのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.states.each {|state|
        next unless state
        state.note.gsub(/<連撃上限[ ]*(\d+)[ ]*#{type}>/){
          value = [value, $1.to_i].max
        }
      }
    }
    #スキル/アイテムのタグ
    item.note.gsub(/<連撃上限[ ]*(\d+)>/){
      value = [value, $1.to_i].max
    } if value == -1
    #装備品のタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.equips.each {|equip|
        next unless equip
        equip.note.gsub(/<連撃上限[ ]*(\d+)[ ]*#{type}>/){
          value = [value, $1.to_i].max
        }
      }
    } if @subject.actor? && value == -1
    #アクターのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.actor.note.gsub(/<連撃上限[ ]*(\d+)[ ]*#{type}>/){
        value = [value, $1.to_i].max
      }
    } if @subject.actor? && value == -1
    #クラスのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.class.note.gsub(/<連撃上限[ ]*(\d+)[ ]*#{type}>/){
        value = [value, $1.to_i].max
      }
    } if @subject.actor? && value == -1
    #エネミーのタグ
    item.note.gsub(/<連撃影響[ ]*(\d+)>/){
      type = $1.to_i
      @subject.enemy.note.gsub(/<連撃上限[ ]*(\d+)[ ]*#{type}>/){
        value = [value, $1.to_i].max
      }
    } if @subject.enemy? && value == -1
    
    total = [total, value].min if value != -1
    item.repeats += total
    nana_use_item
    item.repeats = repeats_back
  end
end