ページ 11

「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 15:38
by 進撃のエレン
いつもありがとうございます。

今回解決したい内容は件名にも記載しております通り、

スモールオメガωシロガネ様の
「BootOpeningDemo」と
http://smallomega.com/main.html

うたかたの夢跡様の
「UTA_CommonSave」
https://www.utakata-no-yume.net/gallery ... /cmn_save/
の競合についてです。

最初に「UTA_CommonSave」を導入して、様々なスイッチ&変数を共有セーブデータに保存しておりました。

後に「BootOpeningDemo」を導入して、オープニングデモを作成していた所、
共有セーブデータが全てクリアされてしまう現象が発生致しました。

コード: 全て選択

    // 最初のシーンに遷移している部分を書き換え
    var _Scene_Boot_start = Scene_Boot.prototype.start;
    Scene_Boot.prototype.start = function()
    {
        if (DataManager.isBattleTest() || DataManager.isEventTest())
        {
            // デバッグ機能だけは通常の動作
            _Scene_Boot_start.call(this);
        }
        else
        {
            // 開始フラグリセット
            openingDemoEnd = false;
            // 開始初期化処理
            Scene_Base.prototype.start.call(this);
            this.updateDocumentTitle();
            SoundManager.preloadImportantSounds();
            DataManager.createGameObjects();
            DataManager.selectSavefileForNewGame();
            Graphics.frameCount = 0;
            // エラーチェック
            if (firstMapId == 0) {
                throw new Error("(BootOpeningDemo) parameter firstMapId is invalid");
            }
            this.checkPlayerLocation();
            // マップ呼び出し
            $gamePlayer.reserveTransfer(firstMapId,
                firstStartX, firstStartY);
            SceneManager.goto(Scene_Map);
        }
    };
恐らくこの辺りが関係しているのかなと思うのですが、
どの様にしたら良いのか分かりません。

お力を貸して頂けないでしょうか?

宜しくお願い致します。

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 16:15
by 剣崎 宗二
一応まずは確認。
・UTA_CommonSave側で「Auto on Gameover」「Is Auto」をOFFにしてみましたでしょうか。
・オープニングデモ中に、セーブ関係やCommonSaveプラグインコマンドを動かしておりませんでしょうか。
・「共有セーブデータが全てクリアされてしまう」と言うのはどうやって確認しましたでしょうか?(他のデータをロードしての確認、common.rpgsaveを開いてみた、etc)

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 16:26
by 進撃のエレン
ご連絡ありがとうございます。

>UTA_CommonSave側で「Auto on Gameover」「Is Auto」をOFFにしてみましたでしょうか。
こちら、両方ともOFFでもクリアされてしまいます。

>オープニングデモ中に、セーブ関係やCommonSaveコモンイベントを動かしておりませんでしょうか。
オープニングデモ中に、デモ後のタイトル画面で流す効果音をランダムで指定するために、
変数Xに乱数Yを入れて、その後「CommonSave」でセーブしております。

>「共有セーブデータが全てクリアされてしまう」と言うのはどうやって確認しましたでしょうか?(他のデータをロードしての確認、common.rpgsaveを開いてみた、etc)

共有セーブの対象に指定してあるスイッチXをONにしてファイル1にセーブ、
その語、再起動した後にファイル1をロードした後にスイッチXがONになるはずがOFFの状態だった。

以上です。

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 16:58
by 剣崎 宗二
私の理解が間違っていたなら申し訳ないのですが。

1.ゲームの中でCommonSave saveを行う(スイッチXをCommonSaveに入れた)
2.再起動し、OPデモ内にてCommonSave saveを行う(変数AをCommonSaveに入れた)
3.ゲーム内に入り、CommonSave loadを行う(スイッチXをロード)と、スイッチXの値がリセットされていた。

簡略化すると、以上が現象と言う事でよろしいでしょうか?

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 17:11
by 進撃のエレン
ありがとうございます。
2までは合っています。

