code:
//=============================================================================
// NearEventSensor.js
// ----------------------------------------------------------------------------
// (C) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 3.1.1 2020/07/05 3.1.0の修正をイベント開始時にも適用できるよう変更
// 3.1.0 2020/07/05 イベントから離れたらエフェクトを即時消去できる設定を追加
// 3.0.0 2020/05/26 センサーエフェクトをイベントではなくプレイヤーに適用できる機能を追加。パラメータの再設定が必要です。
// 2.2.0 2018/11/05 フキダシの表示完了までウェイトするかどうかの設定を追加
// 2.1.1 2018/11/05 マップ移動時にすでに検知範囲内に入っていたイベントについて、一度範囲外に出ないと反応しない問題を修正
// 2.1.0 2017/10/23 特定のスイッチもしくはセルフスイッチが有効なときのみ感知エフェクトを出す機能を追加
//                  パラメータの型指定機能に対応
// 2.0.0 2016/08/27 フラッシュの代わりにフキダシアイコンを利用できる機能を追加
//                  パラメータ名等に一部破壊的な変更が加わっています。
// 1.1.0 2016/07/14 各種パラメータとメモ欄で感知可否の設定を追加
// 1.0.1 2015/11/01 既存コードの再定義方法を修正（内容に変化なし）
// 1.0.0 2015/10/31 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 周辺イベント感知プラグイン
 * @author トリアコンタン
 *
 * @param DefaultFlash
 * @text デフォルトフラッシュ
 * @desc 感知時にイベントを指定色でフラッシュさせます。(ON/OFF)
 * @default true
 * @type boolean
 *
 * @param DefaultBalloon
 * @text デフォルトフキダシ
 * @desc 感知時にイベントに自動でフキダシアイコンを出します。
 * (1:びっくり 2:はてな 3:音符 4:ハート 5:怒り....)
 * @default 0
 * @type select
 * @option なし
 * @value 0
 * @option びっくり
 * @value 1
 * @option はてな
 * @value 2
 * @option 音符
 * @value 3
 * @option ハート
 * @value 4
 * @option 怒り
 * @value 5
 * @option 汗
 * @value 6
 * @option くしゃくしゃ
 * @value 7
 * @option 沈黙
 * @value 8
 * @option 電球
 * @value 9
 * @option Zzz
 * @value 10
 * @option ユーザ定義1
 * @value 11
 * @option ユーザ定義2
 * @value 12
 * @option ユーザ定義3
 * @value 13
 * @option ユーザ定義4
 * @value 14
 * @option ユーザ定義5
 * @value 15
 *
 * @param DisableEmpty
 * @text 空イベントは無効
 * @desc イベント内容が空の場合、感知しなくなります。(ON/OFF)
 * @default true
 * @type boolean
 *
 * @param SensorDistance
 * @text 感知距離
 * @desc イベントを関知する距離です。
 * @default 2
 * @type number
 *
 * @param FlashColor
 * @text フラッシュカラー
 * @desc 感知時のフラッシュ色です。R(赤),G(緑),B(青),A(強さ)の順番で指定してください。
 * @default {"Red":"255","Green":"255","Blue":"255","Alpha":"255"}
 * @type struct<Color>
 *
 * @param FlashDuration
 * @text フラッシュ時間
 * @desc フラッシュさせるフレーム数です。
 * @default 60
 * @type number
 *
 * @param BalloonInterval
 * @text フキダシ間隔
 * @desc フキダシを表示する間隔のフレーム数です。
 * @default 15
 * @type number
 *
 * @param WaitForBalloon
 * @text フキダシ完了までウェイト
 * @desc 範囲内に居続けた場合の連続フキダシ表示で、フキダシの表示が終わるのを待ってから次のフキダシの表示します。
 * @default true
 * @type boolean
 *
 * @param ConsiderationDir
 * @text 向きを考慮
 * @desc プレイヤーがイベントの方を向いている場合のみエフェクトを有効にします。(ON/OFF)
 * @default false
 * @type boolean
 *
 * @param ApplyPlayer
 * @text プレイヤーに適用
 * @desc 感知時のエフェクトを対象イベントではなくプレイヤーに対して適用します。
 * @default false
 * @type boolean
 *
 * @param EraseWhenAway
 * @text 離れたら消去
 * @desc イベントから離れたらエフェクトを消去します。
 * @default false
 * @type boolean
 *
 * @help 周囲に存在するイベントを感知してイベントにエフェクトを発生させます。
 * 実行可能なイベントをプレイヤーに伝えてユーザビリティを向上させます。
 * 使用できるエフェクトはフラッシュとフキダシアイコン（およびその両方）です。
 *
 * 各エフェクトの有効可否は、プラグインパラメータによる一括設定と
 * イベントのメモ欄による個別設定があり、個別設定が優先されます。
 *
 * 感知時のエフェクトをフラッシュにしたい場合は、
 * メモ欄を以下の通り指定してください。
 * <NESフラッシュ対象:ON>  # 対象イベントのフラッシュを有効にします。
 * <NESフラッシュ対象:OFF> # 対象イベントのフラッシュを無効にします。
 *
 * 感知時のエフェクトをフキダシアイコンにしたい場合は、
 * メモ欄を以下の通り指定してください。
 * <NESフキダシ対象:1> # 対象イベントのフキダシを(1:びっくり)にします。
 * <NESフキダシ対象:0> # 対象イベントのフキダシを無効にします。
 *
 * 特定のスイッチもしくはセルフスイッチがONのときのみ感知エフェクトを
 * 表示したい場合は、メモ欄を以下の通り指定してください。
 * <NESスイッチ:1>       # スイッチ[1]がONのときのみエフェクトを出します。
 * <NESSwitch:1>         # 同上
 * <NESセルフスイッチ:A> # セルフスイッチ[A]がONのときのみエフェクトを出します。
 * <NESSelfSwitch:1>     # 同上
 *
 * 注意！
 * モバイル端末では、フラッシュを使用すると動作が
 * 少し重くなるようです。ご利用の際はご注意ください。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

/*~struct~Color:
 * @param Red
 * @desc 赤色の情報です。(0-255)
 * @type number
 * @min 0
 * @max 255
 * @default 255
 *
 * @param Green
 * @desc 緑色の情報です。(0-255)
 * @type number
 * @min 0
 * @max 255
 * @default 255
 *
 * @param Blue
 * @desc 青色の情報です。(0-255)
 * @type number
 * @min 0
 * @max 255
 * @default 255
 *
 * @param Alpha
 * @desc 強さの情報です。(0-255)
 * @type number
 * @min 0
 * @max 255
 * @default 255
 */

(function() {
    'use strict';
    var metaTagPrefix = 'NES';

    var getArgNumber = function(arg, min, max) {
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
    };

    var getArgBoolean = function(arg) {
        return arg === true ? true : (arg || '').toUpperCase() === 'ON' || (arg || '').toUpperCase() === 'TRUE';
    };

    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + (name ? name : '');
        return object.meta.hasOwnProperty(metaTagName) ? object.meta[metaTagName] : undefined;
    };

    var getMetaValues = function(object, names) {
        if (!Array.isArray(names)) return getMetaValue(object, names);
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    var convertEscapeCharacters = function(text) {
        if (text == null) text = '';
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
    };

    //=============================================================================
    // パラメータの取得と整形
    //=============================================================================
    var createPluginParameter = function(pluginName) {
        var paramReplacer = function(key, value) {
            if (value === 'null') {
                return value;
            }
            if (value[0] === '"' && value[value.length - 1] === '"') {
                return value;
            }
            try {
                return JSON.parse(value);
            } catch (e) {
                return value;
            }
        };
        var parameter     = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
        PluginManager.setParameters(pluginName, parameter);
        return parameter;
    };
    var param = createPluginParameter('NearEventSensor');
    param.FlashColorArray = [param.FlashColor.Red, param.FlashColor.Green, param.FlashColor.Blue, param.FlashColor.Alpha];

    //=============================================================================
    // Sprite_Character
    //  キャラクターのフラッシュ機能を追加定義します。
    //=============================================================================
    var _Sprite_CharacterUpdate       = Sprite_Character.prototype.update;
    Sprite_Character.prototype.update = function() {
        _Sprite_CharacterUpdate.call(this);
        this.updateFlash();
    };

    Sprite_Character.prototype.updateFlash = function() {
        if (this._character.isFlash()) {
            this.setBlendColor(this._character._flashColor);
        }
    };

    var _Sprite_Character_updateBalloon = Sprite_Character.prototype.updateBalloon;
    Sprite_Character.prototype.updateBalloon = function() {
        if (this._character.isBalloonCancel()) {
            this.endBalloon();
        }
        _Sprite_Character_updateBalloon.apply(this, arguments);
    };

    //=============================================================================
    // Game_CharacterBase
    //  キャラクターのフラッシュ機能を追加定義します。
    //=============================================================================
    var _Game_CharacterBaseInitMembers       = Game_CharacterBase.prototype.initMembers;
    Game_CharacterBase.prototype.initMembers = function() {
        _Game_CharacterBaseInitMembers.call(this);
        this._flashColor    = null;
        this._flashDuration = 0;
    };

    var _Game_CharacterBaseUpdate       = Game_CharacterBase.prototype.update;
    Game_CharacterBase.prototype.update = function() {
        _Game_CharacterBaseUpdate.call(this);
        this.updateFlash();
    };

    Game_CharacterBase.prototype.startFlash = function(flashColor, flashDuration) {
        this._flashColor    = flashColor;
        this._flashDuration = flashDuration;
    };

    Game_CharacterBase.prototype.clearFlash = function() {
        this._flashColor = [0,0,0,0];
    };

    Game_CharacterBase.prototype.isFlash = function() {
        return this._flashDuration > 0;
    };

    Game_CharacterBase.prototype.updateFlash = function() {
        if (this.isFlash()) {
            this._flashColor[3] = this._flashColor[3] * (this._flashDuration - 1) / this._flashDuration;
            this._flashDuration--;
        }
    };

    Game_CharacterBase.prototype.applySensorEffect = function(targetEvent) {
        if (!this.isFlash() && targetEvent.isFlashEvent()) {

     		if( this._tone != [64, 64, 64, 0].toString()){
     			$gameVariables.setValue(553,this._eventId);//追記
	            this.setTone(64, 64, 64, 0);
	        }
        }
        var balloonId = targetEvent.getSensorBalloonId();
        if (balloonId && (!param.WaitForBalloon || !this.isBalloonPlaying())) {
            if (this._balloonInterval <= 0 || isNaN(this._balloonInterval)) {
                this.requestBalloon(balloonId);
                this._balloonInterval = param.BalloonInterval;
            } else {
                this._balloonInterval--;
            }
        }
        this._sensorApply = true;
    };

    Game_CharacterBase.prototype.eraseSensorEffect = function() {
        if (!this._sensorApply || !param.EraseWhenAway) {
            return;
        }
        if(!$gameMap.isEventRunning()){
	        this.setTone(0, 0, 0, 0);
	    }
        this.clearFlash();
        this._balloonCancel = true;
        this._sensorApply = false;
    };

    Game_CharacterBase.prototype.isBalloonCancel = function() {
        var cancel = this._balloonCancel;
        this._balloonCancel = false;
        return cancel;
    };

    //=============================================================================
    // Game_Event
    //  プレイヤーとの距離を測り、必要な場合にエフェクトさせる機能を追加定義します。
    //=============================================================================
    var _Game_Event_initialize = Game_Event.prototype.initialize;
    Game_Event.prototype.initialize = function(mapId, eventId) {
        _Game_Event_initialize.apply(this, arguments);
        this._balloonInterval = 0;
    };

    var _Game_EventUpdate       = Game_Event.prototype.update;
    Game_Event.prototype.update = function() {
        _Game_EventUpdate.apply(this, arguments);
        if (this.page()) {
            this.updateSensorEffect();
        }
    };

    var _Game_Event_start = Game_Event.prototype.start;
    Game_Event.prototype.start = function() {
        _Game_Event_start.apply(this, arguments);
        this.eraseSensorEffect();
    };

    Game_Event.prototype.updateSensorEffect = function() {
        var subject = this.findNearEffectSubject();
        if (this.isSensorOn()) {
            subject.applySensorEffect(this);
        } else {
            subject.eraseSensorEffect(this);
            this._balloonInterval = 0;
        }
    };

    Game_Event.prototype.isSensorOn = function() {
        return this.isEmptyValidate() && this.isVeryNearThePlayer() &&
            !$gameMap.isEventRunning() && this.isValidSensor();
    };

    Game_Event.prototype.findNearEffectSubject = function() {
        return param.ApplyPlayer ? $gamePlayer : this;
    };

    Game_Event.prototype.isEmptyValidate = function() {
        var list = this.list();
        return (list && list.length > 1) || !param.DisableEmpty;
    };

    Game_Event.prototype.isFlashEvent = function() {
        var useFlash = getMetaValues(this.event(), ['フラッシュ対象', 'FlashEvent']);
        return useFlash ? getArgBoolean(useFlash) : param.DefaultFlash;
    };

    Game_Event.prototype.isValidSensor = function() {
        return this.isValidSensorSwitch() && this.isValidSensorSelfSwitch();
    };

    Game_Event.prototype.isValidSensorSwitch = function() {
        var switchId = getMetaValues(this.event(), ['スイッチ', 'Switch']);
        return switchId ? $gameSwitches.value(getArgNumber(switchId, 1)) : true;
    };

    Game_Event.prototype.isValidSensorSelfSwitch = function() {
        var selfSwitchType = getMetaValues(this.event(), ['セルフスイッチ', 'SelfSwitch']);
        return selfSwitchType ? $gameSelfSwitches.value([this._mapId, this._eventId, selfSwitchType.toUpperCase()]) : true;
    };

    Game_Event.prototype.getSensorBalloonId = function() {
        var balloonId = getMetaValues(this.event(), ['フキダシ対象', 'BalloonEvent']);
        return balloonId ? getArgNumber(balloonId, 0) : param.DefaultBalloon;
    };

    Game_Event.prototype.isVeryNearThePlayer = function() {
        var sx = this.deltaXFrom($gamePlayer.x);
        var sy = this.deltaYFrom($gamePlayer.y);
        var ax = Math.abs(sx);
        var ay = Math.abs(sy);
        var result = (ax + ay <= param.SensorDistance);
        if (result && param.ConsiderationDir) {
            if (ax > ay) {
                return $gamePlayer.direction() === (sx > 0 ? 6 : 4);
            } else if (sy !== 0) {
                return $gamePlayer.direction() === (sy > 0 ? 2 : 8);
            } else {
                return true;
            }
        }
        return result;
    };
})();


