unholy-maiden/js/plugins/StateAfterDeath.js
2025-12-18 09:44:14 -06:00

156 lines
5.9 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

/*=============================================================================
StateAfterDeath.js
----------------------------------------------------------------------------
(C)2018 Triacontane
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
----------------------------------------------------------------------------
Version
1.3.0 2022/05/10 全回復実行時もステートが解除されない設定を追加
1.2.1 2021/09/16 戦闘不能後継続ステートをすでに戦闘不能のバトラーに付与したときにも付与できるよう修正
1.2.0 2021/08/25 対象ステートを範囲指定できるパラメータを追加
1.1.0 2021/05/28 MZ用にリファクタリング
1.0.1 2018/08/12 継続ステートが戦闘不能後にターン数で解除されなくなっていた問題を修正
1.0.0 2018/08/12 初版
----------------------------------------------------------------------------
[Blog] : https://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
=============================================================================*/
/*:
* @plugindesc StateAfterDeathPlugin
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/StateAfterDeath.js
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @author triacontane
*
* @param states
* @desc 戦闘不能後も継続するステートの配列の一覧です。
* @type state[]
* @default []
*
* @param stateIdStart
* @text 対象ステート(範囲設定開始)
* @desc 戦闘不能後も継続するステートを範囲指定したい場合の開始IDです。
* @type state
* @default 0
*
* @param stateIdEnd
* @text 対象ステート(範囲設定終了)
* @desc 戦闘不能後も継続するステートを範囲指定したい場合の終了IDです。
* @type state
* @default 0
*
* @param considerRecoverAll
* @text 全回復を考慮
* @desc 戦闘不能だけでなく全回復をした場合もステートが解除されず、永続的に付与されるようになります。
* @type boolean
* @default false
*
* @help StateAfterDeath.js
*
* 戦闘不能後も解除されず継続するステートを作成できます。
* パラメータから対象となるステートを指定してください。
* 
* このプラグインにはプラグインコマンドはありません。
*
* This plugin is released under the MIT License.
*/
/*:ja
* @plugindesc 戦闘不能後継続ステートプラグイン
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/StateAfterDeath.js
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @author トリアコンタン
*
* @param states
* @text 対象ステート
* @desc 戦闘不能後も継続するステートの配列の一覧です。
* @type state[]
* @default []
*
* @param stateIdStart
* @text 対象ステート(範囲設定開始)
* @desc 戦闘不能後も継続するステートを範囲指定したい場合の開始IDです。
* @type state
* @default 0
*
* @param stateIdEnd
* @text 対象ステート(範囲設定終了)
* @desc 戦闘不能後も継続するステートを範囲指定したい場合の終了IDです。
* @type state
* @default 0
*
* @param considerRecoverAll
* @text 全回復を考慮
* @desc 戦闘不能だけでなく全回復をした場合もステートが解除されず、永続的に付与されるようになります。
* @type boolean
* @default false
*
* @help StateAfterDeath.js
*
* 戦闘不能後も解除されず継続するステートを作成できます。
* パラメータから対象となるステートを指定してください。
* 
* このプラグインにはプラグインコマンドはありません。
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態商用、18禁利用等
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(()=> {
'use strict';
const script = document.currentScript;
const param = PluginManagerEx.createParameter(script);
if (!param.states) {
param.states = [];
}
const _Game_BattlerBase_clearStates = Game_BattlerBase.prototype.clearStates;
Game_BattlerBase.prototype.clearStates = function() {
if (!this._states) {
_Game_BattlerBase_clearStates.apply(this, arguments);
return;
}
const deathStates = this.findStateAfterDeath();
const stillStates = this._states.filter(stateId => deathStates.includes(stateId));
const stillStateTurns = {};
stillStates.forEach(stateId => stillStateTurns[stateId] = this._stateTurns[stateId]);
_Game_BattlerBase_clearStates.apply(this, arguments);
if (!param.considerRecoverAll && this.hp > 0) {
return;
}
this._states = this._states.concat(stillStates);
this._stateTurns = stillStateTurns;
};
Game_BattlerBase.prototype.findStateAfterDeath = function() {
const deathStates = param.states.clone();
for (let id = param.stateIdStart; id <= param.stateIdEnd; id++) {
deathStates.push(id);
}
return deathStates;
};
const _Game_BattlerBase_isAlive = Game_BattlerBase.prototype.isAlive;
Game_BattlerBase.prototype.isAlive = function() {
const result = _Game_BattlerBase_isAlive.apply(this, arguments);
return this._ignoreDeath ? true : result;
};
const _Game_Battler_isStateAddable = Game_Battler.prototype.isStateAddable;
Game_Battler.prototype.isStateAddable = function(stateId) {
const deathStates = this.findStateAfterDeath();
if (deathStates.includes(stateId)) {
this._ignoreDeath = true;
}
const result = _Game_Battler_isStateAddable.apply(this, arguments);
this._ignoreDeath = false;
return result;
};
})();