#◆◇◆◇◆ 真強制行動スクリプトVX ver 1.00 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 1.00(2011/09/09) 公開 ■ 説明 従来の強制行動は、行動対象がパーティーにいて、 且つ存在していなければ実行されませんでしたが、 この強制行動はアクターがデータとして存在していれば、 どんな状態でも(PTに居なくても死んでいても)行動を強制します。 指定した変数に 1 以上の値が入っている場合、 戦闘行動の強制で指定したアクターを変数のIDのアクターに変更して、 真強制行動を実行します。 (0 なら基本機能の強制行動を行います) ● 手順 まず指定した変数に真強制行動をさせたいアクターのIDを入れます。 ↓ その後、通常通り、バトルイベントで戦闘行動の強制を行います。 ↓ 真強制行動が行われます。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 真強制行動スクリプトVXを有効化 ( true で有効 / false で無効 ) RGSS["真強制行動スクリプトVX"] = true end # 真強制行動スクリプトVXが有効な場合に以降の処理を実行する if MINTO::RGSS["真強制行動スクリプトVX"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズをここで行います。 #============================================================================== module MINTO #-------------------------------------------------------------------------- # ● 真強制行動に使用する変数の取得 #-------------------------------------------------------------------------- def self.true_forcing_action return 2 end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● アクター用イテレータ (インデックス) # param : 0 以上ならインデックス、-1 なら全体 #-------------------------------------------------------------------------- def iterate_actor_index(param) # 全体 if param == -1 for actor in $game_party.members do yield actor end # 単体 else actor = $game_party.members[param] # 真強制行動の場合 if $game_variables[MINTO.true_forcing_action] >= 1 # アクター変更 actor = $game_actors[$game_variables[MINTO.true_forcing_action]] end yield actor unless actor == nil end end #-------------------------------------------------------------------------- # ● 戦闘行動の強制 #-------------------------------------------------------------------------- def command_339 iterate_battler(@params[0], @params[1]) do |battler| # 真強制行動の場合 if $game_variables[MINTO.true_forcing_action] >= 1 # 存在しないバトラーの場合 if battler.nil? # 次へ next end # 通常の強制行動の場合 else # 戦闘不能かパーティーなどにいないバトラーの場合 if battler.exist? # 次へ next end end battler.action.kind = @params[2] if battler.action.kind == 0 battler.action.basic = @params[3] else battler.action.skill_id = @params[3] end # ラストターゲット if @params[4] == -2 battler.action.decide_last_target # ランダム elsif @params[4] == -1 battler.action.decide_random_target # インデックス指定 elsif @params[4] >= 0 battler.action.target_index = @params[4] end battler.action.forcing = true $game_troop.forcing_battler = battler @index += 1 return false end return true end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 次に行動するべきバトラーの設定 # イベントコマンドで [戦闘行動の強制] が行われているときはそのバトラー # を設定して、リストから削除する。それ以外はリストの先頭から取得する。 # 現在パーティにいないアクターを取得した場合 (index が nil, バトルイベ # ントでの離脱直後などに発生) は、それをスキップする。 #-------------------------------------------------------------------------- def set_next_active_battler # エタメモ風CTBスクリプトVXが無効な場合 unless MINTO::RGSS["エタメモ風CTBスクリプトVX"] loop do # アクションが強制されているバトラーが存在する場合 if $game_troop.forcing_battler != nil @active_battler = $game_troop.forcing_battler @action_battlers.delete(@active_battler) $game_troop.forcing_battler = nil else # 先頭のアクションバトラーをアクティブバトラーにする @active_battler = @action_battlers.shift end # 無効なアクティブバトラーの場合 if @active_battler.nil? # メソッドを返す return end # アクションが強制されていないアクティブバトラーの場合 unless @active_battler.action.forcing # パーティーに存在しないアクティブバトラーの場合 unless @active_battler.index.nil? # メソッドを返す return end # アクションが強制されているアクティブバトラーの場合 else # メソッドを返す return end end # エタメモ風CTBスクリプトVXが有効な場合 else # アクションが強制されているバトラーが存在する場合 unless $game_troop.forcing_battler.nil? @active_battler = $game_troop.forcing_battler $game_troop.forcing_battler = nil else # 先頭のアクションバトラーをアクティブバトラーにする @active_battler = @action_battlers.shift end end end end end