code:
//=============================================================================
// NoSellItem.js
//=============================================================================

/*:ja
 * @plugindesc アイテムの売値を0(売却禁止)にするプラグインです。
 *
 * @help
 * アイテムのメモ欄に <noSell> と書くとそのアイテムは売却できなくなります。
 * アイテムのメモ欄に <RealOnly> と書くとスイッチ15がオフのときのみ売却できます。
 */

(function() {
    Window_ShopSell.prototype.isEnabled = function(item) {
        if (item != undefined) {
            if (item.meta.noSell) {
                return false;
            }
            if (item.meta.RealOnly && $gameSwitches.value(15)) {
                return false;
            }
            if (item.meta.DreamOnly && !$gameSwitches.value(15)) {
                return false;
            }
            return item && item.price > 0;
        }
        return false;
    };
})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// 素手禁止 / NoWeaponDisabled.js
//=============================================================================

/*:ja
 * v0.5.0
 * @plugindesc 装備画面で武器の装備無しを禁止する
 * @author Declare War
 *
 * @param EquipCondition
 * @desc 装備を解除できる条件を記述します。
 * @default true
 */

(function(){
var NoWeaponDisabled = { params: PluginManager.parameters('NoWeaponDisabled') };

NoWeaponDisabled.EquipCondition = NoWeaponDisabled.params['EquipCondition'];

	// Game_Actor
	// clearEquipments #a
	var _Game_Actor_clearEquipments = Game_Actor.prototype.clearEquipments;
	Game_Actor.prototype.clearEquipments = function(){
		if (SceneManager._scene.constructor === Scene_Equip){
			this.noWeaponDisabledClearEquipments();
		}else{
			_Game_Actor_clearEquipments.call(this);
		}
	};
	// noWeaponDisabledClearEquipments #n
	Game_Actor.prototype.noWeaponDisabledClearEquipments = function() {
		var maxSlots = this.equipSlots().length;
		for (var i = 0; i < maxSlots; i++) {
			if (this.isEquipChangeOk(i) && this.equipSlots()[i] !== 1) {
				this.changeEquip(i, null);
			}
		}
    };
	// Scene_Equip
	// onItemOk #a
	var _Scene_Equip_onItemOk = Scene_Equip.prototype.onItemOk;
	Scene_Equip.prototype.onItemOk = function() {
	var Condition = new Function( "return !!("+ NoWeaponDisabled.EquipCondition + ");" )()
		if (this.actor().equipSlots()[this._slotWindow.index()] === 2 && !this._itemWindow.item()){
			if(Condition){
				//装備解除できない時
				_Scene_Equip_onItemOk.call(this);
			}else{
				//装備解除できる時
				this.noWeaponDisabledOnItemOk();
			}
		}else{
			_Scene_Equip_onItemOk.call(this);
		}
	};
	// noWeaponDisabledOnItemOk #n
	Scene_Equip.prototype.noWeaponDisabledOnItemOk = function() {
		SoundManager.playBuzzer();
		this._itemWindow.activate();
    };
})();


code:
//=============================================================================
// PANDA_MultiAction.js
//=============================================================================
// [Update History]
// 2021-06-01 Ver.1.0.0 First Release for MV/MZ.
// 2021-06-23 Ver.1.1.0 fix for subfolder (MZ 1.3.0) and bug fix for transformation.
// 2021-07-05 Ver.1.1.1 revert fix for subfolder (MZ 1.3.2).

/*:
 * @target MV MZ
 * @plugindesc set the detail action pattern of enemies who have multiple action.
 * @author panda(werepanda.jp)
 * @url http://www.werepanda.jp/blog/20210601210432.html
 *
 * @help [How to Use]
 * In the action pattern of the enemies who have multiple action,
 * you can make following actions by writing them in the note of the enemies.
 *
 * <MultiActionX:Action Pattern Numbers>
 *  Select the specified actions only for the Xth action of multiple action.
 * <LastAction:Action Pattern Numbers>
 *  Cancel the after actions when the specified actions are selected.
 * The Action Pattern Numbers specifies the order of the action pattern list
 * separated by commas(,).
 *
 * Example: When the action pattern is following:
 *   - Normal Attack
 *   - Fire Magic for single target
 *   - Fire Magic for all
 *   - Special Move for all
 *  <MultiAction1:4>   -> Special Move is selected only in the 1st action.
 *  <MultiAction2:2,3> -> Fire Magics are selected only in the 2nd action.
 *  <LastAction:4>     -> Cancel the after actions if Special Move is selected.
 *   * Normal Attack is selected in either 1st or 2nd action.
 *
 * [License]
 * this plugin is released under MIT license.
 * https://opensource.org/licenses/mit-license.php
 *
 * @param MaxMultiAction
 * @text Max number of actions
 * @desc Specifies the maximum number of actions enemies can take in the game.
 * @type number
 * @default 3
 * @decimals 0
 * @min 1
 *
 */

/*:ja
 * @target MV MZ
 * @plugindesc 敵キャラの複数回行動で単独行動や特定回のみ有効な行動を作ります。
 * @author panda(werepanda.jp)
 * @url http://www.werepanda.jp/blog/20210601210432.html
 *
 * @help ■ 使い方
 * 複数回行動する敵キャラの行動パターンにおいて、
 * 敵キャラのメモに記述することで、以下のような行動パターンを作成できます。
 *
 * <MultiActionX:行動パターン番号>
 *  指定した行動パターンは、複数回行動のうちX回目の行動でのみ選択されます。
 * <LastAction:行動パターン番号>
 *  指定した行動パターンを選択すると、以降の複数回行動は行わなくなります。
 * 行動パターン番号は、行動パターンリストの順番をカンマ(,)区切りで指定します。
 *
 * 例：行動パターンが以下で指定されている時
 *   ・通常攻撃
 *   ・単体炎魔法
 *   ・全体炎魔法
 *   ・全体必殺技
 *  <MultiAction1:4>   → 全体必殺技は1回目の行動でのみ選択
 *  <MultiAction2:2,3> → 単体炎魔法と全体炎魔法は2回目の行動でのみ選択
 *  <LastAction:4>     → 全体必殺技を選んだらそれ以降の行動はしない
 *   ※ 通常攻撃は1回目でも2回目でも選択
 *
 * ■ 利用規約
 * このプラグインはMITライセンスで配布されます。
 * ご自由にお使いください。
 * https://opensource.org/licenses/mit-license.php
 *
 * @param MaxMultiAction
 * @text 複数回行動最大値
 * @desc ゲーム内で敵キャラが取り得る最大の行動回数を指定します。大きくしすぎると動作が重くなります。
 * @type number
 * @default 3
 * @decimals 0
 * @min 1
 *
 */

/*:ko
 * @target MV MZ
 * @plugindesc 적의 여러 번 행동에서 1회 행동이나 특정회에만 유효한 행동을 만듭니다.
 * @author panda(werepanda.jp)
 * @url http://www.werepanda.jp/blog/20210601210432.html
 *
 * @help [사용법]
 * 여러 번 행동하는 적 캐릭터의 행동 패턴에서
 * 적 캐릭터의 메모란에 기술함으로 다음과 같은 행동 패턴을 만들 수 있습니다.
 *
 * <MultiActionX:행동 패턴 번호>
 *  지정된 번호의 행동 패턴은 여러 번 행동중 X번째 행동에서만 선택됩니다.
 * <LastAction:행동 패턴 번호>
 *  지정된 번호의 행동 패턴이 선택되면 이후의 행동을 안 하게 됩니다.
 * 행동 패턴 번호는 행동 패턴 리스트의 순서를 쉼표(,)로 구분하여 지정합니다.
 *
 * 예) 행동 패턴이 다음과 같이 지정되어 있을 때
 *   - 일반 공격
 *   - 단독 화염 마법
 *   - 전체 화염 마법
 *   - 전체 필살기
 *  <MultiAction1:4>   -> 전체 필살기는 첫번째 행동에서만 선택됨
 *  <MultiAction2:2,3> -> 단독 및 전체 화염 마법은 두번째 행동에서만 선택됨
 *  <LastAction:4>     -> 전체 필살기가 선택되면 이후의 행동은 하지 않음
 *   * 일반 공격은 첫번째나 두번째나 선택됨
 *
 * [이용 약관]
 * 이 플러그인은 MIT 라이센스로 공개됩니다.
 * https://opensource.org/licenses/mit-license.php
 *
 * @param MaxMultiAction
 * @text 여러 번 행동 최대치
 * @desc 게임 내에서 적 캐릭터가 취할 수 있는 최대 행동 횟수를 지정합니다. 너무 크게 하면 동작이 무거워집니다.
 * @type number
 * @default 3
 * @decimals 0
 * @min 1
 *
 */

