【解決】トリアコンタンさんのノベルゲーム総合プラグイン(Ver.1.5.1)のオートセーブ無効時の挙動について

アバター
NAK/22番目の素数
記事: 8
登録日時: 2017年5月24日(水) 06:32
連絡を取る:

【解決】トリアコンタンさんのノベルゲーム総合プラグイン(Ver.1.5.1)のオートセーブ無効時の挙動について

投稿記事by NAK/22番目の素数 » 2017年5月24日(水) 07:14

MVのバージョンは1.4.1です。
オートセーブがオフになっている状態で、ノベルゲームのメニューからセーブを実行すると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/DICE2000/3656f05168697f747cb175209b058aff/raw/45e9e11b7f0dcc835d793e6140d25c89a2e445f5/NobleMushroom_with_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":""}]
最後に編集したユーザー NAK/22番目の素数 on 2017年5月25日(木) 06:40 [ 編集 1 回目 ]

奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: トリアコンタンさんのノベルゲーム総合プラグイン(Ver.1.5.1)のオートセーブ無効時の挙動について

投稿記事by 奏ねこま » 2017年5月24日(水) 18:59

ご提示のプラグインをMV1.4.1に入れて試してみましたが、
オートセーブOFFでメニューから正常にセーブできました。
トリアコンタンさんのサイトにある1.5.1で試しても、同様に正常動作しました。
何か他のプラグインと競合を起こしている可能性はないでしょうか?
アバター
NAK/22番目の素数
記事: 8
登録日時: 2017年5月24日(水) 06:32
連絡を取る:

Re: トリアコンタンさんのノベルゲーム総合プラグイン(Ver.1.5.1)のオートセーブ無効時の挙動について

投稿記事by NAK/22番目の素数 » 2017年5月24日(水) 21:32

>奏ねこまさん
検証ありがとうございます。
トピック投稿時点で他のプラグインは使用していませんでしたが、
改めて、新規作成したプロジェクトに当該プラグインのみをオートセーブOFFで適用、
ポーズメニューからのセーブを試みましたが、やはりゼロバイトで書き出されてしまいます。
ブラウザ用にデプロイメントしたものもヌルで書き出されてしまいます。

あと、分かりづらい書き方になっていましたが、
私がリンクを貼ったプラグイン(NobleMushroom_with_history.js)ではゼロバイトエラーを回避できています。

やはり環境依存の問題なのかも知れません。
一応、OSは64ビット版のWindows10Home、ブラウザはChromeでテストしております。

追記:オートセーブをONにするとポーズメニューからのセーブもオートセーブも正常に動きます。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: トリアコンタンさんのノベルゲーム総合プラグイン(Ver.1.5.1)のオートセーブ無効時の挙動について

投稿記事by トリアコンタン » 2017年5月25日(木) 01:15

こんばんは!
現象が発生しているのはイベント中にキャンセルキーで表示されるポーズメニュー(本プラグイン独自の仕様)からセーブした場合かと思います。(通常のメニュー画面からのセーブでは発生しない)
であればこちらで現象を確認、修正しました。お手数をお掛けしますが、ご確認をお願いします。

1.5.1で オートセーブ無効時にポーズメニューからセーブすると、セーブ内容が空になる問題を修正(ver1.5.2)
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/NobleMushroom.js
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
NAK/22番目の素数
記事: 8
登録日時: 2017年5月24日(水) 06:32
連絡を取る:

Re: 【解決】トリアコンタンさんのノベルゲーム総合プラグイン(Ver.1.5.1)のオートセーブ無効時の挙動について

投稿記事by NAK/22番目の素数 » 2017年5月25日(木) 06:42

>トリアコンタンさん
Ver.1.5.2で、正常にセーブできることを確認しました。
この度はありがとうございました。

トピックのタイトルを編集して【解決】を入れました。

“MV:質問” へ戻る