【解決済み】ターン消費なしスキル(Torigoya_QuickSkill)でのスキル使用者取得方法について

天音 衣月
記事: 10
登録日時: 2022年8月24日(水) 22:05

【解決済み】ターン消費なしスキル(Torigoya_QuickSkill)でのスキル使用者取得方法について

投稿記事by 天音 衣月 » 2022年9月17日(土) 12:26

こんにちは。
Ruたん様の「ターン消費なしスキル」プラグインを使用させて頂き、
①コモンイベントで使用可否の注意メッセージ
②実際のスキル(①の選択肢で「はい」を選ぶと戦闘行動の強制で実行)
※①と②両方に<QuickSkill>を記述
という2段構えでスキルを実装し、この処理自体は想定通りに実装出来ました。

ただ、現状では「使用者」で戦闘行動の強制処理を分ける事が出来ていない為、
分岐処理を作る為「スキル使用アクターを取得する」方法を探した所、
下記2種のスクリプトを発見しました。

https://tm.lucky-duet.com/viewtopic.php?t=520
$gameParty.inBattle() ? BattleManager._subject._actorId : $gameParty.menuActor()._actorId

②個人blogより
$gameParty.members()[BattleManager._subject._lastTargetIndex]._actorId

これを①の最初に記述した所、この方法では下記のエラーが発生し、IDが取得できませんでした。
試しに①のスキルから<QuickSkill>の記述を外した所、無事取得できました。
もしかしたらこのプラグインは、取得する処理を飛ばして実現しているプラグインかも知れません。
エラーログ.png
①のエラーログ
エラーログ.png (27.17 KiB) 閲覧数: 644 回
エラーログ2.png
②のエラーログ
エラーログ2.png (27.38 KiB) 閲覧数: 644 回
エラー箇所.png
共通のエラー箇所
エラー箇所.png (28.49 KiB) 閲覧数: 644 回

このプラグインを実装した状態で「スキル使用アクターを取得する」何か良い方法は無いでしょうか?

ちなみに、このスキルは特定の装備をしている時に実行可能で、
スキルを発動すると装備を消失(装備無し⇒防具減らす)するという処理を入れています。
装備可能者が1人なら現状で問題は無いのですが、
複数の人が装備している時にはどうしても使用者を判定する方法が欲しく…。
最後に編集したユーザー 天音 衣月 on 2022年9月17日(土) 16:29 [ 編集 1 回目 ]

アバター
Plasma Dark
記事: 668
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: ターン消費なしスキル(Torigoya_QuickSkill)でのスキル使用者取得方法について

投稿記事by Plasma Dark » 2022年9月17日(土) 15:29

戦闘中において、ターン消費なしスキルの行動中は、まだ入力中のアクターが変わっていないので、 BattleManager._subject ではなく、 BattleManager.actor() を使うことで行動しているアクターを取得できます。

もしかしたらこのプラグインは、取得する処理を飛ばして実現しているプラグインかも知れません。


正確には、アクターの行動入力直後に行動処理を一通り完了させ、入力中の状態に戻すということをしています。
その際に BattleManager._subject を元々の状態 (今回の例ではnull) に戻しているので、そこから行動者の情報を取得できません。

MVの戦闘における状態遷移を一部抜粋すると、
イベント実行タイミング -> ターン処理 -> 行動処理 -> イベント実行タイミング -> ターン処理 ...
という流れになっています。

ターン消費なしスキルはこの流れではなく、別の処理フローで実現されていて、
入力 -> ターン処理 -> 行動処理 -> イベント実行タイミング -> 入力 ...
という流れです。

MVの BattleManager._subject は通常、行動完了から次のターン処理が始まるまで、行動者の情報を残したままになっています。
ターン処理の開始前にコモンイベントの実行タイミングがありますが、その時点でも BattleManager._subject には行動者の情報が残されています。
一方、ターン消費なしスキルプラグインでは、行動完了時点で行動者の情報をリセットします。
天音 衣月
記事: 10
登録日時: 2022年8月24日(水) 22:05

Re: ターン消費なしスキル(Torigoya_QuickSkill)でのスキル使用者取得方法について

投稿記事by 天音 衣月 » 2022年9月17日(土) 16:28

Plasma Dark様

返信ありがとうございます。
BattleManager._subject ではなく、 BattleManager.actor() を使うことで行動しているアクターを取得できます。

シンプルに記述の差し替えをしても駄目というのは何となく分かったので、
BattleManager.actor()で調べて、「BattleManager.actor().actorId()」で取得を成功させる事が出来ました。

正確には、アクターの行動入力直後に行動処理を一通り完了させ、入力中の状態に戻すということをしています。
その際に BattleManager._subject を元々の状態 (今回の例ではnull) に戻しているので、そこから行動者の情報を取得できません。

詳しいフローの話まで書いて頂いてありがとうございます。
リセットは即時発動でコマンド選択に戻す関係上、差し込まれている処理なのでしょうか。

ともあれ、望む処理が出来て安心しました。ありがとうございました。

“MV:質問” へ戻る