【解決済み】YEP_ClassChangeCoreの仕様について

(3)
記事: 23
登録日時: 2017年2月02日(木) 14:59

【解決済み】YEP_ClassChangeCoreの仕様について

投稿記事by (3) » 2017年3月27日(月) 10:01

いつもお世話になっております。
そしてご迷惑をおかけしております。

今回、ずっと気になっていたのですが、放置していたことがあったので質問をさせていただきます。
YEP_ClassChangeCoreを使わせていただきクラスチェンジを実装しているのですが、クラスチェンジをする際にクラスごとのレベル表示が間違って表示されてしまいます。

プラグインの内部に関して私は一切弄ることができない人間ですが、一部設定を変えたときの反応を見るとどうやら新しいクラスを覚えたときに、レベル表示の部分のみがすべてのクラスのレベルを統一する設定のようになってるように思いました。
しかし、完全にそうとも言い切れず本来のレベルより1レベルだけ少なく表示されている場合もあります。その際
に普通にレベルが上がるとずれたままレベルが上がります。

他にもネット上で調べましたが、どうも答えがうまく見つからないのです……もしどなたかお分かりになられます方がいらっしゃいましたらお教えいただきたいです。
最後に編集したユーザー (3) on 2017年4月25日(火) 05:04 [ 編集 2 回目 ]

アイス
記事: 48
登録日時: 2017年2月19日(日) 11:49

Re: YEP_ClassChangeCoreの仕様について

投稿記事by アイス » 2017年3月31日(金) 17:17

解決されましたか?

YEP_js よく知らないんで何とも言えませんが
新規プロジェクトで最新のYEP_ClassChangeCoreのみを導入しても
同じ現象になりますか?

何かと競合してるようにも思えますが
とりあえずサンプル画像かなんかがあると嬉しいです
(3)
記事: 23
登録日時: 2017年2月02日(木) 14:59

Re: YEP_ClassChangeCoreの仕様について

投稿記事by (3) » 2017年4月05日(水) 06:20

返信ありがとうございます。
そして、遅れまして申し訳ありません。

新規プロジェクトなどで試していますが、どうも問題がないようです。
しかし、元のプロジェクトだと他のプラグインをすべて切っても同じ現象が起こります。

YEP_CoreEngine、YEP_ClassChangeCoreのみにしても同じ反応が起こるので、ゲーム内設定の何かだと思うのですが……ある程度製作が進んでいたため設定をした項目が多く、絞り込みまでにもう少し時間がかかりそうです。

ある程度見当がつきましたら画像とともに報告させていただきます。
(3)
記事: 23
登録日時: 2017年2月02日(木) 14:59

Re: YEP_ClassChangeCoreの仕様について

投稿記事by (3) » 2017年4月06日(木) 06:13

問題点の絞り込みができたのでご報告させていただきます。

今回、絞っていったところ経験値テーブルによる問題だということがわかりました。

こちらに必要と思われる画像を添付させていただきます。
(すべての職がLv3の状態です)

このように表示が変わっていましたが、実際の状態だとジョブの数が多く皆目見当がつかない状態でした。
そこでジョブを減らしてみたところ、経験値テーブルが同じもの同士は影響が出ていませんでした。

こちらのジョブはすべて経験値テーブルに違いがあるものです。
まだ細かい検証などはできていませんが、ほぼ確実に問題点はここだと思われます。
添付ファイル
魔紙使い選択時.PNG
魔紙使い選択時.PNG (163.39 KiB) 閲覧数: 4950 回
盗人選択時.PNG
盗人選択時.PNG (166.55 KiB) 閲覧数: 4950 回
僧侶選択時.PNG
僧侶選択時.PNG (167.84 KiB) 閲覧数: 4950 回
冒険者選択時.PNG
冒険者選択時.PNG (165.51 KiB) 閲覧数: 4950 回
(3)
記事: 23
登録日時: 2017年2月02日(木) 14:59

Re: YEP_ClassChangeCoreの仕様について

投稿記事by (3) » 2017年4月06日(木) 06:14

