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

450 lines
15 KiB
JavaScript

//=============================================================================
// Yanfly Engine Plugins - Map Select Skill
// YEP_MapSelectSkill.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_MapSelectSkill = true;
var Yanfly = Yanfly || {};
Yanfly.MSS = Yanfly.MSS || {};
Yanfly.MSS.version = 1.03;
//=============================================================================
/*:
* @plugindesc v1.03 Open up a window similar to the Select Item Window,
* but instead, returns Skill ID's to a variable.
* @author Yanfly Engine Plugins
*
* @param Default Columns
* @type number
* @min 1
* @desc Default number of columns for the window.
* @default 2
*
* @param Default Rows
* @type number
* @min 1
* @desc Default number of rows for the window.
* @default 4
*
* @param Default X Position
* @type combo
* @option left
* @option center
* @option right
* @desc Default X Position of the window.
* left center right
* @default right
*
* @param Default Y Position
* @type combo
* @option top
* @option middle
* @option bottom
* @desc Default Y Position of the window.
* top middle bottom
* @default bottom
*
* @param Default Width
* @type number
* @min 0
* @desc Default width of the window.
* If set to 0, window width will be the screen width.
* @default 0
*
* @param Default Enable
* @type boolean
* @on Enable
* @off Disable
* @desc Enable all skills by default?
* NO - false YES - true
* @default true
*
* @param Default Cost
* @type boolean
* @on Show
* @off Hide
* @desc Show the costs of the skills by default?
* NO - false YES - true
* @default true
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* This plugin produces a window similar to that of the Select Item Window, but
* instead, it displays a list of skills from a designated actor and the skill
* type selected. When a skill is selected, it set the chosen variable's value
* to become that of the picked skill's ID.
*
* ============================================================================
* Plugin Commands
* ============================================================================
*
* Use the following plugin commands to utilize the Map Select Skill plugin.
*
* --- Plugin Commands ---
*
* MapSelectSkill v a s
* - This will open up the Map Select Skill window. Replace 'v' with the ID of
* the variable you wish to set to the selected skill. Replace 'a' with the ID
* of the actor whose skill list you want to see. 's' is optional, but if used,
* it will display the skills from skill type 's' only. Replace 's' with the
* skill type's ID number.
*
* MapSelectSkillColumns x
* - Sets the number of columns for the Map Select Skill Window to x.
*
* MapSelectSkillRows x
* - Sets the number of rows for the Map Select Skill Window to x.
*
* MapSelectSkillWidth x
* - Sets the width for the Map Select Skill Window to x. If 0 is used, then
* the window width will be the screen width.
*
* MapSelectSkillX left
* MapSelectSkillX center
* MapSelectSkillX right
* - Sets the Map Select Skill Window to be aligned to the left side of the
* screen, center of the screen, or right side of the screen.
*
* MapSelectSkillY top
* MapSelectSkillY middle
* MapSelectSkillY bottom
* - Sets the Map Select Skill Window to be aligned to the top of the screen,
* middle of the screen, or bottom of the screen.
*
* EnableAllMapSelectSkills
* - This will cause all of the skills listed to become selectable regardless
* of whether or not the actor is able to use them at the time.
*
* NormalAllMapSelectSkills
* - This will cause all of the skills listed to be enabled or disabled based
* on whether or not the actor is able to use the skill at the time.
*
* ShowMapSelectSkillCost
* - Show the cost of the skills in the Map Select Skill Window.
*
* HideMapSelectSkillCost
* - Hide the cost of the skills in the Map Select Skill Window.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.03:
* - Updated for RPG Maker MV version 1.5.0.
*
* Version 1.02:
* - Optimization update.
*
* Version 1.01:
* - Compatibility update with Self Switches & Variables v1.01.
*
* Version 1.00:
* - Finished Plugin!
*/
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('YEP_MapSelectSkill');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.MSSCol = Number(Yanfly.Parameters['Default Columns']);
Yanfly.Param.MSSRow = Number(Yanfly.Parameters['Default Rows']);
Yanfly.Param.MSSPosX = String(Yanfly.Parameters['Default X Position']);
Yanfly.Param.MSSPosY = String(Yanfly.Parameters['Default Y Position']);
Yanfly.Param.MSSWidth = Number(Yanfly.Parameters['Default Width']);
Yanfly.Param.MSSEnable = eval(String(Yanfly.Parameters['Default Enable']));
Yanfly.Param.MSSCost = eval(String(Yanfly.Parameters['Default Cost']));
//=============================================================================
// Game_System
//=============================================================================
Yanfly.MSS.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
Yanfly.MSS.Game_System_initialize.call(this);
this.initMapSelectSkill();
};
Game_System.prototype.initMapSelectSkill = function() {
this._mapSelectSkillWindowColumns = Yanfly.Param.MSSCol;
this._mapSelectSkillWindowRows = Yanfly.Param.MSSRow;
this._mapSelectSkillWindowPosX = Yanfly.Param.MSSPosX;
this._mapSelectSkillWindowPosY = Yanfly.Param.MSSPosY;
this._mapSelectSkillWindowWidth = Yanfly.Param.MSSWidth;
this._mapSelectSkillWindowEnable = Yanfly.Param.MSSEnable;
this._mapSelectSkillWindowCosts = Yanfly.Param.MSSCost;
};
Game_System.prototype.getMapSelectSkillColumns = function() {
if (this._mapSelectSkillWindowColumns === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowColumns;
};
Game_System.prototype.setMapSelectSkillColumns = function(value) {
if (this._mapSelectSkillWindowColumns === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowColumns = value;
};
Game_System.prototype.getMapSelectSkillRows = function() {
if (this._mapSelectSkillWindowRows === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowRows;
};
Game_System.prototype.setMapSelectSkillRows = function(value) {
if (this._mapSelectSkillWindowRows === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowRows = value;
};
Game_System.prototype.getMapSelectSkillPosX = function() {
if (this._mapSelectSkillWindowPosX === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowPosX;
};
Game_System.prototype.setMapSelectSkillPosX = function(value) {
if (this._mapSelectSkillWindowPosX === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowPosX = value;
};
Game_System.prototype.getMapSelectSkillPosY = function() {
if (this._mapSelectSkillWindowPosY === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowPosY;
};
Game_System.prototype.setMapSelectSkillPosY = function(value) {
if (this._mapSelectSkillWindowPosY === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowPosY = value;
};
Game_System.prototype.getMapSelectSkillWidth = function() {
if (this._mapSelectSkillWindowWidth === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowWidth;
};
Game_System.prototype.setMapSelectSkillWidth = function(value) {
if (this._mapSelectSkillWindowWidth === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowWidth = value;
};
Game_System.prototype.getMapSelectSkillEnable = function() {
if (this._mapSelectSkillWindowEnable === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowEnable;
};
Game_System.prototype.setMapSelectSkillEnable = function(value) {
if (this._mapSelectSkillWindowEnable === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowEnable = value;
};
Game_System.prototype.getMapSelectSkillCosts = function() {
if (this._mapSelectSkillWindowCosts === undefined) {
this.initMapSelectSkill();
}
return this._mapSelectSkillWindowCosts;
};
Game_System.prototype.setMapSelectSkillCosts = function(value) {
if (this._mapSelectSkillWindowCosts === undefined) {
this.initMapSelectSkill();
}
this._mapSelectSkillWindowCosts = value;
};
//=============================================================================
// Game_Interpreter
//=============================================================================
Yanfly.MSS.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
Yanfly.MSS.Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'MapSelectSkill') {
if (SceneManager._scene instanceof Scene_Map) {
var varId = parseInt(args[0]);
var actorId = parseInt(args[1]);
var stypeId = parseInt(args[2] || 0);
SceneManager._scene.setupMapSelectSkill(varId, actorId, stypeId);
this.wait(10);
}
} else if (command === 'MapSelectSkillColumns') {
var value = parseInt(args[0]);
$gameSystem.setMapSelectSkillColumns(value);
} else if (command === 'MapSelectSkillRows') {
var value = parseInt(args[0]);
$gameSystem.setMapSelectSkillRows(value);
} else if (command === 'MapSelectSkillWidth') {
var value = parseInt(args[0]);
$gameSystem.setMapSelectSkillWidth(value);
} else if (command === 'MapSelectSkillX') {
var value = String(args[0]).toLowerCase();
$gameSystem.setMapSelectSkillPosX(value);
} else if (command === 'MapSelectSkillY') {
var value = String(args[0]).toLowerCase();
$gameSystem.setMapSelectSkillPosY(value);
} else if (command === 'EnableAllMapSelectSkills') {
$gameSystem.setMapSelectSkillEnable(true);
} else if (command === 'NormalAllMapSelectSkills') {
$gameSystem.setMapSelectSkillEnable(false);
} else if (command === 'ShowMapSelectSkillCost') {
$gameSystem.setMapSelectSkillCosts(true);
} else if (command === 'HideMapSelectSkillCost') {
$gameSystem.setMapSelectSkillCosts(false);
}
};
//=============================================================================
// Window_MapSelectSkill
//=============================================================================
function Window_MapSelectSkill() {
this.initialize.apply(this, arguments);
}
Window_MapSelectSkill.prototype = Object.create(Window_SkillList.prototype);
Window_MapSelectSkill.prototype.constructor = Window_MapSelectSkill;
Window_MapSelectSkill.prototype.initialize = function() {
var width = this.windowWidth();
var height = this.windowHeight();
Window_Selectable.prototype.initialize.call(this, 0, 0, width, height);
this.openness = 0;
};
Window_MapSelectSkill.prototype.windowWidth = function() {
return this._windowWidth || Graphics.boxWidth;
};
Window_MapSelectSkill.prototype.windowHeight = function() {
return this._windowHeight || this.fittingHeight(4);
};
Window_MapSelectSkill.prototype.setup = function(varId, actorId, stypeId) {
if (!varId) return;
if (!actorId) return;
this.updateWindowSettings();
this._varId = varId;
this.setActor($gameActors.actor(actorId));
this.setStypeId(stypeId);
this.refresh();
this.activate();
this.open();
this.select(0);
};
Window_MapSelectSkill.prototype.includes = function(item) {
if (!this._stypeId) return item;
return item && item.stypeId === this._stypeId;
};
Window_MapSelectSkill.prototype.maxCols = function() {
return $gameSystem.getMapSelectSkillColumns() || 1;
};
Window_MapSelectSkill.prototype.updateWindowSettings = function() {
this.width = $gameSystem.getMapSelectSkillWidth() || Graphics.boxWidth;
var col = $gameSystem.getMapSelectSkillRows() || 4;
this.height = this.fittingHeight(col);
if ($gameSystem.getMapSelectSkillPosX() === 'left') {
this.x = 0;
} else if ($gameSystem.getMapSelectSkillPosX() === 'center') {
this.x = Math.floor((Graphics.boxWidth - this.width) / 2);
} else {
this.x = Graphics.boxWidth - this.width;
}
if ($gameSystem.getMapSelectSkillPosY() === 'top') {
this.y = 0;
} else if ($gameSystem.getMapSelectSkillPosY() === 'middle') {
this.y = Math.floor((Graphics.boxHeight - this.height) / 2);
} else {
this.y = Graphics.boxHeight - this.height;
}
};
Window_MapSelectSkill.prototype.isEnabled = function(item) {
if ($gameSystem.getMapSelectSkillEnable()) return true;
return Window_SkillList.prototype.isEnabled.call(this, item);
};
Window_MapSelectSkill.prototype.drawSkillCost = function(skill, x, y, width) {
if ($gameSystem.getMapSelectSkillCosts()) {
var width =
Window_SkillList.prototype.drawSkillCost.call(this, skill, x, y, width);
}
};
//=============================================================================
// Scene_Map
//=============================================================================
Yanfly.MSS.Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function() {
Yanfly.MSS.Scene_Map_createAllWindows.call(this);
this.createMapSelectSkillWindow();
};
Scene_Map.prototype.createMapSelectSkillWindow = function() {
this._mapSelectSkillWindow = new Window_MapSelectSkill();
this._mapSelectSkillWindow.setHandler('ok',
this.onMapSelectSkillOk.bind(this));
this._mapSelectSkillWindow.setHandler('cancel',
this.onMapSelectSkillCancel.bind(this));
this.addChild(this._mapSelectSkillWindow);
};
Scene_Map.prototype.setupMapSelectSkill = function(varId, actorId, stypeId) {
this._mapSelectSkillWindow.setup(varId, actorId, stypeId);
this._active = false;
};
Scene_Map.prototype.onMapSelectSkillOk = function() {
this._mapSelectSkillWindow.close();
var skill = this._mapSelectSkillWindow.item();
var varId = this._mapSelectSkillWindow._varId;
if (Imported.YEP_SelfSwVar) $gameTemp.clearSelfSwVarEvBridge();
if (!skill) {
$gameVariables.setValue(varId, 0);
} else {
$gameVariables.setValue(varId, skill.id);
}
if (Imported.YEP_SelfSwVar) $gameTemp.clearSelfSwVarEvent();
this._active = true;
};
Scene_Map.prototype.onMapSelectSkillCancel = function() {
this._mapSelectSkillWindow.close();
var varId = this._mapSelectSkillWindow._varId;
$gameVariables.setValue(varId, 0);
this._active = true;
};
//=============================================================================
// End of File
//=============================================================================