リジェネ発動時にコモンイベントを実行したい

お世話になります。

行いたいことはタイトルの通りです。

このコモンイベントはHP再生率の処理が1キャラ発動する毎に実行したいと考えています。

これを目指して自分なりに制作してみたのが以下になります。

/*:
 * @target MZ
 * @plugindesc リジェネ時コモンイベント
 * @author go_comma
 *
 * @param CommonEvent1
 * @text HPが回復する時のコモン
 * @type common_event
 * @default 0
 *
 * @param CommonEvent2
 * @text HPが減少する時のコモン
 * @type common_event
 * @default 0
 *
 * @param Variable
 * @text リジェネが発動したバトラーを格納する変数。インデックスは0で始まり、アクターだとそのままの数値が反映され、エネミーだと1000加算されます。
 * @type variable
 * @default 0
 * 
 * @help
 * 「HP再生率」が発動する際、指定したコモンイベントを実行
 * 対象を変数に格納することでコモンイベント中に誰に動作させるかも判定可能
 */

(() => {
  "use strict";
Game_Battler.prototype.regenerateHp = function() {
    const minRecover = -this.maxSlipDamage();
    const value = Math.max(Math.floor(this.mhp * this.hrg), minRecover);
    if (value !== 0) {
		this.gainHp(value);
		//ここまで通常

	const Vindex=Number(PluginManager.parameters("regenerationCommon").Variable)
	Vindex!=0 && $gameVariables.setValue(Vindex,this.index()+(this.isActor() ? 0 : 1000))//変数を指定していればインデックスを変数に代入、thisがアクターか敵か判定し、敵なら+1000
	
	const common1 = Number(PluginManager.parameters("regenerationCommon").CommonEvent1)
	const common2 = Number(PluginManager.parameters("regenerationCommon").CommonEvent2)
				

//↓予約しかできてないので多分後にされた予約に上書きされちゃう
		0<common1 && common1 < $dataCommonEvents.length && value>0 && $gameTemp.reserveCommonEvent(common1)//回復時コモンを指定していればコモンイベント1実行
		0<common2 && common2 < $dataCommonEvents.length && value<0 && $gameTemp.reserveCommonEvent(common2)//ダメージ時コモンを実行していればコモンイベント2実行
//↑
    }
};

})();

これは一応HP再生率の処理毎にコモンイベントを予約していますが、実行されるのはリジェネ処理が終わった後になっており、おそらく最後のキャラの情報が反映されたコモンイベントが1回発動するだけになっております。

これをキャラにHP再生率の処理が発動する毎に1回ずつ発動させるようにするにはどうしたらいいですか。

またプラグインの知識に関わらず、1キャラリジェネが発動する毎にコモンイベントを捩じ込む方法をご存知の方がいらっしゃったらその情報もお待ちしております!

@go_comma さん、ようこそ!

MZにおいて、reserveCommonEvent は実際にキューに追加され、古いものから順に実行されます。そのため、予約が互いに上書きされているわけではないと思います。すべて実行されているものの、再生成処理が完了するまでどれ也开始しないため、それぞれが最後のキャラクターが書き込んだ後の変数を読み取っているのかもしれません。

変数をすぐに書き込むのではなく、ターゲットをコモンイベントと一緒にキューに入れてみてはどうでしょうか? if (value !== 0) ブロック内、gainHp の後に、以下のようなコードを追加します:

const params = PluginManager.parameters("regenerationCommon");
const common = Number(value > 0 ? params.CommonEvent1 : params.CommonEvent2);
if (common > 0 && common < $dataCommonEvents.length) {
    $gameTemp._regenTargets = $gameTemp._regenTargets || [];
    $gameTemp._regenTargets.push(this.index() + (this.isActor() ? 0 : 1000));
    $gameTemp.reserveCommonEvent(common);
}

そして、両方のコモンイベントの最初のコマンドとして、次のターゲットを変数に取り込む Script を設定します(10 はあなたの変数IDに置き換えてください):

$gameVariables.setValue(10, $gameTemp._regenTargets.shift());

両方のリストは先入れ先出し(FIFO)なので、各コモンイベントはそれを予約したキャラクターを引き継ぐはずです。

@Baz 様
ご回答ありがとうございます。
コモンイベントが後に入った変数で2度処理されているのですね。
そして変数をコモンイベント内で用意すれば確かに実行毎に変数を切り替えられますね!

お伝えいただいた情報を元に書き換えてみたところすぐに機能いたしました!
この度は大変お世話になりました!!!