【解決済み】エネミーIDを取得した後にエラーが起きてしまう

金色のモンドセレクション
記事: 6
登録日時: 2017年10月16日(月) 11:21

【解決済み】エネミーIDを取得した後にエラーが起きてしまう

投稿記事by 金色のモンドセレクション » 2022年12月20日(火) 00:02

いつもお世話になっております! もし解決方法分かる方がいらっしゃったら教えてください。

・やりたい事
 味方のスキル(敵単体を選択)発動時、対象になったエネミーIDを取得して、
 プラグインのBeforeCommonで敵に応じた演出を表示したい

・実現方法
 スキルの使用効果欄でコモンイベント「敵ID取得」を呼び出し、
 その中で以下のプラグインコマンドを実行して変数にターゲット的IDを格納する

 $gameTroop.members()[BattleManager._subject._lastTargetIndex].enemyId();

・発生する問題
 そのスキルによる行動は意図した通りに終了し、ターン終了時に以下の
 エラーメッセージが表示され、ゲームが終了する

 cannot read property '_lasttargetindex' of null

どうぞよろしくお願いします。
最後に編集したユーザー 金色のモンドセレクション on 2022年12月20日(火) 11:18 [ 編集 1 回目 ]

wingly
記事: 206
登録日時: 2020年2月29日(土) 06:35

Re: エネミーIDを取得した後にエラーが起きてしまう

投稿記事by wingly » 2022年12月20日(火) 08:36

金色のモンドセレクション さんが書きました:いつもお世話になっております! もし解決方法分かる方がいらっしゃったら教えてください。

・やりたい事
 味方のスキル(敵単体を選択)発動時、対象になったエネミーIDを取得して、
 プラグインのBeforeCommonで敵に応じた演出を表示したい

・実現方法
 スキルの使用効果欄でコモンイベント「敵ID取得」を呼び出し、
 その中で以下のプラグインコマンドを実行して変数にターゲット的IDを格納する

 $gameTroop.members()[BattleManager._subject._lastTargetIndex].enemyId();

・発生する問題
 そのスキルによる行動は意図した通りに終了し、ターン終了時に以下の
 エラーメッセージが表示され、ゲームが終了する

 cannot read property '_lasttargetindex' of null

どうぞよろしくお願いします。


僕はJavaScriptの知識は皆無なので、なんとも言えないのですが、解決に向けてのアドバイスならできます。
そのエラーメッセージだけでわかる人は分かりそうですが、
念の為、ムノクラさんのこの記事を参考に情報を付け加えておくといいと思います。
https://fungamemake.com/archives/12097
□トリアコンタンさんの「エラー画面表示改善プラグイン」もオススメ

その方が有識者の方も回答しやすいでしょう!
具体的な対策を教えることができずすみません。
参考になれば幸いです。
プラグイン側でも対象取得して変数に格納してるみたいだから
もしかしたらそこいじって「変数指定なし 」にすれば(できたっけ?)解決するかもねと思ったり思ってなかったり......
どうも。winglyです。
現在受験勉強によりツクールを離れています。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: エネミーIDを取得した後にエラーが起きてしまう

投稿記事by Plasma Dark » 2022年12月20日(火) 10:04

BattleManager._subject を参照してはいけません。

特にMZにおいては、MVの頃よりも一時的な管理用の変数であるという側面が強くなっており、必要なタイミングが過ぎるとすぐにnullで初期化されるためです。
そのため、(発動前コモンのように戦闘の流れを捻じ曲げでもしない限り)戦闘中のイベント発生時にはnullになっています。

対象のインデックスを取得する方法は発動前コモンで提供されているため、それを用いるのも一つの手だと思います。
対象インデックスIDを変数1に設定している場合

コード: 全て選択

$gameTroop.members()[$gameVariables.value(1)-1000].enemyId()


これで敵単体への行動時、対象の敵キャラIDを取得できます。

使用効果から呼び出されるコモンイベントの場合は、変数でゲームデータ -> 直前 -> 直前に対象となった敵キャラのインデックスを取得して使います。
変数2にその値を取得してから

コード: 全て選択

$gameTroop.members()[$gameVariables.value(2)-1].enemyId()


こう書けます。
ただし、その行動で最後の敵を撃破してしまうと、使用効果によるコモンイベント発生前に戦闘が終了するため、発動前コモンのほうが演出という意味では使いやすい気がします。
金色のモンドセレクション
記事: 6
登録日時: 2017年10月16日(月) 11:21

Re: エネミーIDを取得した後にエラーが起きてしまう

投稿記事by 金色のモンドセレクション » 2022年12月20日(火) 11:06

>Plasma Darkさん
対象インデックスIDからエネミーIDを取得する方法で解決できました。
ありがとうございました。なるほど、変数がすぐ初期化されるんですね・・・

>winglyさん
情報提供ありがとうございました。
エラー画面表示改善プラグイン使ってみます!

“MZ:質問” へ戻る