ページ 11

「戦闘行動の強制」に関するバグ?について

Posted: 2018年8月19日(日) 10:00
by sunagimo
いつもお世話になっております。Sunagimoです。
今回はバグと思われる挙動についてのご相談です。

スキルで、「一度行動した後にコモンイベントで戦闘行動の強制をして別の攻撃をさせる多段攻撃スキル」
のような技があるのですが、このスキルを使用すると以下の現象が発生します

・該当スキルを使用したターンでは、ステートの残りターンが経過しない
※このため、ステートが永遠に直らない状況が発生します。

この現象を修正するための知恵をお借りしたいです。
発生条件としては、以下のような状況でも発生することを確認しました

・新規プロジェクトを用意
・バトルイベントは何もなし
・ステートの残りターンを見るため、トリアコンタン様のリングステートプラグインのみON
・コアスクリプトは1.6.1

Re: 「戦闘行動の強制」に関するバグ?について

Posted: 2018年8月20日(月) 02:44
by mo-to

コード: 全て選択

    BattleManager.processForcedAction = function() {
        if (this._actionForcedBattler) {
            //this._turnForced = true;//この行をコメントアウト
            this._subject = this._actionForcedBattler;
            this._actionForcedBattler = null;
            this.startAction();
            this._subject.removeCurrentAction();
        }
    };  
上にある処理の this._turnForced をコメントアウトするか、値をfalseにすると、ひとまずその症状は直るはずです。
この変更は1.6系からで、1.5系にはもともとこのフラグは存在していませんでした。
主に Game_Battler.prototype.onTurnEnd でステートとバフのターンを進める処理に使われているようで、
行動の強制後はフラグがオンになる理由から、ステートのターンが進まなくなるわけです。
オフにする処理がうまく働いてないのか、何か理由があってフラグが作られたのかは自分には分かりかねますが、
実際に書き換えたあとも、特に今のところこれといった不都合には出会っていません。

あと、もし試す場合はプラグイン化するのが望ましいです。

コード: 全て選択

    var _BattleManager_processForcedAction = BattleManager.processForcedAction
    BattleManager.processForcedAction = function() {
        _BattleManager_processForcedAction.call(this);
        this._turnForced = false;
    };  

Re: 「戦闘行動の強制」に関するバグ?について

Posted: 2018年8月20日(月) 05:33
by sunagimo
>mo-to様

返信ありがとうございます。
ご提示いただいたコードをプラグインとして使用して
件の状況についてはステート経過して解決しました。本当に助かりました!

ただ、現在作成中のプロジェクトは様々なプラグインがひしめきあっているため
何か不都合が発生しないか、しばらく状況を確かめようと思います