テーブルのほうの画像を載せ忘れていました。
申し訳ありません。

もし、これらの情報から打開策を思いついたり知っている方がいたら、是非教えていただきたいです!
添付ファイル
魔紙使い経験値.PNG
魔紙使い経験値.PNG (64.99 KiB) 閲覧数: 4950 回
盗人経験値.PNG
盗人経験値.PNG (64.75 KiB) 閲覧数: 4950 回
僧侶経験値.PNG
僧侶経験値.PNG (64.47 KiB) 閲覧数: 4950 回
冒険者経験値.PNG
冒険者経験値.PNG (64.49 KiB) 閲覧数: 4950 回
(3)
記事: 23
登録日時: 2017年2月02日(木) 14:59

Re: YEP_ClassChangeCoreの仕様について

投稿記事by (3) » 2017年4月25日(火) 05:03

今回、皆様にご迷惑をおかけいたしました。

結局、この問題は解決しないまま妥協案で済ませることにいたしました。
色々と考えてくださっていた方もいるかもしれませんが、申し訳ありません。

色々と有難うございました。
アバター
剣崎 宗二
記事: 681
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: 【解決済み】YEP_ClassChangeCoreの仕様について

投稿記事by 剣崎 宗二 » 2017年4月25日(火) 10:17

質問に気づくのが遅くて申し訳ございません…
すでに終了宣言が成されている所、申し訳ございませんが、一応後から見る方のために何故こうなったのかの解説を。

問題点はYEP_ClassChangeCore内、以下のFunctionにあります。

コード: 全て選択

Game_Actor.prototype.classLevel = function(classId) {
    if (Yanfly.Param.CCCMaintainLv) return this.level;
    if (this._exp[classId] === undefined) this._exp[classId] = 0;
    var level = 1;
    for (;;) {
      if (level >= this.maxLevel()) break;
      if (this.expForLevel(level + 1) > this._exp[classId]) break;   //←【ここ!!!!!】
      level++;
    }
    return level;
};


Game_Actor.prototype.expForLevelの定義を観察しますと、

コード: 全て選択

var c = this.currentClass();

とあるように、「キャラクターの現在のクラスの経験値テーブル」を参照しているのです…


解としては別途、ParameterとしてClassIdを受け取る似たような機能のFunctionを用意し、それで代わりに判定すればよいかと。

一例として以下。

コード: 全て選択

Game_Actor.prototype.expForLevelByClass = function(level, classId) {
    var c = classId ? $dataClasses[classId]: this.currentClass();
    var basis = c.expParams[0];
    var extra = c.expParams[1];
    var acc_a = c.expParams[2];
    var acc_b = c.expParams[3];
    return Math.round(basis*(Math.pow(level-1, 0.9+acc_a/250))*level*
            (level+1)/(6+Math.pow(level,2)/50/acc_b)+(level-1)*extra);
};



そしてYEP_ClassChangeCore内Functionを以下のようにすれば…

コード: 全て選択

Game_Actor.prototype.classLevel = function(classId) {
    if (Yanfly.Param.CCCMaintainLv) return this.level;
    if (this._exp[classId] === undefined) this._exp[classId] = 0;
    var level = 1;
    for (;;) {
      if (level >= this.maxLevel()) break;
      if (this.expForLevelByClass(level + 1, classId) > this._exp[classId]) break;   //←【書き換え】
      level++;
    }
    return level;
};


いけるかと思います。
(飽くまでもロジックを示すための物でテストしていないため、このまま動くとは限りません。ご容赦ください)
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
(3)
記事: 23
登録日時: 2017年2月02日(木) 14:59

Re: 【解決済み】YEP_ClassChangeCoreの仕様について

投稿記事by (3) » 2017年4月25日(火) 12:24

回答の方ありがとうございます!

なるほど、内部をある程度しっかり弄らないといけない問題だったのですね……
それでも問題の大本が解りスッキリ致しました!

もし、自分で弄れそうなら頑張ってみたいと思います!
有難うございました! :D

“MV:質問” へ戻る