|
|
//=============================================================================
|
|
|
// ItemBook.js
|
|
|
//=============================================================================
|
|
|
|
|
|
/*:
|
|
|
* @plugindesc Displays detailed statuses of items.
|
|
|
* @author Yoji Ojima
|
|
|
*
|
|
|
* @param Unknown Data
|
|
|
* @desc The index name for an unknown item.
|
|
|
* @default ??????
|
|
|
*
|
|
|
* @param Price Text
|
|
|
* @desc The text for "Price".
|
|
|
* @default Price
|
|
|
*
|
|
|
* @param Equip Text
|
|
|
* @desc The text for "Equip".
|
|
|
* @default Equip
|
|
|
*
|
|
|
* @param Type Text
|
|
|
* @desc The text for "Type".
|
|
|
* @default Type
|
|
|
*
|
|
|
* @help
|
|
|
*
|
|
|
* Plugin Command:
|
|
|
* ItemBook open # Open the item book screen
|
|
|
* ItemBook add weapon 3 # Add weapon #3 to the item book
|
|
|
* ItemBook add armor 4 # Add armor #4 to the item book
|
|
|
* ItemBook remove armor 5 # Remove armor #5 from the item book
|
|
|
* ItemBook remove item 6 # Remove item #6 from the item book
|
|
|
* ItemBook complete # Complete the item book
|
|
|
* ItemBook clear # Clear the item book
|
|
|
*
|
|
|
* Item (Weapon, Armor) Note:
|
|
|
* <book:no> # This item does not appear in the item book
|
|
|
*/
|
|
|
|
|
|
/*:ja
|
|
|
* @plugindesc アイテム図鑑です。アイテムの詳細なステータスを表示します。
|
|
|
* @author Yoji Ojima
|
|
|
*
|
|
|
* @param Unknown Data
|
|
|
* @desc 未確認のアイテムの索引名です。
|
|
|
* @default ??????
|
|
|
*
|
|
|
* @param Price Text
|
|
|
* @desc 「価格」の文字列です。
|
|
|
* @default 価格
|
|
|
*
|
|
|
* @param Equip Text
|
|
|
* @desc 「装備」の文字列です。
|
|
|
* @default 装備
|
|
|
*
|
|
|
* @param Type Text
|
|
|
* @desc 「タイプ」の文字列です。
|
|
|
* @default タイプ
|
|
|
*
|
|
|
* @help
|
|
|
*
|
|
|
* プラグインコマンド:
|
|
|
* ItemBook open # 図鑑画面を開く
|
|
|
* ItemBook add weapon 3 # 武器3番を図鑑に追加
|
|
|
* ItemBook add armor 4 # 防具4番を図鑑に追加
|
|
|
* ItemBook remove armor 5 # 防具5番を図鑑から削除
|
|
|
* ItemBook remove item 6 # アイテム6番を図鑑から削除
|
|
|
* ItemBook complete # 図鑑を完成させる
|
|
|
* ItemBook clear # 図鑑をクリアする
|
|
|
*
|
|
|
* アイテム(武器、防具)のメモ:
|
|
|
* <book:no> # 図鑑に載せない場合
|
|
|
*/
|
|
|
|
|
|
(function () {
|
|
|
var parameters = PluginManager.parameters("ItemBook");
|
|
|
var unknownData = String(parameters["Unknown Data"] || "??????");
|
|
|
var priceText = String(parameters["Price Text"] || "Price");
|
|
|
var equipText = String(parameters["Equip Text"] || "Equip");
|
|
|
var typeText = String(parameters["Type Text"] || "Type");
|
|
|
|
|
|
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
|
|
Game_Interpreter.prototype.pluginCommand = function (command, args) {
|
|
|
_Game_Interpreter_pluginCommand.call(this, command, args);
|
|
|
if (command === "ItemBook") {
|
|
|
switch (args[0]) {
|
|
|
case "open":
|
|
|
SceneManager.push(Scene_ItemBook);
|
|
|
break;
|
|
|
case "add":
|
|
|
$gameSystem.addToItemBook(args[1], Number(args[2]));
|
|
|
break;
|
|
|
case "remove":
|
|
|
$gameSystem.removeFromItemBook(args[1], Number(args[2]));
|
|
|
break;
|
|
|
case "complete":
|
|
|
$gameSystem.completeItemBook();
|
|
|
break;
|
|
|
case "clear":
|
|
|
$gameSystem.clearItemBook();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Game_System.prototype.addToItemBook = function (type, dataId) {
|
|
|
if (!this._ItemBookFlags) {
|
|
|
this.clearItemBook();
|
|
|
}
|
|
|
var typeIndex = this.itemBookTypeToIndex(type);
|
|
|
if (typeIndex >= 0) {
|
|
|
this._ItemBookFlags[typeIndex][dataId] = true;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Game_System.prototype.removeFromItemBook = function (type, dataId) {
|
|
|
if (this._ItemBookFlags) {
|
|
|
var typeIndex = this.itemBookTypeToIndex(type);
|
|
|
if (typeIndex >= 0) {
|
|
|
this._ItemBookFlags[typeIndex][dataId] = false;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Game_System.prototype.itemBookTypeToIndex = function (type) {
|
|
|
switch (type) {
|
|
|
case "item":
|
|
|
return 0;
|
|
|
case "weapon":
|
|
|
return 1;
|
|
|
case "armor":
|
|
|
return 2;
|
|
|
default:
|
|
|
return -1;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Game_System.prototype.completeItemBook = function () {
|
|
|
var i;
|
|
|
this.clearItemBook();
|
|
|
for (i = 1; i < $dataItems.length; i++) {
|
|
|
this._ItemBookFlags[0][i] = true;
|
|
|
}
|
|
|
for (i = 1; i < $dataWeapons.length; i++) {
|
|
|
this._ItemBookFlags[1][i] = true;
|
|
|
}
|
|
|
for (i = 1; i < $dataArmors.length; i++) {
|
|
|
this._ItemBookFlags[2][i] = true;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Game_System.prototype.clearItemBook = function () {
|
|
|
this._ItemBookFlags = [[], [], []];
|
|
|
};
|
|
|
|
|
|
Game_System.prototype.isInItemBook = function (item) {
|
|
|
if (this._ItemBookFlags && item) {
|
|
|
var typeIndex = -1;
|
|
|
if (DataManager.isItem(item)) {
|
|
|
typeIndex = 0;
|
|
|
} else if (DataManager.isWeapon(item)) {
|
|
|
typeIndex = 1;
|
|
|
} else if (DataManager.isArmor(item)) {
|
|
|
typeIndex = 2;
|
|
|
}
|
|
|
if (typeIndex >= 0) {
|
|
|
return !!this._ItemBookFlags[typeIndex][item.id];
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var _Game_Party_gainItem = Game_Party.prototype.gainItem;
|
|
|
Game_Party.prototype.gainItem = function (item, amount, includeEquip) {
|
|
|
_Game_Party_gainItem.call(this, item, amount, includeEquip);
|
|
|
if (item && amount > 0) {
|
|
|
var type;
|
|
|
if (DataManager.isItem(item)) {
|
|
|
type = "item";
|
|
|
} else if (DataManager.isWeapon(item)) {
|
|
|
type = "weapon";
|
|
|
} else if (DataManager.isArmor(item)) {
|
|
|
type = "armor";
|
|
|
}
|
|
|
$gameSystem.addToItemBook(type, item.id);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function Scene_ItemBook() {
|
|
|
this.initialize.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
Scene_ItemBook.prototype = Object.create(Scene_MenuBase.prototype);
|
|
|
Scene_ItemBook.prototype.constructor = Scene_ItemBook;
|
|
|
|
|
|
Scene_ItemBook.prototype.initialize = function () {
|
|
|
Scene_MenuBase.prototype.initialize.call(this);
|
|
|
};
|
|
|
|
|
|
Scene_ItemBook.prototype.create = function () {
|
|
|
Scene_MenuBase.prototype.create.call(this);
|
|
|
this._indexWindow = new Window_ItemBookIndex(0, 0);
|
|
|
this._indexWindow.setHandler("cancel", this.popScene.bind(this));
|
|
|
var wy = this._indexWindow.height;
|
|
|
var ww = Graphics.boxWidth;
|
|
|
var wh = Graphics.boxHeight - wy;
|
|
|
this._statusWindow = new Window_ItemBookStatus(0, wy, ww, wh);
|
|
|
this.addWindow(this._indexWindow);
|
|
|
this.addWindow(this._statusWindow);
|
|
|
this._indexWindow.setStatusWindow(this._statusWindow);
|
|
|
};
|
|
|
|
|
|
function Window_ItemBookIndex() {
|
|
|
this.initialize.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
Window_ItemBookIndex.prototype = Object.create(Window_Selectable.prototype);
|
|
|
Window_ItemBookIndex.prototype.constructor = Window_ItemBookIndex;
|
|
|
|
|
|
Window_ItemBookIndex.lastTopRow = 0;
|
|
|
Window_ItemBookIndex.lastIndex = 0;
|
|
|
|
|
|
Window_ItemBookIndex.prototype.initialize = function (x, y) {
|
|
|
var width = Graphics.boxWidth;
|
|
|
var height = this.fittingHeight(6);
|
|
|
Window_Selectable.prototype.initialize.call(this, x, y, width, height);
|
|
|
this.refresh();
|
|
|
this.setTopRow(Window_ItemBookIndex.lastTopRow);
|
|
|
this.select(Window_ItemBookIndex.lastIndex);
|
|
|
this.activate();
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.maxCols = function () {
|
|
|
return 3;
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.maxItems = function () {
|
|
|
return this._list ? this._list.length : 0;
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.setStatusWindow = function (statusWindow) {
|
|
|
this._statusWindow = statusWindow;
|
|
|
this.updateStatus();
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.update = function () {
|
|
|
Window_Selectable.prototype.update.call(this);
|
|
|
this.updateStatus();
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.updateStatus = function () {
|
|
|
if (this._statusWindow) {
|
|
|
var item = this._list[this.index()];
|
|
|
this._statusWindow.setItem(item);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.refresh = function () {
|
|
|
var i, item;
|
|
|
this._list = [];
|
|
|
for (i = 1; i < $dataItems.length; i++) {
|
|
|
item = $dataItems[i];
|
|
|
if (item.name && item.itypeId === 1 && item.meta.book !== "no") {
|
|
|
this._list.push(item);
|
|
|
}
|
|
|
}
|
|
|
for (i = 1; i < $dataWeapons.length; i++) {
|
|
|
item = $dataWeapons[i];
|
|
|
if (item.name && item.meta.book !== "no") {
|
|
|
this._list.push(item);
|
|
|
}
|
|
|
}
|
|
|
for (i = 1; i < $dataArmors.length; i++) {
|
|
|
item = $dataArmors[i];
|
|
|
if (item.name && item.meta.book !== "no") {
|
|
|
this._list.push(item);
|
|
|
}
|
|
|
}
|
|
|
this.createContents();
|
|
|
this.drawAllItems();
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.drawItem = function (index) {
|
|
|
var item = this._list[index];
|
|
|
var rect = this.itemRect(index);
|
|
|
var width = rect.width - this.textPadding();
|
|
|
if ($gameSystem.isInItemBook(item)) {
|
|
|
this.drawItemName(item, rect.x, rect.y, width);
|
|
|
} else {
|
|
|
var iw = Window_Base._iconWidth + 4;
|
|
|
this.drawText(unknownData, rect.x + iw, rect.y, width - iw);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Window_ItemBookIndex.prototype.processCancel = function () {
|
|
|
Window_Selectable.prototype.processCancel.call(this);
|
|
|
Window_ItemBookIndex.lastTopRow = this.topRow();
|
|
|
Window_ItemBookIndex.lastIndex = this.index();
|
|
|
};
|
|
|
|
|
|
function Window_ItemBookStatus() {
|
|
|
this.initialize.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
Window_ItemBookStatus.prototype = Object.create(Window_Base.prototype);
|
|
|
Window_ItemBookStatus.prototype.constructor = Window_ItemBookStatus;
|
|
|
|
|
|
Window_ItemBookStatus.prototype.initialize = function (x, y, width, height) {
|
|
|
Window_Base.prototype.initialize.call(this, x, y, width, height);
|
|
|
};
|
|
|
|
|
|
Window_ItemBookStatus.prototype.setItem = function (item) {
|
|
|
if (this._item !== item) {
|
|
|
this._item = item;
|
|
|
this.refresh();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
Window_ItemBookStatus.prototype.refresh = function () {
|
|
|
var item = this._item;
|
|
|
var x = 0;
|
|
|
var y = 0;
|
|
|
var lineHeight = this.lineHeight();
|
|
|
|
|
|
this.contents.clear();
|
|
|
|
|
|
if (!item || !$gameSystem.isInItemBook(item)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
this.drawItemName(item, x, y);
|
|
|
|
|
|
x = this.textPadding();
|
|
|
y = lineHeight + this.textPadding();
|
|
|
|
|
|
var price = item.price > 0 ? item.price : "-";
|
|
|
this.changeTextColor(this.systemColor());
|
|
|
this.drawText(priceText, x, y, 120);
|
|
|
this.resetTextColor();
|
|
|
this.drawText(price, x + 120, y, 120, "right");
|
|
|
y += lineHeight;
|
|
|
|
|
|
if (DataManager.isWeapon(item) || DataManager.isArmor(item)) {
|
|
|
var etype = $dataSystem.equipTypes[item.etypeId];
|
|
|
this.changeTextColor(this.systemColor());
|
|
|
this.drawText(equipText, x, y, 120);
|
|
|
this.resetTextColor();
|
|
|
this.drawText(etype, x + 120, y, 120, "right");
|
|
|
y += lineHeight;
|
|
|
|
|
|
var type;
|
|
|
if (DataManager.isWeapon(item)) {
|
|
|
type = $dataSystem.weaponTypes[item.wtypeId];
|
|
|
} else {
|
|
|
type = $dataSystem.armorTypes[item.atypeId];
|
|
|
}
|
|
|
this.changeTextColor(this.systemColor());
|
|
|
this.drawText(typeText, x, y, 120);
|
|
|
this.resetTextColor();
|
|
|
this.drawText(type, x + 120, y, 120, "right");
|
|
|
|
|
|
x = this.textPadding() + 300;
|
|
|
y = lineHeight + this.textPadding();
|
|
|
for (var i = 2; i < 8; i++) {
|
|
|
this.changeTextColor(this.systemColor());
|
|
|
this.drawText(TextManager.param(i), x, y, 160);
|
|
|
this.resetTextColor();
|
|
|
this.drawText(item.params[i], x + 160, y, 60, "right");
|
|
|
y += lineHeight;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
x = 0;
|
|
|
y = this.textPadding() * 2 + lineHeight * 7;
|
|
|
this.drawTextEx(item.description, x, y);
|
|
|
};
|
|
|
})();
|