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.
436 lines
14 KiB
JavaScript
436 lines
14 KiB
JavaScript
2 years ago
|
//=============================================================================
|
||
|
// Yanfly Engine Plugins - Item Core Extension - Item Menu Categories
|
||
|
// YEP_X_ItemCategories.js
|
||
|
//=============================================================================
|
||
|
|
||
|
var Imported = Imported || {};
|
||
|
Imported.YEP_X_ItemCategories = true;
|
||
|
|
||
|
var Yanfly = Yanfly || {};
|
||
|
Yanfly.ItemCat = Yanfly.ItemCat || {};
|
||
|
Yanfly.ItemCat.version = 1.01;
|
||
|
|
||
|
//=============================================================================
|
||
|
/*:
|
||
|
* @plugindesc v1.01 (Requires YEP_ItemCore.js) Assign items to various
|
||
|
* categories under the item menu.
|
||
|
* @author Yanfly Engine Plugins + Sylvester Collaboration
|
||
|
*
|
||
|
* @param ---General---
|
||
|
* @default
|
||
|
*
|
||
|
* @param Category Order
|
||
|
* @parent ---General---
|
||
|
* @desc Here is the order of all the categories shown in the item
|
||
|
* menu. Look in the plugin's help file for more information.
|
||
|
* @default Items, Weapons, Armors, KeyItems
|
||
|
*
|
||
|
* @param ---Naming---
|
||
|
* @default
|
||
|
*
|
||
|
* @param Hidden Item A
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Special Items
|
||
|
*
|
||
|
* @param Hidden Item B
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Unique Items
|
||
|
*
|
||
|
* @param Consumable
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Consumable
|
||
|
*
|
||
|
* @param Nonconsumable
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Nonconsumable
|
||
|
*
|
||
|
* @param Always Usable
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Usable
|
||
|
*
|
||
|
* @param Battle Usable
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Battle
|
||
|
*
|
||
|
* @param Field Usable
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Field
|
||
|
*
|
||
|
* @param Never Usable
|
||
|
* @parent ---Naming---
|
||
|
* @desc How this category is named in the Item Menu
|
||
|
* @default Misc
|
||
|
*
|
||
|
* @help
|
||
|
* ============================================================================
|
||
|
* Introduction
|
||
|
* ============================================================================
|
||
|
*
|
||
|
* This plugin requires YEP_ItemCore. Make sure this plugin is located under
|
||
|
* YEP_ItemCore in the plugin list.
|
||
|
*
|
||
|
* In RPG Maker MV, there exists only four categories seen in the item menu:
|
||
|
* Items, Weapons, Armors, and Key Items. Adding extra categories wouldn't be
|
||
|
* possible without plugins. This plugin, through the help of Item Core, will
|
||
|
* allow you to add in many more categories in addition to many premade ones
|
||
|
* that are automatically added based on weapon types, armor types, equipment
|
||
|
* types, item usage, and more!
|
||
|
*
|
||
|
* This is a collaboration plugin by Sylvester and Yanfly to ensure
|
||
|
* compatibility with the Yanfly Engine Plugins library.
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* Instructions
|
||
|
* ============================================================================
|
||
|
*
|
||
|
* To change the item categories that appear in the item menu, go to the plugin
|
||
|
* parameters and alter the list. Separate each category with a comma (,). Each
|
||
|
* category must be spelled correctly using the following formats:
|
||
|
*
|
||
|
* ----------------------- --------------------------------------------------
|
||
|
* Plugin Parameter Syntax Description
|
||
|
* ----------------------- --------------------------------------------------
|
||
|
* Items Lists only Regular Item types
|
||
|
* AllItems All items in the items database with Key Items
|
||
|
*
|
||
|
* RegularItems Lists only Regular Item types
|
||
|
* KeyItems Lists only Key Item types
|
||
|
* HiddenItemA Lists only Hidden Item A types
|
||
|
* HiddenItemB Lists only Hidden Item B types
|
||
|
* Consumable Lists only consumable items
|
||
|
* Nonconsumable Lists only nonconsumeable items
|
||
|
* AlwaysUsable Lists only always usable items
|
||
|
* BattleUsable Lists only battle usable items
|
||
|
* FieldUsable Lists only field usable items
|
||
|
* NeverUsable Lists only never usable items
|
||
|
*
|
||
|
* Weapons Lists all weapons
|
||
|
* WType:x Lists weapons of type x (replace x with ID)
|
||
|
*
|
||
|
* Armors Lists all armors
|
||
|
* AType:x Lists armors of armor type x (replace x with ID)
|
||
|
*
|
||
|
* EType:x Lists items of equip type x (replace x with ID)
|
||
|
*
|
||
|
* Category:x Lists items of category x (replace x with text)
|
||
|
*
|
||
|
* An example of a list that would display something like:
|
||
|
* Items
|
||
|
* Key Items
|
||
|
* Dagger
|
||
|
* Sword
|
||
|
* Bodygear
|
||
|
* Accessory
|
||
|
* Herbs
|
||
|
*
|
||
|
* Would look like this for the plugin parameters:
|
||
|
*
|
||
|
* Items, KeyItems, WType:1, WType2, AType1, AType2, Category:Herbs
|
||
|
*
|
||
|
* The categories go in the order they're listed so plan them out accordingly.
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* Notetags
|
||
|
* ============================================================================
|
||
|
*
|
||
|
* To add custom categories to items, use the following notetag:
|
||
|
*
|
||
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
*
|
||
|
* Item, Weapon, and Armor Notetags:
|
||
|
*
|
||
|
* <Menu Category: x>
|
||
|
* <Menu Category: x, x, x>
|
||
|
* - Replace 'x' with the category name you wish to give the item. Insert
|
||
|
* multiples of this tag to insert more categories. These categories will be
|
||
|
* used in combination with the Category:x plugin parameter syntax keyword.
|
||
|
*
|
||
|
* For Example:
|
||
|
*
|
||
|
* <Menu Category: Herbs>
|
||
|
*
|
||
|
* Would require this syntax keyword in the plugin parameters:
|
||
|
*
|
||
|
* Category:Herbs
|
||
|
*
|
||
|
* If you use the version of the notetag with multiple categories, it would
|
||
|
* work something like this:
|
||
|
*
|
||
|
* <Menu Category: Herbs, Potions, Elixirs>
|
||
|
*
|
||
|
* Plugin Parameter:
|
||
|
*
|
||
|
* Category:Herbs, Category:Potions, Category:Elixirs
|
||
|
*
|
||
|
* **Note** The notetag does not apply for any of the pre-made categories.
|
||
|
*
|
||
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
*
|
||
|
* ============================================================================
|
||
|
* Changelog
|
||
|
* ============================================================================
|
||
|
*
|
||
|
* Version 1.01:
|
||
|
* - Updated for RPG Maker MV version 1.5.0.
|
||
|
*
|
||
|
* Version 1.00:
|
||
|
* - Finished Plugin!
|
||
|
*/
|
||
|
//=============================================================================
|
||
|
|
||
|
if (Imported.YEP_ItemCore) {
|
||
|
|
||
|
//=============================================================================
|
||
|
// Parameter Variables
|
||
|
//=============================================================================
|
||
|
|
||
|
Yanfly.Parameters = PluginManager.parameters('YEP_X_ItemCategories');
|
||
|
Yanfly.Param = Yanfly.Param || {};
|
||
|
|
||
|
Yanfly.SetupParameters = function() {
|
||
|
Yanfly.Param.ItemCatOrder = String(Yanfly.Parameters['Category Order']);
|
||
|
Yanfly.Param.ItemCatOrder = Yanfly.Param.ItemCatOrder.split(',');
|
||
|
//---
|
||
|
var length = Yanfly.Param.ItemCatOrder.length;
|
||
|
for (var i = 0; i < 0; i++) {
|
||
|
Yanfly.Param.ItemCatOrder[i] = Yanfly.Param.ItemCatOrder[i].trim();
|
||
|
}
|
||
|
Yanfly.Param.ItemCatNames = {
|
||
|
HiddenItemA: String(Yanfly.Parameters['Hidden Item A']),
|
||
|
HiddenItemB: String(Yanfly.Parameters['Hidden Item B']),
|
||
|
Consumable: String(Yanfly.Parameters['Consumable']),
|
||
|
Nonconsumable: String(Yanfly.Parameters['Nonconsumable']),
|
||
|
AlwaysUsable: String(Yanfly.Parameters['Always Usable']),
|
||
|
BattleUsable: String(Yanfly.Parameters['Battle Usable']),
|
||
|
FieldUsable: String(Yanfly.Parameters['Field Usable']),
|
||
|
NeverUsable: String(Yanfly.Parameters['Never Usable'])
|
||
|
}
|
||
|
};
|
||
|
Yanfly.SetupParameters();
|
||
|
|
||
|
//=============================================================================
|
||
|
// DataManager
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Notetags added by Yanfly
|
||
|
//=============================================================================
|
||
|
|
||
|
Yanfly.ItemCat.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
|
||
|
DataManager.isDatabaseLoaded = function() {
|
||
|
if (!Yanfly.ItemCat.DataManager_isDatabaseLoaded.call(this)) return false;
|
||
|
|
||
|
if (!Yanfly._loaded_YEP_X_ItemCategories) {
|
||
|
this.processItemCategoriesNotetags1($dataItems);
|
||
|
this.processItemCategoriesNotetags1($dataWeapons);
|
||
|
this.processItemCategoriesNotetags1($dataArmors);
|
||
|
Yanfly._loaded_YEP_X_ItemCategories = true;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
};
|
||
|
|
||
|
DataManager.processItemCategoriesNotetags1 = function(group) {
|
||
|
for (var n = 1; n < group.length; n++) {
|
||
|
var obj = group[n];
|
||
|
var notedata = obj.note.split(/[\r\n]+/);
|
||
|
|
||
|
obj.itemCategory = [];
|
||
|
|
||
|
for (var i = 0; i < notedata.length; i++) {
|
||
|
var line = notedata[i];
|
||
|
if (line.match(/<MENU[ ](?:CATEGORY|CATEGORIES):[ ](.*)>/i)) {
|
||
|
var str = String(RegExp.$1).split(',');
|
||
|
var length = str.length;
|
||
|
for (var s = 0; s < length; s++) {
|
||
|
obj.itemCategory.push(str[s].trim());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//=============================================================================
|
||
|
// Window_ItemCategory
|
||
|
//=============================================================================
|
||
|
|
||
|
Yanfly.ItemCat.Window_ItemCategory_update =
|
||
|
Window_ItemCategory.prototype.update;
|
||
|
Window_ItemCategory.prototype.update = function() {
|
||
|
Yanfly.ItemCat.Window_ItemCategory_update.call(this);
|
||
|
if (this._itemWindow) {
|
||
|
this._itemWindow.setExt(this.currentExt());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Window_ItemCategory.prototype.makeCommandList = function() {
|
||
|
var data = Yanfly.Param.ItemCatOrder;
|
||
|
var length = data.length;
|
||
|
for (var i = 0; i < length; i++) {
|
||
|
var category = data[i].trim();
|
||
|
this.addItemCategory(category);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Window_ItemCategory.prototype.addItemCategory = function(category) {
|
||
|
var text = Yanfly.Param.ItemCatNames[category];
|
||
|
if (category.match(/Category:(.*)/i)) {
|
||
|
var type = String(RegExp.$1);
|
||
|
return this.addCommand(type, 'Category', true, type);
|
||
|
}
|
||
|
if (category.match(/AllItems/i)) {
|
||
|
return this.addCommand(TextManager.item, 'AllItems');
|
||
|
}
|
||
|
if (category.match(/RegularItems/i)) {
|
||
|
return this.addCommand(text, 'item');
|
||
|
}
|
||
|
if (category.match(/KeyItems/i)) {
|
||
|
return this.addCommand(TextManager.keyItem, 'keyItem');
|
||
|
}
|
||
|
if (category.match(/HiddenItemA/i)) {
|
||
|
return this.addCommand(text, 'HiddenItemA');
|
||
|
}
|
||
|
if (category.match(/HiddenItemB/i)) {
|
||
|
return this.addCommand(text, 'HiddenItemB');
|
||
|
}
|
||
|
if (category.match(/Nonconsumable/i)) {
|
||
|
return this.addCommand(text, 'Nonconsumable');
|
||
|
}
|
||
|
if (category.match(/Consumable/i)) {
|
||
|
return this.addCommand(text, 'Consumable');
|
||
|
}
|
||
|
if (category.match(/AlwaysUsable/i)) {
|
||
|
return this.addCommand(text, 'AlwaysUsable');
|
||
|
}
|
||
|
if (category.match(/BattleUsable/i)) {
|
||
|
return this.addCommand(text, 'BattleUsable');
|
||
|
}
|
||
|
if (category.match(/FieldUsable/i)) {
|
||
|
return this.addCommand(text, 'FieldUsable');
|
||
|
}
|
||
|
if (category.match(/NeverUsable/i)) {
|
||
|
return this.addCommand(text, 'NeverUsable');
|
||
|
}
|
||
|
if (category.match(/Items/i)) {
|
||
|
return this.addCommand(TextManager.item, 'item');
|
||
|
}
|
||
|
if (category.match(/Weapons/i)) {
|
||
|
return this.addCommand(TextManager.weapon, 'weapon');
|
||
|
}
|
||
|
if (category.match(/WType:(\d+)/i)) {
|
||
|
var id = parseInt(RegExp.$1);
|
||
|
return this.addCommand($dataSystem.weaponTypes[id], 'WType', true, id);
|
||
|
}
|
||
|
if (category.match(/Armors/i)) {
|
||
|
return this.addCommand(TextManager.armor, 'armor');
|
||
|
}
|
||
|
if (category.match(/AType:(\d+)/i)) {
|
||
|
var id = parseInt(RegExp.$1);
|
||
|
return this.addCommand($dataSystem.armorTypes[id], 'AType', true, id);
|
||
|
}
|
||
|
if (category.match(/EType:(\d+)/i)) {
|
||
|
var id = parseInt(RegExp.$1);
|
||
|
return this.addCommand($dataSystem.equipTypes[id], 'EType', true, id);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//=============================================================================
|
||
|
// Window_ItemList
|
||
|
//=============================================================================
|
||
|
|
||
|
Yanfly.ItemCat.Window_ItemList_initialize =
|
||
|
Window_ItemList.prototype.initialize;
|
||
|
Window_ItemList.prototype.initialize = function(x, y, width, height) {
|
||
|
Yanfly.ItemCat.Window_ItemList_initialize.call(this, x, y, width, height);
|
||
|
this._ext = 'none';
|
||
|
};
|
||
|
|
||
|
Window_ItemList.prototype.setExt = function(ext) {
|
||
|
if (this._ext !== ext) {
|
||
|
this._ext = ext;
|
||
|
this.refresh();
|
||
|
this.resetScroll();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Window_ItemList.prototype.includes = function(item) {
|
||
|
switch (this._category) {
|
||
|
case 'AllItems':
|
||
|
return DataManager.isItem(item);
|
||
|
break;
|
||
|
case 'item':
|
||
|
return DataManager.isItem(item) && item.itypeId === 1;
|
||
|
break;
|
||
|
case 'RegularItems':
|
||
|
return DataManager.isItem(item) && item.itypeId === 1;
|
||
|
break;
|
||
|
case 'keyItem':
|
||
|
return DataManager.isItem(item) && item.itypeId === 2;
|
||
|
break;
|
||
|
case 'HiddenItemA':
|
||
|
return DataManager.isItem(item) && item.itypeId === 3;
|
||
|
break;
|
||
|
case 'HiddenItemB':
|
||
|
return DataManager.isItem(item) && item.itypeId === 4;
|
||
|
break;
|
||
|
case 'Consumable':
|
||
|
return DataManager.isItem(item) && item.consumable;
|
||
|
break;
|
||
|
case 'Nonconsumable':
|
||
|
return DataManager.isItem(item) && !item.consumable;
|
||
|
break;
|
||
|
case 'AlwaysUsable':
|
||
|
return DataManager.isItem(item) && [0].contains(item.occasion);
|
||
|
break;
|
||
|
case 'BattleUsable':
|
||
|
return DataManager.isItem(item) && [0, 1].contains(item.occasion);
|
||
|
break;
|
||
|
case 'FieldUsable':
|
||
|
return DataManager.isItem(item) && [0, 2].contains(item.occasion);
|
||
|
break;
|
||
|
case 'NeverUsable':
|
||
|
return DataManager.isItem(item) && [3].contains(item.occasion);
|
||
|
break;
|
||
|
case 'weapon':
|
||
|
return DataManager.isWeapon(item);
|
||
|
break;
|
||
|
case 'WType':
|
||
|
return DataManager.isWeapon(item) && item.wtypeId === this._ext;
|
||
|
break;
|
||
|
case 'armor':
|
||
|
return DataManager.isArmor(item);
|
||
|
break;
|
||
|
case 'AType':
|
||
|
return DataManager.isArmor(item) && item.atypeId === this._ext;
|
||
|
break;
|
||
|
case 'EType':
|
||
|
return item && item.etypeId === this._ext;
|
||
|
break;
|
||
|
case 'Category':
|
||
|
return item && item.itemCategory.contains(this._ext);
|
||
|
break;
|
||
|
default:
|
||
|
return false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//=============================================================================
|
||
|
// End of File
|
||
|
//=============================================================================
|
||
|
} else {
|
||
|
|
||
|
var text = '================================================================\n';
|
||
|
text += 'YEP_X_ItemCategories requires YEP_ItemCore and to be at the latest '
|
||
|
text += 'version to run properly. '
|
||
|
text += '\n\nPlease go to www.yanfly.moe and update to the latest version for ';
|
||
|
text += 'the YEP_ItemCore plugin.\n';
|
||
|
text += '================================================================\n';
|
||
|
console.log(text);
|
||
|
require('nw.gui').Window.get().showDevTools();
|
||
|
|
||
|
}
|