#============================================================================== # ■ パーティーメンバーの退避&復帰 By 貪藻矢射妥← #------------------------------------------------------------------------------ # パーティーメンバーの一時退避、初期化、復元が出来ます # シナリオが複数あってシナリオごとにパーティーメンバーが違うってな場合に # 便利かも。 # # 現行パーティーの一時退避&初期化は # party_save(n) # (この後別のパーティーを参入させてください。) # # パーティーを元に戻すには # party_return(n) # # を使用してください。 # # ※注意! # party_save(n)を続けざまに2回実行すると当然の如く現行メンバーが # 全員消失してしまうので注意してください。 # #============================================================================== # 更新っぽいもの # 2008:02:05 # ・パーティー1つ分しか保存できなかったのを一応2つ分まで拡張 # ・ニューゲームを選ぶとエラー落ちするバグを修正 # # 2008:04:10 # ・配列を使うことによりスクリプトを削減 # ・パーティーのメンバー数や退避スロットをカスタマイズポイントにて変更可能に # # 2008:04:19 # ・セーブ/ロードできない場合の判定を改良 # # 2008:07:01 # ・パーティーメンバー初期化の不具合を修正。 # (おかしいなぁ・・・以前は出なかった気がするんだけどなぁ・・・) # # 2009:03:28 # ・テスト用のダイアログ表示部分の削除忘れを修正 # # 2010:07:17 # ・インタープリターに関数を追加することで、呼び出し関数名を省略化 # # 2011:12:23 # ・ひとつのパーティーの最大アクター数の制限を解除 # # 2012:08:11 # ・VX Ace用スクリプトになっていたバグを修正 module PSL # パーティーメンバーを退避するデータスロットの最大数 SAVEMAX = 10 # エラーメッセージ ERR_MSG_001 = "%sできません" ERR_MSG_002 = "パーティー%s箇所が不正です。" end class Game_Party include PSL #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :save_actors #-------------------------------------------------------------------------- # ● 現行パーティーの一時退避&初期化 #-------------------------------------------------------------------------- def party_save(n) if n < 0 || n > SAVEMAX p sprintf(ERR_MSG_001, "セーブ") else party_save_root(n) party_init end end #-------------------------------------------------------------------------- # ● パーティーを元に戻す #-------------------------------------------------------------------------- def party_return(n) if n < 0 || n > SAVEMAX p sprintf(ERR_MSG_001, "ロード") else party_init party_return_root(n) end end #-------------------------------------------------------------------------- # ● 退避先パーティーの初期化 #-------------------------------------------------------------------------- def party_initialize(n) if @save_actors == nil @save_actors = Array.new(SAVEMAX + 1) @save_actors[0] = false end @save_actors[n] = [] end #-------------------------------------------------------------------------- # ● 現行パーティーの保存 #-------------------------------------------------------------------------- def party_save_root(n) party_initialize(n) tmp_array = [] for i in 1..$game_party.actors.size tmp_array[i - 1] = $game_party.actors[i - 1].id end @save_actors[n] = tmp_array end #-------------------------------------------------------------------------- # ● 現行パーティーの初期化 #-------------------------------------------------------------------------- def party_init for i in 0...$data_actors.size if $data_actors[i] != nil && @actors.include?($game_actors[i]) remove_actor(i) end end end #-------------------------------------------------------------------------- # ● 現行パーティーの復元 #-------------------------------------------------------------------------- def party_return_root(n) for i in 0...@save_actors[n].size add_actor(@save_actors[n][i]) end end end class Interpreter #-------------------------------------------------------------------------- # ● 現行パーティーの一時退避&初期化 #-------------------------------------------------------------------------- def party_save(n) if n.is_a?(Numeric) $game_party.party_save(n) else p sprintf(ERR_MSG_002, "セーブ") end end #-------------------------------------------------------------------------- # ● パーティーを元に戻す #-------------------------------------------------------------------------- def party_return(n) if n.is_a?(Numeric) $game_party.party_return(n) else p sprintf(ERR_MSG_002, "ロード") end end end |