コード: 全て選択
// 最後に行動したアクターを取得
const battlerId = $gameTemp.lastActionData(2);
const battler = $gameActors.actor(battlerId);
// メモ欄を参照して追加スキルを持つ防具の配列を取得
const armors = battler.armors().filter(armor => armor.meta.hasOwnProperty("追加スキル"));
// ↑を追加スキルの配列に変換
const additionalActions = armors.map(armor => {
const action = new Game_Action(battler, true);
action.setSkill(Number(armor.meta["追加スキル"]));
action.setTarget(battler._lastTargetIndex);
return action;
}
)
// アクションリストに追加スキルをマージ
for (let i = 0; i < battler._actions.length; i += additionalActions.length + 1) {
battler._actions.splice(i + 1, 0, ...additionalActions);
}
BattleManager.forceAction(battler);
this.setWaitMode("action");
こんな感じ…でしょうか。ちょっと自信がなくなってきましたが
なかなか解説が難しいところでもあります。
あまりツクール的なことはしてなくて filter とか map とか splice とか JS の配列操作が中心なので
そのへんは
https://developer.mozilla.org/ja/docs/W ... ects/Array あたりを参照して頂くとして
ツクール的な工夫は
もともと変数1で取得していた最後に行動したアクターは
実は $gameTemp.lastActionData(2) で取得できるのでスクリプトに組み込んでしまいました。
battler のアクションは battler._actions に格納されているのですが
戦闘行動の強制というのはこれを上書きする処理です。
上書きではなく追加したいので battler.forceAction はやめて
battler._actions に防具から取得した追加スキルを順番を考慮して直接ねじ込んでいる…みたいな処理です。
わりとトリッキーな気がします。
勉強の素材としては少々扱いにくいかもしれません。