93 lines
2.4 KiB
JavaScript
93 lines
2.4 KiB
JavaScript
const config = require("../config.js");
|
|
const crypto = require("crypto");
|
|
const CardModel = require("../cards/cards.model");
|
|
|
|
const CardTool = {};
|
|
|
|
CardTool.getPackCards = async (pack) => {
|
|
var pack_cards = await CardModel.getByPack(pack.tid);
|
|
console.log("pack_cards", pack_cards);
|
|
var cards = [];
|
|
for (var i = 0; i < pack.cards; i++) {
|
|
if (pack.random) {
|
|
//Randomized set
|
|
var rarity_tid = CardTool.getRandomRarity(pack, i == 0);
|
|
var variant_tid = CardTool.getRandomVariant(pack);
|
|
var rarity_cards = CardTool.getCardArray(pack_cards, rarity_tid);
|
|
var card = CardTool.getRandomCard(rarity_cards);
|
|
if (card) {
|
|
var cardQ = { tid: card.tid, variant: variant_tid, quantity: 1 };
|
|
cards.push(cardQ);
|
|
}
|
|
} else if (i < pack_cards.length) {
|
|
//Fixed set
|
|
var card = pack_cards[i];
|
|
var variant_tid = CardTool.getRandomVariant(pack);
|
|
var cardQ = { tid: card.tid, variant: variant_tid, quantity: 1 };
|
|
cards.push(cardQ);
|
|
}
|
|
}
|
|
return cards;
|
|
};
|
|
|
|
CardTool.getRandomRarity = (pack, is_first) => {
|
|
var rarities = is_first ? pack.rarities_1st : pack.rarities;
|
|
if (!rarities || rarities.length == 0) return ""; //Any rarity
|
|
|
|
var total = 0;
|
|
for (var rarity of rarities) {
|
|
total += rarity.value;
|
|
}
|
|
|
|
var rvalue = Math.floor(Math.random() * total);
|
|
|
|
for (var i = 0; i < rarities.length; i++) {
|
|
var rarity = rarities[i];
|
|
if (rvalue < rarity.value) {
|
|
return rarity.tid;
|
|
}
|
|
rvalue -= rarity.value;
|
|
}
|
|
return "";
|
|
};
|
|
|
|
CardTool.getRandomVariant = (pack) => {
|
|
var variants = pack.variants;
|
|
if (!variants || variants.length == 0) return "";
|
|
|
|
var total = 0;
|
|
for (var variant of variants) {
|
|
total += variant.value;
|
|
}
|
|
|
|
var rvalue = Math.floor(Math.random() * total);
|
|
|
|
for (var i = 0; i < variants.length; i++) {
|
|
var variant = variants[i];
|
|
if (rvalue < variant.value) {
|
|
return variant.tid;
|
|
}
|
|
rvalue -= variant.value;
|
|
}
|
|
return "";
|
|
};
|
|
|
|
CardTool.getCardArray = (all_cards, rarity) => {
|
|
var valid_cards = [];
|
|
for (var i = 0; i < all_cards.length; i++) {
|
|
var card = all_cards[i];
|
|
if (!rarity || card.rarity == rarity) valid_cards.push(card);
|
|
}
|
|
return valid_cards;
|
|
};
|
|
|
|
CardTool.getRandomCard = (all_cards, suffix) => {
|
|
if (all_cards.length > 0) {
|
|
var card = all_cards[Math.floor(Math.random() * all_cards.length)];
|
|
return card;
|
|
}
|
|
return null;
|
|
};
|
|
|
|
module.exports = CardTool;
|