#==============================================================================
#                   「薬の知識、拡張スクリプト」(ACE) ver3.0  by奈々
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#
#------------------------------------------------------------------------------
#
#   「薬の知識」が影響を与える要素を増やします。
#   初期設定で各項目のtrue/falseを切り替えてください。
#   trueにした項目は、本来の数値に「薬の知識」の数値が乗算されます。
#   この設定は全てのアクターに共通して適用されます。
#
#   アクター・職業・ステート・装備のメモ欄に
#   <薬の知識 ダメージ> <薬の知識 ステート付与率> <薬の知識 ステート解除率>
#   <薬の知識 HP回復率> <薬の知識 MP回復率> <薬の知識 TP回復率>
#   と入れると個別のアクターに対して設定可能です。
#
#   また、アイテムのメモ欄に<薬の知識無効>と入れると
#   そのアイテムは「薬の知識」の影響を受けなくなります。
#
#==============================================================================
# ◇初期設定(falseをtrueにすると全てのアクターで適用される)
module NanaSeven

  PHA_DAMAGE = false           #アイテムによるダメージ(回復や吸収含む)

  PHA_ADD_STATE = false        #アイテムによるステート付与率

  PHA_REMOVE_STATE = false     #アイテムによるステート解除率

  PHA_RECOVER_HP = false       #アイテムによるHP回復率

  PHA_RECOVER_MP = false       #アイテムによるMP回復率

  PHA_RECOVER_TP = false       #アイテムによるTP回復率

end
#
#==============================================================================

#==============================================================================
#
#   内蔵型MDVリッパー
#
#------------------------------------------------------------------------------
unless (NanaSeven::MDV_RIPPER rescue false) # 他のMDVリッパーの検出
module NanaSeven
  MDV_RIPPER = true
end  
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● ダメージ計算(極力再定義しない)
  #--------------------------------------------------------------------------
  def make_damage_value(user, item)
    value = make_damage_value_1(user, item)
    value = make_damage_value_2(user, item, value)
    value = make_damage_value_3(user, item, value)
    value = make_damage_value_4(user, item, value)
    value = make_damage_value_5(user, item, value)
    value = make_damage_value_6(user, item, value)
    value = make_damage_value_7(user, item, value)
    value = make_damage_value_8(user, item, value)
    value = make_damage_value_new(user, item, value)
    @result.make_damage(value.to_i, item)
  end
  #--------------------------------------------------------------------------
  # ● 再定義用下位メソッド群
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● *ダメージ計算式
  #--------------------------------------------------------------------------
  def make_damage_value_1(user, item)
    value = item.damage.eval(user, self, $game_variables)
    return value
  end
  #--------------------------------------------------------------------------
  # ● *属性有効度
  #--------------------------------------------------------------------------
  def make_damage_value_2(user, item, value)
    value *= item_element_rate(user, item)
    return value
  end
  #--------------------------------------------------------------------------
  # ● *物理ダメージ率
  #--------------------------------------------------------------------------
  def make_damage_value_3(user, item, value)
    value *= pdr if item.physical?
    return value
  end
  #--------------------------------------------------------------------------
  # ● *魔法ダメージ率
  #--------------------------------------------------------------------------
  def make_damage_value_4(user, item, value)
    value *= mdr if item.magical?
    return value
  end
  #--------------------------------------------------------------------------
  # ● *回復効果率
  #--------------------------------------------------------------------------
  def make_damage_value_5(user, item, value)
    value *= rec if item.damage.recover?
    return value
  end
  #--------------------------------------------------------------------------
  # ● *クリティカル
  #--------------------------------------------------------------------------
  def make_damage_value_6(user, item, value)
    value = apply_critical(value) if @result.critical
    return value
  end
  #--------------------------------------------------------------------------
  # ● 分散度
  #--------------------------------------------------------------------------
  def make_damage_value_7(user, item, value)
    value = apply_variance(value, item.damage.variance)
    return value
  end
  #--------------------------------------------------------------------------
  # ● 防御修正
  #--------------------------------------------------------------------------
  def make_damage_value_8(user, item, value)
    value = apply_guard(value)
    return value
  end
  #--------------------------------------------------------------------------
  # ● エイリアス用新規メソッド
  #--------------------------------------------------------------------------
  def make_damage_value_new(user, item, value)
    return value
  end
