1147 lines
42 KiB
JavaScript
1147 lines
42 KiB
JavaScript
//=============================================================================
|
||
// Yanfly Engine Plugins - Skill Core
|
||
// YEP_SkillCore.js
|
||
//=============================================================================
|
||
|
||
var Imported = Imported || {};
|
||
Imported.YEP_SkillCore = true;
|
||
|
||
var Yanfly = Yanfly || {};
|
||
Yanfly.Skill = Yanfly.Skill || {};
|
||
|
||
//=============================================================================
|
||
/*:
|
||
* @plugindesc v1.00 Skills are now given more functions and the ability to
|
||
* require different types of costs.
|
||
* @author Yanfly Engine Plugins
|
||
*
|
||
* @param ---General---
|
||
* @default
|
||
*
|
||
* @param Cost Padding
|
||
* @desc If a skill has multiple costs, this is the amount of pixels
|
||
* used as padding in between the costs.
|
||
* @default 4
|
||
*
|
||
* @param Command Alignment
|
||
* @desc Adjusts the text alignment of the skill type window.
|
||
* left center right
|
||
* @default center
|
||
*
|
||
* @param ---HP Costs---
|
||
* @default
|
||
*
|
||
* @param HP Format
|
||
* @desc Adjusts the way HP cost appears in the skill list window.
|
||
* %1 - Cost %2 - MP
|
||
* @default %1%2
|
||
*
|
||
* @param HP Font Size
|
||
* @desc Adjusts the font size used to display HP.
|
||
* Default: 28
|
||
* @default 20
|
||
*
|
||
* @param HP Text Color
|
||
* @desc Adjusts the text color used from the Window skin for HP.
|
||
* Default: 21
|
||
* @default 18
|
||
*
|
||
* @param HP Icon
|
||
* @desc Choose what icon to use to represent HP costs.
|
||
* Use 0 if you wish to not use an icon.
|
||
* @default 162
|
||
*
|
||
* @param ---MP Costs---
|
||
* @default
|
||
*
|
||
* @param MP Format
|
||
* @desc Adjusts the way MP cost appears in the skill list window.
|
||
* %1 - Cost %2 - MP
|
||
* @default %1%2
|
||
*
|
||
* @param MP Font Size
|
||
* @desc Adjusts the font size used to display MP.
|
||
* Default: 28
|
||
* @default 20
|
||
*
|
||
* @param MP Text Color
|
||
* @desc Adjusts the text color used from the Window skin for MP.
|
||
* Default: 23
|
||
* @default 23
|
||
*
|
||
* @param MP Icon
|
||
* @desc Choose what icon to use to represent MP costs.
|
||
* Use 0 if you wish to not use an icon.
|
||
* @default 165
|
||
*
|
||
* @param ---TP Costs---
|
||
* @default
|
||
*
|
||
* @param TP Format
|
||
* @desc Adjusts the way TP cost appears in the skill list window.
|
||
* %1 - Cost %2 - TP
|
||
* @default %1%2
|
||
*
|
||
* @param TP Font Size
|
||
* @desc Adjusts the font size used to display TP.
|
||
* Default: 28
|
||
* @default 20
|
||
*
|
||
* @param TP Text Color
|
||
* @desc Adjusts the text color used from the Window skin for TP.
|
||
* Default: 29
|
||
* @default 29
|
||
*
|
||
* @param TP Icon
|
||
* @desc Choose what icon to use to represent TP costs.
|
||
* Use 0 if you wish to not use an icon.
|
||
* @default 164
|
||
*
|
||
* @help
|
||
* ============================================================================
|
||
* Introduction
|
||
* ============================================================================
|
||
*
|
||
* Skills in RPG's consist of three main components: Costs, Damage, and
|
||
* Effects. Although not all components are required for a skill, they
|
||
* certainly make up a good chunk of it. Damage will be handled by another
|
||
* plugin, but this plugin will provide a core handling for skill costs and
|
||
* skill effects.
|
||
*
|
||
* This plugin also includes the ability for battlers to swap their HP, MP,
|
||
* and/or TP gauges for something different if it would fit the character
|
||
* better (for example, some classes don't use MP and/or TP).
|
||
*
|
||
* ============================================================================
|
||
* Notetags
|
||
* ============================================================================
|
||
*
|
||
* These notetags can adjust either skill costs or special skill effects.
|
||
*
|
||
* Skill Notetags:
|
||
* <HP Cost: x>
|
||
* Changes the skill to have x as its HP cost. RPG Maker MV's editor lacks
|
||
* HP cost functions so this would allow skills to use HP as their cost.
|
||
*
|
||
* <HP Cost: x%>
|
||
* Changes the skill to cost a percentage of the character's MaxHP value.
|
||
*
|
||
* <MP Cost: x>
|
||
* Changes the skill to have x as its MP cost.
|
||
* This helps bypass the database's hard limit of 9999.
|
||
*
|
||
* <MP Cost: x%>
|
||
* Changes the skill to cost a percentage of the character's MaxMP value.
|
||
*
|
||
* <TP Cost: x>
|
||
* Changes the skill to have x as its TP cost.
|
||
* This helps bypass the database's hard limit of 99.
|
||
*
|
||
* <TP Cost: x%>
|
||
* Changes the skill to cost a percentage of the character's MaxTP value.
|
||
* Although the default MaxTP is 100, this tag will be useful for any
|
||
* plugins that will alter a character's MaxTP values.
|
||
*
|
||
* ============================================================================
|
||
* Gauge Swapping
|
||
* ============================================================================
|
||
*
|
||
* This plugin also lets you swap around the HP, MP, and TP Gauges to any order
|
||
* you want assuming that all the plugins you use will keep the same order of
|
||
* HP, MP, and TP and does not override the default gauge drawing process. If
|
||
* you use any plugin extensions, they can be swaped in as well.
|
||
*
|
||
* Note: If you do not have 'Display TP in Battle' checked under the System tab
|
||
* in the database, nothing will be shown for the third slot.
|
||
*
|
||
* Class Notetag:
|
||
* <Swap Gauge x: y>
|
||
* This will change gauge x (1, 2, or 3) to y. Replace y with 'HP', 'MP', or
|
||
* 'TP' to have it display that gauge type in that gauge slot. If you wish
|
||
* for that slot to display nothing, insert 'Nothing' or 'Null' in place of
|
||
* y in the notetag.
|
||
*
|
||
* Weapon, Armor, and State Notetags:
|
||
* <Swap Gauge x: y>
|
||
* Actors with equipment or states that contain these notetags or enemies
|
||
* with states that contain these notetags will display those swapped gauges
|
||
* in place of the default settings or settings defined by the Class or
|
||
* Enemy notetags.
|
||
*
|
||
* Priority will go in the following order:
|
||
* Weapons, Armors, States, Class, Enemy
|
||
*
|
||
* ============================================================================
|
||
* Lunatic Mode - Skill Costs
|
||
* ============================================================================
|
||
*
|
||
* For users who want more control over skill costs and skill effects, there
|
||
* exists notetags that allow you to apply code to the costs and/or effects of
|
||
* a skill. For effects, this will also extend towards item control, as well.
|
||
*
|
||
* <Custom HP Cost> Example: <Custom HP Cost>
|
||
* code cost += $gameVariables.value(1);
|
||
* code </Custom HP Cost>
|
||
* </Custom HP Cost>
|
||
* This allows the skill to have a custom HP cost based off of code. For the
|
||
* piece of code, 'cost' is a variable already predefined with the HP Cost
|
||
* and the HP percentage cost.
|
||
*
|
||
* <Custom MP Cost> Example: <Custom MP Cost>
|
||
* code cost += $gameVariables.value(1);
|
||
* code </Custom MP Cost>
|
||
* </Custom MP Cost>
|
||
* This allows the skill to have a custom MP cost based off of code. For the
|
||
* piece of code, 'cost' is a variable already predefined with the MP Cost
|
||
* and the MP percentage cost.
|
||
*
|
||
* <Custom TP Cost> Example: <Custom TP Cost>
|
||
* code cost += $gameVariables.value(1);
|
||
* code </Custom TP Cost>
|
||
* </Custom TP Cost>
|
||
* This allows the skill to have a custom TP cost based off of code. For the
|
||
* piece of code, 'cost' is a variable already predefined with the TP Cost
|
||
* and the TP percentage cost.
|
||
*
|
||
* ============================================================================
|
||
* Lunatic Mode - The Skill Phases
|
||
* ============================================================================
|
||
*
|
||
* For this skill, multiple effects are applied and at different phases. The
|
||
* various phases are as follows:
|
||
*
|
||
* Before Effect Phase (influenced by this plugin)
|
||
* if skill successfully lands:
|
||
* - Pre-Damage Effect Phase (influenced by this plugin)
|
||
* - Damage Phase
|
||
* - Post-Damage Effect Phase (influenced by this plugin)
|
||
* - Item Trait Effects Phase
|
||
* After Effect Phase (influenced by this plugin)
|
||
*
|
||
* There's four phases which can be influenced by this plugin. Two of which do
|
||
* not matter if the effect successfully lands or not, two of which do matter
|
||
* if the skill does land.
|
||
*
|
||
* Skill and Item Notetags:
|
||
* <Before Eval> <Pre-Damage Eval> <Post-Damage Eval> <After Eval>
|
||
* code code code code
|
||
* code code code code
|
||
* </Before Eval> </Pre-Damage Eval> </Post-Damage Eval> </After Eval>
|
||
* If you wish to use custom effects for your skill, you can insert the
|
||
* respective notetags into the skill (or item) noteboxes and it will run the
|
||
* code that appears in between the tags. However, using any form of comments
|
||
* in this tag will block out code that follows.
|
||
*/
|
||
/*:ja
|
||
* @plugindesc スキルシステムにより多くの機能を実装し、
|
||
* コストの設定などができるようになります。
|
||
* @author Yanfly Engine Plugins
|
||
*
|
||
* @param ---一般---
|
||
* @default
|
||
*
|
||
* @param Cost Padding
|
||
* @desc 1つのスキルが複数のコスト表示を持っている場合、
|
||
* コスト間のパディングに用いられるピクセル数を指定します。
|
||
* @default 4
|
||
*
|
||
* @param Command Alignment
|
||
* @desc スキルタイプウィンドウでの、テキストの揃え方を指定します。
|
||
* left(左) center(中央) right(右)
|
||
* @default center
|
||
*
|
||
* @param ---HP消費---
|
||
* @default
|
||
*
|
||
* @param HP Format
|
||
* @desc スキルリストウィンドウでHPコストがどのように表示されるか調整します。
|
||
* %1 - コスト %2 - HP
|
||
* @default %1%2
|
||
*
|
||
* @param HP Font Size
|
||
* @desc HPを表示する際のフォントサイズを指定します。
|
||
* Default: 28
|
||
* @default 20
|
||
*
|
||
* @param HP Text Color
|
||
* @desc HPのウィンドウスキンに使われるテキストカラーを指定します。
|
||
* Default: 21
|
||
* @default 18
|
||
*
|
||
* @param HP Icon
|
||
* @desc HPコストを表すアイコンを指定します。
|
||
* アイコン不要な場合は0を入力してください。
|
||
* @default 162
|
||
*
|
||
* @param ---MP消費---
|
||
* @default
|
||
*
|
||
* @param MP Format
|
||
* @desc スキルリストウィンドウでMPコストがどのように表示されるか調整します。
|
||
* %1 - コスト %2 - MP
|
||
* @default %1%2
|
||
*
|
||
* @param MP Font Size
|
||
* @desc MPを表示する際のフォントサイズを指定します。
|
||
* Default: 28
|
||
* @default 20
|
||
*
|
||
* @param MP Text Color
|
||
* @desc MPのウィンドウスキンに使われるテキストカラーを指定します。
|
||
* Default: 23
|
||
* @default 23
|
||
*
|
||
* @param MP Icon
|
||
* @desc HPコストを表すアイコンを指定します。
|
||
* アイコン不要な場合は0を入力してください。
|
||
* @default 165
|
||
*
|
||
* @param ---TP Costs---
|
||
* @default
|
||
*
|
||
* @param TP Format
|
||
* @desc スキルリストウィンドウでTPコストがどのように表示されるか調整します。
|
||
* %1 - コスト %2 - TP
|
||
* @default %1%2
|
||
*
|
||
* @param TP Font Size
|
||
* @desc TPを表示する際のフォントサイズを指定します。
|
||
* Default: 28
|
||
* @default 20
|
||
*
|
||
* @param TP Text Color
|
||
* @desc TPのウィンドウスキンに使われるテキストカラーを指定します。
|
||
* Default: 29
|
||
* @default 29
|
||
*
|
||
* @param TP Icon
|
||
* @desc TPコストを表すアイコンを指定します。
|
||
* アイコン不要な場合は0を入力してください。
|
||
* @default 164
|
||
*
|
||
* @help
|
||
* ============================================================================
|
||
* Introduction
|
||
* ============================================================================
|
||
*
|
||
* RPGにおいてスキルは、コスト・ダメージ・エフェクトの3つで構成されています。
|
||
* 全てが必須というわけではありませんが、
|
||
* これらの要素はスキルを構成する上で、大きな役割を占めています。
|
||
* このプラグインでは上記3つのうち、コストとエフェクトのハンドリングを行います。
|
||
*
|
||
* またこのプラグインでは、HPやMP, TPゲージの表示を入れ替えて、
|
||
* バトラーそれぞれの特徴により適した表示を行うことができます。
|
||
* (MPやTPゲージを元々持たないクラスが居るため)
|
||
*
|
||
* ============================================================================
|
||
* Notetags
|
||
* ============================================================================
|
||
*
|
||
* 下記のNotetagはスキルコスト・特殊スキルエフェクトどちらにも適用できます。
|
||
*
|
||
* Skill Notetags:
|
||
* <HP Cost: x>
|
||
* スキル使用時に x だけHPを消費させます。
|
||
*
|
||
* <HP Cost: x%>
|
||
* スキル使用時に、キャラクターの最大HPに対して x % を消費させます。
|
||
*
|
||
* <MP Cost: x>
|
||
* スキル使用時に x だけMPを消費させます。
|
||
* この際、データベースの制限値である9999を無視することができます。
|
||
*
|
||
* <MP Cost: x%>
|
||
* スキル使用時に、キャラクターの最大MPに対して x % を消費させます。
|
||
*
|
||
* <TP Cost: x>
|
||
* スキル使用時に x だけTPを消費させます。
|
||
* この際、データベースの制限値である99を無視することができます。
|
||
*
|
||
* <TP Cost: x%>
|
||
* スキル使用時に、キャラクターの最大TPに対して x % を消費させます。
|
||
* デフォルトの最大TPは100ですが、この最大値を変更させる
|
||
* プラグインに対してもこのタグは有効です。
|
||
*
|
||
* ============================================================================
|
||
* Gauge Swapping
|
||
* ============================================================================
|
||
*
|
||
* 全てのプラグインがHP/MP/TPを同様の法則で持っており、かつ
|
||
* デフォルトのゲージ描画処理を上書きしないという前提のもとであれば、
|
||
* HP/MP/TPゲージを好きな順番に入れ替えることができます。
|
||
* 拡張プラグインを使っている場合でも、同様に入れ替えを行うことができます。
|
||
*
|
||
* 注*データベースのシステムタブで「バトル画面で TP を表示」を
|
||
* 有効にしていない場合、3つ目のスロットには何も表示されません。
|
||
*
|
||
* クラスのNotetag:
|
||
* <Swap Gauge x: y>
|
||
* ゲージ x (1,2,3)を y に変更します。 y の部分を'HP' 'MP' 'TP'
|
||
* に変更することで、ゲージスロットにゲージの種類を表示できます。
|
||
* スロットに何も表示させたくない場合は、y の部分に
|
||
* 'Nothing' か 'Null' と入力してください。
|
||
*
|
||
* 武器、防具、ステートのNotetags:
|
||
* <Swap Gauge x: y>
|
||
* これらのNotetagを含む装備やステートを持っているアクターや敵については、
|
||
* デフォルトセッティングや、クラス/敵のNotetagで設定されたゲージの代わりに、
|
||
* カスタムされたゲージを表示できます。
|
||
*
|
||
* 下記の順序で優先順位付けが行われます:
|
||
* 武器>防具>ステート>クラス>敵
|
||
*
|
||
* ============================================================================
|
||
* Lunatic Mode - Skill Costs
|
||
* ============================================================================
|
||
*
|
||
* スキルコストとエフェクトについて、より高度な操作を行いたいユーザー向けに、
|
||
* それらに適用できるNotetagを以下に記します。
|
||
* エフェクトについては、アイテムコントロール向けに拡張することもできます。
|
||
*
|
||
* <Custom HP Cost> 例: <Custom HP Cost>
|
||
* code cost += $gameVariables.value(1);
|
||
* code </Custom HP Cost>
|
||
* </Custom HP Cost>
|
||
* スキルに、コードに基づいたカスタムHPコストを持たせることができます。
|
||
* 'cost'はHPコストとHPコスト%によって定義済みの変数です。
|
||
*
|
||
* <Custom MP Cost> 例: <Custom MP Cost>
|
||
* code cost += $gameVariables.value(1);
|
||
* code </Custom MP Cost>
|
||
* </Custom MP Cost>
|
||
* スキルに、コードに基づいたカスタムMPコストを持たせることができます。
|
||
* 'cost'はMPコストとMPコスト%によって定義済みの変数です。
|
||
*
|
||
* <Custom TP Cost> 例: <Custom TP Cost>
|
||
* code cost += $gameVariables.value(1);
|
||
* code </Custom TP Cost>
|
||
* </Custom TP Cost>
|
||
* スキルに、コードに基づいたカスタムTPコストを持たせることができます。
|
||
* 'cost'はTPコストとTPコスト%によって定義済みの変数です。
|
||
*
|
||
* ============================================================================
|
||
* Lunatic Mode - The Skill Phases
|
||
* ============================================================================
|
||
*
|
||
* スキルに対して、複数のエフェクトがいくつかの段階で適用されます。
|
||
* 各段階について以下に記します。
|
||
*
|
||
* Before Effect Phase (このプラグインにより作用)
|
||
* スキルがヒットした場合:
|
||
* - Pre-Damage Effect Phase (このプラグインにより作用)
|
||
* - Damage Phase
|
||
* - Post-Damage Effect Phase (このプラグインにより作用)
|
||
* - Item Trait Effects Phase
|
||
* After Effect Phase (このプラグインにより作用)
|
||
*
|
||
* 上記のうち4段階がこのプラグインの影響を受けます。
|
||
* そのうち2つは、スキルがヒットするか否かには左右されません。
|
||
*
|
||
* スキルとアイテムのNotetags:
|
||
* <Before Eval> <Pre-Damage Eval> <Post-Damage Eval> <After Eval>
|
||
* code code code code
|
||
* code code code code
|
||
* </Before Eval> </Pre-Damage Eval> </Post-Damage Eval> </After Eval>
|
||
* スキルに対してカスタムエフェクトを利用したい場合は、それぞれのNotetagを
|
||
* スキル(もしくはアイテム)のNoteboxに挿入し、タグ間のコードを実行できます。
|
||
* このタグ内に、どのような形式であれコメントを挿入してしまうと、
|
||
* 後に続くコードは遮断されてしまいます。
|
||
*/
|
||
|
||
//=============================================================================
|
||
|
||
//=============================================================================
|
||
// Parameter Variables
|
||
//=============================================================================
|
||
|
||
Yanfly.Parameters = PluginManager.parameters('YEP_SkillCore');
|
||
Yanfly.Param = Yanfly.Param || {};
|
||
Yanfly.Icon = Yanfly.Icon || {};
|
||
|
||
Yanfly.Param.SCCCostPadding = Number(Yanfly.Parameters['Cost Padding']);
|
||
Yanfly.Param.SCCTextAlign = String(Yanfly.Parameters['Command Alignment']);
|
||
Yanfly.Param.SCCTpFormat = String(Yanfly.Parameters['TP Format']);
|
||
Yanfly.Param.SCCTpFontSize = Number(Yanfly.Parameters['TP Font Size']);
|
||
Yanfly.Param.SCCTpTextColor = Number(Yanfly.Parameters['TP Text Color']);
|
||
Yanfly.Icon.Tp = Number(Yanfly.Parameters['TP Icon']);
|
||
Yanfly.Param.SCCMpFormat = String(Yanfly.Parameters['MP Format']);
|
||
Yanfly.Param.SCCMpFontSize = Number(Yanfly.Parameters['MP Font Size']);
|
||
Yanfly.Param.SCCMpTextColor = Number(Yanfly.Parameters['MP Text Color']);
|
||
Yanfly.Icon.Mp = Number(Yanfly.Parameters['MP Icon']);
|
||
Yanfly.Param.SCCHpFormat = String(Yanfly.Parameters['HP Format']);
|
||
Yanfly.Param.SCCHpFontSize = Number(Yanfly.Parameters['HP Font Size']);
|
||
Yanfly.Param.SCCHpTextColor = Number(Yanfly.Parameters['HP Text Color']);
|
||
Yanfly.Icon.Hp = Number(Yanfly.Parameters['HP Icon']);
|
||
|
||
//=============================================================================
|
||
// DataManager
|
||
//=============================================================================
|
||
|
||
Yanfly.Skill.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
|
||
DataManager.isDatabaseLoaded = function() {
|
||
if (!Yanfly.Skill.DataManager_isDatabaseLoaded.call(this)) return false;
|
||
this.processSkillNotetags($dataSkills);
|
||
this.processObjectNotetags($dataSkills);
|
||
this.processObjectNotetags($dataItems);
|
||
this.processGSCNotetags1($dataClasses);
|
||
this.processGSCNotetags1($dataEnemies);
|
||
this.processGSCNotetags2($dataWeapons);
|
||
this.processGSCNotetags2($dataArmors);
|
||
this.processGSCNotetags2($dataStates);
|
||
return true;
|
||
};
|
||
|
||
DataManager.processSkillNotetags = function(group) {
|
||
var note1 = /<(?:MP COST):[ ](\d+)>/i;
|
||
var note2 = /<(?:MP COST):[ ](\d+)([%%])>/i;
|
||
var note3 = /<(?:TP COST):[ ](\d+)>/i;
|
||
var note4 = /<(?:TP COST):[ ](\d+)([%%])>/i;
|
||
var note5 = /<(?:HP COST):[ ](\d+)>/i;
|
||
var note6 = /<(?:HP COST):[ ](\d+)([%%])>/i;
|
||
var noteMpEval1 = /<(?:MP COST EVAL|custom mp cost)>/i;
|
||
var noteMpEval2 = /<\/(?:MP COST EVAL|custom mp cost)>/i;
|
||
var noteTpEval1 = /<(?:TP COST EVAL|custom tp cost)>/i;
|
||
var noteTpEval2 = /<\/(?:TP COST EVAL|custom tp cost)>/i;
|
||
var noteHpEval1 = /<(?:HP COST EVAL|custom hp cost)>/i;
|
||
var noteHpEval2 = /<\/(?:HP COST EVAL|custom hp cost)>/i;
|
||
for (var n = 1; n < group.length; n++) {
|
||
var obj = group[n];
|
||
var notedata = obj.note.split(/[\r\n]+/);
|
||
|
||
obj.hpCost = 0;
|
||
obj.hpCostPer = 0.0;
|
||
obj.mpCostPer = 0.0;
|
||
obj.tpCostPer = 0.0;
|
||
var evalMode = 'none';
|
||
obj.hpCostEval = '';
|
||
obj.mpCostEval = '';
|
||
obj.tpCostEval = '';
|
||
|
||
for (var i = 0; i < notedata.length; i++) {
|
||
var line = notedata[i];
|
||
if (line.match(note1)) {
|
||
obj.mpCost = parseInt(RegExp.$1);
|
||
} else if (line.match(note2)) {
|
||
obj.mpCostPer = parseFloat(RegExp.$1 * 0.01);
|
||
} else if (line.match(note3)) {
|
||
obj.tpCost = parseInt(RegExp.$1);
|
||
} else if (line.match(note4)) {
|
||
obj.tpCostPer = parseFloat(RegExp.$1 * 0.01);
|
||
} else if (line.match(note5)) {
|
||
obj.hpCost = parseInt(RegExp.$1);
|
||
} else if (line.match(note6)) {
|
||
obj.hpCostPer = parseFloat(RegExp.$1 * 0.01);
|
||
} else if (line.match(noteMpEval1)) {
|
||
evalMode = 'mp';
|
||
} else if (line.match(noteMpEval2)) {
|
||
evalMode = 'none';
|
||
} else if (line.match(noteTpEval1)) {
|
||
evalMode = 'tp';
|
||
} else if (line.match(noteTpEval2)) {
|
||
evalMode = 'none';
|
||
} else if (line.match(noteHpEval1)) {
|
||
evalMode = 'hp';
|
||
} else if (line.match(noteHpEval2)) {
|
||
evalMode = 'none';
|
||
} else if (evalMode === 'mp') {
|
||
obj.mpCostEval = obj.mpCostEval + line + '\n';
|
||
} else if (evalMode === 'tp') {
|
||
obj.tpCostEval = obj.tpCostEval + line + '\n';
|
||
} else if (evalMode === 'hp') {
|
||
obj.hpCostEval = obj.hpCostEval + line + '\n';
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
DataManager.processObjectNotetags = function(group) {
|
||
var note1 = /<(?:BEFORE EVAL)>/i;
|
||
var note2 = /<\/(?:BEFORE EVAL)>/i;
|
||
var note3 = /<(?:PRE-DAMAGE EVAL)>/i;
|
||
var note4 = /<\/(?:PRE-DAMAGE EVAL)>/i;
|
||
var note5 = /<(?:POST-DAMAGE EVAL)>/i;
|
||
var note6 = /<\/(?:POST-DAMAGE EVAL)>/i;
|
||
var note7 = /<(?:AFTER EVAL)>/i;
|
||
var note8 = /<\/(?:AFTER EVAL)>/i;
|
||
for (var n = 1; n < group.length; n++) {
|
||
var obj = group[n];
|
||
var notedata = obj.note.split(/[\r\n]+/);
|
||
|
||
var customMode = 'none';
|
||
obj.customBeforeEval = '';
|
||
obj.customPreDamageEval = '';
|
||
obj.customPostDamageEval = '';
|
||
obj.customAfterEval = '';
|
||
|
||
for (var i = 0; i < notedata.length; i++) {
|
||
var line = notedata[i];
|
||
if (line.match(note1)) {
|
||
customMode = 'before';
|
||
} else if (line.match(note2)) {
|
||
customMode = 'none';
|
||
} else if (line.match(note3)) {
|
||
customMode = 'pre-damage';
|
||
} else if (line.match(note4)) {
|
||
customMode = 'none';
|
||
} else if (line.match(note5)) {
|
||
customMode = 'post-damage';
|
||
} else if (line.match(note6)) {
|
||
customMode = 'none';
|
||
} else if (line.match(note7)) {
|
||
customMode = 'after';
|
||
} else if (line.match(note8)) {
|
||
customMode = 'none';
|
||
} else if (customMode === 'before') {
|
||
obj.customBeforeEval = obj.customBeforeEval + line + '\n';
|
||
} else if (customMode === 'pre-damage') {
|
||
obj.customBeforeEval = obj.customPreDamageEval + line + '\n';
|
||
} else if (customMode === 'post-damage') {
|
||
obj.customBeforeEval = obj.customPostDamageEval + line + '\n';
|
||
} else if (customMode === 'after') {
|
||
obj.customBeforeEval = obj.customAfterEval + line + '\n';
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
DataManager.processGSCNotetags1 = function(group) {
|
||
for (var n = 1; n < group.length; n++) {
|
||
var obj = group[n];
|
||
var notedata = obj.note.split(/[\r\n]+/);
|
||
|
||
obj.gauge1 = 'HP';
|
||
obj.gauge2 = 'MP';
|
||
obj.gauge3 = 'TP';
|
||
|
||
obj.gaugeIcon1 = 0;
|
||
obj.gaugeIcon2 = 0;
|
||
obj.gaugeIcon3 = 0;
|
||
|
||
for (var i = 0; i < notedata.length; i++) {
|
||
var line = notedata[i];
|
||
if (line.match(/<(?:SWAP GAUGE|gauge)[ ](\d+):[ ](.*)>/i)) {
|
||
var gauge = parseInt(RegExp.$1);
|
||
var text = String(RegExp.$2).toUpperCase();
|
||
if (['HP', 'MP', 'TP', 'NOTHING', 'NULL'].contains(text)) {
|
||
if (gauge === 1) obj.gauge1 = text;
|
||
if (gauge === 2) obj.gauge2 = text;
|
||
if (gauge === 3) obj.gauge3 = text;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
DataManager.processGSCNotetags2 = function(group) {
|
||
for (var n = 1; n < group.length; n++) {
|
||
var obj = group[n];
|
||
var notedata = obj.note.split(/[\r\n]+/);
|
||
|
||
obj.gauge1 = 'UNDEFINED';
|
||
obj.gauge2 = 'UNDEFINED';
|
||
obj.gauge3 = 'UNDEFINED';
|
||
|
||
obj.gaugeIcon1 = 'UNDEFINED';
|
||
obj.gaugeIcon2 = 'UNDEFINED';
|
||
obj.gaugeIcon3 = 'UNDEFINED';
|
||
|
||
for (var i = 0; i < notedata.length; i++) {
|
||
var line = notedata[i];
|
||
if (line.match(/<(?:SWAP GAUGE|gauge)[ ](\d+):[ ](.*)>/i)) {
|
||
var gauge = parseInt(RegExp.$1);
|
||
var text = String(RegExp.$2).toUpperCase();
|
||
if (['HP', 'MP', 'TP', 'NOTHING', 'NULL'].contains(text)) {
|
||
if (gauge === 1) obj.gauge1 = text;
|
||
if (gauge === 2) obj.gauge2 = text;
|
||
if (gauge === 3) obj.gauge3 = text;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
//=============================================================================
|
||
// Game_BattlerBase
|
||
//=============================================================================
|
||
|
||
Game_BattlerBase.prototype.skillHpCost = function(skill) {
|
||
var cost = skill.hpCost;
|
||
var item = skill;
|
||
var a = this;
|
||
var user = this;
|
||
var subject = this;
|
||
var s = $gameSwitches._data;
|
||
var v = $gameVariables._data;
|
||
cost += this.mhp * skill.hpCostPer;
|
||
eval(skill.hpCostEval);
|
||
return Math.max(0, Math.floor(cost));
|
||
};
|
||
|
||
Game_BattlerBase.prototype.skillMpCost = function(skill) {
|
||
var cost = skill.mpCost;
|
||
var item = skill;
|
||
var a = this;
|
||
var user = this;
|
||
var subject = this;
|
||
var s = $gameSwitches._data;
|
||
var v = $gameVariables._data;
|
||
cost += this.mmp * skill.mpCostPer;
|
||
eval(skill.mpCostEval);
|
||
return Math.max(0, Math.floor(cost * this.mcr));
|
||
};
|
||
|
||
Game_BattlerBase.prototype.skillTpCost = function(skill) {
|
||
var cost = skill.tpCost;
|
||
var item = skill;
|
||
var a = this;
|
||
var user = this;
|
||
var subject = this;
|
||
var s = $gameSwitches._data;
|
||
var v = $gameVariables._data;
|
||
cost += this.maxTp() * skill.tpCostPer;
|
||
eval(skill.tpCostEval);
|
||
return Math.max(0, Math.floor(cost));
|
||
};
|
||
|
||
Yanfly.Skill.Game_BattlerBase_canPaySkillCost =
|
||
Game_BattlerBase.prototype.canPaySkillCost;
|
||
Game_BattlerBase.prototype.canPaySkillCost = function(skill) {
|
||
if (!this.canPaySkillHpCost(skill)) return false;
|
||
return Yanfly.Skill.Game_BattlerBase_canPaySkillCost.call(this, skill);
|
||
};
|
||
|
||
Game_BattlerBase.prototype.canPaySkillHpCost = function(skill) {
|
||
return this._hp > this.skillHpCost(skill);
|
||
};
|
||
|
||
Yanfly.Skill.Game_BattlerBase_paySkillCost =
|
||
Game_BattlerBase.prototype.paySkillCost
|
||
Game_BattlerBase.prototype.paySkillCost = function(skill) {
|
||
Yanfly.Skill.Game_BattlerBase_paySkillCost.call(this, skill);
|
||
this.paySkillHpCost(skill);
|
||
};
|
||
|
||
Game_BattlerBase.prototype.paySkillHpCost = function(skill) {
|
||
this._hp -= this.skillHpCost(skill);
|
||
};
|
||
|
||
Game_BattlerBase.prototype.gauge1 = function() {
|
||
return 'HP';
|
||
};
|
||
|
||
Game_BattlerBase.prototype.gauge2 = function() {
|
||
return 'MP';
|
||
};
|
||
|
||
Game_BattlerBase.prototype.gauge3 = function() {
|
||
return 'TP';
|
||
};
|
||
|
||
Game_BattlerBase.prototype.gaugeIcon1 = function() {
|
||
return 0;
|
||
};
|
||
|
||
Game_BattlerBase.prototype.gaugeIcon2 = function() {
|
||
return 0;
|
||
};
|
||
|
||
Game_BattlerBase.prototype.gaugeIcon3 = function() {
|
||
return 0;
|
||
};
|
||
|
||
//=============================================================================
|
||
// Game_Actor
|
||
//=============================================================================
|
||
|
||
Game_Actor.prototype.gauge1 = function() {
|
||
for (var i = 0; i < this.equips().length; ++i) {
|
||
var equip = this.equips()[i];
|
||
if (!equip) continue;
|
||
if (equip.gauge1 === 'UNDEFINED') continue;
|
||
return equip.gauge1;
|
||
}
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gauge1 === 'UNDEFINED') continue;
|
||
return state.gauge1;
|
||
}
|
||
return this.currentClass().gauge1;
|
||
};
|
||
|
||
Game_Actor.prototype.gauge2 = function() {
|
||
for (var i = 0; i < this.equips().length; ++i) {
|
||
var equip = this.equips()[i];
|
||
if (!equip) continue;
|
||
if (equip.gauge2 === 'UNDEFINED') continue;
|
||
return equip.gauge2;
|
||
}
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gauge2 === 'UNDEFINED') continue;
|
||
return state.gauge2;
|
||
}
|
||
return this.currentClass().gauge2;
|
||
};
|
||
|
||
Game_Actor.prototype.gauge3 = function() {
|
||
for (var i = 0; i < this.equips().length; ++i) {
|
||
var equip = this.equips()[i];
|
||
if (!equip) continue;
|
||
if (equip.gauge3 === 'UNDEFINED') continue;
|
||
return equip.gauge3;
|
||
}
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gauge3 === 'UNDEFINED') continue;
|
||
return state.gauge3;
|
||
}
|
||
return this.currentClass().gauge3;
|
||
};
|
||
|
||
Game_Actor.prototype.gaugeIcon1 = function() {
|
||
for (var i = 0; i < this.equips().length; ++i) {
|
||
var equip = this.equips()[i];
|
||
if (!equip) continue;
|
||
if (equip.gaugeIcon1 === 'UNDEFINED') continue;
|
||
return equip.gaugeIcon1;
|
||
}
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gaugeIcon1 === 'UNDEFINED') continue;
|
||
return state.gaugeIcon1;
|
||
}
|
||
return this.currentClass().gaugeIcon1;
|
||
};
|
||
|
||
Game_Actor.prototype.gaugeIcon2 = function() {
|
||
for (var i = 0; i < this.equips().length; ++i) {
|
||
var equip = this.equips()[i];
|
||
if (!equip) continue;
|
||
if (equip.gaugeIcon2 === 'UNDEFINED') continue;
|
||
return equip.gaugeIcon2;
|
||
}
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gaugeIcon2 === 'UNDEFINED') continue;
|
||
return state.gaugeIcon2;
|
||
}
|
||
return this.currentClass().gaugeIcon2;
|
||
};
|
||
|
||
Game_Actor.prototype.gaugeIcon3 = function() {
|
||
for (var i = 0; i < this.equips().length; ++i) {
|
||
var equip = this.equips()[i];
|
||
if (!equip) continue;
|
||
if (equip.gaugeIcon3 === 'UNDEFINED') continue;
|
||
return equip.gaugeIcon3;
|
||
}
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gaugeIcon3 === 'UNDEFINED') continue;
|
||
return state.gaugeIcon3;
|
||
}
|
||
return this.currentClass().gaugeIcon3;
|
||
};
|
||
|
||
//=============================================================================
|
||
// Game_Enemy
|
||
//=============================================================================
|
||
|
||
Game_Enemy.prototype.gauge1 = function() {
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gauge1 === 'UNDEFINED') continue;
|
||
return state.gauge1;
|
||
}
|
||
return this.enemy().gauge1;
|
||
};
|
||
|
||
Game_Enemy.prototype.gauge2 = function() {
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gauge2 === 'UNDEFINED') continue;
|
||
return state.gauge2;
|
||
}
|
||
return this.enemy().gauge2;
|
||
};
|
||
|
||
Game_Enemy.prototype.gauge3 = function() {
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gauge1 === 'UNDEFINED') continue;
|
||
return state.gauge1;
|
||
}
|
||
return this.enemy().gauge3;
|
||
};
|
||
|
||
Game_Enemy.prototype.gaugeIcon1 = function() {
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gaugeIcon1 === 'UNDEFINED') continue;
|
||
return state.gaugeIcon1;
|
||
}
|
||
return this.enemy().gaugeIcon1;
|
||
};
|
||
|
||
Game_Enemy.prototype.gaugeIcon2 = function() {
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gaugeIcon2 === 'UNDEFINED') continue;
|
||
return state.gaugeIcon2;
|
||
}
|
||
return this.enemy().gaugeIcon2;
|
||
};
|
||
|
||
Game_Enemy.prototype.gaugeIcon3 = function() {
|
||
for (var i = 0; i < this.states().length; ++i) {
|
||
var state = this.states()[i];
|
||
if (!state) continue;
|
||
if (state.gaugeIcon3 === 'UNDEFINED') continue;
|
||
return state.gaugeIcon3;
|
||
}
|
||
return this.enemy().gaugeIcon3;
|
||
};
|
||
|
||
//=============================================================================
|
||
// Game_Action
|
||
//=============================================================================
|
||
|
||
Yanfly.Skill.Game_Action_apply = Game_Action.prototype.apply;
|
||
Game_Action.prototype.apply = function(target) {
|
||
this.applyBeforeEffect(target);
|
||
this.applyBeforeEval(target);
|
||
Yanfly.Skill.Game_Action_apply.call(this, target);
|
||
this.applyAfterEffect(target);
|
||
this.applyAfterEval(target);
|
||
};
|
||
|
||
Game_Action.prototype.applyBeforeEffect = function(target) {
|
||
};
|
||
|
||
Game_Action.prototype.applyBeforeEval = function(target) {
|
||
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;
|
||
eval(item.customBeforeEval);
|
||
};
|
||
|
||
Game_Action.prototype.applyAfterEffect = function(target) {
|
||
};
|
||
|
||
Game_Action.prototype.applyAfterEval = function(target) {
|
||
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;
|
||
eval(item.customAfterEval);
|
||
};
|
||
|
||
Yanfly.Skill.Game_Action_executeDamage = Game_Action.prototype.executeDamage;
|
||
Game_Action.prototype.executeDamage = function(target, value) {
|
||
this.applyPreDamageEffect(target, value);
|
||
this.applyPreDamageEval(target, value);
|
||
Yanfly.Skill.Game_Action_executeDamage.call(this, target, value);
|
||
this.applyPostDamageEffect(target, value);
|
||
this.applyPostDamageEval(target, value);
|
||
};
|
||
|
||
Game_Action.prototype.applyPreDamageEffect = function(target, value) {
|
||
};
|
||
|
||
Game_Action.prototype.applyPreDamageEval = function(target, value) {
|
||
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;
|
||
eval(item.customPreDamageEval);
|
||
};
|
||
|
||
Game_Action.prototype.applyPostDamageEffect = function(target, value) {
|
||
};
|
||
|
||
Game_Action.prototype.applyPostDamageEval = function(target, value) {
|
||
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;
|
||
eval(item.customPostDamageEval);
|
||
};
|
||
|
||
//=============================================================================
|
||
// Window_Base
|
||
//=============================================================================
|
||
|
||
Yanfly.Skill.Window_Base_drawActorHp = Window_Base.prototype.drawActorHp;
|
||
Window_Base.prototype.drawActorHp = function(actor, x, y, width) {
|
||
if (actor.gauge1() === 'HP') {
|
||
Yanfly.Skill.Window_Base_drawActorHp.call(this, actor, x, y, width);
|
||
} else if (actor.gauge1() === 'MP') {
|
||
Yanfly.Skill.Window_Base_drawActorMp.call(this, actor, x, y, width);
|
||
} else if (actor.gauge1() === 'TP') {
|
||
Yanfly.Skill.Window_Base_drawActorTp.call(this, actor, x, y, width);
|
||
}
|
||
};
|
||
|
||
Yanfly.Skill.Window_Base_drawActorMp = Window_Base.prototype.drawActorMp;
|
||
Window_Base.prototype.drawActorMp = function(actor, x, y, width) {
|
||
if (actor.gauge2() === 'HP') {
|
||
Yanfly.Skill.Window_Base_drawActorHp.call(this, actor, x, y, width);
|
||
} else if (actor.gauge2() === 'MP') {
|
||
Yanfly.Skill.Window_Base_drawActorMp.call(this, actor, x, y, width);
|
||
} else if (actor.gauge2() === 'TP') {
|
||
Yanfly.Skill.Window_Base_drawActorTp.call(this, actor, x, y, width);
|
||
}
|
||
};
|
||
|
||
Yanfly.Skill.Window_Base_drawActorTp = Window_Base.prototype.drawActorTp;
|
||
Window_Base.prototype.drawActorTp = function(actor, x, y, width) {
|
||
if (actor.gauge3() === 'HP') {
|
||
Yanfly.Skill.Window_Base_drawActorHp.call(this, actor, x, y, width);
|
||
} else if (actor.gauge3() === 'MP') {
|
||
Yanfly.Skill.Window_Base_drawActorMp.call(this, actor, x, y, width);
|
||
} else if (actor.gauge3() === 'TP') {
|
||
Yanfly.Skill.Window_Base_drawActorTp.call(this, actor, x, y, width);
|
||
}
|
||
};
|
||
|
||
//=============================================================================
|
||
// Window_SkillList
|
||
//=============================================================================
|
||
|
||
Window_SkillType.prototype.itemTextAlign = function() {
|
||
return Yanfly.Param.SCCTextAlign;
|
||
};
|
||
|
||
//=============================================================================
|
||
// Window_SkillList
|
||
//=============================================================================
|
||
|
||
Window_SkillList.prototype.drawSkillCost = function(skill, wx, wy, width) {
|
||
var dw = width;
|
||
dw = this.drawTpCost(skill, wx, wy, dw);
|
||
dw = this.drawMpCost(skill, wx, wy, dw);
|
||
dw = this.drawHpCost(skill, wx, wy, dw);
|
||
dw = this.drawOtherCost(skill, wx, wy, dw);
|
||
};
|
||
|
||
Window_SkillList.prototype.drawTpCost = function(skill, wx, wy, dw) {
|
||
if (this._actor.skillTpCost(skill) <= 0) { return dw; }
|
||
if (Yanfly.Icon.Tp > 0) {
|
||
var iw = wx + dw - Window_Base._iconWidth;
|
||
this.drawIcon(Yanfly.Icon.Tp, iw, wy + 2);
|
||
dw -= Window_Base._iconWidth + 2;
|
||
}
|
||
this.changeTextColor(this.textColor(Yanfly.Param.SCCTpTextColor));
|
||
var fmt = Yanfly.Param.SCCTpFormat;
|
||
var text = fmt.format(Yanfly.Util.toGroup(this._actor.skillTpCost(skill)),
|
||
TextManager.tpA);
|
||
this.contents.fontSize = Yanfly.Param.SCCTpFontSize;
|
||
this.drawText(text, wx, wy, dw, 'right');
|
||
this.resetFontSettings();
|
||
return dw - this.textWidth(text) - Yanfly.Param.SCCCostPadding;
|
||
};
|
||
|
||
Window_SkillList.prototype.drawMpCost = function(skill, wx, wy, dw) {
|
||
if (this._actor.skillMpCost(skill) <= 0) { return dw; }
|
||
if (Yanfly.Icon.Mp > 0) {
|
||
var iw = wx + dw - Window_Base._iconWidth;
|
||
this.drawIcon(Yanfly.Icon.Mp, iw, wy + 2);
|
||
dw -= Window_Base._iconWidth + 2;
|
||
}
|
||
this.changeTextColor(this.textColor(Yanfly.Param.SCCMpTextColor));
|
||
var fmt = Yanfly.Param.SCCMpFormat;
|
||
var text = fmt.format(Yanfly.Util.toGroup(this._actor.skillMpCost(skill)),
|
||
TextManager.mpA);
|
||
this.contents.fontSize = Yanfly.Param.SCCMpFontSize;
|
||
this.drawText(text, wx, wy, dw, 'right');
|
||
this.resetFontSettings();
|
||
return dw - this.textWidth(text) - Yanfly.Param.SCCCostPadding;
|
||
};
|
||
|
||
Window_SkillList.prototype.drawHpCost = function(skill, wx, wy, dw) {
|
||
if (this._actor.skillHpCost(skill) <= 0) { return dw; }
|
||
if (Yanfly.Icon.Hp > 0) {
|
||
var iw = wx + dw - Window_Base._iconWidth;
|
||
this.drawIcon(Yanfly.Icon.Hp, iw, wy + 2);
|
||
dw -= Window_Base._iconWidth + 2;
|
||
}
|
||
this.changeTextColor(this.textColor(Yanfly.Param.SCCHpTextColor));
|
||
var fmt = Yanfly.Param.SCCHpFormat;
|
||
var text = fmt.format(Yanfly.Util.toGroup(this._actor.skillHpCost(skill)),
|
||
TextManager.hpA);
|
||
this.contents.fontSize = Yanfly.Param.SCCHpFontSize;
|
||
this.drawText(text, wx, wy, dw, 'right');
|
||
this.resetFontSettings();
|
||
return dw - this.textWidth(text) - Yanfly.Param.SCCCostPadding;
|
||
};
|
||
|
||
Window_SkillList.prototype.drawOtherCost = function(skill, wx, wy, dw) {
|
||
return dw;
|
||
};
|
||
|
||
//=============================================================================
|
||
// Utilities
|
||
//=============================================================================
|
||
|
||
Yanfly.Util = Yanfly.Util || {};
|
||
|
||
if (!Yanfly.Util.toGroup) {
|
||
Yanfly.Util.toGroup = function(inVal) {
|
||
return inVal;
|
||
}
|
||
};
|
||
|
||
//=============================================================================
|
||
// End of File
|
||
//=============================================================================
|
||
(function() {
|
||
const _Game_Action_apply = Game_Action.prototype.apply;
|
||
Game_Action.prototype.apply = function(target) {
|
||
_Game_Action_apply.call(this, target);
|
||
|
||
if (!this.item() || target.result().missed || target.result().evaded) return;
|
||
|
||
const note = this.item().note;
|
||
|
||
// 即死タグの抽出
|
||
const match = note.match(/<InstantDeath(?::(\d+))?>/i);
|
||
if (!match) return;
|
||
|
||
// 即死確率(デフォルト 100%)
|
||
const rate = match[1] ? parseInt(match[1], 10) : 100;
|
||
|
||
// 敵がボスかどうか(<Boss> メモタグで判定)
|
||
if (target.isEnemy() && target.enemy().note.includes("<Boss>")) return;
|
||
|
||
// ランダム判定
|
||
if (Math.random() * 100 < rate) {
|
||
target.gainHp(-target.hp);
|
||
target.result().success = true; // ここで成功扱いにする!
|
||
if (target.isActor()) target.performCollapse(); // 倒れる演出(必要なら)
|
||
}
|
||
};
|
||
})();
|