/*:
 * @target MZ
 * @plugindesc [MZ] 変数条件で特定スキルのみ使用可（未達時は灰色で選択不可&表示維持）
 * @author You
 * @help
 * 指定したスキル（既定: ID 269）は、変数44が0のときのみ使用可能にします。
 * 条件を満たさない場合でも、スキルリストには表示されますが選択不可（灰色）になります。
 *
 * 仕様:
 * - 戦闘中/メニュー画面の両方に適用されます（canUse をフック）。
 * - MP/TP/ステート等、通常の使用可否条件も引き続き判定されます。
 *
 * 設定を変えたい場合はパラメータで上書きしてください。
 *
 * @param SkillId
 * @text 対象スキルID
 * @type number
 * @min 1
 * @default 269
 *
 * @param VariableId
 * @text 判定する変数ID
 * @type variable
 * @default 44
 *
 * @param AllowedValue
 * @text 使用許可となる値
 * @type number
 * @default 0
 *
 * @param OnlyWhenLearned
 * @text 習得済みのみ対象にする
 * @type boolean
 * @on はい
 * @off いいえ
 * @desc ONの場合、アクターが対象スキルを習得しているときのみ本条件を適用します。
 * @default true
 */

(() => {
  "use strict";
  const PLUGIN_NAME = document.currentScript?.src?.match(/([^\/]+)\.js$/)?.[1] || "SkillVarGate";
  const params = PluginManager.parameters(PLUGIN_NAME);

  const SKILL_ID = Number(params.SkillId || 269);
  const VAR_ID = Number(params.VariableId || 44);
  const ALLOW = Number(params.AllowedValue || 0);
  const ONLY_LEARNED = String(params.OnlyWhenLearned || "true") === "true";

  const _Game_BattlerBase_canUse = Game_BattlerBase.prototype.canUse;
  Game_BattlerBase.prototype.canUse = function(item) {
    // 通常判定（ここで false の場合はそのまま false 返すため、先に自前チェックでも可）
    // ただし「表示はされるが選択不可」にしたいだけなので、
    // canUse の最終結果として false に落とせば十分。
    if (DataManager.isSkill(item) && item && item.id === SKILL_ID) {
      // 任意: 習得済みのみ対象にする
      if (!ONLY_LEARNED || (this.isActor?.() && this.skills && this.skills().includes(item))) {
        const v = $gameVariables.value(VAR_ID);
        if (v !== ALLOW) {
          // 条件未達: 使用不可（= リスト上は灰色で選択不可）
          return false;
        }
      }
    }
    // 通常の可否判定
    return _Game_BattlerBase_canUse.call(this, item);
  };
})();
