/*: * @target MZ * @plugindesc v1.1 指定ステートでスキルを自動回避。ただし別指定のステート中は無効。 * @author IvI * * @param DisableEvasionStateId * @text 回避無効化ステートID * @type state * @default 0 * @desc このステート中は、このプラグインによる回避が全て無効になります。(0で無効) * * @help EvadeStateSkill.js * -------------------------------------------------------------- * ■ 概要 * スキルのメモ欄に のように記述しておくと、 * 対象がそのステート(ID 5)を付与されているあいだは * そのスキルを必ず避けます(Miss/Evade 扱い)。 * * カンマ区切りで複数IDを指定できます。 * * * ■ v1.1追加機能:回避の無効化 * プラグインパラメータで「回避無効化ステートID」を設定すると、 * 対象がそのステートにかかっている間は、上記のの * 効果がすべて発動しなくなります。 * * ●アクター/敵キャラどちらにも効果があります。 * -------------------------------------------------------------- * v1.1 2024/07/08 回避を無効化するステートを指定できる機能を追加 * v1.0 2022/xx/xx 初版リリース */ (() => { 'use strict'; const PLUGIN_NAME = 'EvadeStateSkill'; const parameters = PluginManager.parameters(PLUGIN_NAME); const disableStateId = Number(parameters.DisableEvasionStateId) || 0; // ------------------------------------------------------------ // スキル適用前に「回避ステート」の判定を挟む // ------------------------------------------------------------ const _Game_Action_apply = Game_Action.prototype.apply; Game_Action.prototype.apply = function (target) { const item = this.item(); // ▼▼▼ 修正 ▼▼▼ // 無効化ステートのチェックを先に行う const isEvasionDisabled = disableStateId > 0 && target.isStateAffected(disableStateId); if (item && item.meta.EvadeState && !isEvasionDisabled) { // ▲▲▲ 修正 ▲▲▲ // メモ欄の数値リストを配列化 const stateIds = item.meta.EvadeState .split(',') .map(s => Number(s.trim())) .filter(id => !isNaN(id)); // 対象がいずれかのステートを保有していれば回避 if (stateIds.some(id => target.isStateAffected(id))) { const result = target.result(); result.clear(); // ダメージ等をリセット result.evaded = true; // 「回避」フラグを立てる return; // 後続の通常処理は行わない } } // 通常の判定へ _Game_Action_apply.call(this, target); }; })();