Files
2019-11-05 20:14:51 +01:00

339 lines
13 KiB
JavaScript

//=============================================================================
// Yanfly Engine Plugins - Map Status Window
// YEP_MapStatusWindow.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_MapStatusWindow = true;
var Yanfly = Yanfly || {};
Yanfly.MapStatus = Yanfly.MapStatus || {};
Yanfly.MapStatus.version = 1.01;
//=============================================================================
/*:
* @plugindesc v1.01 Gain access to open up a window displaying
* your party's status while on the map screen!
* @author Yanfly Engine Plugins
*
* @param Window X
* @desc The X position of the window.
* This is a formula.
* @default Math.floor((Graphics.boxWidth - statusWindow.width) / 2);
*
* @param Window Y
* @desc The Y position of the window.
* This is a formula.
* @default Graphics.boxHeight - statusWindow.height
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* This plugin gives you (as the developer) access through plugin commands to
* opening the party's status menu on the main map screen, as it is usually
* seen from the battle system. It will display everything the normal battle
* status menu usually has and it can also be moved.
*
* ============================================================================
* Notes and Status Window Behaviors
* ============================================================================
*
* This plugin can also be combined with Button Common Events or Picture Common
* Events to give players access to a command that can open up the status
* window on demand without having to enter the main menu to see how the party
* is currently doing.
*
* The status Menu will automatically refresh while on the map screen whenever
* an actor receives HP, MP, TP, state, or buff changes. This is to ensure the
* data displayed on the menu stays updated.
*
* The player can, however, move around and interact with other events while
* the status window is open. However, in the scenario where an event opens up
* a Show Text message, the status window will automatically close itself. This
* is to prevent heavy overlapping between the windows. The status menu window
* will also close whenever the player exits the current map or enters a menu
* in a different scene.
*
* ============================================================================
* Plugin Commands
* ============================================================================
*
* There's plugin commands associate with the Map Status Window that you may
* use here!
*
* Plugin Commands:
*
* OpenMapStatusWindow
* - This will open the Map Status Window while on the map scene. It will be
* automatically refreshed before opening.
*
* CloseMapStatusWindow
* - This will close the Map Status Window while on the map scene.
*
* ToggleMapStatusWindow
* - This will switch the Map Status Window between the open and close status
* while on the map scene. When it opens, the window will be refreshed.
*
* RefreshMapStatusWindow
* - You can force the window to refresh with this command.
*
* SetMapStatusWindowX n
* - This will set the X position of the Map Status Window to n. You can use a
* formula for n. This position will persist.
*
* SetMapStatusWindowY n
* - This will set the Y position of the Map Status Window to n. You can use a
* formula for n. This position will persist.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.01:
* - Updated for RPG Maker MV version 1.5.0.
*/
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('YEP_MapStatusWindow');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.MapStatusWinX = String(Yanfly.Parameters['Window X']);
Yanfly.Param.MapStatusWinY = String(Yanfly.Parameters['Window Y']);
//=============================================================================
// Game_System
//=============================================================================
Yanfly.MapStatus.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
Yanfly.MapStatus.Game_System_initialize.call(this);
this.initMapStatusWindowSettings();
};
Game_System.prototype.initMapStatusWindowSettings = function() {
this._mapStatusWindowX = Yanfly.Param.MapStatusWinX;
this._mapStatusWindowY = Yanfly.Param.MapStatusWinY;
};
Game_System.prototype.getMapStatusWindowX = function() {
if (this._mapStatusWindowX === undefined) this.initMapStatusWindowSettings();
return this._mapStatusWindowX;
};
Game_System.prototype.getMapStatusWindowY = function() {
if (this._mapStatusWindowY === undefined) this.initMapStatusWindowSettings();
return this._mapStatusWindowY;
};
Game_System.prototype.setMapStatusWindowX = function(str) {
if (this._mapStatusWindowX === undefined) this.initMapStatusWindowSettings();
this._mapStatusWindowX = str;
};
Game_System.prototype.setMapStatusWindowY = function(str) {
if (this._mapStatusWindowY === undefined) this.initMapStatusWindowSettings();
this._mapStatusWindowY = str;
};
//=============================================================================
// Game_BattlerBase
//=============================================================================
Game_BattlerBase.prototype.isUpdateMapStatus = function() {
if (!this.isActor()) return false;
if (SceneManager._scene instanceof Scene_Map) {
var scene = SceneManager._scene;
return scene._statusWindow && scene._statusWindow.isOpen();
}
return false;
};
Yanfly.MapStatus.Game_BattlerBase_setHp = Game_BattlerBase.prototype.setHp;
Game_BattlerBase.prototype.setHp = function(hp) {
Yanfly.MapStatus.Game_BattlerBase_setHp.call(this, hp);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
Yanfly.MapStatus.Game_BattlerBase_setMp = Game_BattlerBase.prototype.setMp;
Game_BattlerBase.prototype.setMp = function(mp) {
Yanfly.MapStatus.Game_BattlerBase_setMp.call(this, mp);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
Yanfly.MapStatus.Game_BattlerBase_setTp = Game_BattlerBase.prototype.setTp;
Game_BattlerBase.prototype.setTp = function(tp) {
Yanfly.MapStatus.Game_BattlerBase_setTp.call(this, tp);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
//=============================================================================
// Game_Battler
//=============================================================================
Yanfly.MapStatus.Game_Battler_addState = Game_Battler.prototype.addState;
Game_Battler.prototype.addState = function(stateId) {
Yanfly.MapStatus.Game_Battler_addState.call(this, stateId);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
Yanfly.MapStatus.Game_Battler_removeState = Game_Battler.prototype.removeState;
Game_Battler.prototype.removeState = function(stateId) {
Yanfly.MapStatus.Game_Battler_removeState.call(this, stateId);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
Yanfly.MapStatus.Game_Battler_addBuff = Game_Battler.prototype.addBuff;
Game_Battler.prototype.addBuff = function(paramId, turns) {
Yanfly.MapStatus.Game_Battler_addBuff.call(this, paramId, turns);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
Yanfly.MapStatus.Game_Battler_addDebuff = Game_Battler.prototype.addDebuff;
Game_Battler.prototype.addDebuff = function(paramId, turns) {
Yanfly.MapStatus.Game_Battler_addDebuff.call(this, paramId, turns);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
Yanfly.MapStatus.Game_Battler_removeBuff = Game_Battler.prototype.removeBuff;
Game_Battler.prototype.removeBuff = function(paramId) {
Yanfly.MapStatus.Game_Battler_removeBuff.call(this, paramId);
if (this.isUpdateMapStatus()) SceneManager._scene.refreshMapStatusWindow();
};
//=============================================================================
// Game_Interpreter
//=============================================================================
Yanfly.MapStatus.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
Yanfly.MapStatus.Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'OpenMapStatusWindow') {
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.openMapStatusWindow();
}
} else if (command === 'CloseMapStatusWindow') {
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.closeMapStatusWindow();
}
} else if (command === 'ToggleMapStatusWindow') {
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.toggleMapStatusWindow();
}
} else if (command === 'RefreshMapStatusWindow') {
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.refreshMapStatusWindow();
}
} else if (command === 'SetMapStatusWindowX') {
if (SceneManager._scene instanceof Scene_Map) {
var code = this.argsToString(args);
$gameSystem.setMapStatusWindowX(code);
SceneManager._scene._statusWindow.x = eval(code);
}
} else if (command === 'SetMapStatusWindowY') {
if (SceneManager._scene instanceof Scene_Map) {
var code = this.argsToString(args);
$gameSystem.setMapStatusWindowY(code);
SceneManager._scene._statusWindow.y = eval(code);
}
}
};
Game_Interpreter.prototype.argsToString = function(args) {
var str = '';
var length = args.length;
for (var i = 0; i < length; ++i) {
str += args[i] + ' ';
}
return str.trim();
};
//=============================================================================
// Scene_Map
//=============================================================================
Yanfly.MapStatus.Scene_Map_createAllWindows =
Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function() {
Yanfly.MapStatus.Scene_Map_createAllWindows.call(this);
this.createMapStatusWindow();
};
Scene_Map.prototype.createMapStatusWindow = function() {
this._statusWindow = new Window_BattleStatus();
var statusWindow = this._statusWindow;
this._needStatusWindowRefresh = false;
this._statusWindow.x = eval($gameSystem.getMapStatusWindowX());
this._statusWindow.y = eval($gameSystem.getMapStatusWindowY());
this.addWindow(this._statusWindow);
};
Scene_Map.prototype.openMapStatusWindow = function() {
if (!this._statusWindow) this.createMapStatusWindow();
this._statusWindow.refresh();
this._statusWindow.open();
};
Scene_Map.prototype.closeMapStatusWindow = function() {
if (!this._statusWindow) this.createMapStatusWindow();
this._statusWindow.close();
};
Scene_Map.prototype.toggleMapStatusWindow = function() {
if (!this._statusWindow) this.createMapStatusWindow();
if (this._statusWindow.isOpen()) {
this.closeMapStatusWindow();
} else {
this.openMapStatusWindow();
}
};
Scene_Map.prototype.refreshMapStatusWindow = function() {
if (!this._statusWindow) this.createMapStatusWindow();
this._needStatusWindowRefresh = true;
};
Yanfly.MapStatus.Scene_Map_update = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
Yanfly.MapStatus.Scene_Map_update.call(this);
if (this._needStatusWindowRefresh && this._statusWindow) {
this._statusWindow.refresh();
}
};
Yanfly.MapStatus.Scene_Map_terminate = Scene_Map.prototype.terminate;
Scene_Map.prototype.terminate = function() {
this._statusWindow.visible = false;
Yanfly.MapStatus.Scene_Map_terminate.call(this);
};
//=============================================================================
// Window_Message
//=============================================================================
Yanfly.MapStatus.Window_Message_startMessage =
Window_Message.prototype.startMessage;
Window_Message.prototype.startMessage = function() {
Yanfly.MapStatus.Window_Message_startMessage.call(this);
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.closeMapStatusWindow();
}
};
Yanfly.MapStatus.Window_Message_terminateMessage =
Window_Message.prototype.terminateMessage;
Window_Message.prototype.terminateMessage = function() {
Yanfly.MapStatus.Window_Message_terminateMessage.call(this);
if (SceneManager._scene instanceof Scene_Map) {
SceneManager._scene.closeMapStatusWindow();
}
};
//=============================================================================
// End of File
//=============================================================================