ページ 11

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

Posted: 2022年12月20日(火) 00:02
by 金色のモンドセレクション
いつもお世話になっております! もし解決方法分かる方がいらっしゃったら教えてください。

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

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

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

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

 cannot read property '_lasttargetindex' of null

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

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

Posted: 2022年12月20日(火) 08:36
by wingly
金色のモンドセレクション さんが書きました:いつもお世話になっております! もし解決方法分かる方がいらっしゃったら教えてください。

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

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

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

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

 cannot read property '_lasttargetindex' of null

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


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

その方が有識者の方も回答しやすいでしょう!
具体的な対策を教えることができずすみません。
参考になれば幸いです。
プラグイン側でも対象取得して変数に格納してるみたいだから
もしかしたらそこいじって「変数指定なし 」にすれば(できたっけ?)解決するかもねと思ったり思ってなかったり......

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

Posted: 2022年12月20日(火) 10:04
by Plasma Dark
BattleManager._subject を参照してはいけません。

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

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

コード: 全て選択

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


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

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

コード: 全て選択

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


こう書けます。
ただし、その行動で最後の敵を撃破してしまうと、使用効果によるコモンイベント発生前に戦闘が終了するため、発動前コモンのほうが演出という意味では使いやすい気がします。

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

Posted: 2022年12月20日(火) 11:06
by 金色のモンドセレクション
>Plasma Darkさん
対象インデックスIDからエネミーIDを取得する方法で解決できました。
ありがとうございました。なるほど、変数がすぐ初期化されるんですね・・・

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