This commit is contained in:
chnxianyi
2025-09-30 17:39:59 +08:00
parent a730dc9974
commit 02b47f7ecf
7 changed files with 448 additions and 462 deletions

View File

@@ -1,134 +1,122 @@
const CardModel = require('../cards/cards.model');
const CardModel = require("../cards/cards.model");
const Activity = require("../activity/activity.model");
const config = require('../config');
const config = require("../config");
exports.AddCard = async(req, res) =>
{
var tid = req.body.tid;
var type = req.body.type;
var team = req.body.team;
var rarity = req.body.rarity || "";
var mana = req.body.mana || 0;
var attack = req.body.attack || 0;
var hp = req.body.hp || 0;
var cost = req.body.cost || 1;
var packs = req.body.packs || [];
exports.AddCard = async (req, res) => {
var tid = req.body.tid;
var type = req.body.type;
var team = req.body.team;
var rarity = req.body.rarity || "";
var mana = req.body.mana || 0;
var attack = req.body.attack || 0;
var hp = req.body.hp || 0;
var cost = req.body.cost || 1;
var packs = req.body.packs || [];
if(!tid || typeof tid !== "string")
return res.status(400).send({error: "Invalid parameters"});
if (!tid || typeof tid !== "string")
return res.status(400).send({ error: "Invalid parameters" });
if(!type || typeof type !== "string")
return res.status(400).send({error: "Invalid parameters"});
if (!type || typeof type !== "string")
return res.status(400).send({ error: "Invalid parameters" });
if(!team || typeof team !== "string")
return res.status(400).send({error: "Invalid parameters"});
if (!team || typeof team !== "string")
return res.status(400).send({ error: "Invalid parameters" });
if(!rarity || typeof rarity !== "string")
return res.status(400).send({error: "Invalid parameters"});
if (!rarity || typeof rarity !== "string")
return res.status(400).send({ error: "Invalid parameters" });
if(!Number.isInteger(mana) || !Number.isInteger(attack) || !Number.isInteger(hp) || !Number.isInteger(cost))
return res.status(400).send({ error: "Invalid parameters" });
if (
!Number.isInteger(mana) ||
!Number.isInteger(attack) ||
!Number.isInteger(hp) ||
!Number.isInteger(cost)
)
return res.status(400).send({ error: "Invalid parameters" });
if(packs && !Array.isArray(packs))
return res.status(400).send({error: "Invalid parameters"});
if (packs && !Array.isArray(packs))
return res.status(400).send({ error: "Invalid parameters" });
var data = {
tid: tid,
type: type,
team: team,
rarity: rarity,
mana: mana,
attack: attack,
hp: hp,
cost: cost,
packs: packs,
var data = {
tid: tid,
type: type,
team: team,
rarity: rarity,
mana: mana,
attack: attack,
hp: hp,
cost: cost,
packs: packs,
};
//Update or create
var card = await CardModel.get(tid);
if (card) card = await CardModel.update(card, data);
else card = await CardModel.create(data);
if (!card) return res.status(500).send({ error: "Error updating card" });
return res.status(200).send(data);
};
exports.AddCardList = async (req, res) => {
var cards = req.body.cards;
if (!Array.isArray(cards))
return res.status(400).send({ error: "Invalid parameters" });
var ocards = [];
for (var i = 0; i < cards.length; i++) {
var card = cards[i];
if (card && card.tid && card.type && card.team) {
var data = {
tid: card.tid,
type: card.type,
team: card.team,
rarity: card.rarity || "",
mana: card.mana || 0,
attack: card.attack || 0,
hp: card.hp || 0,
cost: card.cost || 0,
packs: card.packs || [],
};
var ccard = await CardModel.get(card.tid);
if (ccard) ccard = await CardModel.update(ccard, data);
else ccard = await CardModel.create(data);
ocards.push(ccard);
}
}
//Update or create
var card = await CardModel.get(tid);
if(card)
card = await CardModel.update(card, data);
else
card = await CardModel.create(data);
if(!card)
return res.status(500).send({error: "Error updating card"});
return res.status(200).send(data);
return res.status(200).send(ocards);
};
exports.AddCardList = async(req, res) =>
{
var cards = req.body.cards;
if(!Array.isArray(cards))
return res.status(400).send({error: "Invalid parameters"});
var ocards = [];
for(var i=0; i<cards.length; i++)
{
var card = cards[i];
if(card && card.tid && card.type && card.team)
{
var data = {
tid: card.tid,
type: card.type,
team: card.team,
rarity: card.rarity || "",
mana: card.mana || 0,
attack: card.attack || 0,
hp: card.hp || 0,
cost: card.cost || 0,
packs: card.packs || [],
}
var ccard = await CardModel.get(card.tid);
if(ccard)
ccard = await CardModel.update(ccard, data);
else
ccard = await CardModel.create(data);
ocards.push(ccard);
}
}
return res.status(200).send(ocards);
exports.DeleteCard = async (req, res) => {
CardModel.remove(req.params.tid);
return res.status(204).send({});
};
exports.DeleteCard = async(req, res) =>
{
CardModel.remove(req.params.tid);
return res.status(204).send({});
exports.DeleteAll = async (req, res) => {
CardModel.removeAll();
return res.status(204).send({});
};
exports.DeleteAll = async(req, res) =>
{
CardModel.removeAll();
return res.status(204).send({});
exports.GetCard = async (req, res) => {
var tid = req.params.tid;
if (!tid) return res.status(400).send({ error: "Invalid parameters" });
var card = await CardModel.get(tid);
if (!card) return res.status(404).send({ error: "Card not found: " + tid });
return res.status(200).send(card.toObj());
};
exports.GetCard = async(req, res) =>
{
var tid = req.params.tid;
exports.GetAll = async (req, res) => {
var cards = await CardModel.getAll();
if(!tid)
return res.status(400).send({error: "Invalid parameters"});
for (var i = 0; i < cards.length; i++) {
cards[i] = cards[i].toObj();
}
var card = await CardModel.get(tid);
if(!card)
return res.status(404).send({error: "Card not found: " + tid});
return res.status(200).send(card.toObj());
return res.status(200).send(cards);
};
exports.GetAll = async(req, res) =>
{
var cards = await CardModel.getAll();
for(var i=0; i<cards.length; i++){
cards[i] = cards[i].toObj();
}
return res.status(200).send(cards);
};

View File

@@ -1,111 +1,92 @@
const config = require('../config.js');
const crypto = require('crypto');
const CardModel = require('../cards/cards.model');
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);
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);
}
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;
}
return cards;
};
CardTool.getRandomRarity = (pack, is_first) =>
{
var rarities = is_first ? pack.rarities_1st : pack.rarities;
if(!rarities || rarities.length == 0)
return ""; //Any rarity
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 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;
}
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 "";
rvalue -= rarity.value;
}
return "";
};
CardTool.getRandomVariant = (pack) =>
{
var variants = pack.variants;
if(!variants || variants.length == 0)
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 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;
}
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 "";
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;
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;
};
module.exports = CardTool;
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;