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

967 lines
33 KiB
JavaScript

//=============================================================================
// Yanfly Engine Plugins - Quest Journal Extension - Map Quest Window
// YEP_X_MapQuestWindow.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_X_MapQuestWindow = true;
var Yanfly = Yanfly || {};
Yanfly.AMQW = Yanfly.AMQW || {};
Yanfly.AMQW.version = 1.01;
//=============================================================================
/*:
* @plugindesc YEP任务活动窗口-扩展
* @author Yanfly Engine Plugins 汉化:硕明云书
*
* @help
* ============================================================================
* 注意
* ============================================================================
* 此插件需要任务日志系统插件才能正常使用!
* ============================================================================
* 说明
* ============================================================================
*
* 自动换行目标
* - For those with YEP_MessageCore.js installed, you can set whether or not
* you want the objectives to be word wrapped. Enabling this would set quest
* objectives to become word wrapped and disabling it would not.
*
* Default Show
* - This will determine if you want this window to appear by default or not.
* This will have no bearing on the player's Options menu command, but it will
* allow you to disable the Active Map Quest Window from the mechanical-driven
* side of the game.
*
* ---
*
* Window Settings
* - If you wish to customize the category window, you can adjust the various
* settings here to adjust its properties. However, keep in mind that unless
* you are familiar with JavaScript, you can make errors here that can make the
* windows not work in your game.
*
* X: Graphics.boxWidth - width
* Y: 0
* Scale: 0.50
* Width: Graphics.boxWidth / 3
* Line Height: 36
* Font Face: GameFont
* Font Size: 28
* Standard Padding: 18
* Text Padding: 6
* Standard Opacity: 255
* Back Opacity: 192
* Window Skin: Window
*
* ============================================================================
* Plugin Commands
* ============================================================================
*
* You can use the following plugin commands to change the behavior of the
* Map Quest Window.
*
* Plugin Commands:
*
* SetActiveQuest x
* - Sets the active quest to x.
*
* RefreshActiveQuestWindow
* - Refreshes the map quest window.
*
* ShowActiveQuestWindow
* HideActiveQuestWindow
* - Changes the Active Map Quest Window to be visible/hidden. This will not
* override the player's Options Menu's setting to hide the window.
*
* ============================================================================
* Options Core Settings - Adding the New Options
* ============================================================================
*
* If you are using YEP_OptionsCore.js, you can add a new Option using this
* plugin. Here's the following code/parameter settings you can use with it.
*
* ---------
* Settings:
* ---------
*
* Name:
* \i[87]Quest Window
*
* Help Description:
* Show a window displaying the currently active
* quest on the screen while exploring.
*
* Symbol:
* mapQuestWindow
*
* Show/Hide:
* show = Imported.YEP_X_MapQuestWindow;
*
* Enable:
* enabled = true;
*
* Ext:
* ext = 0;
*
* ----------
* Functions:
* ----------
*
* Make Option Code:
* this.addCommand(name, symbol, enabled, ext);
*
* Draw Option Code:
* var rect = this.itemRectForText(index);
* var statusWidth = this.statusWidth();
* var titleWidth = rect.width - statusWidth;
* this.resetTextColor();
* this.changePaintOpacity(this.isCommandEnabled(index));
* this.drawOptionsName(index);
* this.drawOptionsOnOff(index);
*
* Process OK Code:
* var index = this.index();
* var symbol = this.commandSymbol(index);
* var value = this.getConfigValue(symbol);
* this.changeValue(symbol, !value);
*
* Cursor Right Code:
* var index = this.index();
* var symbol = this.commandSymbol(index);
* var value = this.getConfigValue(symbol);
* this.changeValue(symbol, true);
*
* Cursor Left Code:
* var index = this.index();
* var symbol = this.commandSymbol(index);
* var value = this.getConfigValue(symbol);
* this.changeValue(symbol, false);
*
* Default Config Code:
* // Empty. Provided by this plugin.
*
* Save Config Code:
* // Empty. Provided by this plugin.
*
* Load Config Code:
* // Empty. Provided by this plugin.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.01:
* - Compatibility update for YEP_OptionsCore.js.
*
* Version 1.00:
* - Finished Plugin!
*
* ============================================================================
* End of Helpfile
* ============================================================================
*
* @param ---Main---
* @default
*
* @param Window Settings
* @text 窗口设置
* @parent ---Main---
* @type struct<WindowSettings>
* @desc Adjust the properties for the map quest window here.
* @default {"---General---":"","Word Wrap Objectives":"true","Default Show":"true","---Window Settings---":"","X":"Graphics.boxWidth - width","Y":"0","Scale":"0.50","Width":"Graphics.boxWidth / 3","Line Height":"36","Font Face":"GameFont","Font Size":"28","Standard Padding":"18","Text Padding":"6","Standard Opacity":"255","Back Opacity":"192","Window Skin":"Window"}
*
* @param Set Active
* @text 设置为展示
* @parent ---Main---
* @desc Vocabulary used for the 'Set Active' option.
* You can use text codes.
* @default \i[189]开启展示
*
* @param Currently Active
* @text 当前展示描述
* @parent ---Main---
* @desc Vocabulary used for the 'Currently Active' option.
* You can use text codes.
* @default \i[189]已展示
*
* @param Clear Active
* @text 取消展示描述
* @parent ---Main---
* @desc Vocabulary used for the 'Clear Active' option.
* You can use text codes.
* @default \i[186]取消展示
*
* @param ---Options---
* @default
*
* @param Options Command
* @text 取消展示描述
* @parent ---Options---
* @desc 活动任务窗口的选项命令。
* @default 任务窗口
*
* @param Options Enable
* @text 选项启用
* @parent ---Options---
* @type boolean
* @on Show
* @off Hide
* @desc 活动任务窗口的默认选项命令选项
* @default true
*
* @param ---Automatic Updates---
* @text ---自动更新---
* @default
*
* @param Quest Add
* @text 任务添加
* @parent ---Automatic Updates---
* @type boolean
* @on YES
* @off NO
* @desc Update quest window when adding a new quest? This will set
* the newest active quest to what was just added.
* @default true
*
* @param Quest Complete
* @text 任务完成
* @parent ---Automatic Updates---
* @type boolean
* @on YES
* @off NO
* @desc If currently active quest is completed, the window will
* set next available uncompleted quest.
* @default true
*
* @param Quest Failed
* @text 任务失败
* @parent ---Automatic Updates---
* @type boolean
* @on YES
* @off NO
* @desc If currently active quest is failed, the window will
* set next available uncompleted quest.
* @default true
*
* @param Change Objectives
* @text 变更目标
* @parent ---Automatic Updates---
* @type boolean
* @on YES
* @off NO
* @desc Update window when quest objectives have been changed.
* @default true
*
* @param Event Update
* @text 事件更新
* @parent ---Automatic Updates---
* @type boolean
* @on YES
* @off NO
* @desc Update window when switches, variables, party members,
* and/or items, weapons, or armors change.
* @default true
*
*/
//=============================================================================
/* Plugin Parameter Structure Settings
*=============================================================================
*/
/* ----------------------------------------------------------------------------
* CategoryWindow Parameter Structure
* ---------------------------------------------------------------------------
*/
/*~struct~WindowSettings:
* @param ---General---
* @default
*
* @param Word Wrap Objectives
* @text 自动换行目标
* @parent ---General---
* @type boolean
* @on YES
* @off NO
* @desc Apply word wrap to objectives if you have YEP_MessageCore?
* @default true
*
* @param Default Show
* @text 默认显示
* @parent ---General---
* @type boolean
* @on Show
* @off Hide
* @desc Show active quest window by default?
* @default true
*
* @param ---Window Settings---
* @default
*
* @param X
* @parent ---Window Settings---
* @type combo
* @option 0
* @option Graphics.boxWidth - width
* @desc Formula for the window's X position.
* @default Graphics.boxWidth - width
*
* @param Y
* @parent ---Window Settings---
* @type combo
* @option 0
* @option Graphics.boxHeight - height
* @desc Formula for the window's Y position.
* @default 0
*
* @param Scale
* @parent ---Window Settings---
* @type combo
* @option 1.00
* @option 0.75
* @option 0.66
* @option 0.50
* @option 0.33
* @option 0.25
* @desc Scale the window smaller?
* @default 0.50
*
* @param Width
* @parent ---Window Settings---
* @type combo
* @option Graphics.boxWidth
* @option Graphics.boxWidth / 2
* @option Graphics.boxWidth / 3
* @option Graphics.boxWidth * 2 / 3
* @option Graphics.boxWidth / 4
* @option Graphics.boxWidth * 3 / 4
* @option Graphics.boxWidth / 5
* @option Graphics.boxWidth * 4 / 5
* @desc Formula for the window width.
* @default Graphics.boxWidth / 3
*
* @param Line Height
* @parent ---Window Settings---
* @type number
* @min 1
* @desc The height used for each line entry.
* @default 36
*
* @param Font Face
* @parent ---Window Settings---
* @type combo
* @option GameFont
* @option Arial
* @option Courier New
* @option SimHei
* @option Heiti TC
* @option Dotum
* @option AppleGothic
* @desc The font face used for your game.
* @default GameFont
*
* @param Font Size
* @parent ---Window Settings---
* @type combo
* @option 20
* @option 28
* @option Window_Base.prototype.standardFontSize.call(this);
* @desc Formula for the standard font size.
* @default 28
*
* @param Standard Padding
* @parent ---Window Settings---
* @type combo
* @option 0
* @option 10
* @option 18
* @option 24
* @desc Formula for the window's padding.
* @default 18
*
* @param Text Padding
* @parent ---Window Settings---
* @type combo
* @option 0
* @option 6
* @option 12
* @desc Formula for the padding used before displaying text.
* @default 6
*
* @param Standard Opacity
* @parent ---Window Settings---
* @type combo
* @option 0
* @option 128
* @option 192
* @option 255
* @desc Formula for the standard opacity used by the window.
* @default 255
*
* @param Back Opacity
* @parent ---Window Settings---
* @type combo
* @option 0
* @option 128
* @option 192
* @option 255
* @desc Formula for the opacity used by the window.
* @default 192
*
* @param Window Skin
* @parent ---Window Settings---
* @type file
* @dir img/system/
* @desc Window skin used.
* @default Window
*
*/
//=============================================================================
if (Imported.YEP_QuestJournal) {
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters("YEP_X_MapQuestWindow");
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.MQWSettings = JSON.parse(Yanfly.Parameters["Window Settings"]);
Yanfly.Param.MQWSetActive = String(Yanfly.Parameters["Set Active"]);
Yanfly.Param.MQWCurActive = String(Yanfly.Parameters["Currently Active"]);
Yanfly.Param.MQWClearActive = String(Yanfly.Parameters["Clear Active"]);
Yanfly.Param.MQWOptionCmd = String(Yanfly.Parameters["Options Command"]);
Yanfly.Param.MQWOptionSetting = eval(Yanfly.Parameters["Options Enable"]);
Yanfly.Param.MQWAddQuest = eval(Yanfly.Parameters["Quest Add"]);
Yanfly.Param.MQWQuestComplete = eval(Yanfly.Parameters["Quest Complete"]);
Yanfly.Param.MQWQuestFailed = eval(Yanfly.Parameters["Quest Failed"]);
Yanfly.Param.MQWChangeObj = eval(Yanfly.Parameters["Change Objectives"]);
Yanfly.Param.MQWEventUpdate = eval(Yanfly.Parameters["Event Update"]);
//=============================================================================
// ConfigManager
//=============================================================================
Yanfly.getDefaultMapQuestWindowOption = function () {
if (Yanfly.Param.MQWOptionSetting) {
return true;
} else {
return false;
}
};
ConfigManager.mapQuestWindow = Yanfly.getDefaultMapQuestWindowOption();
Yanfly.AMQW.ConfigManager_makeData = ConfigManager.makeData;
ConfigManager.makeData = function () {
var config = Yanfly.AMQW.ConfigManager_makeData.call(this);
config.mapQuestWindow = this.mapQuestWindow;
return config;
};
Yanfly.AMQW.ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function (config) {
Yanfly.AMQW.ConfigManager_applyData.call(this, config);
this.mapQuestWindow = this.readConfigMapQuestWindow(config, "mapQuestWindow");
};
ConfigManager.readConfigMapQuestWindow = function (config, name) {
var value = config[name];
if (value !== undefined) {
return value;
} else {
return Yanfly.getDefaultMapQuestWindowOption();
}
};
//=============================================================================
// Game_System
//=============================================================================
Yanfly.AMQW.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
Yanfly.AMQW.Game_System_initialize.call(this);
this.initMapQuestWindowSettings();
};
Game_System.prototype.initMapQuestWindowSettings = function () {
this._showMapQuestWindow = eval(Yanfly.Param.MQWSettings["Default Show"] || "true");
this._activeQuestId = 0;
};
Game_System.prototype.isShowMapQuestWindow = function () {
if (this._showMapQuestWindow === undefined) this.initMapQuestWindowSettings();
return this._showMapQuestWindow;
};
Game_System.prototype.setShowMapQuestWindow = function (value) {
if (this._showMapQuestWindow === undefined) this.initMapQuestWindowSettings();
this._showMapQuestWindow = value;
};
Game_System.prototype.getActiveQuestId = function () {
if (this._activeQuestId === undefined) this.initMapQuestWindowSettings();
return this._activeQuestId;
};
Game_System.prototype.setActiveQuestId = function (questId) {
if (this._activeQuestId === undefined) this.initMapQuestWindowSettings();
if (questId === 0 || $dataQuests[questId]) this._activeQuestId = questId;
this.refreshActiveQuestWindow();
};
Game_System.prototype.refreshActiveQuestWindow = function () {
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.refreshActiveQuestWindow();
}
};
if (Yanfly.Param.MQWAddQuest) {
Yanfly.AMQW.Game_System_questAdd = Game_System.prototype.questAdd;
Game_System.prototype.questAdd = function (questId) {
Yanfly.AMQW.Game_System_questAdd.call(this, questId);
this.setActiveQuestId(questId);
};
} // Yanfly.Param.MQWAddQuest
Yanfly.AMQW.Game_System_questRemove = Game_System.prototype.questRemove;
Game_System.prototype.questRemove = function (questId) {
Yanfly.AMQW.Game_System_questRemove.call(this, questId);
if (this.getActiveQuestId() === questId) {
this.setActiveQuestId(0);
this.refreshActiveQuestWindow();
}
};
Game_System.prototype.setNextAvailableQuestActive = function (condition) {
if (condition) {
var questId = this.getQuestsAvailable()[0];
if (questId) {
this.setActiveQuestId(questId);
} else {
this.setActiveQuestId(0);
}
} else {
this.setActiveQuestId(0);
}
this.refreshActiveQuestWindow();
};
Yanfly.AMQW.Game_System_questSetCompleted = Game_System.prototype.questSetCompleted;
Game_System.prototype.questSetCompleted = function (questId) {
Yanfly.AMQW.Game_System_questSetCompleted.call(this, questId);
if (this.getActiveQuestId() === questId) {
this.setNextAvailableQuestActive(Yanfly.Param.MQWQuestComplete);
}
};
Yanfly.AMQW.Game_System_questSetFailed = Game_System.prototype.questSetFailed;
Game_System.prototype.questSetFailed = function (questId) {
Yanfly.AMQW.Game_System_questSetFailed.call(this, questId);
if (this.getActiveQuestId() === questId) {
this.setNextAvailableQuestActive(Yanfly.Param.MQWQuestComplete);
}
};
if (Yanfly.Param.MQWChangeObj) {
Yanfly.AMQW.Game_System_questObjectivesShow = Game_System.prototype.questObjectivesShow;
Game_System.prototype.questObjectivesShow = function (questId, objId) {
Yanfly.AMQW.Game_System_questObjectivesShow.call(this, questId, objId);
if (this.getActiveQuestId() === questId) {
this.refreshActiveQuestWindow();
}
};
Yanfly.AMQW.Game_System_questObjectivesHide = Game_System.prototype.questObjectivesHide;
Game_System.prototype.questObjectivesHide = function (questId, objId) {
Yanfly.AMQW.Game_System_questObjectivesHide.call(this, questId, objId);
if (this.getActiveQuestId() === questId) {
this.refreshActiveQuestWindow();
}
};
Yanfly.AMQW.Game_System_questObjectivesNormal = Game_System.prototype.questObjectivesNormal;
Game_System.prototype.questObjectivesNormal = function (questId, objId) {
Yanfly.AMQW.Game_System_questObjectivesNormal.call(this, questId, objId);
if (this.getActiveQuestId() === questId) {
this.refreshActiveQuestWindow();
}
};
Yanfly.AMQW.Game_System_questObjectivesComplete = Game_System.prototype.questObjectivesComplete;
Game_System.prototype.questObjectivesComplete = function (questId, objId) {
Yanfly.AMQW.Game_System_questObjectivesComplete.call(this, questId, objId);
if (this.getActiveQuestId() === questId) {
this.refreshActiveQuestWindow();
}
};
Yanfly.AMQW.Game_System_questObjectivesFail = Game_System.prototype.questObjectivesFail;
Game_System.prototype.questObjectivesFail = function (questId, objId) {
Yanfly.AMQW.Game_System_questObjectivesFail.call(this, questId, objId);
if (this.getActiveQuestId() === questId) {
this.refreshActiveQuestWindow();
}
};
} // Yanfly.Param.MQWChangeObj
//=============================================================================
// Game_Map
//=============================================================================
if (Yanfly.Param.MQWEventUpdate) {
Yanfly.AMQW.Game_Map_requestRefresh = Game_Map.prototype.requestRefresh;
Game_Map.prototype.requestRefresh = function (mapId) {
Yanfly.AMQW.Game_Map_requestRefresh.call(this, mapId);
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.refreshActiveQuestWindow();
}
};
} // Yanfly.Param.MQWEventUpdate
//=============================================================================
// Game_Interpreter
//=============================================================================
Yanfly.AMQW.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
Yanfly.AMQW.Game_Interpreter_pluginCommand.call(this, command, args);
if (command === "SetActiveQuest") {
$gameSystem.setActiveQuestId(parseInt(args[0]));
} else if (command === "RefreshActiveQuestWindow") {
this.refreshActiveQuestWindow();
} else if (command === "ShowActiveQuestWindow") {
$gameSystem.setShowMapQuestWindow(true);
} else if (command === "HideActiveQuestWindow") {
$gameSystem.setShowMapQuestWindow(false);
}
};
Game_Interpreter.prototype.refreshActiveQuestWindow = function () {
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.refreshActiveQuestWindow();
}
};
//=============================================================================
// Window_Options
//=============================================================================
Yanfly.AMQW.Window_Options_addGeneralOptions = Window_Options.prototype.addGeneralOptions;
Window_Options.prototype.addGeneralOptions = function () {
Yanfly.AMQW.Window_Options_addGeneralOptions.call(this);
if (Imported.YEP_OptionsCore) return;
this.addCommand(Yanfly.Param.MQWOptionCmd, "mapQuestWindow");
};
//=============================================================================
// Window_QuestList
//=============================================================================
Yanfly.AMQW.Window_QuestList_makeExtraListC = Window_QuestList.prototype.makeExtraListC;
Window_QuestList.prototype.makeExtraListC = function () {
Yanfly.AMQW.Window_QuestList_makeExtraListC.call(this);
this.addSetActiveCommand();
this.addClearActiveCommand();
};
Window_QuestList.prototype.addSetActiveCommand = function () {
var questId = this._forcedExt;
if (questId === $gameSystem.getActiveQuestId()) {
var text = String(Yanfly.Param.MQWCurActive);
this.addCommand(text, "curActive", false);
} else {
var text = String(Yanfly.Param.MQWSetActive);
var enable = this.canBeMadeActive(questId);
this.addCommand(text, "setActive", enable);
}
};
Window_QuestList.prototype.canBeMadeActive = function (questId) {
return $gameSystem.getQuestsAvailable().contains(questId);
};
Window_QuestList.prototype.addClearActiveCommand = function () {
var text = String(Yanfly.Param.MQWClearActive);
var enable = $gameSystem.getActiveQuestId() > 0;
this.addCommand(text, "clearActive", enable);
};
//=============================================================================
// Window_MapActiveQuest
//=============================================================================
function Window_MapActiveQuest() {
this.initialize.apply(this, arguments);
}
Window_MapActiveQuest.prototype = Object.create(Window_Base.prototype);
Window_MapActiveQuest.prototype.constructor = Window_MapActiveQuest;
Window_MapActiveQuest.prototype.initialize = function () {
this._windowHeight = this.standardPadding() * 2 + this.lineHeight() * 2;
var scale = parseFloat(this.settings("Scale"));
var width = this.windowWidth();
var height = this.windowHeight();
var x = Math.round(eval(this.settings("X")));
var y = Math.round(eval(this.settings("Y")));
width = Math.ceil(width / scale);
this._allTextHeight = 0;
this._requestRefresh = false;
this._visibleCounter = 0;
Window_Base.prototype.initialize.call(this, x, y, width, height);
this.scale.x = scale;
this.scale.y = scale;
this.refresh();
if (!this.activeQuest()) this.visible = false;
};
Window_MapActiveQuest.prototype.settings = function (key) {
return Yanfly.Param.MQWSettings[key];
};
Window_MapActiveQuest.prototype.wordWrap = function () {
if (!Imported.YEP_MessageCore) return false;
if (this._wordWrapSetting === undefined) {
this._wordWrapSetting = eval(this.settings("Word Wrap Objectives"));
}
return this._wordWrapSetting;
};
Window_MapActiveQuest.prototype.windowWidth = function () {
if (this._windowWidth === undefined) {
this._windowWidth = Math.round(eval(this.settings("Width")));
}
return this._windowWidth;
};
Window_MapActiveQuest.prototype.windowHeight = function () {
return this._windowHeight;
};
Window_MapActiveQuest.prototype.lineHeight = function () {
if (this._windowLineHeight === undefined) {
this._windowLineHeight = parseInt(this.settings("Line Height"));
}
return this._windowLineHeight;
};
Window_MapActiveQuest.prototype.standardFontFace = function () {
if (this._windowFontFace === undefined) {
this._windowFontFace = this.settings("Font Face");
}
return this._windowFontFace;
};
Window_MapActiveQuest.prototype.standardFontSize = function () {
if (this._windowFontSize === undefined) {
this._windowFontSize = Math.round(eval(this.settings("Font Size")));
}
return this._windowFontSize;
};
Window_MapActiveQuest.prototype.standardPadding = function () {
if (this._windowStandardPadding === undefined) {
this._windowStandardPadding = Math.round(eval(this.settings("Standard Padding")));
}
return this._windowStandardPadding;
};
Window_MapActiveQuest.prototype.textPadding = function () {
if (this._windowTextPadding === undefined) {
this._windowTextPadding = Math.round(eval(this.settings("Text Padding")));
}
return this._windowTextPadding;
};
Window_MapActiveQuest.prototype.standardBackOpacity = function () {
if (this._windowBackOpacity === undefined) {
this._windowBackOpacity = Math.round(eval(this.settings("Back Opacity")));
}
return this._windowBackOpacity;
};
Window_MapActiveQuest.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem(this.settings("Window Skin"));
};
Window_MapActiveQuest.prototype.activeQuest = function () {
return $dataQuests[$gameSystem.getActiveQuestId()];
};
Window_MapActiveQuest.prototype.refresh = function () {
this.contents.clear();
if (!this.activeQuest()) return;
this.drawQuestData();
};
Window_MapActiveQuest.prototype.textWidthEx = function (text) {
return this.drawTextEx(text, 0, this.contents.height);
};
Window_MapActiveQuest.prototype.drawHorzLine = function (y) {
var lineY = y;
this.contents.paintOpacity = 128;
this.contents.fillRect(0, lineY, this.contentsWidth(), 2, this.normalColor());
this.contents.paintOpacity = 255;
};
Window_MapActiveQuest.prototype.drawQuestData = function () {
this.resetFontSettings();
this.height = Graphics.boxHeight;
this._windowHeight = this.height;
this.createContents();
this.drawQuestDataName();
this.drawHorzLine(this.lineHeight());
this.drawQuestDataObjectives();
this.height = this._allTextHeight + this.lineHeight() + this.standardPadding() * 2;
this._windowHeight = this.height;
};
Window_MapActiveQuest.prototype.drawQuestDataName = function () {
var text = this.activeQuest().name;
var ww = this.textWidthEx(text);
var wx = (this.contents.width - ww) / 2;
this.drawTextEx(text, wx, 0);
};
Window_MapActiveQuest.prototype.drawQuestDataObjectives = function () {
var text = this.wordWrap() ? "<WordWrap>" : "";
var questId = this.activeQuest().id;
var lineData = this.activeQuest().objectives;
var objectives = $gameSystem.getQuestObjectives(questId);
var length = objectives.length;
var first = false;
for (var i = 0; i < length; ++i) {
var objId = objectives[i];
var key = $gameSystem.getQuestObjectiveStatus(questId, objId);
var status = $gameSystem.getQuestObjectiveStatus(questId, objId);
if (status !== "Uncleared Objective") continue;
if (first) text += this.wordWrap() ? "<br>" : "\n";
first = true;
var fmt = Yanfly.Param.QuestDataWindow[key];
text += fmt.format(JSON.parse(lineData[objId]));
}
this.drawQuestTextEx(text, 0, this.lineHeight());
};
Window_MapActiveQuest.prototype.drawQuestTextEx = function (text, x, y) {
if (text) {
var textState = { index: 0, x: x, y: y, left: x };
textState.text = this.convertEscapeCharacters(text);
textState.height = this.calcTextHeight(textState, false);
this.resetFontSettings();
while (textState.index < textState.text.length) {
this.processCharacter(textState);
}
this._allTextHeight = textState.y - y + this.lineHeight();
return textState.x - x;
} else {
return 0;
}
};
Window_MapActiveQuest.prototype.update = function () {
this.updateRefresh();
Window_Base.prototype.update.call(this);
this.updateVisible();
};
Window_MapActiveQuest.prototype.updateRefresh = function () {
if (this._requestRefresh) {
this.refresh();
this._requestRefresh = false;
}
};
Window_MapActiveQuest.prototype.updateVisible = function () {
var visible = this.isWindowVisible();
if (visible && this._visibleCounter <= 0) {
this.visible = true;
} else if (visible) {
this._visibleCounter -= 1;
this.visible = false;
} else {
this._visibleCounter = 10;
this.visible = false;
}
};
Window_MapActiveQuest.prototype.isWindowVisible = function () {
if (!ConfigManager.mapQuestWindow) return false;
if (!this.activeQuest()) return false;
if ($gameMessage.isBusy()) return false;
if (SceneManager.isSceneChanging()) return false;
return $gameSystem.isShowMapQuestWindow();
};
Window_MapActiveQuest.prototype.requestRefresh = function (value) {
this._requestRefresh = value;
};
//=============================================================================
// Scene_Map
//=============================================================================
Yanfly.AMQW.Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function () {
Yanfly.AMQW.Scene_Map_createAllWindows.call(this);
this.createMapQuestWindow();
};
Scene_Map.prototype.createMapQuestWindow = function () {
this._activeQuestWindow = new Window_MapActiveQuest();
this.addWindow(this._activeQuestWindow);
};
Scene_Map.prototype.refreshActiveQuestWindow = function () {
if (this._activeQuestWindow) this._activeQuestWindow.requestRefresh(true);
};
//=============================================================================
// Scene_Quest
//=============================================================================
Yanfly.AMQW.Scene_Quest_createListWindow = Scene_Quest.prototype.createListWindow;
Scene_Quest.prototype.createListWindow = function () {
Yanfly.AMQW.Scene_Quest_createListWindow.call(this);
this._listWindow.setHandler("setActive", this.onListSetActive.bind(this));
this._listWindow.setHandler("clearActive", this.onListClearActive.bind(this));
};
Yanfly.AMQW.Scene_Quest_isQuestExtraCommand = Scene_Quest.prototype.isQuestExtraCommand;
Scene_Quest.prototype.isQuestExtraCommand = function () {
return true;
};
Scene_Quest.prototype.onListSetActive = function () {
this._listWindow.activate();
$gameSystem.setActiveQuestId(this._listWindow.currentExt());
this._listWindow.refresh();
};
Scene_Quest.prototype.onListClearActive = function () {
this._listWindow.activate();
$gameSystem.setActiveQuestId(0);
this._listWindow.refresh();
};
//=============================================================================
// End of Main Functions
//=============================================================================
} else {
var text = "";
text += "You are getting this error because you are trying to run ";
text += "YEP_X_MapQuestWindow without YEP_QuestJournal. Please visit Yanfly.moe ";
text += "and install YEP_QuestJournal in your game project before you can use ";
text += "this plugin.";
console.log(text);
require("nw.gui").Window.get().showDevTools();
}
//=============================================================================
// End of File
//=============================================================================