mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Improve handling
This commit is contained in:
committed by
Phillip Thelen
parent
0f7001b609
commit
82a1d6ff0e
@@ -106,32 +106,16 @@ async function grantEndOfTheMonthPerks (user, now) {
|
||||
planMonthsLength = getPlanMonths(plan);
|
||||
}
|
||||
|
||||
// every 3 months you get one set of perks - this variable records how many sets you need
|
||||
let perkAmountNeeded = 0;
|
||||
if (planMonthsLength === 1) {
|
||||
// User has a single-month recurring subscription and are due for perks
|
||||
// IF they've been subscribed for a multiple of 3 months.
|
||||
if (plan.consecutive.count % SUBSCRIPTION_BASIC_BLOCK_LENGTH === 0) { // every 3 months
|
||||
perkAmountNeeded = 1;
|
||||
}
|
||||
plan.consecutive.offset = 0; // allow the same logic to be run next month
|
||||
} else {
|
||||
// User has a multi-month recurring subscription
|
||||
// and it renewed in the previous calendar month.
|
||||
|
||||
// e.g., for a 6-month subscription, give two sets of perks
|
||||
perkAmountNeeded = planMonthsLength / SUBSCRIPTION_BASIC_BLOCK_LENGTH;
|
||||
// don't need to check for perks again for this many months
|
||||
// (subtract 1 because we should have run this when the payment was taken last month)
|
||||
plan.consecutive.offset = planMonthsLength - 1;
|
||||
}
|
||||
if (perkAmountNeeded > 0) {
|
||||
// one Hourglass every 3 months
|
||||
await plan.updateHourglasses(user._id, perkAmountNeeded, 'subscription_perks'); // eslint-disable-line no-await-in-loop
|
||||
plan.consecutive.gemCapExtra += 5 * perkAmountNeeded; // 5 extra Gems every 3 months
|
||||
// cap it at 50 (hard 25 limit + extra 25)
|
||||
if (plan.consecutive.gemCapExtra > 25) plan.consecutive.gemCapExtra = 25;
|
||||
}
|
||||
await plan.incrementPerkCounterAndReward(user._id, planMonthsLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,12 +246,11 @@ async function createSubscription (data) {
|
||||
} = await prepareSubscriptionValues(data);
|
||||
|
||||
// Block sub perks
|
||||
const perks = Math.floor(months / 3);
|
||||
if (perks) {
|
||||
plan.consecutive.offset += months;
|
||||
plan.consecutive.gemCapExtra += perks * 5;
|
||||
if (plan.consecutive.gemCapExtra > 25) plan.consecutive.gemCapExtra = 25;
|
||||
await plan.updateHourglasses(recipient._id, perks, 'subscription_perks'); // one Hourglass every 3 months
|
||||
if (months > 0) {
|
||||
if (!data.gift && !groupId) {
|
||||
plan.consecutive.offset = months;
|
||||
}
|
||||
await plan.incrementPerkCounterAndReward(recipient._id, months);
|
||||
}
|
||||
|
||||
if (recipient !== group) {
|
||||
|
||||
Reference in New Issue
Block a user