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_X_EquipRequirements.js

995 lines
35 KiB
JavaScript

//=============================================================================
// Yanfly Engine Plugins - Equip Core Extension - Equip Requirements
// YEP_X_EquipRequirements.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_X_EquipRequirements = true;
var Yanfly = Yanfly || {};
Yanfly.EqReq = Yanfly.EqReq || {};
Yanfly.EqReq.version = 1.06;
//=============================================================================
/*:
* @plugindesc v1.06 装备限制
* @author Yanfly Engine Plugins
*
* @param ---全局---
* @default
*
* @param Requirement Window
* @text 需求窗口
* @desc 添加装备菜单的需求窗口
* Add the requirement window for the Equip menu?
* NO - false YES - true
* @default true
*
* @param Battle Test Ignore
* @text 战斗测试忽略
* @desc 在战斗测试中忽略装备要求
* Ignore equip requirements during battle test?
* NO - false YES - true
* @default true
*
* @param ---窗口---
* @default
*
* @param Requirement Title
* @text 需求标题
* @desc The title used for equipment requirements.
* @default 要求
*
* @param No Requirement
* @text 无要求
* @desc The text used to display no requirements needed.
* @default 无要求!
*
* @param Positive Color
* @text 正色
* @desc Text color used for positive color.
* @default 24
*
* @param Negative Color
* @text 负色
* @desc Text color used for positive color.
* @default 25
*
* @param At Least Text
* @text 至少文本
* @desc The text used to describe >= a parameter.
* %1 - Parameter %2 - Requirement %3 - Compare
* @default \c[16]最小值 %1:\c[0] %2 (%3)
*
* @param At Most Text
* @text 最多文本
* @desc The text used to describe >= a parameter.
* %1 - Parameter %2 - Requirement %3 - Compare
* @default \c[16]最大值 %1:\c[0] %2 (%3)
*
* @param Draw Classes
* @text 绘图类
* @desc Draw the classes required?
* NO - false YES - true
* @default true
*
* @param Class Style
* @text 类风格
* @desc If classes are drawn, what style to draw them in?
* 0 - Name Only 1 - Icon Only 2 - Icon and Name
* @default 0
*
* @param Class Text
* @text 类文本
* @desc Text displayed to say what class is allowed.
* @default :
*
* @param Draw Skills
* @text 绘画技巧
* @desc Draw the skills required?
* NO - false YES - true
* @default true
*
* @param Skill Style
* @text 技能风格
* @desc If skills are drawn, what style to draw them in?
* 0 - Name Only 1 - Icon Only 2 - Icon and Name
* @default 2
*
* @param Skill Text
* @text 技能文本
* @desc Text displayed to say what skills are needed.
* @default 技能:
*
* @param Draw Switches
* @text 绘图开关
* @desc Draw the switch names required?
* NO - false YES - true
* @default true
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* 这个插件需要YEP_EquipCore.js请把它放在YEP_EquipCore.js下面
*
* 设置装备限制例如等级限制状态限制这个插件可以提供单独的装备限制窗
* 口给玩家告诉他们需要什么
*
* ============================================================================
* Notetags
* ============================================================================
*
* 你可以使用标签来设置限制
*
* Weapon and Armor Notetags:
*
* <Equip Requirement>
* requirement
* requirement
* </Equip Requirement>
* -主要需要放在这些标签里面你可以设置多个需求.
* You can have a multitude of requirements for your weapons/armors. Replace
* 'requirement' with any of the following below:
*
* Weapon and Armor Requiprements:
*
* param > x
* param >= x
* param === x
* param <= x
* param < x
* 设置等级状态等等限制这些数值指的是基础数值而不是最后叠加数值
* This will make the piece of equipment require the
* actor's base parameter to be greater than (>), greater than or equal to
* (>=), equal to (===), less than or equal to (<=), or less than (<). This
* is NOT the value for the total parameter, only the base parameter. The
* base parameter is calculated by the user's class parameter value, any
* bonuses received by equipment and/or permanent stat increases.
*
* class: x
* class: name
* - 设置需要职业 x.
* If 'name' is used, priority will be given to the class with the highest ID
* in the database. Insert multiple of these requirements to add more
* classes. Having multiple classes will mean that the actor can be any of
* those classes to be able to equip the gear.
*
* skill: x
* skill: name
* - 设置需求技能
* skill x. If 'name' is used, priority will be given to the skill with the
* highest ID in the database. Insert multiple of these requirements to add
* more skills. Having multiple skills means the actor must have learned ALL
* of the skills to be able to equip the gear.
* 玩家必须通过学习习得这个技能如果通过特性赋予则不会生效
*
* switch: x
* - 需要开关x打开. If it isn't, the piece of equipment
* cannot be worn. Insert multiple of these to add more switches that are
* are required to be on.
*
* unique only
* - This will make the piece of equipment to be "unique", rendering the
* actor to be unable to wear more than 1 of its kind.
*
* ============================================================================
* Lunatic Mode - Custom Equip Requirement Conditions
* ============================================================================
*
* For those with JavaScript proficiency, you can use these notetags to give
* certain pieces of equipment a special requirement before it can be equipped.
*
* Weapon and Armor Notetags:
*
* <Custom Equip Requirement Condition>
* if (user.name() === 'Harold') {
* condition = true;
* } else {
* condition = false;
* }
* </Custom Equip Requirement Condition>
* The 'condition' variable will determine whether or not the piece of
* equipment can be worn by the user. If 'condition' returns 'true', then the
* piece of equipment can be worn. If 'condition' returns 'false', then the
* piece of equipment can't be worn.
*
* ============================================================================
* Lunatic Mode - Custom Equip Requirement Text
* ============================================================================
*
* For those with JavaScript proficiency, you can use these notetags to alter
* the text displayed in the Requirement Window.
*
* Weapon and Armor Notetags:
*
* <Custom Equip Requirement Text>
* text = user.name() + ' has used this sword since young!\n';
* text += 'This is another line for the text!'
* </Custom Equip Requirement Text>
* For those who would like to write custom text for the Requirement Window,
* you can use this notetag. Text codes are allowed here. Use \n for line
* breaks. If you plan on using text codes, \i[4] would appear as \\i[4].
* Whatever value the 'text' variable has at the end will determine the text
* that will be displayed.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.06:
* - Lunatic Mode fail safes added.
*
* Version 1.05a:
* - Fixed a bug that caused unremovable items to be removed.
* - Added anti-crash for non-existent actors.
*
* Version 1.04:
* - Fixed a bug that caused stat comparisons to remain after cancel.
*
* Version 1.03:
* - Notetags now allows spaces (whitespace) to be before the requirements.
*
* Version 1.02:
* - Fixed a bug where Optimize was able to bypass equip requirements.
*
* Version 1.01:
* - Updated for RPG Maker MV version 1.1.0.
*
* Version 1.00:
* - Finished Plugin!
*/
//=============================================================================
if (Imported.YEP_EquipCore) {
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('YEP_X_EquipRequirements');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.EqReqWindow = String(Yanfly.Parameters['Requirement Window']);
Yanfly.Param.EqReqWindow = eval(Yanfly.Param.EqReqWindow);
Yanfly.Param.EqReqBTest = String(Yanfly.Parameters['Battle Test Ignore']);
Yanfly.Param.EqReqBTest = eval(Yanfly.Param.EqReqBTest);
Yanfly.Param.EqReqTitle = String(Yanfly.Parameters['Requirement Title']);
Yanfly.Param.EqReqNone = String(Yanfly.Parameters['No Requirement']);
Yanfly.Param.EqReqPosColor = Number(Yanfly.Parameters['Positive Color']);
Yanfly.Param.EqReqNegColor = Number(Yanfly.Parameters['Negative Color']);
Yanfly.Param.EqReqAtLeast = String(Yanfly.Parameters['At Least Text']);
Yanfly.Param.EqReqAtMost = String(Yanfly.Parameters['At Most Text']);
Yanfly.Param.EqReqClasses = eval(String(Yanfly.Parameters['Draw Classes']));
Yanfly.Param.EqReqClassStyle = Number(Yanfly.Parameters['Class Style']);
Yanfly.Param.EqReqClassText = String(Yanfly.Parameters['Class Text']);
Yanfly.Param.EqReqSkills = eval(String(Yanfly.Parameters['Draw Skills']));
Yanfly.Param.EqReqSkillStyle = Number(Yanfly.Parameters['Skill Style']);
Yanfly.Param.EqReqSkillText = String(Yanfly.Parameters['Skill Text']);
Yanfly.Param.EqReqSwitches = eval(String(Yanfly.Parameters['Draw Switches']));
//=============================================================================
// DataManager
//=============================================================================
Yanfly.EqReq.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function() {
if (!Yanfly.EqReq.DataManager_isDatabaseLoaded.call(this)) return false;
if (!Yanfly._loaded_YEP_X_EquipRequirements) {
this.processEqReqNotetagsC($dataClasses);
this.processEqReqNotetagsS($dataSkills);
this.processEqReqNotetags1($dataWeapons);
this.processEqReqNotetags1($dataArmors);
Yanfly._loaded_YEP_X_EquipRequirements = true;
}
return true;
};
DataManager.processEqReqNotetagsC = function(group) {
if (Yanfly.ClassIdRef) return;
Yanfly.ClassIdRef = {};
for (var n = 1; n < group.length; n++) {
var obj = group[n];
if (obj.name.length <= 0) continue;
Yanfly.ClassIdRef[obj.name.toUpperCase()] = n;
}
};
DataManager.processEqReqNotetagsS = function(group) {
if (Yanfly.SkillIdRef) return;
Yanfly.SkillIdRef = {};
for (var n = 1; n < group.length; n++) {
var obj = group[n];
if (obj.name.length <= 0) continue;
Yanfly.SkillIdRef[obj.name.toUpperCase()] = n;
}
};
DataManager.processEqReqNotetags1 = function(group) {
var noteA1 = /<(?:EQUIP REQUIREMENT|EQUIP REQUIREMENTS|REQUIREMENT)>/i;
var noteA2 = /<\/(?:EQUIP REQUIREMENT|EQUIP REQUIREMENTS|REQUIREMENT)>/i;
var noteB1 = /<(?:CUSTOM EQUIP REQUIREMENT TEXT)>/i;
var noteB2 = /<\/(?:CUSTOM EQUIP REQUIREMENT TEXT)>/i;
var noteC1 = /<(?:CUSTOM EQUIP REQUIREMENT CONDITION)>/i;
var noteC2 = /<\/(?:CUSTOM EQUIP REQUIREMENT CONDITION)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.equipRequirements = {
atLeast: [0, 0, 0, 0, 0, 0, 0, 0, 0],
atMost: [0, 0, 0, 0, 0, 0, 0, 0, 0],
classes: [],
skills: [],
switches: [],
unique: false
};
var evalMode = 'none';
obj.customEquipReqText = '';
obj.customEquipReqCondition = '';
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(noteA1)) {
evalMode = 'equip requirements';
} else if (line.match(noteA2)) {
evalMode = 'none';
} else if (evalMode === 'equip requirements') {
this.makeEquipRequirement(obj, line);
} else if (line.match(noteB1)) {
evalMode = 'custom equip requirement text';
} else if (line.match(noteB2)) {
evalMode = 'none';
} else if (evalMode === 'custom equip requirement text') {
obj.customEquipReqText = obj.customEquipReqText + line + '\n';
} else if (line.match(noteC1)) {
evalMode = 'custom equip requirement condition';
} else if (line.match(noteC2)) {
evalMode = 'none';
} else if (evalMode === 'custom equip requirement condition') {
obj.customEquipReqCondition = obj.customEquipReqCondition + line + '\n';
}
}
}
};
DataManager.makeEquipRequirement = function(obj, line) {
if (line.match(/UNIQUE ONLY/i)) {
obj.equipRequirements['unique'] = true;
} else if (line.match(/SWITCH:[ ](\d+)/i)) {
obj.equipRequirements['switches'].push(parseInt(RegExp.$1));
} else if (line.match(/CLASS:[ ](\d+)/i)) {
obj.equipRequirements['classes'].push(parseInt(RegExp.$1));
} else if (line.match(/CLASS:[ ](.*)/i)) {
var name = String(RegExp.$1).toUpperCase();
if (Yanfly.ClassIdRef[name]) {
var id = Yanfly.ClassIdRef[name];
obj.equipRequirements['classes'].push(id);
}
} else if (line.match(/SKILL:[ ](\d+)/i)) {
obj.equipRequirements['skills'].push(parseInt(RegExp.$1));
} else if (line.match(/SKILL:[ ](.*)/i)) {
var name = String(RegExp.$1).toUpperCase();
if (Yanfly.SkillIdRef[name]) {
var id = Yanfly.SkillIdRef[name];
obj.equipRequirements['skills'].push(id);
}
} else if (line.match(/(.*)[ ]>=[ ](\d+)/i)) {
var stat = String(RegExp.$1).toUpperCase();
stat = this.getEquipRequirementStatIndex(stat);
var value = parseInt(RegExp.$2);
obj.equipRequirements['atLeast'][stat] = value;
} else if (line.match(/(.*)[ ]>[ ](\d+)/i)) {
var stat = String(RegExp.$1).toUpperCase();
stat = this.getEquipRequirementStatIndex(stat);
var value = parseInt(RegExp.$2) + 1;
obj.equipRequirements['atLeast'][stat] = value;
} else if (line.match(/(.*)[ ]<=[ ](\d+)/i)) {
var stat = String(RegExp.$1).toUpperCase();
stat = this.getEquipRequirementStatIndex(stat);
var value = parseInt(RegExp.$2);
obj.equipRequirements['atMost'][stat] = value;
} else if (line.match(/(.*)[ ]<[ ](\d+)/i)) {
var stat = String(RegExp.$1).toUpperCase();
stat = this.getEquipRequirementStatIndex(stat);
var value = parseInt(RegExp.$2) + 1;
obj.equipRequirements['atMost'][stat] = value;
} else if (line.match(/(.*)[ ](?:=|==|===)[ ](\d+)/i)) {
var stat = String(RegExp.$1).toUpperCase();
stat = this.getEquipRequirementStatIndex(stat);
var value = parseInt(RegExp.$2);
obj.equipRequirements['atLeast'][stat] = value;
obj.equipRequirements['atMost'][stat] = value;
}
};
DataManager.getEquipRequirementStatIndex = function(stat) {
stat = stat.trim();
if (['MAX HP', 'MAXHP', 'HP'].contains(stat)) {
return 0;
} else if (['MAX MP', 'MAXMP', 'MP', 'MAX SP', 'MAXSP',
'SP'].contains(stat)) {
return 1;
} else if (['ATK', 'STR'].contains(stat)) {
return 2;
} else if (['DEF'].contains(stat)) {
return 3;
} else if (['MAT', 'INT', 'SPI'].contains(stat)) {
return 4;
} else if (['MDF', 'RES'].contains(stat)) {
return 5;
} else if (['AGI', 'SPD'].contains(stat)) {
return 6;
} else if (['LUK'].contains(stat)) {
return 7;
} else if (['LEVEL', 'LV', 'LVL'].contains(stat)) {
return 8;
}
return null;
};
//=============================================================================
// MainCode
//=============================================================================
Yanfly.EqReq.Game_BattlerBase_refresh = Game_BattlerBase.prototype.refresh;
Game_BattlerBase.prototype.refresh = function() {
this._equipReq = undefined;
Yanfly.EqReq.Game_BattlerBase_refresh.call(this);
};
Yanfly.EqReq.Game_BattlerBase_canEquip = Game_BattlerBase.prototype.canEquip;
Game_BattlerBase.prototype.canEquip = function(item) {
var value = Yanfly.EqReq.Game_BattlerBase_canEquip.call(this, item);
if (!value) return false;
if (BattleManager.isBattleTest() && Yanfly.Param.EqReqBTest) return value;
if (!$gameTemp._optimizing) {
if (SceneManager._scene instanceof Scene_Equip) return value;
if (this._equipReq !== undefined) return this._equipReq;
}
this._equipReq = this.meetAllEquipRequirements(item)
return this._equipReq;
};
Game_BattlerBase.prototype.equips = function() {
return [];
};
Game_BattlerBase.prototype.meetAllEquipRequirements = function(item) {
if (!item.equipRequirements) {
if (item.baseItemId) {
item.equipRequirements = DataManager.getBaseItem(item).equipRequirements;
} else {
return true;
}
}
if (!this.meetEquipParamRequirements(item)) return false;
if (!this.meetEquipClassRequirements(item)) return false;
if (!this.meetEquipSkillRequirements(item)) return false;
if (!this.meetEquipSwitchRequirements(item)) return false;
if (!this.meetEquipUniqueRequirements(item)) return false;
if (!this.meetEquipEvalRequirements(item)) return false;
return true;
};
Game_BattlerBase.prototype.meetEquipParamRequirements = function(item) {
var requirements = item.equipRequirements;
for (var i = 0; i < 9; ++i) {
if (i === 8) {
var param = this.level;
} else {
var param = this.paramBase(i) + this.paramPlus(i);
}
if (requirements['atLeast'][i] > 0) {
if (requirements['atLeast'][i] > param) return false;
}
if (requirements['atMost'][i] > 0) {
if (requirements['atMost'][i] < param) return false;
}
}
return true;
};
Game_BattlerBase.prototype.meetEquipClassRequirements = function(item) {
var requirements = item.equipRequirements;
var classes = requirements['classes'];
if (classes.length <= 0) return true;
if (classes.contains(this.currentClass().id)) return true;
return false;
};
Game_BattlerBase.prototype.meetEquipSkillRequirements = function(item) {
var requirements = item.equipRequirements;
var skills = requirements['skills'];
var length = skills.length;
if (length <= 0) return true;
for (var i = 0; i < length; ++i) {
var skillId = skills[i];
if (!this.isLearnedSkill(skillId)) return false;
}
return true;
};
Game_BattlerBase.prototype.meetEquipSwitchRequirements = function(item) {
var requirements = item.equipRequirements;
var switches = requirements['switches'];
var length = switches.length;
for (var i = 0; i < length; ++i) {
var sw = switches[i];
if (!$gameSwitches.value(sw)) return false;
}
return true;
};
Game_BattlerBase.prototype.meetEquipUniqueRequirements = function(item) {
if (this.equips().contains(item)) return true;
var requirements = item.equipRequirements;
if (!requirements['unique']) return true;
var length = this.equips().length;
for (var i = 0; i < length; ++i) {
var obj = this.equips()[i];
if (!obj) continue;
if (obj.id === item.id) return false;
if (obj.baseItemId && item.baseItemId) {
if (obj.baseItemId === item.baseItemId) return false;
}
}
return true;
};
Game_BattlerBase.prototype.meetEquipEvalRequirements = function(item) {
if (item.customEquipReqCondition === '') return true;
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 = item.customEquipReqCondition;
try {
eval(code);
} catch (e) {
Yanfly.Util.displayError(e, code, 'EQUIP REQUIREMENT EVAL ERROR');
}
return condition;
};
//=============================================================================
// Window_EquipSlot
//=============================================================================
Window_EquipSlot.prototype.setRequirementWindow = function(target) {
this._requirementWindow = target;
this.update();
};
Yanfly.EqReq.Window_EqSlot_updateHelp = Window_EquipSlot.prototype.updateHelp;
Window_EquipSlot.prototype.updateHelp = function() {
Yanfly.EqReq.Window_EqSlot_updateHelp.call(this);
if (SceneManager._scene instanceof Scene_Equip && this._requirementWindow) {
this._requirementWindow.setItem(this.item());
}
};
//=============================================================================
// Window_EquipItem
//=============================================================================
Yanfly.EqReq.Window_EquipItem_isEnabled = Window_EquipItem.prototype.isEnabled;
Window_EquipItem.prototype.isEnabled = function(item) {
if (item !== null && this._actor) {
if (!this._actor.meetAllEquipRequirements(item)) return false;
}
return Yanfly.EqReq.Window_EquipItem_isEnabled.call(this, item);
};
Window_EquipItem.prototype.setRequirementWindow = function(target) {
this._requirementWindow = target;
this.update();
};
Yanfly.EqReq.Window_EqItem_updateHelp = Window_EquipItem.prototype.updateHelp;
Window_EquipItem.prototype.updateHelp = function() {
Yanfly.EqReq.Window_EqItem_updateHelp.call(this);
if (SceneManager._scene instanceof Scene_Equip && this._requirementWindow) {
this._requirementWindow.setItem(this.item());
}
};
//=============================================================================
// Window_EquipRequirement
//=============================================================================
function Window_EquipRequirement() {
this.initialize.apply(this, arguments);
}
Window_EquipRequirement.prototype = Object.create(Window_Base.prototype);
Window_EquipRequirement.prototype.constructor = Window_EquipRequirement;
Window_EquipRequirement.prototype.initialize = function(wx, wy, ww, wh) {
Window_Base.prototype.initialize.call(this, wx, wy, ww, wh);
this._actor = null;
this._item = null;
this.refresh();
};
Window_EquipRequirement.prototype.setActor = function(actor) {
if (this._actor === actor) return;
this._actor = actor;
this.refresh();
};
Window_EquipRequirement.prototype.setItem = function(item) {
if (this._item === item) return;
this._item = item;
this.refresh();
};
Window_EquipRequirement.prototype.itemRect = function(index) {
var rect = new Rectangle();
rect.width = this.contents.width;
rect.height = this.lineHeight();
rect.x = 0;
rect.y = index * rect.height;
return rect;
};
Window_EquipRequirement.prototype.drawDarkRect = function(dx, dy, dw, dh) {
var color = this.gaugeBackColor();
this.changePaintOpacity(false);
this.contents.fillRect(dx + 1, dy + 1, dw - 2, dh - 2, color);
this.changePaintOpacity(true);
};
Window_EquipRequirement.prototype.refresh = function() {
this.contents.clear();
this.checkActor();
if (!this._actor) return;
var length = Math.ceil(this.contents.height / this.lineHeight());
for (var i = 0; i < length; ++i) {
this.drawItem(i);
}
if (!this._item) return;
var dy = this.drawRequirementTitle();
if (this.drawRequirements(dy) === dy) this.drawNoRequirements(dy);
};
Window_EquipRequirement.prototype.checkActor = function() {
if (this._actor) return;
this.setActor(SceneManager._scene._actor);
};
Window_EquipRequirement.prototype.drawItem = function(index) {
var rect = this.itemRect(index);
this.drawDarkRect(rect.x, rect.y, rect.width, rect.height);
};
Window_EquipRequirement.prototype.drawRequirementTitle = function() {
this.resetFontSettings();
this.changeTextColor(this.systemColor());
var ww = this.contents.width;
this.drawText(Yanfly.Param.EqReqTitle, 0, 0, ww, 'center');
return this.lineHeight();
};
Window_EquipRequirement.prototype.getRequirements = function() {
var requirements = this._item.equipRequirements;
if (!requirements) {
if (this._item.baseItemId) {
this._item.equipRequirements =
DataManager.getBaseItem(this._item).equipRequirements;
requirements = this._item.equipRequirements;
}
}
return requirements;
};
Window_EquipRequirement.prototype.drawRequirements = function(dy) {
if (!this.getRequirements()) return dy;
if (Yanfly.Param.EqReqClasses) dy = this.drawClassRequirements(dy);
dy = this.drawLevelRequirements(dy);
dy = this.drawParamRequirements(dy);
if (Yanfly.Param.EqReqSkills) dy = this.drawSkillRequirements(dy);
if (Yanfly.Param.EqReqSwitches) dy = this.drawSwitchRequirements(dy);
dy = this.drawCustomText(dy);
return dy;
};
Window_EquipRequirement.prototype.drawClassRequirements = function(dy) {
if (this._item.equipRequirements['classes'].length <= 0) return dy;
var style = Yanfly.Param.EqReqClassStyle;
var classes = this._item.equipRequirements['classes'];
var classTx = Yanfly.Param.EqReqClassText;
var currentClassId = this._actor.currentClass().id;
var length = classes.length;
var ww = this.contents.width - this.textPadding();
this.resetFontSettings();
this.changePaintOpacity(true);
this.changeTextColor(this.systemColor());
this.drawText(classTx, this.textPadding(), dy, ww);
var dx = this.textWidth(classTx) + this.textPadding();
ww -= dx;
if (style === 1 && Imported.YEP_ClassChangeCore) {
for (var i = 0; i < length; ++i) {
if (dx + Window_Base._iconHeight > this.contents.width) {
dy += this.lineHeight();
dx = this.textWidth(classTx) + this.textPadding();
}
var classId = classes[i];
this.changePaintOpacity(classId === currentClassId);
var iconIndex = $dataClasses[classId].iconIndex;
this.drawIcon(iconIndex, dx, dy + 2);
dx += Window_Base._iconHeight;
}
dy += this.lineHeight();
} else if (style === 2 && Imported.YEP_ClassChangeCore) {
for (var i = 0; i < length; ++i) {
var classId = classes[i];
this.changePaintOpacity(classId === currentClassId);
var item = $dataClasses[classId];
this.drawItemName(item, dx, dy, ww);
dy += this.lineHeight();
}
} else {
this.changeTextColor(this.normalColor());
for (var i = 0; i < length; ++i) {
var classId = classes[i];
this.changePaintOpacity(classId === currentClassId);
var name = $dataClasses[classId].name;
this.drawText(name, dx, dy, ww);
dy += this.lineHeight();
}
}
return dy;
};
Window_EquipRequirement.prototype.drawLevelRequirements = function(dy) {
this.resetFontSettings();
this.changePaintOpacity(true);
var wx = this.textPadding();
if (this._item.equipRequirements['atLeast'][8] > 0) {
var fmt = Yanfly.Param.EqReqAtLeast;
var value1 = this._item.equipRequirements['atLeast'][8];
if (this._actor.level >= value1) {
var value2 = '\\c[' + Yanfly.Param.EqReqPosColor + ']';
} else {
var value2 = '\\c[' + Yanfly.Param.EqReqNegColor + ']';
}
value2 += Yanfly.Util.toGroup(this._actor.level) + '\\c[0]';
value1 = Yanfly.Util.toGroup(value1);
var text = fmt.format(TextManager.level, value1, value2);
this.drawTextEx(text, wx, dy);
dy += this.lineHeight();
}
if (this._item.equipRequirements['atMost'][8] > 0) {
var fmt = Yanfly.Param.EqReqAtMost;
var value1 = this._item.equipRequirements['atMost'][8];
if (this._actor.level <= value1) {
var value2 = '\\c[' + Yanfly.Param.EqReqPosColor + ']';
} else {
var value2 = '\\c[' + Yanfly.Param.EqReqNegColor + ']';
}
value2 += Yanfly.Util.toGroup(this._actor.level) + '\\c[0]';
value1 = Yanfly.Util.toGroup(value1);
var text = fmt.format(TextManager.level, value1, value2);
this.drawTextEx(text, wx, dy);
dy += this.lineHeight();
}
return dy;
};
Window_EquipRequirement.prototype.drawParamRequirements = function(dy) {
this.resetFontSettings();
this.changePaintOpacity(true);
var wx = this.textPadding();
for (var i = 0; i < 8; ++i) {
if (this._item.equipRequirements['atLeast'][i] > 0) {
var fmt = Yanfly.Param.EqReqAtLeast;
var value1 = this._item.equipRequirements['atLeast'][i];
var valueA = this._actor.paramBase(i) + this._actor.paramPlus(i);
if (valueA >= value1) {
var value2 = '\\c[' + Yanfly.Param.EqReqPosColor + ']';
} else {
var value2 = '\\c[' + Yanfly.Param.EqReqNegColor + ']';
}
value2 += Yanfly.Util.toGroup(valueA) + '\\c[0]';
value1 = Yanfly.Util.toGroup(value1);
var text = fmt.format(TextManager.param(i), value1, value2);
this.drawTextEx(text, wx, dy);
dy += this.lineHeight();
}
if (this._item.equipRequirements['atMost'][i] > 0) {
var fmt = Yanfly.Param.EqReqAtMost;
var value1 = this._item.equipRequirements['atMost'][i];
if (valueA <= value1) {
var value2 = '\\c[' + Yanfly.Param.EqReqPosColor + ']';
} else {
var value2 = '\\c[' + Yanfly.Param.EqReqNegColor + ']';
}
value2 += Yanfly.Util.toGroup(valueA) + '\\c[0]';
value1 = Yanfly.Util.toGroup(value1);
var text = fmt.format(TextManager.param(i), value1, value2);
this.drawTextEx(text, wx, dy);
dy += this.lineHeight();
}
}
return dy;
};
Window_EquipRequirement.prototype.drawSkillRequirements = function(dy) {
if (this._item.equipRequirements['skills'].length <= 0) return dy;
var style = Yanfly.Param.EqReqSkillStyle;
var skills = this._item.equipRequirements['skills'];
var skillTx = Yanfly.Param.EqReqSkillText;
var length = skills.length;
var ww = this.contents.width - this.textPadding();
this.resetFontSettings();
this.changePaintOpacity(true);
this.changeTextColor(this.systemColor());
this.drawText(skillTx, this.textPadding(), dy, ww);
var dx = this.textWidth(skillTx) + this.textPadding();
ww -= dx;
if (style === 1) {
for (var i = 0; i < length; ++i) {
if (dx + Window_Base._iconHeight > this.contents.width) {
dy += this.lineHeight();
dx = this.textWidth(skillTx) + this.textPadding();
}
var skillId = skills[i];
this.changePaintOpacity(this._actor.isLearnedSkill(skillId));
var iconIndex = $dataSkills[skillId].iconIndex;
this.drawIcon(iconIndex, dx, dy + 2);
dx += Window_Base._iconHeight;
}
dy += this.lineHeight();
} else if (style === 2) {
for (var i = 0; i < length; ++i) {
var skillId = skills[i];
this.changePaintOpacity(this._actor.isLearnedSkill(skillId));
var item = $dataSkills[skillId];
this.drawItemName(item, dx, dy, ww);
dy += this.lineHeight();
}
} else {
this.changeTextColor(this.normalColor());
for (var i = 0; i < length; ++i) {
var skillId = skills[i];
this.changePaintOpacity(this._actor.isLearnedSkill(skillId));
var name = $dataSkills[skillId].name;
this.drawText(name, dx, dy, ww);
dy += this.lineHeight();
}
}
return dy;
};
Window_EquipRequirement.prototype.drawSwitchRequirements = function(dy) {
this.resetFontSettings();
this.changePaintOpacity(true);
var switches = this._item.equipRequirements['switches'];
var length = switches.length;
for (var i = 0; i < length; ++i) {
var sw = switches[i];
var name = $dataSystem.switches[sw];
name = name.replace(/<<(.*?)>>/i, '');
this.changePaintOpacity($gameSwitches.value(sw));
this.drawTextEx(name, this.textPadding(), dy);
dy += this.lineHeight();
}
this.changePaintOpacity(true)
return dy;
};
Window_EquipRequirement.prototype.drawCustomText = function(dy) {
if (this._item.customEquipReqText === '') return dy;
this.resetFontSettings();
this.changePaintOpacity(true);
var text = '';
var a = this._actor;
var user = this._actor;
var subject = this._actor;
var s = $gameSwitches._data;
var v = $gameVariables._data;
var code = this._item.customEquipReqText;
try {
eval(code);
} catch (e) {
Yanfly.Util.displayError(e, code, 'EQUIP CUSTOM TEXT ERROR');
}
this.drawTextEx(text, this.textPadding(), dy);
return dy + this.lineHeight();
};
Window_EquipRequirement.prototype.drawNoRequirements = function(dy) {
this.resetFontSettings();
this.changePaintOpacity(true);
this.changeTextColor(this.normalColor());
var ww = this.contents.width;
dy += this.lineHeight();
this.drawText(Yanfly.Param.EqReqNone, 0, dy, ww, 'center');
return dy;
};
//=============================================================================
// Scene_Equip
//=============================================================================
Yanfly.EqReq.Scene_Equip_createCompareWindow =
Scene_Equip.prototype.createCompareWindow;
Scene_Equip.prototype.createCompareWindow = function() {
Yanfly.EqReq.Scene_Equip_createCompareWindow.call(this);
if (Yanfly.Param.EqReqWindow) this.createRequirementWindow();
};
Yanfly.EqReq.Scene_Equip_refreshActor =
Scene_Equip.prototype.refreshActor;
Scene_Equip.prototype.refreshActor = function() {
Yanfly.EqReq.Scene_Equip_refreshActor.call(this);
if (this._requirementWindow) this._requirementWindow.setActor(this.actor());
};
Yanfly.EqReq.Scene_Equip_commandOptimize =
Scene_Equip.prototype.commandOptimize;
Scene_Equip.prototype.commandOptimize = function() {
$gameTemp._optimizing = true;
Yanfly.EqReq.Scene_Equip_commandOptimize.call(this);
$gameTemp._optimizing = false;
if (this._requirementWindow) this._requirementWindow.refresh();
};
Yanfly.EqReq.Scene_Equip_commandClear = Scene_Equip.prototype.commandClear;
Scene_Equip.prototype.commandClear = function() {
Yanfly.EqReq.Scene_Equip_commandClear.call(this);
if (this._requirementWindow) this._requirementWindow.refresh();
};
Scene_Equip.prototype.createRequirementWindow = function() {
var wx = this._itemWindow.width;
var wy = this._itemWindow.y;
var ww = Graphics.boxWidth - wx;
var wh = this._itemWindow.height;
this._requirementWindow = new Window_EquipRequirement(wx, wy, ww, wh);
this._slotWindow.setRequirementWindow(this._requirementWindow);
this._itemWindow.setRequirementWindow(this._requirementWindow);
this.addWindow(this._requirementWindow);
this._lowerRightWindows.push(this._requirementWindow);
};
Yanfly.EqReq.Scene_Equip_onSlotCancel = Scene_Equip.prototype.onSlotCancel;
Scene_Equip.prototype.onSlotCancel = function() {
Yanfly.EqReq.Scene_Equip_onSlotCancel.call(this);
if (this._requirementWindow) this._requirementWindow.setItem(null);
};
//=============================================================================
// 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
//=============================================================================
};