【解決済み】バトラーごとの敗北イベントの作り方

返信する
mochimochi
記事: 14
登録日時: 2021年6月10日(木) 18:31

【解決済み】バトラーごとの敗北イベントの作り方

投稿記事 by mochimochi »

いつもお世話になっております。

以前MVの方で似た質問をさせて頂き無事解決でき、大変助かりました。
この度はMZを購入し新たにゲームを作っているのですが、MVの時と同様に敗北イベントを
設定しようとするとエラーが出てしまい上手くいきません…。
MVの時はフトコロ様のFTKR_ExBattleEventプラグインを使用させて頂き、敗北をした時に
$gameTroop.members() ? BattleManager._subject._enemyId : $gameTroop.members()._enemyId
というスクリプトでエネミーIDを取得し、最後に攻撃を行った敵エネミーごとのイベントを作成しておりました。
MZでは敗北イベント自体は作れているのですが、敵キャラごとのID取得が上手くいっていない様子です。
スクリプト等詳しくなく、調べても似たような事例が見つからず困っております。。

なにかプラグインやスクリプト等、そのほか敵キャラIDに応じた敗北イベントの作成方法があれば何卒ご教授頂けますと幸いです。
最後に編集したユーザー mochimochi [ 2024年12月13日(金) 12:27 ], 累計 1 回
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: バトラーごとの敗北イベントの作り方

投稿記事 by WTR »

うまくいかないというのをもう少し具体的に説明できるでしょうか。
FTKR_ExBattleEvent は MV 向けだと思うのでエラーが出るとか
エラーは出てないけど意図しない値が取得されてしまうとか

あとこのスクリプトもちょっと疑問が…

コード: 全て選択

$gameTroop.members() ? BattleManager._subject._enemyId : $gameTroop.members()._enemyId
$gameTroop.members() が true か false かで処理をわけているのですが
js は空の配列も truthy でありこの処理分けには意味がなさそう。
ゆえに顕在化していないのだと思いますが
$gameTroop.members()._enemyId は undefined になるはずです。

と、書いてる途中に思い出したのですが
MZ では変数に直前に行動した敵キャラのインデックスを取得する機能が実装されましたね。
スクリーンショット 2024-12-12 160905.png
スクリーンショット 2024-12-12 160905.png (50.02 KiB) 閲覧された回数 759 回
バトルイベントで変数に代入するだけでいけるかもしれません。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
ecf5DTTzl6h6lJj02
記事: 715
登録日時: 2018年12月23日(日) 13:55

Re: バトラーごとの敗北イベントの作り方

投稿記事 by ecf5DTTzl6h6lJj02 »

こんにちは。
mochimochi さんが書きました:いつもお世話になっております。

以前MVの方で似た質問をさせて頂き無事解決でき、大変助かりました。
この度はMZを購入し新たにゲームを作っているのですが、MVの時と同様に敗北イベントを
設定しようとするとエラーが出てしまい上手くいきません…。
MVの時はフトコロ様のFTKR_ExBattleEventプラグインを使用させて頂き、敗北をした時に
$gameTroop.members() ? BattleManager._subject._enemyId : $gameTroop.members()._enemyId
というスクリプトでエネミーIDを取得し、最後に攻撃を行った敵エネミーごとのイベントを作成しておりました。
MZでは敗北イベント自体は作れているのですが、敵キャラごとのID取得が上手くいっていない様子です。
スクリプト等詳しくなく、調べても似たような事例が見つからず困っております。。

なにかプラグインやスクリプト等、そのほか敵キャラIDに応じた敗北イベントの作成方法があれば何卒ご教授頂けますと幸いです。
WTR さんが書きました:うまくいかないというのをもう少し具体的に説明できるでしょうか。
FTKR_ExBattleEvent は MV 向けだと思うのでエラーが出るとか
エラーは出てないけど意図しない値が取得されてしまうとか

あとこのスクリプトもちょっと疑問が…

コード: 全て選択

$gameTroop.members() ? BattleManager._subject._enemyId : $gameTroop.members()._enemyId
$gameTroop.members() が true か false かで処理をわけているのですが
js は空の配列も truthy でありこの処理分けには意味がなさそう。
ゆえに顕在化していないのだと思いますが
$gameTroop.members()._enemyId は undefined になるはずです。

と、書いてる途中に思い出したのですが
MZ では変数に直前に行動した敵キャラのインデックスを取得する機能が実装されましたね。

スクリーンショット 2024-12-12 160905.png
バトルイベントで変数に代入するだけでいけるかもしれません。
ちょっと補足。

FTKR_ExBattleEventをきちんと試して、MZで完全な動作をするか確認してませんが、
少なくとも、敗北時のコモンイベント実行機能は、一応 MZでも動かせるはずです。

敗北時のコモンイベントは、戦闘シーン内で実行されるので、
$gameTroop.members() は空の配列ではなくて、メンバの配列をきちんと返すと思います。
ただ、コモンイベントが実行される段階で
BattleManager._subject には null が入っているので、

コード: 全て選択

BattleManager._subject._enemyId
でエネミーIDを取得しようとすると、
cant read property '_enemyId' of null
というエラーが出力されるはずです。

また、WTR さんが仰っていますが、
$gameTroop.members() はメンバーの配列なので、
ここに _enemyId というプロパティは存在しておらず、

コード: 全て選択

$gameTroop.members()._enemyId
というコードでは、undefined が返ってきます。

コード: 全て選択

$gameTroop.members()[最後に攻撃した敵キャラのインデックス].enemyId()
となるのが正しいコードのはずです。

質問内容として、
欲しいのは、最後に攻撃した敵キャラのエネミーIDでしたよね?
でしたら、
敗北時のイベント内で、変数の取得のスクリプト等で、

コード: 全て選択

$gameTroop.members()[$gameTemp.lastActionData(3) - 1].enemyId()
とすれば、最後に攻撃した敵キャラのエネミーIDが取得できるのではないかと思います。

$gameTemp.lastActionData(3) というのが、
WTR さんのおっしゃっている、
直前に行動した敵キャラのインデックスを取得する機能
に相当するスクリプトです。
このスクリプトで返ってくるインデックスは、
先頭が 0 ではなく 1 になっているので、 -1 をしています。

ご確認ください。
mochimochi
記事: 14
登録日時: 2021年6月10日(木) 18:31

Re: バトラーごとの敗北イベントの作り方

投稿記事 by mochimochi »

WTR様 ecf5DTTzl6h6lJj02 様

ご返信頂きありがとうございます。
お二方の記して頂いた事をもとに試してみると無事解決できました!
まさに困っていたのがcant read property '_enemyId' of nullというエラーが出てしまい進まず、エネミーIDをどうにか取得したいと思っておりました。
こちら、ecf5DTTzl6h6lJj02 様の記して頂いた代入方法で行うと無事IDを取得することができました。
また、インデックスに付きましてもありがとうございました。様々理解できました。

スクリプトの知識がなく制作が進まず困っていたところでして、本当に助かりました。
この度は丁寧に教えて頂き大変ありがとうございました。
返信する

“MZ:質問”に戻る