#==============================================================================
#                   「オリジナルメニューコマンド」(ACE) ver.1.2
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   この素材はフリーゲームにのみご利用頂けます。
#   シェアウェア、販売作品への利用は原則として禁止します。
#   利用される場合はスクリプト作成者として「奈々」を明記し
#   配布時にブログで利用規約の確認と、利用報告を行って下さい。
#
#------------------------------------------------------------------------------
#
#   コモンイベントを利用した、独自のメニューコマンドを作成できます。
#   仲間との会話やアイテム合成など、自由度の高いコマンドを自作可能です。
#   
#   使い方は、まず初期設定でオリジナルコマンドを作成します。
#   コモンイベントの指定と、コマンド名や条件スイッチなどの設定をします。
#   次にコモンイベントを作りこんで、コマンドの中身となる処理を作成します。
#   設定により、マップ画面に移行するか、メニュー画面のまま処理するか選択可能です。
#   
#   最後にオリジナルコマンドをメニュー画面に追加します。
#   これは、別の素材である「簡単コマンドカスタム(Ver.1.1〜)」を使います。
#   別途ブログよりダウンロードして、説明を読んでご利用下さい。
#
#==============================================================================

#◇初期設定
module Nana
module OMC
  
  C = []   #消したり変えたりしないで下さい
  
  
  #オリジナルコマンドの追加
  #C[コマンド番号] = [コモンEV番号, "コマンド名", 条件スイッチ番号, 起動モード]
  #条件スイッチ番号は、指定スイッチがonならコマンドが有効に(0で常時有効)
  #起動モードはtrueでマップ起動、falseでメニュー起動
  
  C[10] = [1, "会話", 0, false]
  C[11] = [2, "召喚", 1, true]
  C[12] = [3, "休憩", 0, false]
  
  #メニューへの反映には「簡単コマンドカスタム」スクリプトで設定します
  
end
end

#==============================================================================
# ■ Window_MenuCommand
#------------------------------------------------------------------------------
#  メニュー画面で表示するコマンドウィンドウです。
#==============================================================================

class Window_MenuCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● コマンドリストの作成
  #--------------------------------------------------------------------------
  def add_n7_original_command(n)
    c = Nana::OMC::C[n]
    return unless c
    enabled = c[2] == 0 ? true : $game_switches[c[2]]
    ext = {:cev => c[0], :mode => c[3]}
    
    add_command(c[1],  :omc, enabled , ext)
  end
end

#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  メニュー画面の処理を行うクラスです。
#==============================================================================

class Scene_Menu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias start_n7omc start
  def start
    start_n7omc
    restore_cursor
  end
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_command_window_n7omc create_command_window
  def create_command_window
    create_command_window_n7omc
    @command_window.set_handler(:omc,       method(:command_omc))
  end
  #--------------------------------------------------------------------------
  # ● コマンド[オリジナルメニューコマンド]
  #--------------------------------------------------------------------------
  def command_omc
    ext = @command_window.current_ext
    $game_temp.reserve_common_event(ext[:cev])
    if ext[:mode] == true
      SceneManager.goto(Scene_Map)
    else
      
      memory_cursor
      
      common_event = $game_temp.reserved_common_event
      @interpreter = Game_Interpreter.new
      @interpreter.setup(common_event.list, 0)
      @interpreter.update
      #@command_window.refresh
      @status_window.refresh
      @gold_window.refresh
      @command_window.activate
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソル位置を記憶
  #--------------------------------------------------------------------------
  def memory_cursor
    $game_system.memory_cursor = @command_window.index
  end
  #--------------------------------------------------------------------------
  # ● カーソル位置を復元
  #--------------------------------------------------------------------------
  def restore_cursor
    if $game_system.memory_cursor >= 0
      @command_window.index = $game_system.memory_cursor
    end
    $game_system.memory_cursor = -1
  end
end
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存
# します。このクラスのインスタンスは $game_system で参照されます。
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :memory_cursor            # カーソル位置の記憶(-1で位置なし)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_n7omc initialize
  def initialize
    @memory_cursor = -1
    initialize_n7omc
  end
end