/*: * @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; }; } })();