【解決済み】セーブデータを移動させるスクリプト
Posted: 2023年9月27日(水) 23:49
現在トリアコンタンさんのシーンカスタムメニューでメニュー画面を作成中です
セーブデータを移動させるスクリプトを教えて欲しいです。
アルゴリズムは下記を想定していますが他にアルゴリズムがあればそちらでも大丈夫です。
アルゴリズム
選択1回目
現在のシーンを一時的に保存する(データ1)
セーブデータの有無の確認、有ればデータを読み込む(データ2)
データ2を保存する
選択2回目前キャンセル
データ1を読み込む
選択2回目
セーブデータの有無の確認、有れば上書きの確認
無ければデータ2を書き込みする(データ3)
データ2を削除する
試行錯誤のスクリプト
let save_id = $gameVariables.value(4) + 1; // セーブデータのID
let count = $gameVariables.value(16); // 選択回数カウント用変数
// $gameVariables.value(2)はウィンドウに関わるものです
// 選択回数1回目
if (count === 0 && $gameVariables.value(2) === 2) {
DataManager.saveGame(105);
if (DataManager.savefileExists(save_id)) {
DataManager.loadGame(save_id);
$gameVariables.setValue(16, 1); // カウントを1に増加
$gameVariables.setValue(5, save_id);
} else {
alert("セーブデータがありません");
}
}
// 選択回数2回目
else if (count === 1 && $gameVariables.value(2) === 2) {
if (DataManager.savefileExists(save_id)) {
DataManager.saveGame($gameVariables.value(4)+1).then(contents => {
ConfigManager.save();
DataManager.loadGame($gameVariables.value(5));
});
}else{
DataManager.saveGame($gameVariables.value(4)+1).then(contents => {
ConfigManager.save();
DataManager.loadGame($gameVariables.value(5));
});
$gameVariables.setValue(5, null); // 保存したセーブデータオブジェクトをリセット
$gameVariables.setValue(16, 0); // カウントを0にリセット
}
}
SceneManager.changeWindowFocus('W_SaveFile');
参考スクリプト
DataManagerクラス
セーブデータの作成
DataManager.makeSaveContents();
このメソッドは、現在のゲームの状態をキャプチャして、保存すべきデータの内容を生成します。
セーブデータの取得
DataManager.extractSaveContents(contents);
このメソッドは、保存された内容を取り出して、ゲームのオブジェクトに適用します。
セーブデータの保存
DataManager.saveGame(savefileId);
このメソッドは、指定されたsavefileIdでゲームを保存します。
セーブデータの読み込み
DataManager.loadGame(savefileId);
このメソッドは、指定されたsavefileIdからゲームを読み込みます。
セーブデータが存在するかの確認
DataManager.savefileExists(savefileId);
指定されたsavefileIdが存在するかどうかを確認します。
最新のセーブデータのID取得
DataManager.latestSavefileId();
最も最近保存されたセーブデータのIDを返します。
StorageManagerクラス
StorageManager.exists(key)
指定したキーのデータが存在するかを確認します。
引数: key - データのキー
返り値: ブール値(存在する場合はtrue、そうでない場合はfalse)
StorageManager.saveObject(key, value)
オブジェクトをJSON形式で保存します。
引数:
key - 保存するデータのキー
value - 保存するオブジェクト
返り値: Promise
StorageManager.loadObject(key)
キーを指定して保存されたデータをロードします。
引数: key - データのキー
返り値: ロードされたオブジェクトのPromise
StorageManager.remove(key)
指定したキーのデータを削除します。
引数: key - 削除するデータのキー
StorageManager.backup(key)
指定したキーのデータをバックアップします。
引数: key - データのキー
StorageManager.restoreBackup(key)
指定したキーのデータのバックアップを復元します。
引数: key - データのキー
StorageManager.cleanBackup()
不要なバックアップファイルを削除します。
StorageManager.isLocalMode()
ローカルモードで動作しているかどうかを確認します。
返り値: ブール値(ローカルモードの場合はtrue、そうでない場合はfalse)
StorageManager.saveToLocalFile(filePath, data)
データをローカルファイルとして保存します。
引数:
filePath - 保存するファイルのパス
data - 保存するデータ
StorageManager.loadFromLocalFile(filePath)
ローカルファイルからデータをロードします。
引数: filePath - ロードするファイルのパス
返り値: ロードされたデータ
StorageManager.removeLocalFile(filePath)
ローカルファイルを削除します。
引数: filePath - 削除するファイルのパス
セーブデータを移動させるスクリプトを教えて欲しいです。
アルゴリズムは下記を想定していますが他にアルゴリズムがあればそちらでも大丈夫です。
アルゴリズム
選択1回目
現在のシーンを一時的に保存する(データ1)
セーブデータの有無の確認、有ればデータを読み込む(データ2)
データ2を保存する
選択2回目前キャンセル
データ1を読み込む
選択2回目
セーブデータの有無の確認、有れば上書きの確認
無ければデータ2を書き込みする(データ3)
データ2を削除する
試行錯誤のスクリプト
let save_id = $gameVariables.value(4) + 1; // セーブデータのID
let count = $gameVariables.value(16); // 選択回数カウント用変数
// $gameVariables.value(2)はウィンドウに関わるものです
// 選択回数1回目
if (count === 0 && $gameVariables.value(2) === 2) {
DataManager.saveGame(105);
if (DataManager.savefileExists(save_id)) {
DataManager.loadGame(save_id);
$gameVariables.setValue(16, 1); // カウントを1に増加
$gameVariables.setValue(5, save_id);
} else {
alert("セーブデータがありません");
}
}
// 選択回数2回目
else if (count === 1 && $gameVariables.value(2) === 2) {
if (DataManager.savefileExists(save_id)) {
DataManager.saveGame($gameVariables.value(4)+1).then(contents => {
ConfigManager.save();
DataManager.loadGame($gameVariables.value(5));
});
}else{
DataManager.saveGame($gameVariables.value(4)+1).then(contents => {
ConfigManager.save();
DataManager.loadGame($gameVariables.value(5));
});
$gameVariables.setValue(5, null); // 保存したセーブデータオブジェクトをリセット
$gameVariables.setValue(16, 0); // カウントを0にリセット
}
}
SceneManager.changeWindowFocus('W_SaveFile');
参考スクリプト
DataManagerクラス
セーブデータの作成
DataManager.makeSaveContents();
このメソッドは、現在のゲームの状態をキャプチャして、保存すべきデータの内容を生成します。
セーブデータの取得
DataManager.extractSaveContents(contents);
このメソッドは、保存された内容を取り出して、ゲームのオブジェクトに適用します。
セーブデータの保存
DataManager.saveGame(savefileId);
このメソッドは、指定されたsavefileIdでゲームを保存します。
セーブデータの読み込み
DataManager.loadGame(savefileId);
このメソッドは、指定されたsavefileIdからゲームを読み込みます。
セーブデータが存在するかの確認
DataManager.savefileExists(savefileId);
指定されたsavefileIdが存在するかどうかを確認します。
最新のセーブデータのID取得
DataManager.latestSavefileId();
最も最近保存されたセーブデータのIDを返します。
StorageManagerクラス
StorageManager.exists(key)
指定したキーのデータが存在するかを確認します。
引数: key - データのキー
返り値: ブール値(存在する場合はtrue、そうでない場合はfalse)
StorageManager.saveObject(key, value)
オブジェクトをJSON形式で保存します。
引数:
key - 保存するデータのキー
value - 保存するオブジェクト
返り値: Promise
StorageManager.loadObject(key)
キーを指定して保存されたデータをロードします。
引数: key - データのキー
返り値: ロードされたオブジェクトのPromise
StorageManager.remove(key)
指定したキーのデータを削除します。
引数: key - 削除するデータのキー
StorageManager.backup(key)
指定したキーのデータをバックアップします。
引数: key - データのキー
StorageManager.restoreBackup(key)
指定したキーのデータのバックアップを復元します。
引数: key - データのキー
StorageManager.cleanBackup()
不要なバックアップファイルを削除します。
StorageManager.isLocalMode()
ローカルモードで動作しているかどうかを確認します。
返り値: ブール値(ローカルモードの場合はtrue、そうでない場合はfalse)
StorageManager.saveToLocalFile(filePath, data)
データをローカルファイルとして保存します。
引数:
filePath - 保存するファイルのパス
data - 保存するデータ
StorageManager.loadFromLocalFile(filePath)
ローカルファイルからデータをロードします。
引数: filePath - ロードするファイルのパス
返り値: ロードされたデータ
StorageManager.removeLocalFile(filePath)
ローカルファイルを削除します。
引数: filePath - 削除するファイルのパス