(() => {
	'use strict';

	// This Plugin Name
	const pluginName = decodeURIComponent(document.currentScript.src).match(/([^\/]+)\.js$/)[1];

	// Parameters
	const parameters = PluginManager.parameters(pluginName);
	const MaxMultiAction = Number(parameters['MaxMultiAction']) || 3;

	//--------------------------------------------------
	// Game_Enemy.selectAllActions
	//  [Modified Definition]
	//--------------------------------------------------
	Game_Enemy.prototype.selectAllActions = function(actionList) {
		const ratingMax = Math.max(...actionList.map(a => a.rating));
		const ratingZero = ratingMax - 3;
		actionList = actionList.filter(a => a.rating > ratingZero);
		const action = this.selectAction(actionList, ratingZero);
		this.action(this._actionIndex).setEnemyAction(action);
		// delete next actions if last action
		if (this._lastActionList.indexOf(action) != -1) {
			this._actions.length = this._actionIndex + 1;
		}
	}

	//--------------------------------------------------
	// Game_Enemy.makeActions
	//  [Modified Definition]
	//--------------------------------------------------
	Game_Enemy.prototype.makeActions = function() {
		Game_Battler.prototype.makeActions.call(this);
		// make multi action list
		this.makeMultiActionList();
		for (let i = 0; i < this.numActions(); i++) {
			this._actionIndex = i;
			if (this._multiActionList[i]) {
				const actionList = this._multiActionList[i].filter(a => this.isActionValid(a));
				if (actionList.length > 0) {
					this.selectAllActions(actionList);
				}
			}
		}
		this.setActionState("waiting");
	}

	//--------------------------------------------------
	// Game_Enemy.makeMultiActionList
	//  [New Definition]
	//--------------------------------------------------
	Game_Enemy.prototype.makeMultiActionList = function() {
		// make last action list
		this._lastActionList = this.parseActionList(this.enemy().meta.LastAction).map(n => this.enemy().actions[n - 1]);
		// get meta data and initialize multi action list
		this._multiActionList = [];
		const multiActions = [];
		for (let i = 1; i <= MaxMultiAction; i++) {
			multiActions.push(this.parseActionList(this.enemy().meta['MultiAction' + i]));
			this._multiActionList.push([]);
		}
		// make multi action list
		for (let a = 0; a < this.enemy().actions.length; a++) {
			let pushed = false;
			for (let i = 0; i < MaxMultiAction; i++) {
				if (multiActions[i].indexOf(a + 1) != -1) {
					this._multiActionList[i].push(this.enemy().actions[a]);
					pushed = true;
				}
			}
			if (!pushed) {
				// can always use
				for (let i = 0; i < MaxMultiAction; i++) {
					this._multiActionList[i].push(this.enemy().actions[a]);
				}
			}
		}
	}

	//--------------------------------------------------
	// Game_Enemy.parseActionList
	//  [New Definition]
	//--------------------------------------------------
	Game_Enemy.prototype.parseActionList = function(actionList) {
		if (actionList) {
			return actionList.split(',').map(Number);
		} else {
			return [];
		}
	}

})();


code:
//=============================================================================
// ParallaxLayerMap.js
// ----------------------------------------------------------------------------
// (C) 2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.5a 2021/02/21 suzuイベントページ内の注釈でも反映するように変更
// 1.1.5  2020/08/30 YEP_CoreEngine.jsと併用したとき解像度次第でレイヤーマップのピクセルがずれる場合がある競合を修正
// 1.1.4  2020/07/05 MOG_ChronoEngine.jsと併用したときマップの一部がちらつく場合がある競合を修正
// 1.1.3  2020/05/09 競合対策コードを追加
// 1.1.2  2018/12/22 HalfMove.jsによる減速斜め移動など特定の条件下でマップの描画位置がずれる場合がある現象を修正
// 1.1.1  2017/11/19 MOG_ChronoEngine.js等との競合を解消
// 1.1.0  2017/09/20 ヘルプにサンプルマップの旨を記載
// 1.1.0  2017/09/14 合成方法や不透明度の初期値を設定できるメモ欄を追加
// 1.0.0  2017/08/20 初版
// 0.9.0  2017/08/19 プロトタイプ版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc ParallaxLayerMapPlugin
 * @author triacontane
 *
 * @help ParallaxLayerMap.js
 *
 * 複数のレイヤーを使った多層一枚絵マップを作成可能にします。
 * イベントでレイヤーを作成するので、レイヤー数は無制限です。
 *
 * イベントを作成してメモ欄を以下の通り記述すると、指定した画像がマップに表示され、
 * かつイベント位置とは無関係に画像の左上がマップの左上に合わせられます。
 *
 * <PLM:file>        # 「img/parallaxes/file」を一枚絵として表示します。
 * <PLM_Blend:1>     # 合成方法の初期値を「加算」にします。
 * <PLM合成:1>       # 同上
 * <PLM_Opacity:128> # 不透明度の初期値を「128」にします。
 * <PLM不透明度:128> # 同上
 *
 * イベント内の「画像」「オプション」項目は無視されますが、その他の項目は
 * 通常のイベントと同じように機能します。
 *
 * 合成方法や不透明度などを後から変更したい場合は、自律移動で指定するか
 * 以下の「キャラクターグラフィック表示拡張プラグイン」と併用してください。
 * https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/CharacterGraphicExtend.js
 *
 * スクリプト（「移動ルートの設定」から実行）
 * this.shiftPosition(10, 20); # 表示位置をX[10] Y[20]ずらします。
 *
 * 注意！
 * 当プラグインはマップのループには対応していません。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 当プラグインで使用できるサンプルマップをどらぴか様よりご提供いただきました。
 * この場を借りて御礼申し上げます。
 *
 * 以下のURLから「Download」ボタンでダウンロードできます。
 * クレジット表記なしでご自由にお使い頂けるご許可を頂いています。
 * https://github.com/triacontane/RPGMakerMV/blob/master/Sample/sample_parallax.zip
 *
 * PIKA's GAME GALLERY
 * https://mashimarohb252d6.wixsite.com/pikasgame
 *
 * @noteParam PLM
 * @noteRequire 1
 * @noteDir img/parallaxes
 * @noteType file
 * @noteData events
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc 多層レイヤー一枚絵マッププラグイン
 * @author トリアコンタン
 *
 * @help ParallaxLayerMap.js
 *
 * 複数のレイヤーを使った多層一枚絵マップを作成可能にします。
 * イベントでレイヤーを作成するので、レイヤー数は無制限です。
 *
 * イベントを作成してメモ欄を以下の通り記述すると、指定した画像がマップに表示され、
 * かつイベント位置とは無関係に画像の左上がマップの左上に合わせられます。
 *
 * <PLM:file>        # 「img/parallaxes/file」を一枚絵として表示します。
 * <PLM_Blend:1>     # 合成方法の初期値を「加算」にします。
 * <PLM合成:1>       # 同上
 * <PLM_Opacity:128> # 不透明度の初期値を「128」にします。
 * <PLM不透明度:128> # 同上
 *
 * イベント内の「画像」「オプション」項目は無視されますが、その他の項目は
 * 通常のイベントと同じように機能します。
 *
 * 合成方法や不透明度などを後から変更したい場合は、自律移動で指定するか
 * 以下の「キャラクターグラフィック表示拡張プラグイン」と併用してください。
 * https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/CharacterGraphicExtend.js
 *
 * スクリプト（「移動ルートの設定」から実行）
 * this.shiftPosition(10, 20); # 表示位置をX[10] Y[20]ずらします。
 *
 * 注意！
 * 当プラグインはマップのループには対応していません。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 当プラグインで使用できるサンプルマップをどらぴか様よりご提供いただきました。
 * この場を借りて御礼申し上げます。
 *
 * 以下のURLから「Download」ボタンでダウンロードできます。
 * クレジット表記なしでご自由にお使い頂けるご許可を頂いています。
 * https://github.com/triacontane/RPGMakerMV/blob/master/Sample/sample_parallax.zip
 *
 * PIKA's GAME GALLERY
 * https://mashimarohb252d6.wixsite.com/pikasgame
 *
 * @noteParam PLM
 * @noteRequire 1
 * @noteDir img/parallaxes
 * @noteType file
 * @noteData events
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var metaTagPrefix = 'PLM';

    //=============================================================================
    // ローカル関数
    //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
    //=============================================================================
    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + name;
        if (!object || !object.meta) {
            return undefined;
        }
        return object.meta.hasOwnProperty(metaTagName) ? convertEscapeCharacters(object.meta[metaTagName]) : undefined;
    };

    var getMetaValues = function(object, names) {
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    var convertEscapeCharacters = function(text) {
        if (isNotAString(text)) text = '';
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
    };

    var isNotAString = function(args) {
        return String(args) !== args;
    };

    // add by suzu
    var setParallaxLayerMap = function(event, args){
        var [ name, blendMode, opacity ] = args;
        if(isNaN(+blendMode) || isNaN(+opacity)){
            console.error(`ParallaxLayerMap_INVALID_ARGUMENTS`);
            return;
        }
        if(!!name){
            event._mapLayerName = name;
            event._blendMode = +blendMode;
            event._opacity = +opacity;
            return true;
        }

        return false;
    }

    // add by suzu
    var loadParallaxLayerMap = function(event, args){
        if(setParallaxLayerMap(event, args)){
            var spriteset = SceneManager._scene._spriteset;
            if(!!spriteset && !!spriteset._tilemap){
                // 表示中のマップレイヤーがあれば消す
                spriteset._tilemap.children.forEach(sprite => {
                    var isLayer = sprite && sprite.isLayer && sprite.isLayer();
                    if(isLayer){
                        spriteset._tilemap.removeChild(sprite)
                    }
                });
            }
            if(!!spriteset && !!spriteset.createCharacters){
                spriteset.createCharacters();
            }
        }
    }

    //=============================================================================
    // Game_Map
    //  画面上のピクセル座標を返します。
    //=============================================================================
    Game_Map.prototype.displayPixelX = function() {
        return this._displayX * this.tileWidth();
    };

    Game_Map.prototype.displayPixelY = function() {
        return this._displayY * this.tileHeight();
    };

    //=============================================================================
    // Game_Character
    //  マップレイヤー名を取得します。
    //=============================================================================
    Game_CharacterBase.prototype.getMapLayerName = function() {
        return this._mapLayerName;
    };

    Game_CharacterBase.prototype.isMapLayer = function() {
        return !!this._mapLayerName;
    };

    var _Game_CharacterBase_isNearTheScreen = Game_CharacterBase.prototype.isNearTheScreen;
    Game_CharacterBase.prototype.isNearTheScreen = function() {
        return this.isMapLayer() || _Game_CharacterBase_isNearTheScreen.apply(this, arguments);
    };

    Game_CharacterBase.prototype.shiftPosition = function(x, y) {
        this._additionalX = x;
        this._additionalY = y;
    };

    Game_CharacterBase.prototype.existPage = function() {
        return false;
    };

    //=============================================================================
    // Game_Event
    //  レイヤーイベントに関する機能を実装します。
    //=============================================================================
    var _Game_Event_initialize      = Game_Event.prototype.initialize;
    Game_Event.prototype.initialize = function(mapId, eventId) {
        _Game_Event_initialize.apply(this, arguments);
        this._mapLayerName = getMetaValue(this.getOriginalEvent(), '') || null;
        if (this._mapLayerName) {
            this.initBlendMode();
            this.initOpacity();
        }
        if(this._pageIndex >= 0){
            this.loadCaptionCommand();
        }
    };

    Game_Event.prototype.initBlendMode = function() {
        var blendMode = getMetaValues(this.getOriginalEvent(), ['_Blend', '合成']);
        if (blendMode) {
            this._blendMode = parseInt(blendMode);
        }
    };

    Game_Event.prototype.initOpacity = function() {
        var blendMode = getMetaValues(this.getOriginalEvent(), ['_Opacity', '不透明度']);
        if (blendMode) {
            this._opacity = parseInt(blendMode);
        }
    };

    // Resolve conflict for TemplateEvent
    Game_Event.prototype.getOriginalEvent = function() {
        return $dataMap.events[this._eventId];
    };

    Game_Event.prototype.existPage = function() {
        return this._pageIndex >= 0;
    };

    Game_Event.prototype.getLayerX = function() {
        return (this._additionalX || 0) - Math.round($gameMap.displayPixelX());
    };

    Game_Event.prototype.getLayerY = function() {
        return (this._additionalY || 0) - Math.round($gameMap.displayPixelY());
    };

    //=============================================================================
    // Spriteset_Map
    //  キャラクタースプライトをマップレイヤースプライトに差し替えます。
    //=============================================================================
    var _Spriteset_Map_createCharacters      = Spriteset_Map.prototype.createCharacters;
    Spriteset_Map.prototype.createCharacters = function() {
        _Spriteset_Map_createCharacters.apply(this, arguments);
        var layerSprites = this._characterSprites.filter(function(sprite) {
            return sprite.isLayer && sprite.isLayer();
        });
        layerSprites.forEach(function(oldSprite) {
            this.replaceLayerSprite(oldSprite);
        }, this);
    };

    Spriteset_Map.prototype.replaceLayerSprite = function(oldSprite) {
        var deleteIndex = this._characterSprites.indexOf(oldSprite);
        if (deleteIndex >= 0) {
            this._characterSprites.splice(deleteIndex, 1);
        }
        this._tilemap.removeChild(oldSprite);
        var newSprite = new Sprite_MapLayer(oldSprite.getCharacter());
        this._tilemap.addChild(newSprite);
    };

    //=============================================================================
    // Sprite_Character
    //  マップレイヤー判定を追加します。
    //=============================================================================
    var _Sprite_Character_character         = Sprite_Character.prototype.setCharacter;
    Sprite_Character.prototype.setCharacter = function(character) {
        _Sprite_Character_character.apply(this, arguments);
        this._layerName = character.getMapLayerName();
    };

    Sprite_Character.prototype.getCharacter = function() {
        return this._character;
    };

    Sprite_Character.prototype.isLayer = function() {
        return !!this._layerName;
    };

    //=============================================================================
    // Sprite_MapLayer
    //  マップレイヤーを扱うクラスです。
    //=============================================================================
    function Sprite_MapLayer() {
        this.initialize.apply(this, arguments);
    }

    Sprite_MapLayer.prototype             = Object.create(Sprite_Character.prototype);
    Sprite_MapLayer.prototype.constructor = Sprite_MapLayer;

    Sprite_MapLayer.prototype.setCharacter = function(character) {
        Sprite_Character.prototype.setCharacter.apply(this, arguments);
        this.loadLayerBitmap();
    };

    Sprite_MapLayer.prototype.initMembers = function() {
        Sprite_Character.prototype.initMembers.apply(this, arguments);
        this.anchor.x = 0;
        this.anchor.y = 0;
    };

    Sprite_MapLayer.prototype.loadLayerBitmap = function() {
        this.bitmap = ImageManager.loadParallax(this._layerName, 0);
    };

    Sprite_MapLayer.prototype.updateVisibility = function() {
        Sprite_Character.prototype.updateVisibility.apply(this, arguments);
        if (!this._character.existPage()) {
            this.visible = false;
        }
    };

    Sprite_MapLayer.prototype.updatePosition = function() {
        this.x = this._character.getLayerX();
        this.y = this._character.getLayerY();
        this.z = this._character.screenZ();
        // Resolve conflict for MOG_ChronoEngine
        if (typeof Imported !== 'undefined' && Imported.MOG_ChronoEngine) {
            this.z += 1;
        }
    };

    Sprite_MapLayer.prototype.updateBitmap = function() {
        this._characterName = '';
    };

    Sprite_MapLayer.prototype.updateFrame = function() {
        // do nothing
    };

    //=============================================================================
    // Game_Interpreter
    // add by suzu
    //=============================================================================

    Game_Interpreter.prototype.parallaxLayerMap = function(args){
        loadParallaxLayerMap($gameMap.event(this.eventId()), args);
    }

    var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args){
        _Game_Interpreter_pluginCommand.call(this, command, args);
        if(command == metaTagPrefix){
            this.parallaxLayerMap(args);
        }
    }

    //=============================================================================
    // Game_Event
    // add by suzu
    //=============================================================================

    var _Game_Event_setupPage = Game_Event.prototype.setupPage;
    Game_Event.prototype.setupPage = function() {
        _Game_Event_setupPage.call(this);
        if(this._pageIndex >= 0){
            this.loadCaptionCommand();
        }
    };

    Game_Event.prototype.loadCaptionCommand = function(){
        var name = '';
        var blendMode = 0;
        var opacity = 255;
        this.list().forEach(command => {
            if(command && command.code != 108){
                return;
            }

            var match = command.parameters[0].match(/<([^<>:]*?:[^>]*?)>/g);

            if(!match){
                return;
            }
            var commands = match.map(cmd => {
                var [ func, arg ] = cmd.replace(/<|>/g, '').split(':');
                return [ func, arg ];
            }).filter(cmd => cmd[0].indexOf(metaTagPrefix) == 0);

            commands.forEach(p => {
                switch(p[0]){
                    case metaTagPrefix:
                        name = p[1];
                        break;
                    case metaTagPrefix + '_Blend':
                    case metaTagPrefix + '合成':
                        blendMode = p[1];
                        break;
                    case metaTagPrefix + '_Opacity':
                    case metaTagPrefix + '不透明度':
                        opacity = p[1];
                        break;
                }
            });
        });
        loadParallaxLayerMap(this, [ name, blendMode, opacity ]);
    };
})();


