OMORI_Android/www.eng/js/plugins/Battle Commands List.js
2024-01-15 18:44:53 +03:00

402 lines
15 KiB
JavaScript

//=============================================================================
// TDS Battle Commands List
// Version: 1.0
//=============================================================================
// Add to Imported List
var Imported = Imported || {} ; Imported.TDS_BattleCommandsList = true;
// Initialize Alias Object
var _TDS_ = _TDS_ || {} ; _TDS_.BattleCommandsList = _TDS_.BattleCommandsList || {};
//=============================================================================
/*:
* @plugindesc
* This plugin allows you to set custom battle commands for actors and classes.
*
* @author TDS
* @param Skill Type Names
* @desc Names of skill types. (Used for skill list commands) (Use a , to separate and leave empty for default name.)
* @default
*
* @help
* ============================================================================
* * Actor & Class Notetags
* ============================================================================
* Use the following note tags within the actor or class note boxes to
* set the command list for the actor or class. (Actor note tags will
* override class tags.)
*
* <BattleCommandsList>
* Command
* </BattleCommandsList>
*
* Example:
*
* <BattleCommandsList>
* attack
* defend
* skillList
* skillTypeList: 1
* skill: 10
* items
* item: 2
* </BattleCommandsList>
*
* Command List:
*
* attack
* ^ Adds default attack command to the commmand list.
*
* defend
* ^ Adds default defense command to the command list.
*
* skillList
* ^ Adds default skill command to the command list. (Shows all skills)
*
* skillTypeList: SkillTypeId
* ^ Adds a skill list command which only shows a type of skill.
* ^ SkillTypeId: Id of the type of skill to show.
*
* skill: ID
* ^ Adds a skill as a command.
* ^ ID: Id of the skill to set as a command.
*
* items
* ^ Adds default item command to the command list. (Shows all items)
*
* item: ID
* ^ Adds an item as a command.
* ^ ID: ID of the item to set as a command.
*
* ============================================================================
* * Skill & Item Notetags
* ============================================================================
* These note tags will modify how items and skills are displayed or used
* in the command window.
*
* <CommandName: NAME>
* ^ This note tag allows you to set a display name for a skill or item
* when it is being displayed as a command.
* ^ NAME: Name to use as a command.
*
* Example:
* <CommandName: Limit break>
*
*
* <CommandHideUntilSwitch: ID>
* ^ This note tag makes it so if a switch is not on the item or skill
* will not be displayed in the command list.
* ^ ID: ID of the switch to use.
*
* Example:
* <CommandHideUntilSwitch: 5>
*
*
* <CommandHideUntilUsable>
* ^ This note tag makes it so if an item or skill cannot be used by
* the actor it will not be displayed in the command list.
*
*
* <CommandHideUntilLearned>
* ^ This note tag makes it so if a skill has not been learned by the
* actor it will not be displayed in the command list.
*/
//=============================================================================
// Node.js path
var path = require('path');
// Get Parameters
var parameters = PluginManager.parameters("Battle Commands List");
// Initialize After Battle Commmon Event Parameters
_TDS_.BattleCommandsList.params = {};
// Skill Type Custom Names
_TDS_.BattleCommandsList.params.sTypeNames = [''];
// Get Text
var text = parameters['Skill Type Names'];
// If Text is not empty
if (text !== '') {
// Create List
var list = text.split(/,/);
// Go through List
for (var i = 0; i < list.length; i++) {
// Add Skill Type Name
_TDS_.BattleCommandsList.params.sTypeNames.push(list[i].trim());
}
}
//=============================================================================
// ** DataManager
//-----------------------------------------------------------------------------
// The static class that manages the database and game objects.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.BattleCommandsList.DataManager_onLoad = DataManager.onLoad;
//=============================================================================
// * On Load Processing
//=============================================================================
DataManager.onLoad = function(object) {
// Run Original Function
_TDS_.BattleCommandsList.DataManager_onLoad.call(this, object);
// Set Array & Type
var array = object, type = null;
// Object Switch
switch (object) {
case $dataActors: type = 'ACTOR' ;break;
// case $dataClasses: type = 'CLASS' ;break;
// case $dataItems: type = 'ITEM' ;break;
// case $dataSkills: type = 'SKILL' ;break;
}
// If Type is not null
if (type !== null) {
// If Array is an array
if (Array.isArray(array)) {
// Go Through Array
for (var i = 0; i < array.length; i++) {
// Get Data
var data = array[i];
// Extract MetaData
if (data) { this.extractActorBattleListMetaData(data, type); }
}
}
}
};
//=============================================================================
// * Extract Meta Data
//=============================================================================
DataManager.extractActorBattleListMetaData = function(data, type) {
// If Data has no notes return
if (data.note.length <= 0) { return; }
// If Type is Actor
if (type === 'ACTOR' || type === 'CLASS') {
// If Data Meta has Info Text
// Get Regexp
var noteData = data.note.split(/[\r\n]+/);
var regS = /<BattleCommandsList>/i, regE = /<\/BattleCommandsList>/;
// Set Addline Flag to false
var addLine = false;
// Convert Battle Command List
data.meta.BattleCommandsList = [];
// Go Through Note Data
for (var i = 0; i < noteData.length; i++) {
var line = noteData[i];
if (line.match(regS)) { addLine = true ; continue ;}
if (line.match(regE)) { addLine = false ; continue ;}
// If add line flag is true
if (addLine) {
var commandData = line.split(/:/i);
data.meta.BattleCommandsList.push({ type: commandData[0].toLowerCase(), id: Number(commandData[1]) })
}
}
}
};
//=============================================================================
// ** Game_Actor
//-----------------------------------------------------------------------------
// The game object class for an actor.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.BattleCommandsList.Game_Actor_setup = Game_Actor.prototype.setup;
//=============================================================================
// * Setup
//=============================================================================
Game_Actor.prototype.setup = function(actorId) {
// Run Original Function
_TDS_.BattleCommandsList.Game_Actor_setup.call(this, actorId);
// Initialize Battle Command List
this.initBattleCommandsList();
};
//=============================================================================
// * Initialize Actor Battle Commands List
//=============================================================================
Game_Actor.prototype.initBattleCommandsList = function() {
// Get Actor & Current Class
var actor = this.actor(), currentClass = this.currentClass();
// Find Corrent Battle Command List
if (actor.meta.BattleCommandsList) {
// Set Battle Command List
this._battleCommandsList = actor.meta.BattleCommandsList.clone();
} else if (currentClass.meta.BattleCommandsList) {
// Set Battle Command List
this._battleCommandsList = currentClass.meta.BattleCommandsList.clone();
} else {
// Set Battle Command List
this._battleCommandsList = []
}
};
//=============================================================================
// * Determine if Battler has custom battle commands
//=============================================================================
Game_Actor.prototype.hasCustomBattleCommands = function() { return this._battleCommandsList.length > 0; };
//=============================================================================
// * Get Actor Battle Commands List
//=============================================================================
Game_Actor.prototype.battleCommandsList = function() { return this._battleCommandsList; };
//=============================================================================
// * Determine if Actor can show item battle command
//=============================================================================
Game_Actor.prototype.canShowItemBattleCommand = function(item) {
if (item.meta.CommandHideUntilUsable && !this.canUse(item)) { return false; };
if (item.meta.CommandHideUntilLearned && !this.isLearnedSkill(item.id)) { return false; };
if (item.meta.CommandHideUntilSwitch && !$gameSwitches.value(Number(item.meta.CommandHideUntilSwitch))) { return false; };
// Return true by default
return true;
};
//=============================================================================
// ** Window_ActorCommand
//-----------------------------------------------------------------------------
// The window for selecting an actor's action on the battle screen.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.BattleCommandsList.Window_ActorCommand_makeCommandList = Window_ActorCommand.prototype.makeCommandList;
//=============================================================================
// * Make Command List
//=============================================================================
Window_ActorCommand.prototype.makeCommandList = function() {
// If Actor has Custom Battle Commands
if (this._actor && this._actor.hasCustomBattleCommands()) {
// Make Custom Actor Command List
this.makeCustomActorCommandList();
return;
};
// Run Original Function
_TDS_.BattleCommandsList.Window_ActorCommand_makeCommandList.call(this);
};
//=============================================================================
// * Make Custom Actor Command List
//=============================================================================
Window_ActorCommand.prototype.makeCustomActorCommandList = function() {
// Get Actor
var actor = this._actor;
// Get Actor Battle Commands List
var list = actor.battleCommandsList();
// Go Through List
for (var i = 0; i < list.length; i++) { this.addActorCustomCommand(list[i]); };
};
//=============================================================================
// * Add Actor Custom Command
//=============================================================================
Window_ActorCommand.prototype.addActorCustomCommand = function(obj) {
// Get Actor
var actor = this._actor;
// Object type case
switch (obj.type.toLowerCase()) {
case 'attack': this.addAttackCommand() ;break;
case 'skilllist': this.addSkillCommands() ;break;
case 'defend': this.addGuardCommand() ;break;
case 'items': this.addItemCommand() ;break;
case 'skilltypelist':
var stypeId = obj.id;
var presetName = _TDS_.BattleCommandsList.params.sTypeNames[stypeId];
// If Stype Names is not ''
if (presetName && presetName !== '') {
var name = presetName;
} else {
var name = $dataSystem.skillTypes[stypeId];
}
this.addCommand(name, 'skill', true, stypeId);
break;
case 'skill':
// Get Skill
var skill = $dataSkills[obj.id];
// If Skill command can be shown
if (actor.canShowItemBattleCommand(skill)) {
// Get Skill Name
var name = (skill.meta.CommandName || skill.name).trim();
// Add Command
this.addCommand(name, 'actionSkill', actor.canUse(skill), skill.id);
}
break;
case 'item':
// Get Skill
var item = $dataItems[obj.id];
// If Item command can be shown
if (actor.canShowItemBattleCommand(item)) {
// Get Item Name
var name = (item.meta.CommandName || item.name).trim();
// Add Command
this.addCommand(name, 'actionItem', actor.canUse(item), item.id);
}
break;
default:
this.addCommand('ERROR', 'ERROR', false);
break;
}
};
//=============================================================================
// ** Scene_Battle
//-----------------------------------------------------------------------------
// The scene class of the battle screen.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.BattleCommandsList.Scene_Battle_createActorCommandWindow = Scene_Battle.prototype.createActorCommandWindow;
_TDS_.BattleCommandsList.Scene_Battle_onEnemyCancel = Scene_Battle.prototype.onEnemyCancel;
_TDS_.BattleCommandsList.Scene_Battle_onActorCancel = Scene_Battle.prototype.onActorCancel;
//=============================================================================
// * Create Actor Command Window
//=============================================================================
Scene_Battle.prototype.createActorCommandWindow = function() {
// Run Original Function
_TDS_.BattleCommandsList.Scene_Battle_createActorCommandWindow.call(this);
// Set Actor Command Window Handlers
this._actorCommandWindow.setHandler('actionSkill', this.commandActorCommandAction.bind(this));
this._actorCommandWindow.setHandler('actionItem', this.commandActorCommandAction.bind(this));
};
//=============================================================================
// * On Enemy Cancel
//=============================================================================
Scene_Battle.prototype.onEnemyCancel = function() {
// Run Original Function
_TDS_.BattleCommandsList.Scene_Battle_onEnemyCancel.call(this);
switch (this._actorCommandWindow.currentSymbol()) {
case 'actionSkill':
this._actorCommandWindow.activate();
break;
case 'actionItem':
this._actorCommandWindow.activate();
break;
}
};
//=============================================================================
// * On Actor Cancel
//=============================================================================
Scene_Battle.prototype.onActorCancel = function() {
// Run Original Function
_TDS_.BattleCommandsList.Scene_Battle_onActorCancel.call(this);
switch (this._actorCommandWindow.currentSymbol()) {
case 'actionSkill':
this._actorCommandWindow.activate();
break;
case 'actionItem':
this._actorCommandWindow.activate();
break;
}
};
//=============================================================================
// * Create Actor Command Window
//=============================================================================
Scene_Battle.prototype.commandActorCommandAction = function() {
var symbol = this._actorCommandWindow.currentSymbol();
var id = this._actorCommandWindow.currentExt();
var action = BattleManager.inputtingAction();
if (symbol === 'actionSkill') { action.setSkill(id); }
if (symbol === 'actionItem') { action.setItem(id); }
this.onSelectAction();
}