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.

381 lines
12 KiB
JavaScript

3 years ago
//=============================================================================
// 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) {
3 years ago
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === "ItemBook") {
3 years ago
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;
3 years ago
}
}
};
Game_System.prototype.addToItemBook = function (type, dataId) {
3 years ago
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) {
3 years ago
if (this._ItemBookFlags) {
var typeIndex = this.itemBookTypeToIndex(type);
if (typeIndex >= 0) {
this._ItemBookFlags[typeIndex][dataId] = false;
}
}
};
Game_System.prototype.itemBookTypeToIndex = function (type) {
3 years ago
switch (type) {
case "item":
return 0;
case "weapon":
return 1;
case "armor":
return 2;
default:
return -1;
3 years ago
}
};
Game_System.prototype.completeItemBook = function () {
3 years ago
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 () {
3 years ago
this._ItemBookFlags = [[], [], []];
};
Game_System.prototype.isInItemBook = function (item) {
3 years ago
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) {
3 years ago
_Game_Party_gainItem.call(this, item, amount, includeEquip);
if (item && amount > 0) {
var type;
if (DataManager.isItem(item)) {
type = "item";
3 years ago
} else if (DataManager.isWeapon(item)) {
type = "weapon";
3 years ago
} else if (DataManager.isArmor(item)) {
type = "armor";
3 years ago
}
$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 () {
3 years ago
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_ItemBook.prototype.create = function () {
3 years ago
Scene_MenuBase.prototype.create.call(this);
this._indexWindow = new Window_ItemBookIndex(0, 0);
this._indexWindow.setHandler("cancel", this.popScene.bind(this));
3 years ago
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;
3 years ago
Window_ItemBookIndex.prototype.initialize = function (x, y) {
3 years ago
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 () {
3 years ago
return 3;
};
Window_ItemBookIndex.prototype.maxItems = function () {
3 years ago
return this._list ? this._list.length : 0;
};
Window_ItemBookIndex.prototype.setStatusWindow = function (statusWindow) {
3 years ago
this._statusWindow = statusWindow;
this.updateStatus();
};
Window_ItemBookIndex.prototype.update = function () {
3 years ago
Window_Selectable.prototype.update.call(this);
this.updateStatus();
};
Window_ItemBookIndex.prototype.updateStatus = function () {
3 years ago
if (this._statusWindow) {
var item = this._list[this.index()];
this._statusWindow.setItem(item);
}
};
Window_ItemBookIndex.prototype.refresh = function () {
3 years ago
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") {
3 years ago
this._list.push(item);
}
}
for (i = 1; i < $dataWeapons.length; i++) {
item = $dataWeapons[i];
if (item.name && item.meta.book !== "no") {
3 years ago
this._list.push(item);
}
}
for (i = 1; i < $dataArmors.length; i++) {
item = $dataArmors[i];
if (item.name && item.meta.book !== "no") {
3 years ago
this._list.push(item);
}
}
this.createContents();
this.drawAllItems();
};
Window_ItemBookIndex.prototype.drawItem = function (index) {
3 years ago
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 () {
3 years ago
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) {
3 years ago
Window_Base.prototype.initialize.call(this, x, y, width, height);
};
Window_ItemBookStatus.prototype.setItem = function (item) {
3 years ago
if (this._item !== item) {
this._item = item;
this.refresh();
}
};
Window_ItemBookStatus.prototype.refresh = function () {
3 years ago
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 : "-";
3 years ago
this.changeTextColor(this.systemColor());
this.drawText(priceText, x, y, 120);
this.resetTextColor();
this.drawText(price, x + 120, y, 120, "right");
3 years ago
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");
3 years ago
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");
3 years ago
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");
3 years ago
y += lineHeight;
}
}
x = 0;
y = this.textPadding() * 2 + lineHeight * 7;
this.drawTextEx(item.description, x, y);
};
})();