検索
ハートフルRPG「地図の時間」

地図の時間スピンオフRPG「影泥棒と魔法の手記」

リソース管理ダンジョンRPG「琥珀の道具士」

現代SFRPG「重力ルーペ/探求リバーブ」

ドラマティックRPG「バンドワゴン」

ビジュアルノベル「日向と香水」

ノベル×ADV「ストーリーテラー」 title1_2.png
カテゴリ
リンク集
【スポンサードリンク】

【ゲーム】




【創作】






シナリオ制作


設定作り


最近読んでよかった本五選





創作意欲を掻き立てる本


自己管理術


クリエイター向けノウハウ

2020年07月25日

YEP_X_BattleSysSTBとBeforeCommonの競合解決のメモ

YEP_X_BattleSysSTBとBeforeCommonの競合解決のメモ


YEP_X_BattleSysSTB:Yanfly様作、バトルシステムをSTBにカスタマイズするプラグイン
YEP_BattleEngineCore必要
BeforeCommon:やな様作、スキル使用前にコモンイベントを実行するプラグイン

プラグイン管理の順番は
YEP_BattleEngineCore
YEP_X_BattleSysSTB
BeforeCommon

目的

・スキル使用時に確率でカットイン演出:BeforeCommon.js
 スキルの使用者、対象者をBeforeCommon.jsの基本機能を使い変数で引き継ぎ、戦闘行動の強制のスクリプト版でカットイン後の処理を受け継ぐ

問題

・BeforeCommonで実行したコモンイベントでは連続して行動ができてしまう(ずっと俺のターン状態)
 行動不能のステートを使うも、次回行動者に行動が移らず2人以上のPTだと使えない

原因

・this._phase = 'turn'処理がYEP_X_BattleSysSTBとBeforeCommonで異なるため

YEP_X_BattleSysSTBは一人あたりの行動終了ごとにthis._phase = 'turn'の後にYanfly.BEC.BattleManager_endAction.call(this)で終了させなければならない

BeforeCommonで呼び出したコモンイベント実行後の処理には前述の処理が含まれていなかった

解決

BeforeCommon.jsの this._phase = 'turn'; 処理の後にYEP_X_BattleSysSTBの this._phase = 'turn'; 処理の後のコードを追記する。

BeforeCommon.jsでもYEP_X_BattleSysSTBと同じ処理をしてあげる。
具体的にはこう。

this._phase = 'turn';//この下に追加
if (this._stbInstantCast) {
this._stbInstantCast = false;
return Yanfly.BEC.BattleManager_endAction.call(this);
}
if (this._subject) {
this._performedBattlers.push(this._subject);
this._subject.spriteStepBack();
this._subject.onAllActionsEnd();
this._subject.removeCurrentAction();
}
if (this._processingForcedAction) {
this._phase = this._preForcePhase;
this._processingForcedAction = false;
}
if (this.loadPreForceActionSettings()) return;
this._subject = null;
Yanfly.BEC.BattleManager_endAction.call(this);//追加処理ここまで

気付き

今回はターン終了(行動終了)の処理に絞ることができ、解決の糸口に繋がった
競合しているプラグインに見当をつけたら、次は競合している処理を探す
探し方は二つのプラグインで使われている処理内容をキーワードにコードを検索する
今回はthis._phase = 'turn'が検索キーだった