code:
//=============================================================================
// ParallaxLayerMap.js
// ----------------------------------------------------------------------------
// (C)2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.2.0 2021/05/03 合成方法『オーバーレイ』『ハードライト』を使用可能にしました。
// 1.1.5 2020/08/30 YEP_CoreEngine.jsと併用したとき解像度次第でレイヤーマップのピクセルがずれる場合がある競合を修正
// 1.1.4 2020/07/05 MOG_ChronoEngine.jsと併用したときマップの一部がちらつく場合がある競合を修正
// 1.1.3 2020/05/09 競合対策コードを追加
// 1.1.2 2018/12/22 HalfMove.jsによる減速斜め移動など特定の条件下でマップの描画位置がずれる場合がある現象を修正
// 1.1.1 2017/11/19 MOG_ChronoEngine.js等との競合を解消
// 1.1.0 2017/09/20 ヘルプにサンプルマップの旨を記載
// 1.1.0 2017/09/14 合成方法や不透明度の初期値を設定できるメモ欄を追加
// 1.0.0 2017/08/20 初版
// 0.9.0 2017/08/19 プロトタイプ版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 多層レイヤー一枚絵マッププラグイン
 * @author トリアコンタン
 *
 * @help ParallaxLayerMap.js
 *
 * 複数のレイヤーを使った多層一枚絵マップを作成可能にします。
 * イベントでレイヤーを作成するので、レイヤー数は無制限です。
 *
 * イベントを作成してメモ欄を以下の通り記述すると、指定した画像がマップに表示され、
 * かつイベント位置とは無関係に画像の左上がマップの左上に合わせられます。
 *
 * <PLM:file>        # 「img/parallaxes/file」を一枚絵として表示します。
 * <PLM_Blend:1>     # 合成方法の初期値を「加算」(※1)にします。
 * <PLM合成:1>       # 同上
 * <PLM_Opacity:128> # 不透明度の初期値を「128」にします。
 * <PLM不透明度:128> # 同上
 * <PLM_Z:1>        # 表示優先度を「1」にします。(※2)
 *
 * ※1 有効な合成方法の指定
 * 1:加算
 * 2:乗算
 * 3:スクリーン
 * 4:オーバーレイ
 * 9:ハードライト
 *
 * ※2 通常のプライオリティ設定は以下ですが、より細かく指定した場合に
 * 1～9の範囲内で指定できます。
 * 1:通常キャラの下
 * 3:通常キャラと同じ
 * 5:通常キャラの上
 *
 * イベント内の「画像」「オプション」項目は無視されますが、その他の項目は
 * 通常のイベントと同じように機能します。
 *
 * 合成方法や不透明度などを後から変更したい場合は、自律移動で指定するか
 * 以下の「キャラクターグラフィック表示拡張プラグイン」と併用してください。
 * https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/CharacterGraphicExtend.js
 *
 * スクリプト（「移動ルートの設定」から実行）
 * this.shiftPosition(10, 20); # 表示位置をX[10] Y[20]ずらします。
 *
 * 注意！
 * 当プラグインはマップのループには対応していません。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 当プラグインで使用できるサンプルマップをどらぴか様よりご提供いただきました。
 * この場を借りて御礼申し上げます。
 *
 * 以下のURLから「Download」ボタンでダウンロードできます。
 * クレジット表記なしでご自由にお使い頂けるご許可を頂いています。
 * https://github.com/triacontane/RPGMakerMV/blob/master/Sample/sample_parallax.zip
 *
 * PIKA's GAME GALLERY
 * https://mashimarohb252d6.wixsite.com/pikasgame
 *
 * @noteParam PLM
 * @noteRequire 1
 * @noteDir img/parallaxes
 * @noteType file
 * @noteData events
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var metaTagPrefix = 'PLM';

    //=============================================================================
    // ローカル関数
    //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
    //=============================================================================
    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + name;
        if (!object || !object.meta) {
            return undefined;
        }
        return object.meta.hasOwnProperty(metaTagName) ? convertEscapeCharacters(object.meta[metaTagName]) : undefined;
    };

    var getMetaValues = function(object, names) {
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    var convertEscapeCharacters = function(text) {
        if (isNotAString(text)) text = '';
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
    };

    var isNotAString = function(args) {
        return String(args) !== args;
    };

    //=============================================================================
    // Game_Map
    //  画面上のピクセル座標を返します。
    //=============================================================================
    Game_Map.prototype.displayPixelX = function() {
        return this._displayX * this.tileWidth();
    };

    Game_Map.prototype.displayPixelY = function() {
        return this._displayY * this.tileHeight();
    };

    //=============================================================================
    // Game_Character
    //  マップレイヤー名を取得します。
    //=============================================================================
    Game_CharacterBase.prototype.getMapLayerName = function() {
        return this._mapLayerName;
    };

    Game_CharacterBase.prototype.isMapLayer = function() {
        return !!this._mapLayerName;
    };

    var _Game_CharacterBase_isNearTheScreen = Game_CharacterBase.prototype.isNearTheScreen;
    Game_CharacterBase.prototype.isNearTheScreen = function() {
        return this.isMapLayer() || _Game_CharacterBase_isNearTheScreen.apply(this, arguments);
    };

    Game_CharacterBase.prototype.shiftPosition = function(x, y) {
        this._additionalX = x;
        this._additionalY = y;
    };

    Game_CharacterBase.prototype.existPage = function() {
        return false;
    };

    //=============================================================================
    // Game_Event
    //  レイヤーイベントに関する機能を実装します。
    //=============================================================================
    var _Game_Event_initialize      = Game_Event.prototype.initialize;
    Game_Event.prototype.initialize = function(mapId, eventId) {
        _Game_Event_initialize.apply(this, arguments);
        this._mapLayerName = getMetaValue(this.getOriginalEvent(), '') || null;
        if (this._mapLayerName) {
            this.initBlendMode();
            this.initOpacity();
            this.initZ();
        }
    };

    Game_Event.prototype.initBlendMode = function() {
        var blendMode = getMetaValues(this.getOriginalEvent(), ['_Blend', '合成']);
        if (blendMode) {
            this._blendMode = parseInt(blendMode);
        }
    };

    Game_Event.prototype.initOpacity = function() {
        var blendMode = getMetaValues(this.getOriginalEvent(), ['_Opacity', '不透明度']);
        if (blendMode) {
            this._opacity = parseInt(blendMode);
        }
    };

    Game_Event.prototype.initZ = function() {
        var z = getMetaValue(this.getOriginalEvent(), '_Z');
        if (z) {
            this._layerZ = parseInt(z);
        }
    };

    // Resolve conflict for TemplateEvent
    Game_Event.prototype.getOriginalEvent = function() {
        return $dataMap.events[this._eventId];
    };

    Game_Event.prototype.existPage = function() {
        return this._pageIndex >= 0;
    };

    Game_Event.prototype.getLayerX = function() {
        return (this._additionalX || 0) - Math.round($gameMap.displayPixelX());
    };

    Game_Event.prototype.getLayerY = function() {
        return (this._additionalY || 0) - Math.round($gameMap.displayPixelY());
    };

    Game_Event.prototype.getLayerZ = function() {
        return this._layerZ || this.screenZ();
    };

    //=============================================================================
    // Spriteset_Map
    //  キャラクタースプライトをマップレイヤースプライトに差し替えます。
    //=============================================================================
    var _Spriteset_Map_createCharacters      = Spriteset_Map.prototype.createCharacters;
    Spriteset_Map.prototype.createCharacters = function() {
        _Spriteset_Map_createCharacters.apply(this, arguments);
        var layerSprites = this._characterSprites.filter(function(sprite) {
            return sprite.isLayer && sprite.isLayer();
        });
        layerSprites.forEach(function(oldSprite) {
            this.replaceLayerSprite(oldSprite);
        }, this);
    };

    Spriteset_Map.prototype.replaceLayerSprite = function(oldSprite) {
        var deleteIndex = this._characterSprites.indexOf(oldSprite);
        if (deleteIndex >= 0) {
            this._characterSprites.splice(deleteIndex, 1);
        }
        this._tilemap.removeChild(oldSprite);
        var newSprite = new Sprite_MapLayer(oldSprite.getCharacter());
        this._tilemap.addChild(newSprite);
    };

    //=============================================================================
    // Sprite_Character
    //  マップレイヤー判定を追加します。
    //=============================================================================
    var _Sprite_Character_character         = Sprite_Character.prototype.setCharacter;
    Sprite_Character.prototype.setCharacter = function(character) {
        _Sprite_Character_character.apply(this, arguments);
        this._layerName = character.getMapLayerName();
    };

    Sprite_Character.prototype.getCharacter = function() {
        return this._character;
    };

    Sprite_Character.prototype.isLayer = function() {
        return !!this._layerName;
    };

    //=============================================================================
    // Sprite_MapLayer
    //  マップレイヤーを扱うクラスです。
    //=============================================================================
    function Sprite_MapLayer() {
        this.initialize.apply(this, arguments);
    }

    Sprite_MapLayer.prototype             = Object.create(Sprite_Character.prototype);
    Sprite_MapLayer.prototype.constructor = Sprite_MapLayer;

    Sprite_MapLayer.prototype.setCharacter = function(character) {
        Sprite_Character.prototype.setCharacter.apply(this, arguments);
        this.loadLayerBitmap();
    };

    Sprite_MapLayer.prototype.initMembers = function() {
        Sprite_Character.prototype.initMembers.apply(this, arguments);
        this.anchor.x = 0;
        this.anchor.y = 0;
    };

    Sprite_MapLayer.prototype.loadLayerBitmap = function() {
        this.bitmap = ImageManager.loadParallax(this._layerName, 0);
    };

    Sprite_MapLayer.prototype.updateVisibility = function() {
        Sprite_Character.prototype.updateVisibility.apply(this, arguments);
        if (!this._character.existPage()) {
            this.visible = false;
        }
        this._isPicture = this._character.blendMode() > 3;
    };

    Sprite_MapLayer.prototype.updatePosition = function() {
        this.x = this._character.getLayerX();
        this.y = this._character.getLayerY();
        this.z = this._character.getLayerZ();
    };

    Sprite_MapLayer.prototype.updateBitmap = function() {
        this._characterName = '';
    };

    Sprite_MapLayer.prototype.updateFrame = function() {
        // do nothing
    };
})();


