オートセーブがオフになっている状態で、ノベルゲームのメニューからセーブを実行すると0バイトのファイルが書き出されます。
下記のコードを実行してコメントを取ると、ポーズメニューからの通常セーブ時にStorageManager.saveが二回動いて(二回動く理由がよく分かりませんでした)、一回目の時にはStorageManager.save二つめのif文が実行され、連鎖的にsaveToLocalFileにnullが送られて0バイトのファイルが作られます。二度目にはStorageManager.save二つめのif文が実行されず、saveToLocalFileに元データが行くのですが、上書きされないようです。
実はバージョンアップに気づかず、Ver.1.3.0用にオートセーブ無効化の処理を書いた際に、同様の箇所で詰まりました。
ただ私の対処法ではVer.1.5.1ではうまくいかないようでした。
参考までに:https://gist.githubusercontent.com/DICE ... history.js
もしかしたら他の環境だと挙動が全く違うということも考えられます。
お知恵を貸していただけたらと思います。
テストコード
コード: 全て選択
var _StorageManager_save = StorageManager.save;
StorageManager.save = function(savefileId, json) {
console.log("StorageManager.save");
console.log("this.isAutoSave(savefileId):" + this.isAutoSave(savefileId));
if (this.isAutoSave(savefileId)) {
this._autoSaveJson = json;
if (!paramAutoSave) return;
}
if (DataManager.isShiftAutoSave() && savefileId > 0) {
arguments[1] = this._autoSaveJson;
console.log("this._autoSaveJson:" + this._autoSaveJson);
console.log("arguments[1]:" + arguments[1]);
}
console.log("----------")
_StorageManager_save.apply(this, arguments);
};
var _StorageManager_saveToLocalFile = StorageManager.saveToLocalFile;
StorageManager.saveToLocalFile = function(savefileId, json) {
console.log("StorageManager.saveToLocalFile ");
console.log(json);
if (DataManager.isProcessAutoSave() && this.isAutoSave(savefileId)) {
var data = LZString.compressToBase64(json);
var fs = require('fs');
var filePath = this.localFilePath(savefileId);
fs.writeFile(filePath, data, null, function(err) {
if (!err) return;
console.log(err.stack);
this.makeSaveDirectly();
}.bind(this));
} else {
_StorageManager_saveToLocalFile.apply(this, arguments);
}
};
コード: 全て選択
NobleMushroom.js:768 StorageManager.save
NobleMushroom.js:769 this.isAutoSave(savefileId):false
NobleMushroom.js:776 this._autoSaveJson:null
NobleMushroom.js:777 arguments[1]:null
NobleMushroom.js:779 ----------
NobleMushroom.js:785 StorageManager.saveToLocalFile
NobleMushroom.js:786 null
NobleMushroom.js:768 StorageManager.save
NobleMushroom.js:769 this.isAutoSave(savefileId):false
NobleMushroom.js:779 ----------
NobleMushroom.js:785 StorageManager.saveToLocalFile
NobleMushroom.js:786 [null,{"globalId":"RPGMV","title":"サウンドノベルサンプル","characters":[["",0]],"faces":[["",0]],"playtime":"00:00:08","timestamp":1495576404850,"chapter":""},{"globalId":"RPGMV","title":"サウンドノベルサンプル","characters":[["",0]],"faces":[["",0]],"playtime":"00:00:07","timestamp":1495575548543,"chapter":""},{"globalId":"RPGMV","title":"サウンドノベルサンプル","characters":[["",0]],"faces":[["",0]],"playtime":"00:00:36","timestamp":1495575637461,"chapter":""},{"globalId":"RPGMV","title":"サウンドノベルサンプル","characters":[["",0]],"faces":[["",0]],"playtime":"00:00:01","timestamp":1495576294199,"chapter":""}]