#==============================================================================
#                   「プレイヤーの行動チェック」(ACE) ver4.1  by奈々
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#   その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
#   自作イベントのサポートになる、チェック機能を提供します。
# 1、メニュー画面を開いたときに指定したスイッチをオンにする。
# 2、プレイヤーが移動したときに指定したスイッチをオンにする。
# 3、プレイヤーが戦闘したときに指定したスイッチをオンにする。
#     プレイヤーが戦闘した敵のトループIDを変数に代入する。
#     戦闘結果を変数に代入する。(0:勝利 1:逃走 2:敗北)
# 4、マップ画面で特定ボタンが入力されたときに指定したスイッチをオンにする。
#
#==============================================================================

# ◇初期設定       ↓
#
# 以下の数字は「何番のスイッチ/変数を使うか」を指定します。
# 全て、0以下を指定することでその部分だけ機能を封印できます。
module Nana_check
  
  MENU_ON_SW_EV = 1     #イベントコマンドでメニューを開いたときにONになるスイッチNo.
  MENU_ON_SW_MAP = 1    #メニューボタンでメニューを開いたときにONになるスイッチNo.
  
  MOVE_PL_SW = 2        #プレイヤーが動いたときにONになるスイッチNo.
  
  BATTLE_ON_SW = 3      #プレイヤーが戦闘に入ったときにONになるスイッチNo.
  BATTLE_ON_VA = 3      #そのときに敵のトループIDが入る変数No.
  BATTLE_RESULT = 2     #そのときの戦闘の結果が入る変数No.(0:勝利 1:逃走 2:敗北)
  
  MAP_KEY_X_SW = 4      #Xボタンが押されたときにONになるスイッチNo.
  MAP_KEY_Y_SW = 4      #Yボタンが押されたときにONになるスイッチNo.
  MAP_KEY_Z_SW = 4      #Zボタンが押されたときにONになるスイッチNo.
  MAP_KEY_L_SW = 4      #Lボタンが押されたときにONになるスイッチNo.
  MAP_KEY_R_SW = 4      #Rボタンが押されたときにONになるスイッチNo.

  MAP_KEY_A_SW = 0      #Aボタン(ダッシュ)が押されたときにONになるスイッチNo.
  SEALED_KEY_A = false  #trueでダッシュ機能を封印する
  MAP_KEY_B_SW = 0      #Bボタン(キャンセル)が押されたときにONになるスイッチNo.
  SEALED_KEY_B = false  #trueでメニュー機能を封印する
  MAP_KEY_C_SW = 0      #Cボタン(決定)が押されたときにONになるスイッチNo.
  SEALED_KEY_C = false  #trueでイベント起動機能を封印する
  
end

# 初期設定はここまでです。↑
#------------------------------------------------------------------------------

if Nana_check::MENU_ON_SW_EV > 0
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● メニュー画面を開く
  #--------------------------------------------------------------------------
  alias sw_on_command_351 command_351
  def command_351
    sw_on_command_351
    $game_switches[Nana_check::MENU_ON_SW_EV] = true
  end
end
end

if Nana_check::MENU_ON_SW_MAP > 0
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● メニュー画面の呼び出し
  #--------------------------------------------------------------------------
  alias sw_on_call_menu call_menu
  def call_menu
    sw_on_call_menu
    $game_switches[Nana_check::MENU_ON_SW_MAP] = true
  end
end
end

if Nana_check::MOVE_PL_SW > 0
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 歩数増加
  #--------------------------------------------------------------------------
  alias increase_steps2 increase_steps
  def increase_steps
    increase_steps2
    $game_switches[Nana_check::MOVE_PL_SW] = true
  end
end
end

