|
|
|
|
//=============================================================================
|
|
|
|
|
// Yanfly Engine Plugins - Target Core
|
|
|
|
|
// YEP_TargetCore.js
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
var Imported = Imported || {};
|
|
|
|
|
Imported.YEP_TargetCore = true;
|
|
|
|
|
|
|
|
|
|
var Yanfly = Yanfly || {};
|
|
|
|
|
Yanfly.Target = Yanfly.Target || {};
|
|
|
|
|
Yanfly.Target.version = 1.03;
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
/*:
|
|
|
|
|
* @plugindesc v1.03 目标核心☁️
|
|
|
|
|
* @author Yanfly Engine Plugins
|
|
|
|
|
*
|
|
|
|
|
* @param ---战斗引擎---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param Everybody Text
|
|
|
|
|
* @text 所有人的帮助文本
|
|
|
|
|
* @desc The help text for Everybody scope.
|
|
|
|
|
* @default 所有队友和敌人
|
|
|
|
|
*
|
|
|
|
|
* @param All But User Text
|
|
|
|
|
* @text 除用户帮助文本外的所有文本
|
|
|
|
|
* @desc The help text for all All But User scope.
|
|
|
|
|
* %1 - Allies %2 - User
|
|
|
|
|
* @default All %1 But %2
|
|
|
|
|
*
|
|
|
|
|
* @param Random Any Text
|
|
|
|
|
* @text 任意帮助文本
|
|
|
|
|
* @desc The help text used for the Random Any scope.
|
|
|
|
|
* %1 - Number
|
|
|
|
|
* @default %1 Random
|
|
|
|
|
*
|
|
|
|
|
* @param ---倍数---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param Multiple Text
|
|
|
|
|
* @text 多文本
|
|
|
|
|
* @desc The help text used for Multiple of x scope.
|
|
|
|
|
* %1 - Targets %2 - Parameters %3 - Number
|
|
|
|
|
* @default %1 with %2 as a Multiple of %3
|
|
|
|
|
*
|
|
|
|
|
* @param Multiple Everybody
|
|
|
|
|
* @text 多人
|
|
|
|
|
* @desc The text to use for Everybody in this format.
|
|
|
|
|
* @default Anyone
|
|
|
|
|
*
|
|
|
|
|
* @param Multiple Allies
|
|
|
|
|
* @text 多个队友
|
|
|
|
|
* @desc The text to use for Allies in this format.
|
|
|
|
|
* @default Any Ally
|
|
|
|
|
*
|
|
|
|
|
* @param Multiple Foes
|
|
|
|
|
* @text 多个敌人
|
|
|
|
|
* @desc The text to use for Foes in this format.
|
|
|
|
|
* @default Any Foe
|
|
|
|
|
*
|
|
|
|
|
* @param ---成排---
|
|
|
|
|
* @default
|
|
|
|
|
*
|
|
|
|
|
* @param Target Row Text
|
|
|
|
|
* @text 目标行文本
|
|
|
|
|
* @desc The help text used to target the target's row.
|
|
|
|
|
* %1 - Target Name
|
|
|
|
|
* @default %1's Row
|
|
|
|
|
*
|
|
|
|
|
* @param Front Row Text
|
|
|
|
|
* @text 前排文字
|
|
|
|
|
* @desc The help text used to target the front row.
|
|
|
|
|
* %1 - Target Type
|
|
|
|
|
* @default %1 Front Row
|
|
|
|
|
*
|
|
|
|
|
* @param Back Row Text
|
|
|
|
|
* @text 后排文本
|
|
|
|
|
* @desc The help text used to target the back row.
|
|
|
|
|
* %1 - Target Type
|
|
|
|
|
* @default %1 Back Row
|
|
|
|
|
*
|
|
|
|
|
* @param Specific Row Text
|
|
|
|
|
* @text 特定行文本
|
|
|
|
|
* @desc The help text used to target specific rows.
|
|
|
|
|
* %1 - Target Type
|
|
|
|
|
* @default Specific %1 Row
|
|
|
|
|
*
|
|
|
|
|
* @param Row Enemies
|
|
|
|
|
* @text 排敌人
|
|
|
|
|
* @desc The help text used for enemies for Row Targets.
|
|
|
|
|
* @default Enemy
|
|
|
|
|
*
|
|
|
|
|
* @param Row Allies
|
|
|
|
|
* @text 排队友
|
|
|
|
|
* @desc The help text used for enemies for Row Targets.
|
|
|
|
|
* @default Allied
|
|
|
|
|
*
|
|
|
|
|
* @help
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Introduction
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* 这个插件独立于YEP_BattleEngineCore.js,如果你想使用额外的效果,请放于
|
|
|
|
|
* YEP_BattleEngineCore.js下面
|
|
|
|
|
*
|
|
|
|
|
* 目标核心插件是用来拓展目标范围的。这个插件可以让你使用目标范围,可以结合
|
|
|
|
|
* 编队插件一起使用
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Notetags
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* 如果你想定义你技能或者物品的攻击范围,可以使用这些标签:
|
|
|
|
|
*
|
|
|
|
|
* Skill and Item Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Repeat: x> 重复x次
|
|
|
|
|
* This determines the number of times an action is repeatedly used on each
|
|
|
|
|
* target. This can go beyond the default editor's limit of 9.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Everybody> 目标所有人
|
|
|
|
|
* This targets all alive opponent and friendly members with the user being
|
|
|
|
|
* the very last target.
|
|
|
|
|
*
|
|
|
|
|
* <Target: x Random Any> 随机目标
|
|
|
|
|
* This adds x random alive opponents and/or allies.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Target All Foes> 所有敌方
|
|
|
|
|
* This targets a single foe and then adds all alive opponent members.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Target x Random Foes> 随机敌方
|
|
|
|
|
* This targets a single foe and then adds x random alive opponent members.
|
|
|
|
|
*
|
|
|
|
|
* <Target: x Random Foes> 随机敌方
|
|
|
|
|
* This adds x random alive opponent members. This can go beyond the editor's
|
|
|
|
|
* default limit of 4 randomf oes.
|
|
|
|
|
*
|
|
|
|
|
* <Target: All Allies But User> 除了使用者的其余队友
|
|
|
|
|
* This will target all friendly alive members except for the user.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Target All Allies> 所有队友
|
|
|
|
|
* This will target a single ally and then adds all alive friendly members.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Target x Random Allies> 随机队友
|
|
|
|
|
* This will target a single ally and then adds x random alive allies.
|
|
|
|
|
*
|
|
|
|
|
* <Target: x Random Allies> 随机角色
|
|
|
|
|
* This adds x random alive allied members.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Everybody param Multiple Of x> 符合特定状态的角色
|
|
|
|
|
* Replace 'param' with 'level', 'maxhp', 'maxmp', 'atk', 'def', 'mat',
|
|
|
|
|
* 'mdf', 'agi', 'luk', 'hp', 'mp', or 'tp'. This will make the skill or item
|
|
|
|
|
* indiscriminately target any living battler on the battlefield whose
|
|
|
|
|
* parameter value is a multiple of x.
|
|
|
|
|
* *NOTE: If you are using 'level', make sure you have YEP_EnemyLevels.js.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Allies param Multiple Of x> 符合特定状态的队友
|
|
|
|
|
* Replace 'param' with 'level', 'maxhp', 'maxmp', 'atk', 'def', 'mat',
|
|
|
|
|
* 'mdf', 'agi', 'luk', 'hp', 'mp', or 'tp'. This will make the skill or item
|
|
|
|
|
* target any living allied party member on the battlefield whose parameter
|
|
|
|
|
* value is a multiple of x.
|
|
|
|
|
* *NOTE: If you are using 'level', make sure you have YEP_EnemyLevels.js.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Foes param Multiple Of x> 符合特定状态的敌方
|
|
|
|
|
* Replace 'param' with 'level', 'maxhp', 'maxmp', 'atk', 'def', 'mat',
|
|
|
|
|
* 'mdf', 'agi', 'luk', 'hp', 'mp', or 'tp'. This will make the skill or item
|
|
|
|
|
* target any living enemy battler on the battlefield whose parameter value
|
|
|
|
|
* is a multiple of x.
|
|
|
|
|
* *NOTE: If you are using 'level', make sure you have YEP_EnemyLevels.js.
|
|
|
|
|
*
|
|
|
|
|
* --- YEP_RowFormation.js and YEP_BattleEngineCore.js Required ---
|
|
|
|
|
*
|
|
|
|
|
* <Target: Enemy Row> 目标敌人排
|
|
|
|
|
* This will target the enemy row equal to that of the currently selected
|
|
|
|
|
* target enemy. The entire row will be selected as a whole.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Enemy Row x> 目标敌人x排
|
|
|
|
|
* This will target specifically the enemy row x for the enemy unit. The
|
|
|
|
|
* entire row will be selected as a whole.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Front Enemy Row> 目标敌人前
|
|
|
|
|
* This will target the front-most enemy row with alive members. If there is
|
|
|
|
|
* a row without any alive members, this will target the next row with an
|
|
|
|
|
* alive member.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Back Enemy Row> 目标敌人后排
|
|
|
|
|
* This will target the back-most enemy row with alive members. If there is
|
|
|
|
|
* a row without any alive members, this will target the next row with an
|
|
|
|
|
* alive member.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Ally Row> 队友排列
|
|
|
|
|
* This will target the enemy row equal to that of the currently selected
|
|
|
|
|
* target enemy. The entire row will be selected as a whole.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Ally Row x> 队友x排
|
|
|
|
|
* This will target specifically the allied row x for the allied unit. The
|
|
|
|
|
* entire row will be selected as a whole.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Front Ally Row> 队友前排
|
|
|
|
|
* This will target the front-most ally row with alive members. If there is
|
|
|
|
|
* a row without any alive members, this will target the next row with an
|
|
|
|
|
* alive member.
|
|
|
|
|
*
|
|
|
|
|
* <Target: Back Ally Row> 队友后排
|
|
|
|
|
* This will target the back-most ally row with alive members. If there is
|
|
|
|
|
* a row without any alive members, this will target the next row with an
|
|
|
|
|
* alive member.
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Lunatic Mode - Custom Target Help Text
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* For users that are proficient with JavaScript, these notetags can be used to
|
|
|
|
|
* provide custom help window text if you are also the Battle Engine Core.
|
|
|
|
|
*
|
|
|
|
|
* Skill and Item Notetags:
|
|
|
|
|
*
|
|
|
|
|
* <Custom Target Text>
|
|
|
|
|
* text = $gameActors.actor(1).name();
|
|
|
|
|
* text += ' and ' + $gameActors.actor(2).name();
|
|
|
|
|
* </Custom Target Text>
|
|
|
|
|
* The 'text' variable is the text that will appear in the help window. Any
|
|
|
|
|
* changes made to it will be what is visibly displayed.
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Lunatic Mode - Custom Target Eval
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* For users that are proficient with JavaScript, these notetags can be used to
|
|
|
|
|
* make custom target selections. For the targeting aspect, this will refer to
|
|
|
|
|
* the skill/item's current scope and the targets made here will be made
|
|
|
|
|
* independent of the scope with the exception of the target, where if a target
|
|
|
|
|
* is selected, it will become the 'target' value.
|
|
|
|
|
*
|
|
|
|
|
* <Custom Target Eval>
|
|
|
|
|
* for (var i = 0; i < foes.aliveMembers().length; ++i) {
|
|
|
|
|
* var member = foes.aliveMembers()[i];
|
|
|
|
|
* if (member.level % 3 === 0) targets.push(member);
|
|
|
|
|
* }
|
|
|
|
|
* </Custom Target Eval>
|
|
|
|
|
* The 'targets' variable is an array that determines which are the targets
|
|
|
|
|
* to be used during the selection process. Push the desired targets into
|
|
|
|
|
* the 'targets' array.
|
|
|
|
|
*
|
|
|
|
|
* ============================================================================
|
|
|
|
|
* Changelog
|
|
|
|
|
* ============================================================================
|
|
|
|
|
*
|
|
|
|
|
* Version 1.03:
|
|
|
|
|
* - Lunatic Mode fail safes added.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.02a:
|
|
|
|
|
* - <Target: Everybody> will now have allies highlighted as well.
|
|
|
|
|
* - <Target: Enemy Row> and <Target: Ally Row> will no longer highlight edead
|
|
|
|
|
* enemies causing them to reappear.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.01:
|
|
|
|
|
* - Updated for RPG Maker MV version 1.1.0.
|
|
|
|
|
*
|
|
|
|
|
* Version 1.00:
|
|
|
|
|
* - Finished Plugin!
|
|
|
|
|
*/
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Parameter Variables
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Parameters = PluginManager.parameters("YEP_TargetCore");
|
|
|
|
|
Yanfly.Param = Yanfly.Param || {};
|
|
|
|
|
|
|
|
|
|
Yanfly.Param.BECHlpEverybodyTx = String(Yanfly.Parameters["Everybody Text"]);
|
|
|
|
|
Yanfly.Param.BECHlpAllBTx = String(Yanfly.Parameters["All But User Text"]);
|
|
|
|
|
Yanfly.Param.BECHlpRandomAnyTx = String(Yanfly.Parameters["Random Any Text"]);
|
|
|
|
|
|
|
|
|
|
Yanfly.Param.TargetMultipleTx = String(Yanfly.Parameters["Multiple Text"]);
|
|
|
|
|
Yanfly.Param.TargetMultiEvery = String(Yanfly.Parameters["Multiple Everybody"]);
|
|
|
|
|
Yanfly.Param.TargetMultiAllies = String(Yanfly.Parameters["Multiple Allies"]);
|
|
|
|
|
Yanfly.Param.TargetMultiFoes = String(Yanfly.Parameters["Multiple Foes"]);
|
|
|
|
|
|
|
|
|
|
Yanfly.Param.TargetHlpRowTx = String(Yanfly.Parameters["Target Row Text"]);
|
|
|
|
|
Yanfly.Param.TargetFrontRow = String(Yanfly.Parameters["Front Row Text"]);
|
|
|
|
|
Yanfly.Param.TargetBackRow = String(Yanfly.Parameters["Back Row Text"]);
|
|
|
|
|
Yanfly.Param.TargetSpcRow = String(Yanfly.Parameters["Specific Row Text"]);
|
|
|
|
|
Yanfly.Param.TargetRowEnemies = String(Yanfly.Parameters["Row Enemies"]);
|
|
|
|
|
Yanfly.Param.TargetRowAllies = String(Yanfly.Parameters["Row Allies"]);
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// DataManager
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
|
|
|
|
|
DataManager.isDatabaseLoaded = function () {
|
|
|
|
|
if (!Yanfly.Target.DataManager_isDatabaseLoaded.call(this)) return false;
|
|
|
|
|
if (!Imported.YEP_BattleEngineCore) {
|
|
|
|
|
this.processTargetNotetags1($dataSkills);
|
|
|
|
|
this.processTargetNotetags1($dataItems);
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (Imported.YEP_BattleEngineCore) {
|
|
|
|
|
Yanfly.Target.DataManager_processMELODYNotetags = DataManager.processMELODYNotetags;
|
|
|
|
|
DataManager.processMELODYNotetags = function (group) {
|
|
|
|
|
this.processTargetNotetags1(group);
|
|
|
|
|
Yanfly.Target.DataManager_processMELODYNotetags.call(this, group);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.DataManager_addActionEffects = DataManager.addActionEffects;
|
|
|
|
|
DataManager.addActionEffects = function (obj, array) {
|
|
|
|
|
this.processTargetRepeatNotetags(obj);
|
|
|
|
|
Yanfly.Target.DataManager_addActionEffects.call(this, obj, array);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.DataManager_isWholeAction = DataManager.isWholeAction;
|
|
|
|
|
DataManager.isWholeAction = function (obj) {
|
|
|
|
|
if (obj.scope === "MULTIPLE") return true;
|
|
|
|
|
if (obj.scope === "EVERYBODY") return true;
|
|
|
|
|
if (obj.scope === "RANDOM ANY") return false;
|
|
|
|
|
if (obj.scope === "TARGET ALL FOES") return false;
|
|
|
|
|
if (obj.scope === "TARGET RANDOM FOES") return false;
|
|
|
|
|
if (obj.scope === "ALL BUT USER") return true;
|
|
|
|
|
if (obj.scope === "TARGET ALL ALLIES") return false;
|
|
|
|
|
if (obj.scope === "TARGET RANDOM ALLIES") return false;
|
|
|
|
|
if (obj.scope === "RANDOM ALLIES") return false;
|
|
|
|
|
if (obj.scope === "ENEMY ROW") return true;
|
|
|
|
|
if (obj.scope === "ALLY ROW") return true;
|
|
|
|
|
if (obj.scope === "FRONT ENEMY ROW") return true;
|
|
|
|
|
if (obj.scope === "FRONT ALLY ROW") return true;
|
|
|
|
|
if (obj.scope === "BACK ENEMY ROW") return true;
|
|
|
|
|
if (obj.scope === "BACK ALLY ROW") return true;
|
|
|
|
|
if (obj.scope === "SPECIFIC ENEMY ROW") return true;
|
|
|
|
|
if (obj.scope === "SPECIFIC ALLY ROW") return true;
|
|
|
|
|
return Yanfly.Target.DataManager_isWholeAction.call(this, obj);
|
|
|
|
|
};
|
|
|
|
|
} // Imported.YEP_BattleEngineCore
|
|
|
|
|
|
|
|
|
|
DataManager.processTargetRepeatNotetags = function (obj) {
|
|
|
|
|
var notedata = obj.note.split(/[\r\n]+/);
|
|
|
|
|
for (var i = 0; i < notedata.length; i++) {
|
|
|
|
|
var line = notedata[i];
|
|
|
|
|
if (line.match(/<(?:REPEAT|REPEATS|REPEAT TIMES):[ ](\d+)>/i)) {
|
|
|
|
|
obj.repeats = parseInt(RegExp.$1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.processTargetNotetags1 = function (group) {
|
|
|
|
|
for (var n = 1; n < group.length; n++) {
|
|
|
|
|
var obj = group[n];
|
|
|
|
|
var notedata = obj.note.split(/[\r\n]+/);
|
|
|
|
|
|
|
|
|
|
this.makeRandomTargets(obj);
|
|
|
|
|
var evalMode = "none";
|
|
|
|
|
obj.customTargetText = "";
|
|
|
|
|
obj.customTargetEval = "";
|
|
|
|
|
|
|
|
|
|
if (!Imported.YEP_BattleEngineCore) this.processTargetRepeatNotetags(obj);
|
|
|
|
|
for (var i = 0; i < notedata.length; i++) {
|
|
|
|
|
var line = notedata[i];
|
|
|
|
|
if (line.match(/<(?:TARGET|targets):[ ](.*)>/i)) {
|
|
|
|
|
var type = String(RegExp.$1).toUpperCase();
|
|
|
|
|
this.makeTargetTypes(obj, type);
|
|
|
|
|
} else if (line.match(/<CUSTOM TARGET TEXT>/i)) {
|
|
|
|
|
evalMode = "custom target text";
|
|
|
|
|
} else if (line.match(/<\/CUSTOM TARGET TEXT>/i)) {
|
|
|
|
|
evalMode = "none";
|
|
|
|
|
} else if (evalMode === "custom target text") {
|
|
|
|
|
obj.customTargetText = obj.customTargetText + line + "\n";
|
|
|
|
|
} else if (line.match(/<CUSTOM TARGET EVAL>/i)) {
|
|
|
|
|
evalMode = "custom target eval";
|
|
|
|
|
} else if (line.match(/<\/CUSTOM TARGET EVAL>/i)) {
|
|
|
|
|
evalMode = "none";
|
|
|
|
|
} else if (evalMode === "custom target eval") {
|
|
|
|
|
obj.customTargetEval = obj.customTargetEval + line + "\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.makeRandomTargets = function (obj) {
|
|
|
|
|
obj.randomTargets = 0;
|
|
|
|
|
if ([3, 4, 5, 6].contains(obj.scope)) {
|
|
|
|
|
obj.randomTargets = obj.scope - 2;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.makeTargetTypes = function (obj, type) {
|
|
|
|
|
if (type.match(/(.*?)[ ](.*?)[ ]MULTIPLE OF[ ](\d+)/i)) {
|
|
|
|
|
var targets = String(RegExp.$1).toUpperCase();
|
|
|
|
|
var stat = String(RegExp.$2).toUpperCase();
|
|
|
|
|
var number = Math.max(0, parseInt(RegExp.$3));
|
|
|
|
|
this.makeTargetMultipleOfType(obj, targets, stat, number);
|
|
|
|
|
} else if (type.match(/EVERYBODY/i)) {
|
|
|
|
|
obj.scope = "EVERYBODY";
|
|
|
|
|
} else if (type.match(/(\d+)[ ]RANDOM ANY/i)) {
|
|
|
|
|
obj.randomTargets = parseInt(RegExp.$1);
|
|
|
|
|
obj.scope = "RANDOM ANY";
|
|
|
|
|
} else if (type.match(/TARGET ALL FOE/i)) {
|
|
|
|
|
obj.scope = "TARGET ALL FOES";
|
|
|
|
|
} else if (type.match(/TARGET[ ](\d+)[ ]RANDOM FOE/i)) {
|
|
|
|
|
obj.randomTargets = parseInt(RegExp.$1);
|
|
|
|
|
obj.scope = "TARGET RANDOM FOES";
|
|
|
|
|
} else if (type.match(/(\d+)[ ]RANDOM FOE/i)) {
|
|
|
|
|
obj.randomTargets = parseInt(RegExp.$1);
|
|
|
|
|
obj.scope = 3;
|
|
|
|
|
} else if (type.match(/ALL BUT USER/i)) {
|
|
|
|
|
obj.scope = "ALL BUT USER";
|
|
|
|
|
} else if (type.match(/ALL ALLIES BUT USER/i)) {
|
|
|
|
|
obj.scope = "ALL BUT USER";
|
|
|
|
|
} else if (type.match(/TARGET ALL ALL/i)) {
|
|
|
|
|
obj.scope = "TARGET ALL ALLIES";
|
|
|
|
|
} else if (type.match(/TARGET[ ](\d+)[ ]RANDOM ALL/i)) {
|
|
|
|
|
obj.randomTargets = parseInt(RegExp.$1);
|
|
|
|
|
obj.scope = "TARGET RANDOM ALLIES";
|
|
|
|
|
} else if (type.match(/(\d+)[ ]RANDOM ALL/i)) {
|
|
|
|
|
obj.randomTargets = parseInt(RegExp.$1);
|
|
|
|
|
obj.scope = "RANDOM ALLIES";
|
|
|
|
|
} else if (type.match(/FRONT ENEMY ROW/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "FRONT ENEMY ROW";
|
|
|
|
|
} else if (type.match(/FRONT ALLY ROW/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "FRONT ALLY ROW";
|
|
|
|
|
} else if (type.match(/BACK ENEMY ROW/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "BACK ENEMY ROW";
|
|
|
|
|
} else if (type.match(/BACK ALLY ROW/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "BACK ALLY ROW";
|
|
|
|
|
} else if (type.match(/ENEMY ROW[ ](\d+)/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "SPECIFIC ENEMY ROW";
|
|
|
|
|
obj.rowTarget = parseInt(RegExp.$1).clamp(1, 10);
|
|
|
|
|
} else if (type.match(/ALLY ROW[ ](\d+)/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "SPECIFIC ALLY ROW";
|
|
|
|
|
obj.rowTarget = parseInt(RegExp.$1).clamp(1, 10);
|
|
|
|
|
} else if (type.match(/ENEMY ROW/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "ENEMY ROW";
|
|
|
|
|
} else if (type.match(/ALLY ROW/i)) {
|
|
|
|
|
if (!Imported.YEP_RowFormation) return;
|
|
|
|
|
obj.scope = "ALLY ROW";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DataManager.makeTargetMultipleOfType = function (obj, targets, stat, number) {
|
|
|
|
|
obj.multipleOf = [];
|
|
|
|
|
if (["ALL", "ANY", "ANYBODY", "EVERYBODY"].contains(targets)) {
|
|
|
|
|
obj.multipleOf.push("EVERYBODY");
|
|
|
|
|
} else if (["ALLY", "ALLIES", "FRIENDS"].contains(targets)) {
|
|
|
|
|
obj.multipleOf.push("FRIENDS");
|
|
|
|
|
} else if (["FOE", "FOES", "ENEMIES", "OPPONENTS"].contains(targets)) {
|
|
|
|
|
obj.multipleOf.push("OPPONENTS");
|
|
|
|
|
} else {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (["MAXHP", "MAX HP"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(0);
|
|
|
|
|
} else if (["MAXMP", "MAX MP", "MAXSP", "MAX SP"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(1);
|
|
|
|
|
} else if (["ATK", "STR"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(2);
|
|
|
|
|
} else if (["DEF"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(3);
|
|
|
|
|
} else if (["MAT", "INT"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(4);
|
|
|
|
|
} else if (["MDF", "RES"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(5);
|
|
|
|
|
} else if (["AGI", "SPD"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(6);
|
|
|
|
|
} else if (["LUK"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push(7);
|
|
|
|
|
} else if (["LEVEL", "LV", "LVL"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push("LEVEL");
|
|
|
|
|
} else if (["HP"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push("HP");
|
|
|
|
|
} else if (["MP"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push("MP");
|
|
|
|
|
} else if (["TP"].contains(stat)) {
|
|
|
|
|
obj.multipleOf.push("TP");
|
|
|
|
|
} else {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
obj.multipleOf.push(number);
|
|
|
|
|
obj.scope = "MULTIPLE";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// BattleManager
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
if (Imported.YEP_BattleEngineCore) {
|
|
|
|
|
Yanfly.Target.BattleManager_startAllSelection = BattleManager.startAllSelection;
|
|
|
|
|
BattleManager.startAllSelection = function () {
|
|
|
|
|
if (this.inputtingAction().isForMultiple()) {
|
|
|
|
|
var targets = this.inputtingAction().makeMultipleOfTargets();
|
|
|
|
|
this._customTargetSelectGroup = targets;
|
|
|
|
|
} else if (this.inputtingAction().isForRow()) {
|
|
|
|
|
var targets = this.inputtingAction().makeRowTypeTargets();
|
|
|
|
|
this._customTargetSelectGroup = targets;
|
|
|
|
|
} else {
|
|
|
|
|
Yanfly.Target.BattleManager_startAllSelection.call(this);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
} // Imported.YEP_BattleEngineCore
|
|
|
|
|
|
|
|
|
|
BattleManager.customTargetSelectGroup = function () {
|
|
|
|
|
this._customTargetSelectGroup = this._customTargetSelectGroup || [];
|
|
|
|
|
return this._customTargetSelectGroup;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
BattleManager.clearCustomTargetSelectGroup = function () {
|
|
|
|
|
this._customTargetSelectGroup = [];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_System
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_System_onBattleStart = Game_System.prototype.onBattleStart;
|
|
|
|
|
Game_System.prototype.onBattleStart = function () {
|
|
|
|
|
BattleManager.clearCustomTargetSelectGroup();
|
|
|
|
|
Yanfly.Target.Game_System_onBattleStart.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Battler
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Battler_isSelected = Game_Battler.prototype.isSelected;
|
|
|
|
|
Game_Battler.prototype.isSelected = function () {
|
|
|
|
|
if (BattleManager.customTargetSelectGroup().length > 0) {
|
|
|
|
|
return BattleManager.customTargetSelectGroup().contains(this);
|
|
|
|
|
}
|
|
|
|
|
return Yanfly.Target.Game_Battler_isSelected.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Game_Action
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Action_isForOpponent = Game_Action.prototype.isForOpponent;
|
|
|
|
|
Game_Action.prototype.isForOpponent = function () {
|
|
|
|
|
if (this.item().scope === "EVERYBODY") return true;
|
|
|
|
|
if (this.item().scope === "RANDOM ANY") return true;
|
|
|
|
|
if (this.item().scope === "TARGET ALL FOES") return true;
|
|
|
|
|
if (this.item().scope === "TARGET RANDOM FOES") return true;
|
|
|
|
|
if (this.item().scope === "MULTIPLE") {
|
|
|
|
|
if (this.item().multipleOf.contains("EVERYBODY")) return true;
|
|
|
|
|
if (this.item().multipleOf.contains("OPPONENTS")) return true;
|
|
|
|
|
}
|
|
|
|
|
if (this.item().scope === "ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "FRONT ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "BACK ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "SPECIFIC ENEMY ROW") return true;
|
|
|
|
|
return Yanfly.Target.Game_Action_isForOpponent.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Action_isForFriend = Game_Action.prototype.isForFriend;
|
|
|
|
|
Game_Action.prototype.isForFriend = function () {
|
|
|
|
|
if (this.item().scope === "EVERYBODY") return true;
|
|
|
|
|
if (this.item().scope === "ALL BUT USER") return true;
|
|
|
|
|
if (this.item().scope === "TARGET ALL ALLIES") return true;
|
|
|
|
|
if (this.item().scope === "TARGET RANDOM ALLIES") return true;
|
|
|
|
|
if (this.item().scope === "RANDOM ALLIES") return true;
|
|
|
|
|
if (this.item().scope === "MULTIPLE") {
|
|
|
|
|
if (this.item().multipleOf.contains("FRIENDS")) return true;
|
|
|
|
|
}
|
|
|
|
|
if (this.item().scope === "ALLY ROW") return true;
|
|
|
|
|
if (this.item().scope === "FRONT ALLY ROW") return true;
|
|
|
|
|
if (this.item().scope === "BACK ALLY ROW") return true;
|
|
|
|
|
if (this.item().scope === "SPECIFIC ALLY ROW") return true;
|
|
|
|
|
return Yanfly.Target.Game_Action_isForFriend.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForCustom = function () {
|
|
|
|
|
if (this.isForEval()) return true;
|
|
|
|
|
return typeof this.item().scope === "string";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForEval = function () {
|
|
|
|
|
return this.item().customTargetEval !== "";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForEverybody = function () {
|
|
|
|
|
if (this.item().scope === "MULTIPLE") {
|
|
|
|
|
if (this.item().multipleOf.contains("EVERYBODY")) return true;
|
|
|
|
|
}
|
|
|
|
|
return this.item().scope === "EVERYBODY";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForRandomAny = function () {
|
|
|
|
|
return this.item().scope === "RANDOM ANY";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForTargetAllFoes = function () {
|
|
|
|
|
return this.item().scope === "TARGET ALL FOES";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForTargetRandomFoes = function () {
|
|
|
|
|
return this.item().scope === "TARGET RANDOM FOES";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForAllButUser = function () {
|
|
|
|
|
return this.item().scope === "ALL BUT USER";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForTargetAllAllies = function () {
|
|
|
|
|
return this.item().scope === "TARGET ALL ALLIES";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForTargetRandomAllies = function () {
|
|
|
|
|
return this.item().scope === "TARGET RANDOM ALLIES";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForRandomAllies = function () {
|
|
|
|
|
return this.item().scope === "RANDOM ALLIES";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Action_isForRandom = Game_Action.prototype.isForRandom;
|
|
|
|
|
Game_Action.prototype.isForRandom = function () {
|
|
|
|
|
if (this.item().randomTargets > 0) return true;
|
|
|
|
|
return Yanfly.Target.Game_Action_isForRandom.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForMultiple = function () {
|
|
|
|
|
return this.item().scope === "MULTIPLE";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.isForRow = function () {
|
|
|
|
|
if (this.item().scope === "ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "ALLY ROW") return true;
|
|
|
|
|
if (this.item().scope === "FRONT ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "FRONT ALLY ROW") return true;
|
|
|
|
|
if (this.item().scope === "BACK ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "BACK ALLY ROW") return true;
|
|
|
|
|
if (this.item().scope === "SPECIFIC ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "SPECIFIC ALLY ROW") return true;
|
|
|
|
|
return false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Action_needsSelection = Game_Action.prototype.needsSelection;
|
|
|
|
|
Game_Action.prototype.needsSelection = function () {
|
|
|
|
|
if (this.item().scope === "TARGET ALL FOES") return true;
|
|
|
|
|
if (this.item().scope === "TARGET RANDOM FOES") return true;
|
|
|
|
|
if (this.item().scope === "TARGET ALL ALLIES") return true;
|
|
|
|
|
if (this.item().scope === "TARGET RANDOM ALLIES") return true;
|
|
|
|
|
if (this.item().scope === "ENEMY ROW") return true;
|
|
|
|
|
if (this.item().scope === "ALLY ROW") return true;
|
|
|
|
|
return Yanfly.Target.Game_Action_needsSelection.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Action_numTargets = Game_Action.prototype.numTargets;
|
|
|
|
|
Game_Action.prototype.numTargets = function () {
|
|
|
|
|
if (this.isForRandom()) return this.item().randomTargets;
|
|
|
|
|
return Yanfly.Target.Game_Action_numTargets.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Game_Action_makeTargets = Game_Action.prototype.makeTargets;
|
|
|
|
|
Game_Action.prototype.makeTargets = function () {
|
|
|
|
|
var targets = [];
|
|
|
|
|
if (!this._forcing && this.subject().isConfused()) {
|
|
|
|
|
targets = Yanfly.Target.Game_Action_makeTargets.call(this);
|
|
|
|
|
} else if (this.isForCustom()) {
|
|
|
|
|
targets = this.makeCustomTargets();
|
|
|
|
|
} else {
|
|
|
|
|
targets = Yanfly.Target.Game_Action_makeTargets.call(this);
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.makeCustomTargets = function () {
|
|
|
|
|
var targets = [];
|
|
|
|
|
if (this.isForEval()) {
|
|
|
|
|
targets = this.makeEvalTargets();
|
|
|
|
|
} else if (this.isForMultiple()) {
|
|
|
|
|
targets = this.makeMultipleOfTargets();
|
|
|
|
|
} else if (this.isForRow()) {
|
|
|
|
|
targets = this.makeRowTypeTargets();
|
|
|
|
|
} else if (this.isForRandomAny()) {
|
|
|
|
|
var number = this.numTargets();
|
|
|
|
|
var group = $gameParty.aliveMembers().concat($gameTroop.aliveMembers());
|
|
|
|
|
for (var i = 0; i < number; ++i) {
|
|
|
|
|
var member = group[Math.floor(Math.random() * group.length)];
|
|
|
|
|
targets.push(member);
|
|
|
|
|
}
|
|
|
|
|
} else if (this.isForEverybody()) {
|
|
|
|
|
targets = this.opponentsUnit().aliveMembers();
|
|
|
|
|
var length = this.friendsUnit().aliveMembers().length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.friendsUnit().aliveMembers()[i];
|
|
|
|
|
if (member && member !== this.subject()) targets.push(member);
|
|
|
|
|
}
|
|
|
|
|
targets.push(this.subject());
|
|
|
|
|
} else if (this.isForTargetAllFoes()) {
|
|
|
|
|
var unit = this.opponentsUnit();
|
|
|
|
|
targets.push(unit.smoothTarget(this._targetIndex));
|
|
|
|
|
targets = targets.concat(unit.aliveMembers());
|
|
|
|
|
} else if (this.isForTargetRandomFoes()) {
|
|
|
|
|
var unit = this.opponentsUnit();
|
|
|
|
|
var number = this.numTargets();
|
|
|
|
|
targets.push(unit.smoothTarget(this._targetIndex));
|
|
|
|
|
targets = targets.concat(this.getRandomTargets(number, unit));
|
|
|
|
|
} else if (this.isForAllButUser()) {
|
|
|
|
|
var length = this.friendsUnit().aliveMembers().length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = this.friendsUnit().aliveMembers()[i];
|
|
|
|
|
if (member && member !== this.subject()) targets.push(member);
|
|
|
|
|
}
|
|
|
|
|
} else if (this.isForTargetAllAllies()) {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
targets.push(unit.smoothTarget(this._targetIndex));
|
|
|
|
|
targets = targets.concat(unit.aliveMembers());
|
|
|
|
|
} else if (this.isForTargetRandomAllies()) {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
var number = this.numTargets();
|
|
|
|
|
targets.push(unit.smoothTarget(this._targetIndex));
|
|
|
|
|
targets = targets.concat(this.getRandomTargets(number, unit));
|
|
|
|
|
} else if (this.isForRandomAllies()) {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
var number = this.numTargets();
|
|
|
|
|
targets = targets.concat(this.getRandomTargets(number, unit));
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.makeEvalTargets = function () {
|
|
|
|
|
var targets = [];
|
|
|
|
|
var a = this.subject();
|
|
|
|
|
var user = this.subject();
|
|
|
|
|
var subject = this.subject();
|
|
|
|
|
if (this.isForOpponent()) {
|
|
|
|
|
var targetUnit = this.opponentsUnit();
|
|
|
|
|
} else {
|
|
|
|
|
var targetUnit = this.friendsUnit();
|
|
|
|
|
}
|
|
|
|
|
var b = targetUnit.smoothTarget(this._targetIndex);
|
|
|
|
|
var target = targetUnit.smoothTarget(this._targetIndex);
|
|
|
|
|
var s = $gameSwitches._data;
|
|
|
|
|
var v = $gameVariables._data;
|
|
|
|
|
var allies = this.friendsUnit();
|
|
|
|
|
var friends = allies;
|
|
|
|
|
var foes = this.opponentsUnit();
|
|
|
|
|
var opponents = foes;
|
|
|
|
|
var code = this.item().customTargetEval;
|
|
|
|
|
try {
|
|
|
|
|
eval(code);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
Yanfly.Util.displayError(e, code, "MAKE CUSTOM TARGETS ERROR");
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.getRandomTargets = function (number, unit) {
|
|
|
|
|
var targets = [];
|
|
|
|
|
for (var i = 0; i < number; ++i) {
|
|
|
|
|
targets.push(unit.randomTarget());
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.makeMultipleOfTargets = function () {
|
|
|
|
|
var targets = [];
|
|
|
|
|
var unit = [];
|
|
|
|
|
var type = this.item().multipleOf[0];
|
|
|
|
|
var param = this.item().multipleOf[1];
|
|
|
|
|
var number = this.item().multipleOf[2];
|
|
|
|
|
if (["EVERYBODY", "OPPONENTS"].contains(type)) {
|
|
|
|
|
unit = unit.concat(this.opponentsUnit().aliveMembers());
|
|
|
|
|
}
|
|
|
|
|
if (["EVERYBODY", "FRIENDS"].contains(type)) {
|
|
|
|
|
unit = unit.concat(this.friendsUnit().aliveMembers());
|
|
|
|
|
}
|
|
|
|
|
var length = unit.length;
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var member = unit[i];
|
|
|
|
|
if (param === "LEVEL") {
|
|
|
|
|
if (member.level % number === 0) targets.push(member);
|
|
|
|
|
} else if (param === "HP") {
|
|
|
|
|
if (member.hp % number === 0) targets.push(member);
|
|
|
|
|
} else if (param === "MP") {
|
|
|
|
|
if (member.mp % number === 0) targets.push(member);
|
|
|
|
|
} else if (param === "TP") {
|
|
|
|
|
if (member.tp % number === 0) targets.push(member);
|
|
|
|
|
} else {
|
|
|
|
|
if (member.param(param) % number === 0) targets.push(member);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Game_Action.prototype.makeRowTypeTargets = function () {
|
|
|
|
|
var targets = [];
|
|
|
|
|
var scope = this.item().scope;
|
|
|
|
|
if (scope === "ENEMY ROW") {
|
|
|
|
|
var unit = this.opponentsUnit();
|
|
|
|
|
var target = unit.smoothTarget(this._targetIndex);
|
|
|
|
|
var row = target.row();
|
|
|
|
|
targets = unit.rowAliveMembers(row);
|
|
|
|
|
} else if (scope === "ALLY ROW") {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
var target = unit.smoothTarget(this._targetIndex);
|
|
|
|
|
var row = target.row();
|
|
|
|
|
targets = unit.rowAliveMembers(row);
|
|
|
|
|
} else if (scope === "FRONT ENEMY ROW") {
|
|
|
|
|
var unit = this.opponentsUnit();
|
|
|
|
|
for (var i = 1; i < Yanfly.Param.RowMaximum + 1; ++i) {
|
|
|
|
|
if (unit.rowAliveSize(i) > 0) return unit.rowAliveMembers(i);
|
|
|
|
|
}
|
|
|
|
|
} else if (scope === "FRONT ALLY ROW") {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
for (var i = 1; i < Yanfly.Param.RowMaximum + 1; ++i) {
|
|
|
|
|
if (unit.rowAliveSize(i) > 0) return unit.rowAliveMembers(i);
|
|
|
|
|
}
|
|
|
|
|
} else if (scope === "BACK ENEMY ROW") {
|
|
|
|
|
var unit = this.opponentsUnit();
|
|
|
|
|
for (var i = 10; i > 0; --i) {
|
|
|
|
|
if (unit.rowAliveSize(i) > 0) return unit.rowAliveMembers(i);
|
|
|
|
|
}
|
|
|
|
|
} else if (scope === "BACK ALLY ROW") {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
for (var i = 10; i > 0; --i) {
|
|
|
|
|
if (unit.rowAliveSize(i) > 0) return unit.rowAliveMembers(i);
|
|
|
|
|
}
|
|
|
|
|
} else if (scope === "SPECIFIC ENEMY ROW") {
|
|
|
|
|
var unit = this.opponentsUnit();
|
|
|
|
|
var i = this.item().rowTarget;
|
|
|
|
|
return unit.rowAliveMembers(i);
|
|
|
|
|
} else if (scope === "SPECIFIC ALLY ROW") {
|
|
|
|
|
var unit = this.friendsUnit();
|
|
|
|
|
var i = this.item().rowTarget;
|
|
|
|
|
return unit.rowAliveMembers(i);
|
|
|
|
|
}
|
|
|
|
|
return targets;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Window_Help
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
if (Imported.YEP_BattleEngineCore) {
|
|
|
|
|
Yanfly.Target.Window_Help_setBattler = Window_Help.prototype.setBattler;
|
|
|
|
|
Window_Help.prototype.setBattler = function (battler) {
|
|
|
|
|
this._battler = battler;
|
|
|
|
|
Yanfly.Target.Window_Help_setBattler.call(this, battler);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Window_Help_specialSelectionText = Window_Help.prototype.specialSelectionText;
|
|
|
|
|
Window_Help.prototype.specialSelectionText = function (action) {
|
|
|
|
|
BattleManager.resetSelection();
|
|
|
|
|
if (!action) return false;
|
|
|
|
|
if (action.item().customTargetText !== "") return true;
|
|
|
|
|
if (action.isForRow()) return true;
|
|
|
|
|
return Yanfly.Target.Window_Help_specialSelectionText.call(this, action);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Window_Help_drawSpecialSelectionText = Window_Help.prototype.drawSpecialSelectionText;
|
|
|
|
|
Window_Help.prototype.drawSpecialSelectionText = function (action) {
|
|
|
|
|
if (action.item().customTargetText !== "") {
|
|
|
|
|
BattleManager.startAllSelection();
|
|
|
|
|
var wx = 0;
|
|
|
|
|
var wy = (this.contents.height - this.lineHeight()) / 2;
|
|
|
|
|
var text = this.makeCustomTargetText(action);
|
|
|
|
|
this.drawText(text, wx, wy, this.contents.width, "center");
|
|
|
|
|
} else if (action.isForMultiple()) {
|
|
|
|
|
BattleManager.startAllSelection();
|
|
|
|
|
var wx = 0;
|
|
|
|
|
var wy = (this.contents.height - this.lineHeight()) / 2;
|
|
|
|
|
var text = this.makeTargetMultipleOfText(action);
|
|
|
|
|
this.drawText(text, wx, wy, this.contents.width, "center");
|
|
|
|
|
} else if (action.isForRow()) {
|
|
|
|
|
this.makeTargetRowText(action);
|
|
|
|
|
} else if (action.isForRandomAny()) {
|
|
|
|
|
var wx = 0;
|
|
|
|
|
var wy = (this.contents.height - this.lineHeight()) / 2;
|
|
|
|
|
var fmt = Yanfly.Param.BECHlpRandomAnyTx;
|
|
|
|
|
var number = action.item().randomTargets;
|
|
|
|
|
var text = fmt.format(Yanfly.Util.toGroup(number));
|
|
|
|
|
this.drawText(text, wx, wy, this.contents.width, "center");
|
|
|
|
|
} else if (action.isForEverybody()) {
|
|
|
|
|
BattleManager.startAllSelection();
|
|
|
|
|
var wx = 0;
|
|
|
|
|
var wy = (this.contents.height - this.lineHeight()) / 2;
|
|
|
|
|
var text = Yanfly.Param.BECHlpEverybodyTx;
|
|
|
|
|
this.drawText(text, wx, wy, this.contents.width, "center");
|
|
|
|
|
} else if (action.isForAllButUser()) {
|
|
|
|
|
BattleManager.startAllSelection();
|
|
|
|
|
var wx = 0;
|
|
|
|
|
var wy = (this.contents.height - this.lineHeight()) / 2;
|
|
|
|
|
var fmt = Yanfly.Param.BECHlpAllBTx;
|
|
|
|
|
var allies = Yanfly.Param.BECHelpAlliesTx;
|
|
|
|
|
var user = Yanfly.Param.BECHelpUserTx;
|
|
|
|
|
var text = fmt.format(allies, user);
|
|
|
|
|
this.drawText(text, wx, wy, this.contents.width, "center");
|
|
|
|
|
} else {
|
|
|
|
|
Yanfly.Target.Window_Help_drawSpecialSelectionText.call(this, action);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
} // Imported.YEP_BattleEngineCore
|
|
|
|
|
|
|
|
|
|
Window_Help.prototype.makeCustomTargetText = function (action) {
|
|
|
|
|
var text = "";
|
|
|
|
|
var s = $gameSwitches._data;
|
|
|
|
|
var v = $gameVariables._data;
|
|
|
|
|
var user = BattleManager._subject;
|
|
|
|
|
var a = user;
|
|
|
|
|
var subject = user;
|
|
|
|
|
var b = user;
|
|
|
|
|
var target = user;
|
|
|
|
|
var code = action.item().customTargetText;
|
|
|
|
|
try {
|
|
|
|
|
eval(code);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
Yanfly.Util.displayError(e, code, "MAKE CUSTOM TARGET TEXT ERROR");
|
|
|
|
|
}
|
|
|
|
|
return text;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Window_Help.prototype.makeTargetMultipleOfText = function (action) {
|
|
|
|
|
var fmt = Yanfly.Param.TargetMultipleTx;
|
|
|
|
|
if (action.isForEverybody()) {
|
|
|
|
|
var targets = Yanfly.Param.TargetMultiEvery;
|
|
|
|
|
} else if (action.isForFriend()) {
|
|
|
|
|
var targets = Yanfly.Param.TargetMultiAllies;
|
|
|
|
|
} else {
|
|
|
|
|
var targets = Yanfly.Param.TargetMultiFoes;
|
|
|
|
|
}
|
|
|
|
|
var param = action.item().multipleOf[1];
|
|
|
|
|
if (param === "LEVEL") {
|
|
|
|
|
param = TextManager.level;
|
|
|
|
|
} else if (param === "HP") {
|
|
|
|
|
param = TextManager.hp;
|
|
|
|
|
} else if (param === "MP") {
|
|
|
|
|
param = Textmanager.mp;
|
|
|
|
|
} else if (param === "TP") {
|
|
|
|
|
param = Textmanager.tp;
|
|
|
|
|
} else {
|
|
|
|
|
param = TextManager.param(param);
|
|
|
|
|
}
|
|
|
|
|
var number = action.item().multipleOf[2];
|
|
|
|
|
var text = fmt.format(targets, param, Yanfly.Util.toGroup(number));
|
|
|
|
|
return text;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Window_Help.prototype.makeTargetRowText = function (action) {
|
|
|
|
|
action.setTarget(this._battler.index());
|
|
|
|
|
BattleManager.startAllSelection();
|
|
|
|
|
var wx = 0;
|
|
|
|
|
var wy = (this.contents.height - this.lineHeight()) / 2;
|
|
|
|
|
var scope = action.item().scope;
|
|
|
|
|
if (scope === "ENEMY ROW" || scope === "ALLY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetHlpRowTx;
|
|
|
|
|
var text = fmt.format(this._battler.name());
|
|
|
|
|
} else if (scope === "FRONT ENEMY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetFrontRow;
|
|
|
|
|
var text = fmt.format(Yanfly.Param.TargetRowEnemies);
|
|
|
|
|
} else if (scope === "BACK ENEMY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetBackRow;
|
|
|
|
|
var text = fmt.format(Yanfly.Param.TargetRowEnemies);
|
|
|
|
|
} else if (scope === "SPECIFIC ENEMY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetSpcRow;
|
|
|
|
|
var text = fmt.format(Yanfly.Param.TargetRowEnemies);
|
|
|
|
|
} else if (scope === "FRONT ALLY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetFrontRow;
|
|
|
|
|
var text = fmt.format(Yanfly.Param.TargetRowAllies);
|
|
|
|
|
} else if (scope === "BACK ALLY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetBackRow;
|
|
|
|
|
var text = fmt.format(Yanfly.Param.TargetRowAllies);
|
|
|
|
|
} else if (scope === "SPECIFIC ALLY ROW") {
|
|
|
|
|
var fmt = Yanfly.Param.TargetSpcRow;
|
|
|
|
|
var text = fmt.format(Yanfly.Param.TargetRowAllies);
|
|
|
|
|
}
|
|
|
|
|
this.drawText(text, wx, wy, this.contents.width, "center");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Window_EnemyVisualSelect
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
if (Imported.YEP_BattleEngineCore) {
|
|
|
|
|
Yanfly.Target.Window_EnemyVisualSelect_isShowWindow = Window_EnemyVisualSelect.prototype.isShowWindow;
|
|
|
|
|
Window_EnemyVisualSelect.prototype.isShowWindow = function () {
|
|
|
|
|
if (BattleManager.customTargetSelectGroup().length > 0) {
|
|
|
|
|
return BattleManager.customTargetSelectGroup().contains(this._battler);
|
|
|
|
|
}
|
|
|
|
|
return Yanfly.Target.Window_EnemyVisualSelect_isShowWindow.call(this);
|
|
|
|
|
};
|
|
|
|
|
} // Imported.YEP_BattleEngineCore
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// Scene_Battle
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Scene_Battle_onEnemyOk = Scene_Battle.prototype.onEnemyOk;
|
|
|
|
|
Scene_Battle.prototype.onEnemyOk = function () {
|
|
|
|
|
BattleManager.clearCustomTargetSelectGroup();
|
|
|
|
|
Yanfly.Target.Scene_Battle_onEnemyOk.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Scene_Battle_onEnemyCancel = Scene_Battle.prototype.onEnemyCancel;
|
|
|
|
|
Scene_Battle.prototype.onEnemyCancel = function () {
|
|
|
|
|
BattleManager.clearCustomTargetSelectGroup();
|
|
|
|
|
Yanfly.Target.Scene_Battle_onEnemyCancel.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Scene_Battle_onActorOk = Scene_Battle.prototype.onActorOk;
|
|
|
|
|
Scene_Battle.prototype.onActorOk = function () {
|
|
|
|
|
BattleManager.clearCustomTargetSelectGroup();
|
|
|
|
|
Yanfly.Target.Scene_Battle_onActorOk.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Yanfly.Target.Scene_Battle_onActorCancel = Scene_Battle.prototype.onActorCancel;
|
|
|
|
|
Scene_Battle.prototype.onActorCancel = function () {
|
|
|
|
|
BattleManager.clearCustomTargetSelectGroup();
|
|
|
|
|
Yanfly.Target.Scene_Battle_onActorCancel.call(this);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// 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.isNwjs() && Utils.isOptionValid("test")) {
|
|
|
|
|
if (!require("nw.gui").Window.get().isDevToolsOpen()) {
|
|
|
|
|
require("nw.gui").Window.get().showDevTools();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
|
// End of File
|
|
|
|
|
//=============================================================================
|