ページ 11

【解決済み】戦闘中に敵の最大HPを変更した後、戦闘終了時に元に戻したい

Posted: 2024年11月22日(金) 00:59
by なっぱ
攻撃したエネミーの最大HPの値を、攻撃したダメージ後のHPの値で上書きすることで、回復してもHPが戻らない状況を作ります。

スキルのコモンイベントで
➀攻撃したエネミーの敵indexを変数A取得
変数の操作:A 敵のID=BattleManager._subject._lastTargetIndex;
⓶➀で取得したindexのエネミーの現HPを変数Bに取得
変数の操作:B 敵のHP=$gameTroop.members()[$gameVariables.value(A)].hp
③indexAのエネミーの最大HPを変数Bで上書き
スクリプト「$gameTroop.members()[$gameVariables.value(A)].enemy().params[0] = $gameVariables.value(B);」

上記の手順で最大HPの上書きには成功したのですが、上書きした値が戦闘終了後も反映されてしまいます。
戦闘終了後に一度リセットしたいのですが、よい方法はないでしょうか?

強引な方法としては、戦闘開始時のバトルイベントで敵グループ全員の最大HPを変数に取得しておき、戦闘後に全員上書きし直して戻すことで解決できそうな気もするのですが、もっと簡単な方法がありましたら教えていただきたいです。よろしくお願いします。

Re: 戦闘中に敵の最大HPを変更した後、戦闘終了時に元に戻したい

Posted: 2024年11月22日(金) 05:38
by ecf5DTTzl6h6lJj02
こんにちは。
なっぱ さんが書きました:攻撃したエネミーの最大HPの値を、攻撃したダメージ後のHPの値で上書きすることで、回復してもHPが戻らない状況を作ります。

スキルのコモンイベントで
➀攻撃したエネミーの敵indexを変数A取得
変数の操作:A 敵のID=BattleManager._subject._lastTargetIndex;
⓶➀で取得したindexのエネミーの現HPを変数Bに取得
変数の操作:B 敵のHP=$gameTroop.members()[$gameVariables.value(A)].hp
③indexAのエネミーの最大HPを変数Bで上書き
スクリプト「$gameTroop.members()[$gameVariables.value(A)].enemy().params[0] = $gameVariables.value(B);」

上記の手順で最大HPの上書きには成功したのですが、上書きした値が戦闘終了後も反映されてしまいます。
戦闘終了後に一度リセットしたいのですが、よい方法はないでしょうか?

強引な方法としては、戦闘開始時のバトルイベントで敵グループ全員の最大HPを変数に取得しておき、戦闘後に全員上書きし直して戻すことで解決できそうな気もするのですが、もっと簡単な方法がありましたら教えていただきたいです。よろしくお願いします。
③indexAのエネミーの最大HPを変数Bで上書き
スクリプト「$gameTroop.members()[$gameVariables.value(A)].enemy().params[0] = $gameVariables.value(B);」
これをやると $dataEnemies の値を書き換えてしまうことになります。
$dataEnemies は、データベースで設定されている敵キャラのデータを読み込んで保管している部分です。
戦闘時、敵のデータを設定する際の基になるデータなので、
ここを書き換えてしまうのはダメです。

addParam(パラメータのID, 増減させる値)
というメソッドで、指定したパラメータの値を増減できます。
敵キャラに対して使用する場合は、戦闘中のみ有効なので、
これを使って、受けたダメージの分だけ最大HPを減少させるようにするのがいいかなと思います。

イベントコマンドのスクリプトで、

コード: 全て選択

// 対象エネミーの取得
const enemy = $gameTroop.members()[BattleManager._subject._lastTargetIndex];  

// ダメージ(最大HPと現在HPの差)の算出  
const damage = enemy.mhp - enemy.hp;

//  damage の分だけ最大HPを減少させる
enemy.addParam(0,  -damage) ; 
と書けば、希望の動作ができるのではないかなと思います。
スクリプト内で全部やってしまえるので、
インデックスとか、現在HPとかを変数にとらなくていいです。

以上、ご確認ください。

Re: 戦闘中に敵の最大HPを変更した後、戦闘終了時に元に戻したい

Posted: 2024年11月23日(土) 09:54
by なっぱ
ecf5DTTzl6h6lJj02様、いつも大変お世話になっております。

無事想定通りの挙動が得られました。大変ありがとうございました。

Re: 【解決済み】戦闘中に敵の最大HPを変更した後、戦闘終了時に元に戻したい

Posted: 2024年11月24日(日) 14:47
by なっぱ
すみません、新しい問題が発生してしまったので追投します。

バトルイベントで「敵キャラの変身」を使った場合に、変身後のエネミーの最大HPが変身前に減少した分だけ減少した状態となってしまいます。

変身後は一旦元の最大HPの値に戻したいのですが、
➀元の値に戻す
もしくは
②手動で元の値を上書きする
方法を教えていただけないでしょうか?

Re: 【解決済み】戦闘中に敵の最大HPを変更した後、戦闘終了時に元に戻したい

Posted: 2024年11月24日(日) 17:53
by ecf5DTTzl6h6lJj02
こんにちは。
なっぱ さんが書きました:すみません、新しい問題が発生してしまったので追投します。

バトルイベントで「敵キャラの変身」を使った場合に、変身後のエネミーの最大HPが変身前に減少した分だけ減少した状態となってしまいます。

変身後は一旦元の最大HPの値に戻したいのですが、
➀元の値に戻す
もしくは
②手動で元の値を上書きする
方法を教えていただけないでしょうか?
変身後に次のスクリプトを実行してみてください。

コード: 全て選択

// エネミーの取得
const enemy = $gameTroop.members()[変身した敵キャラのインデックス]

// パラメータの増減値をリセットする (すべてのパラメータの増減値をリセットします)
enemy.clearParamPlus();

// 敵キャラの全回復 (必要なければ消してください)
enemy.recoverAll();
ご確認ください。

Re: 【解決済み】戦闘中に敵の最大HPを変更した後、戦闘終了時に元に戻したい

Posted: 2024年11月25日(月) 23:11
by なっぱ
ecf5DTTzl6h6lJj02 さんが書きました:こんにちは。
なっぱ さんが書きました:すみません、新しい問題が発生してしまったので追投します。

バトルイベントで「敵キャラの変身」を使った場合に、変身後のエネミーの最大HPが変身前に減少した分だけ減少した状態となってしまいます。

変身後は一旦元の最大HPの値に戻したいのですが、
➀元の値に戻す
もしくは
②手動で元の値を上書きする
方法を教えていただけないでしょうか?
変身後に次のスクリプトを実行してみてください。

コード: 全て選択

// エネミーの取得
const enemy = $gameTroop.members()[変身した敵キャラのインデックス]

// パラメータの増減値をリセットする (すべてのパラメータの増減値をリセットします)
enemy.clearParamPlus();

// 敵キャラの全回復 (必要なければ消してください)
enemy.recoverAll();
ご確認ください。
無事解決しました。大変ありがとうございました。