if Nana_check::BATTLE_ON_VA > 0 || Nana_check::BATTLE_ON_SW > 0
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始後処理
  #--------------------------------------------------------------------------
  alias post_start2 post_start
  def post_start
    $game_variables[Nana_check::BATTLE_ON_VA] = $game_troop.troop.id if Nana_check::BATTLE_ON_VA > 0
    $game_switches[Nana_check::BATTLE_ON_SW] = true if Nana_check::BATTLE_ON_SW > 0
    post_start2
  end
end
end

if Nana_check::BATTLE_RESULT > 0
#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
#  戦闘の進行を管理するモジュールです。
#==============================================================================

module BattleManager
  #--------------------------------------------------------------------------
  # ● 戦闘終了
  #     result : 結果(0:勝利 1:逃走 2:敗北)
  #--------------------------------------------------------------------------
  def self.battle_end(result)
    $game_variables[Nana_check::BATTLE_RESULT] = result
    @phase = nil
    @event_proc.call(result) if @event_proc
    $game_party.on_battle_end
    $game_troop.on_battle_end
    SceneManager.exit if $BTEST
  end
end
end

if Nana_check::MAP_KEY_X_SW > 0 || Nana_check::MAP_KEY_Y_SW > 0 ||
  Nana_check::MAP_KEY_Z_SW > 0 || Nana_check::MAP_KEY_L_SW > 0 ||
  Nana_check::MAP_KEY_R_SW > 0 || Nana_check::MAP_KEY_A_SW > 0 ||
  Nana_check::MAP_KEY_B_SW > 0 || Nana_check::MAP_KEY_C_SW > 0
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● キャンセルボタンによるメニュー呼び出し判定
  #--------------------------------------------------------------------------
  def update_call_menu
    n7_key_check
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @menu_calling = false
    else
      @menu_calling ||= Input.trigger?(:B) && Nana_check::SEALED_KEY_B == false
      call_menu if @menu_calling && !$game_player.moving?
    end
  end
  #--------------------------------------------------------------------------
  # ● ボタンが押されたか判定
  #--------------------------------------------------------------------------
  def n7_key_check
    $game_switches[Nana_check::MAP_KEY_X_SW] = true if Input.trigger?(:X) && Nana_check::MAP_KEY_X_SW > 0
    $game_switches[Nana_check::MAP_KEY_Y_SW] = true if Input.trigger?(:Y) && Nana_check::MAP_KEY_Y_SW > 0
    $game_switches[Nana_check::MAP_KEY_Z_SW] = true if Input.trigger?(:Z) && Nana_check::MAP_KEY_Z_SW > 0
    $game_switches[Nana_check::MAP_KEY_L_SW] = true if Input.trigger?(:L) && Nana_check::MAP_KEY_L_SW > 0
    $game_switches[Nana_check::MAP_KEY_R_SW] = true if Input.trigger?(:R) && Nana_check::MAP_KEY_R_SW > 0
    $game_switches[Nana_check::MAP_KEY_A_SW] = true if Input.trigger?(:A) && Nana_check::MAP_KEY_A_SW > 0
    $game_switches[Nana_check::MAP_KEY_B_SW] = true if Input.trigger?(:B) && Nana_check::MAP_KEY_B_SW > 0
    $game_switches[Nana_check::MAP_KEY_C_SW] = true if Input.trigger?(:C) && Nana_check::MAP_KEY_C_SW > 0
  end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 決定ボタンによるイベント起動判定
  #--------------------------------------------------------------------------
  def check_action_event
    return false if Nana_check::SEALED_KEY_C
    return false if in_airship?
    check_event_trigger_here([0])
    return true if $game_map.setup_starting_event
    check_event_trigger_there([0,1,2])
    $game_map.setup_starting_event
  end
  #--------------------------------------------------------------------------
  # ● ダッシュ状態判定
  #--------------------------------------------------------------------------
  def dash?
    return false if @move_route_forcing
    return false if $game_map.disable_dash?
    return false if vehicle
    return false if Nana_check::SEALED_KEY_A
    return Input.press?(:A)
  end
end
end