#============================================================================== # 「パーティコマンド拡張」(ACE) ver1.0 # 製作者:奈々(なな) # へぷたなすくろーる http://heptanas.mamagoto.com/ # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # その他、詳しい利用規約はブログを参照して下さい。 # #------------------------------------------------------------------------------ # # 戦闘時のパーティコマンド「戦う」を最大3つまで拡張します。 # コマンド選択時に、指定したステートを付与できます。 # これにより自動戦闘や陣形のようなシステムを実装できます。 # # # 使い方は、初期設定で行います。 # # TAC1_NAME = "○○" # コマンド名を設定します。 # これを空白("")にすると、そのコマンドは未使用になります。 # # TAC1_SW = n # 条件スイッチを設定します。nはスイッチNoです。 # 0を指定した場合は、そのコマンドは常に表示されます。 # それ以外の場合、n番のスイッチがONの場合のみ表示されます。 # # TAC1_STATE = n # TAC1_STATE = [n,n,n,n] # 付与ステートを設定します。nはステートIDです。 # 1つの数値を指定した場合、パーティ全員にそのステートを付与します。 # []の配列で指定した場合、順番通りにそれぞれのステートを付与します。 # どちらも0を指定した場合は、ステートを付与しません。 # # ※基本的に付与するステートはコマンド専用にして下さい。 # #============================================================================== #◇初期設定 module Nana module EZ_Tactics # コマンド名、""でコマンド不使用 TAC1_NAME = "戦う" # 条件スイッチNo、0で常に表示 TAC1_SW = 0 # 付与ステートID、0で付与なし TAC1_STATE = 0 # 作戦2の設定 TAC2_NAME = "自動戦闘" TAC2_SW = 1 TAC2_STATE = 5 # 作戦3の設定 TAC3_NAME = "" TAC3_SW = 0 TAC3_STATE = [17,21,22,23] end end #============================================================================== #============================================================================== # ■ Window_PartyCommand #------------------------------------------------------------------------------ # バトル画面で、戦うか逃げるかを選択するウィンドウです。 #============================================================================== class Window_PartyCommand < Window_Command #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_command(Nana::EZ_Tactics::TAC1_NAME, :tac1, Nana::EZ_Tactics::TAC1_SW == 0 || $game_switches[Nana::EZ_Tactics::TAC1_SW]) unless Nana::EZ_Tactics::TAC1_NAME == "" add_command(Nana::EZ_Tactics::TAC2_NAME, :tac2, Nana::EZ_Tactics::TAC2_SW == 0 || $game_switches[Nana::EZ_Tactics::TAC2_SW]) unless Nana::EZ_Tactics::TAC2_NAME == "" add_command(Nana::EZ_Tactics::TAC3_NAME, :tac3, Nana::EZ_Tactics::TAC3_SW == 0 || $game_switches[Nana::EZ_Tactics::TAC3_SW]) unless Nana::EZ_Tactics::TAC3_NAME == "" add_command(Vocab::escape, :escape, BattleManager.can_escape?) end end #============================================================================== # ■ RPG::State #------------------------------------------------------------------------------ # ステートのデータクラス。 #============================================================================== class RPG::State < RPG::BaseItem #-------------------------------------------------------------------------- # ● 作戦ステートかどうか #-------------------------------------------------------------------------- def tactics? list = [] Nana::EZ_Tactics::TAC1_STATE.class == Array ? list += Nana::EZ_Tactics::TAC1_STATE : list += [Nana::EZ_Tactics::TAC1_STATE] Nana::EZ_Tactics::TAC2_STATE.class == Array ? list += Nana::EZ_Tactics::TAC2_STATE : list += [Nana::EZ_Tactics::TAC2_STATE] Nana::EZ_Tactics::TAC3_STATE.class == Array ? list += Nana::EZ_Tactics::TAC3_STATE : list += [Nana::EZ_Tactics::TAC3_STATE] list.include?(self.id) end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ # バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● パーティコマンドウィンドウの作成 #-------------------------------------------------------------------------- def create_party_command_window @party_command_window = Window_PartyCommand.new @party_command_window.viewport = @info_viewport @party_command_window.set_handler(:tac1, method(:command_tac1)) unless Nana::EZ_Tactics::TAC1_NAME == "" @party_command_window.set_handler(:tac2, method(:command_tac2)) unless Nana::EZ_Tactics::TAC2_NAME == "" @party_command_window.set_handler(:tac3, method(:command_tac3)) unless Nana::EZ_Tactics::TAC3_NAME == "" @party_command_window.set_handler(:escape, method(:command_escape)) @party_command_window.unselect end #-------------------------------------------------------------------------- # ● コマンド[作戦1] #-------------------------------------------------------------------------- def command_tac1 if Nana::EZ_Tactics::TAC1_STATE.class == Array $game_party.members.each_with_index do |actor,index| actor.add_state(Nana::EZ_Tactics::TAC1_STATE[index]) if Nana::EZ_Tactics::TAC1_STATE[index] && Nana::EZ_Tactics::TAC1_STATE[index] != 0 end else $game_party.members.each do |actor| actor.add_state(Nana::EZ_Tactics::TAC1_STATE) if Nana::EZ_Tactics::TAC1_STATE != 0 end end refresh_status $game_party.make_actions next_command end #-------------------------------------------------------------------------- # ● コマンド[作戦2] #-------------------------------------------------------------------------- def command_tac2 if Nana::EZ_Tactics::TAC2_STATE.class == Array $game_party.members.each_with_index do |actor,index| actor.add_state(Nana::EZ_Tactics::TAC2_STATE[index]) if Nana::EZ_Tactics::TAC2_STATE[index] && Nana::EZ_Tactics::TAC2_STATE[index] != 0 end else $game_party.members.each do |actor| actor.add_state(Nana::EZ_Tactics::TAC2_STATE) if Nana::EZ_Tactics::TAC2_STATE != 0 end end p $game_party.members[0].states refresh_status $game_party.make_actions next_command end #-------------------------------------------------------------------------- # ● コマンド[作戦3] #-------------------------------------------------------------------------- def command_tac3 if Nana::EZ_Tactics::TAC3_STATE.class == Array $game_party.members.each_with_index do |actor,index| actor.add_state(Nana::EZ_Tactics::TAC3_STATE[index]) if Nana::EZ_Tactics::TAC3_STATE[index] && Nana::EZ_Tactics::TAC3_STATE[index] != 0 end else $game_party.members.each do |actor| actor.add_state(Nana::EZ_Tactics::TAC3_STATE) if Nana::EZ_Tactics::TAC3_STATE != 0 end end p $game_party.members[0].states refresh_status $game_party.make_actions next_command end #-------------------------------------------------------------------------- # ● パーティコマンド選択の開始 #-------------------------------------------------------------------------- alias start_party_command_selection_n7eztac start_party_command_selection def start_party_command_selection unless scene_changing? $data_states.each do |state| next unless state && state.tactics? $game_party.members.each do |actor| actor.remove_state(state.id) end end end start_party_command_selection_n7eztac end end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ # スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス # は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● ステートの解除 #-------------------------------------------------------------------------- def remove_state(state_id) if state?(state_id) revive if state_id == death_state_id erase_state(state_id) refresh @result.removed_states.push(state_id).uniq! unless $data_states[state_id].tactics? end end end