【解決済み】ランダムエンチャ(DreamX_RandomPrefixesSuffixes.js)によるセーブデータの肥大化

アバター
SKMT
記事: 8
登録日時: 2018年11月22日(木) 15:59
連絡を取る:

【解決済み】ランダムエンチャ(DreamX_RandomPrefixesSuffixes.js)によるセーブデータの肥大化

投稿記事by SKMT » 2018年12月13日(木) 02:18

はじめまして。




制作しているゲームにランダムエンチャントな装備を実現するためにアイテム個別化を導入しているのですが、こうすると装備を入手するごとにセーブデータがどんどん肥大化してしまいます。
装備を売っても今まで入手した個別化装備のデータはセーブ時に保存していくっぽく肥大化は進む一方となってしまっています。

セーブデータが肥大化するとプレイヤーがやり込むことによってセーブ、ロードにすごい時間がかかっていくようになってしまいまともにゲームが出来なくなっていきます。



具体的な例としまして YEP_ItemCore.js というプラグインを導入したら装備を入手するごとに手持ちの装備を売ってもセーブデータが肥大化していきます。



この減少をなんとか抑えることは出来ないでしょうか?

色々な検索ワードで調べたり、試行錯誤を繰り返してみてはいるのですが解決方法が見つからないのでこちらに書き込ませていただきました。
もし何か解決策がありそうでしたらよろしければアドバイスをください。


それではよろしくおねがいします。
最後に編集したユーザー SKMT on 2018年12月22日(土) 17:41 [ 編集 2 回目 ]

アバター
しぐれん
記事: 972
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by しぐれん » 2018年12月13日(木) 13:48

YEP_ItemCoreはどこで入手した物でしょうか?
さすがにこのバグが放置されているとは考えづらく最新版では修正されていると思います。
現在、プラグイン依頼はお休み中です。
アバター
SKMT
記事: 8
登録日時: 2018年11月22日(木) 15:59
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by SKMT » 2018年12月13日(木) 16:24

返信アドバイスありがとうございます。

確かに最新版ではなかったと気付き、最新版(YEP_ItemCore v1.30)をDLしてYEP_ItemCore.jsプラグインのみを使用した新しいプロジェクトで試してみましたが結果は変わらずでした。

個別化された装備を数百くらい入手しただけで100KB越え出してしまうのでアイテム入手量が多い製作中のゲームではかなりきつい問題になっています。
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by 剣崎 宗二 » 2018年12月14日(金) 09:26

その新規プロジェクトで、入手したアイテムの内半数程を売り払ってもデータ量は小さくなりませんでしょうか?

しぐれんさんが「最新版では修正されている」と申し上げられたのは「手持ちの装備を売ってもセーブデータが肥大化」の部分かと思われます。
入手したアイテムのデータはどこかしらにセーブしなければいけないので(でないと、ロードした際にそれがすべて消えます)「大量の個別化アイテムを所持した場合のセーブデータ肥大化」は物理的に不可避です。

逆に「最新版でも装備を売り払ってもセーブデータのサイズが減らない」というのであればそれは不思議な現象で、調査を要しますが…
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
SKMT
記事: 8
登録日時: 2018年11月22日(木) 15:59
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by SKMT » 2018年12月14日(金) 21:51

剣崎 さん返信ありがとうございます。

おっしゃる通りYEP_ItemCore.js単体で物売りすればアイテムのデータ量は肥大化しませんが、DreamX_RandomPrefixesSuffixes.js(最新版、v1.26)というランダムエンチャントを可能にするプラグインを併用し、ランダムエンチャントを実装している装備を入手させ入手した分すべて売り払っても謎のデータが蓄積されセーブデータが肥大化していくことがわかりました。

上記の返信はYEP_ItemCore.jsプラグインのみと書いてましたが自分のミスでした。間違った情報を書いてしまい、話をややこしくさせてしまって申し訳ありません。
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by 剣崎 宗二 » 2018年12月18日(火) 16:17

テスト用のプロジェクトの構築があまりにも面倒で実測できませんが、何点か確認するとよいかもしれない要素がある

・該当の2点のプラグイン以外に何か導入しているものはありませんでしょうか。(アイテム耐久度、ショップ関連等)
・プラグインの並び順は「ItemCoreがDreamX_RandomPrefixesSuffixesより上」でしょうか。
・入手方法が「イベントによる入手」と「ショップからの購入」のどちらでも同じ問題が起こりますでしょうか。

上記3点に問題がなければ、具体的にセーブのどの部分が肥大しているのか、または肥大したセーブデータのサンプルを提示していただかないと調査は難しいかと考えます。
(個人的に疑わしいのはアイテムがmakeItemとgainItemで2重に登録されていないか、と言う事ですが…若しも予想通りならば修正も極めて面倒なことになります)
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
SKMT
記事: 8
登録日時: 2018年11月22日(木) 15:59
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by SKMT » 2018年12月18日(火) 18:42

