Versione: 1.00
Autore/i: kaisouryouiki
Informazioni:
Lo script comprime i salvataggi in un unico file invece di dividerli ^^
Istruzioni:
Inserite semplicemente lo script sopra Main.
Script:
=begin
★セーブデータ一括管理★
Save1.rvdata, Save2.rvdataのように通常セーブの数だけ生成されていく
セーブファイルを、1つのセーブファイルにまとめて管理することができます。
● 注意 ●==========================================================
再定義が非常に多いです。
--------------------------------------------------------------------
このスクリプトを導入する前のセーブデータは読み込めなくなります。
====================================================================
ver1.00
Last Update : 2010/08/06
08/06 : 「セーブファイル破棄」に対応
07/30 : 新規(FSMにて。ver0.50)
ろかん http://kaisouryouiki.web.fc2.com/
=end
$rsi = {} if $rsi == nil
$rsi["セーブデータ一括管理"] = true
class Window_SaveFile < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化 ※ 再定義
#--------------------------------------------------------------------------
def initialize(file_index, data)
# 引数が変化しているので注意
super(0, 56 + file_index % 4 * 90, 544, 90)
@time_stamp = Time.at(0)
@file_index = file_index
@file_data = data
# 渡されたデータが空(empty)の際にセーブが存在しないとみなします。
@file_exist = ! @file_data.empty?
load_gamedata
refresh
@selected = false
end
#--------------------------------------------------------------------------
# ● ゲームデータの一部をロード ※ 再定義
#--------------------------------------------------------------------------
def load_gamedata
# データそのものが渡されてきているのでファイルをopenする必要なし。
if @file_exist
@time_stamp = @file_data[0]
@characters = @file_data[1]
@frame_count = @file_data[2]
@last_bgm = @file_data[3]
@last_bgs = @file_data[4]
@game_system = @file_data[5]
@game_message = @file_data[6]
@game_switches = @file_data[7]
@game_variables = @file_data[8]
@total_sec = @frame_count / Graphics.frame_rate
end
end
end
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● コンティニュー有効判定 ※ 再定義
#--------------------------------------------------------------------------
def check_continue
@continue_enabled = false
return unless File.exist?("Save.rvdata")
file = File.open("Save.rvdata", "rb")
for data in Marshal.load(file)
@continue_enabled = ! data.empty?
break if @continue_enabled
end
file.close
end
end
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# ● ファイル名の取得
#--------------------------------------------------------------------------
def filename
return "Save.rvdata"
end
#--------------------------------------------------------------------------
# ● セーブファイルウィンドウの作成 ※ 再定義
#--------------------------------------------------------------------------
def create_savefile_windows
@item_max = 4
@savefile_windows = []
load_data_list # この段階で全てのセーブデータを読み込む
@item_max.times do |i|
# ウィンドウ生成時にインデックスに該当するセーブデータを渡します。
@savefile_windows.push(Window_SaveFile.new(i, @dataList[i]))
end
end
#--------------------------------------------------------------------------
# ● セーブの実行 ※ 再定義
#--------------------------------------------------------------------------
def do_save
write_save_data
return_scene
end
#--------------------------------------------------------------------------
# ● ロードの実行 ※ 再定義
#--------------------------------------------------------------------------
def do_load
read_save_data
$scene = Scene_Map.new
RPG::BGM.fade(1500)
Graphics.fadeout(60)
Graphics.wait(40)
@last_bgm.play
@last_bgs.play
end
#--------------------------------------------------------------------------
# ● 全てのセーブが収まったデータを取得(ウィンドウ生成前に呼ばれるのみ)
#--------------------------------------------------------------------------
def load_data_list
# ファイルが存在しない場合はデータ取得前にファイルを生成する
unless File.exist?(filename)
@dataList = []
@item_max.times do @dataList << [] end
save_data_list
end
file = File.open(filename, "rb")
@dataList = Marshal.load(file)
file.close
end
#--------------------------------------------------------------------------
# ● 全てのセーブが収まったデータを保存(@dataListの内容変更時に呼ばれる)
#--------------------------------------------------------------------------
def save_data_list
file = File.open(filename, "wb")
Marshal.dump(@dataList, file)
file.close
end
#--------------------------------------------------------------------------
# ● セーブデータの書き込み ※ 再定義
#--------------------------------------------------------------------------
def write_save_data
characters = []
for actor in $game_party.members
characters.push([actor.character_name, actor.character_index])
end
$game_system.save_count += 1
$game_system.version_id = $data_system.version_id
@dataList[@index] = [] # クリア
@dataList[@index] << Time.now # セーブした時間:タイムスタンプとして利用
@dataList[@index] << characters
@dataList[@index] << Graphics.frame_count
@dataList[@index] << RPG::BGM::last
@dataList[@index] << RPG::BGS::last
@dataList[@index] << $game_system
@dataList[@index] << $game_message
@dataList[@index] << $game_switches
@dataList[@index] << $game_variables
@dataList[@index] << $game_self_switches
@dataList[@index] << $game_actors
@dataList[@index] << $game_party
@dataList[@index] << $game_troop
@dataList[@index] << $game_map
@dataList[@index] << $game_player
save_data_list # 保存
end
#--------------------------------------------------------------------------
# ● セーブデータの読み込み ※ 再定義
#--------------------------------------------------------------------------
def read_save_data
Graphics.frame_count = @dataList[@index][2]
@last_bgm = @dataList[@index][3]
@last_bgs = @dataList[@index][4]
$game_system = @dataList[@index][5]
$game_message = @dataList[@index][6]
$game_switches = @dataList[@index][7]
$game_variables = @dataList[@index][8]
$game_self_switches = @dataList[@index][9]
$game_actors = @dataList[@index][10]
$game_party = @dataList[@index][11]
$game_troop = @dataList[@index][12]
$game_map = @dataList[@index][13]
$game_player = @dataList[@index][14]
if $game_system.version_id != $data_system.version_id
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
end
#--------------------------------------------------------------------------
# ● ファイル破棄の実行
#--------------------------------------------------------------------------
def file_delete
@dataList[@index] = [] # クリア
save_data_list
end
end













