ページ 1 / 1
【解決済み】YEP_ClassChangeCoreの仕様について
Posted: 2017年3月27日(月) 10:01
by (3)
いつもお世話になっております。
そしてご迷惑をおかけしております。
今回、ずっと気になっていたのですが、放置していたことがあったので質問をさせていただきます。
YEP_ClassChangeCoreを使わせていただきクラスチェンジを実装しているのですが、クラスチェンジをする際にクラスごとのレベル表示が間違って表示されてしまいます。
プラグインの内部に関して私は一切弄ることができない人間ですが、一部設定を変えたときの反応を見るとどうやら新しいクラスを覚えたときに、レベル表示の部分のみがすべてのクラスのレベルを統一する設定のようになってるように思いました。
しかし、完全にそうとも言い切れず本来のレベルより1レベルだけ少なく表示されている場合もあります。その際
に普通にレベルが上がるとずれたままレベルが上がります。
他にもネット上で調べましたが、どうも答えがうまく見つからないのです……もしどなたかお分かりになられます方がいらっしゃいましたらお教えいただきたいです。
Re: YEP_ClassChangeCoreの仕様について
Posted: 2017年3月31日(金) 17:17
by アイス
解決されましたか?
YEP_js よく知らないんで何とも言えませんが
新規プロジェクトで最新のYEP_ClassChangeCoreのみを導入しても
同じ現象になりますか?
何かと競合してるようにも思えますが
とりあえずサンプル画像かなんかがあると嬉しいです
Re: YEP_ClassChangeCoreの仕様について
Posted: 2017年4月05日(水) 06:20
by (3)
返信ありがとうございます。
そして、遅れまして申し訳ありません。
新規プロジェクトなどで試していますが、どうも問題がないようです。
しかし、元のプロジェクトだと他のプラグインをすべて切っても同じ現象が起こります。
YEP_CoreEngine、YEP_ClassChangeCoreのみにしても同じ反応が起こるので、ゲーム内設定の何かだと思うのですが……ある程度製作が進んでいたため設定をした項目が多く、絞り込みまでにもう少し時間がかかりそうです。
ある程度見当がつきましたら画像とともに報告させていただきます。
Re: YEP_ClassChangeCoreの仕様について
Posted: 2017年4月06日(木) 06:13
by (3)
問題点の絞り込みができたのでご報告させていただきます。
今回、絞っていったところ経験値テーブルによる問題だということがわかりました。
こちらに必要と思われる画像を添付させていただきます。
(すべての職がLv3の状態です)
このように表示が変わっていましたが、実際の状態だとジョブの数が多く皆目見当がつかない状態でした。
そこでジョブを減らしてみたところ、経験値テーブルが同じもの同士は影響が出ていませんでした。
こちらのジョブはすべて経験値テーブルに違いがあるものです。
まだ細かい検証などはできていませんが、ほぼ確実に問題点はここだと思われます。
Re: YEP_ClassChangeCoreの仕様について
Posted: 2017年4月06日(木) 06:14
by (3)
テーブルのほうの画像を載せ忘れていました。
申し訳ありません。
もし、これらの情報から打開策を思いついたり知っている方がいたら、是非教えていただきたいです!
Re: YEP_ClassChangeCoreの仕様について
Posted: 2017年4月25日(火) 05:03
by (3)
今回、皆様にご迷惑をおかけいたしました。
結局、この問題は解決しないまま妥協案で済ませることにいたしました。
色々と考えてくださっていた方もいるかもしれませんが、申し訳ありません。
色々と有難うございました。
Re: 【解決済み】YEP_ClassChangeCoreの仕様について
Posted: 2017年4月25日(火) 10:17
by 剣崎 宗二
質問に気づくのが遅くて申し訳ございません…
すでに終了宣言が成されている所、申し訳ございませんが、一応後から見る方のために何故こうなったのかの解説を。
問題点は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;
};
いけるかと思います。
(飽くまでもロジックを示すための物でテストしていないため、このまま動くとは限りません。ご容赦ください)
Re: 【解決済み】YEP_ClassChangeCoreの仕様について
Posted: 2017年4月25日(火) 12:24
by (3)
回答の方ありがとうございます!
なるほど、内部をある程度しっかり弄らないといけない問題だったのですね……
それでも問題の大本が解りスッキリ致しました!
もし、自分で弄れそうなら頑張ってみたいと思います!
有難うございました!
