//============================================================================= // Yanfly Engine Plugins - Status Menu Core // YEP_StatusMenuCore.js //============================================================================= var Imported = Imported || {}; Imported.YEP_StatusMenuCore = true; var Yanfly = Yanfly || {}; Yanfly.Status = Yanfly.Status || {}; //============================================================================= /*: * @plugindesc v1.01a 身份状态菜单核心☁️ * @author Yanfly Engine Plugins * * @param ---设置--- * @default * * @param Command Order * @text 命令顺序 * @desc This is the order in which the command menu will appear. Use * a space to separate the individual commands. * @default General Parameters Elements States Attributes Custom Cancel * * @param Command Window Width * @text 命令窗口宽度 * @desc This is the window width for the Command Window. * @default 240 * * @param Command Window Rows * @text 命令窗口行 * @desc This is the number of rows for the Command Window. * @default 4 * * @param Command Alignment * @text 命令对齐 * @desc This is the text alignment for the Command Window. * left center right * @default center * * @param ---全局--- * @default * * @param General Command * @text 全局命令 * @desc This is how the command for 'General' will appear. * @default 角色状态 * * @param Parameters Text * @text 参数文本 * @desc This is how the word 'Parameters' will appear. * @default 状态窗口 * * @param Experience Text * @text 经验文本 * @desc This is how the word 'Experience' will appear. * @default 经验窗口 * * @param Total Format * @text 总格式 * @desc This is the word total experience. * @default 需要 %1 到下一 %2 * * @param EXP Gauge Color 1 * @text 经验条 颜色1 * @desc The skin color used in EXP Gauge Color 1 shown in the * status window. * @default 30 * * @param EXP Gauge Color 2 * @text 经验条 颜色2 * @desc The skin color used in EXP Gauge Color 2 shown in the * status window. * @default 31 * * @param ---参数--- * @default * * @param Parameters Command * @text 参数命令 * @desc This is how the command for 'Parameters' will appear. * @default 角色属性 * * @param Graph Text * @text 图形文本 * @desc This is how the words for 'Parameter Graph' appear. * @default 属性图 * * @param ATK Color * @desc This is the gauge color for ATK. * #Color1 #Color2 * @default #ed1c24 #f26c4f * * @param DEF Color * @desc This is the gauge color for DEF. * #Color1 #Color2 * @default #f7941d #fdc689 * * @param MAT Color * @desc This is the gauge color for MAT. * #Color1 #Color2 * @default #605ca8 #bd8cbf * * @param MDF Color * @desc This is the gauge color for MDF. * #Color1 #Color2 * @default #448ccb #a6caf4 * * @param AGI Color * @desc This is the gauge color for AGI. * #Color1 #Color2 * @default #39b54a #82ca9c * * @param LUK Color * @desc This is the gauge color for LUK. * #Color1 #Color2 * @default #fff568 #fffac3 * * @param ---抵制颜色--- * @default * * @param Above 300% * @desc This is the text color for rates over 300%. * @default 10 * * @param 200% to 300% * @desc This is the text color for rates over 200%. * @default 20 * * @param 150% to 200% * @desc This is the text color for rates over 150%. * @default 14 * * @param 120% to 150% * @desc This is the text color for rates over 120%. * @default 6 * * @param 100% to 120% * @desc This is the text color for rates over 100%. * @default 0 * * @param 80% to 100% * @desc This is the text color for rates over 80%. * @default 24 * * @param 50% to 80% * @desc This is the text color for rates over 50%. * @default 29 * * @param 1% to 50% * @desc This is the text color for rates over 1%. * @default 23 * * @param Exactly 0% * @desc This is the text color for rates exactly 0%. * @default 31 * * @param Below 0% * @desc This is the text color for rates below 0%. * @default 27 * * @param ---元素--- * @default * * @param Elements Command * @text 元素命令 * @desc This is how the command for 'Elements' will appear. * @default 元素抗性 * * @param Elements Decimal * @text 十进制元素 * @desc How many decimal places to display for rates. * @default 2 * * @param Element Column 1 * @text 元素列 1 * @desc These are the element ID's drawn in column 1. * Separate these element ID's with a space. * @default 1 * * @param Element Column 2 * @text 元素列 2 * @desc These are the element ID's drawn in column 2. * Separate these element ID's with a space. * @default 2 3 4 5 6 7 8 9 * * @param Element Column 3 * @text 元素列 3 * @desc These are the element ID's drawn in column 3. * Separate these element ID's with a space. * @default * * @param Element Column 4 * @text 元素列 4 * @desc These are the element ID's drawn in column 4. * Separate these element ID's with a space. * @default * * @param ---状态--- * @default * * @param States Command * @text 状态命令 * @desc This is how the command for 'States' will appear. * @default 异常状态 * * @param States Decimal * @text 状态十进制 * @desc How many decimal places to display for rates. * @default 2 * * @param States Column 1 * @text 状态栏 1 * @desc These are the state ID's drawn in column 1. * Separate these state ID's with a space. * @default 1 4 5 6 * * @param States Column 2 * @text 状态栏 2 * @desc These are the state ID's drawn in column 2. * Separate these state ID's with a space. * @default 7 8 9 10 * * @param States Column 3 * @text 状态栏 3 * @desc These are the state ID's drawn in column 3. * Separate these state ID's with a space. * @default * * @param States Column 4 * @text 状态栏 4 * @desc These are the state ID's drawn in column 4. * Separate these state ID's with a space. * @default * * @param ---属性--- * @default * * @param Attributes Command * @text 属性命令 * @desc This is how the command for 'Attributes' will appear. * @default 特殊属性 * * @param Attribute Font Size * @text 属性字体大小 * @desc The font size used to display attributes. * Default: 28 * @default 20 * * @param Attribute Decimal * @text 属性十进制 * @desc How many decimal places to display for rates. * @default 0 * * @param Attributes Column 1 * @text 属性列 1 * @desc These are the attributes drawn in column 1. * Separate these attributes with a space. * @default exr hit eva cri cev mev mrf cnt * * @param Attributes Column 2 * @text 属性列 2 * @desc These are the attributes drawn in column 2. * Separate these attributes with a space. * @default mcr tcr pdr mdr fdr grd rec pha * * @param Attributes Column 3 * @text 属性列 3 * @desc These are the attributes drawn in column 3. * Separate these attributes with a space. * @default hrg mrg trg tgr * * @param Attributes Column 4 * @text 属性列 4 * @desc These are the attributes drawn in column 4. * Separate these attributes with a space. * @default * * @param hit Name * @desc 用于此属性的文本名称 * @default 命中率 * * @param eva Name * @desc 用于此属性的文本名称 * @default 闪避率 * * @param cri Name * @desc 用于此属性的文本名称 * @default 暴击率 * * @param cev Name * @desc 用于此属性的文本名称 * @default 暴击闪避率 * * @param mev Name * @desc 用于此属性的文本名称 * @default 魔法闪避率 * * @param mrf Name * @desc 用于此属性的文本名称 * @default 魔法反击率 * * @param cnt Name * @desc 用于此属性的文本名称 * @default 反击率 * * @param hrg Name * @desc 用于此属性的文本名称 * @default HP回复率 * * @param mrg Name * @desc 用于此属性的文本名称 * @default MP回复率 * * @param trg Name * @desc 用于此属性的文本名称 * @default TP回复率 * * @param tgr Name * @desc 用于此属性的文本名称 * @default 被敌人攻击率 * * @param grd Name * @desc 用于此属性的文本名称 * @default 防御率 * * @param rec Name * @desc 用于此属性的文本名称 * @default 恢复率 * * @param pha Name * @desc 用于此属性的文本名称 * @default 药水恢复率 * * @param mcr Name * @desc 用于此属性的文本名称 * @default MP消耗率 * * @param tcr Name * @desc 用于此属性的文本名称 * @default TP消耗率 * * @param pdr Name * @desc 用于此属性的文本名称 * @default 承受物理伤害率 * * @param mdr Name * @desc 用于此属性的文本名称 * @default 承受魔法伤害率 * * @param fdr Name * @desc 用于此属性的文本名称 * @default 承受地面伤害率 * * @param exr Name * @desc 用于此属性的文本名称 * @default 经验获取率 * * @help * ============================================================================ * Introduction * ============================================================================ * * 这个插件用完整的新层代替了原有的身份菜单。 * 包括可以展示更多角色信息的功能 * 这个插件用完整的新层代替了原有的身份菜 * 包括可以展示更多角色信息的功能 * 。你可以用命令参数改变命令显示顺序。 * * To add more commands, insert extension plugins under this plugin in the * Plugin Manager. Then, it will appear automatically in the Command Order * where you placed the 'Custom' string or elsewhere if you've placed the * 为了添加更多的命令,在这个底下可以插入拓展插件。 * * ============================================================================ * Instructions * ============================================================================ * * 你可以添加和移除命令,通过命令顺序参数,这里有一个列表: * * General * - 显示角色原始状态和经验 * * Parameters * - 显示和状态有关的参数槽,例如攻击力,防御力等 * * Elements * - 显示角色基本属性类型 * * States * - 显示状态列表和状态概率 * * Attributes * - 显示属性标志 * * Custom * - 自定义显示 * * Cancel * - 取消菜单 * * ============================================================================ * Adding Icons to Elements and Attributes * ============================================================================ * * 你可以使用文字代码来为基本介绍和属性使用图标 * * 在MV默认数据库里,在基本类型里,可以这么写 * * \i[64]Fire * * 这将让你给基本部分一个图标。你可以改变文字颜色, * 或者使用可运行的文字代码 * * 对于属性来说也是一样的,你也可以通过插件参数来设置。 * * \i[72]HP Regen Rate * * 这个图标将会绘出属性 * * ============================================================================ * Changelog * ============================================================================ * * Version 1.01a: * - Converted Window_StatusInfo to Window_Selectable for those who would like * to use it as such. * * Version 1.00: * - Finished Plugin! */ //============================================================================= //============================================================================= // Parameter Variables //============================================================================= Yanfly.Parameters = PluginManager.parameters('YEP_StatusMenuCore'); Yanfly.Param = Yanfly.Param || {}; Yanfly.Param.StatusCmdOrder = String(Yanfly.Parameters['Command Order']); Yanfly.Param.StatusCmdWidth = Number(Yanfly.Parameters['Command Window Width']); Yanfly.Param.StatusCmdRows = Number(Yanfly.Parameters['Command Window Rows']); Yanfly.Param.StatusCmdAlign = String(Yanfly.Parameters['Command Alignment']); Yanfly.Param.StatusGeneral = String(Yanfly.Parameters['General Command']); Yanfly.Param.StatusParamText = String(Yanfly.Parameters['Parameters Text']); Yanfly.Param.StatusExpText = String(Yanfly.Parameters['Experience Text']); Yanfly.Param.StatusTotalFmt = String(Yanfly.Parameters['Total Format']); Yanfly.Param.ColorExp1 = Number(Yanfly.Parameters['EXP Gauge Color 1']); Yanfly.Param.ColorExp2 = Number(Yanfly.Parameters['EXP Gauge Color 2']); Yanfly.Param.StatusParameters = String(Yanfly.Parameters['Parameters Command']); Yanfly.Param.StatusGraphText = String(Yanfly.Parameters['Graph Text']); Yanfly.Param.ColorParam2Gauge = String(Yanfly.Parameters['ATK Color']); Yanfly.Param.ColorParam3Gauge = String(Yanfly.Parameters['DEF Color']); Yanfly.Param.ColorParam4Gauge = String(Yanfly.Parameters['MAT Color']); Yanfly.Param.ColorParam5Gauge = String(Yanfly.Parameters['MDF Color']); Yanfly.Param.ColorParam6Gauge = String(Yanfly.Parameters['AGI Color']); Yanfly.Param.ColorParam7Gauge = String(Yanfly.Parameters['LUK Color']); Yanfly.Param.ColorResistS = Number(Yanfly.Parameters['Above 300%']); Yanfly.Param.ColorResistA = Number(Yanfly.Parameters['200% to 300%']); Yanfly.Param.ColorResistB = Number(Yanfly.Parameters['150% to 200%']); Yanfly.Param.ColorResistC1 = Number(Yanfly.Parameters['120% to 150%']); Yanfly.Param.ColorResistC2 = Number(Yanfly.Parameters['100% to 120%']); Yanfly.Param.ColorResistC3 = Number(Yanfly.Parameters['80% to 100%']); Yanfly.Param.ColorResistD = Number(Yanfly.Parameters['50% to 80%']); Yanfly.Param.ColorResistE = Number(Yanfly.Parameters['1% to 50%']); Yanfly.Param.ColorResistF = Number(Yanfly.Parameters['Exactly 0%']); Yanfly.Param.ColorResistG = Number(Yanfly.Parameters['Below 0%']); Yanfly.Param.StatusElements = String(Yanfly.Parameters['Elements Command']); Yanfly.Param.StatusEleDec = Number(Yanfly.Parameters['Elements Decimal']); Yanfly.Param.StatusEleCol1 = String(Yanfly.Parameters['Element Column 1']); Yanfly.Param.StatusEleCol1 = Yanfly.Param.StatusEleCol1.split(' '); Yanfly.Param.StatusEleCol2 = String(Yanfly.Parameters['Element Column 2']); Yanfly.Param.StatusEleCol2 = Yanfly.Param.StatusEleCol2.split(' '); Yanfly.Param.StatusEleCol3 = String(Yanfly.Parameters['Element Column 3']); Yanfly.Param.StatusEleCol3 = Yanfly.Param.StatusEleCol3.split(' '); Yanfly.Param.StatusEleCol4 = String(Yanfly.Parameters['Element Column 4']); Yanfly.Param.StatusEleCol4 = Yanfly.Param.StatusEleCol4.split(' '); Yanfly.Param.StatusStates = String(Yanfly.Parameters['States Command']); Yanfly.Param.StatusStatesDec = Number(Yanfly.Parameters['States Decimal']); Yanfly.Param.StatusStateCol1 = String(Yanfly.Parameters['States Column 1']); Yanfly.Param.StatusStateCol1 = Yanfly.Param.StatusStateCol1.split(' '); Yanfly.Param.StatusStateCol2 = String(Yanfly.Parameters['States Column 2']); Yanfly.Param.StatusStateCol2 = Yanfly.Param.StatusStateCol2.split(' '); Yanfly.Param.StatusStateCol3 = String(Yanfly.Parameters['States Column 3']); Yanfly.Param.StatusStateCol3 = Yanfly.Param.StatusStateCol3.split(' '); Yanfly.Param.StatusStateCol4 = String(Yanfly.Parameters['States Column 4']); Yanfly.Param.StatusStateCol4 = Yanfly.Param.StatusStateCol4.split(' '); Yanfly.Param.StatusAttributes = String(Yanfly.Parameters['Attributes Command']); Yanfly.Param.StatusAttriCol1 = String(Yanfly.Parameters['Attributes Column 1']); Yanfly.Param.StatusAttriCol1 = Yanfly.Param.StatusAttriCol1.split(' '); Yanfly.Param.StatusAttriCol2 = String(Yanfly.Parameters['Attributes Column 2']); Yanfly.Param.StatusAttriCol2 = Yanfly.Param.StatusAttriCol2.split(' '); Yanfly.Param.StatusAttriCol3 = String(Yanfly.Parameters['Attributes Column 3']); Yanfly.Param.StatusAttriCol3 = Yanfly.Param.StatusAttriCol3.split(' '); Yanfly.Param.StatusAttriCol4 = String(Yanfly.Parameters['Attributes Column 4']); Yanfly.Param.StatusAttriCol4 = Yanfly.Param.StatusAttriCol4.split(' '); Yanfly.Param.StatusAttrSize = Number(Yanfly.Parameters['Attribute Font Size']); Yanfly.Param.StatusAttrDec = Number(Yanfly.Parameters['Attribute Decimal']); Yanfly.Param.StatusAttr_hit = String(Yanfly.Parameters['hit Name']); Yanfly.Param.StatusAttr_eva = String(Yanfly.Parameters['eva Name']); Yanfly.Param.StatusAttr_cri = String(Yanfly.Parameters['cri Name']); Yanfly.Param.StatusAttr_cev = String(Yanfly.Parameters['cev Name']); Yanfly.Param.StatusAttr_mev = String(Yanfly.Parameters['mev Name']); Yanfly.Param.StatusAttr_mrf = String(Yanfly.Parameters['mrf Name']); Yanfly.Param.StatusAttr_cnt = String(Yanfly.Parameters['cnt Name']); Yanfly.Param.StatusAttr_hrg = String(Yanfly.Parameters['hrg Name']); Yanfly.Param.StatusAttr_mrg = String(Yanfly.Parameters['mrg Name']); Yanfly.Param.StatusAttr_trg = String(Yanfly.Parameters['trg Name']); Yanfly.Param.StatusAttr_tgr = String(Yanfly.Parameters['tgr Name']); Yanfly.Param.StatusAttr_grd = String(Yanfly.Parameters['grd Name']); Yanfly.Param.StatusAttr_rec = String(Yanfly.Parameters['rec Name']); Yanfly.Param.StatusAttr_pha = String(Yanfly.Parameters['pha Name']); Yanfly.Param.StatusAttr_mcr = String(Yanfly.Parameters['mcr Name']); Yanfly.Param.StatusAttr_tcr = String(Yanfly.Parameters['tcr Name']); Yanfly.Param.StatusAttr_pdr = String(Yanfly.Parameters['pdr Name']); Yanfly.Param.StatusAttr_mdr = String(Yanfly.Parameters['mdr Name']); Yanfly.Param.StatusAttr_fdr = String(Yanfly.Parameters['fdr Name']); Yanfly.Param.StatusAttr_exr = String(Yanfly.Parameters['exr Name']); //============================================================================= // Window_StatusCommand //============================================================================= function Window_StatusCommand() { this.initialize.apply(this, arguments); } Window_StatusCommand.prototype = Object.create(Window_Command.prototype); Window_StatusCommand.prototype.constructor = Window_StatusCommand; Window_StatusCommand.prototype.initialize = function () { Window_Command.prototype.initialize.call(this, 0, 0); this._actor = null; }; Window_StatusCommand.prototype.windowWidth = function () { return Yanfly.Param.StatusCmdWidth; }; Window_StatusCommand.prototype.setActor = function (actor) { if (this._actor === actor) return; this._actor = actor; this.refresh(); this.select(0); }; Window_StatusCommand.prototype.numVisibleRows = function () { return Yanfly.Param.StatusCmdRows; }; Window_StatusCommand.prototype.makeCommandList = function () { this._commandOrder = Yanfly.Param.StatusCmdOrder.split(' '); for (var i = 0; i < this._commandOrder.length; ++i) { var command = this._commandOrder[i]; this.createCommand(command); } }; Window_StatusCommand.prototype.createCommand = function (command) { command = command.toUpperCase(); if (['GENERAL', 'MAIN'].contains(command)) { var text = Yanfly.Param.StatusGeneral; this.addCommand(text, 'general', true); } else if (['CANCEL', 'FINISH'].contains(command)) { this.addCommand(TextManager.cancel, 'cancel', true); } else if (['CUSTOM', 'ORIGINAL'].contains(command)) { this.addCustomCommands(); } else if (['PARAMETER', 'PARAMETERS'].contains(command)) { var text = Yanfly.Param.StatusParameters; this.addCommand(text, 'parameters', true); } else if (['ELEMENT', 'ELEMENTS'].contains(command)) { var text = Yanfly.Param.StatusElements; this.addCommand(text, 'elements', true); } else if (['STATE', 'STATES'].contains(command)) { var text = Yanfly.Param.StatusStates; this.addCommand(text, 'states', true); } else if (['ATTRIBUTE', 'ATTRIBUTES'].contains(command)) { var text = Yanfly.Param.StatusAttributes; this.addCommand(text, 'attributes', true); } }; Window_StatusCommand.prototype.addCustomCommands = function () { }; Window_StatusCommand.prototype.setInfoWindow = function (infoWindow) { this._infoWindow = infoWindow; }; Window_StatusCommand.prototype.update = function () { Window_Command.prototype.update.call(this); if (this._infoWindow) this._infoWindow.setSymbol(this.currentSymbol()); }; Window_StatusCommand.prototype.itemTextAlign = function () { return Yanfly.Param.StatusCmdAlign; }; Window_StatusCommand.prototype.playOkSound = function () { if (this.isPlayOkSound()) SoundManager.playOk(); }; Window_StatusCommand.prototype.isPlayOkSound = function () { if (this.currentSymbol() === 'cancel') return true; return false; }; //============================================================================= // Window_StatusInfo //============================================================================= function Window_StatusInfo() { this.initialize.apply(this, arguments); } Window_StatusInfo.prototype = Object.create(Window_Selectable.prototype); Window_StatusInfo.prototype.constructor = Window_StatusInfo; Window_StatusInfo.prototype.initialize = function (y, commandWindow) { var width = Graphics.boxWidth; var height = Graphics.boxHeight - y; this._commandWindow = commandWindow; Window_Selectable.prototype.initialize.call(this, 0, y, width, height); this.findParamLimits(); }; Window_StatusInfo.prototype.findParamLimits = function () { this._largestParam = 1; this._smallestParam = $gameActors.actor(1).paramMax(2); for (var i = 0; i < $gameParty.members().length; ++i) { var actor = $gameParty.members()[i]; if (!actor) continue; for (var j = 2; j < 8; ++j) { this._largestParam = Math.max(this._largestParam, actor.param(j)); this._smallestParam = Math.min(this._smallestParam, actor.param(j)); } } }; Window_StatusInfo.prototype.setActor = function (actor) { if (this._actor === actor) return; this._actor = actor; this.refresh(); }; Window_StatusInfo.prototype.setSymbol = function (symbol) { var needRefresh = this._symbol !== symbol; this._symbol = symbol; if (needRefresh) this.refresh(); }; Window_StatusInfo.prototype.resetFontSettings = function () { if (this._bypassResetText) return; Window_Base.prototype.resetFontSettings.call(this); }; Window_StatusInfo.prototype.resetTextColor = function () { if (this._bypassResetTextColor) return; Window_Base.prototype.resetTextColor.call(this); }; Window_StatusInfo.prototype.refresh = function () { this.contents.clear(); this.drawInfoContents(this._symbol); }; Window_StatusInfo.prototype.drawInfoContents = function (symbol) { this.resetFontSettings(); if (!symbol) return; switch (symbol.toLowerCase()) { case 'parameters': this.drawParameters(); break; case 'elements': this.drawElements(); break; case 'states': this.drawStates(); break; case 'attributes': this.drawAttributes(); break; default: this.drawGeneral(); break; } }; Window_StatusInfo.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_StatusInfo.prototype.drawGeneral = function () { var dx = this.standardPadding() / 2; var dy = this.lineHeight() / 2; var dw = (this.contents.width - this.standardPadding()) / 2; var dh = this.lineHeight(); var text; this.changeTextColor(this.systemColor()); this.drawText(Yanfly.Param.StatusParamText, dx, dy, dw, 'center'); dx += this.contents.width / 2; this.drawText(Yanfly.Param.StatusExpText, dx, dy, dw, 'center'); this.drawGeneralParam(dx, dy, dw, dh); this.drawGeneralExp(dx, dy, dw, dh); }; Window_StatusInfo.prototype.drawGeneralParam = function () { var rect = new Rectangle(); rect.width = (this.contents.width - this.standardPadding()) / 2; rect.y = this.lineHeight() * 2; rect.height = this.lineHeight(); var dx = rect.x + this.textPadding(); var dw = rect.width - this.textPadding() * 2; this.drawDarkRect(rect.x, rect.y, rect.width, rect.height); this.changeTextColor(this.systemColor()); this.drawText(TextManager.level, dx, rect.y, dw, 'left'); this.changeTextColor(this.normalColor()); text = Yanfly.Util.toGroup(this._actor.level); this.drawText(text, dx, rect.y, dw, 'right'); for (var i = 0; i < 8; ++i) { if (i < 2) { rect.y += this.lineHeight(); } else if (i === 2) { rect.y += this.lineHeight(); rect.width /= 2; dw = rect.width - this.textPadding() * 2; } else if (i % 2 === 0) { rect.x = 0; dx = rect.x + this.textPadding(); rect.y += this.lineHeight(); } else { rect.x += rect.width; dx += rect.width; } this.drawDarkRect(rect.x, rect.y, rect.width, rect.height); this.changeTextColor(this.systemColor()); this.drawText(TextManager.param(i), dx, rect.y, dw, 'left'); this.changeTextColor(this.normalColor()); text = Yanfly.Util.toGroup(this._actor.param(i)); this.drawText(text, dx, rect.y, dw, 'right'); } }; Window_StatusInfo.prototype.actorCurrentExpRate = function (actor) { var actorLv = actor.level; if (actorLv === actor.maxLevel()) return 1.0; var nowExp = actor.currentExp() - actor.expForLevel(actorLv); var nextExp = actor.expForLevel(actorLv + 1) - actor.expForLevel(actorLv); return (1.0 * nowExp / nextExp).clamp(0.0, 1.0); }; Window_StatusInfo.prototype.actorExpRate = function (actor) { var actorLv = actor.level; if (actorLv === actor.maxLevel()) return 1.0; var nowExp = actor.currentExp(); var nextExp = actor.expForLevel(actorLv + 1); return (1.0 * nowExp / nextExp).clamp(0.0, 1.0); }; Window_StatusInfo.prototype.drawExpGauge = function (actor, rate, rect) { var color1 = this.textColor(Yanfly.Param.ColorExp1); var color2 = this.textColor(Yanfly.Param.ColorExp2); var wy = rect.y; this.drawGauge(rect.x, wy, rect.width, rate, color1, color2); }; Window_StatusInfo.prototype.drawGeneralExp = function (dx, dy, dw, dh) { dy = this.lineHeight() * 2; dw = (this.contents.width - this.textPadding()) / 2; dx = this.textPadding() + dw; // Current Exp this.changeTextColor(this.systemColor()); text = TextManager.expTotal.format(TextManager.exp); this.drawText(text, dx, dy, dw, 'left'); dy += this.lineHeight(); this.changeTextColor(this.normalColor()); text = Yanfly.Util.toGroup(this._actor.currentExp()); this.drawText(text, dx, dy, dw, 'right'); // To Next Level dy += this.lineHeight(); this.changeTextColor(this.systemColor()); text = TextManager.expNext.format(TextManager.level); this.drawText(text, dx, dy, dw, 'left'); dy += this.lineHeight(); var rect = new Rectangle(); rect.x = dx; rect.y = dy; rect.width = dw; var rate = this.actorCurrentExpRate(this._actor); this.drawExpGauge(this._actor, rate, rect); this.changeTextColor(this.normalColor()); text = Yanfly.Util.toGroup(this._actor.nextRequiredExp()); if (this._actor.isMaxLevel()) text = '-------'; this.drawText(text, dx, dy, dw, 'right'); // Total EXP for Next Level dy += this.lineHeight(); this.changeTextColor(this.systemColor()); text = Yanfly.Param.StatusTotalFmt.format(TextManager.exp, TextManager.level); this.drawText(text, dx, dy, dw, 'left'); dy += this.lineHeight(); var rect = new Rectangle(); rect.x = dx; rect.y = dy; rect.width = dw; var rate = this.actorExpRate(this._actor); this.drawExpGauge(this._actor, rate, rect); this.changeTextColor(this.normalColor()); text = Yanfly.Util.toGroup(this._actor.nextLevelExp()); if (this._actor.isMaxLevel()) text = '-------'; this.drawText(text, dx, dy, dw, 'right'); }; Window_StatusInfo.prototype.drawParameters = function () { var dx = 0; var dy = this.lineHeight() / 2; var dw = this.contents.width; var dh = this.lineHeight(); var dw2; var text; this.changeTextColor(this.systemColor()); this.drawText(Yanfly.Param.StatusGraphText, dx, dy, dw, 'center'); dy = this.lineHeight(); dx = this.standardPadding(); dw -= this.standardPadding() * 2; for (var i = 2; i < 8; ++i) { dy += this.lineHeight(); var rate = this.drawParamGauge(dx, dy, dw, i); this.changeTextColor(this.systemColor()); this.drawText(TextManager.param(i), dx + 4, dy, dw - 4); text = Yanfly.Util.toGroup(this._actor.param(i)) this.changeTextColor(this.normalColor()); dw2 = dw * rate; this.drawText(text, dx, dy, dw2 - 4, 'right'); } }; Window_StatusInfo.prototype.drawParamGauge = function (dx, dy, dw, paramId) { var rate = this.calcParamRate(paramId); var array = eval('Yanfly.Param.ColorParam' + paramId + 'Gauge').split(' '); this.drawGauge(dx, dy, dw, rate, array[0], array[1]); return rate; }; Window_StatusInfo.prototype.calcParamRate = function (paramId) { if (this._largestParam === this._smallestParam) return 1.0; var rate = parseFloat(this._actor.param(paramId) - this._smallestParam) / parseFloat(this._largestParam - this._smallestParam); rate *= 0.7; rate += 0.3; return rate; }; Window_StatusInfo.prototype.getMaxArrayCols = function (array) { var maxCols = 0; for (var i = 0; i < array.length; ++i) { var arr = array[i]; if (arr[0] !== '') ++maxCols; } return maxCols; }; Window_StatusInfo.prototype.getMaxArrayRows = function (array) { var maxRows = 0; for (var i = 0; i < array.length; ++i) { var arr = array[i]; maxRows = Math.max(maxRows, arr.length); } return maxRows; }; Window_StatusInfo.prototype.getArrayX = function () { return this.standardPadding() * 1.5; }; Window_StatusInfo.prototype.getArrayY = function () { return 0; }; Window_StatusInfo.prototype.getArrayDW = function (maxCols) { var dw = this.contents.width - this.standardPadding() * 3; dw /= maxCols; dw += this.standardPadding() / maxCols; dw -= this.standardPadding(); return dw; }; Window_StatusInfo.prototype.setRateColor = function (rate) { var colorId = 0; if (rate >= 3.0) { colorId = Yanfly.Param.ColorResistS; } else if (rate >= 2.0) { colorId = Yanfly.Param.ColorResistA; } else if (rate >= 1.5) { colorId = Yanfly.Param.ColorResistB; } else if (rate >= 1.2) { colorId = Yanfly.Param.ColorResistC1; } else if (rate >= 1.0) { colorId = Yanfly.Param.ColorResistC2; } else if (rate >= 0.8) { colorId = Yanfly.Param.ColorResistC3; } else if (rate >= 0.5) { colorId = Yanfly.Param.ColorResistD; } else if (rate > 0) { colorId = Yanfly.Param.ColorResistE; } else if (rate === 0) { colorId = Yanfly.Param.ColorResistF; } else { colorId = Yanfly.Param.ColorResistG; } this.changeTextColor(this.textColor(colorId)); }; Window_StatusInfo.prototype.drawElements = function () { this.drawElementColumnRects(); this.drawElementInfo(); }; Window_StatusInfo.prototype.elementArray = function () { var array = [ Yanfly.Param.StatusEleCol1, Yanfly.Param.StatusEleCol2, Yanfly.Param.StatusEleCol3, Yanfly.Param.StatusEleCol4 ]; return array; }; Window_StatusInfo.prototype.drawElementColumnRects = function () { var maxCols = this.getMaxArrayCols(this.elementArray()); var maxRows = this.getMaxArrayRows(this.elementArray()); if (maxCols <= 0) return; var dx = this.getArrayX(); var dy = this.getArrayY(); var dw = this.getArrayDW(maxCols); for (var i = 0; i < maxCols; ++i) { for (var j = 0; j < maxRows; ++j) { this.drawDarkRect(dx, dy, dw, this.lineHeight()); dy += this.lineHeight(); } dx += dw; dx += (maxCols > 1) ? this.standardPadding() : 0; dy = 0; } }; Window_StatusInfo.prototype.drawElementInfo = function () { var maxCols = this.getMaxArrayCols(this.elementArray()); var maxRows = this.getMaxArrayRows(this.elementArray()); if (maxCols <= 0) return; var infoArray = this.elementArray(); var dx = this.getArrayX(); var dy = this.getArrayY(); var dw = this.getArrayDW(maxCols); for (var i = 0; i < maxCols; ++i) { for (var j = 0; j < infoArray[i].length; ++j) { var eleId = infoArray[i][j]; this.drawElementData(eleId, dx, dy, dw) dy += this.lineHeight(); } dx += dw; dx += (maxCols > 1) ? this.standardPadding() : 0; dy = 0; } }; Window_StatusInfo.prototype.drawElementData = function (eleId, dx, dy, dw) { eleId = parseInt(eleId); var eleName = $dataSystem.elements[eleId]; var eleRate = this._actor.elementRate(eleId); dx += this.textPadding(); dw -= this.textPadding() * 2; this._bypassResetTextColor = true; this.changeTextColor(this.systemColor()); this.drawTextEx(eleName, dx, dy); this._bypassResetTextColor = false; this.setRateColor(eleRate); var text = (eleRate * 100).toFixed(Yanfly.Param.StatusEleDec) + '%'; this.drawText(text, dx, dy, dw, 'right'); }; Window_StatusInfo.prototype.drawStates = function () { this.drawStatesColumnRects(); this.drawStatesInfo(); }; Window_StatusInfo.prototype.stateArray = function () { var array = [ Yanfly.Param.StatusStateCol1, Yanfly.Param.StatusStateCol2, Yanfly.Param.StatusStateCol3, Yanfly.Param.StatusStateCol4 ]; return array; }; Window_StatusInfo.prototype.drawStatesColumnRects = function () { var maxCols = this.getMaxArrayCols(this.stateArray()); var maxRows = this.getMaxArrayRows(this.stateArray()); if (maxCols <= 0) return; var dx = this.getArrayX(); var dy = this.getArrayY(); var dw = this.getArrayDW(maxCols); for (var i = 0; i < maxCols; ++i) { for (var j = 0; j < maxRows; ++j) { this.drawDarkRect(dx, dy, dw, this.lineHeight()); dy += this.lineHeight(); } dx += dw; dx += (maxCols > 1) ? this.standardPadding() : 0; dy = 0; } }; Window_StatusInfo.prototype.drawStatesInfo = function () { var maxCols = this.getMaxArrayCols(this.stateArray()); var maxRows = this.getMaxArrayRows(this.stateArray()); if (maxCols <= 0) return; var infoArray = this.stateArray(); var dx = this.getArrayX(); var dy = this.getArrayY(); var dw = this.getArrayDW(maxCols); for (var i = 0; i < maxCols; ++i) { for (var j = 0; j < infoArray[i].length; ++j) { var stateId = infoArray[i][j]; this.drawStatesData(stateId, dx, dy, dw) dy += this.lineHeight(); } dx += dw; dx += (maxCols > 1) ? this.standardPadding() : 0; dy = 0; } }; Window_StatusInfo.prototype.drawStatesData = function (stateId, dx, dy, dw) { stateId = parseInt(stateId); var stateRate = this._actor.stateRate(stateId); if (this._actor.isStateResist(stateId)) stateRate = 0; dx += this.textPadding(); dw -= this.textPadding() * 2; this._bypassResetTextColor = true; this.changeTextColor(this.systemColor()); this.drawItemName($dataStates[stateId], dx, dy, dw); this._bypassResetTextColor = false; this.setRateColor(stateRate); var text = (stateRate * 100).toFixed(Yanfly.Param.StatusStatesDec) + '%'; this.drawText(text, dx, dy, dw, 'right'); }; Window_StatusInfo.prototype.drawAttributes = function () { this.drawAttributesColumnRects(); this.drawAttributesInfo(); }; Window_StatusInfo.prototype.attributesArray = function () { var array = [ Yanfly.Param.StatusAttriCol1, Yanfly.Param.StatusAttriCol2, Yanfly.Param.StatusAttriCol3, Yanfly.Param.StatusAttriCol4 ]; return array; }; Window_StatusInfo.prototype.drawAttributesColumnRects = function () { var maxCols = this.getMaxArrayCols(this.attributesArray()); var maxRows = this.getMaxArrayRows(this.attributesArray()); if (maxCols <= 0) return; var dx = this.getArrayX(); var dy = this.getArrayY(); var dw = this.getArrayDW(maxCols); for (var i = 0; i < maxCols; ++i) { for (var j = 0; j < maxRows; ++j) { this.drawDarkRect(dx, dy, dw, this.lineHeight()); dy += this.lineHeight(); } dx += dw; dx += (maxCols > 1) ? this.standardPadding() : 0; dy = 0; } }; Window_StatusInfo.prototype.drawAttributesInfo = function () { var maxCols = this.getMaxArrayCols(this.attributesArray()); var maxRows = this.getMaxArrayRows(this.attributesArray()); if (maxCols <= 0) return; var infoArray = this.attributesArray(); var dx = this.getArrayX(); var dy = this.getArrayY(); var dw = this.getArrayDW(maxCols); for (var i = 0; i < maxCols; ++i) { for (var j = 0; j < infoArray[i].length; ++j) { var attribute = infoArray[i][j].toLowerCase(); this.drawAttributeData(attribute, dx, dy, dw) dy += this.lineHeight(); } dx += dw; dx += (maxCols > 1) ? this.standardPadding() : 0; dy = 0; } }; Window_StatusInfo.prototype.drawAttributeData = function (attr, dx, dy, dw) { var actor = this._actor; this.contents.fontSize = Yanfly.Param.StatusAttrSize; switch (attr) { case 'hit': this.drawAttributeName(Yanfly.Param.StatusAttr_hit, dx, dy, dw); this.drawAttributeRate(actor.hit, dx, dy, dw); break; case 'eva': this.drawAttributeName(Yanfly.Param.StatusAttr_eva, dx, dy, dw); this.drawAttributeRate(actor.eva, dx, dy, dw); break; case 'cri': this.drawAttributeName(Yanfly.Param.StatusAttr_cri, dx, dy, dw); this.drawAttributeRate(actor.cri, dx, dy, dw); break; case 'cev': this.drawAttributeName(Yanfly.Param.StatusAttr_cev, dx, dy, dw); this.drawAttributeRate(actor.cev, dx, dy, dw); break; case 'mev': this.drawAttributeName(Yanfly.Param.StatusAttr_mev, dx, dy, dw); this.drawAttributeRate(actor.mev, dx, dy, dw); break; case 'mrf': this.drawAttributeName(Yanfly.Param.StatusAttr_mrf, dx, dy, dw); this.drawAttributeRate(actor.mrf, dx, dy, dw); break; case 'cnt': this.drawAttributeName(Yanfly.Param.StatusAttr_cnt, dx, dy, dw); this.drawAttributeRate(actor.cnt, dx, dy, dw); break; case 'hrg': this.drawAttributeName(Yanfly.Param.StatusAttr_hrg, dx, dy, dw); this.drawAttributeRate(actor.hrg, dx, dy, dw); break; case 'mrg': this.drawAttributeName(Yanfly.Param.StatusAttr_mrg, dx, dy, dw); this.drawAttributeRate(actor.mrg, dx, dy, dw); break; case 'trg': this.drawAttributeName(Yanfly.Param.StatusAttr_trg, dx, dy, dw); this.drawAttributeRate(actor.trg, dx, dy, dw); break; case 'tgr': this.drawAttributeName(Yanfly.Param.StatusAttr_tgr, dx, dy, dw); this.drawAttributeRate(actor.tgr, dx, dy, dw); break; case 'grd': this.drawAttributeName(Yanfly.Param.StatusAttr_grd, dx, dy, dw); this.drawAttributeRate(actor.grd, dx, dy, dw); break; case 'rec': this.drawAttributeName(Yanfly.Param.StatusAttr_rec, dx, dy, dw); this.drawAttributeRate(actor.rec, dx, dy, dw); break; case 'pha': this.drawAttributeName(Yanfly.Param.StatusAttr_pha, dx, dy, dw); this.drawAttributeRate(actor.pha, dx, dy, dw); break; case 'mcr': this.drawAttributeName(Yanfly.Param.StatusAttr_mcr, dx, dy, dw); this.drawAttributeRate(actor.mcr, dx, dy, dw); break; case 'tcr': this.drawAttributeName(Yanfly.Param.StatusAttr_tcr, dx, dy, dw); this.drawAttributeRate(actor.tcr, dx, dy, dw); break; case 'pdr': this.drawAttributeName(Yanfly.Param.StatusAttr_pdr, dx, dy, dw); this.drawAttributeRate(actor.pdr, dx, dy, dw); break; case 'mdr': this.drawAttributeName(Yanfly.Param.StatusAttr_mdr, dx, dy, dw); this.drawAttributeRate(actor.mdr, dx, dy, dw); break; case 'fdr': this.drawAttributeName(Yanfly.Param.StatusAttr_fdr, dx, dy, dw); this.drawAttributeRate(actor.fdr, dx, dy, dw); break; case 'exr': this.drawAttributeName(Yanfly.Param.StatusAttr_exr, dx, dy, dw); this.drawAttributeRate(actor.exr, dx, dy, dw); break; default: break; } }; Window_StatusInfo.prototype.drawAttributeName = function (name, dx, dy, dw) { this.changeTextColor(this.systemColor()); dx += this.textPadding(); dw -= this.textPadding() * 2; dy += Math.floor((this.standardFontSize() - this.contents.fontSize) / 2); this._bypassResetText = true; this.changeTextColor(this.systemColor()); this.drawTextEx(name, dx, dy, dw); this._bypassResetText = false; }; Window_StatusInfo.prototype.drawAttributeRate = function (rate, dx, dy, dw) { var value = (rate * 100).toFixed(Yanfly.Param.StatusAttrDec) + '%'; this.setRateColor(rate); this.drawAttributeValue(value, dx, dy, dw); }; Window_StatusInfo.prototype.drawAttributeValue = function (value, dx, dy, dw) { dx += this.textPadding(); dw -= this.textPadding() * 2; this.drawText(value, dx, dy, dw, 'right'); }; Window_StatusInfo.prototype.maxPageItems = function () { return this.maxItems(); }; Window_Selectable.prototype.maxItems = function () { return 1; }; Window_StatusInfo.prototype.drawItem = function (index) { this.clearItem(index); }; Window_StatusInfo.prototype.drawAllItems = function () { var topIndex = this.topIndex(); for (var i = 0; i < this.maxPageItems(); i++) { var index = topIndex + i; if (index < this.maxItems()) { this.drawItem(index); } } }; //============================================================================= // Scene_Status //============================================================================= Scene_Status.prototype.create = function () { Scene_MenuBase.prototype.create.call(this); this.createHelpWindow(); this.createCommandWindow(); this.createStatusWindow(); this.createInfoWindow(); this.refreshActor(); }; Scene_Status.prototype.refreshActor = function () { var actor = this.actor(); this._statusWindow.setActor(actor); this._helpWindow.setText(actor.profile()); this._infoWindow.setActor(actor); }; Scene_Status.prototype.onActorChange = function () { this.refreshActor(); this._commandWindow.activate(); }; Scene_Status.prototype.createCommandWindow = function () { this._commandWindow = new Window_StatusCommand(); this._commandWindow.x = 0; this._commandWindow.y = this._helpWindow.height; this.setCommandWindowHandlers(); this.addWindow(this._commandWindow); }; Scene_Status.prototype.setCommandWindowHandlers = function () { this._commandWindow.setHandler('cancel', this.popScene.bind(this)); this._commandWindow.setHandler('pagedown', this.nextActor.bind(this)); this._commandWindow.setHandler('pageup', this.previousActor.bind(this)); }; Scene_Status.prototype.createStatusWindow = function () { var wx = this._commandWindow.width; var wy = this._helpWindow.height; var ww = Graphics.boxWidth - wx; var wh = this._commandWindow.height; this._statusWindow = new Window_SkillStatus(wx, wy, ww, wh); this.addWindow(this._statusWindow); }; Scene_Status.prototype.createInfoWindow = function () { var wy = this._helpWindow.height + this._commandWindow.height; this._infoWindow = new Window_StatusInfo(wy, this._commandWindow); this._commandWindow.setInfoWindow(this._infoWindow); this.addWindow(this._infoWindow); this._infoWindow.setHandler('cancel', this.onInfoCancel.bind(this)); }; Scene_Status.prototype.onInfoCancel = function () { this._commandWindow.activate(); this._infoWindow.deselect(); }; //============================================================================= // Utilities //============================================================================= Yanfly.Util = Yanfly.Util || {}; if (!Yanfly.Util.toGroup) { Yanfly.Util.toGroup = function (inVal) { return inVal; } }; //============================================================================= // End of File //=============================================================================