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

63 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 特定のステートが付与されている時、逃走コマンドを無効化します。
* @author あなたの名前
* @version 1.0.0
*
* @param disableStateIds
* @text 逃走不可ステートID
* @desc このリストに含まれるステートIDがパーティの誰かに付与されていると、「逃げる」が選択できなくなります。
* @type state[]
* @default []
*
* @help DisableEscapeOnState.js
*
* このプラグインは、戦闘中のパーティコマンド「逃げる」を特定の条件下で
* 選択できなくします。
*
* 【使い方】
* 1. プラグイン管理画面でこのプラグインをONにします。
* 2. プラグインパラメータ「逃走不可ステートID」を開き、
* 逃走を禁止したいステートをリストから選択してください。
* (複数選択可能です)
*
* これで、設定したステートにかかっているアクターがパーティに一人でもいる場合、
* 戦闘中に「逃げる」コマンドがグレーアウトされ、選択できなくなります。
*
* 例えば、ステートID:4「睡眠」とID:5「混乱」を指定した場合、
* パーティの誰かが「睡眠」または「混乱」状態だと逃げられなくなります。
*/
(() => {
'use strict';
const pluginName = "DisableEscapeOnState";
const parameters = PluginManager.parameters(pluginName);
const disableStateIds = JSON.parse(parameters.disableStateIds || '[]').map(Number);
if (disableStateIds.length > 0) {
// BattleManager.canEscape の処理を上書き(オーバーライド)
const _BattleManager_canEscape = BattleManager.canEscape;
BattleManager.canEscape = function() {
// 元々の逃走可能判定(イベントでの戦闘で逃走不可などが設定されていないか)
const originalCanEscape = _BattleManager_canEscape.call(this);
if (!originalCanEscape) {
return false;
}
// パーティメンバーの中に、指定されたステートにかかっている者がいるかチェック
const isAnyMemberAffected = $gameParty.members().some(actor => {
// actor.isStateAffected(stateId) で、そのアクターがステートにかかっているか判定
return disableStateIds.some(stateId => actor.isStateAffected(stateId));
});
// 誰かが指定ステートにかかっていたら、false逃走不可を返す
if (isAnyMemberAffected) {
return false;
}
// 全ての条件をクリアした場合、true逃走可能を返す
return true;
};
}
})();