|
|
|
|
//=============================================================================
|
|
|
|
|
// Yanfly Engine Plugins - Enemy Levels
|
|
|
|
|
// YEP_EnemyLevels.js
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
var Imported = Imported || {};
|
|
|
|
|
Imported.YEP_EnemyLevels = true;
|
|
|
|
|
|
|
|
|
|
var Yanfly = Yanfly || {};
|
|
|
|
|
Yanfly.ELV = Yanfly.ELV || {};
|
|
|
|
|
Yanfly.ELV.version = 1.09;
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
/*:
|
|
|
|
|
* @plugindesc v1.09 This plugin enables giving your enemies levels and
|
|
|
|
|
* parameter changes with those levels.
|
|
|
|
|
* @author Yanfly Engine Plugins
|
|
|
|
|
*
|
|
|
|
|
* @param ---General---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param Show Level
|
|
|
|
|
* @parent ---General---
|
|
|
|
|
* @type boolean
|
|
|
|
|
* @on Show
|
|
|
|
|
* @off Hide
|
|
|
|
|
* @desc Show enemy levels by default?
|
|
|
|
|
* NO - false YES - true
|
|
|
|
|
* @default true
|
|
|
|
|
*
|
|
|
|
|
* @param Level Format
|
|
|
|
|
* @parent ---General---
|
|
|
|
|
* @desc How to format enemy names with levels.
|
|
|
|
|
* %1 - Level %2 - Name
|
|
|
|
|
* @default Lv%1 %2
|
|
|
|
|
*
|
|
|
|
|
* @param Minimum Level
|
|
|
|
|
* @parent ---General---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 1
|
|
|
|
|
* @desc Default lowest level an enemy can be.
|
|
|
|
|
* @default 1
|
|
|
|
|
*
|
|
|
|
|
* @param Maximum Level
|
|
|
|
|
* @parent ---General---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 1
|
|
|
|
|
* @desc Default highest level an enemy can be.
|
|
|
|
|
* @default 9999
|
|
|
|
|
*
|
|
|
|
|
* @param Maximum Cap
|
|
|
|
|
* @parent ---General---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 1
|
|
|
|
|
* @desc Highest possible level an enemy can be.
|
|
|
|
|
* @default 9999
|
|
|
|
|
*
|
|
|
|
|
* @param Preserve Rate
|
|
|
|
|
* @parent ---General---
|
|
|
|
|
* @type boolean
|
|
|
|
|
* @on Preserve
|
|
|
|
|
* @off Don't Preserve
|
|
|
|
|
* @desc If level changing, preserve the enemy's HP/MP rates?
|
|
|
|
|
* NO - false YES - true
|
|
|
|
|
* @default true
|
|
|
|
|
*
|
|
|
|
|
* @param ---Level Setup---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param Default Type
|
|
|
|
|
* @parent ---Level Setup---
|
|
|
|
|
* @type select
|
|
|
|
|
* @option Lowest level of all actors that have joined the player party.
|
|
|
|
|
* @value 0
|
|
|
|
|
* @option Lowest level of all actors that are in the battling party.
|
|
|
|
|
* @value 1
|
|
|
|
|
* @option Average level of all actors that have joined the player party.
|
|
|
|
|
* @value 2
|
|
|
|
|
* @option Average level of all actors that are in the battling party.
|
|
|
|
|
* @value 3
|
|
|
|
|
* @option Highest level of all actors that have joined the player party.
|
|
|
|
|
* @value 4
|
|
|
|
|
* @option Highest level of all actors that are in the battling party.
|
|
|
|
|
* @value 5
|
|
|
|
|
* @desc Default level calculated relative to the player party:
|
|
|
|
|
* Refer to the Help File for Default Level Types.
|
|
|
|
|
* @default 5
|
|
|
|
|
*
|
|
|
|
|
* @param Positive Fluctuation
|
|
|
|
|
* @parent ---Level Setup---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @desc Default positive level fluctuation for all enemies.
|
|
|
|
|
* @default 2
|
|
|
|
|
*
|
|
|
|
|
* @param Negative Fluctuation
|
|
|
|
|
* @parent ---Level Setup---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @desc Default negative level fluctuation for all enemies.
|
|
|
|
|
* @default 2
|
|
|
|
|
*
|
|
|
|
|
* @param ---MaxHP Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param MaxHP Formula
|
|
|
|
|
* @parent ---MaxHP Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param MaxHP Rate Growth
|
|
|
|
|
* @parent ---MaxHP Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.15
|
|
|
|
|
*
|
|
|
|
|
* @param MaxHP Flat Growth
|
|
|
|
|
* @parent ---MaxHP Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 50.0
|
|
|
|
|
*
|
|
|
|
|
* @param ---MaxMP Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param MaxMP Formula
|
|
|
|
|
* @parent ---MaxMP Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param MaxMP Rate Growth
|
|
|
|
|
* @parent ---MaxMP Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.10
|
|
|
|
|
*
|
|
|
|
|
* @param MaxMP Flat Growth
|
|
|
|
|
* @parent ---MaxMP Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 10.0
|
|
|
|
|
*
|
|
|
|
|
* @param ---ATK Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param ATK Formula
|
|
|
|
|
* @parent ---ATK Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param ATK Rate Growth
|
|
|
|
|
* @parent ---ATK Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.05
|
|
|
|
|
*
|
|
|
|
|
* @param ATK Flat Growth
|
|
|
|
|
* @parent ---ATK Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 2.5
|
|
|
|
|
*
|
|
|
|
|
* @param ---DEF Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param DEF Formula
|
|
|
|
|
* @parent ---DEF Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param DEF Rate Growth
|
|
|
|
|
* @parent ---DEF Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.05
|
|
|
|
|
*
|
|
|
|
|
* @param DEF Flat Growth
|
|
|
|
|
* @parent ---DEF Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 2.5
|
|
|
|
|
*
|
|
|
|
|
* @param ---MAT Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param MAT Formula
|
|
|
|
|
* @parent ---MAT Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param MAT Rate Growth
|
|
|
|
|
* @parent ---MAT Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.05
|
|
|
|
|
*
|
|
|
|
|
* @param MAT Flat Growth
|
|
|
|
|
* @parent ---MAT Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 2.5
|
|
|
|
|
*
|
|
|
|
|
* @param ---MDF Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param MDF Formula
|
|
|
|
|
* @parent ---MDF Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param MDF Rate Growth
|
|
|
|
|
* @parent ---MDF Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.05
|
|
|
|
|
*
|
|
|
|
|
* @param MDF Flat Growth
|
|
|
|
|
* @parent ---MDF Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 2.5
|
|
|
|
|
*
|
|
|
|
|
* @param ---AGI Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param AGI Formula
|
|
|
|
|
* @parent ---AGI Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param AGI Rate Growth
|
|
|
|
|
* @parent ---AGI Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.05
|
|
|
|
|
*
|
|
|
|
|
* @param AGI Flat Growth
|
|
|
|
|
* @parent ---AGI Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 2.5
|
|
|
|
|
*
|
|
|
|
|
* @param ---LUK Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param LUK Formula
|
|
|
|
|
* @parent ---LUK Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param LUK Rate Growth
|
|
|
|
|
* @parent ---LUK Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.05
|
|
|
|
|
*
|
|
|
|
|
* @param LUK Flat Growth
|
|
|
|
|
* @parent ---LUK Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 2.5
|
|
|
|
|
*
|
|
|
|
|
* @param ---EXP Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param EXP Formula
|
|
|
|
|
* @parent ---EXP Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param EXP Rate Growth
|
|
|
|
|
* @parent ---EXP Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.15
|
|
|
|
|
*
|
|
|
|
|
* @param EXP Flat Growth
|
|
|
|
|
* @parent ---EXP Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 10.0
|
|
|
|
|
*
|
|
|
|
|
* @param ---Gold Growth---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param Gold Formula
|
|
|
|
|
* @parent ---Gold Growth---
|
|
|
|
|
* @desc The formula used for this parameter's calculations.
|
|
|
|
|
* @default base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
*
|
|
|
|
|
* @param Gold Rate Growth
|
|
|
|
|
* @parent ---Gold Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The growth rate for this parameter per level.
|
|
|
|
|
* @default 0.15
|
|
|
|
|
*
|
|
|
|
|
* @param Gold Flat Growth
|
|
|
|
|
* @parent ---Gold Growth---
|
|
|
|
|
* @type number
|
|
|
|
|
* @min 0
|
|
|
|
|
* @decimals 2
|
|
|
|
|
* @desc The flat growth value for this parameter per level.
|
|
|
|
|
* @default 10.0
|
|
|
|
|
*
|
|
|
|
|
* @help
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Introduction
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* This plugin allows enemies to function off of a leveling system. An enemy's
|
|
|
|
|
* level will be increased relative to the player under specific rulings and
|
|
|
|
|
* will increase its stats based on its level.
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Default Level Types
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* When an enemy is made in battle, it will create its initial level off of a
|
|
|
|
|
* set of rules. These are the various rules you can change the 'Default Type'
|
|
|
|
|
* plugin parameter to reflect.
|
|
|
|
|
*
|
|
|
|
|
* Type:
|
|
|
|
|
*
|
|
|
|
|
* - Type 0 - Lowest level of all actors that have joined the player party.
|
|
|
|
|
* - Type 1 - Lowest level of all actors that are in the battling party.
|
|
|
|
|
* - Type 2 - Average level of all actors that have joined the player party.
|
|
|
|
|
* - Type 3 - Average level of all actors that are in the battling party.
|
|
|
|
|
* - Type 4 - Highest level of all actors that have joined the player party.
|
|
|
|
|
* - Type 5 - Highest level of all actors that are in the battling party.
|
|
|
|
|
*
|
|
|
|
|
* After the level type has been determined for the enemy, random level
|
|
|
|
|
* fluctuations are then added.
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Notetags
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* You can use these notetags to adjust how enemy levels are handled
|
|
|
|
|
* individually per enemy.
|
|
|
|
|
*
|
|
|
|
|
* Enemy Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Show Level>
|
|
|
|
|
* <Hide Level>
|
|
|
|
|
* This will cause the enemy to show or hide its level upon target selection.
|
|
|
|
|
* 这将导致敌人在角色选择目标时显示或隐藏其等级。
|
|
|
|
|
*
|
|
|
|
|
* <Minimum Level: x>
|
|
|
|
|
* <Maximum Level: x>
|
|
|
|
|
* This sets the enemy's minimum and maximum levels respectively to x. This
|
|
|
|
|
* will cause the enemy, upon the start of battle, to adjust levels within
|
|
|
|
|
* this particular range. Any skills that alter enemy levels are able to
|
|
|
|
|
* bypass these limits unless if it were to bypass the maximum cap.
|
|
|
|
|
* 这会将敌人的最低和最高等级分别设置为 x。这将导致敌人在战斗开始时
|
|
|
|
|
* 调整此特定范围内的级别。任何改变敌人等级的技能都可以绕过这些限制,
|
|
|
|
|
* 除非它绕过了最大上限。
|
|
|
|
|
*
|
|
|
|
|
* <Static Level: x>
|
|
|
|
|
* This sets the enemy's starting level to exactly x. This will cause the
|
|
|
|
|
* enemy, upon the start of battle, to adjust levels within this particular
|
|
|
|
|
* range. Any skills that alter enemy levels are able to bypass these limits
|
|
|
|
|
* unless if it were to bypass the maximum cap.
|
|
|
|
|
* 这会将敌人的起始等级设置为正好 x。这将导致敌人在战斗开始时调整此特定范围内
|
|
|
|
|
* 的级别。任何改变敌人等级的技能都可以绕过这些限制,除非它绕过了最大上限。
|
|
|
|
|
*
|
|
|
|
|
* <Starting Level Type: x>
|
|
|
|
|
* This sets the enemy's starting level type to x from 0 to 5. Refer to the
|
|
|
|
|
* 'Default Level Types' party of the Help File.
|
|
|
|
|
* 这会将敌人的起始等级类型设置为 x,范围为 0 到 5。
|
|
|
|
|
* 请参阅帮助文件的“默认级别类型”方。
|
|
|
|
|
*
|
|
|
|
|
* <Positive Level Fluctuation: x>
|
|
|
|
|
* <Negative Level Fluctuation: x>
|
|
|
|
|
* This sets the positive/negative level fluctuation for the enemy. Any level
|
|
|
|
|
* fluctuation is calculated at the start of battle, but after the starting
|
|
|
|
|
* level type has been determined.
|
|
|
|
|
* 这将设置敌人的等级正/负水平波动。任何等级波动都是在战斗开始时计算的,
|
|
|
|
|
* 但在确定起始等级类型之后。
|
|
|
|
|
*
|
|
|
|
|
* <Level Fluctuation: x>
|
|
|
|
|
* This sets both the positive and negative level fluctuation for the enemy
|
|
|
|
|
* to x. Any level fluctuation is calculated at the start of battle, but
|
|
|
|
|
* after the starting level type has been determined.
|
|
|
|
|
* 这会将敌人的正和负等级波动都设置为 x。任何等级波动都是在战斗开始时计算的,
|
|
|
|
|
* 但在确定起始等级类型之后。
|
|
|
|
|
*
|
|
|
|
|
* <stat Rate: +x% per level>
|
|
|
|
|
* <stat Rate: -x% per level>
|
|
|
|
|
* <stat Rate: +x.y per level>
|
|
|
|
|
* <stat Rate: -x.y per level>
|
|
|
|
|
* Replace 'stat' with 'maxhp', 'maxmp', 'atk', 'def', 'mat', 'mdf', 'agi',
|
|
|
|
|
* 'luk', 'exp', or 'gold'. This will set this enemy to have an increase or
|
|
|
|
|
* decrease of x% rate per level. If you use the x.y formula, it will have a
|
|
|
|
|
* rate increase of +x.y or -x.y per level.
|
|
|
|
|
* 将“stat”替换为“maxhp”、“maxmp”、“atk”、“def”、“mat”、“mdf”、“agi”、“luk”、
|
|
|
|
|
* “exp”或“gold”。这将设置这个敌人每级增加或减少x%的比率。如果使用 x.y 公式,
|
|
|
|
|
* 则每个级别的比率将增加 +x.y 或 -x.y。
|
|
|
|
|
*
|
|
|
|
|
* <stat Flat: +x per level>
|
|
|
|
|
* <stat Flat: -x per level>
|
|
|
|
|
* <stat Flat: +x.y per level>
|
|
|
|
|
* <stat Flat: -x.y per level>
|
|
|
|
|
* Replace 'stat' with 'maxhp', 'maxmp', 'atk', 'def', 'mat', 'mdf', 'agi',
|
|
|
|
|
* 'luk', 'exp', or 'gold'. This will set this enemy to have an increase or
|
|
|
|
|
* decrease of flat x value per level. If you use the x.y formula, it will
|
|
|
|
|
* have a flat increase of +x.y or -x.y per level.
|
|
|
|
|
* 将“stat”替换为“maxhp”、“maxmp”、“atk”、“def”、“mat”、“mdf”、“agi”、
|
|
|
|
|
* “luk”、“exp”或“gold”。这将设置这个敌人每级增加或减少属性x值。
|
|
|
|
|
* 如果使用 x.y 公式,则每个级别将平坦增加 +x.y 或 -x.y。
|
|
|
|
|
*
|
|
|
|
|
* <Resist Level Change>
|
|
|
|
|
* This will cause the enemy to be immune to any form of level changing
|
|
|
|
|
* through skills and items. However, the enemy is not immune to any level
|
|
|
|
|
* changing through script calls.
|
|
|
|
|
* 这将使敌人对通过技能和物品进行的任何形式的等级变化免疫。
|
|
|
|
|
* 但是,敌人不能幸免于通过脚本调用更改任何级别。
|
|
|
|
|
*
|
|
|
|
|
* <Skill x Require Level: y>
|
|
|
|
|
* <Skill name Require Level: y>
|
|
|
|
|
* If this enemy is to use skill x (or named skill), it must be at least
|
|
|
|
|
* level y to be able to use it. If the enemy is under level y, the skill
|
|
|
|
|
* will be sealed and cannot be used.
|
|
|
|
|
* 如果这个敌人要使用技能x(或命名技能),它必须至少达到y级才能使用它。
|
|
|
|
|
* 如果敌人低于y级,则该技能将被封印,无法使用。
|
|
|
|
|
*
|
|
|
|
|
* <Ignore Level Bonus>
|
|
|
|
|
* This will cause the enemy to ignore all the stat changes added by levels
|
|
|
|
|
* and use its base stats as its current level stats. Any changes to its
|
|
|
|
|
* current level will not alter the enemy's stats.
|
|
|
|
|
* 这将导致敌人忽略关卡添加的所有属性变化,并将其基础属性用作当前等级属性。
|
|
|
|
|
* 对当前等级的任何更改都不会改变敌人的属性。
|
|
|
|
|
*
|
|
|
|
|
* Skill and Item Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Reset Enemy Level>
|
|
|
|
|
* This will reset the target enemy's level back to what it was at the start
|
|
|
|
|
* of battle.
|
|
|
|
|
* 这会将目标敌人的等级重置回战斗开始时的水平。
|
|
|
|
|
*
|
|
|
|
|
* <Change Enemy Level: +x>
|
|
|
|
|
* <Change Enemy Level: -x>
|
|
|
|
|
* If this action is used against an enemy, it will change the enemy's level
|
|
|
|
|
* by +x or -x. If an action contains both a reset and level change, the
|
|
|
|
|
* reset will occur first before the level change.
|
|
|
|
|
* 如果对敌人使用这个动作,它会将敌人的等级改变+x或-x。
|
|
|
|
|
* 如果操作同时包含重置和级别更改,则重置将在级别更改之前首先发生。
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Lunatic Mode - Custom Starting Level
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* For those with JavaScript experience, you can have enemies have conditional
|
|
|
|
|
* starting levels. Place these Lunatic Mode notetags into the enemy notebox:
|
|
|
|
|
*
|
|
|
|
|
* Enemy Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Custom Starting Level>
|
|
|
|
|
* level = $gameActors.actor(1).level + 5;
|
|
|
|
|
* </Custom Starting Level>
|
|
|
|
|
* The 'level' variable will become the enemy's starting level. This level is
|
|
|
|
|
* still affected by the enemy's minimum and maximum starting level barriers.
|
|
|
|
|
* After the starting levels are decided, it will still be affected by the
|
|
|
|
|
* random level fluctuation.
|
|
|
|
|
* “level”变量将成为敌人的起始等级。这个等级仍然受到敌人最小和最大起始等级限制
|
|
|
|
|
* 的影响。确定起始级别后,仍会受到随机级别波动的影响。
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Lunatic Mode - Custom Parameter Formulas
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* For those with JavaScript experience, you can have different formulas for
|
|
|
|
|
* the ways parameters are calculated in regards to the enemy's level. Use the
|
|
|
|
|
* notetags below:
|
|
|
|
|
*
|
|
|
|
|
* Enemy Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Custom Parameter stat Formula>
|
|
|
|
|
* base * (1 + (level - 1) * rate) + (flat * (level - 1))
|
|
|
|
|
* </Custom Parameter stat Formula>
|
|
|
|
|
* Replace 'stat' with 'maxhp', 'maxmp', 'atk', 'def', 'mat', 'mdf', 'agi',
|
|
|
|
|
* 'luk', 'exp', or 'gold'. Whatever is calculated for the formula on the
|
|
|
|
|
* last line will become the parameter value for the stat.
|
|
|
|
|
* 将“stat”替换为“maxhp”、“maxmp”、“atk”、“def”、“mat”、“mdf”、“agi”、
|
|
|
|
|
* “luk”、“exp”或“gold”。为最后一行的公式计算的任何内容都将成为
|
|
|
|
|
* 统计信息的参数值。
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Lunatic Mode - Custom Change Enemy Level
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* For those with JavaScript experience and would like to have more dynamic
|
|
|
|
|
* ways of altering enemy levels instead of flat values, you can use these
|
|
|
|
|
* notetags to do so:
|
|
|
|
|
*
|
|
|
|
|
* Skill and Item Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Custom Change Enemy Level>
|
|
|
|
|
* level += user.atk;
|
|
|
|
|
* level -= target.agi;
|
|
|
|
|
* </Custom Change Enemy Level>
|
|
|
|
|
* The 'level' variable will be the enemy's current level. Any changes made
|
|
|
|
|
* to the 'level' variable will be what the enemy's level will become after
|
|
|
|
|
* this effect finishes taking place. If the skill has a reset level effect,
|
|
|
|
|
* it is applied first. If the skill has a flat level changing effect, that
|
|
|
|
|
* effect is applied next. After those two effects are applied, this custom
|
|
|
|
|
* enemy level change will take place.
|
|
|
|
|
* “等级”变量将是敌人的当前等级。对“等级”变量所做的任何更改都将是
|
|
|
|
|
* 此效果发生后敌人的等级。如果技能具有重置等级效果,则首先应用该技能。
|
|
|
|
|
* 如果技能具有平坦的关卡变化效果,则接下来应用该效果。应用这两种效果后,
|
|
|
|
|
* 将发生此自定义敌人等级更改。
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Lunatic Mode - New JavaScript Functions
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* Here are some new JavaScript functions that have been added by this plugin.
|
|
|
|
|
*
|
|
|
|
|
* enemy.level
|
|
|
|
|
* - This will return the enemy's current level.
|
|
|
|
|
* - 这将返回敌人的当前等级。
|
|
|
|
|
*
|
|
|
|
|
* enemy.originalLevel()
|
|
|
|
|
* - This will return the enemy's original level from the start of battle.
|
|
|
|
|
* - 这将从战斗开始恢复敌人的原始等级。
|
|
|
|
|
*
|
|
|
|
|
* enemy.changeLevel(x)
|
|
|
|
|
* - This will change the enemy's level to x.
|
|
|
|
|
* - 这会将敌人的等级更改为 x。
|
|
|
|
|
*
|
|
|
|
|
* enemy.gainLevel(x)
|
|
|
|
|
* - This will cause the enemy to gain x levels.
|
|
|
|
|
* - 这将导致敌人增加x级。
|
|
|
|
|
*
|
|
|
|
|
* enemy.loseLevel(x)
|
|
|
|
|
* - This will cause the enemy to lose x levels.
|
|
|
|
|
* - 这将导致敌人减少x级。
|
|
|
|
|
*
|
|
|
|
|
* enemy.resetLevel()
|
|
|
|
|
* - Changes the enemy's level back to what it was at the start of battle.
|
|
|
|
|
* - 将敌人的等级变回战斗开始时的水平。
|
|
|
|
|
*
|
|
|
|
|
* $gameParty.lowestLevelAllMembers()
|
|
|
|
|
* - This will return the lowest level of all party members.
|
|
|
|
|
* - 这将返回所有队员的最低等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameParty.lowestLevelBattleMembers()
|
|
|
|
|
* - This will return the lowest level of all battle members.
|
|
|
|
|
* - 这将返回所有战斗成员中最低等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameParty.averageLevelAllMembers()
|
|
|
|
|
* - This will return the average level of all party members.
|
|
|
|
|
* - 这将返回所有队员的平均等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameParty.averageLevelBattleMembers()
|
|
|
|
|
* - This will return the average level of all battle members.
|
|
|
|
|
* - 这将返回所有战斗成员的平均水平。
|
|
|
|
|
*
|
|
|
|
|
* $gameParty.highestLevelAllMembers()
|
|
|
|
|
* - This will return the highest level of all party members.
|
|
|
|
|
* - 这将返回所有队员的最高等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameParty.highestLevelBattleMembers()
|
|
|
|
|
* - This will return the highest level of all battle members.
|
|
|
|
|
* - 这将返回所有战斗成员的最高等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.changeLevel(x)
|
|
|
|
|
* - Changes the levels of all enemies to x.
|
|
|
|
|
* - 将所有敌人的等级更改为x。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.gainLevel(x)
|
|
|
|
|
* - Raises the levels of all enemies by x.
|
|
|
|
|
* - 将所有敌人的等级提高 x。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.loseLevel(x)
|
|
|
|
|
* - Lowers the levels of all enemies by x.
|
|
|
|
|
* - 将所有敌人的等级降低x。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.resetLevel()
|
|
|
|
|
* - Resets the levels of all enemies to their original levels at battle start.
|
|
|
|
|
* - 将所有敌人的等级重置为战斗开始时的原始等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.lowestLevel()
|
|
|
|
|
* - This will return the lowest level of the enemy party.
|
|
|
|
|
* - 这将返回敌方的最低等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.averageLevel()
|
|
|
|
|
* - This will return the average level of the enemy party.
|
|
|
|
|
* - 这将返回敌方的平均等级。
|
|
|
|
|
*
|
|
|
|
|
* $gameTroop.highestLevel()
|
|
|
|
|
* - This will return the highest level of the enemy party.
|
|
|
|
|
* - 这将返回敌方的最高等级。
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Plugin Commands
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* If you wish to change enemy levels through plugin commands, you can use the
|
|
|
|
|
* following plugin commands to alter them. These plugin commands are only used
|
|
|
|
|
* inside battle.
|
|
|
|
|
* 如果你想通过插件命令改变敌人的等级,你可以使用以下插件命令来改变它们。
|
|
|
|
|
* 这些插件命令仅在战斗中使用。
|
|
|
|
|
*
|
|
|
|
|
* Plugin Command:
|
|
|
|
|
*
|
|
|
|
|
* EnemyLevelChange 2 to 50
|
|
|
|
|
* - This will reset the enemy in position 2's level to 50.
|
|
|
|
|
* - 这会将位置 2 的敌人等级重置为 50。
|
|
|
|
|
*
|
|
|
|
|
* EnemyLevelChangeAll 50
|
|
|
|
|
* - This will change the levels of all enemies to 50.
|
|
|
|
|
* - 这会将所有敌人的等级更改为 50。
|
|
|
|
|
*
|
|
|
|
|
* EnemyGainLevel 3 by 20
|
|
|
|
|
* - This will cause the enemy in positon 3 to gain 20 levels.
|
|
|
|
|
* - 这将导致位置 3 中的敌人增加 20 级。
|
|
|
|
|
*
|
|
|
|
|
* EnemyGainLevelAll 20
|
|
|
|
|
* - This will cause all enemies to gain 20 levels.
|
|
|
|
|
* - 这将导致所有敌人增加 20 级。
|
|
|
|
|
*
|
|
|
|
|
* EnemyLoseLevel 4 by 10
|
|
|
|
|
* - This will cause the enemy in positon 4 to lose 10 levels.
|
|
|
|
|
* - 这将导致位置 4 中的敌人减少 10 级。
|
|
|
|
|
*
|
|
|
|
|
* EnemyLoseLevelAll 10
|
|
|
|
|
* - This will cause all enemies to lose 10 levels.
|
|
|
|
|
* - 这将导致所有敌人减少10个等级。
|
|
|
|
|
*
|
|
|
|
|
* EnemyLevelReset 5
|
|
|
|
|
* - This will reset the enemy in position 5's level to the level it had at
|
|
|
|
|
* the start of battle.
|
|
|
|
|
* - 这会将位置 5 的敌人重置为战斗开始时的等级。
|
|
|
|
|
*
|
|
|
|
|
* EnemyLevelResetAll
|
|
|
|
|
* - This will reset all enemy levels to their original levels.
|
|
|
|
|
* - 这会将所有敌人等级重置为原始等级。
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Changelog
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* Version 1.09:
|
|
|
|
|
* - Bypass the isDevToolsOpen() error when bad code is inserted into a script
|
|
|
|
|
* call or custom Lunatic Mode code segment due to updating to MV 1.6.1.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.08:
|
|
|
|
|
* - Updated for RPG Maker MV version 1.5.0.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.07:
|
|
|
|
|
* - Enemy Transform event now adjusts for stat changes when transforming into
|
|
|
|
|
* a different enemy.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.06:
|
|
|
|
|
* - Lunatic Mode fail safes added.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.05:
|
|
|
|
|
* - Updated the custom level formula to have the formulas 'b', 'r', and 'f' to
|
|
|
|
|
* be able to use the formulas from FlyingDream's calculator.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.04:
|
|
|
|
|
* - Updated for RPG Maker MV version 1.1.0.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.03:
|
|
|
|
|
* - Fixed a bug with average level calculation types for enemies.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.02:
|
|
|
|
|
* - Fixed a bug regarding a line of code that wasn't added properly.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.01:
|
|
|
|
|
* - Added <Ignore Level Bonus> notetag. This causes enemies to maintain their
|
|
|
|
|
* current level but ignore any bonus stats applied by the level difference. If
|
|
|
|
|
* the enemy's level is altered, its stats remain static and unchanging.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.00:
|
|
|
|
|
* - Finished Plugin!
|
|
|
|
|
*/
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Parameter Variables
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Parameters = PluginManager.parameters('YEP_EnemyLevels');
|
|
|
|
|
Yanfly.Param = Yanfly.Param || {};
|
|
|
|
|
|
|
|
|
|
Yanfly.Param.ELVShow = eval(String(Yanfly.Parameters['Show Level']));
|
|
|
|
|
Yanfly.Param.ELVFmt = String(Yanfly.Parameters['Level Format']);
|
|
|
|
|
Yanfly.Param.ELVMinLv = Number(Yanfly.Parameters['Minimum Level']);
|
|
|
|
|
Yanfly.Param.ELVMaxLv = Number(Yanfly.Parameters['Maximum Level']);
|
|
|
|
|
Yanfly.Param.ELVMaxCap = Number(Yanfly.Parameters['Maximum Cap']);
|
|
|
|
|
Yanfly.Param.ELVPreserveRate = eval(String(Yanfly.Parameters['Preserve Rate']));
|
|
|
|
|
|
|
|
|
|
Yanfly.Param.ELVDefaultType = Number(Yanfly.Parameters['Default Type']);
|
|
|
|
|
Yanfly.Param.ELVPosFluc = Number(Yanfly.Parameters['Positive Fluctuation']);
|
|
|
|
|
Yanfly.Param.ELVNegFluc = Number(Yanfly.Parameters['Negative Fluctuation']);
|
|
|
|
|
Yanfly.Param.ELVFormula = [
|
|
|
|
|
String(Yanfly.Parameters['MaxHP Formula']),
|
|
|
|
|
String(Yanfly.Parameters['MaxMP Formula']),
|
|
|
|
|
String(Yanfly.Parameters['ATK Formula']),
|
|
|
|
|
String(Yanfly.Parameters['DEF Formula']),
|
|
|
|
|
String(Yanfly.Parameters['MAT Formula']),
|
|
|
|
|
String(Yanfly.Parameters['MDF Formula']),
|
|
|
|
|
String(Yanfly.Parameters['AGI Formula']),
|
|
|
|
|
String(Yanfly.Parameters['LUK Formula']),
|
|
|
|
|
String(Yanfly.Parameters['EXP Formula']),
|
|
|
|
|
String(Yanfly.Parameters['Gold Formula'])
|
|
|
|
|
];
|
|
|
|
|
Yanfly.Param.ELVRate = [
|
|
|
|
|
Number(Yanfly.Parameters['MaxHP Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['MaxMP Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['ATK Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['DEF Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['MAT Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['MDF Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['AGI Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['LUK Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['EXP Rate Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['Gold Rate Growth'])
|
|
|
|
|
];
|
|
|
|
|
Yanfly.Param.ELVFlat = [
|
|
|
|
|
Number(Yanfly.Parameters['MaxHP Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['MaxMP Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['ATK Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['DEF Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['MAT Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['MDF Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['AGI Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['LUK Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['EXP Flat Growth']),
|
|
|
|
|
Number(Yanfly.Parameters['Gold Flat Growth'])
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// DataManager
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
|
|
|
|
|
DataManager.isDatabaseLoaded = function() {
|
|
|
|
|
if (!Yanfly.ELV.DataManager_isDatabaseLoaded.call(this)) return false;
|
|
|
|
|
if (!Yanfly._loaded_YEP_EnemyLevels) {
|
|
|
|
|
this.processELVNotetagsS($dataSkills);
|
|
|
|
|
this.processELVNotetags1($dataEnemies);
|
|
|
|
|
this.processELVNotetags2($dataSkills);
|
|
|
|
|
this.processELVNotetags2($dataItems);
|
|
|
|
|
Yanfly._loaded_YEP_EnemyLevels = true;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.processELVNotetagsS = function(group) {
|
|
|
|
|
if (Yanfly.SkillIdRef) return;
|
|
|
|
|
Yanfly.SkillIdRef = {};
|
|
|
|
|
for (var n = 1; n < group.length; n++) {
|
|
|
|
|
var obj = group[n];
|
|
|
|
|
if (obj.name.length <= 0) continue;
|
|
|
|
|
Yanfly.SkillIdRef[obj.name.toUpperCase()] = n;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.processELVNotetags1 = function(group) {
|
|
|
|
|
var note1a = /<(.*)[ ]RATE:[ ]([\+\-]\d+)([%%])[ ]PER LEVEL>/i;
|
|
|
|
|
var note1b = /<(.*)[ ]RATE:[ ]([\+\-]\d+).(\d+)[ ]PER LEVEL>/i;
|
|
|
|
|
var note2a = /<(.*)[ ]FLAT:[ ]([\+\-]\d+)[ ]PER LEVEL>/i;
|
|
|
|
|
var note2b = /<(.*)[ ]FLAT:[ ]([\+\-]\d+).(\d+)[ ]PER LEVEL>/i;
|
|
|
|
|
for (var n = 1; n < group.length; n++) {
|
|
|
|
|
var obj = group[n];
|
|
|
|
|
var notedata = obj.note.split(/[\r\n]+/);
|
|
|
|
|
|
|
|
|
|
obj.showLevel = Yanfly.Param.ELVShow;
|
|
|
|
|
obj.ignoreLevelBonuses = false;
|
|
|
|
|
obj.minLevel = Yanfly.Param.ELVMinLv;
|
|
|
|
|
obj.maxLevel = Yanfly.Param.ELVMaxLv;
|
|
|
|
|
obj.levelType = Yanfly.Param.ELVDefaultType;
|
|
|
|
|
obj.positiveLevelFluctuation = Yanfly.Param.ELVPosFluc;
|
|
|
|
|
obj.negativeLevelFluctuation = Yanfly.Param.ELVPosFluc;
|
|
|
|
|
obj.baseParamFormula = Yanfly.Param.ELVFormula.slice();
|
|
|
|
|
obj.baseParamRate = Yanfly.Param.ELVRate.slice();
|
|
|
|
|
obj.baseParamFlat = Yanfly.Param.ELVFlat.slice();
|
|
|
|
|
obj.resistLevelChange = false;
|
|
|
|
|
obj.skillLevelRequirements = {};
|
|
|
|
|
var evalMode = 'none';
|
|
|
|
|
var evalParam = 0;
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < notedata.length; i++) {
|
|
|
|
|
var line = notedata[i];
|
|
|
|
|
if (line.match(/<(?:SHOW LEVEL)>/i)) {
|
|
|
|
|
obj.showLevel = true;
|
|
|
|
|
} else if (line.match(/<(?:HIDE LEVEL)>/i)) {
|
|
|
|
|
obj.showLevel = false;
|
|
|
|
|
} else if (line.match(/<(?:IGNORE LEVEL BONUS|IGNORE LEVEL BONUSES)>/i)) {
|
|
|
|
|
obj.ignoreLevelBonuses = true;
|
|
|
|
|
} else if (line.match(/<(?:MIN LEVEL|MINIMUM LEVEL):[ ](\d+)>/i)) {
|
|
|
|
|
obj.minLevel = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(/<(?:MAX LEVEL|MAXIMUM LEVEL):[ ](\d+)>/i)) {
|
|
|
|
|
obj.maxLevel = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(/<(?:SET LEVEL|STATIC LEVEL):[ ](\d+)>/i)) {
|
|
|
|
|
obj.minLevel = parseInt(RegExp.$1);
|
|
|
|
|
obj.maxLevel = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(/<(?:LEVEL TYPE|STARTING LEVEL TYPE):[ ](\d+)>/i)) {
|
|
|
|
|
obj.levelType = parseInt(RegExp.$1).clamp(0, 5);
|
|
|
|
|
} else if (line.match(/<POSITIVE LEVEL FLUCTUATION:[ ](\d+)>/i)) {
|
|
|
|
|
obj.positiveLevelFluctuation = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(/<NEGATIVE LEVEL FLUCTUATION:[ ](\d+)>/i)) {
|
|
|
|
|
obj.negativeLevelFluctuation = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(/<LEVEL FLUCTUATION:[ ](\d+)>/i)) {
|
|
|
|
|
obj.positiveLevelFluctuation = parseInt(RegExp.$1);
|
|
|
|
|
obj.negativeLevelFluctuation = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(note1a)) {
|
|
|
|
|
var param = String(RegExp.$1).toUpperCase();
|
|
|
|
|
var rate = parseFloat(RegExp.$2) * 0.01;
|
|
|
|
|
if (['MAXHP', 'MAX HP', 'MHP', 'HP'].contains(param)) {
|
|
|
|
|
param = 0;
|
|
|
|
|
} else if (['MAXMP', 'MAX MP', 'MMP', 'MP', 'MAXSP', 'MAX SP', 'MSP',
|
|
|
|
|
'SP'].contains(param)) {
|
|
|
|
|
param = 1;
|
|
|
|
|
} else if (['ATK', 'STR'].contains(param)) {
|
|
|
|
|
param = 2;
|
|
|
|
|
} else if (['DEF'].contains(param)) {
|
|
|
|
|
param = 3;
|
|
|
|
|
} else if (['MAT', 'INT', 'SPI'].contains(param)) {
|
|
|
|
|
param = 4;
|
|
|
|
|
} else if (['MDF', 'RES'].contains(param)) {
|
|
|
|
|
param = 5;
|
|
|
|
|
} else if (['AGI', 'SPD'].contains(param)) {
|
|
|
|
|
param = 6;
|
|
|
|
|
} else if (['LUK'].contains(param)) {
|
|
|
|
|
param = 7;
|
|
|
|
|
} else if (['EXP', 'XP'].contains(param)) {
|
|
|
|
|
param = 8;
|
|
|
|
|
} else if (['GOLD'].contains(param)) {
|
|
|
|
|
param = 9;
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
obj.baseParamRate[param] = rate;
|
|
|
|
|
} else if (line.match(note1b)) {
|
|
|
|
|
var param = String(RegExp.$1).toUpperCase();
|
|
|
|
|
var rate = parseFloat(String(RegExp.$2) + '.' + String(RegExp.$3));
|
|
|
|
|
if (['MAXHP', 'MAX HP', 'MHP', 'HP'].contains(param)) {
|
|
|
|
|
param = 0;
|
|
|
|
|
} else if (['MAXMP', 'MAX MP', 'MMP', 'MP', 'MAXSP', 'MAX SP', 'MSP',
|
|
|
|
|
'SP'].contains(param)) {
|
|
|
|
|
param = 1;
|
|
|
|
|
} else if (['ATK', 'STR'].contains(param)) {
|
|
|
|
|
param = 2;
|
|
|
|
|
} else if (['DEF'].contains(param)) {
|
|
|
|
|
param = 3;
|
|
|
|
|
} else if (['MAT', 'INT', 'SPI'].contains(param)) {
|
|
|
|
|
param = 4;
|
|
|
|
|
} else if (['MDF', 'RES'].contains(param)) {
|
|
|
|
|
param = 5;
|
|
|
|
|
} else if (['AGI', 'SPD'].contains(param)) {
|
|
|
|
|
param = 6;
|
|
|
|
|
} else if (['LUK'].contains(param)) {
|
|
|
|
|
param = 7;
|
|
|
|
|
} else if (['EXP', 'XP'].contains(param)) {
|
|
|
|
|
param = 8;
|
|
|
|
|
} else if (['GOLD'].contains(param)) {
|
|
|
|
|
param = 9;
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
obj.baseParamRate[param] = rate;
|
|
|
|
|
} else if (line.match(note2a)) {
|
|
|
|
|
var param = String(RegExp.$1).toUpperCase();
|
|
|
|
|
var flat = parseFloat(RegExp.$2);
|
|
|
|
|
if (['MAXHP', 'MAX HP', 'MHP', 'HP'].contains(param)) {
|
|
|
|
|
param = 0;
|
|
|
|
|
} else if (['MAXMP', 'MAX MP', 'MMP', 'MP', 'MAXSP', 'MAX SP', 'MSP',
|
|
|
|
|
'SP'].contains(param)) {
|
|
|
|
|
param = 1;
|
|
|
|
|
} else if (['ATK', 'STR'].contains(param)) {
|
|
|
|
|
param = 2;
|
|
|
|
|
} else if (['DEF'].contains(param)) {
|
|
|
|
|
param = 3;
|
|
|
|
|
} else if (['MAT', 'INT', 'SPI'].contains(param)) {
|
|
|
|
|
param = 4;
|
|
|
|
|
} else if (['MDF', 'RES'].contains(param)) {
|
|
|
|
|
param = 5;
|
|
|
|
|
} else if (['AGI', 'SPD'].contains(param)) {
|
|
|
|
|
param = 6;
|
|
|
|
|
} else if (['LUK'].contains(param)) {
|
|
|
|
|
param = 7;
|
|
|
|
|
} else if (['EXP', 'XP'].contains(param)) {
|
|
|
|
|
param = 8;
|
|
|
|
|
} else if (['GOLD'].contains(param)) {
|
|
|
|
|
param = 9;
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
obj.baseParamFlat[param] = flat;
|
|
|
|
|
} else if (line.match(note2b)) {
|
|
|
|
|
var param = String(RegExp.$1).toUpperCase();
|
|
|
|
|
var flat = parseFloat(String(RegExp.$2) + '.' + String(RegExp.$3));
|
|
|
|
|
if (['MAXHP', 'MAX HP', 'MHP', 'HP'].contains(param)) {
|
|
|
|
|
param = 0;
|
|
|
|
|
} else if (['MAXMP', 'MAX MP', 'MMP', 'MP', 'MAXSP', 'MAX SP', 'MSP',
|
|
|
|
|
'SP'].contains(param)) {
|
|
|
|
|
param = 1;
|
|
|
|
|
} else if (['ATK', 'STR'].contains(param)) {
|
|
|
|
|
param = 2;
|
|
|
|
|
} else if (['DEF'].contains(param)) {
|
|
|
|
|
param = 3;
|
|
|
|
|
} else if (['MAT', 'INT', 'SPI'].contains(param)) {
|
|
|
|
|
param = 4;
|
|
|
|
|
} else if (['MDF', 'RES'].contains(param)) {
|
|
|
|
|
param = 5;
|
|
|
|
|
} else if (['AGI', 'SPD'].contains(param)) {
|
|
|
|
|
param = 6;
|
|
|
|
|
} else if (['LUK'].contains(param)) {
|
|
|
|
|
param = 7;
|
|
|
|
|
} else if (['EXP', 'XP'].contains(param)) {
|
|
|
|
|
param = 8;
|
|
|
|
|
} else if (['GOLD'].contains(param)) {
|
|
|
|
|
param = 9;
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
obj.baseParamFlat[param] = flat;
|
|
|
|
|
} else if (line.match(/<\/CUSTOM PARAMETER[ ](.*)[ ]FORMULA>/i)) {
|
|
|
|
|
evalMode = 'none';
|
|
|
|
|
evalParam = 0;
|
|
|
|
|
} else if (line.match(/<CUSTOM PARAMETER[ ](.*)[ ]FORMULA>/i)) {
|
|
|
|
|
var param = String(RegExp.$1).toUpperCase();
|
|
|
|
|
if (['MAXHP', 'MAX HP', 'MHP', 'HP'].contains(param)) {
|
|
|
|
|
param = 0;
|
|
|
|
|
} else if (['MAXMP', 'MAX MP', 'MMP', 'MP', 'MAXSP', 'MAX SP', 'MSP',
|
|
|
|
|
'SP'].contains(param)) {
|
|
|
|
|
evalParam = 1;
|
|
|
|
|
} else if (['ATK', 'STR'].contains(param)) {
|
|
|
|
|
evalParam = 2;
|
|
|
|
|
} else if (['DEF'].contains(param)) {
|
|
|
|
|
evalParam = 3;
|
|
|
|
|
} else if (['MAT', 'INT', 'SPI'].contains(param)) {
|
|
|
|
|
evalParam = 4;
|
|
|
|
|
} else if (['MDF', 'RES'].contains(param)) {
|
|
|
|
|
evalParam = 5;
|
|
|
|
|
} else if (['AGI', 'SPD'].contains(param)) {
|
|
|
|
|
evalParam = 6;
|
|
|
|
|
} else if (['LUK'].contains(param)) {
|
|
|
|
|
evalParam = 7;
|
|
|
|
|
} else if (['EXP', 'XP'].contains(param)) {
|
|
|
|
|
evalParam = 8;
|
|
|
|
|
} else if (['GOLD'].contains(param)) {
|
|
|
|
|
evalParam = 9
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
obj.baseParamFormula[evalParam] = '';
|
|
|
|
|
evalMode = 'custom param level formula';
|
|
|
|
|
} else if (evalMode === 'custom param level formula') {
|
|
|
|
|
var pId = evalParam;
|
|
|
|
|
obj.baseParamFormula[pId] = obj.baseParamFormula[pId] + line + '\n';
|
|
|
|
|
} else if (line.match(/<(?:RESIST LEVEL CHANGE)>/i)) {
|
|
|
|
|
obj.resistLevelChange = true;
|
|
|
|
|
} else if (line.match(/<SKILL[ ](\d+)[ ]REQUIRE LEVEL:[ ](\d+)>/i)) {
|
|
|
|
|
var skillId = parseInt(RegExp.$1);
|
|
|
|
|
var level = parseInt(RegExp.$2);
|
|
|
|
|
obj.skillLevelRequirements[skillId] = level;
|
|
|
|
|
} else if (line.match(/<SKILL[ ](.*)[ ]REQUIRE LEVEL:[ ](\d+)>/i)) {
|
|
|
|
|
var name = String(RegExp.$1).toUpperCase();
|
|
|
|
|
var level = parseInt(RegExp.$2);
|
|
|
|
|
if (Yanfly.SkillIdRef[name]) {
|
|
|
|
|
var skillId = Yanfly.SkillIdRef[name];
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
obj.skillLevelRequirements[skillId] = level;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
evalMode = 'none';
|
|
|
|
|
|
|
|
|
|
if (obj.levelType === 0) {
|
|
|
|
|
obj.startingLevel = 'level = $gameParty.lowestLevelAllMembers()';
|
|
|
|
|
} else if (obj.levelType === 1) {
|
|
|
|
|
obj.startingLevel = 'level = $gameParty.lowestLevelBattleMembers()';
|
|
|
|
|
} else if (obj.levelType === 2) {
|
|
|
|
|
obj.startingLevel = 'level = $gameParty.averageLevelAllMembers()';
|
|
|
|
|
} else if (obj.levelType === 3) {
|
|
|
|
|
obj.startingLevel = 'level = $gameParty.averageLevelBattleMembers()';
|
|
|
|
|
} else if (obj.levelType === 4) {
|
|
|
|
|
obj.startingLevel = 'level = $gameParty.highestLevelAllMembers()';
|
|
|
|
|
} else if (obj.levelType === 5) {
|
|
|
|
|
obj.startingLevel = 'level = $gameParty.highestLevelBattleMembers()';
|
|
|
|
|
}
|
|
|
|
|
for (var i = 0; i < notedata.length; i++) {
|
|
|
|
|
var line = notedata[i];
|
|
|
|
|
if (line.match(/<(?:CUSTOM STARTING LEVEL)>/i)) {
|
|
|
|
|
obj.startingLevel = '';
|
|
|
|
|
evalMode = 'custom starting level';
|
|
|
|
|
} else if (line.match(/<\/(?:CUSTOM STARTING LEVEL)>/i)) {
|
|
|
|
|
evalMode = 'none';
|
|
|
|
|
} else if (evalMode === 'custom starting level') {
|
|
|
|
|
obj.startingLevel = obj.startingLevel + line + '\n';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.processELVNotetags2 = function(group) {
|
|
|
|
|
for (var n = 1; n < group.length; n++) {
|
|
|
|
|
var obj = group[n];
|
|
|
|
|
var notedata = obj.note.split(/[\r\n]+/);
|
|
|
|
|
|
|
|
|
|
obj.resetEnemyLevel = false;
|
|
|
|
|
obj.changeEnemyLevel = 0;
|
|
|
|
|
obj.enemyLevelEval = '';
|
|
|
|
|
var evalMode = 'none';
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < notedata.length; i++) {
|
|
|
|
|
var line = notedata[i];
|
|
|
|
|
if (line.match(/<(?:CHANGE ENEMY LEVEL):[ ]([\+\-]\d+)>/i)) {
|
|
|
|
|
obj.changeEnemyLevel = parseInt(RegExp.$1);
|
|
|
|
|
} else if (line.match(/<(?:RESET ENEMY LEVEL)>/i)) {
|
|
|
|
|
obj.resetEnemyLevel = true;
|
|
|
|
|
} else if (line.match(/<(?:CUSTOM CHANGE ENEMY LEVEL)>/i)) {
|
|
|
|
|
var evalMode = 'custom change enemy level';
|
|
|
|
|
} else if (line.match(/<\/(?:CUSTOM CHANGE ENEMY LEVEL)>/i)) {
|
|
|
|
|
var evalMode = 'none';
|
|
|
|
|
} else if (evalMode === 'custom change enemy level') {
|
|
|
|
|
obj.enemyLevelEval = obj.enemyLevelEval + line + '\n';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_BattlerBase
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_BattlerBase_isSkillSealed =
|
|
|
|
|
Game_BattlerBase.prototype.isSkillSealed;
|
|
|
|
|
Game_BattlerBase.prototype.isSkillSealed = function(skillId) {
|
|
|
|
|
if (this.isEnemySkillLevelSealed(skillId)) return true;
|
|
|
|
|
return Yanfly.ELV.Game_BattlerBase_isSkillSealed.call(this, skillId);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_BattlerBase.prototype.isEnemySkillLevelSealed = function(skillId) {
|
|
|
|
|
if (!this.isEnemy()) return false;
|
|
|
|
|
if (!this.enemy().skillLevelRequirements[skillId]) return false;
|
|
|
|
|
var reqLevel = this.enemy().skillLevelRequirements[skillId];
|
|
|
|
|
return this.level < reqLevel;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Enemy
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(Game_Enemy.prototype, 'level', {
|
|
|
|
|
get: function() {
|
|
|
|
|
return this._level;
|
|
|
|
|
},
|
|
|
|
|
configurable: true
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_initMembers = Game_Enemy.prototype.initMembers;
|
|
|
|
|
Game_Enemy.prototype.initMembers = function() {
|
|
|
|
|
Yanfly.ELV.Game_Enemy_initMembers.call(this);
|
|
|
|
|
this._level = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_setup = Game_Enemy.prototype.setup;
|
|
|
|
|
Game_Enemy.prototype.setup = function(enemyId, x, y) {
|
|
|
|
|
this._enemyId = enemyId;
|
|
|
|
|
this.setupEnemyLevel();
|
|
|
|
|
Yanfly.ELV.Game_Enemy_setup.call(this, enemyId, x, y);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.setupEnemyLevel = function() {
|
|
|
|
|
var min = this.setupMinimumLevel();
|
|
|
|
|
var max = this.setupMaximumLevel();
|
|
|
|
|
this._level = this.getSetupLevel().clamp(min, max);
|
|
|
|
|
this.applySetupLevelFluctuation();
|
|
|
|
|
this._level = this._level.clamp(1, Yanfly.Param.ELVMaxCap);
|
|
|
|
|
this._originalLevel = this._level;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.setupMinimumLevel = function() {
|
|
|
|
|
return this.enemy().minLevel;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.setupMaximumLevel = function() {
|
|
|
|
|
return this.enemy().maxLevel;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.originalLevel = function() {
|
|
|
|
|
return this._originalLevel;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.getSetupLevel = function() {
|
|
|
|
|
var level = 0;
|
|
|
|
|
var code = this.enemy().startingLevel;
|
|
|
|
|
try {
|
|
|
|
|
eval(code);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
Yanfly.Util.displayError(e, code, 'ENEMY STARTING LEVEL ERROR');
|
|
|
|
|
}
|
|
|
|
|
return Math.floor(level);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.applySetupLevelFluctuation = function() {
|
|
|
|
|
var min = this._level - this.negativeLevelFluctuation();
|
|
|
|
|
var max = this._level + this.positiveLevelFluctuation();
|
|
|
|
|
this._level = Math.floor(Math.random() * (max - min + 1) + min);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.negativeLevelFluctuation = function() {
|
|
|
|
|
return this.enemy().negativeLevelFluctuation;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.positiveLevelFluctuation = function() {
|
|
|
|
|
return this.enemy().positiveLevelFluctuation;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_name = Game_Enemy.prototype.name;
|
|
|
|
|
Game_Enemy.prototype.name = function() {
|
|
|
|
|
var name = Yanfly.ELV.Game_Enemy_name.call(this);
|
|
|
|
|
if (this.enemy().showLevel) {
|
|
|
|
|
var fmt = Yanfly.Param.ELVFmt;
|
|
|
|
|
name = fmt.format(this.level, name);
|
|
|
|
|
}
|
|
|
|
|
return name;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_paramBase = Game_Enemy.prototype.paramBase;
|
|
|
|
|
Game_Enemy.prototype.paramBase = function(paramId) {
|
|
|
|
|
this._cacheBaseParam = this._cacheBaseParam || {};
|
|
|
|
|
if (this._cacheBaseParam[paramId]) return this._cacheBaseParam[paramId];
|
|
|
|
|
var base = Yanfly.ELV.Game_Enemy_paramBase.call(this, paramId);
|
|
|
|
|
if (this.enemy().ignoreLevelBonuses) {
|
|
|
|
|
this._cacheBaseParam[paramId] = base;
|
|
|
|
|
return this._cacheBaseParam[paramId];
|
|
|
|
|
}
|
|
|
|
|
var level = this.level;
|
|
|
|
|
var formula = this.enemy().baseParamFormula[paramId];
|
|
|
|
|
var rate = this.enemy().baseParamRate[paramId];
|
|
|
|
|
var flat = this.enemy().baseParamFlat[paramId];
|
|
|
|
|
var user = this;
|
|
|
|
|
var s = $gameSwitches._data;
|
|
|
|
|
var v = $gameVariables._data;
|
|
|
|
|
try {
|
|
|
|
|
this._cacheBaseParam[paramId] = eval(formula);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
this._cacheBaseParam[paramId] = 0;
|
|
|
|
|
Yanfly.Util.displayError(e, formula, 'ENEMY PARAM BASE FORMULA ERROR');
|
|
|
|
|
}
|
|
|
|
|
return this._cacheBaseParam[paramId];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_exp = Game_Enemy.prototype.exp;
|
|
|
|
|
Game_Enemy.prototype.exp = function() {
|
|
|
|
|
var paramId = 8;
|
|
|
|
|
this._cacheBaseParam = this._cacheBaseParam || {};
|
|
|
|
|
if (this._cacheBaseParam[paramId]) return this._cacheBaseParam[paramId];
|
|
|
|
|
var base = Yanfly.ELV.Game_Enemy_exp.call(this);
|
|
|
|
|
if (this.enemy().ignoreLevelBonuses) {
|
|
|
|
|
this._cacheBaseParam[paramId] = base;
|
|
|
|
|
return this._cacheBaseParam[paramId];
|
|
|
|
|
}
|
|
|
|
|
var level = this.level;
|
|
|
|
|
var formula = this.enemy().baseParamFormula[paramId];
|
|
|
|
|
var rate = this.enemy().baseParamRate[paramId];
|
|
|
|
|
var flat = this.enemy().baseParamFlat[paramId];
|
|
|
|
|
var user = this;
|
|
|
|
|
var b = base;
|
|
|
|
|
var l = level;
|
|
|
|
|
var f = flat;
|
|
|
|
|
var r = rate;
|
|
|
|
|
var s = $gameSwitches._data;
|
|
|
|
|
var v = $gameVariables._data;
|
|
|
|
|
try {
|
|
|
|
|
this._cacheBaseParam[paramId] = Math.floor(eval(formula));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
this._cacheBaseParam[paramId] = 0;
|
|
|
|
|
Yanfly.Util.displayError(e, formula, 'ENEMY EXP FORMULA ERROR');
|
|
|
|
|
}
|
|
|
|
|
return this._cacheBaseParam[paramId];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_gold = Game_Enemy.prototype.gold;
|
|
|
|
|
Game_Enemy.prototype.gold = function() {
|
|
|
|
|
var paramId = 9;
|
|
|
|
|
this._cacheBaseParam = this._cacheBaseParam || {};
|
|
|
|
|
if (this._cacheBaseParam[paramId]) return this._cacheBaseParam[paramId];
|
|
|
|
|
var base = Yanfly.ELV.Game_Enemy_gold.call(this);
|
|
|
|
|
if (this.enemy().ignoreLevelBonuses) {
|
|
|
|
|
this._cacheBaseParam[paramId] = base;
|
|
|
|
|
return this._cacheBaseParam[paramId];
|
|
|
|
|
}
|
|
|
|
|
var level = this.level;
|
|
|
|
|
var formula = this.enemy().baseParamFormula[paramId];
|
|
|
|
|
var rate = this.enemy().baseParamRate[paramId];
|
|
|
|
|
var flat = this.enemy().baseParamFlat[paramId];
|
|
|
|
|
var user = this;
|
|
|
|
|
var s = $gameSwitches._data;
|
|
|
|
|
var v = $gameVariables._data;
|
|
|
|
|
try {
|
|
|
|
|
this._cacheBaseParam[paramId] = Math.floor(eval(formula));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
this._cacheBaseParam[paramId] = 0;
|
|
|
|
|
Yanfly.Util.displayError(e, formula, 'ENEMY GOLD FORMULA ERROR');
|
|
|
|
|
}
|
|
|
|
|
return this._cacheBaseParam[paramId];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.changeLevel = function(level) {
|
|
|
|
|
if (level === this._level) return;
|
|
|
|
|
if (Yanfly.Param.ELVPreserveRate) {
|
|
|
|
|
var hpRate = this.hp / Math.max(1, this.mhp);
|
|
|
|
|
var mpRate = this.mp / Math.max(1, this.mmp);
|
|
|
|
|
var prevHp = Math.min(this.hp, 1);
|
|
|
|
|
}
|
|
|
|
|
this._level = level.clamp(1, Yanfly.Param.ELVMaxCap);
|
|
|
|
|
this._cacheBaseParam = {};
|
|
|
|
|
this.refresh();
|
|
|
|
|
if (Yanfly.Param.ELVPreserveRate) {
|
|
|
|
|
var max = this.isDead() ? 0 : prevHp;
|
|
|
|
|
var hpAmount = Math.max(max, parseInt(this.mhp * hpRate));
|
|
|
|
|
this.setHp(hpAmount);
|
|
|
|
|
this.setMp(parseInt(this.mmp * mpRate));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.gainLevel = function(value) {
|
|
|
|
|
this.changeLevel(this.level + value)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.loseLevel = function(value) {
|
|
|
|
|
this.changeLevel(this.level - value)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.isResistLevelChange = function() {
|
|
|
|
|
return this.enemy().resistLevelChange;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Enemy.prototype.resetLevel = function() {
|
|
|
|
|
this.changeLevel(this.originalLevel());
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Enemy_transform = Game_Enemy.prototype.transform;
|
|
|
|
|
Game_Enemy.prototype.transform = function(enemyId) {
|
|
|
|
|
Yanfly.ELV.Game_Enemy_transform.call(this, enemyId);
|
|
|
|
|
this._cacheBaseParam = {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Party
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Game_Party.prototype.lowestLevelAllMembers = function() {
|
|
|
|
|
var length = this.allMembers().length;
|
|
|
|
|
var value = Yanfly.Param.ELVMaxCap;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.allMembers()[i];
|
|
|
|
|
value = Math.min(value, member.level);
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Party.prototype.lowestLevelBattleMembers = function() {
|
|
|
|
|
var length = this.battleMembers().length;
|
|
|
|
|
var value = Yanfly.Param.ELVMaxCap;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.battleMembers()[i];
|
|
|
|
|
value = Math.min(value, member.level);
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Party.prototype.averageLevelAllMembers = function() {
|
|
|
|
|
var length = this.allMembers().length;
|
|
|
|
|
var value = 0;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.allMembers()[i];
|
|
|
|
|
value += member.level;
|
|
|
|
|
}
|
|
|
|
|
return Math.ceil(value / length);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Party.prototype.averageLevelBattleMembers = function() {
|
|
|
|
|
var length = this.battleMembers().length;
|
|
|
|
|
var value = 0;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.battleMembers()[i];
|
|
|
|
|
value += member.level;
|
|
|
|
|
}
|
|
|
|
|
return Math.ceil(value / length);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Party.prototype.highestLevelAllMembers = function() {
|
|
|
|
|
var length = this.allMembers().length;
|
|
|
|
|
var value = 0;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.allMembers()[i];
|
|
|
|
|
value = Math.max(value, member.level);
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Party.prototype.highestLevelBattleMembers = function() {
|
|
|
|
|
var length = this.battleMembers().length;
|
|
|
|
|
var value = 0;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.battleMembers()[i];
|
|
|
|
|
value = Math.max(value, member.level);
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Troop
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.changeLevel = function(value) {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
if (member) member.changeLevel(value);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.gainLevel = function(value) {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
if (member) member.gainLevel(value);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.loseLevel = function(value) {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
if (member) member.loseLevel(value);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.resetLevel = function() {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
if (member) member.resetLevel();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.lowestLevel = function() {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
var value = Yanfly.Param.ELVMaxCap;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
value = Math.min(value, member.level);
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.averageLevel = function() {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
var value = 0;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
value = member.level;
|
|
|
|
|
}
|
|
|
|
|
return Math.ceil(value / length);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Troop.prototype.highestLevel = function() {
|
|
|
|
|
var length = this.members().length;
|
|
|
|
|
var value = 0;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.members()[i];
|
|
|
|
|
value = Math.max(value, member.level);
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Action
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Action_applyItemUserEffect =
|
|
|
|
|
Game_Action.prototype.applyItemUserEffect;
|
|
|
|
|
Game_Action.prototype.applyItemUserEffect = function(target) {
|
|
|
|
|
Yanfly.ELV.Game_Action_applyItemUserEffect.call(this, target);
|
|
|
|
|
if (target && target.isEnemy()) this.applyItemEnemyLevelEffects(target);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.applyItemEnemyLevelEffects = function(target) {
|
|
|
|
|
if (!this.item()) return;
|
|
|
|
|
if (target.isResistLevelChange()) return;
|
|
|
|
|
if (this.item().resetEnemyLevel) target.resetLevel();
|
|
|
|
|
var level = target.level + this.item().changeEnemyLevel;
|
|
|
|
|
if (this.item().enemyLevelEval !== '') {
|
|
|
|
|
level = this.itemEnemyLevelEval(target, level);
|
|
|
|
|
}
|
|
|
|
|
target.changeLevel(level);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.itemEnemyLevelEval = function(target, level) {
|
|
|
|
|
var item = this.item();
|
|
|
|
|
var a = this.subject();
|
|
|
|
|
var b = target;
|
|
|
|
|
var user = this.subject();
|
|
|
|
|
var subject = this.subject();
|
|
|
|
|
var s = $gameSwitches._data;
|
|
|
|
|
var v = $gameVariables._data;
|
|
|
|
|
var code = this.item().enemyLevelEval;
|
|
|
|
|
try {
|
|
|
|
|
eval(code);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
Yanfly.Util.displayError(e, code, 'ENEMY LEVEL ITEM ALTER CODE ERROR');
|
|
|
|
|
}
|
|
|
|
|
return level;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Interpreter
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.ELV.Game_Interpreter_pluginCommand =
|
|
|
|
|
Game_Interpreter.prototype.pluginCommand;
|
|
|
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
|
|
|
|
Yanfly.ELV.Game_Interpreter_pluginCommand.call(this, command, args);
|
|
|
|
|
if (!$gameParty.inBattle()) return;
|
|
|
|
|
if (command === 'EnemyLevelReset') this.resetEnemyLevel(args);
|
|
|
|
|
if (command === 'EnemyLevelResetAll') $gameTroop.resetLevel();
|
|
|
|
|
if (command === 'EnemyLevelChange') this.changeEnemyLevel(args);
|
|
|
|
|
if (command === 'EnemyLevelChangeAll') this.changeEnemyLevelAll(args);
|
|
|
|
|
if (command === 'EnemyGainLevel') this.gainEnemyLevel(args);
|
|
|
|
|
if (command === 'EnemyGainLevelAll') this.gainEnemyLevelAll(args);
|
|
|
|
|
if (command === 'EnemyLoseLevel') this.loseEnemyLevel(args);
|
|
|
|
|
if (command === 'EnemyLoseLevelAll') this.loseEnemyLevelAll(args);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.resetEnemyLevel = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var index = parseInt(args[0]) - 1;
|
|
|
|
|
var enemy = $gameTroop.members()[index];
|
|
|
|
|
if (enemy) enemy.resetLevel();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.changeEnemyLevel = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var index = parseInt(args[0]) - 1;
|
|
|
|
|
var level = parseInt(args[2]);
|
|
|
|
|
var enemy = $gameTroop.members()[index];
|
|
|
|
|
if (enemy) enemy.changeLevel(level);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.changeEnemyLevelAll = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var level = parseInt(args[0]);
|
|
|
|
|
$gameTroop.changeLevel(level);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.gainEnemyLevel = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var index = parseInt(args[0]) - 1;
|
|
|
|
|
var level = parseInt(args[2]);
|
|
|
|
|
var enemy = $gameTroop.members()[index];
|
|
|
|
|
if (enemy) enemy.gainLevel(level);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.gainEnemyLevelAll = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var level = parseInt(args[0]);
|
|
|
|
|
$gameTroop.gainLevel(level)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.loseEnemyLevel = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var index = parseInt(args[0]) - 1;
|
|
|
|
|
var level = parseInt(args[2]);
|
|
|
|
|
var enemy = $gameTroop.members()[index];
|
|
|
|
|
if (enemy) enemy.loseLevel(level);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Interpreter.prototype.loseEnemyLevelAll = function(args) {
|
|
|
|
|
if (!args) return;
|
|
|
|
|
var level = parseInt(args[0]);
|
|
|
|
|
$gameTroop.loseLevel(level)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Utilities
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Util = Yanfly.Util || {};
|
|
|
|
|
|
|
|
|
|
if (!Yanfly.Util.toGroup) {
|
|
|
|
|
Yanfly.Util.toGroup = function(inVal) {
|
|
|
|
|
return inVal;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Util.displayError = function(e, code, message) {
|
|
|
|
|
console.log(message);
|
|
|
|
|
console.log(code || 'NON-EXISTENT');
|
|
|
|
|
console.error(e);
|
|
|
|
|
if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.6.0") return;
|
|
|
|
|
if (Utils.isNwjs() && Utils.isOptionValid('test')) {
|
|
|
|
|
if (!require('nw.gui').Window.get().isDevToolsOpen()) {
|
|
|
|
|
require('nw.gui').Window.get().showDevTools();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// End of File
|
|
|
|
|
//=============================================================================
|