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

468 lines
16 KiB
JavaScript

//=============================================================================
// GachaBook.js
//
// (c)2016 KADOKAWA CORPORATION./YOJI OJIMA
//=============================================================================
/*:
* @plugindesc Displays detailed statuses of "gacha" items.
* @author Takeya Kimura
*
* @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
*
* @param Rank Text
* @desc The text for "Rank".
* @default Rank
*
* @param Simple Display
* @desc The switch to display the name and description only.
* @default 0
*
* @help
*
* Plugin Command:
* GachaBook open # Open the gacha book screen
* GachaBook add weapon 3 # Add weapon #3 to the gacha book
* GachaBook add armor 4 # Add armor #4 to the gacha book
* GachaBook remove armor 5 # Remove armor #5 from the gacha book
* GachaBook remove item 6 # Remove item #6 from the gacha book
* GachaBook clear # Clear the item book
*/
/*:ja
* @plugindesc ガチャアイテム一覧を表示します。
* @author Takeya Kimura
*
* @param Unknown Data
* @desc 未確認のガチャアイテムの名前です。
* @default ??????
*
* @param Price Text
* @desc 「価格」の文字列です。
* @default Price
*
* @param Equip Text
* @desc 「装備」の文字列です。
* @default Equip
*
* @param Type Text
* @desc 「タイプ」の文字列です。
* @default Type
*
* @param Rank Text
* @desc 「ランク」の文字列です。
* @default Rank
*
* @param Simple Display
* @desc 1と入力すると詳細表示が名前と説明だけになります。[0: 通常表示 1: シンプル表示]
* @default 0
*
* @help
*
* Plugin Command:
* GachaBook open # ガチャブックを開きます
* GachaBook add weapon 3 # 武器3番をガチャブックに追加
* GachaBook add armor 4 # 防具4番をガチャブックに追加
* GachaBook remove armor 5 # 防具5番をガチャブックから削除
* GachaBook remove item 6 # アイテム6番をガチャブックから削除
* GachaBook clear # ガチャブックをクリアする
*/
(function() {
var parameters = PluginManager.parameters('GachaBook');
var unknownData;
var priceText;
var equipText;
var typeText;
var rankText;
Scene_Boot = class extends Scene_Boot {
start() {
super.start();
unknownData = LanguageManager.getMessageData("gacha_minigame.message_8").text;
priceText = LanguageManager.getMessageData("gacha_minigame.message_4").text;
equipText = LanguageManager.getMessageData("gacha_minigame.message_5").text;
typeText = LanguageManager.getMessageData("gacha_minigame.message_6").text;
rankText = LanguageManager.getMessageData("gacha_minigame.message_7").text;
}
}
var simpleDisplay = !!Number(parameters['Simple Display'] || 0);
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'GachaBook') {
switch (args[0]) {
case 'open':
SceneManager.push(Scene_GachaBook);
break;
case 'add':
$gameSystem.addToGachaBook(args[1], Number(args[2]));
break;
case 'remove':
$gameSystem.removeFromGachaBook(args[1], Number(args[2]));
break;
case 'complete':
$gameSystem.completeGachaBook();
break;
case 'clear':
$gameSystem.clearGachaBook();
break;
}
}
};
Game_System.prototype.addToGachaBook = function(type, dataId) {
if (!this._GachaBookFlags) {
this.clearGachaBook();
}
var typeIndex = this.gachaBookTypeToIndex(type);
if (typeIndex >= 0) {
this._GachaBookFlags[typeIndex][dataId] = true;
}
};
Game_System.prototype.removeFromGachaBook = function(type, dataId) {
if (this._GachaBookFlags) {
var typeIndex = this.gachaBookTypeToIndex(type);
if (typeIndex >= 0) {
this._GachaBookFlags[typeIndex][dataId] = false;
}
}
};
Game_System.prototype.gachaBookTypeToIndex = function(type) {
switch (type) {
case 'item':
return 0;
case 'weapon':
return 1;
case 'armor':
return 2;
default:
return -1;
}
};
Game_System.prototype.completeGachaBook = function() {
var i;
this.clearGachaBook();
for (i = 1; i < $dataItems.length; i++) {
this._GachaBookFlags[0][i] = true;
}
for (i = 1; i < $dataWeapons.length; i++) {
this._GachaBookFlags[1][i] = true;
}
for (i = 1; i < $dataArmors.length; i++) {
this._GachaBookFlags[2][i] = true;
}
};
Game_System.prototype.clearGachaBook = function() {
this._GachaBookFlags = [[], [], []];
};
Game_System.prototype.isInGachaBook = function(item) {
if (this._GachaBookFlags && 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._GachaBookFlags[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.addToGachaBook(type, item.id);
}
};
function Scene_GachaBook() {
this.initialize.apply(this, arguments);
}
Scene_GachaBook.prototype = Object.create(Scene_MenuBase.prototype);
Scene_GachaBook.prototype.constructor = Scene_GachaBook;
Scene_GachaBook.prototype.initialize = function() {
Scene_MenuBase.prototype.initialize.call(this);
ImageManager.loadAtlas("gacha_prizes");
};
Scene_GachaBook.prototype.create = function() {
Scene_MenuBase.prototype.create.call(this);
this._indexWindow = new Window_GachaBookIndex(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_GachaBookStatus(0, wy, ww, wh);
this.addWindow(this._indexWindow);
this.addWindow(this._statusWindow);
this._indexWindow.setStatusWindow(this._statusWindow);
};
function Window_GachaBookIndex() {
this.initialize.apply(this, arguments);
}
Window_GachaBookIndex.prototype = Object.create(Window_Selectable.prototype);
Window_GachaBookIndex.prototype.constructor = Window_GachaBookIndex;
Window_GachaBookIndex.lastTopRow = 0;
Window_GachaBookIndex.lastIndex = 0;
Window_GachaBookIndex.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_GachaBookIndex.lastTopRow);
this.select(Window_GachaBookIndex.lastIndex);
this.activate();
};
Window_GachaBookIndex.prototype.isUsingCustomCursorRectSprite = function () { return true; };
Window_GachaBookIndex.prototype.maxCols = function() {
return 3;
};
Window_GachaBookIndex.prototype.maxItems = function() {
return this._list ? this._list.length : 0;
};
Window_GachaBookIndex.prototype.setStatusWindow = function(statusWindow) {
this._statusWindow = statusWindow;
this.updateStatus();
};
Window_GachaBookIndex.prototype.update = function() {
Window_Selectable.prototype.update.call(this);
this.updateStatus();
};
Window_GachaBookIndex.prototype.updateStatus = function() {
if (this._statusWindow) {
var item = this._list[this.index()];
this._statusWindow.setItem(item);
}
};
Window_GachaBookIndex.prototype.refresh = function() {
var i, item;
this._list = [];
for (i = 1; i < $dataItems.length; i++) {
item = $dataItems[i];
//if (item.name && item.itypeId === 1 && $gameSystem.isInGacha(item)) { //itypeIdはみない
if (item.name && $gameSystem.isInGacha(item)) { //itypeIdはみない
this._list.push(item);
}
}
for (i = 1; i < $dataWeapons.length; i++) {
item = $dataWeapons[i];
if (item.name && $gameSystem.isInGacha(item)) {
this._list.push(item);
}
}
for (i = 1; i < $dataArmors.length; i++) {
item = $dataArmors[i];
if (item.name && $gameSystem.isInGacha(item)) {
this._list.push(item);
}
}
this.createContents();
this.drawAllItems();
};
Window_GachaBookIndex.prototype.drawItem = function(index) {
var item = this._list[index];
var rect = this.itemRect(index);
var width = rect.width - this.textPadding();
if ($gameSystem.isInGachaBook(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_GachaBookIndex.prototype.processCancel = function() {
Window_Selectable.prototype.processCancel.call(this);
Window_GachaBookIndex.lastTopRow = this.topRow();
Window_GachaBookIndex.lastIndex = this.index();
};
function Window_GachaBookStatus() {
this.initialize.apply(this, arguments);
}
Window_GachaBookStatus.prototype = Object.create(Window_Base.prototype);
Window_GachaBookStatus.prototype.constructor = Window_GachaBookStatus;
Window_GachaBookStatus.prototype.initialize = function(x, y, width, height) {
Window_Base.prototype.initialize.call(this, x, y, width, height);
this._itemSprite = new Sprite();
this._itemSprite.anchor.x = 0.5;
this._itemSprite.anchor.y = 0.5;
this._itemSprite.x = width / 2 - 20;
this._itemSprite.y = height / 2;
this.addChildToBack(this._itemSprite);
this.refresh();
};
Window_GachaBookIndex.prototype.isUsingCustomCursorRectSprite = function () { return true; };
Window_GachaBookStatus.prototype.setItem = function(item) {
if (this._item !== item) {
this._item = item;
this.refresh();
}
};
Window_GachaBookStatus.prototype.update = function() {
Window_Base.prototype.update.call(this);
if (this._itemSprite.bitmap) {
var bitmapHeight = this._itemSprite.bitmap.height;
var contentsHeight = this.contents.height;
var scale = 1;
if (bitmapHeight > contentsHeight) {
scale = contentsHeight / bitmapHeight;
}
this._itemSprite.scale.x = scale;
this._itemSprite.scale.y = scale;
}
};
Window_GachaBookStatus.prototype.refresh = function() {
var item = this._item;
var x = 0;
var y = 0;
var lineHeight = this.lineHeight();
this.contents.clear();
if (!item || !$gameSystem.isInGachaBook(item)) {
this._itemSprite.bitmap = null;
return;
}
var bitmap;
if (!!item.meta.gachaImage) {
bitmap = ImageManager.loadPicture(item.meta.gachaImage);
bitmap.smooth = true;
}
this._itemSprite.bitmap = bitmap;
var iconBoxWidth = Window_Base._iconWidth + 4;
this.drawItemName(item, x, y);
this.drawItemNumber(item, x + this.textWidth(item.name) + iconBoxWidth, y);
x = this.textPadding();
y = lineHeight + this.textPadding();
if (!simpleDisplay) {
var rank = "-";
if (item.meta.gachaRank) rank = item.meta.gachaRank;
this.changeTextColor(this.systemColor());
this.drawText(rankText, x, y, 120);
this.resetTextColor();
this.drawText(rank, x + 120, y, 120, 'right');
y += lineHeight;
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();
var rewardsWidth = 220;
x = this.contents.width - rewardsWidth;
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);
};
Window_GachaBookStatus.prototype.numberWidth = function() {
return this.textWidth('000');
};
Window_GachaBookStatus.prototype.drawItemNumber = function(item, x, y) {
this.drawText(':', x, y);
this.drawText($gameParty.numItems(item), x + this.textWidth('00'), y);
};
})();