【解決済】会心カスタマイズプラグインの細かい仕様について

ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

【解決済】会心カスタマイズプラグインの細かい仕様について

投稿記事by ksk » 2024年1月24日(水) 23:25

いつもお世話になっております。

トリアコンタン様作の会心カスタマイズ - CustomizeCritical.jsについて
https://raw.githubusercontent.com/triac ... ritical.js

このプラグインの機能として、スキルのメモ欄に<CC確率加算:50>というような記述をすることで、
該当スキル使用時の会心発生率を+50%することが出来るようになります。
これによって、基礎威力が低い代わりに改心発生率が高いスキルなどを実装できるようになるのですが

●プラグインの説明文ーーーーーーーーーーーーーーーーーーーー
・会心の確率を加算します。元の確率に計算結果が加算されます。(百分率)
<CC確率加算:加算値>
例:<CC確率加算:50> //元の確率+50%で発生
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記のように、元の確率に対してメモ欄で設定した数値が加算される仕様であるため、
受け手側の会心回避率を100%に設定した場合でも完全に会心攻撃を受ける可能性を0に出来ず、
スキルのメモ欄で設定した数値分は会心攻撃を受ける可能性が生じてしまいます。

●計算式の例ーーーーーーーーーーーーーーーーーーーーーーーー
・プラグイン導入前
a.cri * (1 - b.cev)
・プラグイン導入後 <CC確率加算:50>の場合
(a.cri * (1 - b.cev) ) + 0.5
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
この仕様を、受け手側の会心回避率が100%の場合は絶対に会心が発生しないよう、
<CC確率加算:50>の場合には
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(a.cri + 0.5) * (1 - b.cev)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
と処理されるように仕様を変更したいと考えております。
プラグインの改変、もしくはメモ欄への設定方法で実現する方法をご存知の方がおりましたら
お力添えいただけないでしょうか。
どうぞよろしくお願いいたします。
最後に編集したユーザー ksk on 2024年1月27日(土) 22:33 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 467
登録日時: 2018年12月23日(日) 13:55

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ecf5DTTzl6h6lJj02 » 2024年1月25日(木) 14:57

こんにちは。
ksk さんが書きました:いつもお世話になっております。

トリアコンタン様作の会心カスタマイズ - CustomizeCritical.jsについて
https://raw.githubusercontent.com/triac ... ritical.js

このプラグインの機能として、スキルのメモ欄に<CC確率加算:50>というような記述をすることで、
該当スキル使用時の会心発生率を+50%することが出来るようになります。
これによって、基礎威力が低い代わりに改心発生率が高いスキルなどを実装できるようになるのですが

●プラグインの説明文ーーーーーーーーーーーーーーーーーーーー
・会心の確率を加算します。元の確率に計算結果が加算されます。(百分率)
<CC確率加算:加算値>
例:<CC確率加算:50> //元の確率+50%で発生
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記のように、元の確率に対してメモ欄で設定した数値が加算される仕様であるため、
受け手側の会心回避率を100%に設定した場合でも完全に会心攻撃を受ける可能性を0に出来ず、
スキルのメモ欄で設定した数値分は会心攻撃を受ける可能性が生じてしまいます。

●計算式の例ーーーーーーーーーーーーーーーーーーーーーーーー
・プラグイン導入前
a.cri * (1 - b.cev)
・プラグイン導入後 <CC確率加算:50>の場合
(a.cri * (1 - b.cev) ) + 0.5
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
この仕様を、受け手側の会心回避率が100%の場合は絶対に会心が発生しないよう、
<CC確率加算:50>の場合には
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(a.cri + 0.5) * (1 - b.cev)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
と処理されるように仕様を変更したいと考えております。
プラグインの改変、もしくはメモ欄への設定方法で実現する方法をご存知の方がおりましたら
お力添えいただけないでしょうか。
どうぞよろしくお願いいたします。


会心カスタマイズプラグイン(CustomizeCritical.js)の 143 行目から始まっている、
Game_Actor.prototype.judgeCritical というメソッドの 149行目 と 150 行目、

