pure-full-lily/js/plugins/EvadeStateSkill.js
2025-09-16 10:12:44 -05:00

71 lines
No EOL
2.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:
* @target MZ
* @plugindesc v1.1 指定ステートでスキルを自動回避。ただし別指定のステート中は無効。
* @author IvI
*
* @param DisableEvasionStateId
* @text 回避無効化ステートID
* @type state
* @default 0
* @desc このステート中は、このプラグインによる回避が全て無効になります。(0で無効)
*
* @help EvadeStateSkill.js
* --------------------------------------------------------------
* ■ 概要
* スキルのメモ欄に <EvadeState: 5> のように記述しておくと、
* 対象がそのステートID 5を付与されているあいだは
* そのスキルを必ず避けますMiss/Evade 扱い)。
*
* カンマ区切りで複数IDを指定できます。
* <EvadeState: 3,4,7>
*
* ■ v1.1追加機能:回避の無効化
* プラグインパラメータで「回避無効化ステートID」を設定すると、
* 対象がそのステートにかかっている間は、上記の<EvadeState>の
* 効果がすべて発動しなくなります。
*
* ●アクター/敵キャラどちらにも効果があります。
* --------------------------------------------------------------
* 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);
};
})();