Add ability to sacrifice multiple cards at once #354

Merged
Vylpes merged 4 commits from feature/337-sacrifice-multiple into develop 2024-09-15 16:57:25 +01:00
2 changed files with 20 additions and 6 deletions
Showing only changes of commit ca6ccea16f - Show all commits

View file

@ -23,6 +23,7 @@ export default class Sacrifice extends ButtonEvent {
private async confirm(interaction: ButtonInteraction) { private async confirm(interaction: ButtonInteraction) {
const userId = interaction.customId.split(" ")[2]; const userId = interaction.customId.split(" ")[2];
const cardNumber = interaction.customId.split(" ")[3]; const cardNumber = interaction.customId.split(" ")[3];
const quantity = Number(interaction.customId.split(" ")[4]);
Vylpes marked this conversation as resolved Outdated

I don't actually think this works, try using || instead of ??

I don't actually think this works, try using `||` instead of `??`
if (userId != interaction.user.id) { if (userId != interaction.user.id) {
await interaction.reply("Only the user who created this sacrifice can confirm it."); await interaction.reply("Only the user who created this sacrifice can confirm it.");
@ -31,11 +32,16 @@ export default class Sacrifice extends ButtonEvent {
const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber); const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
if (!cardInInventory) { if (!cardInInventory || cardInInventory.Quantity == 0) {
await interaction.reply("Unable to find card in inventory."); await interaction.reply("Unable to find card in inventory.");
return; return;
} }
if (cardInInventory.Quantity < quantity) {
await interaction.reply("You can only sacrifice what you own.");
return;
}
const cardData = CardDropHelperMetadata.GetCardByCardNumber(cardNumber); const cardData = CardDropHelperMetadata.GetCardByCardNumber(cardNumber);
if (!cardData) { if (!cardData) {
@ -50,11 +56,11 @@ export default class Sacrifice extends ButtonEvent {
return; return;
} }
cardInInventory.RemoveQuantity(1); cardInInventory.RemoveQuantity(quantity);
await cardInInventory.Save(Inventory, cardInInventory); await cardInInventory.Save(Inventory, cardInInventory);
const cardValue = GetSacrificeAmount(cardData.card.type); const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
const cardRarityString = CardRarityToString(cardData.card.type); const cardRarityString = CardRarityToString(cardData.card.type);
user.AddCurrency(cardValue); user.AddCurrency(cardValue);
@ -66,6 +72,7 @@ export default class Sacrifice extends ButtonEvent {
`Series: ${cardData.series.name}`, `Series: ${cardData.series.name}`,
`Rarity: ${cardRarityString}`, `Rarity: ${cardRarityString}`,
`Quantity Owned: ${cardInInventory.Quantity}`, `Quantity Owned: ${cardInInventory.Quantity}`,
`Quantity To Sacrifice: ${quantity}`,
`Sacrifice Amount: ${cardValue}`, `Sacrifice Amount: ${cardValue}`,
]; ];
@ -98,6 +105,7 @@ export default class Sacrifice extends ButtonEvent {
private async cancel(interaction: ButtonInteraction) { private async cancel(interaction: ButtonInteraction) {
const userId = interaction.customId.split(" ")[2]; const userId = interaction.customId.split(" ")[2];
const cardNumber = interaction.customId.split(" ")[3]; const cardNumber = interaction.customId.split(" ")[3];
const quantity = Number(interaction.customId.split(" ")[4]);
Vylpes marked this conversation as resolved Outdated

Same here

Same here
if (userId != interaction.user.id) { if (userId != interaction.user.id) {
await interaction.reply("Only the user who created this sacrifice can cancel it."); await interaction.reply("Only the user who created this sacrifice can cancel it.");
@ -106,11 +114,16 @@ export default class Sacrifice extends ButtonEvent {
const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber); const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
if (!cardInInventory) { if (!cardInInventory || cardInInventory.Quantity == 0) {
await interaction.reply("Unable to find card in inventory."); await interaction.reply("Unable to find card in inventory.");
return; return;
} }
if (cardInInventory.Quantity < quantity) {
await interaction.reply("You can only sacrifice what you own.");
return;
}
const cardData = CardDropHelperMetadata.GetCardByCardNumber(cardNumber); const cardData = CardDropHelperMetadata.GetCardByCardNumber(cardNumber);
if (!cardData) { if (!cardData) {
@ -118,7 +131,7 @@ export default class Sacrifice extends ButtonEvent {
return; return;
} }
const cardValue = GetSacrificeAmount(cardData.card.type); const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
const cardRarityString = CardRarityToString(cardData.card.type); const cardRarityString = CardRarityToString(cardData.card.type);
const description = [ const description = [
@ -126,6 +139,7 @@ export default class Sacrifice extends ButtonEvent {
`Series: ${cardData.series.name}`, `Series: ${cardData.series.name}`,
`Rarity: ${cardRarityString}`, `Rarity: ${cardRarityString}`,
`Quantity Owned: ${cardInInventory.Quantity}`, `Quantity Owned: ${cardInInventory.Quantity}`,
`Quantity To Sacrifice: ${quantity}`,
`Sacrifice Amount: ${cardValue}`, `Sacrifice Amount: ${cardValue}`,
]; ];

View file

@ -46,7 +46,7 @@ export default class Sacrifice extends Command {
return; return;
} }
const cardValue = GetSacrificeAmount(cardData.card.type); const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
const cardRarityString = CardRarityToString(cardData.card.type); const cardRarityString = CardRarityToString(cardData.card.type);
const description = [ const description = [