コード: 全て選択

            var addValue = getMetaValues(this.item(), ['確率加算', 'ProbAdd']);
            itemCritical = _Game_Action_itemCri.apply(this, arguments) + (addValue ? getArgNumber(addValue) / 100 : 0);

という部分が、<CC確率加算> が設定されている時のクリティカル率の計算を行っている部分です。
この内容を、変更してください。
(内容を理解して、適切に変更できる方だと思うので、詳しく書きませんが大丈夫ですよね?)

以上、ご確認ください。
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ksk » 2024年1月27日(土) 12:21

こんにちは、返信が遅くなってしまいすみません。
重ねて申し訳ないのですが、各要素に何が書かれているのか理解することは出来るのですが、
自分が望む挙動を実装するためにどう書き換えたら良いのか分かりません。

コード: 全て選択

Game_Action.prototype.itemCri = function(target) {
    return this.item().damage.critical ? this.subject().cri * (1 - target.cev) : 0;
};

rpg_objectsのこの部分が会心判定を定義していますので
これを上手く当て込めばよいのだというところまでは理解しています。

コード: 全て選択

    var addValue = getMetaValues(this.item(), ['確率加算', 'ProbAdd']);
            itemCritical = ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0))*(1 - target.cev) ;

上記のようにそれっぽい内容に書き換えてみたりと試行錯誤してみたのですが、
いかんせんプログラミングの基礎を理解できていないため自分には難しく……。

お手数ですが改変方法についてもご教示いただけないでしょうか。
ecf5DTTzl6h6lJj02
記事: 467
登録日時: 2018年12月23日(日) 13:55

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ecf5DTTzl6h6lJj02 » 2024年1月27日(土) 13:58

こんにちは。
ksk さんが書きました:こんにちは、返信が遅くなってしまいすみません。
重ねて申し訳ないのですが、各要素に何が書かれているのか理解することは出来るのですが、
自分が望む挙動を実装するためにどう書き換えたら良いのか分かりません。

コード: 全て選択

Game_Action.prototype.itemCri = function(target) {
    return this.item().damage.critical ? this.subject().cri * (1 - target.cev) : 0;
};

rpg_objectsのこの部分が会心判定を定義していますので
これを上手く当て込めばよいのだというところまでは理解しています。

コード: 全て選択

    var addValue = getMetaValues(this.item(), ['確率加算', 'ProbAdd']);
            itemCritical = ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0))*(1 - target.cev) ;

上記のようにそれっぽい内容に書き換えてみたりと試行錯誤してみたのですが、
いかんせんプログラミングの基礎を理解できていないため自分には難しく……。

お手数ですが改変方法についてもご教示いただけないでしょうか。

スキルの会心ありなしに関する判定が抜けてしまっていますが、
それを除けば、提示されているコードで合っていると思います。

一応、会心の判定を入れた式の例を示しておきます。
スキルが会心なしになっていても、確率加算するのか否かで、2通りの書き方になると思います。
ちなみに、会心カスタマイズプラグインでは、スキルが会心なしでも、確率加算するようになっているみたいです。

会心なしの時は会心しない(確率加算しない)場合の計算式の例

コード: 全て選択

itemCritical = this.item().damage.critical ? ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev)) : 0;


会心なしでも確率加算する場合の計算式の例

コード: 全て選択

itemCritical = (this.item().damage.critical ? this.subject().cri : 0 + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev);


上述通り、会心ありなしの判定が抜けているだけなので、
会心なしのスキルでも、アクターの会心率が算出されるようになっていた、というだけで、
会心ありのスキルに関しては、問題なく動作していたと思われますが、
何か想定と違う挙動があったのでしょうか?
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ksk » 2024年1月27日(土) 18:27

返信ありがとうございます。
それぞれのコードの挙動について記載させていただきます。

①自分で修正してみたコード
・スキルの設定が会心あり・会心なしどちらの場合も改心が発生しない。

