【解決済】メニューから回復後のHP表示について

返信する
アバター
ちゃみ
記事: 23
登録日時: 2024年11月26日(火) 22:32

【解決済】メニューから回復後のHP表示について

投稿記事 by ちゃみ »

こんばんは。

度々質問失礼します。

ただいま、戦闘スキルやアイテムをフィールドで使った時の効果を変更できるという
神無月サスケ様の『SetFieldSkillIdMZ.js』https://plugin-mz.fungamemake.com/archives/537と、
アクターを選択するプラグインコマンドを実装できる
ルルの教会様の『アクター選択プラグイン』https://nine-yusha.com/plugin-actorchoices/を使い、
バトル以外のシチュエーションでメニューからオリジナルの挙動で回復スキルを使えるように制作中です。

そして回復の処理が終わった後、回復後のHPと最大HPを表示させたいと思ってます。
ご存じの方はドラクエの回復後のような演出だと思っていただけるとわかりやすいかもしれません。

コモンイベントを使って回復スキルで対象アクターのHPを回復し、
その後イベントコマンドの【文章の表示】で各変数にを使って回復後の対象者のHPと最大はHPを表示するところまではうまくいったのですが、
回復するとHPが最大HPを越えてしまうようなときは

現在のHP→ 25
      ――――
最大HP → 20

のような表示になってしまいます。(これは表示だけで内部処理的には正常です)

そこで質問なのですが、バトル以外のシチュエーションで上記のような処理をした後、
対象者のHPと最大HPを表示するときに
現在のHPが最大HPを越えてしまわないように表示するには、どのようにしたらいいのでしょうか?
これは仕様上、仕方のないものなのでしょうか?
解決できることであれば解決したいと思っています。

回復後の現在のHPの表示に使用している変数はスクリプトの $gameParty.members()[x].hpに
回復スキルの回復値(変数)を加算したものを表示しています。

こだわりがすぎまして長々と書いてしまい、わかりにくい説明となってしまいましたが
よろしくお願いします。
最後に編集したユーザー ちゃみ [ 2025年3月20日(木) 07:00 ], 累計 1 回
アバター
ちゃみ
記事: 23
登録日時: 2024年11月26日(火) 22:32

【解決済】 メニューから回復後のHP表示について

投稿記事 by ちゃみ »

こんにちは。

自己解決いたしました。

今までHPの表示に『現在のHP+回復量』を表示してしまっていたので
実際に回復した処理と、HPと最大HP表示する【文章の表示】の間に
改めて対象者のHP変数にスクリプトの$gameParty.members()[x].hpを挟めばよかったことに気付きました。

失礼いたしました。
アバター
ちゃみ
記事: 23
登録日時: 2024年11月26日(火) 22:32

Re: メニューから回復後のHP表示について

投稿記事 by ちゃみ »

こんばんは。
お世話になっております。

何度も失礼します。

このトピックの内容は概ね実装でき、完成したと思っていたのですが、
特定の状況でエラーが発生してしまいました。

こちらがスタックトレースです。

TypeError: Cannot read property 'mhp' of undefined
at eval (eval at Game_Interpreter.command122 (rmmz_objects.js:10203), <anonymous>:1:24)
at Game_Interpreter.command122 (rmmz_objects.js:10203)
at Game_Interpreter.executeCommand (rmmz_objects.js:9666)
at Game_Interpreter.update (rmmz_objects.js:9571)
at Game_Map.updateInterpreter (rmmz_objects.js:6801)
at Game_Map.update (rmmz_objects.js:6705)
at Scene_Map.updateMain (rmmz_scenes.js:842)
at Scene_Map.updateMainMultiply (rmmz_scenes.js:838)
at Scene_Map.updateMainMultiply (MPP_MessageEX.js:2299)
at Scene_Map.updateMainMultiply (NRP_EventFastForward.js:247)

なんとなく最大HPが取得できていないのかなと思ったのですが、
確認したところ特定できずに困っております。

このエラーは厳密にはどういったことが書かれているのか教えていただけないでしょうか?
よろしくお願いいたします。
chro
記事: 106
登録日時: 2021年2月14日(日) 11:26

Re: メニューから回復後のHP表示について

投稿記事 by chro »

具体的なイベントコマンドの内容と、対象となっているスクリプトの内容がわからないと推測でしか回答出来ません。

エラー内容は、スクリプトの問題です。

推測ですが、
LL_ActorChoices.jsは変数にアクターIDを代入します。

$gameParty.members()[x].hp
のxは、パーティーの並び順(0が1番目)です。

そのパーティの並び順とアクターIDが食い違っていて、例えばアクターIDが9だが、
パーティーメンバーの9(0から始まるので10番目)を参照しようとして、アクターは存在しないので、
'mhp' of undefined
という、アクターが存在しない(undefined)ので、mhpというプロパティは読めません。

$gameActors.actor(x).mhp
が正しいかと思われます。推測ですが。
アバター
ちゃみ
記事: 23
登録日時: 2024年11月26日(火) 22:32

Re: メニューから回復後のHP表示について

投稿記事 by ちゃみ »

chro様

返信ありがとうございます。
説明不足で申し訳ありませんでした。
おっしゃる通りLL_ActorChoices.jsは変数にアクターIDを代入するプラグインです。

具体的なイベントコマンドですが

メニューから回復をした後に回復後のパーティのステータス(現在のHP・最大HP・現在のMP・最大MP)を
表示したく、次のように組みました。

