まずは可能かどうか、可能ならどの辺りの処理を参考にすればいいのかを妄想する。
1.戦闘の強制処理でラストインデックスとかがあるから「選択した情報」というのは保存されているはず。
2.その選択した情報のデータからアクターIDを取得できるのでは?
3.そのアクターIDを持ってきて、コモンイベントでどうのこうのすればなんとかなりそう。
すごいざっくり感。けど、プログラミングなんてこんなもん。
で、次は「ラストインデックス」をキーワードに「ツクールMV スクリプト」辺りを引っ付けてググる。
調べた結果、下のページを参考にすればいけるっぽい雰囲気。
https://tm.lucky-duet.com/viewtopic.php?t=166
どうやら、欲しいデータは
$gameTroop.members()[BattleManager._subject._lastTargetIndex]
$gameParty.members()[BattleManager._subject._lastTargetIndex]
辺りに入っている模様。
とりあえず、中身を見てみたいので、
下記スクリプトをコモンイベントで書き出し、そのコモンイベントを引っ付けたアイテムを
戦闘中に使用してみる。
console.log($gameTroop.members()[BattleManager._subject._lastTargetIndex]);
console.log($gameParty.members()[BattleManager._subject._lastTargetIndex]);
実際実装するとこんなかんじ。このコモンイベントをアイテムにつける。
で、戦闘中に使用し、F8キーでいわゆる開発者ツールを呼べるので、そこでConsoleから確認する。
C言語の古いアレでいうと、「printf()でログに出して処理内容を確認する」という手法。
で、戦闘に入り、アイテムを味方に使用し、F8で呼び出してコンソールを見ると、
Game_Enemyってやつと
Game_Actorってやつが出力されているのがわかる。
Game_Actorってのを開くと、なんかずらーっと出てくるけど、おそらくここに欲しい値があるので、眺めていくと……。
_actorId
っていうのがあるのを発見。値が1(主人公)なので、おそらく合っている。
このアクターIDを利用すれば、「アイテムorスキルを使用して選択したキャラのアクターID」がわかる。
取得方法は、
$gameParty.members()[BattleManager._subject._lastTargetIndex]._actorId
って感じ。
ここらへんはJavaScriptの領分なので説明は割愛。メンバーの参照方法、とかでたぶん出てくる。
で、アクターIDはゲーム上で動かせるものじゃないので、
処理をシンプルにしてベタ書きで処理をかきかき。
条件分岐で下記スクリプトを条件に。
1 == $gameParty.members()[BattleManager._subject._lastTargetIndex]._actorId
意味合いは
「アイテムorスキル使用で味方を選択した際のアクターIDが1なら処理をする」
という感じ。
もちろん味方用の処理なので、敵さんが使うスキルやアイテムに設定してしまうとどんな挙動をするか知らん。いや、想像はつくけど、使う予定はないので調べる必要もない。
で、実際実装したのがこっち。
条件としては、
1.主人公は戦闘(パーティ)離脱できない。
2.最初からパーティにいるアクターは「パーティ勧誘時にスイッチをON」にして判別、
そのスイッチがONのアクターは離脱できない。
3.上記二つの条件をスルーできれば、離脱する。
条件に合わない行動をするとターンを消費するけど、
「条件に合わないアクターをそもそも選択できないようにする」
という処理が想像するだけでめんどいので妥協。妥協点を見つけるのは大事。
対策としてターン消費しないスキルにする、みたいにもできる。
こちらはそんな感じのプラグインを作ってくれている人がいる。
ま、それは追々バランス調整のときにやってみる感じで。
そもそもなぜこんな処理をしたかったかというと、
・パーティに入れたアクター以外も活躍させる
ということをしたかったので、それを解決する手法として、
・パーティに入れていないアクターを召喚するシステム
・召喚したアクターは召喚時に強力なスキルを使える
・召喚後、パーティメンバーとして戦闘中のみ戦いに参加する
・ただし、召喚したアクターは戦闘経験値を貰えない
・その代わり、召喚したアクターは任意のタイミングで離脱させられる
→ここを今回実装した
という感じ。
実際使うと不具合が出るかどうかは知らない。
出たら追記しよう。たぶん。