#==============================================================================
#                        「HP/MPプール」(ACE) Ver.1.0
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   スクリプトの改変は自由に行って頂いて構いませんが
#   その場合も元のスクリプトの作成者として名前を載せて下さい。
#   また配布前に必ず、ブログにある利用規約を確認して下さい。
#
#------------------------------------------------------------------------------
#   
#   デフォルトの仕様では最大HP/MPを超えたHP/MPは破棄され
#   最大HP/MPが増えた場合でも現在HP/MPはそのままでした。
#   
#   このため、例えば最大HP/MPを減らす装備を付け外しすると
#   HP/MPが減ってしまうため、特に装備には使いにくい仕様でした。
#   このスクリプトではそれを改善します。
#   
#   最大HP/MPが下がり現在HP/MPを下回った場合
#   その差を一時的にプール(保管)しておきます。
#   逆に最大HP/MPが上がったときに、プールした分が補填されます。
#   
#   初期設定でプールしたHP/MPのリセットを設定できます。
#   また、イベントコマンドのスクリプトで
#   「n7_reset_pool」と入れると手動リセットができます。
#   プールが悪用できそうな場合は、適度リセットを掛けてください。
#   
#==============================================================================
#初期設定
module N7_POOL
  
  #プールしたHP/MPのリセットタイミング(true / false)
  
  #戦闘に入ったとき
  BATTLE = false
  
  #メニューを閉じたとき
  MENU = false
  
  #イベントコマンド「全回復」をしたとき
  EVENT = false
  
end
#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  バトラーを扱う基本のクラスです。主に能力値計算のメソッドを含んでいます。こ
# のクラスは Game_Battler クラスのスーパークラスとして使用されます。
#==============================================================================

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :pooled_hp                # プールHP
  attr_accessor :pooled_mp                # プールMP
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias n7_pool_initialize initialize
  def initialize
    n7_pool_initialize
    reset_pool
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    state_resist_set.each {|state_id| erase_state(state_id) }
    
    pool_hp_mp
    
    @hp = [[@hp, mhp].min, 0].max
    @mp = [[@mp, mmp].min, 0].max
    @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
  end
  #--------------------------------------------------------------------------
  # ● HP/MPのプール
  #--------------------------------------------------------------------------
  def pool_hp_mp
    gap = mhp - @hp
    if gap > 0
      if @pooled_hp > gap
        @pooled_hp -= gap
        @hp = mhp
      else
        @hp += @pooled_hp
        @pooled_hp = 0
      end
    else
      @pooled_hp -= gap
    end

    gap = mmp - @mp
    if gap > 0
      if @pooled_mp > gap
        @pooled_mp -= gap
        @mp = mmp
      else
        @mp += @pooled_mp
        @pooled_mp = 0
      end
    else
      @pooled_mp -= gap
    end
  end
  #--------------------------------------------------------------------------
  # ● プールのリセット
  #--------------------------------------------------------------------------
  def reset_pool
    @pooled_hp = 0
    @pooled_mp = 0    
  end
  #--------------------------------------------------------------------------
  # ● 全回復
  #--------------------------------------------------------------------------
  alias n7_pool_recover_all recover_all
  def recover_all
    n7_pool_recover_all
    reset_pool if N7_POOL::EVENT
  end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● プールの手動リセット
  #--------------------------------------------------------------------------
  def n7_reset_pool
    $game_party.members.each do |actor|
      actor.reset_pool
    end
    $game_troop.members.each do |enemy|
      enemy.reset_pool
    end    
  end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始後処理
  #--------------------------------------------------------------------------
  alias n7_pool_post_start post_start
  def post_start
    n7_pool_post_start
    if N7_POOL::BATTLE
      $game_party.members.each do |actor|
        actor.reset_pool
      end
    end
  end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  メニュー画面の処理を行うクラスです。
#==============================================================================

class Scene_Menu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 終了前処理
  #--------------------------------------------------------------------------
  alias n7_pool_pre_terminate pre_terminate
  def pre_terminate
    n7_pool_pre_terminate
    if N7_POOL::MENU
      $game_party.members.each do |actor|
        actor.reset_pool
      end
    end
  end
end