先にいくつか訂正
・スキル選択プラグイン
キャンセルされると変数に-1が格納されるようです。なので-1のときにどう対処するか記述すればよいことになります
・行動の強制について
単体攻撃を全体にしたり、その逆ができると書きましたが、勘違いでした
また単体攻撃をランダム1回にしたほうがいいと書きましたが結果として不要になったので単体攻撃のままで問題ないです
本題
『発動前コモン 』はいいですね。戦闘系プラグインは全然知らないので参考になります。
発動者のインデックスも変数保存できるので今回やりたいことができそうです
説明しやすいように今回は以下のように変数を使うとします
・発動者インデックス変数ID:21(発動前コモンで設定)
・対象インデックス変数ID:22(発動前コモンで設定してもしなくてもいいです)
・サイコロの目:23(KRD_MZ_Diceの結果格納先)
・発動者のアクターID格納変数:24
・スキルID格納変数:25
①アクターIDとサイコロで選ばれたスキルIDの取得
『発動者インデックス変数ID』ですが、コモンを呼び出したのがパーティの何番目かを示す変数です。(リーダーが0番目)
この情報からどのアクターなのか特定します
const actor = $gameParty.battleMembers()[$gameVariables.value(21)];
アクターがわかったので、そのアクターのIDと所持スキル一覧を取得します
const actorId = actor.actorId();
const skillList = actor._skills;
所持スキル一覧のうちサイコロの出目の番号のスキルを取り出します。
なおリストは0番目から始まるのでサイコロの数値-1とします
const skillId = skillList[$gameVariables.value(23) - 1] || 0;
うしろについている『 || 0』ですが、指定の場所にスキルがなかったら0を代入する、という意味です
スキルが6個未満のとき用の対処です
最後にアクターIDとスキルIDを変数に格納します。
まとめると以下の通りです。
コード: 全て選択
const actor = $gameParty.battleMembers()[$gameVariables.value(21)];
const actorId = actor.actorId();
const skillList = actor._skills;
const skillId = skillList[$gameVariables.value(23) - 1] || 0;
$gameVariables.setValue(24, actorId);
$gameVariables.setValue(25, skillId);
なお『$gameVariables.value()』『$gameVariables.setValue()』の意味については
以前紹介したスクリプトサイトの『変数の操作』を読んでください
②発動対象者
つぎに対象者ですがひとまず攻撃も回復もランダム対象とします。後述の『行動の強制』でランダム対象の場合は変数を-1に指定するので、『対象インデックス変数ID』に-1を代入します。全体攻撃ではこの値を参照しません
③スキルIDが0のときどうするか
ここではスキルの代わりに通常攻撃をとることにします。通常攻撃はID:1なので
スキルIDが0のときスキルIDに1を代入します
④戦闘行動の強制
スクリプトサイトに『戦闘行動の強制』のスクリプト記述も載っていますのでそれを参考に
いままで求めた変数をいれていきます
コード: 全て選択
this.iterateBattler(1, $gameVariables.value(24), battler => {
if (!battler.isDeathStateAffected()) {
battler.forceAction($gameVariables.value(25), $gameVariables.value(22))
BattleManager.forceAction(battler)
this.setWaitMode('action')
}
})
これで行けると思うのですが、いかがでしょうか