526 lines
14 KiB
JavaScript
526 lines
14 KiB
JavaScript
/*:
|
||
@plugindesc
|
||
全回復 Ver1.0.5(2023/4/3)
|
||
|
||
@url https://raw.githubusercontent.com/pota-gon/RPGMakerMZ/main/plugins/System/Recover.js
|
||
@orderAfter dsJobChangeMZ
|
||
@target MZ
|
||
@author ポテトードラゴン
|
||
|
||
・アップデート情報
|
||
- ステート解除から除外する設定追加
|
||
- 競合対策を実施
|
||
|
||
Copyright (c) 2023 ポテトードラゴン
|
||
Released under the MIT License.
|
||
https://opensource.org/licenses/mit-license.php
|
||
|
||
@help
|
||
## 概要
|
||
様々な場面で全回復できる機能を提供します。
|
||
|
||
## 使い方
|
||
以下の機能を提供します。
|
||
使いたい機能のパラメータを変更してください。
|
||
|
||
1. 全回復(戦闘開始)
|
||
2. 全回復(戦闘終了)
|
||
3. 全回復(レベルアップ)
|
||
4. 全回復(職業の変更)
|
||
5. 全回復コマンドTP回復
|
||
|
||
回復する対象は(HP・MP・TP・ステート)です。
|
||
これらは、設定で変更することができます。
|
||
また、スイッチで全回復するかを任意に変更することもできます。
|
||
|
||
TPは、TP持ち越しの特徴がある場合のみ回復します。
|
||
※ TP持ち越しがない場合は、回復はしていますがリセットされます。
|
||
|
||
@param ExceptClearStates
|
||
@type state[]
|
||
@text 解除除外ステート
|
||
@desc ステート解除から除外するステートを指定
|
||
@default []
|
||
|
||
@param BattleStartRecover
|
||
@type boolean
|
||
@text 全回復(戦闘開始)
|
||
@desc 戦闘開始時に全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default false
|
||
|
||
@param StartRecoverSwitch
|
||
@parent BattleStartRecover
|
||
@type switch
|
||
@text 全回復(戦闘開始)有効スイッチ
|
||
@desc このスイッチがON のときに全回復(戦闘開始)を有効にします
|
||
0(なし)の場合は、スイッチは使用しません
|
||
@default 0
|
||
|
||
@param StartHpRecover
|
||
@parent BattleStartRecover
|
||
@type boolean
|
||
@text HP全回復
|
||
@desc HPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param StartMpRecover
|
||
@parent BattleStartRecover
|
||
@type boolean
|
||
@text MP全回復
|
||
@desc MPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param StartTpRecover
|
||
@parent BattleStartRecover
|
||
@type boolean
|
||
@text TP全回復
|
||
@desc TPを全回復するか
|
||
TP持ち越しの特徴がある場合のみ有効
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param StartClearStates
|
||
@parent BattleStartRecover
|
||
@type boolean
|
||
@text ステート解除可否
|
||
@desc ステートを解除するかの設定
|
||
@on 解除する
|
||
@off 解除しない
|
||
@default true
|
||
|
||
@param BattleEndRecover
|
||
@type boolean
|
||
@text 全回復(戦闘終了)
|
||
@desc 戦闘終了時に全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default false
|
||
|
||
@param EndRecoverSwitch
|
||
@parent BattleEndRecover
|
||
@type switch
|
||
@text 全回復(戦闘終了)有効スイッチ
|
||
@desc このスイッチがON のときに全回復(戦闘終了)を有効にします
|
||
0(なし)の場合は、スイッチは使用しません
|
||
@default 0
|
||
|
||
@param EndHpRecover
|
||
@parent BattleEndRecover
|
||
@type boolean
|
||
@text HP全回復
|
||
@desc HPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param EndMpRecover
|
||
@parent BattleEndRecover
|
||
@type boolean
|
||
@text MP全回復
|
||
@desc MPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param EndTpRecover
|
||
@parent BattleEndRecover
|
||
@type boolean
|
||
@text TP全回復
|
||
@desc TPを全回復するか
|
||
TP持ち越しの特徴がある場合のみ有効
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param EndClearStates
|
||
@parent BattleEndRecover
|
||
@type boolean
|
||
@text ステート解除可否
|
||
@desc ステートを解除するかの設定
|
||
@on 解除する
|
||
@off 解除しない
|
||
@default true
|
||
|
||
@param LevelUpRecover
|
||
@type boolean
|
||
@text 全回復(レベルアップ)
|
||
@desc レベルアップ時に全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default false
|
||
|
||
@param LevelRecoverSwitch
|
||
@parent LevelUpRecover
|
||
@type switch
|
||
@text 全回復(レベルアップ)有効スイッチ
|
||
@desc このスイッチがON のときに全回復(レベルアップ)を有効にします
|
||
0(なし)の場合は、スイッチは使用しません
|
||
@default 0
|
||
|
||
@param LevelHpRecover
|
||
@parent LevelUpRecover
|
||
@type boolean
|
||
@text HP全回復
|
||
@desc HPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param LevelMpRecover
|
||
@parent LevelUpRecover
|
||
@type boolean
|
||
@text MP全回復
|
||
@desc MPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param LevelTpRecover
|
||
@parent LevelUpRecover
|
||
@type boolean
|
||
@text TP全回復
|
||
@desc TPを全回復するか
|
||
TP持ち越しの特徴がある場合のみ有効
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param LevelClearStates
|
||
@parent LevelUpRecover
|
||
@type boolean
|
||
@text ステート解除可否
|
||
@desc ステートを解除するかの設定
|
||
@on 解除する
|
||
@off 解除しない
|
||
@default true
|
||
|
||
@param ChangeClassRecover
|
||
@type boolean
|
||
@text 全回復(職業の変更)
|
||
@desc 職業の変更時に全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default false
|
||
|
||
@param ClassRecoverSwitch
|
||
@parent ChangeClassRecover
|
||
@type switch
|
||
@text 全回復(職業の変更)有効スイッチ
|
||
@desc このスイッチがON のときに全回復(職業の変更)を有効にします
|
||
0(なし)の場合は、スイッチは使用しません
|
||
@default 0
|
||
|
||
@param ClassHpRecover
|
||
@parent ChangeClassRecover
|
||
@type boolean
|
||
@text HP全回復
|
||
@desc HPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param ClassMpRecover
|
||
@parent ChangeClassRecover
|
||
@type boolean
|
||
@text MP全回復
|
||
@desc MPを全回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param ClassTpRecover
|
||
@parent ChangeClassRecover
|
||
@type boolean
|
||
@text TP全回復
|
||
@desc TPを全回復するか
|
||
TP持ち越しの特徴がある場合のみ有効
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default true
|
||
|
||
@param ClassClearStates
|
||
@parent ChangeClassRecover
|
||
@type boolean
|
||
@text ステート解除可否
|
||
@desc ステートを解除するかの設定
|
||
@on 解除する
|
||
@off 解除しない
|
||
@default true
|
||
|
||
@param TpRecover
|
||
@type boolean
|
||
@text 全回復コマンドTP回復
|
||
@desc イベントコマンド[全回復]で、TPも回復するか
|
||
@on 回復する
|
||
@off 回復しない
|
||
@default false
|
||
|
||
@param TpRecoverSwitch
|
||
@parent TpRecover
|
||
@type switch
|
||
@text 全回復コマンドTP回復有効スイッチ
|
||
@desc このスイッチがON のときに全回復コマンドTP回復を有効にします
|
||
0(なし)の場合は、スイッチは使用しません
|
||
@default 0
|
||
*/
|
||
(() => {
|
||
"use strict";
|
||
|
||
// ベースプラグインの処理
|
||
function Potadra_getPluginName(extension = "js") {
|
||
const reg = new RegExp(".+/(.+)." + extension);
|
||
return decodeURIComponent(document.currentScript.src).replace(reg, "$1");
|
||
}
|
||
function Potadra_numberArray(data) {
|
||
const arr = [];
|
||
if (data) {
|
||
for (const value of JSON.parse(data)) {
|
||
arr.push(Number(value));
|
||
}
|
||
}
|
||
return arr;
|
||
}
|
||
function Potadra_convertBool(bool) {
|
||
if (bool === "false" || bool === "" || bool === undefined) {
|
||
return false;
|
||
} else {
|
||
return true;
|
||
}
|
||
}
|
||
function Potadra_isPlugin(plugin_name) {
|
||
return PluginManager._scripts.includes(plugin_name);
|
||
}
|
||
function Potadra_checkSwitch(switch_no, bool = true) {
|
||
if (switch_no === 0 || $gameSwitches.value(switch_no) === bool) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// パラメータ用変数
|
||
const plugin_name = Potadra_getPluginName();
|
||
const params = PluginManager.parameters(plugin_name);
|
||
|
||
// 各パラメータ用変数
|
||
const ExceptClearStates = Potadra_numberArray(params.ExceptClearStates);
|
||
const BattleStartRecover = Potadra_convertBool(params.BattleStartRecover);
|
||
const StartRecoverSwitch = Number(params.StartRecoverSwitch || 0);
|
||
const StartHpRecover = Potadra_convertBool(params.StartHpRecover);
|
||
const StartMpRecover = Potadra_convertBool(params.StartMpRecover);
|
||
const StartTpRecover = Potadra_convertBool(params.StartTpRecover);
|
||
const StartClearStates = Potadra_convertBool(params.StartClearStates);
|
||
const BattleEndRecover = Potadra_convertBool(params.BattleEndRecover);
|
||
const EndRecoverSwitch = Number(params.EndRecoverSwitch || 0);
|
||
const EndHpRecover = Potadra_convertBool(params.EndHpRecover);
|
||
const EndMpRecover = Potadra_convertBool(params.EndMpRecover);
|
||
const EndTpRecover = Potadra_convertBool(params.EndTpRecover);
|
||
const EndClearStates = Potadra_convertBool(params.EndClearStates);
|
||
const LevelUpRecover = Potadra_convertBool(params.LevelUpRecover);
|
||
const LevelRecoverSwitch = Number(params.LevelRecoverSwitch || 0);
|
||
const LevelHpRecover = Potadra_convertBool(params.LevelHpRecover);
|
||
const LevelMpRecover = Potadra_convertBool(params.LevelMpRecover);
|
||
const LevelTpRecover = Potadra_convertBool(params.LevelTpRecover);
|
||
const LevelClearStates = Potadra_convertBool(params.LevelClearStates);
|
||
const ChangeClassRecover = Potadra_convertBool(params.ChangeClassRecover);
|
||
const ClassRecoverSwitch = Number(params.ClassRecoverSwitch || 0);
|
||
const ClassHpRecover = Potadra_convertBool(params.ClassHpRecover);
|
||
const ClassMpRecover = Potadra_convertBool(params.ClassMpRecover);
|
||
const ClassTpRecover = Potadra_convertBool(params.ClassTpRecover);
|
||
const ClassClearStates = Potadra_convertBool(params.ClassClearStates);
|
||
const TpRecover = Potadra_convertBool(params.TpRecover);
|
||
const TpRecoverSwitch = Number(params.TpRecoverSwitch || 0);
|
||
|
||
// 他プラグイン連携(プラグインの導入有無)
|
||
const dsJobChangeMZ = Potadra_isPlugin("dsJobChangeMZ");
|
||
|
||
/**
|
||
* 全回復
|
||
*/
|
||
function recoverAllTp(
|
||
actor,
|
||
clear_states = true,
|
||
hp_recover = true,
|
||
mp_recover = true,
|
||
tp_recover = true
|
||
) {
|
||
if (clear_states) {
|
||
clearStates(actor);
|
||
}
|
||
if (hp_recover) {
|
||
actor._hp = actor.mhp;
|
||
}
|
||
if (mp_recover) {
|
||
actor._mp = actor.mmp;
|
||
}
|
||
if (tp_recover) {
|
||
actor._tp = actor.maxTp();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* ステート情報をクリア
|
||
*/
|
||
function clearStates(actor) {
|
||
for (const stateId of actor._states) {
|
||
if (!ExceptClearStates.includes(stateId)) {
|
||
actor.eraseState(stateId);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 戦闘開始
|
||
*/
|
||
if (BattleStartRecover) {
|
||
if (Potadra_checkSwitch(StartRecoverSwitch)) {
|
||
const _BattleManager_startBattle = BattleManager.startBattle;
|
||
BattleManager.startBattle = function () {
|
||
$gameParty.battleMembers().forEach(function (actor) {
|
||
recoverAllTp(
|
||
actor,
|
||
StartClearStates,
|
||
StartHpRecover,
|
||
StartMpRecover,
|
||
StartTpRecover
|
||
);
|
||
}, this);
|
||
_BattleManager_startBattle.apply(this, arguments);
|
||
};
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 戦闘終了
|
||
*
|
||
* @param {} result - 結果(0:勝利 1:逃走 2:敗北)
|
||
*/
|
||
if (BattleEndRecover) {
|
||
if (Potadra_checkSwitch(EndRecoverSwitch)) {
|
||
const _BattleManager_endBattle = BattleManager.endBattle;
|
||
BattleManager.endBattle = function (result) {
|
||
$gameParty.battleMembers().forEach(function (actor) {
|
||
recoverAllTp(
|
||
actor,
|
||
EndClearStates,
|
||
EndHpRecover,
|
||
EndMpRecover,
|
||
EndTpRecover
|
||
);
|
||
}, this);
|
||
_BattleManager_endBattle.apply(this, arguments);
|
||
};
|
||
}
|
||
}
|
||
|
||
if (LevelUpRecover) {
|
||
if (Potadra_checkSwitch(LevelRecoverSwitch)) {
|
||
/**
|
||
* 経験値の変更
|
||
*
|
||
* @param {number} exp - 経験値
|
||
* @param {boolean} show - レベルアップ表示をするか
|
||
*/
|
||
const _Game_Actor_changeExp = Game_Actor.prototype.changeExp;
|
||
Game_Actor.prototype.changeExp = function (exp, show) {
|
||
const lastLevel = this._level;
|
||
_Game_Actor_changeExp.apply(this, arguments);
|
||
|
||
// レベルアップした場合のみ回復
|
||
if (this._level > lastLevel) {
|
||
recoverAllTp(
|
||
this,
|
||
LevelClearStates,
|
||
LevelHpRecover,
|
||
LevelMpRecover,
|
||
LevelTpRecover
|
||
);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* レベルの変更
|
||
*
|
||
* @param {number} level - レベル
|
||
* @param {boolean} show - レベルを表示するか
|
||
*/
|
||
const _Game_Actor_changeLevel = Game_Actor.prototype.changeLevel;
|
||
Game_Actor.prototype.changeLevel = function (level, show) {
|
||
const lastLevel = this._level;
|
||
|
||
_Game_Actor_changeLevel.apply(this, arguments);
|
||
|
||
// レベルアップした場合のみ回復
|
||
if (this._level > lastLevel) {
|
||
recoverAllTp(
|
||
this,
|
||
LevelClearStates,
|
||
LevelHpRecover,
|
||
LevelMpRecover,
|
||
LevelTpRecover
|
||
);
|
||
}
|
||
};
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 職業の変更
|
||
*
|
||
* @param {number} classId - 職業ID
|
||
* @param {boolean} keepExp - 経験値を引き継ぐ
|
||
*/
|
||
if (ChangeClassRecover) {
|
||
if (Potadra_checkSwitch(ClassRecoverSwitch)) {
|
||
const _Game_Actor_changeClass = Game_Actor.prototype.changeClass;
|
||
Game_Actor.prototype.changeClass = function (classId, keepExp) {
|
||
_Game_Actor_changeClass.apply(this, arguments);
|
||
recoverAllTp(
|
||
actor,
|
||
ClassClearStates,
|
||
ClassHpRecover,
|
||
ClassMpRecover,
|
||
ClassTpRecover
|
||
);
|
||
};
|
||
|
||
if (dsJobChangeMZ) {
|
||
const _Game_Actor_changeClassEx = Game_Actor.prototype.changeClassEx;
|
||
Game_Actor.prototype.changeClassEx = function (classId, keepExp) {
|
||
_Game_Actor_changeClassEx.apply(this, arguments);
|
||
recoverAllTp(
|
||
actor,
|
||
ClassClearStates,
|
||
ClassHpRecover,
|
||
ClassMpRecover,
|
||
ClassTpRecover
|
||
);
|
||
};
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 全回復
|
||
*
|
||
* @param {} params -
|
||
* @returns {boolean} 回復に成功したか
|
||
*/
|
||
if (TpRecover) {
|
||
if (Potadra_checkSwitch(TpRecoverSwitch)) {
|
||
Game_Interpreter.prototype.command314 = function (params) {
|
||
this.iterateActorEx(params[0], params[1], (actor) => {
|
||
recoverAllTp(actor);
|
||
});
|
||
return true;
|
||
};
|
||
}
|
||
}
|
||
})();
|