// // ミニインフォメーションウィンドウ ver1.03 // // ------------------------------------------------------ // Copyright (c) 2016 Yana // Released under the MIT license // http://opensource.org/licenses/mit-license.php // ------------------------------------------------------ // // author Yana // var Imported = Imported || {}; Imported["MiniInformationWindow"] = 1.03; /*: * @plugindesc ver1.03/さまざまな情報を表示するミニウィンドウを定義します。 * @author Yana * * @param 【基本設定】 * * @param Switch Key * @desc ミニウィンドウの可視状態を切り替えるキーです。 * @default tab,menu * * @param Default State * @desc ミニウィンドウが初期状態です。 * openで開いた状態、それ以外で閉じた状態になります。 * @default open * * @param Two Col Size * @desc ミニウィンドウが2列になる行数です。 * この行数以上のデータが渡されると、表示が2列になります。 * @default 8 * * @param Window Offset X * @desc ミニウィンドウのX座標の補正値です。 * @default 0 * * @param Window Offset Y * @desc ミニウィンドウのY座標の補正値です。 * @default 0 * * @param Use Scene Item * @desc アイテムシーンでミニウィンドウを使用するかの設定です。 * @default true * * @param Use Scene Skill * @desc スキルシーンでミニウィンドウを使用するかの設定です。 * @default true * * @param Use Scene Equip * @desc 装備シーンでミニウィンドウを使用するかの設定です。 * @default true * * @param Use Scene Shop * @desc ショップシーンでミニウィンドウを使用するかの設定です。 * @default true * * @param 【用語の設定】 * * @param Effect Name * @desc 有効度の名称です。 * @default 有効度 * * @param Down Name * @desc デバフ有効度の名称です。 * @default 低下有効度 * * @param Turn Text * @desc バフなどに使用されるターンの名称です。 * @default ターン * * @param Escape Text * @desc 特殊効果 逃げるの名称です。 * @default 逃げる * * @param Param Color * @desc 詳細ウィンドウに表示する特徴の色設定です。 * 順番に基本色、システム色、上昇色、下降色です。 * @default 6,4,24,2 * * @param Param Text1 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 1は有効度と無効化です。 * @default 有効度,弱体有効度,無効化 * * @param Param Text2 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 2は追加能力値です。 * @default 命中率,回避率,会心率,会心回避,魔法回避,魔法反射率,反撃率,再生率,再生率,再生率 * * @param Param Text3 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 3は特殊能力値です。 * @default 狙われ率,防御効果率,回復効果率,薬の知識,消費率,チャージ率,物理ダメージ率,魔法ダメージ率,床ダメージ率,経験値獲得率 * * @param Param Text4 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 4は攻撃タブです。 * @default 攻撃属性付与:,攻撃時ステート付与:,攻撃速度,攻撃回数 * * @param Param Text5 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 5はスキルタブです。 * @default スキルタイプ追加:,スキルタイプ封印:,スキル追加:,スキル封印: * * @param Param Text6 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 6は装備タブです。 * @default 武器タイプ追加:,防具タイプ追加:,装備固定:,装備封印:,二刀流 * * @param Param Text7 * @desc 詳細ウィンドウに表示する特徴の表示名です。 * 7はその他タブです。 * @default 行動回数追加,自動戦闘,防御,身代わり,TP持越し,消滅エフェクト,エンカウント半減,エンカウント無効,不意打ち無効,先制率アップ,取得金額倍化,アイテム取得率倍化 * * @param Defeat Text * @desc 消滅エフェクトで使用するサブテキストです。基本使用しません。 * @default 通常,ボス,瞬間消去,消えない * * @param Effects Names * @desc 使用効果の各効果の名称です。 * @default HP回復,HPダメージ,MP回復,MPダメージ,TP増加,ステート付与,ステート解除,強化付与,弱体付与,強化解除,弱体解除,特殊効果,成長,スキル習得,コモン * * @help ------------------------------------------------------ * プラグインコマンド * ------------------------------------------------------ * このプラグインにはプラグインコマンドはありません。 * ------------------------------------------------------ * 使い方 * ------------------------------------------------------ * プラグインを導入し、プラグインパラメータを設定することで動作します。 * * ※メモを使った設定※ * アイテムや装備、スキルのメモを使うことにより、表示される使用効果や特徴に情報を追加することができます。 * * <情報ウィンドウ追加前:xxx> * * * のいずれかで、使用効果などが表示される前に、 * * <情報ウィンドウ追加後:xxx> * * * のいずれかで、使用効果などが表示された後に情報を追加することができます。 * これらは複数記述することで、記述しただけ情報を追加できます。 * * ※BattleLayout-SaGaで表示される情報はこの方法で追加を行うことはできません。 * * ------------------------------------------------------ * 利用規約 * ------------------------------------------------------ * 当プラグインはMITライセンスで公開されています。 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。 * 二次配布も制限はしませんが、サポートは行いません。 * 著作表示は任意です。行わなくても利用できます。 * 要するに、特に規約はありません。 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。 * https://twitter.com/yanatsuki_ * 素材利用は自己責任でお願いします。 * ------------------------------------------------------ * 更新履歴: * ver1.03: * YEP_StatusMenuCoreと変数名が重複して正常に動作していなかったバグを修正。 * ver1.02: * プラグインパラメータの設定が一部間違っていたのを修正。 * ver1.01: * ウィンドウの横幅を名前も考慮するように修正。 * MP再生率とTP再生率も表示されるように、パラメータのデフォルト値を調整。 * ver1.00: * 公開 */ (function () { //////////////////////////////////////////////////////////////////////////////////// var parameters = PluginManager.parameters("MiniInformationWindow"); var switchKey = parameters["Switch Key"].split(","); var defaultState = parameters["Default State"] === "open"; var turnText = String(parameters["Turn Text"] || "ターン"); var escapeText = String(parameters["Escape Text"] || "逃げる"); var effectNames = String( parameters["Effects Names"] || "HP回復,HPダメージ,MP回復,MPダメージ,TP増加,ステート付与,ステート解除,強化付与,弱体付与,強化解除,弱体解除,特殊効果,成長,スキル習得,コモン" ).split(","); var defeatText = parameters["Defeat Text"].split(","); var paramColor = parameters["Param Color"].split(","); var twoColSize = Number(parameters["Two Col Size"]); var offsetX = Number(parameters["Window Offset X"]) || 0; var offsetY = Number(parameters["Window Offset Y"]) || 0; var useSceneItem = parameters["Use Scene Item"] === "true"; var useSceneSkill = parameters["Use Scene Skill"] === "true"; var useSceneEquip = parameters["Use Scene Equip"] === "true"; var useSceneShop = parameters["Use Scene Shop"] === "true"; var paramVocab = []; for (var i = 1; i <= 7; i++) { var key = "Param Text" + i; paramVocab[i - 1] = parameters[key].split(","); } //////////////////////////////////////////////////////////////////////////////////// DataManager.preInfoItem = function (item) { if (!item) return null; if (!item.note) return null; if (item._preInfos) return item._preInfos; this.makeInfoItem(item); return item._preInfos; }; DataManager.afterInfoItem = function (item) { if (!item) return null; if (!item.note) return null; if (item._afterInfos) return item._afterInfos; this.makeInfoItem(item); return item._afterInfos; }; DataManager.makeInfoItem = function (item) { item._preInfos = []; item._afterInfos = []; var texts = item.note.split("\n"); for (var i = 0, max = texts.length; i < max; i++) { if ( texts[i].match(/<(?:情報ウィンドウ追加|AddInfoWindow)([前後PA]):(.+)>/) ) { if (RegExp.$1 === "前" || RegExp.$1 === "P") item._preInfos.push(RegExp.$2); if (RegExp.$1 === "後" || RegExp.$1 === "A") item._afterInfos.push(RegExp.$2); } } }; //////////////////////////////////////////////////////////////////////////////////// function Window_MiniInfo() { this.initialize.apply(this, arguments); } Window_MiniInfo.prototype = Object.create(Window_Base.prototype); Window_MiniInfo.prototype.constructor = Window_MiniInfo; Window_MiniInfo.prototype.initialize = function () { Window_Base.prototype.initialize.call(this, 0, 0, 32, 32); this._showInfo = defaultState; this.openness = 0; this._maxCols = 1; }; Window_MiniInfo.prototype.standardFontSize = function () { return 18; }; Window_MiniInfo.prototype.standardPadding = function () { return 6; }; Window_MiniInfo.prototype.processDrawIcon = function (iconIndex, textState) { this.drawIcon(iconIndex, textState.x + 2, textState.y + 2); textState.x += this.standardFontSize() + 8; }; Window_MiniInfo.prototype.drawIcon = function (iconIndex, x, y) { var bitmap = ImageManager.loadSystem("IconSet"); var pw = Window_Base._iconWidth; var ph = Window_Base._iconHeight; var sx = (iconIndex % 16) * pw; var sy = Math.floor(iconIndex / 16) * ph; var n = Math.floor((this.contents.fontSize / 28) * Window_Base._iconWidth); this.contents.blt(bitmap, sx, sy, pw, ph, x, y, n, n); }; Window_MiniInfo.prototype.exRow = function () { if (this._item && this._item.name) return 1; return 0; }; Window_MiniInfo.prototype.setItem = function (item, rect, maxCols) { this._item = item; this._maxCols = maxCols ? maxCols : 1; this.makeContents(); if (!maxCols && this._maxCols === 1 && this._data.length > twoColSize) this._maxCols = 2; if (this._data.length > 0 && this._showInfo) { this.width = this.calcWidth(); this.height = this.calcHeight(); this.refresh(); this.updatePosition(rect, rect.padding); this.open(); } else { this.close(); } }; Window_MiniInfo.prototype.updatePosition = function (rect, padding) { this.x = Math.min( Math.max(0, rect.width - this.width) + rect.x, Graphics.boxWidth - this.width ); this.y = rect.y; if (this.y + this.height > Graphics.boxHeight) { this.y = Math.max(rect.y - this.height - padding - rect.height, 0); } this.x += offsetX; this.y += offsetY; }; Window_MiniInfo.prototype.makeContents = function () { var item = this._item; var color = paramColor; this._data = []; var c = "\\C[" + color[0] + "]"; var s = "\\C[" + color[1] + "]"; var g = "\\C[" + color[2] + "]"; var r = "\\C[" + color[3] + "]"; var text = ""; var preInfos = DataManager.preInfoItem(item); var afterInfos = DataManager.afterInfoItem(item); if (preInfos) this._data = this._data.concat(preInfos); if (item.effects) { for (var i = 0, max = item.effects.length; i < max; i++) { var e = item.effects[i]; text = ""; switch (e.code) { case 11: if (e.value1 > 0 && effectNames[0]) text = s + effectNames[0] + ":" + g + Math.floor(e.value1 * 100) + "%"; if (e.value1 < 0 && effectNames[1]) text = s + effectNames[1] + ":" + r + Math.floor(Math.abs(e.value1 * 100)) + "%"; if (e.value2 > 0 && effectNames[0]) text = s + effectNames[0] + ":" + g + e.value2; if (e.value2 < 0 && effectNames[1]) text = s + effectNames[1] + ":" + r + Math.abs(e.value2); break; case 12: if (e.value1 > 0 && effectNames[2]) text = s + effectNames[2] + ":" + g + Math.floor(e.value1 * 100) + "%"; if (e.value1 < 0 && effectNames[3]) text = s + effectNames[3] + ":" + r + Math.floor(Math.abs(e.value1 * 100)) + "%"; if (e.value2 > 0 && effectNames[2]) text = s + effectNames[2] + ":" + g + e.value2; if (e.value2 < 0 && effectNames[3]) text = s + effectNames[3] + ":" + r + Math.abs(e.value2); break; case 13: if (e.value1 > 0 && effectNames[4]) text = s + effectNames[4] + g + "+" + e.value1; break; case 21: var state = $dataStates[e.dataId]; if (state) { var name = state.name; if (e.value1 > 0 && effectNames[5]) text = s + effectNames[5] + ":" + c + name + " " + Math.floor(Math.abs(e.value1 * 100)) + "%"; } break; case 22: var state = $dataStates[e.dataId]; if (state) { var name = state.name; if (e.value1 > 0 && effectNames[6]) text = s + effectNames[6] + ":" + c + name + " " + Math.floor(Math.abs(e.value1 * 100)) + "%"; } break; case 31: var name = TextManager.param(e.dataId); if (e.value1 > 0 && effectNames[7]) text = s + effectNames[7] + ":" + c + name + " " + e.value1 + turnText; break; case 32: var name = TextManager.param(e.dataId); if (e.value1 > 0 && effectNames[8]) text = s + effectNames[8] + ":" + c + name + " " + e.value1 + turnText; break; case 33: if (effectNames[9]) { var name = TextManager.param(e.dataId); text = s + effectNames[9] + ":" + c + name; } break; case 34: if (effectNames[10]) { var name = TextManager.param(e.dataId); text = s + effectNames[10] + ":" + c + name; } break; case 41: if (effectNames[11]) text = s + effectNames[11] + ":" + c + escapeText; break; case 42: if (effectNames[12]) { var name = TextManager.param(e.dataId); text = s + effectNames[12] + ":" + c + name + "+" + e.value1; } break; case 43: if (effectNames[13]) { var name = $dataSkills[e.dataId].name; if (name) text = s + effectNames[13] + ":" + c + name; } break; case 44: if (effectNames[14]) { var name = $dataCommonEvents[e.dataId].name; if (name) text = s + effectNames[14] + ":" + c + name; } break; } if (text) this._data.push(text); } } if (item.params) { for (var i = 0; i < 8; i++) { var value = item.params[i]; if (value !== 0) { var ud = value > 0 ? g : r; var sym = value > 0 ? "+" : ""; this._data.push(s + TextManager.param(i) + ud + sym + value); } } } if (item.traits) { for (var i = 0, max = item.traits.length; i < max; i++) { var trait = item.traits[i]; var vocab = paramVocab; var dataId = trait.dataId; var value = trait.value; var ud = value > 1.0 ? g : r; var du = value < 1.0 ? g : r; var sym = value > 0 ? "+" : ""; text = ""; switch (trait.code) { case 11: if (vocab[0][0] && value !== 1.0) { var ele = $dataSystem.elements[dataId]; text = c + ele + s + vocab[0][0] + du + "x" + Math.floor(value * 100) + "%"; } break; case 12: if (vocab[0][1] && value !== 1.0) { var param = TextManager.param(dataId); text = c + param + s + vocab[0][1] + du + "x" + Math.floor(value * 100) + "%"; } break; case 13: if (vocab[0][0] && value !== 1.0) { var state = $dataStates[dataId].name; text = c + state + s + vocab[0][0] + du + "x" + Math.floor(value * 100) + "%"; } break; case 14: if (vocab[0][2]) { var state = $dataStates[dataId].name; text = c + state + s + vocab[0][2]; } break; case 21: if (value !== 1.0) { var param = TextManager.param(dataId); text = s + param + ud + "x" + Math.floor(value * 100) + "%"; } break; case 22: var xparam = vocab[1][dataId]; if (xparam && value !== 0) { //if (dataId === 0 && xparam) xparam = TextManager.param(8); //if (dataId === 1 && xparam) xparam = TextManager.param(9); if (dataId === 7 && xparam) xparam = TextManager.hpA + xparam; if (dataId === 8 && xparam) xparam = TextManager.mpA + xparam; if (dataId === 9 && xparam) xparam = TextManager.tpA + xparam; text = s + xparam + du + sym + Math.floor(value * 100) + "%"; } break; case 23: var sparam = vocab[2][dataId]; if (sparam && value !== 1.0) { if (dataId === 0) ud = c; if (dataId === 4) { sparam = TextManager.mpA + sparam; ud = du; } if (dataId === 5) TextManager.tpA + sparam; if (dataId === 6 || dataId === 7 || dataId === 8) ud = du; text = s + sparam + ud + "x" + Math.floor(value * 100) + "%"; } break; case 31: if (vocab[3][0]) { var ele = $dataSystem.elements[dataId]; text = s + vocab[3][0] + c + ele; } break; case 32: if (vocab[3][1] && value > 0) { var state = $dataStates[dataId].name; text = s + vocab[3][1] + c + state + " " + Math.floor(value * 100) + "%"; } break; case 33: if (vocab[3][2] && value !== 0) text = s + vocab[3][2] + ud + sym + value; break; case 34: if (vocab[3][3] && value !== 0) { var ud = value > 0 ? g : r; text = s + vocab[3][3] + ud + sym + value + "回"; } break; case 41: case 42: var stype = $dataSystem.skillTypes[dataId]; var v = trait.code === 41 ? vocab[4][0] : vocab[4][1]; if (v && stype) text = s + v + c + stype; break; case 43: case 44: var skill = $dataSkills[dataId]; var v = trait.code === 43 ? vocab[4][2] : vocab[4][3]; if (v && skill) text = s + v + c + skill.name; break; case 51: case 52: var type = trait.code === 51 ? $dataSystem.weaponTypes[dataId] : $dataSystem.armorTypes[dataId]; var v = trait.code === 51 ? vocab[5][0] : vocab[5][1]; if (v && type) text = s + v + c + type; break; case 53: case 54: var etype = $dataSystem.equipTypes[dataId]; var v = trait.code === 53 ? vocab[5][2] : vocab[5][3]; if (v && etype) text = s + v + c + etype; break; case 55: if (vocab[5][4]) text = s + vocab[5][4]; break; case 61: if (vocab[6][0] && value > 0) text = s + vocab[6][0] + du + sym + value * 100 + "%"; break; case 62: if (vocab[6][1 + dataId]) { text = s + vocab[6][1 + dataId]; } break; case 63: if (vocab[6][5]) text = s + vocab[6][5] + defeatText[dataId]; break; case 64: if (vocab[6][6 + dataId]) text = s + vocab[6][6 + dataId]; break; case 111: if (vocab[0][0] && value !== 0) { var ele = $dataSystem.elements[dataId]; du = value < 0 ? g : r; text = c + ele + s + vocab[0][0] + du + sym + Math.floor(value * 100) + "%"; } break; case 112: if (vocab[0][1] && value !== 0) { var param = TextManager.param(dataId); du = value < 0 ? g : r; text = c + param + s + vocab[0][1] + du + sym + Math.floor(value * 100) + "%"; } break; case 113: if (vocab[0][0] && value !== 0) { var state = $dataStates[dataId].name; du = value < 0 ? g : r; text = c + state + s + vocab[0][0] + du + sym + Math.floor(value * 100) + "%"; } break; case 121: if (value !== 0) { var param = TextManager.param(dataId); text = s + param + ud + sym + value; } break; case 123: var sparam = vocab[2][dataId]; if (sparam && value !== 0) { ud = value > 0 ? g : r; du = value < 0 ? g : r; if (dataId === 0) ud = c; if (dataId === 4) { sparam = TextManager.mpA + sparam; ud = du; } if (dataId === 5) TextManager.tpA + sparam; if (dataId === 6 || dataId === 7 || dataId === 8) ud = du; text = s + sparam + ud + sym + Math.floor(value * 100) + "%"; } break; } if (text) this._data.push(text); } } if (item.data) this._data = this._data.concat(item.data); if (afterInfos) this._data = this._data.concat(afterInfos); }; Window_MiniInfo.prototype.calcWidth = function () { var w = 32; var ic = 0; var nw = 0; if (this._item && this._item.name) { var name = this._item.name; if (this._item.iconIndex) name = "\\I[" + this._item.iconIndex + "]" + name; name = name.replace(/\\C\[\d+\]/gi, ""); name = name.replace( /\\I\[\d+\]/gi, function () { ic += 1; return ""; }.bind(this) ); nw = this.textWidth(name) + ic * (this.standardFontSize() + 8); } for (var i = 0, max = this._data.length; i < max; i++) { var text = this._data[i]; text = text.replace(/\\C\[\d+\]/gi, ""); text = text.replace( /\\I\[\d+\]/gi, function () { ic += 1; return ""; }.bind(this) ); var n = this.textWidth(text) + ic * (this.standardFontSize() + 8); if (n > w) w = n; } w = w * this._maxCols; w = nw > w ? nw : w; return w + 32; }; Window_MiniInfo.prototype.calcHeight = function () { return ( (Math.ceil(this._data.length / this._maxCols) + this.exRow()) * (this.standardFontSize() + 2) + this.standardPadding() * 2 + 24 ); }; Window_MiniInfo.prototype.refresh = function () { this.createContents(); this.contents.clear(); var fs = this.standardFontSize() + 2; var oy = 8; if (this.exRow()) { oy += 8; var name = this._item.name; if (this._item.iconIndex) name = "\\I[" + this._item.iconIndex + "]" + name; this.drawTextEx(name, 8, 4); this.contents.paintOpacity = 128; this.contents.fillRect( 4, fs + 12, this.contentsWidth() - 8, 2, this.normalColor() ); this.contents.paintOpacity = 255; } for (var i = 0, max = this._data.length; i < max; i++) { var x = 6 + Math.floor(i / (max / this._maxCols)) * Math.floor(this.contentsWidth() / 2); var y = ((i % Math.ceil(max / this._maxCols)) + this.exRow()) * fs + oy; this.drawTextEx(this._data[i], x, y); } }; //////////////////////////////////////////////////////////////////////////////////// var __WSelectable_setHelpWindowItem = Window_Selectable.prototype.setHelpWindowItem; Window_Selectable.prototype.setHelpWindowItem = function (item) { __WSelectable_setHelpWindowItem.call(this, item); this.setMiniWindow(item); }; var __WSelectable_deactivate = Window_Selectable.prototype.deactivate; Window_Selectable.prototype.deactivate = function () { __WSelectable_deactivate.call(this); if (this._miniInfoWindow) this._miniInfoWindow.close(); }; var __WSelectable_processHandling = Window_Selectable.prototype.processHandling; Window_Selectable.prototype.processHandling = function () { __WSelectable_processHandling.call(this); if ( this.isOpenAndActive() && this._miniInfoWindow && this.isIwSwitchTriggered() ) { this._miniInfoWindow._showInfo = !this._miniInfoWindow._showInfo; if (this._miniInfoWindow._showInfo) { this._miniInfoWindow.open(); this.updateHelp(); } if (!this._miniInfoWindow._showInfo) this._miniInfoWindow.close(); } }; Window_Selectable.prototype.isIwSwitchTriggered = function () { for (var i = 0, max = switchKey.length; i < max; i++) { var key = switchKey[i]; if (Input.isTriggered(key)) return true; } return false; }; Window_Selectable.prototype.setMiniWindow = function (item) { if (this._miniInfoWindow) { if (this.active && item) { var rect = this.itemRect(this.index()); rect.x = rect.x + this.x; rect.y = rect.y + rect.height + this.y + this.standardPadding() + 4; rect.padding = this.standardPadding(); this._miniInfoWindow.setItem(item, rect); } else { this._miniInfoWindow.close(); } } }; //////////////////////////////////////////////////////////////////////////////////// Scene_Base.prototype.createMiniWindow = function () { this._miniWindow = new Window_MiniInfo(); if (this._buyWindow) this._buyWindow._miniInfoWindow = this._miniWindow; if (this._sellWindow) this._sellWindow._miniInfoWindow = this._miniWindow; if (this._slotWindow) this._slotWindow._miniInfoWindow = this._miniWindow; if (this._itemWindow) this._itemWindow._miniInfoWindow = this._miniWindow; this.addChild(this._miniWindow); }; //////////////////////////////////////////////////////////////////////////////////// var __SItem_create = Scene_Item.prototype.create; Scene_Item.prototype.create = function () { __SItem_create.call(this); if (useSceneItem) this.createMiniWindow(); }; //////////////////////////////////////////////////////////////////////////////////// var __SSkill_create = Scene_Skill.prototype.create; Scene_Skill.prototype.create = function () { __SSkill_create.call(this); if (useSceneSkill) this.createMiniWindow(); }; //////////////////////////////////////////////////////////////////////////////////// var __SEquip_create = Scene_Equip.prototype.create; Scene_Equip.prototype.create = function () { __SEquip_create.call(this); if (useSceneEquip) this.createMiniWindow(); }; //////////////////////////////////////////////////////////////////////////////////// var __SShop_create = Scene_Shop.prototype.create; Scene_Shop.prototype.create = function () { __SShop_create.call(this); if (useSceneShop) this.createMiniWindow(); }; //////////////////////////////////////////////////////////////////////////////////// })();