新增碎片&钻石

This commit is contained in:
chnxianyi
2025-09-11 18:00:55 +08:00
parent 8c3ded3e20
commit 03decff71d
8 changed files with 32 additions and 11 deletions

View File

@@ -58,6 +58,7 @@ exports.SteamLogin = async (req, res) => {
user.validation_level = 0; user.validation_level = 0;
user.coins = config.start_coins; user.coins = config.start_coins;
user.cardfragments = config.start_cardfragments;
user.elo = config.start_elo; user.elo = config.start_elo;
user.xp = 0; user.xp = 0;

View File

@@ -60,6 +60,8 @@ module.exports = {
//New Users //New Users
start_coins: 5000, start_coins: 5000,
start_cardfragments: 0,
start_crystals: 0,
start_elo: 1000, start_elo: 1000,
//Match Rewards //Match Rewards

View File

@@ -9,6 +9,8 @@ exports.AddReward = async(req, res) =>
var repeat = req.body.repeat; var repeat = req.body.repeat;
var xp = req.body.xp; var xp = req.body.xp;
var coins = req.body.coins; var coins = req.body.coins;
var cardfragments = req.body.cardfragments;
var crystals = req.body.crystals;
var cards = req.body.cards; var cards = req.body.cards;
var packs = req.body.packs; var packs = req.body.packs;
var decks = req.body.decks; var decks = req.body.decks;
@@ -25,6 +27,10 @@ exports.AddReward = async(req, res) =>
return res.status(400).send({error: "Invalid parameters"}); return res.status(400).send({error: "Invalid parameters"});
if(coins && !Number.isInteger(coins)) if(coins && !Number.isInteger(coins))
return res.status(400).send({error: "Invalid parameters"}); return res.status(400).send({error: "Invalid parameters"});
if(cardfragments && !Number.isInteger(cardfragments))
return res.status(400).send({error: "Invalid parameters"});
if(crystals && !Number.isInteger(crystals))
return res.status(400).send({error: "Invalid parameters"});
if(cards && !Array.isArray(cards)) if(cards && !Array.isArray(cards))
return res.status(400).send({error: "Invalid parameters"}); return res.status(400).send({error: "Invalid parameters"});
if(packs && !Array.isArray(packs)) if(packs && !Array.isArray(packs))
@@ -42,6 +48,8 @@ exports.AddReward = async(req, res) =>
repeat: repeat || false, repeat: repeat || false,
xp: xp || 0, xp: xp || 0,
coins: coins || 0, coins: coins || 0,
cardfragments: cardfragments || 0,
crystals: crystals || 0,
cards: cards || [], cards: cards || [],
packs: packs || [], packs: packs || [],
decks: decks || [], decks: decks || [],

View File

@@ -9,6 +9,8 @@ const rewardSchema = new Schema({
xp: { type: Number, default: 0 }, xp: { type: Number, default: 0 },
coins: { type: Number, default: 0 }, coins: { type: Number, default: 0 },
cardfragments: { type: Number, default: 0 },
crystals: { type: Number, default: 0 },
cards: [{type: String}], cards: [{type: String}],
packs: [{type: String}], packs: [{type: String}],
decks: [{type: String}], decks: [{type: String}],

View File

@@ -86,6 +86,7 @@ exports.DeleteDeck = async(req, res) => {
return res.status(200).send(upUser.decks); return res.status(200).send(upUser.decks);
}; };
// 购买卡片
exports.BuyCard = async (req, res) => { exports.BuyCard = async (req, res) => {
const userId = req.jwt.userId; const userId = req.jwt.userId;
@@ -117,17 +118,17 @@ exports.BuyCard = async (req, res) => {
var variant = await VariantModel.get(variantId); var variant = await VariantModel.get(variantId);
var factor = variant != null ? variant.cost_factor : 1; var factor = variant != null ? variant.cost_factor : 1;
var cost = quantity * factor * card.cost; var cost = quantity * factor * card.cost;
if(user.coins < cost) if(user.cardfragments < cost)
return res.status(400).send({ error: "Not enough coins" }); return res.status(400).send({ error: "Not enough cardfragments" });
user.coins -= cost; user.cardfragments -= cost;
var valid = await UserTool.addCards(user, [{tid: cardId, variant: variantId, quantity: quantity}]); var valid = await UserTool.addCards(user, [{tid: cardId, variant: variantId, quantity: quantity}]);
if (!valid) if (!valid)
return res.status(500).send({ error: "Error when adding cards" }); return res.status(500).send({ error: "Error when adding cards" });
//Update the user array //Update the user array
var updatedUser = await UserModel.save(user, ["coins", "cards"]); var updatedUser = await UserModel.save(user, ["cardfragments", "cards"]);
if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId }); if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId });
// Activity Log ------------- // Activity Log -------------
@@ -175,14 +176,14 @@ exports.SellCard = async (req, res) => {
var factor = variant != null ? variant.cost_factor : 1; var factor = variant != null ? variant.cost_factor : 1;
var cost = quantity * Math.round(card.cost * factor * config.sell_ratio); var cost = quantity * Math.round(card.cost * factor * config.sell_ratio);
user.coins += cost; user.cardfragments += cost;
var valid = await UserTool.addCards(user, [{tid: cardId, variant: variantId, quantity: -quantity}]); var valid = await UserTool.addCards(user, [{tid: cardId, variant: variantId, quantity: -quantity}]);
if (!valid) if (!valid)
return res.status(500).send({ error: "Error when removing cards" }); return res.status(500).send({ error: "Error when removing cards" });
//Update the user array //Update the user array
var updatedUser = await UserModel.save(user, ["coins", "cards"]); var updatedUser = await UserModel.save(user, ["cardfragments", "cards"]);
if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId }); if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId });
// Activity Log ------------- // Activity Log -------------
@@ -224,7 +225,7 @@ exports.SellDuplicateCards = async (req, res) => {
return res.status(404).send({ error: "Cant find cards" }); return res.status(404).send({ error: "Cant find cards" });
var cards_to_sell = []; var cards_to_sell = [];
var coins = 0; var cardfragments = 0;
for(var i=0; i<user.cards.length; i++) for(var i=0; i<user.cards.length; i++)
{ {
var card = user.cards[i]; var card = user.cards[i];
@@ -241,7 +242,7 @@ exports.SellDuplicateCards = async (req, res) => {
var factor = variant != null ? variant.cost_factor : 1; var factor = variant != null ? variant.cost_factor : 1;
var cost = quantity * Math.round(card_data.cost * factor * config.sell_ratio); var cost = quantity * Math.round(card_data.cost * factor * config.sell_ratio);
cards_to_sell.push(sell); cards_to_sell.push(sell);
coins += cost; cardfragments += cost;
} }
} }
} }
@@ -250,14 +251,14 @@ exports.SellDuplicateCards = async (req, res) => {
if(cards_to_sell.length == 0) if(cards_to_sell.length == 0)
return res.status(200).send(); return res.status(200).send();
user.coins += coins; user.cardfragments += cardfragments;
var valid = await UserTool.addCards(user, cards_to_sell); var valid = await UserTool.addCards(user, cards_to_sell);
if (!valid) if (!valid)
return res.status(500).send({ error: "Error when removing cards" }); return res.status(500).send({ error: "Error when removing cards" });
//Update the user array //Update the user array
var updatedUser = await UserModel.save(user, ["coins", "cards"]); var updatedUser = await UserModel.save(user, ["cardfragments", "cards"]);
if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId }); if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId });
// Activity Log ------------- // Activity Log -------------
@@ -269,6 +270,7 @@ exports.SellDuplicateCards = async (req, res) => {
return res.status(200).send(); return res.status(200).send();
}; };
// 购买卡包 TODO 金币&钻石
exports.BuyPack = async (req, res) => { exports.BuyPack = async (req, res) => {
const userId = req.jwt.userId; const userId = req.jwt.userId;

View File

@@ -60,6 +60,8 @@ exports.RegisterUser = async (req, res, next) => {
user.validation_level = validation; user.validation_level = validation;
user.coins = config.start_coins; user.coins = config.start_coins;
user.cardfragments = config.start_cardfragments;
user.crystals = config.start_crystals;
user.elo = config.start_elo; user.elo = config.start_elo;
user.xp = 0; user.xp = 0;
@@ -470,7 +472,7 @@ exports.GainReward = async(req, res) =>
return res.status(500).send({error: "Failed adding reward: " + rewardId + " for " + userId}); return res.status(500).send({error: "Failed adding reward: " + rewardId + " for " + userId});
//Update the user //Update the user
var updatedUser = await UserModel.save(user, ["rewards", "xp", "coins", "cards", "decks", "avatars", "cardbacks"]); var updatedUser = await UserModel.save(user, ["rewards", "xp", "coins", "cardfragments", "cards", "decks", "avatars", "cardbacks"]);
if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId }); if (!updatedUser) return res.status(500).send({ error: "Error updating user: " + userId });
//Log activity //Log activity

View File

@@ -21,6 +21,8 @@ const userSchema = new Schema({
avatar: {type: String, default: ""}, avatar: {type: String, default: ""},
cardback: {type: String, default: ""}, cardback: {type: String, default: ""},
coins: {type: Number, default: 0}, coins: {type: Number, default: 0},
cardfragments: {type: Number, default: 0},
crystals: {type: Number, default: 0},
xp: {type: Number, default: 0}, xp: {type: Number, default: 0},
elo: {type: Number, default: 1000}, elo: {type: Number, default: 1000},

View File

@@ -33,6 +33,8 @@ UserTool.GainUserReward = async(user, reward) =>
{ {
//Add reward to user //Add reward to user
user.coins += reward.coins || 0; user.coins += reward.coins || 0;
user.cardfragments += reward.cardfragments || 0;
user.crystals += reward.crystals || 0;
user.xp += reward.xp || 0; user.xp += reward.xp || 0;
UserTool.addAvatars(user, reward.avatars); UserTool.addAvatars(user, reward.avatars);