code:
//=============================================================================
// Parallaxtiratira.js
//=============================================================================

/*:ja
 * @plugindesc ver1.00 ゲーム開始時にタイルセットロードの猶予を与えます。
 * @author まっつＵＰ
 *
 * @help
 *
 * RPGで笑顔を・・・
 *
 * このヘルプとパラメータの説明をよくお読みになってからお使いください。
 *
 * このプラグインを利用する場合は
 * 素材のみの販売はダメです。
 * 上記以外の規約等はございません。
 * もちろんツクールMVで使用する前提です。
 * 何か不具合ありましたら気軽にどうぞ。
 *
 * 免責事項：
 * このプラグインを利用したことによるいかなる損害も制作者は一切の責任を負いません。
 *
 */

(function() {

var _Game_Player_fadeType = Game_Player.prototype.fadeType;
Game_Player.prototype.fadeType = function() {
    if(!this._fadeType) return 0;
    return _Game_Player_fadeType.call(this);
};

})();


code:
//=============================================================================
// ParallelBgs.js
// ----------------------------------------------------------------------------
// (C)2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.0 2022/07/16 BGSの自動演奏が設定されているマップに移動したとき、もとのBGSを全停止できる機能を追加
// 1.0.4 2021/03/06 BGMのフェードアウトのイベントコマンドでは現在のラインのBGSのみフェードアウトするよう修正
// 1.0.3 2020/02/02 ヘルプのプラグインコマンド「PB_BGSライン変更」が間違っていたので「PB_BGS_ライン変更」に修正(コード修正なし)
// 1.0.2 2017/01/05 BGSの演奏状態によっては、セーブ＆ロードした際に一部のBGSが演奏されなくなる現象の修正(byくらむぼん氏)
// 1.0.1 2016/11/16 BGSをプレーしていない状態でセーブ＆ロードするとエラーになる現象の修正
// 1.0.0 2016/11/12 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc BGS並行演奏プラグイン
 * @author トリアコンタン
 *
 * @param stopAllAutoPlay
 * @text 自動演奏により停止
 * @desc BGSの自動演奏が設定されたマップに移動したとき、全ラインのBGSの演奏を停止します。
 * @default false
 * @type boolean
 *
 * @help 複数のBGSを並行して演奏できます。プラグインコマンドからBGSの演奏ラインを
 * 変更すると元のBGSを演奏したまま、新しくBGSを演奏することができます。
 * 並行演奏しているBGSはそれぞれ個別に、音量やピッチ、左右バランスを調節できます。
 * 演奏ラインのデフォルトは[1]です。
 *
 * ラインの数に制限はありませんが、あまりに大量のBGSを
 * 同時に演奏しようとすると動作に影響がでる恐れがあります。
 *
 * なお、マップで指定するオート演奏のBGSはラインが[1]で固定になります。
 *
 * 追加機能として、BGS演奏中にSEを演奏すると自動でBGSを一時フェードアウトする
 * プラグインコマンドを提供します。SEがより明瞭に聴き取れるようになります。
 * フェードアウト時間やSEの演奏タイミングを設定することもできます。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * PB_BGS_ライン変更 2              # BGSの演奏ラインを[2]に変更します。
 * PB_BGS_CHANGE_LINE 2            # 同上
 * PB_BGS_全停止                   # 全ての演奏中のBGSを停止します。
 * PB_BGS_ALL_STOP                 # 同上
 * PB_BGS_SE演奏時フェードアウト 1 # SE演奏時にBGSを自動フェードアウトします
 * PB_BGS_FADEOUT_FOR_SE 1         # 同上(※1)
 * PB_BGS_フェードアウト時間 3     # 自動フェードアウトに掛かる時間を指定します。
 * PB_BGS_FADEOUT_TIME 3           # 同上
 *
 * ※1 フェードアウト方法を指定できます。
 *  0 : フェードアウトせずに通常通りSEを演奏します。
 *  1 : SE演奏と同時にフェードアウトを開始します。
 *  2 : フェードアウトが完了してからSE演奏します。
 *
 * 2の設定はSEの演奏を実行してから、実際に演奏されるまで時間が掛かります。
 * 使いどころにご注意ください。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var metaTagPrefix = 'PB_';

    var getCommandName = function(command) {
        return (command || '').toUpperCase();
    };

    var getArgNumber = function(arg, min, max) {
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
    };

    var convertEscapeCharacters = function(text) {
        if (text == null) text = '';
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
    };

    /**
     * Create plugin parameter. param[paramName] ex. param.commandPrefix
     * @param pluginName plugin name(EncounterSwitchConditions)
     * @returns {Object} Created parameter
     */
    var createPluginParameter = function(pluginName) {
        var paramReplacer = function(key, value) {
            if (value === 'null') {
                return value;
            }
            if (value[0] === '"' && value[value.length - 1] === '"') {
                return value;
            }
            try {
                return JSON.parse(value);
            } catch (e) {
                return value;
            }
        };
        var parameter     = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
        PluginManager.setParameters(pluginName, parameter);
        return parameter;
    };

    var param = createPluginParameter('ParallelBgs');

    //=============================================================================
    // Game_Interpreter
    //  プラグインコマンドを追加定義します。
    //=============================================================================
    var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
        _Game_Interpreter_pluginCommand.apply(this, arguments);
        if (!command.match(new RegExp('^' + metaTagPrefix))) return;
        this.pluginCommandParallelBgs(command.replace(metaTagPrefix, ''), args);
    };

    Game_Interpreter.prototype.pluginCommandParallelBgs = function(command, args) {
        switch (getCommandName(command)) {
            case 'BGS_CHANGE_LINE' :
            case 'BGS_ライン変更' :
                $gameSystem.setBgsLine(getArgNumber(args[0], 1));
                break;
            case 'BGS_ALL_STOP' :
            case 'BGS_全停止' :
                AudioManager.stopAllBgs();
                break;
            case 'BGS_FADEOUT_FOR_SE' :
            case 'BGS_SE演奏時フェードアウト' :
                $gameSystem.setBgsFadeForSe(getArgNumber(args[0], 0));
                break;
            case 'BGS_FADEOUT_TIME' :
            case 'BGS_フェードアウト時間' :
                $gameSystem.setBgsFadeTime(getArgNumber(args[0], 1));
                break;
        }
    };

    var _Game_Interpreter_command246 = Game_Interpreter.prototype.command246;
    Game_Interpreter.prototype.command246 = function(params) {
        AudioManager._bgsFadeOutByLine = true;
        var result = _Game_Interpreter_command246.apply(this, arguments);
        AudioManager._bgsFadeOutByLine = false;
        return result;
    };

    //=============================================================================
    // Game_System
    //  BGS演奏ラインを変更します。
    //=============================================================================
    var _Game_System_initialize      = Game_System.prototype.initialize;
    Game_System.prototype.initialize = function() {
        _Game_System_initialize.apply(this, arguments);
        this.initBgsMember();
    };

    Game_System.prototype.initBgsMember = function() {
        this.setBgsLine(this.getBgsLine());
        this.setBgsFadeForSe(this.getBgsFadeForSe());
        this.setBgsFadeTime(this.getBgsFadeTime());
    };

    Game_System.prototype.getBgsLine = function() {
        return this._bgsLine || 1;
    };

    Game_System.prototype.setBgsLine = function(value) {
        this._bgsLine = value;
        AudioManager.setBgsLineIndex(value);
    };

    Game_System.prototype.getBgsFadeForSe = function() {
        return this._bgsFadeForPlayingSe || 0;
    };

    Game_System.prototype.setBgsFadeForSe = function(value) {
        this._bgsFadeForPlayingSe = value;
        AudioManager.setBgsFadeForSe(value);
    };

    Game_System.prototype.getBgsFadeTime = function() {
        return this._bgsFadeTime || 1;
    };

    Game_System.prototype.setBgsFadeTime = function(value) {
        this._bgsFadeTime = value;
        AudioManager.setBgsFadeTime(value);
    };

    var _Game_System_onAfterLoad      = Game_System.prototype.onAfterLoad;
    Game_System.prototype.onAfterLoad = function() {
        _Game_System_onAfterLoad.apply(this, arguments);
        this.initBgsMember();
    };

    var _Game_Map_autoplay      = Game_Map.prototype.autoplay;
    Game_Map.prototype.autoplay = function() {
        if ($dataMap.autoplayBgs && param.stopAllAutoPlay) {
            AudioManager.stopAllBgs();
        }
        AudioManager.multiLineDisable = true;
        _Game_Map_autoplay.apply(this, arguments);
        AudioManager.multiLineDisable = false;
    };

    //=============================================================================
    // AudioManager
    //  複数のBGS演奏ラインを管理します。
    //=============================================================================
    AudioManager.multiLineDisable = false;
    AudioManager._bgsLineIndex    = 1;
    AudioManager._bgsFadeForSe    = 0;
    AudioManager._bgsFadeTime     = 1;
    AudioManager._allBgsBuffer    = [];
    AudioManager._currentAllBgs   = [];
    AudioManager._delaySeStack    = [];
    AudioManager._allStop         = false;
    AudioManager._stopAllBgs      = true;
    AudioManager._bgsFading       = false;
    AudioManager._bgsFadeCounter  = 0;

    var _AudioManager_bgsVolume = Object.getOwnPropertyDescriptor(AudioManager, 'bgsVolume');
    Object.defineProperty(AudioManager, 'bgsVolume', {
        get: function() {
            return _AudioManager_bgsVolume.get.call(this);
        },
        set: function(value) {
            _AudioManager_bgsVolume.set.call(this, value);
            var nowBgs = this._currentBgs;
            this.iterateAllBgs(function() {
                if (nowBgs !== this._currentBgs) this.updateBgsParameters(this._currentBgs);
            }.bind(this));
        },
        configurable: true
    });

    Object.defineProperty(AudioManager, '_bgsBuffer', {
        get: function() {
            return this._allBgsBuffer[this.getBgsLineIndex()];
        },
        set: function(value) {
            this._allBgsBuffer[this.getBgsLineIndex()] = value;
        }
    });

    Object.defineProperty(AudioManager, '_currentBgs', {
        get: function() {
            return this._currentAllBgs[this.getBgsLineIndex()];
        },
        set: function(value) {
            this._currentAllBgs[this.getBgsLineIndex()] = value;
        }
    });

    AudioManager.getBgsLineIndex = function() {
        return this.multiLineDisable ? 1 : this._bgsLineIndex;
    };

    AudioManager.setBgsLineIndex = function(index) {
        this._bgsLineIndex = index;
    };

    AudioManager.setBgsFadeForSe = function(value) {
        this._bgsFadeForSe = value;
    };

    AudioManager.setBgsFadeTime = function(value) {
        this._bgsFadeTime = value;
    };

    var _AudioManager_playBgs = AudioManager.playBgs;
    AudioManager.playBgs      = function(bgs, pos) {
        if (!bgs) return;
        this._stopAllBgs = false;
        if (Array.isArray(bgs)) {
            this.playAllBgs(bgs);
        } else {
            _AudioManager_playBgs.apply(this, arguments);
        }
        this._stopAllBgs = true;
    };

    AudioManager.playAllBgs = function(bgsArray) {
        this.stopAllBgs();
        var prevIndex      = this._bgsLineIndex;
        this._bgsLineIndex = 1;
        bgsArray.forEach(function(bgs, index) {
            this._bgsLineIndex = index;
            this.playBgs(bgs, null);
        }, this);
        this._bgsLineIndex = prevIndex;
    };

    var _AudioManager_replayBgs = AudioManager.replayBgs;
    AudioManager.replayBgs      = function(bgs) {
        if (!bgs) return;
        if (Array.isArray(bgs)) {
            this.replayAllBgs(bgs);
        } else {
            _AudioManager_replayBgs.apply(this, arguments);
        }
    };

    AudioManager.replayAllBgs = function(bgsArray) {
        this.stopAllBgs();
        var prevIndex      = this._bgsLineIndex;
        this._bgsLineIndex = 1;
        bgsArray.forEach(function(bgs, index) {
            this._bgsLineIndex = index;
            this.replayBgs(bgs);
        }, this);
        this._bgsLineIndex = prevIndex;
    };

    var _AudioManager_saveBgs = AudioManager.saveBgs;
    AudioManager.saveBgs      = function() {
        var bgsArray = [];
        this.iterateAllBgs(function() {
            bgsArray[this._bgsLineIndex] = _AudioManager_saveBgs.apply(this, arguments);
        }.bind(this));
        return bgsArray.length > 1 ? bgsArray : bgsArray[0];
    };

    var _AudioManager_stopBgs = AudioManager.stopBgs;
    AudioManager.stopBgs      = function() {
        if (!this._stopAllBgs) {
            _AudioManager_stopBgs.apply(this, arguments);
        } else {
            this.stopAllBgs();
        }
    };

    AudioManager.stopAllBgs = function() {
        this.iterateAllBgs(function() {
            _AudioManager_stopBgs.apply(this, arguments);
        }.bind(this));
    };

    var _AudioManager_fadeOutBgs = AudioManager.fadeOutBgs;
    AudioManager.fadeOutBgs      = function(time) {
        if (this._bgsFadeOutByLine) {
            _AudioManager_fadeOutBgs.call(this, time);
        } else {
            this.iterateAllBgs(function() {
                _AudioManager_fadeOutBgs.call(this, time);
            }.bind(this));
        }
    };

    const _AudioManager_fadeInBgs = AudioManager.fadeInBgs;
    AudioManager.fadeInBgs      = function(time) {
        this.iterateAllBgs(function() {
            _AudioManager_fadeInBgs.call(this, time);
        }.bind(this));
    };

    AudioManager.iterateAllBgs = function(callBack) {
        var prevIndex = this._bgsLineIndex;
        Object.keys(this._allBgsBuffer).forEach(function(index) {
            this._bgsLineIndex = index;
            callBack(this._bgsBuffer);
        }, this);
        this._bgsLineIndex = prevIndex;
    };

    var _AudioManager_playSe = AudioManager.playSe;
    AudioManager.playSe      = function(se) {
        if (this.isNeedFadeOut()) {
            this.fadeOutBgsForSe();
        }
        if (this._bgsFadeForSe === 2 && this._currentBgs && this._bgsFadeCounter > 0) {
            this._delaySeStack.push(se);
        } else {
            _AudioManager_playSe.apply(this, arguments);
        }
    };

    AudioManager.updateBgsFade = function() {
        if (this.isNeedFadeIn()) {
            this.fadeInBgsForSe();
        }
        if (this._bgsFadeCounter > 0) {
            this._bgsFadeCounter--;
            if (this._bgsFadeCounter === 0) {
                this.playDelayedSe();
            }
        }
    };

    AudioManager.fadeOutBgsForSe = function() {
        var currentAllBgs = this._currentAllBgs.clone();
        this.fadeOutBgs(this._bgsFadeTime);
        this._currentAllBgs =  currentAllBgs;
        this._bgsFading      = true;
        this._bgsFadeCounter = this._bgsFadeTime * 60;
    };

    AudioManager.isNeedFadeOut = function() {
        return !this._bgsFading && this._bgsFadeForSe !== 0;
    };

    AudioManager.fadeInBgsForSe = function() {
        this.fadeInBgs(this._bgsFadeTime);
        this._bgsFading      = false;
        this._bgsFadeCounter = 0;
    };

    AudioManager.isNeedFadeIn = function() {
        return this._bgsFading && !this.isPlayingAnySe() && this._bgsFadeCounter === 0;
    };

    AudioManager.playDelayedSe = function() {
        while (this._delaySeStack.length > 0) {
            _AudioManager_playSe.call(this, this._delaySeStack.pop());
        }
    };

    AudioManager.isPlayingAnySe = function() {
        return this._seBuffers.some(function(audio) {
            return audio.isExist();
        });
    };

    //=============================================================================
    // WebAudio
    //  演奏が要求済みかどうかを返します。
    //=============================================================================
    WebAudio.prototype.isExist = function() {
        return this._autoPlay;
    };

    //=============================================================================
    // SceneManager
    //  AudioManagerの更新処理を呼び出します。
    //=============================================================================
    var _SceneManager_updateScene = SceneManager.updateScene;
    SceneManager.updateScene      = function() {
        _SceneManager_updateScene.apply(this, arguments);
        if (this._scene) {
            AudioManager.updateBgsFade();
        }
    };
})();