end
end
#------------------------------------------------------------------------------
#
#   ここまでMDVリッパー
#
#==============================================================================
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● ダメージと回復  *回復効果率
  #--------------------------------------------------------------------------
  alias pha_make_damage_value_5 make_damage_value_5
  def make_damage_value_5(user, item, value)
    value = pha_make_damage_value_5(user, item, value)
    
    value *= user.pha if item.is_a?(RPG::Item) &&
    (NanaSeven::PHA_DAMAGE == true || user.pha_damege?) &&
    ! item.note.include?("<薬の知識無効>")

    return value
  end
  #--------------------------------------------------------------------------
  # ● 使用効果[HP 回復](再定義)
  #--------------------------------------------------------------------------
  def item_effect_recover_hp(user, item, effect)
    value = (mhp * effect.value1 + effect.value2) * rec
    value *= user.pha if item.is_a?(RPG::Item) &&
    (NanaSeven::PHA_RECOVER_HP == true || user.pha_recover_hp?) &&
    ! item.note.include?("<薬の知識無効>")
    value = value.to_i
    @result.hp_damage -= value
    @result.success = true
    self.hp += value
  end
  #--------------------------------------------------------------------------
  # ● 使用効果[MP 回復](再定義)
  #--------------------------------------------------------------------------
  def item_effect_recover_mp(user, item, effect)
    value = (mmp * effect.value1 + effect.value2) * rec
    value *= user.pha if item.is_a?(RPG::Item) &&
    (NanaSeven::PHA_RECOVER_MP == true || user.pha_recover_mp?) &&
    ! item.note.include?("<薬の知識無効>")
    value = value.to_i
    @result.mp_damage -= value
    @result.success = true if value != 0
    self.mp += value
  end
  #--------------------------------------------------------------------------
  # ● 使用効果[TP 増加](再定義)
  #--------------------------------------------------------------------------
  def item_effect_gain_tp(user, item, effect)
    value = effect.value1.to_i
    value *= user.pha if item.is_a?(RPG::Item) &&
    (NanaSeven::PHA_RECOVER_TP == true || user.pha_recover_tp?) &&
    ! item.note.include?("<薬の知識無効>")
    value = value.to_i
    @result.tp_damage -= value
    @result.success = true if value != 0
    self.tp += value
  end

  #--------------------------------------------------------------------------
  # ● 使用効果[ステート付加]:通常攻撃(再定義)
  #--------------------------------------------------------------------------
  def item_effect_add_state_attack(user, item, effect)
    user.atk_states.each do |state_id|
      chance = effect.value1
      chance *= state_rate(state_id)
      chance *= user.atk_states_rate(state_id)
      chance *= luk_effect_rate(user)
      chance *= user.pha if item.is_a?(RPG::Item) &&
      (NanaSeven::PHA_ADD_STATE == true || user.pha_add_state?) &&
      ! item.note.include?("<薬の知識無効>")
      if rand < chance
        add_state(state_id)
        @result.success = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 使用効果[ステート付加]:通常(再定義)
  #--------------------------------------------------------------------------
  def item_effect_add_state_normal(user, item, effect)
    chance = effect.value1
    chance *= state_rate(effect.data_id) if opposite?(user)
    chance *= luk_effect_rate(user)      if opposite?(user)
    chance *= user.pha if item.is_a?(RPG::Item) &&
    (NanaSeven::PHA_ADD_STATE == true || user.pha_add_state?) &&
    ! item.note.include?("<薬の知識無効>")
    if rand < chance
      add_state(effect.data_id)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 使用効果[ステート解除](再定義)
  #--------------------------------------------------------------------------
  def item_effect_remove_state(user, item, effect)
    chance = effect.value1
    chance *= user.pha if item.is_a?(RPG::Item) &&
    (NanaSeven::PHA_REMOVE_STATE == true || user.pha_remove_state?) &&
    ! item.note.include?("<薬の知識無効>")
    if rand < chance
      remove_state(effect.data_id)
      @result.success = true
    end
  end
