/*:
 * @target MZ
 * @plugindesc [MZ] 戦闘中のターン終了時に習得スキルに応じてMPを％回復（重複可）
 * @author you
 * @help
 * 概要:
 *  戦闘中の各ターン終了時、アクターが習得している下記スキルに応じて
 *  最大MPの一定％を加算回復します（効果は重複します）
 *
 *  - スキルID 421: +2%
 *  - スキルID 422: +4%
 *  - スキルID 423: +6%
 *
 * 仕様:
 *  - 戦闘中のみ動作します
 *  - アクターのみ対象（敵は対象外）
 *  - 回復量は合算後に Math.floor で小数点切り捨てます
 *  - Game_Battler.prototype.regenerateAll をフックして実装しています
 *
 * 使い方:
 *  プロジェクトの js/plugins/ に本ファイルを保存し、プラグイン管理で有効化してください
 */

(() => {
  // ===== 設定値 =====
  const SKILL_2P_ID  = 421; // 習得で+2%
  const SKILL_4P_ID  = 422; // 習得で+4%
  const SKILL_6P_ID  = 423; // 習得で+6%

  const RATE_2P  = 2;   // %
  const RATE_4P  = 4;   // %
  const RATE_6P  = 6;   // %

  // ===== 実装本体 =====
  const _regenerateAll = Game_Battler.prototype.regenerateAll;
  Game_Battler.prototype.regenerateAll = function() {
    _regenerateAll.call(this);

    // 戦闘中のみ・生存中のみ・アクターのみ
    if (!$gameParty.inBattle() || !this.isAlive() || !this.isActor()) return;

    // 習得状況に応じて％を加算
    let totalRate = 0; // 合計％
    if (this.isLearnedSkill && this.isLearnedSkill(SKILL_2P_ID)) totalRate += RATE_2P;
    if (this.isLearnedSkill && this.isLearnedSkill(SKILL_4P_ID)) totalRate += RATE_4P;
    if (this.isLearnedSkill && this.isLearnedSkill(SKILL_6P_ID)) totalRate += RATE_6P;

    if (totalRate > 0) {
      const gain = Math.floor(this.mmp * (totalRate / 100));
      if (gain !== 0) this.gainMp(gain); // 上限チェックはエンジン側で処理
    }
  };
})();
