#============================================================================== # ■ RGSS3 メニューカスタマイズ オプション # クイックコモンメニューコマンド Ver1.01 by 星潟 #------------------------------------------------------------------------------ # メニューコマンドウィンドウにクイックコモンイベントを実行する # メニューコマンドを追加します。 # アクターを選択するものと、アクター選択をせずに実行するものの2種類があります。 # # メニューカスタマイズを導入していなくても使用できますが # クイックコモンイベントが前提スクリプトとして必要です。 #============================================================================== module MenuCustomize #空のハッシュを用意(変更不要) AQCC = {} #クイックコモンメニューコマンドで特定アクターを選択するものを選んだ場合に #選択したアクターのIDを保存する為の変数IDを指定 AQCCVID = 24 #クイックコモンメニューコマンドの名前と対応するコモンイベントIDを指定 #例1. #AQCC["Qコモン1"] = {:id => 11,:personal => false} #この場合、クイックコモンコマンドとして #Qコモン1というコマンドを追加する。 #このコマンドを選択するとクイックコモンイベントとして #コモンイベントID11を実行し、終了後に再度メニューコマンドがアクティブになる。 #例2. #AQCC["Qコモン2"] = {:id => 12,:personal => "alive?"} #この場合、クイックコモンコマンドとして #Qコモン2というコマンドを追加する。 #このコマンドを選択すると、続けてパーティメンバーの選択を行う。 #ただし、"alive?"(生存しているか)の式を評価し #条件を満たしたアクターのみを選択できる。 #ここで選択したアクターのIDはAQCCVIDで指定したIDの変数に格納される。 #その後にクイックコモンイベントとして #コモンイベントID12を実行する。 #例3. #AQCC["Qコモン3"] = {:id => [13,14],:personal => "movable?"} #この場合、クイックコモンコマンドとして #Qコモン3というコマンドを追加する。 #このコマンドを選択すると、続けてパーティメンバーの選択を行う。 #ただし、"movable?"(行動可能か)の式を評価し #条件を満たしたアクターのみを選択できる。 #ここで選択したアクターのIDはAQCCVIDで指定したIDの変数に格納される。 #その後にクイックコモンイベントとして #コモンイベントID13と14を実行する。 #例4. #AQCC["Qコモン4"] = {:id => 15,:personal => "dead?"} #この場合、クイックコモンコマンドとして #Qコモン4というコマンドを追加する。 #このコマンドを選択すると、続けてパーティメンバーの選択を行う。 #ただし、"dead?"(戦闘不能か)の式を評価し #条件を満たしたアクターのみを選択できる。 #ここで選択したアクターのIDはAQCCVIDで指定したIDの変数に格納される。 #その後にクイックコモンイベントとして #コモンイベントID15を実行する。 #例5. #AQCC["Qコモン5"] = {:id => 16,:personal => "state?(5)"} #この場合、クイックコモンコマンドとして #Qコモン5というコマンドを追加する。 #このコマンドを選択すると、続けてパーティメンバーの選択を行う。 #ただし、"state?(5)"(ステートID5のステートが付与されているか)の式を評価し #条件を満たしたアクターのみを選択できる。 #ここで選択したアクターのIDはAQCCVIDで指定したIDの変数に格納される。 #その後にクイックコモンイベントとして #コモンイベントID16を実行する。 AQCC["Qコモン1"] = {:id => 11,:personal => false} AQCC["Qコモン2"] = {:id => 12,:personal => "alive?"} AQCC["Qコモン3"] = {:id => [13,14],:personal => "movable?"} end class Window_MenuCommand < Window_Command attr_accessor :quick_common_symbols #-------------------------------------------------------------------------- # 独自コマンドの追加用 #-------------------------------------------------------------------------- alias add_original_commands_menu_customize_qcmc add_original_commands def add_original_commands add_original_commands_menu_customize_qcmc @quick_common_symbols = {:personal => [],:normal => []} n = 0 MenuCustomize::AQCC.each {|k,v| symbol = ((v[:personal] ? "quick_common_personal" : "quick_common_normal") + n.to_s).to_sym quick_common_symbols[v[:personal] ? :personal : :normal].push(symbol) add_command(k,symbol,v[:personal] ? main_commands_enabled : true,v) n += 1 } end end class Scene_Menu < Scene_MenuBase #-------------------------------------------------------------------------- # コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias create_command_window_menu_customize_qcmc create_command_window def create_command_window create_command_window_menu_customize_qcmc h = @command_window.quick_common_symbols if h h[:normal].each {|sym| @command_window.set_handler(sym,method(:command_quick_common))} h[:personal].each {|sym| @command_window.set_handler(sym,method(:command_personal))} end end #-------------------------------------------------------------------------- # クイックコモンコマンド #-------------------------------------------------------------------------- def command_quick_common(personal = false) vid = MenuCustomize::AQCCVID ext = @command_window.current_ext[:id] if vid > 0 && personal actor = $game_party.members[@status_window.index] $game_variables[vid] = actor ? actor.id : 0 end quick_common_event_execute(ext) @command_window.refresh @status_window.refresh @gold_window.refresh check_gameover return if scene_changing? h = @command_window.quick_common_symbols if h if h[:personal].include?(@command_window.current_symbol) @status_window.activate else @command_window.activate end end end #-------------------------------------------------------------------------- # 個人コマンド[決定] #-------------------------------------------------------------------------- alias on_personal_ok_menu_customize_qcmc on_personal_ok def on_personal_ok h = @command_window.quick_common_symbols if h && h[:personal].include?(@command_window.current_symbol) if @command_window.current_symbol command_quick_common(true) return end end on_personal_ok_menu_customize_qcmc end #-------------------------------------------------------------------------- # コマンド[スキル][装備][ステータス] #-------------------------------------------------------------------------- alias command_personal_menu_customize_qcmc command_personal def command_personal command_personal_menu_customize_qcmc h = @command_window.quick_common_symbols if h && h[:personal].include?(@command_window.current_symbol) if @command_window.current_symbol @status_window.actor_ok_selectable_condition = @command_window.current_ext[:personal] end end end #-------------------------------------------------------------------------- # 個人コマンド[終了] #-------------------------------------------------------------------------- alias on_personal_cancel_menu_customize_qcmc on_personal_cancel def on_personal_cancel on_personal_cancel_menu_customize_qcmc @status_window.actor_ok_selectable_condition = nil end end class Window_Selectable < Window_Base attr_accessor :actor_ok_selectable_condition #-------------------------------------------------------------------------- # 選択項目の有効状態を取得 #-------------------------------------------------------------------------- alias current_item_enabled_menu_customize_qcmc? current_item_enabled? def current_item_enabled? r = current_item_enabled_menu_customize_qcmc? if r && self.is_a?(Window_MenuStatus) && @actor_ok_selectable_condition actor = $game_party.members[index] if actor r = actor.check_menu_status_selectable_condition(@actor_ok_selectable_condition) end end r end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # メニューステータスの項目の可否を判定 #-------------------------------------------------------------------------- def check_menu_status_selectable_condition(condition) condition.is_a?(String) ? eval(condition) : condition end end