剣崎 さん返信ありがとうございます。


・該当の2点のプラグイン以外に何か導入しているものはありませんでしょうか。(アイテム耐久度、ショップ関連等)
・プラグインの並び順は「ItemCoreがDreamX_RandomPrefixesSuffixesより上」でしょうか。
・入手方法が「イベントによる入手」と「ショップからの購入」のどちらでも同じ問題が起こりますでしょうか。


上から順に
・プラグインはItemCoreとDreamX_RandomPrefixesSuffixesのみの使用です。
・並びはItemCoreが上となってます。
・どちらの入手でも肥大化が起きます。



遅ればせながらテストプロジェクトをアップロードしてみました。
https://dotup.org/uploda/dotup.org1721024.zip.html
PASS:1234

右側のNPCがショップとなっていて、左側のNPCは装備をイベントで入手出来るようにしています。
剣には複数のオプションが付く形、斧には一つのオプションが付く形にしています。
どちらも肥大化の感じは同じっぽいですが一応用意しておきました。
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by 剣崎 宗二 » 2018年12月18日(火) 20:22

プロジェクトを確認し、問題を把握致しました。

先ず、現象の発生の理由としては、DreamX_RandomPrefixesSuffixes側のバグ、或いはItemCore更新後にそれに合わせなかった事となります。

詳細は凡そ予想した通りで、registerNewItemがgainItem内(ItemCore側)で一回、makeItem内の一回(DreamX_RandomPrefixesSuffixes側)で計2回実行されております。
それなのに実際に手に入るアイテムはgainItem側の1つなので、makeItem側で登録されたアイテムデータが手に入らず「宙に浮いた状態」となり、延々とセーブデータに残り続けます。

DreamX_RandomPrefixesSuffixes.js
(68.87 KiB) ダウンロード数: 718 回


とりあえず暫定修正を施しましたが、このプラグインは中々に複雑怪奇なつくりをしております為、何かしらの不具合が出る可能性が御座います。
その場合は作者に連絡するか、別のプラグインの採用も考慮した方が良いかもしれません…
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
SKMT
記事: 8
登録日時: 2018年11月22日(木) 15:59
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by SKMT » 2018年12月19日(水) 06:55

剣崎 さん対応ありがとうございます。

修正された DreamX_RandomPrefixesSuffixes.js を使用して最初から通して最後までテストプレイをしてみたところ何事も問題なく進めることができました。
セーブの肥大化問題もしっかりと解決していました。本当にありがとうございます。


これからのことはまた別の話となるのですが、まとめ売りというシステムをイベントのスクリプトと変数を使って導入していたのですが、YEP_ItemCoreを使用して実行すると装備はまとめて売ることはできるのですが装備を入手した時のままのセーブデータ量が売った後にも残ってしまいます。

こちらの原因ももしわかるようであれば教えてもらえたら幸いです。

防具をまとめて処理するスクリプト

コード: 全て選択

var price = 0;
var score = 0;
$gameParty.armors().forEach(function(item){
    if(item.price > 0){//売却可能か
        price = Math.floor($gameParty.numItems(item) * item.price / 2);
        score += price;
        $gameParty.loseItem(item, $gameParty.numItems(item), false);
    }
});
$gameVariables.setValue(15,score);//第一引数に変数IDを入れて下さい。


武器をまとめて処理するスクリプト

コード: 全て選択

var price = 0;
var score = 0;
$gameParty.weapons().forEach(function(item){
    if(item.price > 0){//売却可能か
        price = Math.floor($gameParty.numItems(item) * item.price / 2);
        score += price;
        $gameParty.loseItem(item, $gameParty.numItems(item), false);
    }
});
$gameVariables.setValue(15,score);//第一引数に変数IDを入れて下さい。



https://dotup.org/uploda/dotup.org1721534.zip.html
こちらはサンプルプロジェクトです。
PASS:1234




何はともあれランダムエンチャント導入によるセーブデータの肥大化の問題は解決出来たので本当に助かりました。ありがとうございました。
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: アイテム個別化によるセーブデータの肥大化

投稿記事by 剣崎 宗二 » 2018年12月20日(木) 09:19

時間がなくまだプロジェクトは見れておりませんが、
こちらの件は「YEP_ItemCore」以外何のプラグインも使用せずとも発生する物でしょうか。
(DreamX_RandomPrefixesSuffixes等)

(余談ですが、他の方が同様の問題に遭遇した際、検索で見つけにくくなるため、可能ならば別の質問は別のスレにして頂いた方がわかりやすいかも知れません)
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。

“MV:質問” へ戻る