=begin RGSS3 ★ セーブデータ一括管理 ★ Save1.rvdata2, Save2.rvdata2のように通常セーブの数だけ生成されていく セーブファイルを、1つのセーブファイルにまとめて管理することができます。 ● 注意 ●========================================================== 再定義が非常に多いです。 -------------------------------------------------------------------- このスクリプトを導入する前のセーブデータは読み込めなくなります。 ==================================================================== ver1.00 Last Update : 2013/06/28 06/28 : RGSS2からの移植 ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =end $rsi = {} if $rsi == nil $rsi["セーブデータ一括管理"] = true class << DataManager #-------------------------------------------------------------------------- # ● モジュール初期化 #-------------------------------------------------------------------------- alias init_save_list init def init load_data_list init_save_list end #-------------------------------------------------------------------------- # ● セーブファイルの存在判定 ※再定義 #-------------------------------------------------------------------------- def save_file_exists?(index = nil) if index @dataList[index] else @dataList.any?{|save_obj| save_obj} end end #-------------------------------------------------------------------------- # ● ファイル名の作成 ※再定義 #-------------------------------------------------------------------------- def make_filename "Save.rvdata2" end #-------------------------------------------------------------------------- # ● 全てのセーブが収まったデータを取得 #-------------------------------------------------------------------------- def load_data_list unless File.exist?(make_filename) @dataList = Array.new(savefile_max) save_data_list end File.open(make_filename, "rb"){|file| @dataList = Marshal.load(file)} end #-------------------------------------------------------------------------- # ● 全てのセーブが収まったデータを保存(@dataListの内容変更時に呼ばれる) #-------------------------------------------------------------------------- def save_data_list File.open(make_filename, "wb"){|file| Marshal.dump(@dataList, file)} end #-------------------------------------------------------------------------- # ● セーブオブジェクトの作成 #-------------------------------------------------------------------------- def make_save_object Marshal.load(Marshal.dump([Time.now, make_save_header, make_save_contents])) end #-------------------------------------------------------------------------- # ● セーブオブジェクトの取得 #-------------------------------------------------------------------------- def get_save_object(index) Marshal.load(Marshal.dump(@dataList[index])) end #-------------------------------------------------------------------------- # ● セーブファイルのバックアップ #-------------------------------------------------------------------------- def save_file_backup File.rename(make_filename, make_filename + ".backup") end #-------------------------------------------------------------------------- # ● セーブファイルのリストア (セーブ失敗時に呼ばれる) #-------------------------------------------------------------------------- def save_file_restore File.rename(make_filename + ".backup", make_filename) load_data_list end #-------------------------------------------------------------------------- # ● バックアップの削除 #-------------------------------------------------------------------------- def delete_backup File.delete(make_filename + ".backup") rescue nil end #-------------------------------------------------------------------------- # ● セーブの実行(例外処理なし) ※再定義 #-------------------------------------------------------------------------- def save_game_without_rescue(index) save_file_backup $game_system.on_before_save @dataList[index] = make_save_object @last_savefile_index = index save_data_list delete_backup true end #-------------------------------------------------------------------------- # ● セーブファイルの削除 ※再定義 #-------------------------------------------------------------------------- def delete_save_file(index) save_file_restore rescue nil end #-------------------------------------------------------------------------- # ● ロードの実行(例外処理なし) ※再定義 #-------------------------------------------------------------------------- def load_game_without_rescue(index) if @dataList[index] extract_save_contents(get_save_object(index)[2]) reload_map_if_updated @last_savefile_index = index true else false end end #-------------------------------------------------------------------------- # ● セーブヘッダのロード(例外処理なし) ※再定義 #-------------------------------------------------------------------------- def load_header_without_rescue(index) get_save_object(index)[1] end #-------------------------------------------------------------------------- # ● セーブファイルの更新日時を取得 ※再定義 #-------------------------------------------------------------------------- def savefile_time_stamp(index) @dataList[index] ? @dataList[index][0] : Time.at(0) end end class Scene_Load < Scene_File #-------------------------------------------------------------------------- # ● ファイル操作の有効判定 ※再定義 #-------------------------------------------------------------------------- def enable_file? DataManager.save_file_exists?(@index) end end