リンク先の例では例としてスキル:ファイアのスキルID「9」を直接指定していますが、その代わりに上の「」内の文字列を入れればできると思います(未検証)
中身も見て検証してみましたが、残念ながら流用は難しそうですね。
詳細は割愛させていただきます。
イメージはプラグイン等でアクター全員のスキルIDを格納し、
ものまねが不可能なスキル(アクターのみが使用することを想定して作成されたスキル)がIDで指定された場合は、
変数に2を代入しスクリプトを実行させません。
それ以外の場合は、スクリプトよりあらかじめパーティーそれぞれで保存したスキルを戦闘行動の強制よりエネミーに行わせるということです。
説明ご苦労様です。
FF5のものまね士ゴゴみたいにカウンター寄りに即時発動させるんではなく
ターン中のスキルを全てスタックして、それを全て使用する形を想定しているんですね。
色々と検討したけど簡易プラグイン作らないと実装は無理っぽいですね。
スキルIDの保存もそうなんですけど、強制行動を実行すると入力済の行動がキャンセルされる仕様の為
スキルの連続実行を視野に入れる場合はその点にも留意する必要があります。今回は配列に対応した関数を用意します。
こちらが必要最小限だと思うプラグインです。
適当なテキストファイルにコピペした後に〇〇.jsと付けてプラグインマネージャに登録してください。
JavaScript:
"use strict";
{
BattleManager.clearUsedSkillList = function() {
this._usedSkillList = [];
};
BattleManager.usedSkillList = function() {
return this._usedSkillList;
};
const OLD_INIT_MEMBERS = BattleManager.initMembers;
BattleManager.initMembers = function() {
OLD_INIT_MEMBERS.call(this);
this.clearUsedSkillList();
};
const OLD_END_TURN = BattleManager.endTurn;
BattleManager.endTurn = function() {
OLD_END_TURN.call(this);
this.clearUsedSkillList();
};
const OLD_START_ACTION = BattleManager.startAction;
BattleManager.startAction = function() {
OLD_START_ACTION.call(this);
if (this._subject.isEnemy()) return;
if (this._action.isItem()) return;
this._usedSkillList.push(this._action.item().id);
}
Game_Battler.prototype.forceActionEx = function(skillList, targetIndex) {
this.clearActions();
skillList.forEach((skillId) => {
const action = new Game_Action(this, true);
action.setSkill(skillId);
if (targetIndex === -2) {
action.setTarget(this._lastTargetIndex);
} else if (targetIndex === -1) {
action.decideRandomTarget();
} else {
action.setTarget(targetIndex);
}
this._actions.push(action);
});
};
}
コモンイベントに張り付けるスクリプトはこんな感じですね
JavaScript:
// 除外スキルIDリスト
const exclusionList = [2]; // [2, 3, 4, 5]
const skillList = BattleManager.usedSkillList().filter((skillId) => {
return !exclusionList.includes(skillId);
});
$gameSwitches.setValue(101, 0 < skillList.length); // 物まね成功フラグ
if (0 < skillList.length) {
const battler = BattleManager._subject;
battler.forceActionEx(skillList, -1); // -1は対象不定
BattleManager.forceAction(battler);
this.setWaitMode('action');
}
書いてて妙に煮詰まったのでどこから説明するべきか迷うのですが
JavaScript:
const exclusionList = [2]
に除外リストを作ったので、防御を始めとして物まねしたくないスキルIDを配列形式で入力してください。
JavaScript:
$gameSwitches.setValue(101, 0 < skillList.length); // 物まね成功フラグ
それと物まねに成功したかどうかを受け取るフラグを作ったので、こちらの方でステート付与の判定を作ると良いでしょう。
現時点だとスイッチ番号101番に仮当てしています。他は弄る必要ないかな?
イメージと違うようなら気軽にどうぞ。局所的に凝り性なので気になります。