You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ycrpg/js/plugins/YEP_AutoPassiveStates.js

701 lines
26 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//=============================================================================
// Yanfly Engine Plugins - Auto Passive States
// YEP_AutoPassiveStates.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_AutoPassiveStates = true;
var Yanfly = Yanfly || {};
Yanfly.APS = Yanfly.APS || {};
Yanfly.APS.version = 1.17;
//=============================================================================
/*:
* @plugindesc v1.17 This plugin allows for some states to function as
* passives for actors, enemies, skills, and equips.
* @author Yanfly Engine Plugins
*
* @param ---Basic---
* @default
*
* @param Actor Passives
* @parent ---Basic---
* @desc These states will always appear on actors as passives.
* Place a space in between each state ID.
* @default 0
*
* @param Enemy Passives
* @parent ---Basic---
* @desc These states will always appear on enemies as passives.
* Place a space in between each state ID.
* @default 0
*
* @param Global Passives
* @parent ---Basic---
* @desc These states will always appear on all battlers as passives.
* Place a space in between each state ID.
* @default 0
*
* @param ---List---
* @default ...Requires RPG Maker MV 1.5.0+...
*
* @param Actor Passives List
* @parent ---List---
* @type state[]
* @desc These states will always appear on actors as passives.
* Use with RPG Maker MV 1.5.0+.
* @default []
*
* @param Enemy Passives List
* @parent ---List---
* @type state[]
* @desc These states will always appear on enemies as passives.
* Use with RPG Maker MV 1.5.0+.
* @default []
*
* @param Global Passives List
* @parent ---List---
* @type state[]
* @desc These states will always appear on all battlers as passives.
* Use with RPG Maker MV 1.5.0+.
* @default []
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* Passive states are states that are automatically active. You can think of
* them as an extension of traits but with more flexibility. They will always
* be there as long as the actor or enemy has auto passive state notetags.
*
* ============================================================================
* Notetags
* ============================================================================
*
* For those who would like to allocate passive states to your battlers, use
* the notetags below:
*
* Actor, Class, Skills, Weapon, Armor, Enemy Notetags:
* <Passive State: x>
* <Passive State: x, x, x>
* This will allow the actor or enemy to have state x as a passive state.
* If placed inside a weapon or armor notebox, the user will have that
* passive state.
*
* <Passive State: x to y>
* This will add the states x through y (in a sequence) for the actor or
* enemy to have as a passive state. If placed inside a weapon or armor
* notebox, the user will have that passive state.
*
* For those who don't want their passive states to always be on, you can use
* the following notetags to introduce conditions for your passive states. All
* conditions must be fulfilled in order for the passive state to appear.
*
* State Notetags:
* <Passive Condition: HP Above x%>
* <Passive Condition: HP Below x%>
* <Passive Condition: MP Above x%>
* <Passive Condition: MP Below x%>
* If the user's HP or MP is above/below x% of the MaxHP or MaxMP, this
* condition will be met for the passive state to appear.
*
* <Passive Condition: Stat Above x>
* <Passive Condition: Stat Below x>
* Replace 'stat' with 'HP', 'MP', 'TP', 'MAXHP', 'MAXMP', 'ATK', 'DEF',
* 'MAT', 'MDF', 'AGI', 'LUK'. If the above stat is above/below x, then the
* condition is met for the passive state to appear.
*
* <Passive Condition: Switch x ON>
* <Passive Condition: Switch x OFF>
* If switch x is either ON/OFF, then the condition is met for the passive
* state to appear.
*
* <Passive Condition: Variable x Above y>
* <Passive Condition: Variable x Below y>
* Replace x with the variable you wish to check to see if it's above/below
* y, then the condition is met for the passive state to appear.
*
* ============================================================================
* Lunatic Mode - Conditional Passives
* ============================================================================
*
* For those who understand a bit of JavaScript and would like for their
* passive states to appear under specific conditions, you can use this notetag
* to accomplish conditional factors.
*
* State Notetags:
* <Custom Passive Condition>
* if (user.hp / user.mhp <= 0.25) {
* condition = true;
* } else {
* condition = false;
* }
* </Custom Passive Condition>
* This enables you to input conditions to be met in order for the passive
* state to appear. If the 'condition' variable returns true, the passive
* state will appear. If the 'condition' returns false, it won't appear. If
* condition is not defined, it will return true and the passive state will
* appear on the battler.
* * Note: All non-custom passive conditions must be met before this one can
* be fulfilled and allow the custom condition to appear.
* * Note: If you decide to use a condition that requires the actor to have a
* particular state, it cannot be a passive state to prevent infinite loops.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.17:
* - Optimization update. There should be less lag spikes if there are more
* passive conditions present on a battler.
*
* Version 1.16:
* - 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.15:
* - Bug fixed that made global passives not apply to actors.
*
* Version 1.14:
* - Updated for RPG Maker MV version 1.5.0.
* - Added parameters: Actor Passives List, Enemy Passives List, and
* Global Passives List
*
* Version 1.13:
* - Lunatic Mode fail safes added.
*
* Version 1.12:
* - Implemented <Custom Passive Condition> to now affect passive state ID's
* added by Equip Battle Skills.
*
* Version 1.11:
* - Added 'Global Passives' that encompass both actors and enemies.
*
* Version 1.10:
* - Added compatibility functionality for Equip Battle Skills to add the
* equipped passive states during battle test.
*
* Version 1.09:
* - Added 'Actor Passives' and 'Enemy Passives' plugin parameters. This will
* cause all actors and enemies respectively to be affected by the listed
* states as passives.
*
* Version 1.08:
* - Fixed conditional checks to make sure all states are being checked
* properly without conflict with other conditional states.
*
* Version 1.07:
* - Updated for RPG Maker MV version 1.1.0.
*
* Version 1.06:
* - Added a mass member refresh whenever $gamePlayer is refreshed.
*
* Version 1.05a:
* - Added Lunatic Mode - <Custom Passive Condition> notetag for states.
* - Fixed a bug that would cause infinite loops.
*
* Version 1.04:
* - Added a lot of passive condition notetags for states.
* --- <Passive Condition: HP/MP Above/Below x%>
* --- <Passive Condition: Stat Above/Below x>
* --- <Passive Condition: Switch x ON/OFF>
* --- <Passive Condition: Variable x Above/Below y>
*
* Version 1.03:
* - Added refreshing whenever a new skill is learned to update passives.
*
* Version 1.02:
* - Optimized passive state calculations to reduce lag.
*
* Version 1.01:
* - Fixed a bug with having multiple passive states of the same ID.
*
* Version 1.00:
* - Finished plugin!
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.SetupParameters = function () {
Yanfly.Parameters = PluginManager.parameters("YEP_AutoPassiveStates");
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.APSActorPas = String(Yanfly.Parameters["Actor Passives"]);
Yanfly.Param.APSActorPas = Yanfly.Param.APSActorPas.split(" ");
for (var i = 0; i < Yanfly.Param.APSActorPas.length; ++i) {
Yanfly.Param.APSActorPas[i] = parseInt(Yanfly.Param.APSActorPas[i]);
Yanfly.Param.APSActorPas[i] = Yanfly.Param.APSActorPas[i] || 0;
}
var data = JSON.parse(Yanfly.Parameters["Actor Passives List"]);
for (var i = 0; i < data.length; ++i) {
var stateId = parseInt(data[i]);
if (stateId <= 0) continue;
if (Yanfly.Param.APSActorPas.contains(stateId)) continue;
Yanfly.Param.APSActorPas.push(stateId);
}
Yanfly.Param.APSEnemyPas = String(Yanfly.Parameters["Enemy Passives"]);
Yanfly.Param.APSEnemyPas = Yanfly.Param.APSEnemyPas.split(" ");
for (var i = 0; i < Yanfly.Param.APSEnemyPas.length; ++i) {
Yanfly.Param.APSEnemyPas[i] = parseInt(Yanfly.Param.APSEnemyPas[i]);
Yanfly.Param.APSEnemyPas[i] = Yanfly.Param.APSEnemyPas[i] || 0;
}
var data = JSON.parse(Yanfly.Parameters["Enemy Passives List"]);
for (var i = 0; i < data.length; ++i) {
var stateId = parseInt(data[i]);
if (stateId <= 0) continue;
if (Yanfly.Param.APSEnemyPas.contains(stateId)) continue;
Yanfly.Param.APSEnemyPas.push(stateId);
}
Yanfly.Param.APSGlobalPas = String(Yanfly.Parameters["Global Passives"]);
Yanfly.Param.APSGlobalPas = Yanfly.Param.APSGlobalPas.split(" ");
for (var i = 0; i < Yanfly.Param.APSGlobalPas.length; ++i) {
id = parseInt(Yanfly.Param.APSGlobalPas[i]);
Yanfly.Param.APSActorPas.push(id);
Yanfly.Param.APSEnemyPas.push(id);
}
var data = JSON.parse(Yanfly.Parameters["Global Passives List"]);
for (var i = 0; i < data.length; ++i) {
var stateId = parseInt(data[i]);
if (stateId <= 0) continue;
if (!Yanfly.Param.APSActorPas.contains(stateId)) {
Yanfly.Param.APSActorPas.push(stateId);
}
if (!Yanfly.Param.APSEnemyPas.contains(stateId)) {
Yanfly.Param.APSEnemyPas.push(stateId);
}
}
};
Yanfly.SetupParameters();
//=============================================================================
// DataManager
//=============================================================================
Yanfly.APS.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function () {
if (!Yanfly.APS.DataManager_isDatabaseLoaded.call(this)) return false;
if (!Yanfly._loaded_YEP_AutoPassiveStates) {
this.processAPSNotetags1($dataActors, Yanfly.Param.APSActorPas);
this.processAPSNotetags1($dataClasses);
this.processAPSNotetags1($dataEnemies, Yanfly.Param.APSEnemyPas);
this.processAPSNotetags1($dataSkills);
this.processAPSNotetags1($dataWeapons);
this.processAPSNotetags1($dataArmors);
this.processAPSNotetags2($dataStates);
Yanfly._loaded_YEP_AutoPassiveStates = true;
}
return true;
};
DataManager.processAPSNotetags1 = function (group, inheritArray) {
var note1 = /<(?:PASSIVE STATE):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
var note2 = /<(?:PASSIVE STATE):[ ](\d+)[ ](?:THROUGH|to)[ ](\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.passiveStates = [];
if (inheritArray) {
obj.passiveStates = obj.passiveStates.concat(inheritArray);
}
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
var array = JSON.parse("[" + RegExp.$1.match(/\d+/g) + "]");
obj.passiveStates = obj.passiveStates.concat(array);
} else if (line.match(note2)) {
var range = Yanfly.Util.getRange(parseInt(RegExp.$1), parseInt(RegExp.$2));
obj.passiveStates = obj.passiveStates.concat(range);
}
}
}
};
DataManager.processAPSNotetags2 = function (group) {
var note1a = /<(?:PASSIVE CONDITION):[ ](.*)[ ](?:ABOVE)[ ](\d+)([%])>/i;
var note1b = /<(?:PASSIVE CONDITION):[ ](.*)[ ](?:BELOW)[ ](\d+)([%])>/i;
var note2a = /<(?:PASSIVE CONDITION):[ ](.*)[ ](?:ABOVE)[ ](\d+)>/i;
var note2b = /<(?:PASSIVE CONDITION):[ ](.*)[ ](?:BELOW)[ ](\d+)>/i;
var note3a = /<(?:PASSIVE CONDITION):[ ]SWITCH[ ](\d+)[ ](.*)>/i;
var notez1 = /<(?:CUSTOM PASSIVE CONDITION)>/i;
var notez2 = /<\/(?:CUSTOM PASSIVE CONDITION)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.passiveCondition = "";
obj.passiveConditionEval = "";
var evalMode = "none";
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1a)) {
var rate = parseFloat(RegExp.$2) * 0.01;
var param = this.getPassiveConditionParamRate(String(RegExp.$1));
var pass = "if (" + param + " <= " + rate + ") condition = false;";
obj.passiveCondition = obj.passiveCondition + pass + "\n";
} else if (line.match(note1b)) {
var rate = parseFloat(RegExp.$2) * 0.01;
var param = this.getPassiveConditionParamRate(String(RegExp.$1));
var pass = "if (" + param + " >= " + rate + ") condition = false;";
obj.passiveCondition = obj.passiveCondition + pass + "\n";
} else if (line.match(note2a)) {
var rate = parseInt(RegExp.$2);
var param = this.getPassiveConditionParam(String(RegExp.$1));
var pass = "if (" + param + " <= " + rate + ") condition = false;";
obj.passiveCondition = obj.passiveCondition + pass + "\n";
} else if (line.match(note2b)) {
var rate = parseInt(RegExp.$2);
var param = this.getPassiveConditionParam(String(RegExp.$1));
var pass = "if (" + param + " >= " + rate + ") condition = false;";
obj.passiveCondition = obj.passiveCondition + pass + "\n";
} else if (line.match(note3a)) {
var id = parseInt(RegExp.$1);
var value = String(RegExp.$2).toUpperCase();
var pass = "";
if (["ON", "TRUE", "ENABLE", "ENABLED"].contains(value)) {
pass = "if (!$gameSwitches.value(" + id + ")) condition = false;";
}
if (["OFF", "FALSE", "DISABLE", "DISABLED"].contains(value)) {
pass = "if ($gameSwitches.value(" + id + ")) condition = false;";
}
if (pass === "") continue;
obj.passiveCondition = obj.passiveCondition + pass + "\n";
} else if (line.match(notez1)) {
evalMode = "custom passive condition";
} else if (line.match(notez2)) {
evalMode = "none";
} else if (evalMode === "custom passive condition") {
obj.passiveConditionEval = obj.passiveConditionEval + line + "\n";
}
}
obj.passiveCondition = new Function(
"condition",
"a",
"user",
"subject",
"b",
"target",
"s",
"v",
obj.passiveCondition + "\nreturn condition;"
);
obj.passiveConditionEval = new Function(
"condition",
"a",
"user",
"subject",
"b",
"target",
"s",
"v",
obj.passiveConditionEval + "\nreturn condition;"
);
}
};
DataManager.getPassiveConditionParam = function (string) {
string = string.toUpperCase();
var text = "user.";
if (["HP"].contains(string)) text += "hp";
if (["MP", "SP"].contains(string)) text += "mp";
if (["TP"].contains(string)) text += "tp";
if (["ATK"].contains(string)) text += "param(2)";
if (["DEF"].contains(string)) text += "param(3)";
if (["MAT", "INT"].contains(string)) text += "param(4)";
if (["MDF", "RES"].contains(string)) text += "param(5)";
if (["AGI"].contains(string)) text += "param(6)";
if (["LUK"].contains(string)) text += "param(7)";
if (["MAX HP", "MAXHP"].contains(string)) text += "mhp";
if (["MAX MP", "MAX SP", "MAXMP", "MAXSP"].contains(string)) text += "mmp";
if (string.match(/VARIABLE[ ](\d+)/i)) {
text = "$gameVariables.value(" + parseInt(RegExp.$1) + ")";
}
return text;
};
DataManager.getPassiveConditionParamRate = function (string) {
string = string.toUpperCase();
var text = "0";
if (["HP"].contains(string)) return "user.hpRate()";
if (["MP"].contains(string)) return "user.mpRate()";
return text;
};
//=============================================================================
// Game_BattlerBase
//=============================================================================
Yanfly.APS.Game_BattlerBase_refresh = Game_BattlerBase.prototype.refresh;
Game_BattlerBase.prototype.refresh = function () {
this._passiveStatesRaw = undefined;
Yanfly.APS.Game_BattlerBase_refresh.call(this);
};
Yanfly.APS.Game_BattlerBase_states = Game_BattlerBase.prototype.states;
Game_BattlerBase.prototype.states = function () {
var array = Yanfly.APS.Game_BattlerBase_states.call(this);
array = array.concat(this.passiveStates());
this.sortPassiveStates(array);
return array;
};
Yanfly.APS.Game_BattlerBase_isStateAffected = Game_BattlerBase.prototype.isStateAffected;
Game_BattlerBase.prototype.isStateAffected = function (stateId) {
if (this.isPassiveStateAffected(stateId)) return true;
return Yanfly.APS.Game_BattlerBase_isStateAffected.call(this, stateId);
};
Game_BattlerBase.prototype.passiveStates = function () {
var array = [];
var raw = this.passiveStatesRaw();
for (var i = 0; i < raw.length; ++i) {
var state = $dataStates[raw[i]];
if (state && array.contains(state)) continue;
array.push(state);
}
return array;
};
Game_BattlerBase.prototype.passiveStatesRaw = function () {
var array = [];
return array.filter(Yanfly.Util.onlyUnique);
};
Game_BattlerBase.prototype.getPassiveStateData = function (obj) {
if (!obj) return [];
if (!obj.passiveStates) return [];
var array = [];
for (var i = 0; i < obj.passiveStates.length; ++i) {
var stateId = obj.passiveStates[i];
if (!this.meetPassiveStateCondition(stateId)) continue;
array.push(stateId);
}
var added = this.addEquipBattleTestSkillPassives(obj);
if (added.length > 0) {
for (var i = 0; i < added.length; ++i) {
var stateId = added[i];
if (!this.meetPassiveStateCondition(stateId)) continue;
array.push(stateId);
}
}
return array;
};
Game_BattlerBase.prototype.addEquipBattleTestSkillPassives = function (obj) {
if (!Imported.YEP_EquipBattleSkills) return [];
if (!DataManager.isBattleTest()) return [];
if (!DataManager.isSkill(obj)) return [];
return obj.equipStates;
};
Game_BattlerBase.prototype.meetPassiveStateCondition = function (stateId) {
this._checkPassiveStateCondition = this._checkPassiveStateCondition || [];
if (this._checkPassiveStateCondition.contains(stateId)) return false;
var state = $dataStates[stateId];
if (!state) return false;
if (state.passiveCondition !== "") {
if (!this.passiveStateConditions(state)) return false;
}
if (state.passiveConditionEval === "") return true;
return this.passiveStateConditionEval(state);
};
Game_BattlerBase.prototype.passiveStateConditions = function (state) {
this._checkPassiveStateCondition = this._checkPassiveStateCondition || [];
this._checkPassiveStateCondition.push(state.id);
var condition = true;
var a = this;
var user = this;
var subject = this;
var b = this;
var target = this;
var s = $gameSwitches._data;
var v = $gameVariables._data;
var code = state.passiveCondition;
try {
condition = state.passiveCondition.call(this, condition, a, user, subject, b, target, s, v);
} catch (e) {
Yanfly.Util.displayError(e, code, "PASSIVE STATE CUSTOM CONDITION ERROR");
}
var index = this._checkPassiveStateCondition.indexOf(state.id);
this._checkPassiveStateCondition.splice(index, 1);
return condition;
};
Game_BattlerBase.prototype.passiveStateConditionEval = function (state) {
this._checkPassiveStateCondition = this._checkPassiveStateCondition || [];
this._checkPassiveStateCondition.push(state.id);
var condition = true;
var a = this;
var user = this;
var subject = this;
var b = this;
var target = this;
var s = $gameSwitches._data;
var v = $gameVariables._data;
var code = state.passiveConditionEval;
try {
condition = state.passiveConditionEval.call(this, condition, a, user, subject, b, target, s, v);
} catch (e) {
Yanfly.Util.displayError(e, code, "PASSIVE STATE CUSTOM CONDITION ERROR");
}
var index = this._checkPassiveStateCondition.indexOf(state.id);
this._checkPassiveStateCondition.splice(index, 1);
return condition;
};
Game_BattlerBase.prototype.sortPassiveStates = function (array) {
array.sort(function (a, b) {
var p1 = a.priority;
var p2 = b.priority;
if (p1 !== p2) return p2 - p1;
return a - b;
});
};
Game_BattlerBase.prototype.isPassiveStateAffected = function (stateId) {
return this.passiveStatesRaw().contains(stateId);
};
//=============================================================================
// Game_Battler
//=============================================================================
Yanfly.APS.Game_Battler_isStateAddable = Game_Battler.prototype.isStateAddable;
Game_Battler.prototype.isStateAddable = function (stateId) {
if (this.isPassiveStateAffected(stateId)) return false;
return Yanfly.APS.Game_Battler_isStateAddable.call(this, stateId);
};
Yanfly.APS.Game_Battler_removeState = Game_Battler.prototype.removeState;
Game_Battler.prototype.removeState = function (stateId) {
if (this.isPassiveStateAffected(stateId)) return;
Yanfly.APS.Game_Battler_removeState.call(this, stateId);
};
//=============================================================================
// Game_Actor
//=============================================================================
Game_Actor.prototype.passiveStatesRaw = function () {
if (this._passiveStatesRaw !== undefined) return this._passiveStatesRaw;
var array = Game_BattlerBase.prototype.passiveStatesRaw.call(this);
array = array.concat(this.getPassiveStateData(this.actor()));
array = array.concat(this.getPassiveStateData(this.currentClass()));
for (var i = 0; i < this.equips().length; ++i) {
var equip = this.equips()[i];
array = array.concat(this.getPassiveStateData(equip));
}
for (var i = 0; i < this._skills.length; ++i) {
var skill = $dataSkills[this._skills[i]];
array = array.concat(this.getPassiveStateData(skill));
}
this._passiveStatesRaw = array.filter(Yanfly.Util.onlyUnique);
return this._passiveStatesRaw;
};
Yanfly.APS.Game_Actor_learnSkill = Game_Actor.prototype.learnSkill;
Game_Actor.prototype.learnSkill = function (skillId) {
Yanfly.APS.Game_Actor_learnSkill.call(this, skillId);
this._passiveStatesRaw = undefined;
};
Yanfly.APS.Game_Actor_forgetSkill = Game_Actor.prototype.forgetSkill;
Game_Actor.prototype.forgetSkill = function (skillId) {
Yanfly.APS.Game_Actor_forgetSkill.call(this, skillId);
this._passiveStatesRaw = undefined;
};
//=============================================================================
// Game_Enemy
//=============================================================================
Game_Enemy.prototype.passiveStatesRaw = function () {
if (this._passiveStatesRaw !== undefined) return this._passiveStatesRaw;
var array = Game_BattlerBase.prototype.passiveStatesRaw.call(this);
array = array.concat(this.getPassiveStateData(this.enemy()));
for (var i = 0; i < this.skills().length; ++i) {
var skill = this.skills()[i];
array = array.concat(this.getPassiveStateData(skill));
}
this._passiveStatesRaw = array.filter(Yanfly.Util.onlyUnique);
return this._passiveStatesRaw;
};
if (!Game_Enemy.prototype.skills) {
Game_Enemy.prototype.skills = function () {
var skills = [];
for (var i = 0; i < this.enemy().actions.length; ++i) {
var skill = $dataSkills[this.enemy().actions[i].skillId];
if (skill) skills.push(skill);
}
return skills;
};
}
//=============================================================================
// Game_Unit
//=============================================================================
Game_Unit.prototype.refreshMembers = function () {
var group = this.allMembers();
var length = group.length;
for (var i = 0; i < length; ++i) {
var member = group[i];
if (member) member.refresh();
}
};
Game_Unit.prototype.allMembers = function () {
return this.members();
};
//=============================================================================
// Game_Player
//=============================================================================
Yanfly.APS.Game_Player_refresh = Game_Player.prototype.refresh;
Game_Player.prototype.refresh = function () {
$gameParty.refreshMembers();
Yanfly.APS.Game_Player_refresh.call(this);
};
//=============================================================================
// Utilities
//=============================================================================
Yanfly.Util = Yanfly.Util || {};
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();
}
}
};
Yanfly.Util.getRange = function (n, m) {
var result = [];
for (var i = n; i <= m; ++i) result.push(i);
return result;
};
Yanfly.Util.onlyUnique = function (value, index, self) {
return self.indexOf(value) === index;
};
//=============================================================================
// End of File
//=============================================================================