end


class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● 薬の知識(ダメージ)
  #--------------------------------------------------------------------------
  def pha_damege?
    @note.include?("<薬の知識 ダメージ>")
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(ステート付与率)
  #--------------------------------------------------------------------------
  def pha_add_state?
    @note.include?("<薬の知識 ステート付与率>")
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(ステート解除率)
  #--------------------------------------------------------------------------
  def pha_remove_state?
    @note.include?("<薬の知識 ステート解除率>")
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(HP回復率)
  #--------------------------------------------------------------------------
  def pha_recover_hp?
    @note.include?("<薬の知識 HP回復率>")
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(MP回復率)
  #--------------------------------------------------------------------------
  def pha_recover_mp?
    @note.include?("<薬の知識 MP回復率>")
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(TP回復率)
  #--------------------------------------------------------------------------
  def pha_recover_tp?
    @note.include?("<薬の知識 TP回復率>")
  end
end

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 薬の知識(ダメージ)
  #--------------------------------------------------------------------------
  def pha_damege?
    return false unless self.is_a?(Game_Actor)
    self.actor.pha_damege? ||
    self.class.pha_damege? ||
    self.equips.any? do |equip|
      next unless equip
      equip.pha_damege?
    end ||
    self.states.any? do |state|
      next unless state
      state.pha_damege?
    end
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(ステート付与率)
  #--------------------------------------------------------------------------
  def pha_add_state?
    return false unless self.is_a?(Game_Actor)
    self.actor.pha_add_state? ||
    self.class.pha_add_state? ||
    self.equips.any? do |equip|
      next unless equip
      equip.pha_add_state?
    end ||
    self.states.any? do |state|
      next unless state
      state.pha_add_state?
    end
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(ステート解除率)
  #--------------------------------------------------------------------------
  def pha_remove_state?
    return false unless self.is_a?(Game_Actor)
    self.actor.pha_remove_state? ||
    self.class.pha_remove_state? ||
    self.equips.any? do |equip|
      next unless equip
      equip.pha_remove_state?
    end ||
    self.states.any? do |state|
      next unless state
      state.pha_remove_state?
    end
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(HP回復率)
  #--------------------------------------------------------------------------
  def pha_recover_hp?
    return false unless self.is_a?(Game_Actor)
    self.actor.pha_recover_hp? ||
    self.class.pha_recover_hp? ||
    self.equips.any? do |equip|
      next unless equip
      equip.pha_recover_hp?
    end ||
    self.states.any? do |state|
      next unless state
      state.pha_recover_hp?
    end
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(MP回復率)
  #--------------------------------------------------------------------------
  def pha_recover_mp?
    return false unless self.is_a?(Game_Actor)
    self.actor.pha_recover_mp? ||
    self.class.pha_recover_mp? ||
    self.equips.any? do |equip|
      next unless equip
      equip.pha_recover_mp?
    end ||
    self.states.any? do |state|
      next unless state
      state.pha_recover_mp?
    end
  end
  #--------------------------------------------------------------------------
  # ● 薬の知識(TP回復率)
  #--------------------------------------------------------------------------
  def pha_recover_tp?
    return false unless self.is_a?(Game_Actor)
    self.actor.pha_recover_tp? ||
    self.class.pha_recover_tp? ||
    self.equips.any? do |equip|
      next unless equip
      equip.pha_recover_tp?
    end ||
    self.states.any? do |state|
      next unless state
      state.pha_recover_tp?
    end
  end
end