OMORI_Android/www.sc/js/plugins/Omori Item Shop.js
2024-09-23 01:10:28 +03:00

1055 lines
43 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// TDS Omori Item Shop
// Version: 1.1
//=============================================================================
// Add to Imported List
var Imported = Imported || {} ; Imported.TDS_OmoriItemShop = true;
// Initialize Alias Object
var _TDS_ = _TDS_ || {} ; _TDS_.OmoriItemShop = _TDS_.OmoriItemShop || {};
//=============================================================================
/*:
* @plugindesc
* Omori Item Shop
*
* @author TDS
*
*/
//=============================================================================
//=============================================================================
// ** Game_Temp
//-----------------------------------------------------------------------------
// The game object class for temporary data that is not included in save data.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriItemShop.Game_Temp_initialize = Game_Temp.prototype.initialize;
//=============================================================================
// * Object Initialization
//=============================================================================
Game_Temp.prototype.initialize = function() {
// Run Original Function
_TDS_.OmoriItemShop.Game_Temp_initialize.call(this);
// Clear Shop Data
this.clearShopData();
};
//=============================================================================
// * Clear Shop Data
//=============================================================================
Game_Temp.prototype.clearShopData = function() {
// Clear Shop Data
this._shopData = {name: "", shopType: 0, goods: []};
};
//=============================================================================
// ** Game_Interpreter
//-----------------------------------------------------------------------------
// The interpreter for running event commands.
//=============================================================================
// * Setup Shop
//=============================================================================
Game_Interpreter.prototype.setupShop = function(name, type = 0) {
// Clear Shop Data
$gameTemp.clearShopData();
// Get Data
var data = $gameTemp._shopData;
// Get Default Text
var text = LanguageManager.getPluginText('itemShopMenu', 'defaultText');
// Get Shop keeper
var shopKeeper = LanguageManager.getPluginText('itemShopMenu', 'shopKeepers')[name.toLowerCase()]
// Get World Index
var worldIndex = SceneManager.currentWorldIndex();
// Shop Type (0: Buy, 1: Sell)
data.shopType = type;
// Set Shop Name
data.name = shopKeeper.shopName ? shopKeeper.shopName : text.shopName;
// Show Mailbox Shop Keeper Flag
data.showMailboxShopkeeper = shopKeeper.showMailboxShopkeeper !== undefined ? shopKeeper.showMailboxShopkeeper : false;
// Set Transaction Header
data.transactionHeader = data.shopType === 0 ? shopKeeper.buyHeader ? shopKeeper.buyHeader : text.buyHeader : shopKeeper.sellHeader ? shopKeeper.sellHeader : text.sellHeader;
data.texts = {};
// // If World Index is 1 (Dream World)
// if (worldIndex === 1) {
// Set Texts
data.texts.maxItemMessage = 'Prologue_WHITESPACE.message_3';
data.texts.notEnoughMoneyMessage = 'Prologue_WHITESPACE.message_3';
data.texts.onItemListBuyOkMessage = 'Prologue_WHITESPACE.message_3';
data.texts.onItemListSellOkMessage = 'Prologue_WHITESPACE.message_3';
data.texts.itemBuyingPromptMessage = 'Prologue_WHITESPACE.message_3'
data.texts.itemSellingPromptMessage = 'Prologue_WHITESPACE.message_3'
data.texts.itemBuyingConfirmationMessage = 'Prologue_WHITESPACE.message_3'
data.texts.itemSellingConfirmationMessage = 'Prologue_WHITESPACE.message_3'
data.texts.itemBuyingCancelMessage = 'Prologue_WHITESPACE.message_3'
data.texts.itemSellingCancelMessage = 'Prologue_WHITESPACE.message_3'
// } else {
// };
// Go Through List of Entries and replace messages
for (let [key, value] of Object.entries(shopKeeper.texts)) { data.texts[key] = value};
};
//=============================================================================
// * Shop Processing
//=============================================================================
Game_Interpreter.prototype.command302 = function() {
if (!$gameParty.inBattle()) {
var goods = [this._params];
while (this.nextEventCode() === 605) {
this._index++;
goods.push(this.currentCommand().parameters);
}
// Set Shop Data Goods
$gameTemp._shopData.goods = goods;
// Snap Scene into bitmap
/*let waitingInterval = setInterval(() => {
if(SceneManager._scene._messageWindow._openness > 0) {return;}
clearInterval(waitingInterval);
}, 1)*/
while(!!SceneManager._scene._messageWindow && SceneManager._scene._messageWindow._openness > 0) {
SceneManager._scene._messageWindow._openness -= 16;
}
$gameTemp._sceneSnapBitmap = SceneManager.snap();
SceneManager.push(Scene_OmoriItemShop);
SceneManager.prepareNextScene(goods, this._params[4]);
}
return true;
};
//=============================================================================
// ** Scene_OmoriItemShop
//-----------------------------------------------------------------------------
// This scene shows the album
//=============================================================================
function Scene_OmoriItemShop() { this.initialize.apply(this, arguments);}
Scene_OmoriItemShop.prototype = Object.create(Scene_BaseEX.prototype);
Scene_OmoriItemShop.prototype.constructor = Scene_OmoriItemShop;
//=============================================================================
// * Object Initialization
//=============================================================================
Scene_OmoriItemShop.prototype.initialize = function() {
// Set Image reservation Id
this._imageReservationId = 'itemshop';
// Super Call
Scene_BaseEX.prototype.initialize.call(this);
};
//=============================================================================
// * Initialize Atlas Lists
//=============================================================================
Scene_OmoriItemShop.prototype.initAtlastLists = function() {
// Run Original Function
Scene_BaseEX.prototype.initAtlastLists.call(this);
// Load System Images
ImageManager.reserveSystem('itemConsumables', 0, this._imageReservationId)
ImageManager.reserveSystem('itemCharms', 0, this._imageReservationId)
ImageManager.reserveSystem('itemWeapons', 0, this._imageReservationId)
ImageManager.reserveSystem('ItemIcons1', 0, this._imageReservationId)
ImageManager.reserveSystem('itemImportant', 0, this._imageReservationId)
ImageManager.reserveSystem('mailbox', 0, this._imageReservationId)
ImageManager.reserveSystem('mailboxLegend', 0, this._imageReservationId)
};
//=============================================================================
// * Prepare
//=============================================================================
Scene_OmoriItemShop.prototype.prepare = function(goods, purchaseOnly) {
this._goods = goods;
this._purchaseOnly = purchaseOnly;
this._item = null;
};
//=============================================================================
// * Determine if Busy
//=============================================================================
Scene_OmoriItemShop.prototype.isBusy = function() {
// Return true if window is open
if (this._messageWindow.isClosing()) { return true; };
// Return original Function
return Scene_Base.prototype.isBusy.call(this);
};
//=============================================================================
// * Start
//=============================================================================
Scene_OmoriItemShop.prototype.start = function() {
// Run Original Function
Scene_BaseEX.prototype.start.call(this);
// Select first item
this._itemListWindow.select(0);
// Open Windows
this._messageWindow.open();
this._goldWindow.open();
this._itemListWindow.open();
this._shopHeaderWindow.open();
// Set Duration
var duration = 10;
var obj = this._shopKeeperSprite;
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 255}, durations: {opacity: duration}}
data.easing = Object_Movement.linearTween;
this.move.startMove(data);
};
//=============================================================================
// * Terminate Scene
//=============================================================================
Scene_OmoriItemShop.prototype.terminate = function() {
// Run Original Function
Scene_BaseEX.prototype.terminate.call(this);
// Clear Shop Data
$gameTemp.clearShopData();
};
//=============================================================================
// * Create
//=============================================================================
Scene_OmoriItemShop.prototype.create = function() {
// Super Call
Scene_BaseEX.prototype.create.call(this);
// Create Background
this.createBackground();
// Create Shop Keeper Sprite
this.createShopKeeperSprite();
// Create Windows
this.createGoldWindow();
this.createShopHeaderWindow()
this.createItemListWindow()
this.createTotalWindow();
this.createMessageWindow();
// this._goldWindow.y += 355 + 50;
// this._goldWindow.x -= 120;
// this._goldWindow.x += 145
// this._goldWindow.opacity = 0;
this._shopKeeperSprite.x = (this._messageWindow.x + this._messageWindow.width) - this._shopKeeperSprite.width - 50
this._shopKeeperSprite.y = this._messageWindow.y - this._shopKeeperSprite.height + 30;
};
//=============================================================================
// * Create Background
//=============================================================================
Scene_OmoriItemShop.prototype.createBackground = function() {
this._backgroundSprite = new Sprite();
this._backgroundSprite.bitmap = $gameTemp._sceneSnapBitmap;
this.addChild(this._backgroundSprite);
// Clear Scene Snap Bitmap
$gameTemp._sceneSnapBitmap = null;
};
//=============================================================================
// * Create Shop Keeper Sprite
//=============================================================================
Scene_OmoriItemShop.prototype.createShopKeeperSprite = function() {
this._shopKeeperSprite = new Sprite(ImageManager.loadSystem('mailbox'));
this._shopKeeperSprite.setFrame(0, 0, 251, 344);
this._shopKeeperSprite.visible = $gameTemp._shopData.showMailboxShopkeeper;
this._shopKeeperSprite.opacity = 0;
this.addChild(this._shopKeeperSprite);
// Create shop Keepers Face Sprite
this._shopKeepersFaceSprite = new Sprite(ImageManager.loadSystem('mailbox'))
this._shopKeepersFaceSprite.x = 50;
this._shopKeepersFaceSprite.y = 65;
this._shopKeeperSprite.addChild(this._shopKeepersFaceSprite);
// Set Default shop keeper face
this.setShopKeeperFace(0)
};
//=============================================================================
// * Create Gold Window
//=============================================================================
Scene_OmoriItemShop.prototype.createGoldWindow = function() {
this._goldWindow = new Window_Gold(0, 0);
this._goldWindow.x = (Graphics.boxWidth - this._goldWindow.width) - 16;
this._goldWindow.y = 10;
this._goldWindow.openness = 0;
this.addChild(this._goldWindow);
};
//=============================================================================
// * Create Shop Header Window
//=============================================================================
Scene_OmoriItemShop.prototype.createShopHeaderWindow = function() {
this._shopHeaderWindow = new Window_OmoriShopHeader();
this._shopHeaderWindow.x = 16;
this._shopHeaderWindow.y = 10;
this.addChild(this._shopHeaderWindow);
};
//=============================================================================
// * Create Item List Window
//=============================================================================
Scene_OmoriItemShop.prototype.createItemListWindow = function() {
this._itemListWindow = new Window_OmoriShopItemList();
this._itemListWindow.x = 16
this._itemListWindow.y = this._shopHeaderWindow.y + this._shopHeaderWindow.height;
this._itemListWindow.setHandler('ok', this.onItemListOk.bind(this));
this._itemListWindow.setHandler('cancel', this.popScene.bind(this));
this._itemListWindow.callUpdateHelp();
this.addChild(this._itemListWindow);
};
//=============================================================================
// * Create Total Window
//=============================================================================
Scene_OmoriItemShop.prototype.createTotalWindow = function() {
this._totalWindow = new Window_OmoriShopTotal();
this._totalWindow.x = (Graphics.width - this._totalWindow.width) - 16
this._totalWindow.y = (Graphics.height - this._totalWindow.height) - 124;
this._totalWindow.setHandlers(this.onTotalWindowOk.bind(this), this.onTotalWindowCancel.bind(this));
this.addChild(this._totalWindow);
};
//=============================================================================
// * Create Message Window
//=============================================================================
Scene_OmoriItemShop.prototype.createMessageWindow = function() {
// Create Message Window
this._messageWindow = new WindowItemShopMessage();
this.addChild(this._messageWindow);
this._messageWindow.subWindows().forEach(function(window) {
this.addChild(window);
}, this);
// Set Message Window Extra Windows
this._messageWindow._itemListWindow = this._itemListWindow;
this._messageWindow._totalWindow = this._totalWindow;
// Set Item List Window Message Window
this._itemListWindow._messageWindow = this._messageWindow;
};
//=============================================================================
// * Frame Update
//=============================================================================
Scene_OmoriItemShop.prototype.update = function() {
// Super Call
Scene_BaseEX.prototype.update.call(this);
};
//=============================================================================
// * Set Shop Keepers Face
//=============================================================================
Scene_OmoriItemShop.prototype.setShopKeeperFace = function(index = 0) {
// Set Shop Keepers Face Sprite
this._shopKeepersFaceSprite.setFrame(251, index * 28, 79, 28);
};
//=============================================================================
// * Wait for Message
//=============================================================================
Scene_OmoriItemShop.prototype.waitForMessage = function() {
return $gameMessage.isBusy();
};
//=============================================================================
// * Pop Scene
//=============================================================================
Scene_OmoriItemShop.prototype.popScene = function() {
this.queue(function() {
// Close Windows
this._goldWindow.close();
this._itemListWindow.close();
this._shopHeaderWindow.close();
this._messageWindow.close();
// Set Duration
var duration = 10;
var obj = this._shopKeeperSprite;
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 0}, durations: {opacity: duration}}
data.easing = Object_Movement.linearTween;
this.move.startMove(data);
}.bind(this))
this.queue('wait', 10);
this.queue(function() {
// Run Original Function
Scene_Base.prototype.popScene.call(this);
}.bind(this));
};
//=============================================================================
// * [OK] Item List
//=============================================================================
Scene_OmoriItemShop.prototype.onItemListOk = function() {
// Get Item
var item = this._itemListWindow.item();
var price = this._itemListWindow.price();
// Get Buying/Selling State
var buying = $gameTemp._shopData.shopType === 0;
var maxItems = buying ? 99 - $gameParty.numItems(item) : $gameParty.numItems(item);
var canBuy = maxItems > 0
var hasGold = price <= $gameParty.gold();
// If can't buy or don't have gold
if (buying && (!canBuy || !hasGold)) {
// Show Max Item Message
this.queue(function() {
var message = '';
// Add Messages
if (!canBuy) { message = $gameTemp._shopData.texts.maxItemMessage}
if (!hasGold) { message = $gameTemp._shopData.texts.notEnoughMoneyMessage};
// Add Text
$gameMessage.showLanguageMessage(message);
}.bind(this))
// Wait for Message
this.queue('startFunctionWait', this.waitForMessage.bind(this))
// Reactivate Item List Window
this.queue(function() {
this._itemListWindow.activate();
}.bind(this))
return;
};
// Activate Total Window
this._totalWindow.open();
this._totalWindow.setPrice(price, maxItems);
this._totalWindow.activate();
// If Buying
if (buying) {
// Add Text
$gameMessage.showLanguageMessage($gameTemp._shopData.texts.onItemListBuyOkMessage);
} else {
// Add Text
$gameMessage.showLanguageMessage($gameTemp._shopData.texts.onItemListSellOkMessage);
};
};
//=============================================================================
// * [OK] Total Window
//=============================================================================
Scene_OmoriItemShop.prototype.onTotalWindowOk = function() {
// Set Choice Callback Function
$gameMessage.setChoiceCallback(this.onPurchaseChoice.bind(this));
// If Buying
if ($gameTemp._shopData.shopType === 0) {
// Add Text
$gameMessage.showLanguageMessage($gameTemp._shopData.texts.itemBuyingPromptMessage);
} else {
// Add Text
$gameMessage.showLanguageMessage($gameTemp._shopData.texts.itemSellingPromptMessage);
};
// Get Buy Options Text
var text = LanguageManager.getPluginText('itemShopMenu', 'buyOptions')
// Set Choice Text
$gameMessage.setChoices([text[0], text[1]], 0, 1)
};
//=============================================================================
// * [Cancel] Total Window
//=============================================================================
Scene_OmoriItemShop.prototype.onTotalWindowCancel = function() {
// Terminate Message
this._messageWindow.terminateMessage();
this._itemListWindow.activate();
};
//=============================================================================
// * On Purchase Choice
//=============================================================================
Scene_OmoriItemShop.prototype.onPurchaseChoice = function(n) {
// Clear Input
Input.clear()
// Initialize Message
var message;
// If Yes
if (n === 0) {
var item = this._itemListWindow.item();
var total = this._totalWindow.totalPrice();
// If Buying
if ($gameTemp._shopData.shopType === 0) {
// Lose Gold
AudioManager.playSe({name: "SYS_cha_ching", pan: 0, pitch: 100, volume: 90});
$gameParty.loseGold(total);
// Gain Items
$gameParty.gainItem(item, this._totalWindow._amount);
// Set Confirm Message
message = $gameTemp._shopData.texts.itemBuyingConfirmationMessage;
} else {
// Gain Gold
$gameParty.gainGold(total);
// Gain Items
AudioManager.playSe({name: "SYS_cha_ching", pan: 0, pitch: 100, volume: 90});
$gameParty.loseItem(item, this._totalWindow._amount);
// Set Confirm Message
message = $gameTemp._shopData.texts.itemSellingConfirmationMessage;
// Refresh Item List Window
this._itemListWindow.refresh();
};
// Refresh Gold Window
this._goldWindow.refresh();
} else {
// If Buying
if ($gameTemp._shopData.shopType === 0) {
// Set Cancel Message
message = $gameTemp._shopData.texts.itemBuyingCancelMessage;
} else {
// Set Cancel Message
message = $gameTemp._shopData.texts.itemSellingCancelMessage;
};
};
// If Message Exists
if (message) {
// Show Max Item Message
this.queue(function() {
// Clear Game Message
$gameMessage.clear();
// Add Text
$gameMessage.showLanguageMessage(message);
}.bind(this))
};
// Wait for Message
this.queue('startFunctionWait', this.waitForMessage.bind(this))
this.queue(function() {
// Clear Game Message
$gameMessage.clear();
// Activate List Window
this._itemListWindow.activate();
}.bind(this))
};
//=============================================================================
// ** Window_OmoriShopHeader
//-----------------------------------------------------------------------------
// This window displays the shop's header.
//=============================================================================
function Window_OmoriShopHeader() { this.initialize.apply(this, arguments); }
Window_OmoriShopHeader.prototype = Object.create(Window_Base.prototype);
Window_OmoriShopHeader.prototype.constructor = Window_OmoriShopHeader;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriShopHeader.prototype.initialize = function() {
// Super Call
Window_Base.prototype.initialize.call(this, 0, 0, 250, 45);
// Set Openness
this.openness = 0;
// Refresh
this.refresh();
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriShopHeader.prototype.standardPadding = function() { return 4 };
Window_OmoriShopHeader.prototype.standardFontSize = function() { return 24; };
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriShopHeader.prototype.refresh = function() {
// Clear Contents
this.contents.clear();
// Draw Header Text ショップヘッダー位置
this.contents.drawText($gameTemp._shopData.name, 5, -2, this.contents.width - 10, this.contents.height);
};
//=============================================================================
// ** Window_OmoriShopTotal
//-----------------------------------------------------------------------------
// This window displays the shop's total amount to buy or sell.
//=============================================================================
function Window_OmoriShopTotal() { this.initialize.apply(this, arguments); }
Window_OmoriShopTotal.prototype = Object.create(Window_Base.prototype);
Window_OmoriShopTotal.prototype.constructor = Window_OmoriShopTotal;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriShopTotal.prototype.initialize = function() {
// Amount Count
this._amount = 0;
// Set Price
this._price = 0;
// Set Max Amount
this._maxAmount = 0;
// Super Call
Window_Base.prototype.initialize.call(this, 0, 0, 215, 55);
// Create Arrow Sprites
this.createArrowSprites();
// Refresh
this.refresh();
// Deactivate
this.deactivate();
// Set Openness to 0
this.openness = 0;
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriShopTotal.prototype.standardPadding = function() { return 4 };
Window_OmoriShopTotal.prototype.standardFontSize = function() { return 24; };
//=============================================================================
// * Get Total Price
//=============================================================================
Window_OmoriShopTotal.prototype.totalPrice = function() { return this._price * this._amount; };
//=============================================================================
// * Set Handlers
//=============================================================================
Window_OmoriShopTotal.prototype.setHandlers = function(okHandler, cancelHandler) {
this._okhandler = okHandler;
this._cancelHandler = cancelHandler;
};
//=============================================================================
// * Set Price
//=============================================================================
Window_OmoriShopTotal.prototype.setPrice = function(price, maxAmount = 99) {
// Set Price
this._price = price;
// Reset Amount
this._amount = 1;
// Set Max Amount
this._maxAmount = maxAmount;
// Draw Shopping Values
this.drawShoppingValues();
// Update Arrow Visibility
this.updateArrowVisibility();
};
//=============================================================================
// * Update Openness
//=============================================================================
Object.defineProperty(Window_OmoriShopTotal.prototype, 'openness', {
get: function() { return this._openness; },
set: function(value) {
if (this._openness !== value) {
this._openness = value.clamp(0, 255);
this._windowSpriteContainer.scale.y = this._openness / 255;
this._windowSpriteContainer.y = this.height / 2 * (1 - this._openness / 255);
if (this._leftArrowSprite) { this._leftArrowSprite.visible = this._openness === 255; };
if (this._rightArrowSprite) { this._rightArrowSprite.visible = this._openness === 255; };
}
},
configurable: true
});
//=============================================================================
// * Create Arrow Sprites
//=============================================================================
Window_OmoriShopTotal.prototype.createArrowSprites = function() {
// Get Initial Arrow Area
var p = 24;
var q = p/2;
var sx = 96+p;
var sy = 0+p;
// Create Left Arrow Sprite
this._leftArrowSprite = new Sprite(ImageManager.loadSystem('Window'))
this._leftArrowSprite.x = this.width - 67
this._leftArrowSprite.y = 5;//this.height - 30
this._leftArrowSprite.setFrame(sx-q, sy+q, p, p);
this.addChild(this._leftArrowSprite);
// Create Right Arrow Sprite
this._rightArrowSprite = new Sprite(ImageManager.loadSystem('Window'))
this._rightArrowSprite.x = this.width - 35
this._rightArrowSprite.y = 5;//this.height - 30
this._rightArrowSprite.setFrame(sx+p, sy+q, p, p);
this.addChild(this._rightArrowSprite);
// Update Arrow Visibility
this.updateArrowVisibility();
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriShopTotal.prototype.refresh = function() {
// Clear Contents
this.contents.clear();
// Draw Headers
this.contents.fontSize = 19; //合計金額:と購入数:のサイズ
this.contents.drawText(LanguageManager.getMessageData("XX_BLUE.Omori_Item_Shop").total_price, 5, 20, this.contents.width - 10, 20);
this.contents.drawText(LanguageManager.getMessageData("XX_BLUE.Omori_Item_Shop").amount, 5, 0, this.contents.width - 10, 20);
// Draw Shopping Values
this.drawShoppingValues();
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriShopTotal.prototype.drawShoppingValues = function() {
// Clear Rect
this.contents.clearRect(this.contents.width - 90, 0, 90, this.contents.height);
this.contents.fontSize = 19 // this.standardFontSize();
// this.contents.fillRect(this.contents.width - 90, 0, 90, this.contents.height, 'rgba(255, 0, 0, 0.5)');
// Draw Total Price
// this.drawCurrencyValue(this.totalPrice(), 'C', 0, 12, this.contents.width - 10)
this.contents.drawText('%1 %2'.format(Yanfly.Util.toGroup(this.totalPrice()), this.worldCurrencyUnit()), 0, 20, this.contents.width - 5, 20, 'right');
// Draw Amount
this.contents.drawText(this._amount, this.contents.width - 55, 0, 50, 20, 'center');
};
//=============================================================================
// * Frame Update
//=============================================================================
Window_OmoriShopTotal.prototype.update = function() {
// Super Call
Window_Base.prototype.update.call(this);
// Update Amount Input
this.updateAmountInput();
};
//=============================================================================
// * Update Amount Input
//=============================================================================
Window_OmoriShopTotal.prototype.updateAmountInput = function() {
// If Active
if (this.active && !$gameMessage.hasText()) {
if (Input.isTriggered('ok')) {
this.deactivate();
this.close()
// Call OK Handler
this._okhandler();
return;
}
if (Input.isTriggered('cancel')) {
this.deactivate();
this.close()
// Call Cancel Hanlder
this._cancelHandler();
return
}
if (Input.isRepeated('right')) {
var gold = $gameParty.gold();
var nextPrice = $gameTemp._shopData.shopType === 0 ? (this._amount + 1) * this._price : 0;
if (this._amount < this._maxAmount && gold >= nextPrice) {
AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90});
this._amount++;
this.drawShoppingValues();
this.updateArrowVisibility();
};
return;
};
if (Input.isRepeated('up')) {
var gold = $gameParty.gold();
var maxPrice = $gameTemp._shopData.shopType === 0 ? Math.min(Math.floor(gold / this._price), this._maxAmount) : this._maxAmount;
if (this._amount < this._maxAmount) {
AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90});
this._amount = Math.min(this._amount + 10, maxPrice);
this.drawShoppingValues();
this.updateArrowVisibility();
};
return;
};
if (Input.isRepeated('left')) {
// If Amount is more than 0
if (this._amount > 1) {
// Decrease Amount
AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90});
this._amount--;
this.drawShoppingValues();
this.updateArrowVisibility();
};
return
}
if (Input.isRepeated('down')) {
// If Amount is more than 0
if (this._amount > 0) {
AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90});
this._amount = Math.max(this._amount - 10, 1);
this.drawShoppingValues();
this.updateArrowVisibility();
};
return
};
};
};
//=============================================================================
// * Update Arrow Visibility
//=============================================================================
Window_OmoriShopTotal.prototype.updateArrowVisibility = function() {
// Get Total Price
var buying = $gameTemp._shopData.shopType === 0;
var totalPrice = buying ? this.totalPrice() : 0;
var nextPrice = buying ? (this._amount + 1) * this._price : -1;
var gold = $gameParty.gold();
if (totalPrice >= gold || gold < nextPrice || this._amount >= this._maxAmount ) {
this._rightArrowSprite.opacity = 160;
} else {
this._rightArrowSprite.opacity = 255;
};
if (this._amount <= 1) {
this._leftArrowSprite.opacity = 160;
} else {
this._leftArrowSprite.opacity = 255;
};
};
//=============================================================================
// ** Window_OmoriShopItemList
//-----------------------------------------------------------------------------
// The window for selecting items in the shopping screen
//=============================================================================
function Window_OmoriShopItemList() { this.initialize.apply(this, arguments); };
Window_OmoriShopItemList.prototype = Object.create(Window_ItemList.prototype);
Window_OmoriShopItemList.prototype.constructor = Window_OmoriShopItemList;
//=============================================================================
// * Object Initialization
//=============================================================================
Window_OmoriShopItemList.prototype.initialize = function(x, y, width, height) {
// Super Call
Window_ItemList.prototype.initialize.call(this, 0, 0, 250, 290 - 37);
this.refresh()
this.openness = 0;
this.select(0);
this.activate();
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriShopItemList.prototype.isUsingCustomCursorRectSprite = function() { return true; };
Window_OmoriShopItemList.prototype.includes = function(item) { return $gameParty.canUse(item); };
Window_OmoriShopItemList.prototype.maxCols = function() { return 1; };
Window_OmoriShopItemList.prototype.lineHeight = function() { return 27; };
Window_OmoriShopItemList.prototype.spacing = function() { return 0; };
Window_OmoriShopItemList.prototype.standardPadding = function() { return 10; };
Window_OmoriShopItemList.prototype.customCursorRectXOffset = function() { return 8; }
//=============================================================================
// * Determine if Item should be included
//=============================================================================
Window_OmoriShopItemList.prototype.includes = function(item) { return true; };
//=============================================================================
// * Make Item List
//=============================================================================
Window_OmoriShopItemList.prototype.makeItemList = function() {
// Clear Data
this._data = [];
// If Buying
if ($gameTemp._shopData.shopType === 0) {
// Get shop Goods
var shopGoods = $gameTemp._shopData.goods;
// Go through Shop Goods
for (var i = 0; i < shopGoods.length; i++) {
// Get Goods
var goods = shopGoods[i];
// Set Item
var item = null;
// Goods Type case
switch (goods[0]) {
case 0: item = $dataItems[goods[1]] ;break;
case 1: item = $dataWeapons[goods[1]] ;break;
case 2: item = $dataArmors[goods[1]] ;break;
};
// If Item exists
if (item) {
// Add Object to Data
this._data.push({item: item, price: goods[2] === 0 ? item.price : goods[3] });
};
};
} else {
// Get shop Goods
var shopGoods = $gameParty.allItems();
// Go through Shop Goods
for (var i = 0; i < shopGoods.length; i++) {
// Set Item
var item = shopGoods[i];
// If Item exists
if (item && item.price > 0) {
// Add Object to Data
this._data.push({item: item, price: item.price});
};
};
};
};
//=============================================================================
// * Get Item
//=============================================================================
Window_OmoriShopItemList.prototype.item = function() {
if (this._data.length <= 0) { return null; }
let index = this.index();
if (index >= this._data.length) { return null; }
return this._data && index >= 0 ? this._data[index].item : null;
};
//=============================================================================
// * Get Item Price
//=============================================================================
Window_OmoriShopItemList.prototype.price = function(index = this.index()) {
// Get Price
let price = this._data && index >= 0 ? this._data[index].price : null;
// If Selling cut price in half
if ($gameTemp._shopData.shopType === 1) { price /= 2; };
// Return price
return Math.round(price);
};
//=============================================================================
// * Determine if item is enabled
//=============================================================================
Window_OmoriShopItemList.prototype.isEnabled = function(item) {
return item;
return true
};
//=============================================================================
// * Item Rect
//=============================================================================
Window_OmoriShopItemList.prototype.itemRect = function(index) {
// Get Rect
var rect = Window_SkillList.prototype.itemRect.call(this, index);
rect.y += 15
// rect.x += 36;
return rect;
};
//=============================================================================
// * Draw Item
//=============================================================================
Window_OmoriShopItemList.prototype.drawItem = function(index) {
// Get Data
var data = this._data[index];
// Get Item
var item = data.item;
this.contents.fontSize = LanguageManager.getMessageData("XX_BLUE.Window_OmoriShopItemList").itemFontSize;
if (item) {
var rect = this.itemRect(index);
rect.x += 32
rect.width -= 40;
this.changePaintOpacity(this.isEnabled(item));
// this.contents.fillRect(rect.x, rect.y, rect.width - 50, rect.height, 'rgba(255, 0, 0, 0.5)')
this.contents.drawText(item.name, rect.x, rect.y + 2, rect.width - 50, rect.height);
this.contents.drawText('%1 %2'.format(this.price(index), this.worldCurrencyUnit()), rect.x, rect.y + 2, rect.width, rect.height, 'right');
this.changePaintOpacity(1);
};
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriShopItemList.prototype.refresh = function() {
// Super Call
Window_ItemList.prototype.refresh.call(this);
this.contents.fontSize = LanguageManager.getMessageData("XX_BLUE.Window_OmoriShopItemList").transactionHeaderFontSize;
this.contents.drawText($gameTemp._shopData.transactionHeader, 0, -3, this.contents.width - 10, 20)
// Get Index
let index = this.index();
let maxItems = this.maxItems();
// If Index exceeds or matches max items
if (index >= maxItems) {
// Set Index to last
this._index = Math.max(0, maxItems-1);
}
};
//=============================================================================
// * Refresh Arrows
//=============================================================================
Window_OmoriShopItemList.prototype._refreshArrows = function() {
// Super Call
Window_ItemList.prototype._refreshArrows.call(this);
var w = this._width;
var h = this._height;
var p = 24;
var q = p/2;
this._downArrowSprite.move(w - q, (h - q) );
this._upArrowSprite.move(w - q, q + 1);
};
//=============================================================================
// * Call Update Help
//=============================================================================
Window_OmoriShopItemList.prototype.callUpdateHelp = function() {
// Super Call
Window_ItemList.prototype.callUpdateHelp.call(this);
if (this._messageWindow) {
this._messageWindow.drawItem(this.item())
};
};
//=============================================================================
// ** WindowItemShopMessage
//-----------------------------------------------------------------------------
// This window displays shop text
//=============================================================================
function WindowItemShopMessage() { this.initialize.apply(this, arguments); }
WindowItemShopMessage.prototype = Object.create(Window_Message.prototype);
WindowItemShopMessage.prototype.constructor = WindowItemShopMessage;
//=============================================================================
// * Initialize Object
//=============================================================================
WindowItemShopMessage.prototype.initialize = function() {
// Super Call
Window_Message.prototype.initialize.call(this);
// Fixes Name box window awkwardness
// this.openness = 255;
// this._nameWindow.x = 16;
// this._nameWindow.open()
// this.open()
};
//=============================================================================
// * Settings
//=============================================================================
// WindowItemShopMessage.prototype.standardPadding = function() { return 4; };
//=============================================================================
// * Draw Item
//=============================================================================
WindowItemShopMessage.prototype.drawItem = function(item) {
// If Item exists
if (item) {
// Get Item Text
var itemText = item.description.replace(/<(?:BR|line break)>/gi, '\n').replace(/\[(?:BR|line break)\]/gi, '\n');
// Set Item Draw Flag to true
this._drawingItemText = true;
// Initialize Text State
this._textState = {};
this._textState.index = 0;
this._textState.text = this.convertEscapeCharacters(itemText);
this.newPage(this._textState);
this._textState.x = 110;
this._textState.y = 24;
// Set Flags
this._showFast = true;
this._pauseSkip = true;
this._wordWrap = true;
// Unpause
this.pause = false;
// Set Sound count to max (Prevents sound from playing)
this._soundCount = 99;
// Update Message
this.updateMessage();
// Draw Item Icon
this.drawItemIcon(item, 0, -5, 1)
// Draw Item Name
this.contents.drawText(item.name, 110, 0, this.contents.width - 110, 24)
// Draw Owned amount
this.contents.drawText('(%1: %2)'.format(LanguageManager.getPluginText('itemShopMenu', 'ownedText'),$gameParty.numItems(item)), 0, 0, this.contents.width-10, 24, 'right')
// Set Item Draw Flag to false
this._drawingItemText = false;
};
};
//=============================================================================
// * New Line X
//=============================================================================
WindowItemShopMessage.prototype.newLineX = function() {
if (this._drawingItemText) { return 110; };
return Window_Message.prototype.newLineX.call(this);
};
//=============================================================================
// * Terminate Message
//=============================================================================
WindowItemShopMessage.prototype.terminateMessage = function() {
// Run Original Function
Window_Message.prototype.terminateMessage.call(this);
this.open();
if (this._nameWindow.openness > 0) {
this._nameWindow.open();
}
};
//=============================================================================
// * Convert Escape Characters
//=============================================================================
WindowItemShopMessage.prototype.convertEscapeCharacters = function(text) {
// Get Item
var item = this._itemListWindow.item();
// Convert Tags into Text
text = text.replace(/<SHOPITEM>/gi, item ? item.name : "");
text = text.replace(/<SHOPAMOUNT>/gi, this._totalWindow._amount);
text = text.replace(/<SHOPTOTAL>/gi, this._totalWindow.totalPrice());
// Return Original Function
return Window_Message.prototype.convertEscapeCharacters.call(this, text)
};
//=============================================================================
// * Draw Item
//=============================================================================
WindowItemShopMessage.prototype.processEscapeCharacter = function(code, textState) {
// Code switch case
switch (code) {
case 'SHOPFACE':
// Set Shop Keeper's face
this.parent.setShopKeeperFace(this.obtainEscapeParam(textState))
break;
}
// Run Original Function
Window_Message.prototype.processEscapeCharacter.call(this, code, textState);
};