71 lines
No EOL
2.8 KiB
JavaScript
71 lines
No EOL
2.8 KiB
JavaScript
/*:
|
||
* @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);
|
||
};
|
||
})(); |