#==============================================================================
#                      「メニュー項目の直接起動」(ACE) Ver.1.0
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   スクリプトの改変は自由に行って頂いて構いませんが
#   その場合も元のスクリプトの作成者として名前を載せて下さい。
#   また配布前に必ず、ブログにある利用規約を確認して下さい。
#
#------------------------------------------------------------------------------
#   
#   メニュー画面を介さずに、イベントコマンドから直接各画面を表示します。
#   自作イベントや、パーティメンバー以外の操作などにどうぞ。
#   
#   使い方は、イベントコマンドのスクリプトで以下を入力します。
#   (アクター指定が必要なものはidを数値で入力します)
#   
#   n7_direct_item        :アイテム画面
#   n7_direct_skill(id)   :スキル画面
#   n7_direct_equip(id)   :装備画面
#   n7_direct_status(id)  :ステータス画面
#   n7_direct_save        :セーブ画面
#   n7_direct_load        :ロード画面
#   
#==============================================================================


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

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● メニュー項目の直接起動
  #--------------------------------------------------------------------------
  #アイテム画面
  def n7_direct_item
    SceneManager.call(Scene_Item)
  end
  #スキル画面
  def n7_direct_skill(actor_id = 1)
    $game_temp.direct_menu_actor_id = actor_id
    SceneManager.call(Scene_Direct_Skill)
  end
  #装備画面
  def n7_direct_equip(actor_id = 1)
    $game_temp.direct_menu_actor_id = actor_id
    SceneManager.call(Scene_Direct_Equip)
  end
  #ステータス画面
  def n7_direct_status(actor_id = 1)
    $game_temp.direct_menu_actor_id = actor_id
    SceneManager.call(Scene_Direct_Status)
  end
  #セーブ画面
  def n7_direct_save
    SceneManager.call(Scene_Save)
  end
  #ロード画面
  def n7_direct_load
    SceneManager.call(Scene_Load)
  end
end
#==============================================================================
# ■ Game_Temp
#------------------------------------------------------------------------------
#  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン
# スタンスは $game_temp で参照されます。
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :direct_menu_actor_id     # アクターIDの指定
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias direct_menu_initialize initialize
  def initialize
    direct_menu_initialize
    direct_menu_actor_id = 1
  end
end

#以下やっていること。@actorの書き換え。pagedown,upのハンドラ削除。以上。
#競合対策するならsuperしてpagedown,upのハンドラを書き換えても良い。
#==============================================================================
# ■ Scene_Direct_Skill
#------------------------------------------------------------------------------
#  直接起動型スキル画面の処理を行うクラスです。
#==============================================================================

class Scene_Direct_Skill < Scene_Skill
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    @actor = $game_actors[($game_temp.direct_menu_actor_id)]
    on_actor_change
  end
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  def create_command_window
    p @actor.id
    wy = @help_window.height
    @command_window = Window_SkillCommand.new(0, wy)
    @command_window.viewport = @viewport
    @command_window.help_window = @help_window
    @command_window.actor = @actor
    @command_window.set_handler(:skill,    method(:command_skill))
    @command_window.set_handler(:cancel,   method(:return_scene))
  end
end

#==============================================================================
# ■ Scene_Direct_Equip
#------------------------------------------------------------------------------
#  直接起動型装備画面の処理を行うクラスです。
#==============================================================================

class Scene_Direct_Equip < Scene_Equip
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    @actor = $game_actors[($game_temp.direct_menu_actor_id)]
    on_actor_change
  end
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  def create_command_window
    wx = @status_window.width
    wy = @help_window.height
    ww = Graphics.width - @status_window.width
    @command_window = Window_EquipCommand.new(wx, wy, ww)
    @command_window.viewport = @viewport
    @command_window.help_window = @help_window
    @command_window.set_handler(:equip,    method(:command_equip))
    @command_window.set_handler(:optimize, method(:command_optimize))
    @command_window.set_handler(:clear,    method(:command_clear))
    @command_window.set_handler(:cancel,   method(:return_scene))
  end
end

#==============================================================================
# ■ Scene_Direct_Status
#------------------------------------------------------------------------------
#  直接起動型ステータス画面の処理を行うクラスです。
#==============================================================================

class Scene_Direct_Status < Scene_Status
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    @actor = $game_actors[($game_temp.direct_menu_actor_id)]
    @status_window = Window_Status.new(@actor)
    @status_window.set_handler(:cancel,   method(:return_scene))
  end
end