ページ 11

トリアコンタン様の会心カスタマイズについて

Posted: 2021年2月10日(水) 02:42
by シンゴビッチ
トリアコンタン様の会心カスタマイズを使って、
全体攻撃の場合”魔法攻撃に限り1体目のの攻撃のみで会心判定を行い、2体目以降は1体目の会心判定に準ずる”ように改変したいです。

コード: 全て選択

    Game_Action.prototype.judgeCritical = function(action,target) {
           var changeValue = getMetaValues(this.item(), ['確率変更', 'ProbChange']);
           var itemCritical;
         if (changeValue) {
              itemCritical = getArgNumber(changeValue, 0, 100) / 100;
             } else {
               var addValue = getMetaValues(this.item(), ['確率加算', 'ProbAdd']);
               itemCritical = _Game_Action_itemCri.apply(this, arguments) + (addValue ? getArgNumber(addValue) / 100 : 0);
            }
              this._criticalQueue.push(Math.random() < itemCritical);
    };

    Game_Action.prototype.initCriticalQueue = function() {
        this._criticalQueue = [];
    };

    Game_Action.prototype.isCritical = function() {
        if (!this._criticalQueue) {
            return false;
        }
        return this._criticalQueue.some(function(critical) {
            return critical;
        })
   
    };
のGame_Action.prototype.isCritical = function() {を使えば、一括判定になることが分かったので

コード: 全て選択

Game_Action.prototype.apply = function(target) {
    var result = target.result();
    this.subject().clearResult();
    result.clear();
    result.used = this.testApply(target);
    result.missed = (result.used && Math.random() >= this.itemHit(target));
    result.evaded = (!result.missed && Math.random() < this.itemEva(target));
    result.physical = this.isPhysical();
    result.drain = this.isDrain();
    if (result.isHit()) {
        if (this.item().damage.type > 0) {
         //ここで魔法攻撃だけ、事前判定結果を採用して、会心判定を一括にする。
            if (this.isMagical()) {
            result.critical = this.isCritical();
            } else {
            result.critical = (Math.random() < this.itemCri(target));
            }            
            var value = this.makeDamageValue(target, result.critical);
            this.executeDamage(target, value);
        }
        this.item().effects.forEach(function(effect) {
            this.applyItemEffect(target, effect);
        }, this);
        this.applyItemUserEffect(target);
    }
};
と書きましたが、このままですと対象エネミーの数だけ会心判定を実行するので、例えば4体敵が現れた時に、4回会心判定し、1回でも会心判定が出た場合全部会心になる。という形になり異様な高確率で会心になります。なので

コード: 全て選択

   Game_Action.prototype.isCritical = function() {
        if (!this._criticalQueue) {
            return false;
        }
        if (!this.isMagical()) {
        return this._criticalQueue.some(function(critical) {
            return critical;
            } 
            } else {
            //ここに一発目だけ判定させる何かをいれればいい
            いい?
            }
        })
と考えてますがsomeを抜く?とか思いましたが結局わかりませんでした。恐縮ながら指南いただきたいです。

Re: トリアコンタン様の会心カスタマイズについて

Posted: 2021年2月10日(水) 02:50
by トリアコンタン
こんにちは!
プラグインのご利用ありがとうございます。

了解しました!
こちらで実装を確認してみます。

Re: トリアコンタン様の会心カスタマイズについて

Posted: 2021年2月12日(金) 21:18
by トリアコンタン
こんにちは!
以下が修正内容の差分になります。
https://github.com/triacontane/RPGMakerMV/pull/53/files

本プラグインは、会心判定を攻撃の前に行い結果をキューに格納しています。
そこで魔法攻撃かつ2体目以降の判定では、1体目の結果をキューに詰めるように修正しています。


以下が修正版のプラグインです。
https://raw.githubusercontent.com/triac ... ritical.js