コード: 全て選択

itemCritical = ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0))*(1 - target.cev) ;


②会心なしの時は会心しない(確率加算しない)場合の計算式の例
・スキルの設定が会心ありの場合、改心が発生。
・スキルの設定が会心なしの場合、改心が発生しない。

コード: 全て選択

itemCritical = this.item().damage.critical ? ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev)) : 0;


③会心なしでも確率加算する場合の計算式の例
・スキルの設定が会心ありの場合、改心が発生しない。
・スキルの設定が会心なしの場合、改心が発生。

コード: 全て選択

itemCritical = (this.item().damage.critical ? this.subject().cri : 0 + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev);


①のコードはそもそも会心の判定が発生していないようでした。
②は想定通りの挙動かと思います。
③については、スキルの設定が改心ありになっている場合に会心が発生しないようです。

ひとまず、②を適用することで望む挙動を実装できそうではあります。
ご確認いただければ幸いです。
ecf5DTTzl6h6lJj02
記事: 467
登録日時: 2018年12月23日(日) 13:55

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ecf5DTTzl6h6lJj02 » 2024年1月27日(土) 20:34

こんばんは。
ksk さんが書きました:返信ありがとうございます。
それぞれのコードの挙動について記載させていただきます。

①自分で修正してみたコード
・スキルの設定が会心あり・会心なしどちらの場合も改心が発生しない。

コード: 全て選択

itemCritical = ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0))*(1 - target.cev) ;


②会心なしの時は会心しない(確率加算しない)場合の計算式の例
・スキルの設定が会心ありの場合、改心が発生。
・スキルの設定が会心なしの場合、改心が発生しない。

コード: 全て選択

itemCritical = this.item().damage.critical ? ((this.subject().cri + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev)) : 0;


③会心なしでも確率加算する場合の計算式の例
・スキルの設定が会心ありの場合、改心が発生しない。
・スキルの設定が会心なしの場合、改心が発生。

コード: 全て選択

itemCritical = (this.item().damage.critical ? this.subject().cri : 0 + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev);


①のコードはそもそも会心の判定が発生していないようでした。
②は想定通りの挙動かと思います。
③については、スキルの設定が改心ありになっている場合に会心が発生しないようです。

ひとまず、②を適用することで望む挙動を実装できそうではあります。
ご確認いただければ幸いです。

まず、①に関して、
元々の ItemCri の処理内容で解説しますが、

コード: 全て選択

Game_Action.prototype.itemCri = function(target) {
    return this.item().damage.critical ? this.subject().cri * (1 - target.cev) : 0;
};


コード: 全て選択

this.item().damage.critical

の部分が、スキルの会心あり・なしのフラグになります。
なので、
スキルが会心ありの時は、行動主体の会心率 * (1 - 対象の会心回避率)、
スキルが会心なしの時は、0 を返却するのが元々の ItemCri の処理ですが、
ksk さんの式だと、上記のフラグを見る部分がないので、会心、ありなしにかかわらず、行動主体の会心率を取得している、ということを言いたかったのです。
会心ありなしにかかわらず行動主体の会心率を取得してしまうというだけで、
対象の会心回避率が 100% 以上であれば、会心確率が 0 以下になるはずなので、
問題ない動作になるのではないかと思います。

問題の③に関してなんですが、
こちらは、

  1. 行動主体の会心率を取得、ただし、スキルの会心なしの時は、0 として扱う。
  2. 1. に対して、スキルに <CC確率加算> のメタタグが設定されていたら、タグで設定されている加算値、
    設定されていなければ 0 を加算する。
  3. 2.に対して (1 - 対象の会心回避率) を乗算する。
という内容で、会心の確率を計算することを想定しています。

なので、スキルの会心あり・なしに関係なく、対象の会心回避率が100%以上であれば、
計算結果が 0 以下になるはずで、会心が発生しないはずです。
こちらで確認する限りでも、計算結果は 0 以下になっていて、会心発生はしなかったです。
(行動主体の会心率がマイナスになっているときはきちんと確認していないので、もしかするとおかしくなる可能性はある)
③の計算式で、計算した後の行に、

