75 lines
2.4 KiB
JavaScript
75 lines
2.4 KiB
JavaScript
const ItemBoughtPacket = require("../Packets/ItemBought");
|
|
const packet_57 = require("../Packets/packet_57");
|
|
|
|
const BASE_SHOP = require("../Data/shop");
|
|
const { SHOP, SHOP_ENTRIES_BUY } = BASE_SHOP;
|
|
|
|
module.exports = async function (ws, message, player) {
|
|
const categoryID = message.getUint8(1);
|
|
const itemID = message.getUint8(2);
|
|
const rawAmount = message.getUint32(3);
|
|
|
|
let bought = {
|
|
categoryID,
|
|
id: itemID,
|
|
amount: 0
|
|
};
|
|
|
|
const itemToBuy = SHOP.find(entry => entry.categoryID === categoryID && entry.itemID === itemID);
|
|
console.info(categoryID, itemID, SHOP)
|
|
if (!itemToBuy) {
|
|
const boughtItemConfirmationPacket = ItemBoughtPacket(bought);
|
|
return player.map.registerIndividualNetworkPacket(player.id, boughtItemConfirmationPacket);
|
|
};
|
|
|
|
const isItemAvailable = itemToBuy.isAvailable(player);
|
|
if (!isItemAvailable) return;
|
|
|
|
if (SHOP_ENTRIES_BUY[player.id] && SHOP_ENTRIES_BUY[player.id]?.[categoryID]?.[itemID] >= itemToBuy.maximumPlayerAmount) {
|
|
bought = {
|
|
categoryID,
|
|
id: itemID,
|
|
amount: 0
|
|
};
|
|
|
|
const boughtItemConfirmationPacket = ItemBoughtPacket(bought);
|
|
return player.map.registerIndividualNetworkPacket(player.id, boughtItemConfirmationPacket);
|
|
};
|
|
|
|
const amount = rawAmount; // Math.min(rawAmount, (itemToBuy.maximumPlayerAmount || Infinity) - alreadyBoughtAmount)
|
|
bought.amount = amount;
|
|
|
|
player.rewardCallback({
|
|
isRegular: true,
|
|
authorID: player.id,
|
|
source: {},
|
|
rewards: [{
|
|
categoryID,
|
|
id: itemID,
|
|
amount
|
|
}]
|
|
});
|
|
|
|
player.inventory.refreshSingle({
|
|
categoryID: 1,
|
|
id: itemToBuy.currencyType,
|
|
amount: itemToBuy.currencyAmount * amount * -1
|
|
});
|
|
|
|
const packets = [];
|
|
const boughtItemConfirmationPacket = ItemBoughtPacket(bought);
|
|
packets.push(boughtItemConfirmationPacket);
|
|
|
|
console.info("bought", bought);
|
|
|
|
if (false && alreadyBoughtAmount + amount >= itemToBuy.maximumPlayerAmount) {
|
|
const removeShopEntryPacket = packet_57({
|
|
id: itemID,
|
|
shopCategoryID: itemToBuy.shopCategoryID
|
|
});
|
|
|
|
packets.push(removeShopEntryPacket);
|
|
};
|
|
|
|
player.map.registerIndividualNetworkPacket(player.id, packets);
|
|
}; |