Files
pirate-corsaire-server/Messages/ItemBuyMessage.js
T
2026-08-24 22:20:36 +02:00

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);
};