/*:
 * @target MZ
 * @plugindesc [MZ] 戦闘中のターン終了時に習得スキルに応じてMPを％回復（非重複・最大効果のみ適用）
 * @author you
 * @help
 * 概要:
 *  戦闘中の各ターン終了時、アクターが習得している下記スキルのうち
 *  最も効果の高いもの1つだけを適用して、最大MPの一定％を回復します。
 *
 *  - スキルID 421: +1%
 *  - スキルID 422: +3%
 *  - スキルID 423: +5%
 *
 * 仕様:
 *  - 戦闘中のみ動作
 *  - アクターのみ対象（敵は対象外）
 *  - 回復量は Math.floor で小数点切り捨て
 *  - Game_Battler.prototype.regenerateAll をフックして実装
 */

(() => {
  // ===== 設定値 =====
  const SKILL_1P_ID  = 421; // +1%
  const SKILL_3P_ID  = 422; // +3%
  const SKILL_5P_ID  = 423; // +5%

  const RATE_1P  = 1;   // %
  const RATE_3P  = 3;   // %
  const RATE_5P  = 5;   // %

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

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

    // 習得スキルの中で最も高い効果のみ採用
    let rate = 0;
    if (this.isLearnedSkill && this.isLearnedSkill(SKILL_1P_ID)) rate = Math.max(rate, RATE_1P);
    if (this.isLearnedSkill && this.isLearnedSkill(SKILL_3P_ID)) rate = Math.max(rate, RATE_3P);
    if (this.isLearnedSkill && this.isLearnedSkill(SKILL_5P_ID)) rate = Math.max(rate, RATE_5P);

    if (rate > 0) {
      const gain = Math.floor(this.mmp * (rate / 100));
      if (gain !== 0) this.gainMp(gain);
    }
  };
})();
