#============================================================================== # ■ RGSS3 戦闘後パーティメンバー復元 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # このスクリプトを導入することで # 戦闘中パーティ入れ替え系スクリプトを使用している際に # パーティーを入れ替えても、戦闘後に元のメンバーに復元されます。 # ただし以下の場合はこの機能が働きません。 # # 1.戦闘中にパーティメンバーの加入・離脱があった場合 # (現在メンバーとの不整合を無くす為) # 2.元の戦闘メンバー全員が戦闘不能状態の場合 # (直後に戦闘があると全滅する為。 # 戦闘終了時に戦闘不能が解除される設定の場合は効果無し) # 3.指定されたスイッチがONの場合 # (何らかの理由で復元機能を停止させたい時の為) #------------------------------------------------------------------------------ # Ver1.01 処理を若干効率化。 #============================================================================== module PTM_LOAD #パーティロードを発生させないようにするスイッチ番号を指定します。 #nilを指定すると、スイッチによるパーティロード封印機能を無効化します。 SWITCH = 100 end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # アクター配列セーブ #-------------------------------------------------------------------------- def save_pad #アクター配列を複製する。 @pre_actors_data = @actors.clone end #-------------------------------------------------------------------------- # アクター配列ロード #-------------------------------------------------------------------------- def load_pad #アクター配列を複製データから戻す。 @actors = @pre_actors_data #複製データを初期化する。 @pre_actors_data = [] #プレイヤーをリフレッシュする。 $game_player.refresh end #-------------------------------------------------------------------------- # 入れ替え時のエラー防止の為、データを精査 #-------------------------------------------------------------------------- def pad_error? #複製データが存在しない時、複製データにアクターが誰もいなかった時、 #もしくは戦闘開始時と戦闘終了時でパーティメンバーが異なる時はtrueを返す。 return true if @pre_actors_data == nil return true if @pre_actors_data.empty? return true if @pre_actors_data.sort != @actors.sort #複製データを更に複製する。 first_data = @pre_actors_data.clone #空の配列を作成。 baptm_data = [] #戦闘メンバーの数を取得。 number_data = battle_members.size #戦闘メンバーの数分、多重複製データからデータを移植。 number_data.times {baptm_data.push(first_data.shift)} #復帰予定の戦闘メンバーの中に戦闘不能者が一人も含まれていなければfalse、 #そうでない場合はtrueを返す。 baptm_data.each {|actor_id| return false unless $game_actors[actor_id].dead?} return true end #-------------------------------------------------------------------------- # 入れ替えを行うかどうかを判定 #-------------------------------------------------------------------------- def ptm_load? #スイッチによる切り替えが有効かつ該当スイッチがONの時は行わない。 return false if PTM_LOAD::SWITCH != nil && $game_switches[PTM_LOAD::SWITCH] #精査結果、行うべきではないと判定された場合は行わない。 return false if pad_error? #入れ替えを行う。 return true end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # 開始処理 #-------------------------------------------------------------------------- alias start_spad start def start #アクター配列をセーブ。 $game_party.save_pad #本来の処理を実行。 start_spad end #-------------------------------------------------------------------------- # 終了処理 #-------------------------------------------------------------------------- alias terminate_lpad terminate def terminate #入れ替え判定が有効な場合はアクター配列をロード。 $game_party.load_pad if $game_party.ptm_load? #本来の処理を実行。 terminate_lpad end end