code:
//=============================================================================
// PartyAbilityRate.js
// ----------------------------------------------------------------------------
// (C)2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.0 2023/04/23 タグの値に0を設定できるよう修正
// 1.0.1 2019/06/21 獲得EXPとゴールドに端数が生じた場合切り捨てるよう修正
// 1.0.0 2016/05/09 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc Party ability rate
 * @author triacontane
 *
 * @help enable customize party ability rate
 *
 * note
 * <PAREncounterHalf:4>   -> Encounter rate 1/4
 * <PARRaisePreemptive:8> -> Raise preemptive 8 times
 * <PARGoldDouble:3>      -> Gold triple
 * <PARDropItemDouble:3>  -> Drop item triple
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc パーティ能力レート設定プラグイン
 * @author トリアコンタン
 *
 * @help パーティ能力にレートを設定できます。
 * パーティ特徴を定義したデータベースのメモ欄に以下の通り設定してください。
 * タグとは別にパーティ能力の特徴も別途指定してください。
 *
 * <PARエンカウント半減:4>  // エンカウント率が通常の1/4になります。
 * <PAR先制攻撃率アップ:8>  // 先制攻撃の確率が8倍になります。
 * <PAR獲得金額2倍:0.5>     // 獲得金額が0.5倍になります。
 * 　(タグ名は設定する値にかかわらず「PAR獲得金額2倍」と記述してください)
 * <PARアイテム入手率2倍:4> // アイテム入手確率が4倍になります。(同上)
 *
 * 複数のレートが重複した場合はもっとも数字の大きいものが優先されます。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
    'use strict';
    var metaTagPrefix = 'PAR';

    var getArgNumber = function (arg, min, max) {
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseFloat(convertEscapeCharactersAndEval(arg, true)) || 0).clamp(min, max);
    };

    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + (name ? name : '');
        return object.meta.hasOwnProperty(metaTagName) ? object.meta[metaTagName] : undefined;
    };

    var getMetaValues = function(object, names) {
        if (!Array.isArray(names)) return getMetaValue(object, names);
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    var convertEscapeCharactersAndEval = function(text, evalFlg) {
        if (text === null || text === undefined) {
            text = evalFlg ? '0' : '';
        }
        var window = SceneManager._scene._windowLayer.children[0];
        if (window) {
            var result = window.convertEscapeCharacters(text);
            return evalFlg ? eval(result) : result;
        } else {
            return text;
        }
    };

    Game_BattlerBase.prototype.partyAbilityRate = function(abilityNames, defaultValue) {
        var result = defaultValue;
        this.traitObjects().forEach(function (traitObject) {
            var metaValue = getMetaValues(traitObject, abilityNames);
            if (metaValue) result = getArgNumber(metaValue, result);
        }.bind(this));
        return result;
    };

    Game_Party.prototype.partyAbilityRate = function(abilityNames, defaultValue) {
        var result = null;
        this.battleMembers().forEach(function(actor) {
            result = actor.partyAbilityRate(abilityNames, result);
        });
        return result === null ? defaultValue : result;
    };

    Game_Party.prototype.getEncounterHalfRate = function() {
        return this.partyAbilityRate(['エンカウント半減', 'EncounterHalf'], 2);
    };

    Game_Party.prototype.getRaisePreemptiveRate = function() {
        return this.partyAbilityRate(['先制攻撃率アップ', 'RaisePreemptive'], 4);
    };

    Game_Party.prototype.getGoldDoubleRate = function() {
        return this.partyAbilityRate(['獲得金額2倍', 'GoldDouble'], 2);
    };

    Game_Party.prototype.getDropItemDoubleRate = function() {
        return this.partyAbilityRate(['アイテム入手率2倍', 'DropItemDouble'], 2);
    };

    var _Game_Party_ratePreemptive = Game_Party.prototype.ratePreemptive;
    Game_Party.prototype.ratePreemptive = function(troopAgi) {
        var rate = _Game_Party_ratePreemptive.apply(this, arguments);
        if (this.hasRaisePreemptive()) {
            rate /= 4;
            rate *= this.getRaisePreemptiveRate();
        }
        return rate;
    };

    var _Game_Player_encounterProgressValue = Game_Player.prototype.encounterProgressValue;
    Game_Player.prototype.encounterProgressValue = function() {
        var value = _Game_Player_encounterProgressValue.apply(this, arguments);
        if ($gameParty.hasEncounterHalf()) {
            value /= 0.5;
            value /= $gameParty.getEncounterHalfRate();
        }
        return value;
    };

    var _Game_Troop_goldRate = Game_Troop.prototype.goldRate;
    Game_Troop.prototype.goldRate = function() {
        var rate =_Game_Troop_goldRate.apply(this, arguments);
        if ($gameParty.hasGoldDouble()) {
            rate /= 2;
            rate *= $gameParty.getGoldDoubleRate();
        }
        return rate;
    };

    var _Game_Enemy_dropItemRate = Game_Enemy.prototype.dropItemRate;
    Game_Enemy.prototype.dropItemRate = function() {
        var rate = _Game_Enemy_dropItemRate.apply(this, arguments);
        if ($gameParty.hasDropItemDouble()) {
            rate /= 2;
            rate *= $gameParty.getDropItemDoubleRate();
        }
        return rate;
    };

    var _Game_Troop_expTotal = Game_Troop.prototype.expTotal;
    Game_Troop.prototype.expTotal = function() {
        return Math.floor(_Game_Troop_expTotal.apply(this, arguments));
    };

    var _Game_Troop_goldTotal = Game_Troop.prototype.goldTotal;
    Game_Troop.prototype.goldTotal = function() {
        return Math.floor(_Game_Troop_goldTotal.apply(this, arguments));
    };
})();


