#==============================================================================
# ■ Max_Recover vol.1.00
#------------------------------------------------------------------------------
# 使用可能なアイテム、スキルを全て使う機能を追加
# 08/02/08
#==============================================================================
class Scene_Skill
  #--------------------------------------------------------------------------
  # ■ Max回復するまでMP消費
  #--------------------------------------------------------------------------
  def max_skill_lose(target)
    user_mp = @actor.sp
    lose_mp = 0
    while user_mp >= @skill.sp_cost
      used = false
      for i in target
        used |= i.skill_effect(@actor, @skill)
      end
      unless used
        break
      end
      user_mp -= @skill.sp_cost
      lose_mp += @skill.sp_cost
    end
    if lose_mp > 0
      # スキルの使用時 SE を演奏
      $game_system.se_play(@skill.menu_se)
    else
      # ブザー SE を演奏
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # SP 消費
    @actor.sp -= lose_mp
    # 各ウィンドウの内容を再作成
    @status_window.refresh
    @skill_window.refresh
    @target_window.refresh
    # 全滅の場合
    if $game_party.all_dead?
      # ゲームオーバー画面に切り替え
      $scene = Scene_Gameover.new
      return
    end
    # コモンイベント ID が有効の場合
    if @skill.common_event_id > 0
      # コモンイベント呼び出し予約
      $game_temp.common_event_id = @skill.common_event_id
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    return
  end
  #--------------------------------------------------------------------------
  # ■ [A]ボタンが押された場合
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_skill_update_target update_target;end
  def update_target
    # A ボタンが押された場合
    if Input.trigger?(Input::A)
      # SP 切れなどで使用できなくなった場合
      unless @actor.skill_can_use?(@skill.id)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # ターゲットが全体の場合
      if @target_window.index == -1
        # □パーティ全体にアイテムの使用効果を適用
        max_skill_lose($game_party.actors)
      end
      # ターゲットが使用者の場合
      if @target_window.index <= -2
        # ターゲットのアクターにアイテムの使用効果を適用
        max_skill_lose([$game_party.actors[@target_window.index + 10]])
      end
      # ターゲットが単体の場合
      if @target_window.index >= 0
        # ターゲットのアクターにアイテムの使用効果を適用
        max_skill_lose([$game_party.actors[@target_window.index]])
      end
    end
    # □元の処理を呼び出し
    hidesp_skill_update_target
  end
end
#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  #--------------------------------------------------------------------------
  # ■ Max回復するまでアイテム消費
  #--------------------------------------------------------------------------
  def max_item_lose(target)
    item_n = $game_party.item_number(@item.id)
    lose_n = 0
    while item_n > 0
      used = false
      for i in target
        used |= i.item_effect(@item)
      end
      unless used
        break
      end
      item_n -= 1
      lose_n += 1
    end
    if lose_n > 0
      # アイテムの使用時 SE を演奏
      $game_system.se_play(@item.menu_se)
    else
      # ブザー SE を演奏
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # 消耗品の場合
    if @item.consumable
      # 使用したアイテムを減らす
      $game_party.lose_item(@item.id, lose_n)
      # アイテムウィンドウの項目を再描画
      @item_window.draw_item(@item_window.index)
    end
    # ターゲットウィンドウの内容を再作成
    @target_window.refresh
    # 全滅の場合
    if $game_party.all_dead?
      # ゲームオーバー画面に切り替え
      $scene = Scene_Gameover.new
      return
    end
    # コモンイベント ID が有効の場合
    if @item.common_event_id > 0
      # コモンイベント呼び出し予約
      $game_temp.common_event_id = @item.common_event_id
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    return
  end
  #--------------------------------------------------------------------------
  # ■ [A]ボタンが押された場合
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_item_update_target update_target;end
  def update_target
    # A ボタンが押された場合
    if Input.trigger?(Input::A)
      # アイテムを使い切った場合
      if $game_party.item_number(@item.id) == 0
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # ターゲットが全体の場合
      if @target_window.index == -1
        # □パーティ全体にアイテムの使用効果を適用
        max_item_lose($game_party.actors)
      end
      # ターゲットが単体の場合
      if @target_window.index >= 0
        # ターゲットのアクターにアイテムの使用効果を適用
        max_item_lose([$game_party.actors[@target_window.index]])
      end
    end
    # □元の処理を呼び出し
    hidesp_item_update_target
  end
end