通常、セーブされたどのセーブデータをロードしても、
共有セーブされたスイッチXはONになっているはずが、OFFになっているのです。

「BootOpeningDemo」プラグインをOFFにすると、共有セーブされたスイッチXはONのままです。

オープニングデモ内で共有セーブがクリアされた?と思っております。

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 17:19
by 剣崎 宗二
であれば、逆に「Is Auto」をtrueにしていれば直りませんか?

Is AutoがOffの状況ですと、OPデモが開始した際に全てのスイッチはOFFの状態になっております。
その状態でCommonSave saveを(OPデモ中に、変数をセーブするために)実行すれば、無論CommonSaveにセーブされたそのスイッチはOFFになると思われますが…

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 17:43
by 進撃のエレン
>であれば、逆に「Is Auto」をtrueにしていれば直りませんか?
元々trueの状態で今回の現象が起きてしまったのです。
説明足らずで申し訳ございません。

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 21:50
by にゃたま
進撃のエレン様

横から失礼します。

共有セーブデータがクリアされるとのことですが
セーブした時の共有セーブデータの中身はどうなっているのでしょうか?
通常は暗号化されていて見れないのでUTA_CommonSaveの
536行付近に以下のコードを挿入して"中身を見れる化"してみてはいかがでしょうか?
fs.writeFileSync(filePath + '.json', json);//ADD

fs.writeFileSync(filePath, data);の下の行あたりが良いと思います。
これはあくまでデバッグ用としての出力なのでデバッグが終わったらコメント化するか
削除することを忘れないでください。

クリアされた状態でセーブされれば中身は何も入ってないということになるかと思います。
もし入っているのでしたらセーブは正常にできているはずです。
そうやって少しずつどこでデータがクリアされているかを追ってみてはいかがでしょうか?

そしてセーブが正常にされていればCommonSave loadのプラグインコマンドを実行してみて
共有セーブデータがロードできているかの確認をされてみては??

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 21:55
by 剣崎 宗二
進撃のエレン さんが書きました:>であれば、逆に「Is Auto」をtrueにしていれば直りませんか?
元々trueの状態で今回の現象が起きてしまったのです。
説明足らずで申し訳ございません。
すみません、私の見間違いでした。

BootOpeningDemoを入れている場合、例えIs Autoがtrueだとしても、開始時に自動的にCommonSaveのロードは為されません。その為、
OPデモが開始した際に全てのスイッチはOFFの状態になっております。
その状態でCommonSave saveを(OPデモ中に、変数をセーブするために)実行すれば、無論CommonSaveにセーブされたそのスイッチはOFFになると思われますが…
これと同等の状況が発生しております。

回避する為には、オープニングデモ開始時に手動でCommonSave loadを実行してから、変数の変更及び再度のCommonSave saveを行う必要があります。
当方の方でこれを実行した所、ゲーム内でスイッチがリセットされない事が確認できました。

Re: 「BootOpeningDemo」と「UTA_CommonSave」の競合について

Posted: 2019年7月10日(水) 22:10
by 進撃のエレン
にゃたま 様

コメントありがとうございます!
通常は暗号化されていて見れないのでUTA_CommonSaveの
536行付近に以下のコードを挿入して"中身を見れる化"してみてはいかがでしょうか?
こんな方法もあったのですね!
知りませんでした!
教えて頂きましてありがとうございます!


剣崎 宗二 様

ありがとうございます!
回避する為には、オープニングデモ開始時に手動でCommonSave loadを実行してから、変数の変更及び再度のCommonSave saveを行う必要があります。
こちらでセーブされたデータが問題なくロードされた事が確認できました!
BootOpeningDemoを入れている場合、例えIs Autoがtrueだとしても、開始時に自動的にCommonSaveのロードは為されません。
これが原因だったのですね。
コードの書き換えが必要な状況では無くて良かったです。

問題の解決、本当にありがとうございました!! :D :D :D