/*: * @target MZ * @plugindesc 変数11が'NP'等かつ指定スイッチOFFの時、スキルを回避。指定ステート中は無効。v1.05a * @author IvI * * @param RequireOffSwitchId * @text 回避有効条件スイッチID * @type switch * @default 74 * @desc このスイッチがOFFの時のみ、このプラグインによる回避が有効になります。 * * @param ResultSwitchId * @text 回避成功時ONスイッチID * @type switch * @default 73 * @desc 回避成功時にONになるスイッチIDです。(0で無効) * * @param DisableEvasionStateId * @text 回避無効化ステートID * @type state * @default 0 * @desc このステートにかかっていると回避が発動しなくなります。(0で無効) * * @help * スキルのメモ欄に と書くと、 * 特定の条件下でそのスキルを回避できるようになります。 * * 【回避が発動する条件】 * 1. 変数11番の値が 'NP' または 'NPH' である。 * 2. パラメータ「回避有効条件スイッチID」で指定したスイッチがOFFである。 * 3. スキルのメモ欄に の記述がある。 * 4. [v1.05a追加] パラメータ「回避無効化ステートID」で指定したステートに * かかっていない。(ステートIDが0の場合はこのチェックを無視します) * * 【回避率の指定】 * スキルのメモ欄で回避率をパーセントで指定できます。 * 例: // 回避率が80%になる * * 指定がない場合は、プラグイン内の設定(既定で70%)が適用されます。 * * --- * v1.05a: * - 指定したステートにかかっている場合、このプラグインによる * 特殊回避が発動しないようにする機能を追加しました。 * v1.04a: * - 最初のリリース */ (() => { // ── パラメータ取得 ── const PLUGIN_NAME = "AltVariableEvasion"; const params = PluginManager.parameters(PLUGIN_NAME); const REQUIRE_OFF_ID = Number(params.RequireOffSwitchId || 74); const RESULT_SW_ID = Number(params.ResultSwitchId || 73); const DISABLE_STATE_ID = Number(params.DisableEvasionStateId || 0); //追加 // ── 固定設定 ── const VAR_ID = 11; // 変数 ID const VALID_VALS = ['NP', 'NPH']; // 有効文字列 const DEFAULT_RT = 0.70; // 既定回避率 (0–1) const NOTE_TAG = 'SpecialVariableEvasion'; // メモタグ名 // ──────────── const _apply = Game_Action.prototype.apply; Game_Action.prototype.apply = function (target) { const item = this.item(); const meta = item ? item.meta[NOTE_TAG] : undefined; if (meta !== undefined) { const curVal = String($gameVariables.value(VAR_ID)); const requireOff = !$gameSwitches.value(REQUIRE_OFF_ID); // ▼▼▼ 追加 ▼▼▼ const isStateBlocking = DISABLE_STATE_ID > 0 && target.isStateAffected(DISABLE_STATE_ID); // ▲▲▲ 追加 ▲▲▲ // ▼▼▼ 修正 ▼▼▼ if (VALID_VALS.includes(curVal) && requireOff && !isStateBlocking) { // ▲▲▲ 修正 ▲▲▲ // ── 回避率取得 ── let rate = DEFAULT_RT; if (meta !== true) { const n = parseFloat(meta); if (!isNaN(n)) rate = Math.min(Math.max(n / 100, 0), 1); } // ── 判定 ── if (Math.random() < rate) { target.result().clear(); target.result().used = true; target.result().evaded = true; if (RESULT_SW_ID > 0) { $gameSwitches.setValue(RESULT_SW_ID, true); } return; } } } _apply.call(this, target); }; })();