◇条件分岐:PTにんずう = 0
 ◇プラグインコマンド:LL_ActorChoices, アクター選択の処理
 ◇条件分岐:アクターせんたくリスト = 10
  ◇変数の操作:#0034 回復値 = 乱数 1..5
  ◇変数の操作:#0037 PT1番目名前 = $gameParty.allMembers()[0] ? $gameParty.allMembers()[0].name() : 'いない';
  ◇変数の操作:#0054 PTHP = $gameParty.members()[0].hp
  ◇変数の操作:#0054 PTHP += 回復値
  ◇変数の操作:#0046 PT1番目のMAXHP = $gameParty.members()[0].mhp
  ◇変数の操作:#0071 PT1番目のMP = $gameParty.members()[0].mp
  ◇変数の操作:#0063 PT1番目のMAXMP = $gameParty.members()[0].mmp
  ◇変数の操作:#0028 スキル発動者 = 直前に行動したアクターのID
  ◇文章:\N[\v[28]は 回復スキルを つかった!
  ◇HPの増減:{アクターせんたくリスト}, + {回復値}
  ◇変数の操作:#0054 PTHP = $gameParty.members()[0].hp
  ◇文章:
      \P[1]
   HP \v[54]
      ――――
      \v[46]
      
   MP \v[71]
      ――――
      \v[63]

このように処理をしています。
最後の文章の表示は文章の表示行数を変更するプラグイン【ShowTexEX】を利用させてもらい、
縦に長いメッセージウインドウで表示しています。

そして、仲間が増えたときの処理として
一番上の条件分岐の【PTにんずう】を使い、仲間が増えたときには
最後の文章のところに、横にパーティメンバーのHPなど同じように横ならびになるように
イベントコマンドを設定しました。

◇条件分岐:PTにんずう = 3
      |
      |  省略(ここはパーティ1番目と2番目の処理です)
      |
◇条件分岐:アクターせんたくリスト = 12  (←パーティメンバー3人目のアクターIDです)
  ◇変数の操作:#0034 回復値 = 乱数 1..5
  ◇変数の操作:#0037 PT1番目名前 = $gameParty.allMembers()[0] ? $gameParty.allMembers()[0].name() : 'いない';
  ◇変数の操作:#0038 PT2番目名前= $gameParty.allMembers()[1] ? $gameParty.allMembers()[1].name() : 'いない';
  ◇変数の操作:#0039 PT3番目名前= $gameParty.allMembers()[2] ? $gameParty.allMembers()[2].name() : 'いない';
  ◇変数の操作:#0054 PTHP = $gameParty.members()[0].hp
  ◇変数の操作:#0054 PTHP += 回復値
  ◇変数の操作:#0046 PT1番目のMAXHP = $gameParty.members()[0].mhp
  ◇変数の操作:#0047 PT2番目のMAXHP = $gameParty.members()[1].mhp
  ◇変数の操作:#0048 PT3番目のMAXHP = $gameParty.members()[2].mhp
  ◇変数の操作:#0071 PT1番目のMP = $gameParty.members()[0].mp
  ◇変数の操作:#0072 PT2番目のMP = $gameParty.members()[1].mp
  ◇変数の操作:#0073 PT3番目のMP = $gameParty.members()[2].mp
  ◇変数の操作:#0063 PT1番目のMAXMP = $gameParty.members()[0].mmp
  ◇変数の操作:#0064 PT2番目のMAXMP = $gameParty.members()[1].mmp
  ◇変数の操作:#0065 PT3番目のMAXMP = $gameParty.members()[2].mmp
  ◇変数の操作:#0028 スキル発動者 = 直前に行動したアクターのID
  ◇文章:\N[\v[28]は 回復スキルを つかった!
  ◇HPの増減:{アクターせんたくリスト}, + {回復値}
  ◇変数の操作:#0054 PT1番目のHP = $gameParty.members()[0].hp
  ◇変数の操作:#0055 PT2番目のHP = $gameParty.members()[1].hp
  ◇変数の操作:#0056 PT3番目のHP = $gameParty.members()[2].hp
  ◇文章:
      \P[1]    \P[2]    \P[3]
   HP \v[54]    \v[55]    \v[56]
      ――――  ――――   ――――
      \v[46]    \v[47]    \v[48]
      
   MP \v[71]    \v[72]    \v[73]
      ――――  ――――  ――――
      \v[63]    \v[64]    \v[65]

このようにイベントコマンドを組みました。

この後に4人目のパーティメンバーまでの処理をずらーっと設定しました。

テストプレイで1人目の仲間、2人目の仲間、3人目の仲間を入れ、
計4人パーティになった状態で3人目の仲間を回復したときはエラーが起こらず
正常に作動しました。

しかし、1人目の仲間と2人目の仲間を入れ、3人目の仲間を入れず
計3人パーティになった状態で3人目を回復したときだけ限定で先ほどのエラーが発生しました。
エラーが発生したタイミングは3人目を回復し、メッセージウインドウに回復結果が
表示され決定ボタンでページ送りをしたタイミングです。

とても長く、かつ、わかりにくい説明になってしまいましたが
これほど長く変数を使った処理をしたのは初めてで
見落としがあるのかも知れないと思い、
エラー内容とイベントコマンドを見比べてミスを発見したく質問いたしました。

ちなみに仲間はストーリー上、アクターナンバーの若い順から仲間に加わり、
ストーリーの途中で離脱などはしないものとして
上記の様なイベントコマンドを組みました。
アバター
ちゃみ
記事: 23
登録日時: 2024年11月26日(火) 22:32

Re: メニューから回復後のHP表示について

投稿記事 by ちゃみ »

おはようございます。
お世話になっております。

今回の件は自己解決しました。

条件分岐のイベントコマンドをコピーして貼る場所がずれていました…。

大変お騒がせ致しました。
一人で騒いでいたようで恥ずかしいです。

今後イージーミスをもっとよく確認するようにします。

chro様
今回ただの私のミスによりお騒がせしてしまい申し訳ありませんでした。
返信する

“MZ:質問”に戻る