code:
//
//  パッシブスキル ver1.063
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported['yPassiveSkill'] = 1.063;

/*:
 * @plugindesc ver1.063/スキルに特徴を設定できるようにします。
 * @author Yana
 *
 * @param Passive Skill Type ID
 * @desc パッシブスキルとして扱うスキルタイプID。
 * ここで設定されたIDのスキルタイプは、戦闘時に表示されません。
 * @default 3
 *
 * @param Add Multi Order
 * @desc パラメータの加算と乗算の順番。
 * trueだと加算→乗算、falseだと乗算→加算になります。
 * @default true
 *
 * @help------------------------------------------------------
 *  プラグインコマンドはありません。
 * ------------------------------------------------------
 * ------------------------------------------------------
 * 設定方法
 * ------------------------------------------------------
 * ・攻撃力や最大HP等のパラメータが1つのパッシブスキルの設定
 * <パッシブスキル:xxx+y>
 * <パッシブスキル:xxx-y>
 * <パッシブスキル:xxx+y%>
 * <パッシブスキル:xxx-y%>
 * <パッシブスキル:xxxy>
 * xxxのステータスをyポイント(%)増加(減少)させます。
 * ※最大HP、最大MP、攻撃力、防御力、魔法力、魔法防御、敏捷性、運の通常のパラメータのいずれかの場合、
 * %が付いていない時はその数値通りの値が適用されます。
 * %が付いている時は、その数値に100を加算し、算出した数値を通常の特徴で設定した時と同じように適用します。
 *
 * ※命中率、回避率、会心率、会心回避、魔法回避、魔法反射、反撃率、HP再生率、MP再生率、
 * 	TP再生率の等のExパラメータのいずれかの場合、
 * %が付いている時と%がついてない時の動作は同じになります。
 *
 * ※狙われ率、防御効果率、回復効果率、薬の知識、MP消費率、TPチャージ率、物理ダメージ率、
 * 	 魔法ダメージ率、床ダメージ率、経験値獲得率等ののSPパラメータのいずれかの場合、
 * %が付いていない時はその数値通りの値が適用されます。
 * %が付いている時は、その数値に100を加算し、算出した数値を通常の特徴で設定した時と同じように適用します。
 *
 * ※ステート無効化、攻撃時属性、攻撃速度補正、攻撃追加回数、スキルタイプ追加、スキルタイプ封印、スキル追加、
 * スキル封印、武器タイプ装備、防具タイプ装備、装備固定、装備封印、行動回数追加　のいずれかの場合も、これで設定します。
 * これらは%が付いていても付いていなくても同じです。
 *
 * 例：
 * <パッシブスキル:最大HP+50>
 * 最大HPが50ポイント増加します。
 *
 * <パッシブスキル:攻撃力+20%>
 * 特徴、攻撃力120%と同じ意味です。
 *
 * <パッシブスキル:命中率+20%>
 * <パッシブスキル:命中率+20>
 * 特徴、命中率+20%と同じ意味です。
 *
 * <パッシブスキル:狙われ率+30>
 * 狙われ率が30%増加します。
 *
 * <パッシブスキル:狙われ率+30%>
 * 特徴、狙われ率130%と同じ意味です。
 *
 * <パッシブスキル:ステート無効化5>
 * 特徴、ステート無効化5番のステートと同じ意味です。
 *
 * <パッシブスキル:行動回数追加+20%>
 * 特徴、行動回数追加20%と同じ意味です。
 *
 * ・属性有効度やステート有効度などのパラメータが2つのパッシブスキルの設定
 * <パッシブスキル:xxxy+z>
 * <パッシブスキル:xxxy―z>
 * <パッシブスキル:xxxy+z%>
 * <パッシブスキル:xxxy―z%>
 * xxxのy番のレートをz(%)増加(減少)します。
 * ※属性有効度、弱体有効度、ステート有効度のいずれかの場合、
 * %が付いていない時は、その数値の値を直接加算(減算)します。
 * %が付いている時は、その数値に100を加算し、算出した数値を通常の特徴で設定した時と同じように適用します。
 *
 * ※攻撃時ステートの場合、%が付いていても付いていなくても同じです。
 *
 * 例:
 * <パッシブスキル:属性有効度4-30%>
 * 特徴、属性有効度4番の属性70%と同じ意味です。
 *
 * <パッシブスキル:属性有効度4-30>
 * 4番の属性の属性有効度を30%減少させます。
 *
 * ・二刀流や自動戦闘など、パラメータを持たないパッシブスキルの設定
 * <パッシブスキル:xxx>
 * xxxの特徴を付与します。
 *
 * 例:
 * <パッシブスキル:二刀流>
 * 特徴、スロットタイプ二刀流と同じ意味です。
 *
 * <パッシブスキル:自動戦闘>
 * 特徴、特殊フラグ自動戦闘と同じ意味です。
 *
 * ------------------------------------------------------
 * 仕様と解説
 * ------------------------------------------------------
 * ・特徴で追加されたスキルはパッシブスキルとして機能しません。
 * ・AddMultiOrderがtrueだと、加算の計算→乗算の計算となるので、攻撃力100で攻撃力+50と攻撃力+50%の特徴を持っていた場合、
 * (100+50)x1.5=225となります。
 * falseの場合は、乗算→加算と計算されるので、
 * 100x1.5+50=200となります。
 * ・対応するスキルタイプが封印されたり、パッシブスキル自体が封印された場合、そのスキルは効果がなくなります。
 * ・必要武器タイプが設定されていた場合、それらの条件を満たしていないとそのスキルは効果がなくなります。
 * ・PassiveSkillTypeIDで指定したスキルタイプでないとパッシブスキルとして機能しない、という事はありません。
 * ・PassiveSkillTypeIDはあくまで、戦闘中に表示しないスキルタイプのIDというのみです。
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 当プラグインはMITライセンスで公開されています。
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.061:
 * ステータスクラス+クラスチェンジシーンと併用時、レベルアップ時に無限ループに入ってしまうバグを修正。
 * ver1.06:
 * イベントコマンドでスキルを習得した際、パッシブスキルが反映されないバグを修正。
 * ver1.051:
 * console.logを削除。
 * ver1.05:
 * いくつかの記述ミスを修正。
 * 機能していなかったプラグインパラメータを削除。
 * ver1.04:
 * 最大MPのキーワードが間違っていたバグを修正。
 * システムで設定した用語でのパッシブスキル化が正常に機能していなかったバグを修正。
 * ver1.03:
 * 特徴を持っていないスキルもパッシブスキルとして判定されていたバグを修正。
 * sparamの数値が100%基準になっていなかったバグを修正。
 * ver1.02:
 * PassiveSkillManagerをfunctionの外に移動
 * ver1.01:
 * パッシブスキルのスキルタイプが一番上に追加されていると、正常に非表示にできないバグを修正。
 * ver1.00:
 * 公開
 */

function PassiveSkillManager() {
   	throw new Error('This is a static class');
};

