#============================================================================== # ★ MapMenu ver1.0 by USK #------------------------------------------------------------------------------ # ・メニューコマンドに任意のマップ(メニューマップと呼ぶ)に移動する項目を追加します。 # ・アクターの選択を挟んでマップに移動も可能です。 # ・マップを利用したオリジナルのメニューの作成を想定しています。 #============================================================================== =begin ・スクリプト44行目のOrizinalMapMenuListに項目を追加することでメニューコマンド  に項目を追加できます。書式は以下の通りになります。 "(項目名)" => { :map => (移動先のマップID), :flag => (項目を有効にするスイッチ番号), :actor => (アクターを選択する場合trueしない場合false), :start => (メニューマップ移動時に実行するコモンイベントの番号), ;end => (メニューマップからメニューに戻るときに実行するコモンイベントの番号) }, 例 "テスト" => {:map => 2, :flag => 0, :actor => false, :start => 2, :end => 1}, :startと:endの項目はメニューマップ移動時にパーティーのグラフィックや座標を 設定するのに利用することを想定しています。 ・:actorをtrueにすると、コマンドを選択した後アクターの選択になります。  選択されたアクターのIDはスクリプト49行目のSelectActorIdで設定した番号の変数  となります。 ・メニューマップからメニューに戻り、キャンセルボタンでメニューを閉じると  元いた通常のマップに戻ります。 ・メニューマップからメニュー画面に戻らずに通常のマップに移動したい場合、  場所移動のイベントコマンドを実行する前にスクリプト51行目のReturnMapSwitchId  で指定した番号のスイッチをオンにしてください。そうしない場合はメニューマップ  内の移動とみなされます。 =end #============================================================================== # ■ Window_MenuCommand #============================================================================== class Window_MenuCommand < Window_Command #-------------------------------------------------------------------------- # ● カスタマイズ #-------------------------------------------------------------------------- OrizinalMapMenuList = { "テスト" => {:map => 2, :flag => 0, :actor => false, :start => 2, :end => 1}, "アクター" => {:map => 3, :flag => 0, :actor => true, :start => 0, :end => 1}, } #↓メニューで選んだアクターのIDを格納する変数の番号 SelectActorId = 1 #↓メニューマップからメニューに戻らずに通常マップに移動する場合オンにするスイッチの番号 ReturnMapSwitchId = 1 #↓trueにするとテストプレイ中メニューマップと通常マップが識別できます。 Debug = true attr_reader :org_list #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.to_map? ret = $game_switches[ReturnMapSwitchId] $game_switches[ReturnMapSwitchId] = false ret && SceneManager.scene_is?(Scene_MenuMap) end #-------------------------------------------------------------------------- # ● 独自コマンドの追加用 #-------------------------------------------------------------------------- alias menumap_add_original_commands add_original_commands def add_original_commands menumap_add_original_commands i = 0 @org_list = {} OrizinalMapMenuList.each do |k, v| id = v[:flag] next unless id == 0 || $game_switches[id] || $game_system.mapmenu_flag[id] $game_system.mapmenu_flag[id] = true sym = "org#{i}".to_sym @org_list[sym] = v add_command(k, sym, id == 0 || $game_switches[id]) i += 1 end end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def original_command? if v = org_list[current_symbol] $game_temp.menumap_id = v[:map] $game_temp.menumap_start = v[:start] $game_temp.menumap_end = v[:end] end end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu < Scene_MenuBase #-------------------------------------------------------------------------- # ● コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias menumap_create_command_window create_command_window def create_command_window menumap_create_command_window @command_window.org_list.each do |k, v| if v[:actor] @command_window.set_handler(k, method(:command_personal)) else proc = Proc.new do $game_temp.menumap_id = v[:map] $game_temp.menumap_start = v[:start] $game_temp.menumap_end = v[:end] SceneManager.call(Scene_MenuMap) end @command_window.set_handler(k, proc) end end end #-------------------------------------------------------------------------- # ● 個人コマンド[決定] #-------------------------------------------------------------------------- alias menumap_on_personal_ok on_personal_ok def on_personal_ok if @command_window.original_command? $game_variables[Window_MenuCommand::SelectActorId] = $game_party.members[@status_window.index].id SceneManager.call(Scene_MenuMap) else menumap_on_personal_ok end end end #============================================================================== # ■ Scene_MenuMap #============================================================================== class Scene_MenuMap < Scene_Map #-------------------------------------------------------------------------- # ● クリア #-------------------------------------------------------------------------- def run_common_event(id) return if id == 0 event = $data_common_events[id] interpreter = Game_Interpreter.new interpreter.setup(event.list) while interpreter.running? do interpreter.update update end end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def debug if $TEST && Window_MenuCommand::Debug @debug_window = Window_Base.new(0,0,64,48) s = @debug_window.draw_text(0,0,80,24,"menu") end end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start debug @copy_map = $game_map.clone @copy_player_pos = [[$game_player.x, $game_player.y, $game_player.direction]] $game_player.followers.each {|f| @copy_player_pos << [f.x, f.y, f.direction]} $game_map.setup($game_temp.menumap_id) super run_common_event($game_temp.menumap_start) end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate s = Sprite.new if SceneManager.scene_is?(Scene_Menu) s.bitmap = Graphics.snap_to_bitmap s.z = 10000 run_common_event($game_temp.menumap_end) $game_map = @copy_map $game_player.moveto(*@copy_player_pos[0][0..1]) $game_player.set_direction(@copy_player_pos[0][2]) i = 1 $game_player.followers.each do |f| f.moveto(*@copy_player_pos[i][0..1]) f.set_direction(@copy_player_pos[i][2]) i += 1 end SceneManager.call(Scene_Map) SceneManager.call(Scene_Menu) end super s.bitmap.dispose if s.bitmap s.dispose end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 場所移動 #-------------------------------------------------------------------------- alias mapmenu_command_201 command_201 def command_2011 SceneManager.call(Scene_Map) if Window_MenuCommand.to_map? mapmenu_command_201 end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp attr_accessor :menumap_id, :menumap_start, :menumap_end end #============================================================================== # ■ Game_System #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :mapmenu_flag #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias mapmenu_initialize initialize def initialize mapmenu_initialize @mapmenu_flag = {} end end