コード: 全て選択

            // デバッグ用テキスト出力
            console.log('使用スキル:', this.item().name);
            console.log('会心あり?:', this.item().damage.critical);
            console.log('行動主体の会心率値:', this.item().damage.critical ? this.subject().cri : 0);
            console.log('確率加算値:', addValue ? getArgNumber(addValue) / 100 : 0);
            console.log('対象の会心回避率値:', target.cev);
            console.log(`計算式: (${this.item().damage.critical ? this.subject().cri : 0} + ${addValue ? getArgNumber(addValue) / 100 : 0}) * (1 - ${target.cev})`);
            console.log('会心確率値:', itemCritical);
            console.log('');

で、デバッグ用のテキストを出力するようにして、
出力内容をチェックして、正しく処理が行われているか確認していただけないでしょうか。
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ksk » 2024年1月27日(土) 21:43

こんばんは。
③のコードを適用した際の挙動について、詳細を記載させていただきます。

・敵がアクターAとアクターBに対し、範囲が『敵全体』の攻撃を行った際の挙動。
・敵の特徴には会心に関する設定はせず(会心率0%)
・敵が使用するスキルのメモ欄には、<CC確率加算:100>と記載。
・アクターAは会心回避率0%
・アクターBは会心回避率100%

●ケース1(添付画像1番目)
 スキルの設定を『会心なし』に設定
 テキスト出力結果の上部分がアクターAのもの、下部分がアクターBのものです。
 
●ケース2(添付画像2番目)
 スキルの設定を『会心あり』に設定
 テキスト出力結果の上部分がアクターAのもの、下部分がアクターBのものです。
 ⇒最後の会心確率値が計算式の結果に関わらず0になっているように見えるのですが、いかがでしょうか。
添付ファイル
会心なし.png
会心あり.png
ecf5DTTzl6h6lJj02
記事: 467
登録日時: 2018年12月23日(日) 13:55

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ecf5DTTzl6h6lJj02 » 2024年1月27日(土) 22:06

ksk さんが書きました:こんばんは。
③のコードを適用した際の挙動について、詳細を記載させていただきます。

・敵がアクターAとアクターBに対し、範囲が『敵全体』の攻撃を行った際の挙動。
・敵の特徴には会心に関する設定はせず(会心率0%)
・敵が使用するスキルのメモ欄には、<CC確率加算:100>と記載。
・アクターAは会心回避率0%
・アクターBは会心回避率100%

●ケース1(添付画像1番目)
 スキルの設定を『会心なし』に設定
 テキスト出力結果の上部分がアクターAのもの、下部分がアクターBのものです。
 
●ケース2(添付画像2番目)
 スキルの設定を『会心あり』に設定
 テキスト出力結果の上部分がアクターAのもの、下部分がアクターBのものです。
 ⇒最後の会心確率値が計算式の結果に関わらず0になっているように見えるのですが、いかがでしょうか。

エネミー側の攻撃の際に正しく計算されていないのを確認しました。
アクターの攻撃に関してしか見ておりませんでした。
失礼しました。

確率計算用のコードを以下に変更して、正しく計算されるか、ご確認ください。

コード: 全て選択

            itemCritical = ((this.item().damage.critical ? this.subject().cri : 0) + (addValue ? getArgNumber(addValue) / 100 : 0)) * (1 - target.cev);
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: 会心カスタマイズプラグインの細かい仕様について

投稿記事by ksk » 2024年1月27日(土) 22:32

さっそく返信いただきありがとうございます。
修正いただいたコードを適用したところ、想定通りの挙動になることを確認いたしました。
出力されたテキストの内容を確認してみても問題なさそうです。

ここまでお付き合いいただき本当にありがとうございました。
今後は自分でも簡単な修正だったら対応できるよう勉強したいと思います。
本トピックは解決済とさせていただきます。

“MV:質問” へ戻る