(function(){

	var parameters = PluginManager.parameters('PassiveSkill');
	var passiveSkillTypeId = Number(parameters['Passive Skill Type ID']);
	var addMultiOrder = String(parameters['Add Multi Order']) === 'true';

	PassiveSkillManager.checkPassive = function(text){
		if(text.match(/<(?:パッシブスキル|パッシブ|passive|PS):(.+)>/)){
			var reg = RegExp.$1;
			var trait = this.makePassive('<'+reg+'>');
			if (trait){ return trait }
		}
		return false;
	};

	PassiveSkillManager.makePassive = function(reg){
		if (reg.match(/<(.+?)(\d+),?([+-]\d+)(%)?>/)){
			return this.makeNumTrait([RegExp.$1,RegExp.$2,RegExp.$3,RegExp.$4]);
		} else if (reg.match(/<(.+?),?([+-]?\d+)(%)?>/)){
			return this.makeParamTrait([RegExp.$1,RegExp.$2,RegExp.$3]);
		} else if (reg.match(/<(.+)>/)){
			return this.makeExTrait(RegExp.$1);
		}

		return false;
	};

	PassiveSkillManager.makeNumTrait = function(ary){
		var code = null;
		var id = parseInt(ary[1]);
		var value = parseInt(ary[2]);
		var parc = ary[3];
		switch(ary[0]){
		case '属性有効度':
		case 'ElementRate':
			code = parc == '' ? 111 : 11;
			break;
		case '弱体有効度':
		case 'DebuffRate':
			code = parc == '' ? 112 : 12;
			break;
		case 'ステート有効度':
		case 'StateRate':
			code = parc == '' ? 113 : 13;
			break;
		case '攻撃時ステート':
		case 'AttackState':
			code = 32;
			break;
		}
		if (code === null){return false }
		value = (value / 100);
		if (code < 100){ value += 1 }
		return {'code':code,'dataId':id,'value':value};
	};

	PassiveSkillManager.makeParamTrait = function(ary){
		var code = null;
		var id = null;
		var value = parseInt(ary[1]);
		var parc = ary[2];
		switch(ary[0]){
		// param
		case '最大HP':
		case '最大ＨＰ':
		case TextManager.basic(2):
		case TextManager.basic(3):
		case TextManager.param(0):
			id = 0;
			code = parc == '' ? 121 : 21;
			break;
		case '最大MP':
		case '最大ＭＰ':
		case TextManager.basic(4):
		case TextManager.basic(5):
		case TextManager.param(1):
			id = 1;
			code = parc == '' ? 121 : 21;
			break;
		case 'ATK':
		case 'ＡＴＫ':
		case '攻撃力':
		case TextManager.param(2):
			id = 2;
			code = parc == '' ? 121 : 21;
			break;
		case 'DEF':
		case 'ＤＥＦ':
		case '防御力':
		case TextManager.param(3):
			id = 3;
			code = parc == '' ? 121 : 21;
			break;
		case 'MAT':
		case 'ＭＡＴ':
		case '魔法力':
		case TextManager.param(4):
			id = 4;
			code = parc == '' ? 121 : 21;
			break;
		case 'MDF':
		case 'ＭＤＦ':
		case '魔法防御':
		case TextManager.param(5):
			id = 5;
			code = parc == '' ? 121 : 21;
			break;
		case 'AGI':
		case 'ＡＧＩ':
		case '敏捷性':
		case TextManager.param(6):
			id = 6;
			code = parc == '' ? 121 : 21;
			break;
		case 'LUK':
		case 'ＬＵＫ':
		case '運':
		case TextManager.param(7):
			id = 7;
			code = parc == '' ? 121 : 21;
			break;
		// xparams
		case 'HIT':
		case 'ＨＩＴ':
		case '命中率':
		case TextManager.param(8):
			id = 0;
			code = 22;
			break;
		case 'EVA':
		case 'ＥＶＡ':
		case '回避率':
			id = 1;
			code = 22;
			break;
		case TextManager.param(9):
		case 'CRI':
		case 'ＣＲＩ':
		case '会心率':
			id = 2;
			code = 22;
			break;
		case 'CEV':
		case 'ＣＥＶ':
		case '会心回避率':
			id = 3;
			code = 22;
			break;
		case 'MEV':
		case 'ＭＥＶ':
		case '魔法回避率':
			id = 4;
			code = 22;
			break;
		case 'MRF':
		case 'ＭＲＦ':
		case '魔法反射率':
			id = 5;
			code = 22;
			break;
		case 'CNT':
		case 'ＣＮＴ':
		case '反撃率':
			id = 6;
			code = 22;
			break;
		case 'HRG':
		case 'ＨＲＧ':
		case 'HP再生率':
		case 'ＨＰ再生率':
			id = 7;
			code = 22;
			break;
		case 'MRG':
		case 'ＭＲＧ':
		case 'MP再生率':
		case 'ＭＰ再生率':
			id = 8;
			code = 22;
			break;
		case 'TRG':
		case 'ＴＲＧ':
		case 'TP再生率':
		case 'ＴＰ再生率':
			id = 9;
			code = 22;
			break;
		//sparams
		case 'TGR':
		case 'ＴＧＲ':
		case '狙われ率':
			id = 0;
			code = parc == '' ? 123 : 23;
			break;
		case 'GRD':
		case 'ＧＲＤ':
		case '防御効果率':
			id = 1;
			code = parc == '' ? 123 : 23;
			break;
		case 'REC':
		case 'ＲＥＣ':
		case '回復効果率':
			id = 2;
			code = parc == '' ? 123 : 23;
			break;
		case 'PHA':
		case 'ＰＨＡ':
		case '薬の知識':
			id = 3;
			code = parc == '' ? 123 : 23;
			break;
		case 'MCR':
		case 'ＭＣＲ':
		case 'MP消費率':
		case 'ＭＰ消費率':
			id = 4;
			code = parc == '' ? 123 : 23;
			break;
		case 'TCR':
		case 'ＴＣＲ':
		case 'TPチャージ率':
		case 'ＴＰチャージ率':
			id = 5;
			code = parc == '' ? 123 : 23;
			break;
		case 'PDR':
		case 'ＰＤＲ':
		case '物理ダメージ率':
			id = 6;
			code = parc == '' ? 123 : 23;
			break;
		case 'MDR':
		case 'ＭＤＲ':
		case '魔法ダメージ率':
			id = 7;
			code = parc == '' ? 123 : 23;
			break;
		case 'FDR':
		case 'ＦＤＲ':
		case '床ダメージ率':
			id = 8;
			code = parc == '' ? 123 : 23;
			break;
		case 'EXR':
		case 'ＥＸＲ':
		case '経験値獲得率':
			id = 9;
			code = parc == '' ? 123 : 23;
			break;
		//その他
		case 'ステート無効化':
		case 'StateResist':
			id = value;
			code = 14;
			break;
		case '攻撃時属性':
		case 'AttackElement':
			id = value;
			code = 31;
			break;
		case '攻撃速度補正':
		case 'AttackSpeed':
			id = value;
			code = 33;
			break;
		case '攻撃追加回数':
		case 'AttackTimes+':
			id = value;
			code = 34;
			break;
		case 'スキルタイプ追加':
		case 'AddSkillType':
			id = value;
			code = 41;
			break;
		case 'スキルタイプ封印':
		case 'SealSkillType':
			id = value;
			code = 42;
			break;
		case 'スキル追加':
		case 'AddSkill':
			id = value;
			code = 43;
			break;
		case 'スキル封印':
		case 'SealSkill':
			id = value;
			code = 44;
			break;
		case '武器タイプ装備':
		case 'EquipWeapon':
			id = value;
			code = 51;
			break;
		case '防具タイプ装備':
		case 'EquipArmor':
			id = value;
			code = 52;
			break;
		case '装備固定':
		case 'LockEquip':
			id = value;
			code = 53;
			break;
		case '装備封印':
		case 'SealEquip':
			id = value;
			code = 54;
			break;
		case '行動回数追加':
		case 'ActionTime+':
			id = value;
			code = 61;
			break;
		default:
		}
		if (code === null){ return false }
		if ((code > 20 && code < 30) || (code === 123)){ value = (value / 100)}
		if (code === 21){ value += 1 }
		if (code === 23){ value += 1 }
		return {'code':code,'dataId':id,'value':value};
	};

	PassiveSkillManager.makeExTrait = function(reg){
		var code = null;
		var id = null;
		var value = 1;
		switch(reg){
		case '二刀流':
		case 'DualWield':
			code = 55;
			id = 1;
			break;
		case '自動戦闘':
		case 'AutoBattle':
			code = 62;
			id = 0;
			break;
		case '防御':
		case 'Guard':
			code = 62;
			id = 1;
			break;
		case '身代わり':
		case 'Substitute':
			code = 62;
			id = 2;
			break;
		case 'TP持ち越し':
		case 'PreserveTP':
			code = 62;
			id = 3;
			break;
		case 'エンカウント半減':
		case 'EncounterHalf':
			code = 64;
			id = 0;
			break;
		case 'エンカウント無効':
		case 'EncounterNone':
			code = 64;
			id = 1;
			break;
		case '不意打ち無効':
		case 'CancelSurprise':
			code = 64;
			id = 2;
			break;
		case '先制攻撃率アップ':
		case 'RaisePreemptive':
			code = 64;
			id = 3;
			break;
		case '獲得金額二倍':
		case '獲得金額2倍':
		case '獲得金額２倍':
		case 'GoldDouble':
			code = 64;
			id = 4;
			break;
		case 'アイテム入手率二倍':
		case 'アイテム入手率2倍':
		case 'アイテム入手率２倍':
		case 'ItemDropDouble':
			code = 64;
			id = 5;
			break;
		default:
		}
		if (code === null){return false }
		return {'code':code,'dataId':id,'value':value };
	};

	PassiveSkillManager.initPassiveSkill = function(skill){
		if (skill.traits){ return }
		skill.traits = [];
		var texts = skill.note.split('\n');
		for (var i=0;i<texts.length;i++){
			var trait = this.checkPassive(texts[i]);
			if (trait){ skill.traits.push(trait) }
		}
	};

	var _pS_GActor_traitObjects = Game_Actor.prototype.traitObjects;
	Game_Actor.prototype.traitObjects = function() {
    	var objects = _pS_GActor_traitObjects.call(this);
    	if (this.traitNest){ return objects }
    	this.traitNest = true;
   		this.enableSkills().forEach(function(skill){
   			if (!skill.traits) PassiveSkillManager.initPassiveSkill(skill);
    		if (skill.traits.length > 0){ objects.push(skill) }
    	},this);
    	this.traitNest = false;
    	return objects;
	};

	var _pS_GBBase_addedSkillTypes = Game_BattlerBase.prototype.addedSkillTypes;
	Game_BattlerBase.prototype.addedSkillTypes = function(){
		var types = _pS_GBBase_addedSkillTypes.call(this);
		if (!$gameParty.inBattle()){ return types }
		var id = types.indexOf(passiveSkillTypeId);
		if (id >= 0){ types.splice(id,1) }
		return types;
	};

	Game_Actor.prototype.enableSkills = function() {
		if (!this._enableSkills || this._passiveRefresh) {
            this._enableSkills = [];
            this._skills.forEach(function (skillId) {
                var skill = $dataSkills[skillId];
                if (!skill.traits) PassiveSkillManager.initPassiveSkill(skill);
                if (this.isUsableSkill(skill) && skill.traits.length > 0) {
                	this._enableSkills.push(skill.id);
                }
            }, this);
            this._passiveRefresh = false;
        }
		return this._enableSkills.reduce(function(r,id){ return r.concat([$dataSkills[id]]) },[]);
	};

	var _pS_GActor_refresh = Game_Actor.prototype.refresh;
	Game_Actor.prototype.refresh = function(){
		this._passiveRefresh = true;
		_pS_GActor_refresh.call(this);
	};

	var _pS_GActor_learnSkill = Game_Actor.prototype.learnSkill;
	Game_Actor.prototype.learnSkill = function(skillId) {
		_pS_GActor_learnSkill.call(this,skillId);
		if (!(Imported['VXandAceHybridClass'] || Imported.YEP_ClassChangeCore)) this.refresh();
	};

	Game_Actor.prototype.isUsableSkill = function(skill) {
    return (this.isSkillWtypeOk(skill) && !this.isSkillSealed(skill.id) &&
    		!this.isSkillTypeSealed(skill.stypeId));
	};

	Game_Party.prototype.refreshSkills = function(){
		this.members().forEach(function(actor){
			actor._passiveRefresh = true;
		})
	};

	var _pS_BManager_startInput = BattleManager.startInput;
	BattleManager.startInput = function() {
		$gameParty.refreshSkills();
		_pS_BManager_startInput.call(this);
	};

	if (addMultiOrder){
		var _pS_GBBase_paramPlus = Game_BattlerBase.prototype.paramPlus;
		Game_BattlerBase.prototype.paramPlus = function(paramId){
			var pr = _pS_GBBase_paramPlus.call(this,paramId);
			pr += this.traitsSum(121, paramId);
			return pr;
		};

		var _pS_GBBase_sparam = Game_BattlerBase.prototype.sparam;
		Game_BattlerBase.prototype.sparam = function(paramId){
			var pr = this.traitsSum(123, paramId) + 1.0;
			pr *= _pS_GBBase_sparam.call(this,paramId);
			return pr;
		};

		var _pS_GBBase_elementRate = Game_BattlerBase.prototype.elementRate;
		Game_BattlerBase.prototype.elementRate = function(elementId) {
			var rate = this.traitsSum(111, elementId) + 1.0;
			rate *= _pS_GBBase_elementRate.call(this,elementId);
			return rate;
		};

		var _pS_GBBase_debuffRate = Game_BattlerBase.prototype.debuffRate;
		Game_BattlerBase.prototype.debuffRate = function(debuffId) {
			var rate = this.traitsSum(112, debuffId) + 1.0;
			rate *= _pS_GBBase_debuffRate.call(this,debuffId);
			return rate;
		};

		var _pS_GBBase_stateRate = Game_BattlerBase.prototype.stateRate;
		Game_BattlerBase.prototype.stateRate = function(stateId) {
			var rate = this.traitsSum(113, stateId) + 1.0;
			rate *= _pS_GBBase_stateRate.call(this,stateId);
			return rate;
		};

	}else{
		var _pS_GBBase_param = Game_BattlerBase.prototype.param;
		Game_BattlerBase.prototype.param = function(paramId){
			var pr = _pS_GBBase_param.call(this,paramId);
			pr += this.traitsSum(121, paramId);
			var maxValue = this.paramMax(paramId);
			var minValue = this.paramMin(paramId);
			return Math.round(pr.clamp(minValue, maxValue));
		};

		var _pS_GBBase_sparam = Game_BattlerBase.prototype.sparam;
		Game_BattlerBase.prototype.sparam = function(paramId){
			var pr = _pS_GBBase_sparam.call(this,paramId);
			pr += this.traitsSum(123, paramId) + 1.0;
			return pr;
		};

		var _pS_GBBase_elementRate = Game_BattlerBase.prototype.elementRate;
		Game_BattlerBase.prototype.elementRate = function(elementId) {
			var rate = _pS_GBBase_elementRate.call(this,elementId);
			rate += this.traitsSum(111, elementId) + 1.0;
			return rate;
		};

		var _pS_GBBase_debuffRate = Game_BattlerBase.prototype.debuffRate;
		Game_BattlerBase.prototype.debuffRate = function(debuffId) {
			var rate = _pS_GBBase_debuffRate.call(this,debuffId);
			rate += this.traitsSum(112, debuffId) + 1.0;
			return rate;
		};

		var _pS_GBBase_stateRate = Game_BattlerBase.prototype.stateRate;
		Game_BattlerBase.prototype.stateRate = function(stateId) {
			var rate = _pS_GBBase_stateRate.call(this,stateId);
			rate += this.traitsSum(113, stateId) + 1.0;
			return rate;
		};
	}
}());


code:
//
//  YEP_MessageCore用パッチ-NameBox ver1.00
//
// author yana
//

var Imported = Imported || {};
Imported['Patch_YMC_NameBox'] = 1.00;

/*:
 * @plugindesc ver1.00/YEP_MessageCoreのネームウィンドウの背景の状態を、メッセージウィンドウと同期する処理を追加します。
 * @author Yana
 *
 * @param StandardPadding
 * @desc ウィンドウの縁の幅です。MessageCoreのデフォルト値は18です。
 * @default 8
 *
 * @help------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 */

(function(){

    var parameters = PluginManager.parameters('Patch_YMC_NameBox');
    var standardPadding = parameters['StandardPadding'];

    Window_NameBox.prototype.updateBackground = function () {
        if (eval(Yanfly.Param.MSGNameBoxClear)) return;
        this._background = $gameMessage.background();
        this.setBackgroundType(this._background);
    };

    Window_NameBox.prototype.standardPadding = function () {
        return Number(standardPadding);
    };

    var __WNBox_update = Window_NameBox.prototype.update;
    Window_NameBox.prototype.update = function() {
        __WNBox_update.call(this);
        this.updateBackground();
    };
}());