122 lines
4.1 KiB
JavaScript
122 lines
4.1 KiB
JavaScript
//=============================================================================
|
|
// RPG Maker MZ - Block clear state
|
|
//
|
|
// Copyright 2024 Panzer-IV. All rights reserved.
|
|
// This source code or any portion thereof must not be
|
|
// reproduced or used without licensed in any manner whatsoever.
|
|
//=============================================================================
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc 永続ステートプラグイン
|
|
* @author 四号戦車
|
|
* @base PluginCommonBase
|
|
* @orderAfter PluginCommonBase
|
|
*
|
|
* @param targetStates
|
|
* @text 対象ステート
|
|
* @desc クリアされないステートの指定
|
|
* @type state[]
|
|
* @default []
|
|
*
|
|
* @help BlockClearState.js
|
|
*
|
|
* Version: 0.0.1
|
|
*
|
|
* 永続ステートプラグイン
|
|
*
|
|
* ステートを永続的に付与できるように全回復・死亡・逃走時等に解除されないようにします。
|
|
* 指定のステート以外は解除されます。
|
|
*
|
|
* @command clearAllState
|
|
* @text ステート全解除
|
|
* @desc 永続ステートも含め全解除します。
|
|
*
|
|
* @arg actor
|
|
* @text 対象アクター
|
|
* @desc ステートを解除するアクター
|
|
* @type actor
|
|
* @default 0
|
|
*/
|
|
(() => {
|
|
"use strict";
|
|
|
|
//========================================================================
|
|
// プラグイン定義
|
|
//========================================================================
|
|
const pluginName = "BlockClearState";
|
|
const script = document.currentScript;
|
|
const param = PluginUtils.reparseParameter(script);
|
|
|
|
//========================================================================
|
|
// 定数定義
|
|
//========================================================================
|
|
|
|
//========================================================================
|
|
// コアスクリプト変更部 (Game_BattlerBase)
|
|
//========================================================================
|
|
const _Game_BattlerBase_clearStates = Game_BattlerBase.prototype.clearStates;
|
|
Game_BattlerBase.prototype.clearStates = function() {
|
|
if (!!this._states) {
|
|
this._states = this._states.filter(stateId => {
|
|
return this.isStickyState(stateId);
|
|
});
|
|
} else {
|
|
this._states = [];
|
|
}
|
|
|
|
if (!!this._stateTurns) {
|
|
const entries = Object.keys(this._stateTurns).filter(stateId => {
|
|
return this.isStickyState(stateId);
|
|
}).map(stateId => {
|
|
return [stateId, this._stateTurns[stateId]];
|
|
});
|
|
this._stateTurns = Object.fromEntries(entries);
|
|
} else {
|
|
this._stateTurns = {};
|
|
}
|
|
|
|
// for MPP_StateLevel
|
|
if (!!this._stateLevels) {
|
|
Object.keys(this._stateLevels).forEach(stateId => {
|
|
if (!this.isStickyState(stateId)) {
|
|
delete this._stateLevels[stateId];
|
|
}
|
|
});
|
|
} else {
|
|
this._stateLevels = {};
|
|
}
|
|
|
|
if (!!this._stateMaxTurns) {
|
|
Object.keys(this._stateMaxTurns).forEach(stateId => {
|
|
if (!this.isStickyState(stateId)) {
|
|
delete this._stateMaxTurns[stateId];
|
|
}
|
|
});
|
|
} else {
|
|
this._stateMaxTurns = {};
|
|
}
|
|
};
|
|
|
|
Game_BattlerBase.prototype.clearStateForce = function() {
|
|
this._states = [];
|
|
this._stateTurns = {};
|
|
|
|
// for MPP_StateLevel
|
|
this._stateLevels = {};
|
|
this._stateMaxTurns = {};
|
|
};
|
|
|
|
Game_BattlerBase.prototype.isStickyState = function(stateId) {
|
|
return param.targetStates.includes(Number(stateId));
|
|
};
|
|
|
|
//========================================================================
|
|
// プラグインコマンド
|
|
//========================================================================
|
|
PluginManagerEx.registerCommand(script, 'clearAllState', args => {
|
|
const target = $gameActors.actor(args.actor);
|
|
if (!!target) {
|
|
target.clearStateForce();
|
|
}
|
|
});
|
|
})();
|