/*:
 * @target MZ
 * @plugindesc [MZ] 指定の敵が出現中はアイテムを選択不可（灰色）にする
 * @author you
 *
 * @help
 * 敵キャラIDが指定リストに含まれる敵が「出現中」の戦闘では、
 * アイテムウィンドウの全アイテムを選択不可（灰色）にします。
 * ※メニューやショップ画面には影響しません（戦闘中のみ判定）。
 *
 * 例）敵ID18や112がいる戦闘だけアイテム封印 → パラメータを [18,112]
 *
 * @param EnemyIds
 * @text 対象の敵キャラID
 * @type number[]
 * @default ["18","112"]
 * @desc このIDの敵が出現している戦闘ではアイテムを選択不可にします。複数可。
 *
 * @param OnlyAlive
 * @text 生存している敵のみ判定
 * @type boolean
 * @default true
 * @desc ON: 生きている敵がいる間だけ封印。OFF: 戦闘に含まれていれば常に封印。
 */

(() => {
  const PLUGIN_NAME = document.currentScript.src.split("/").pop().replace(/\.js$/, "");
  const params = PluginManager.parameters(PLUGIN_NAME);
  const targetIds = (JSON.parse(params.EnemyIds || "[]")).map(n => Number(n));
  const onlyAlive = params.OnlyAlive === "true";

  function hasTargetEnemyInBattle() {
    if (!$gameParty.inBattle()) return false;
    const troop = $gameTroop;
    if (!troop) return false;
    const members = onlyAlive ? troop.aliveMembers() : troop.members();
    return members.some(e => targetIds.includes(e.enemyId()));
  }

  const _Window_ItemList_isEnabled = Window_ItemList.prototype.isEnabled;
  Window_ItemList.prototype.isEnabled = function(item) {
    // 戦闘中かつ対象敵がいるならアイテムを選択不可に
    if (hasTargetEnemyInBattle()) return false;
    return _Window_ItemList_isEnabled.call(this, item);
  };
})();

