Compare commits

...

36 Commits

Author SHA1 Message Date
SabreCat e88b3c2c49 4.225.1 2022-03-22 16:52:54 -05:00
SabreCat d6e64482d6 chore(sprites): update CSS 2022-03-22 16:52:48 -05:00
SabreCat 4d1c5024a3 4.225.0 2022-03-22 10:37:35 -05:00
SabreCat ad9c468e77 fix(event): CSS build, small fixes 2022-03-22 10:34:44 -05:00
SabreCat e141e2407c Merge remote-tracking branch 'CuriousMagpie/2022-spring-fling-gala' into release 2022-03-22 09:41:59 -05:00
SabreCat 33da6b7959 revert of hotfix for further review 2022-03-21 16:28:41 -05:00
SabreCat 9a454daef1 partial revert of hotfix for further review 2022-03-21 16:28:20 -05:00
SabreCat 2828ae660c fix(tasks): correct list repair query 2022-03-18 17:40:09 -05:00
SabreCat 4a21ffa81d fix(build): force https for git repositories 2022-03-18 17:30:43 -05:00
SabreCat fa27aa8fe7 fix(tasks): self-healing for missing tasksOrder entries 2022-03-18 17:15:20 -05:00
CuriousMagpie c94195129f 2022 Spring Fling Content 2022-03-18 17:24:05 -04:00
CuriousMagpie deacd8964f uploaded spring fling class set images 2022-03-18 14:06:37 -04:00
SabreCat 5ea82fe87f 4.224.3 2022-03-15 16:08:58 -05:00
SabreCat a24651e395 fix(content): bundle ends March not May 2022-03-15 16:08:53 -05:00
SabreCat 6339e9066f 4.224.2 2022-03-15 15:01:11 -05:00
SabreCat c2d48480a0 chore(content): rerelease cuddle bubbles 2022-03-15 15:00:58 -05:00
SabreCat d9240f7887 fix(migration): actually count 2022-03-14 15:06:57 -05:00
SabreCat dd86b96433 4.224.1 2022-03-14 14:30:20 -05:00
SabreCat 3e082fe127 chore(event): Pi Day 2022 2022-03-14 14:29:57 -05:00
SabreCat c38781e154 4.224.0 2022-03-09 16:17:28 -06:00
SabreCat 3c7df419b7 chore(submodule): update habitica-images 2022-03-09 16:17:23 -06:00
SabreCat 52d1480844 chore(sprites): build CSS 2022-03-09 16:16:44 -06:00
CuriousMagpie d9f593d53a added migration script 2022-03-09 15:55:31 -06:00
SabreCat 7cc17d0369 feat(content): Armoire and Backgrounds 2022-03-09 15:50:31 -06:00
CuriousMagpie 43be5f0490 Add Rooster and Peacock 2022-03-08 16:52:43 -05:00
CuriousMagpie fc4145700c image update! 2022-03-08 13:06:33 -05:00
CuriousMagpie aa1b9a5e94 added achievement Birds of a Feather 2022-03-08 12:43:38 -05:00
CuriousMagpie ce57a70e64 habitica images update 2022-03-08 12:37:49 -05:00
SabreCat e66f722311 4.223.0 2022-02-28 09:49:27 -06:00
SabreCat 05a54e505c chore(mystery): update images, run sprites 2022-02-28 09:49:21 -06:00
CuriousMagpie 82e9c2e896 2022-03 Subscriber Items 2022-02-28 09:37:57 -06:00
CuriousMagpie 8dbb55f3b7 2022-03 Subscriber Items 2022-02-28 09:37:49 -06:00
SabreCat 4295b55339 4.222.2 2022-02-22 12:18:20 -06:00
SabreCat 08352c5f49 fix(subs): correct cancellation check logic and test 2022-02-22 11:26:15 -06:00
SabreCat 7080715bcc fix(tests): renewig typos 2022-02-22 10:13:32 -06:00
Phillip Thelen c6d07983b2 Fix issue with validating android sub cancellation 2022-02-22 10:12:10 -06:00
29 changed files with 681 additions and 38 deletions
@@ -0,0 +1,138 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20220309_pet_group_achievements';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {
migration: MIGRATION_NAME,
};
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['FlyingPig-Base']
&& pets['FlyingPig-CottonCandyBlue']
&& pets['FlyingPig-CottonCandyPink']
&& pets['FlyingPig-Desert']
&& pets['FlyingPig-Golden']
&& pets['FlyingPig-Red']
&& pets['FlyingPig-Shade']
&& pets['FlyingPig-Skeleton']
&& pets['FlyingPig-White']
&& pets['FlyingPig-Zombie']
&& pets['Owl-Base']
&& pets['Owl-CottonCandyBlue']
&& pets['Owl-CottonCandyPink']
&& pets['Owl-Desert']
&& pets['Owl-Golden']
&& pets['Owl-Red']
&& pets['Owl-Shade']
&& pets['Owl-Skeleton']
&& pets['Owl-White']
&& pets['Owl-Zombie']
&& pets['Parrot-Base']
&& pets['Parrot-CottonCandyBlue']
&& pets['Parrot-CottonCandyPink']
&& pets['Parrot-Desert']
&& pets['Parrot-Golden']
&& pets['Parrot-Red']
&& pets['Parrot-Shade']
&& pets['Parrot-Skeleton']
&& pets['Parrot-White']
&& pets['Parrot-Zombie']
&& pets['Rooster-Base']
&& pets['Rooster-CottonCandyBlue']
&& pets['Rooster-CottonCandyPink']
&& pets['Rooster-Desert']
&& pets['Rooster-Golden']
&& pets['Rooster-Red']
&& pets['Rooster-Shade']
&& pets['Rooster-Skeleton']
&& pets['Rooster-White']
&& pets['Rooster-Zombie']
&& pets['Pterodactyl-Base']
&& pets['Pterodactyl-CottonCandyBlue']
&& pets['Pterodactyl-CottonCandyPink']
&& pets['Pterodactyl-Desert']
&& pets['Pterodactyl-Golden']
&& pets['Pterodactyl-Red']
&& pets['Pterodactyl-Shade']
&& pets['Pterodactyl-Skeleton']
&& pets['Pterodactyl-White']
&& pets['Pterodactyl-Zombie']
&& pets['Gryphon-Base']
&& pets['Gryphon-CottonCandyBlue']
&& pets['Gryphon-CottonCandyPink']
&& pets['Gryphon-Desert']
&& pets['Gryphon-Golden']
&& pets['Gryphon-Red']
&& pets['Gryphon-Shade']
&& pets['Gryphon-Skeleton']
&& pets['Gryphon-White']
&& pets['Gryphon-Zombie']
&& pets['Falcon-Base']
&& pets['Falcon-CottonCandyBlue']
&& pets['Falcon-CottonCandyPink']
&& pets['Falcon-Desert']
&& pets['Falcon-Golden']
&& pets['Falcon-Red']
&& pets['Falcon-Shade']
&& pets['Falcon-Skeleton']
&& pets['Falcon-White']
&& pets['Falcon-Zombie']
&& pets['Peacock-Base']
&& pets['Peacock-CottonCandyBlue']
&& pets['Peacock-CottonCandyPink']
&& pets['Peacock-Desert']
&& pets['Peacock-Golden']
&& pets['Peacock-Red']
&& pets['Peacock-Shade']
&& pets['Peacock-Skeleton']
&& pets['Peacock-White']
&& pets['Peacock-Zombie']) {
set['achievements.birdsOfAFeather'] = true;
}
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
export default async function processUsers () {
let query = {
// migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2021-08-01') },
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
+3 -3
View File
@@ -3,13 +3,13 @@ import { v4 as uuid } from 'uuid';
import { model as User } from '../../website/server/models/user';
const MIGRATION_NAME = '20210314_pi_day';
const MIGRATION_NAME = '20220314_pi_day';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count *= 1;
count += 1;
const inc = {
'items.food.Pie_Skeleton': 1,
@@ -54,7 +54,7 @@ async function updateUser (user) {
export default async function processUsers () {
const query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2021-02-15') },
'auth.timestamps.loggedin': { $gt: new Date('2022-02-15') },
};
const fields = {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.222.1",
"version": "4.225.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.222.1",
"version": "4.225.1",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.16.12",
@@ -106,7 +106,7 @@
"start": "gulp nodemon",
"debug": "gulp nodemon --inspect",
"mongo:dev": "run-rs -v 4.2.8 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet",
"postinstall": "gulp build && cd website/client && npm install",
"postinstall": "git config --global url.\"https://\".insteadOf git:// && gulp build && cd website/client && npm install",
"apidoc": "gulp apidoc"
},
"devDependencies": {
+22 -1
View File
@@ -256,7 +256,7 @@ describe('Google Payments', () => {
expirationDate,
});
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData')
.returns([{ expirationDate: expirationDate.toDate() }]);
.returns([{ expirationDate: expirationDate.toDate(), autoRenewing: false }]);
iapIsValidatedStub = sinon.stub(iap, 'isValidated')
.returns(true);
@@ -325,5 +325,26 @@ describe('Google Payments', () => {
headers,
});
});
it('should not cancel a user subscription with autorenew', async () => {
iap.getPurchaseData.restore();
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData')
.returns([{ autoRenewing: true }]);
await googlePayments.cancelSubscribe(user, headers);
expect(iapSetupStub).to.be.calledOnce;
expect(iapValidateStub).to.be.calledOnce;
expect(iapValidateStub).to.be.calledWith(iap.GOOGLE, {
data: receipt,
signature,
});
expect(iapIsValidatedStub).to.be.calledOnce;
expect(iapIsValidatedStub).to.be.calledWith({
expirationDate,
});
expect(iapGetPurchaseDataStub).to.be.calledOnce;
expect(paymentCancelSubscriptionSpy).to.not.be.called;
});
});
});
@@ -48,6 +48,11 @@
width: 48px;
height: 52px;
}
.achievement-birdsOfAFeather2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-birdsOfAFeather2x.png');
width: 60px;
height: 64px;
}
.achievement-birthday2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-birthday2x.png');
width: 48px;
@@ -493,6 +498,11 @@
width: 141px;
height: 147px;
}
.background_animals_den {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_animals_den.png');
width: 141px;
height: 147px;
}
.background_apple_picking {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_apple_picking.png');
width: 141px;
@@ -628,6 +638,11 @@
width: 141px;
height: 147px;
}
.background_brick_wall_with_ivy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_brick_wall_with_ivy.png');
width: 141px;
height: 147px;
}
.background_bridge {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_bridge.png');
width: 141px;
@@ -888,6 +903,16 @@
width: 60px;
height: 60px;
}
.background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_flowering_prairie.png');
width: 141px;
height: 147px;
}
.customize-option.background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_flowering_prairie.png');
width: 60px;
height: 60px;
}
.background_flying_in_a_thunderstorm {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_flying_in_a_thunderstorm.png');
width: 141px;
@@ -1943,6 +1968,11 @@
width: 68px;
height: 68px;
}
.icon_background_animals_den {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_animals_den.png');
width: 68px;
height: 68px;
}
.icon_background_apple_picking {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_apple_picking.png');
width: 68px;
@@ -2078,6 +2108,11 @@
width: 68px;
height: 68px;
}
.icon_background_brick_wall_with_ivy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_brick_wall_with_ivy.png');
width: 68px;
height: 68px;
}
.icon_background_bridge {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_bridge.png');
width: 68px;
@@ -2343,6 +2378,16 @@
width: 60px;
height: 60px;
}
.icon_background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flowering_prairie.png');
width: 60px;
height: 60px;
}
.customize-option.icon_background_flowering_prairie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flowering_prairie.png');
width: 60px;
height: 60px;
}
.icon_background_flying_in_a_thunderstorm {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_flying_in_a_thunderstorm.png');
width: 68px;
@@ -16688,6 +16733,11 @@
width: 114px;
height: 90px;
}
.broad_armor_armoire_gardenersOveralls {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_gardenersOveralls.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_gladiatorArmor {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_gladiatorArmor.png');
width: 90px;
@@ -17123,6 +17173,11 @@
width: 114px;
height: 90px;
}
.head_armoire_gardenersSunHat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_gardenersSunHat.png');
width: 114px;
height: 90px;
}
.head_armoire_gladiatorHelm {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_gladiatorHelm.png');
width: 90px;
@@ -17473,6 +17528,11 @@
width: 114px;
height: 90px;
}
.shield_armoire_gardenersSpade {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_gardenersSpade.png');
width: 114px;
height: 90px;
}
.shield_armoire_gladiatorShield {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_gladiatorShield.png');
width: 90px;
@@ -17833,6 +17893,11 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_gardenersOveralls {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_gardenersOveralls.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_gladiatorArmor {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_gladiatorArmor.png');
width: 68px;
@@ -18283,6 +18348,11 @@
width: 68px;
height: 68px;
}
.shop_head_armoire_gardenersSunHat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_gardenersSunHat.png');
width: 68px;
height: 68px;
}
.shop_head_armoire_gladiatorHelm {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_gladiatorHelm.png');
width: 68px;
@@ -18633,6 +18703,11 @@
width: 68px;
height: 68px;
}
.shop_shield_armoire_gardenersSpade {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_gardenersSpade.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_gladiatorShield {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_gladiatorShield.png');
width: 68px;
@@ -18983,6 +19058,11 @@
width: 68px;
height: 68px;
}
.shop_weapon_armoire_gardenersWateringCan {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_gardenersWateringCan.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_glassblowersBlowpipe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_glassblowersBlowpipe.png');
width: 68px;
@@ -19398,6 +19478,11 @@
width: 114px;
height: 90px;
}
.slim_armor_armoire_gardenersOveralls {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_gardenersOveralls.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_gladiatorArmor {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_gladiatorArmor.png');
width: 90px;
@@ -19798,6 +19883,11 @@
width: 90px;
height: 90px;
}
.weapon_armoire_gardenersWateringCan {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_gardenersWateringCan.png');
width: 114px;
height: 90px;
}
.weapon_armoire_glassblowersBlowpipe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_glassblowersBlowpipe.png');
width: 114px;
@@ -25093,6 +25183,31 @@
width: 68px;
height: 68px;
}
.back_mystery_202203 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/back_mystery_202203.png');
width: 114px;
height: 90px;
}
.headAccessory_mystery_202203 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_mystery_202203.png');
width: 114px;
height: 90px;
}
.shop_back_mystery_202203 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_back_mystery_202203.png');
width: 68px;
height: 68px;
}
.shop_headAccessory_mystery_202203 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_mystery_202203.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202203 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202203.png');
width: 68px;
height: 68px;
}
.broad_armor_mystery_301404 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
width: 90px;
@@ -25428,6 +25543,26 @@
width: 114px;
height: 90px;
}
.broad_armor_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_spring2022Healer.png');
width: 114px;
height: 90px;
}
.broad_armor_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_spring2022Mage.png');
width: 114px;
height: 90px;
}
.broad_armor_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_spring2022Rogue.png');
width: 114px;
height: 117px;
}
.broad_armor_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_spring2022Warrior.png');
width: 114px;
height: 90px;
}
.broad_armor_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_springHealer.png');
width: 90px;
@@ -25668,6 +25803,26 @@
width: 114px;
height: 90px;
}
.head_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_spring2022Healer.png');
width: 114px;
height: 90px;
}
.head_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_spring2022Mage.png');
width: 114px;
height: 90px;
}
.head_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_spring2022Rogue.png');
width: 114px;
height: 117px;
}
.head_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_spring2022Warrior.png');
width: 114px;
height: 90px;
}
.head_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_springHealer.png');
width: 90px;
@@ -25793,6 +25948,21 @@
width: 114px;
height: 90px;
}
.shield_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_spring2022Healer.png');
width: 114px;
height: 90px;
}
.shield_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_spring2022Rogue.png');
width: 114px;
height: 117px;
}
.shield_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_spring2022Warrior.png');
width: 114px;
height: 90px;
}
.shield_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_springHealer.png');
width: 90px;
@@ -25948,6 +26118,26 @@
width: 68px;
height: 68px;
}
.shop_armor_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_spring2022Healer.png');
width: 68px;
height: 68px;
}
.shop_armor_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_spring2022Mage.png');
width: 68px;
height: 68px;
}
.shop_armor_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_spring2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_armor_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_spring2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_armor_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_springHealer.png');
width: 68px;
@@ -26188,6 +26378,26 @@
width: 68px;
height: 68px;
}
.shop_head_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_spring2022Healer.png');
width: 68px;
height: 68px;
}
.shop_head_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_spring2022Mage.png');
width: 68px;
height: 68px;
}
.shop_head_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_spring2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_head_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_spring2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_head_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_springHealer.png');
width: 68px;
@@ -26313,6 +26523,21 @@
width: 68px;
height: 68px;
}
.shop_shield_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_spring2022Healer.png');
width: 68px;
height: 68px;
}
.shop_shield_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_spring2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_shield_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_spring2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_shield_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_springHealer.png');
width: 68px;
@@ -26468,6 +26693,26 @@
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_spring2022Healer.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_spring2022Mage.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_spring2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_spring2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_springHealer.png');
width: 68px;
@@ -26628,6 +26873,26 @@
width: 114px;
height: 90px;
}
.slim_armor_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_spring2022Healer.png');
width: 114px;
height: 90px;
}
.slim_armor_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_spring2022Mage.png');
width: 114px;
height: 90px;
}
.slim_armor_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_spring2022Rogue.png');
width: 114px;
height: 117px;
}
.slim_armor_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_spring2022Warrior.png');
width: 114px;
height: 90px;
}
.slim_armor_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_springHealer.png');
width: 90px;
@@ -26788,6 +27053,26 @@
width: 114px;
height: 90px;
}
.weapon_special_spring2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_spring2022Healer.png');
width: 114px;
height: 90px;
}
.weapon_special_spring2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_spring2022Mage.png');
width: 114px;
height: 90px;
}
.weapon_special_spring2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_spring2022Rogue.png');
width: 114px;
height: 117px;
}
.weapon_special_spring2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_spring2022Warrior.png');
width: 114px;
height: 90px;
}
.weapon_special_springHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_springHealer.png');
width: 90px;
@@ -450,6 +450,14 @@ const NOTIFICATIONS = {
achievement: 'zodiacZookeeper',
},
},
ACHIEVEMENT_BIRDS_OF_A_FEATHER: {
achievement: true,
label: $t => `${$t('achievement')}: ${$t('achievementBirdsOfAFeather')}`,
modalId: 'generic-achievement',
data: {
achievement: 'birdsOfAFeather',
},
},
};
export default {
@@ -514,6 +522,7 @@ export default {
'ACHIEVEMENT_RED_LETTER_DAY', 'ACHIEVEMENT_LEGENDARY_BESTIARY', 'ACHIEVEMENT_SEASONAL_SPECIALIST',
'ACHIEVEMENT_VIOLETS_ARE_BLUE', 'ACHIEVEMENT_WILD_BLUE_YONDER', 'ACHIEVEMENT_DOMESTICATED',
'ACHIEVEMENT_SHADY_CUSTOMER', 'ACHIEVEMENT_SHADE_OF_IT_ALL', 'ACHIEVEMENT_ZODIAC_ZOOKEEPER',
'ACHIEVEMENT_BIRDS_OF_A_FEATHER',
].forEach(type => {
handledNotifications[type] = true;
});
@@ -948,6 +957,7 @@ export default {
case 'ACHIEVEMENT_SHADY_CUSTOMER':
case 'ACHIEVEMENT_SHADE_OF_IT_ALL':
case 'ACHIEVEMENT_ZODIAC_ZOOKEEPER':
case 'ACHIEVEMENT_BIRDS_OF_A_FEATHER':
case 'GENERIC_ACHIEVEMENT':
this.showNotificationWithModal(notification);
break;
+4 -1
View File
@@ -126,5 +126,8 @@
"achievementShadeOfItAllModalText": "You tamed all the Shade Mounts!",
"achievementZodiacZookeeper": "Zodiac Zookeeper",
"achievementZodiacZookeeperText": "Has hatched all the zodiac pets: Rat, Cow, Bunny, Snake, Horse, Sheep, Monkey, Rooster, Wolf, Tiger, Flying Pig, and Dragon!",
"achievementZodiacZookeeperModalText": "You collected all the zodiac pets!"
"achievementZodiacZookeeperModalText": "You collected all the zodiac pets!",
"achievementBirdsOfAFeather": "Birds of a Feather",
"achievementBirdsOfAFeatherText": "Has hatched all the flying pets: Flying Pig, Owl, Parrot, Pterodactyl, Gryphon, and Falcon.",
"achievementBirdsOfAFeatherModalText":"You collected all the flying pets!"
}
@@ -762,6 +762,14 @@
"backgroundIridescentCloudsText": "Iridescent Clouds",
"backgroundIridescentCloudsNotes": "Float in Iridescent Clouds.",
"backgrounds032022": "SET 94: Released March 2022",
"backgroundAnimalsDenText": "Woodland Critter's Den",
"backgroundAnimalsDenNotes": "Cozy up in a Woodland Critter's Den.",
"backgroundBrickWallWithIvyText": "Brick Wall with Ivy",
"backgroundBrickWallWithIvyNotes": "Admire a Brick Wall with Ivy.",
"backgroundFloweringPrairieText": "Flowering Prairie",
"backgroundFloweringPrairieNotes": "Frolic through a Flowering Prairie.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
+44
View File
@@ -428,6 +428,15 @@
"headSpecialNye2021Text": "Preposterous Party Hat",
"headSpecialNye2021Notes": "You've received a Preposterous Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
"weaponSpecialSpring2022RogueText": "Giant Earring Stud",
"weaponSpecialSpring2022RogueNotes": "A shiny! Its so shiny and gleaming and pretty and nice and all yours! Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022WarriorText": "Inside-Out Umbrella",
"weaponSpecialSpring2022WarriorNotes": "Yikes! Guess that wind was a little stronger than you thought, huh? Increases Strength by <%= str %>, Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022MageText": "Forsythia Staff",
"weaponSpecialSpring2022MageNotes": "These bright yellow bells are ready to channel your powerful springtime magic. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022HealerText": "Peridot Wand",
"weaponSpecialSpring2022HealerNotes": "Use this wand to tap into peridots healing properties, whether it be to bring calm, positivity, or kindheartedness. Increases Intelligence by <%= int %>. Limited Edition 2022 Spring Gear.",
"weaponMystery201411Text": "Pitchfork of Feasting",
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
@@ -617,6 +626,8 @@
"weaponArmoireShootingStarSpellNotes": "Surround yourself in a spell of stardust magic to help you make all your wishes come true. Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Stardust Set (Item 3 of 3).",
"weaponArmoirePinkLongbowText": "Pink Longbow",
"weaponArmoirePinkLongbowNotes": "Be a cupid-in-training, mastering both archery and matters of the heart with this beautiful bow. Increases Perception by <%= per %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.",
"weaponArmoireGardenersWateringCanText": "Watering Can",
"weaponArmoireGardenersWateringCanNotes": "You cant get far without water! Have an infinite supply on hand with this magic, refilling watering can. Increases Intelligence by <%= int %>. Enchanted Armoire: Gardener Set (Item 4 of 4).",
"armor": "armor",
"armorCapitalized": "Armor",
@@ -1026,6 +1037,15 @@
"armorSpecialWinter2022HealerText": "Crystalline Ice Armor",
"armorSpecialWinter2022HealerNotes": "Glide as if skating, just above the ground, a glittering ethereal figure come to bring cool and calm. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
"armorSpecialSpring2022RogueText": "Magpie Costume",
"armorSpecialSpring2022RogueNotes": "With iridescent metallic blue-gray and lighter patches on your feathers, you will be the finest flying friend at the spring fling! Increases Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022WarriorText": "Rain Slicker",
"armorSpecialSpring2022WarriorNotes": "This slicker and boots are so formidable you could sing in the rain or jump in every puddle but still be warm and dry! Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022MageText": "Forsythia Robe",
"armorSpecialSpring2022MageNotes": "Show youre ready to spring forward into the season with this robe adorned with forsythia flower petals. Intelligence by <%= int %>.Limited Edition 2022 Spring Gear.",
"armorSpecialSpring2022HealerText": "Peridot Armor",
"armorSpecialSpring2022HealerNotes": " Drive away fears and nightmares simply by wearing this green gem garment. Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor",
@@ -1303,6 +1323,8 @@
"armorArmoireShootingStarCostumeNotes": "Rumored to have been spun out of the night sky itself, this flowy gown lets you rise above all obstacles in your path. Increases Constitution by <%= con %>. Enchanted Armoire: Stardust Set (Item 2 of 3).",
"armorArmoireSoftVioletSuitText": "Soft Violet Suit",
"armorArmoireSoftVioletSuitNotes": "Purple is a luxurious color. Relax in style after youve accomplished all your daily tasks. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Violet Loungewear Set (Item 2 of 3).",
"armorArmoireGardenersOverallsText": "Gardener's Overalls",
"armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@@ -1708,6 +1730,15 @@
"headSpecialWinter2022HealerText": "Crystalline Ice Crown",
"headSpecialWinter2022HealerNotes": "Minute imperfections and impurities send the arms of this headdress branching out in unpredictable directions. It's symbolic! And also very, very pretty. Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
"headSpecialSpring2022RogueText": "Magpie Mask",
"headSpecialSpring2022RogueNotes": "Be as clever as a magpie when wearing this mask. Maybe youll even be able to whistle, trill, and mimic as well as one, too. Increases Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"headSpecialSpring2022WarriorText": "Rain Slicker Hood",
"headSpecialSpring2022WarriorNotes": "Tut tut, it looks like rain! Stand tall and pull up your hood to stay dry. Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
"headSpecialSpring2022MageText": "Forsythia Helmet",
"headSpecialSpring2022MageNotes": "Stay dry during a rainstorm with this protective helmet of downturned petals.Increases Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
"headSpecialSpring2022HealerText": "Peridot Helmet",
"headSpecialSpring2022HealerNotes": "This mysterious helmet preserves your privacy as you tackle your tasks. Increases Intelligence by <%= int %>. Limited Edition 2022 Spring Gear.",
"headSpecialGaymerxText": "Rainbow Warrior Helm",
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
@@ -2010,6 +2041,8 @@
"headArmoireRegalCrownNotes": "Any monarch would be lucky to have such a majestic, smart-looking crown. Increases Intelligence by <%= int %>. Enchanted Armoire: Regal Set (Item 1 of 2).",
"headArmoireShootingStarCrownText": "Star Crown",
"headArmoireShootingStarCrownNotes": "With this brightly shining headpiece, you will literally be the star of your own adventure! Increases Perception by <%= per %>. Enchanted Armoire: Stardust Set (Item 1 of 3).",
"headArmoireGardenersSunHatText": "Gardener's Sun Hat",
"headArmoireGardenersSunHatNotes": "The bright light of the day star wont shine in your eyes when you wear this wide-brimmed hat. Increases Perception by <%= per %>. Enchanted Armoire: Gardener Set (Item 2 of 4).",
"offhand": "off-hand item",
"offHandCapitalized": "Off-Hand Item",
@@ -2237,6 +2270,11 @@
"shieldSpecialWinter2022HealerText": "Enduring Ice Crystal",
"shieldSpecialWinter2022HealerNotes": "Though it melts in your hand, the power of elemental ice replenishes it from within. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
"shieldSpecialSpring2022WarriorText": "Raincloud",
"shieldSpecialSpring2022WarriorNotes": "Ever had one of those days when it seems like a raincloud is following you around? Well, consider yourself lucky, because the prettiest flowers will soon be growing at your feet! Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"shieldSpecialSpring2022HealerText": "Peridot Shield",
"shieldSpecialSpring2022HealerNotes": "Formed by molten rock of the upper mantle, this shield can withstand any hit that comes its way. Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"shieldMystery201601Text": "Resolution Slayer",
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
"shieldMystery201701Text": "Time-Freezer Shield",
@@ -2380,6 +2418,8 @@
"shieldArmoireSoftBlackPillowNotes": "The brave warrior packs a pillow for any expedition. Guard yourself from tiresome tasks... even while you nap. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Black Loungewear Set (Item 3 of 3).",
"shieldArmoireSoftVioletPillowText": "Soft Violet Pillow",
"shieldArmoireSoftVioletPillowNotes": "The clever warrior packs a pillow for any expedition. Protect yourself from procrastination-induced panic... even while you nap. Increases Intelligence by <%= int %>. Enchanted Armoire: Violet Loungewear Set (Item 3 of 3).",
"shieldArmoireGardenersSpadeText": "Gardener's Spade",
"shieldArmoireGardenersSpadeNotes": "Whether youre digging in the garden, searching for buried treasure, or creating a secret tunnel, this trusty spade is at your side. Increases Strength by <%= str %>. Enchanted Armoire: Gardener Set (Item 3 of 4).",
"back": "Back Accessory",
"backBase0Text": "No Back Accessory",
@@ -2440,6 +2480,8 @@
"backMystery202105Notes": "Glide through the starry sky and place yourself among the constellations! Confers no benefit. May 2021 Subscriber Item.",
"backMystery202109Text": "Lunar Lepidopteran Wings",
"backMystery202109Notes": "Glide softly through the twilight air without a sound. Confers no benefit. September 2021 Subscriber Item.",
"backMystery202203Text": "Dauntless Dragonfly Wings",
"backMystery202203Notes": "Outrace all the other creatures of the sky with these shimmering wings. Confers no benefit. March 2022 Subscriber Item.",
"backSpecialWonderconRedText": "Mighty Cape",
"backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.",
@@ -2638,6 +2680,8 @@
"headAccessoryMystery202105Notes": "Don these iridescent horns and summon the magic of starlight. Confers no benefit. May 2021 Subscriber Item.",
"headAccessoryMystery202109Text": "Lunar Lepidopteran Antennae",
"headAccessoryMystery202109Notes": "Catch the scent of flowers on the breeze or the scent of change on the wind. Confers no benefit. September 2021 Subscriber Item.",
"headAccessoryMystery202203Text": "Dauntless Dragonfly Circlet",
"headAccessoryMystery202203Notes": "Need an extra boost of speed? The tiny decorative wings on this circlet are more powerful than they look! Confers no benefit. March 2022 Subscriber Item.",
"headAccessoryMystery301405Text": "Headwear Goggles",
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.",
+4
View File
@@ -179,6 +179,10 @@
"winter2022StockingWarriorSet": "Stocking (Warrior)",
"winter2022PomegranateMageSet": "Pomegranate (Mage)",
"winter2022IceCrystalHealerSet": "Ice Crystal (Healer)",
"spring2022MagpieRogueSet": "Magpie (Rogue)",
"spring2022RainstormWarriorSet": "Rainstorm (Warrior)",
"spring2022ForsythiaMageSet": "Forsythia (Mage)",
"spring2022PeridotHealerSet": "Peridot (Healer)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndMarch": "April 30",
+1 -1
View File
@@ -699,7 +699,7 @@
"questSquirrelUnlockText": "Unlocks Squirrel Eggs for purchase in the Market",
"cuddleBuddiesText": "Cuddle Buddies Quest Bundle",
"cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.",
"cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until March 31.",
"aquaticAmigosText": "Aquatic Amigos Quest Bundle",
"aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'. Available until August 31.",
@@ -131,6 +131,7 @@
"mysterySet202112": "Antarctic Undine Set",
"mysterySet202201": "Midnight Merrymaker Set",
"mysterySet202202": "Turquoise Twintails Set",
"mysterySet202203": "Dauntless Dragonfly Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set",
@@ -272,6 +272,11 @@ const basicAchievs = {
titleKey: 'achievementZodiacZookeeper',
textKey: 'achievementZodiacZookeeperText',
},
birdsOfAFeather: {
icon: 'achievement-birdsOfAFeather',
titleKey: 'achievementBirdsOfAFeather',
textKey: 'achievementBirdsOfAFeatherText',
},
};
Object.assign(achievementsData, basicAchievs);
@@ -485,6 +485,11 @@ const backgrounds = {
orange_grove: { },
iridescent_clouds: { },
},
backgrounds032022: {
animals_den: { },
brick_wall_with_ivy: { },
flowering_prairie: { },
},
timeTravelBackgrounds: {
airship: {
price: 1,
+1 -1
View File
@@ -114,7 +114,7 @@ const bundles = {
'guineapig',
],
canBuy () {
return moment().isBetween('2018-05-08', '2018-06-02');
return moment().isBetween('2022-03-15T08:00-04:00', '2022-03-31T20:00-04:00');
},
type: 'quests',
value: 7,
@@ -11,6 +11,21 @@ const ANIMAL_SET_ACHIEVEMENTS = {
achievementKey: 'legendaryBestiary',
notificationType: 'ACHIEVEMENT_LEGENDARY_BESTIARY',
},
birdsOfAFeather: {
type: 'pet',
species: [
'FlyingPig',
'Owl',
'Parrot',
'Pterodactyl',
'Gryphon',
'Falcon',
'Rooster',
'Peacock',
],
achievementKey: 'birdsOfAFeather',
notificationType: 'ACHIEVEMENT_BIRDS_OF_A_FEATHER',
},
domesticated: {
type: 'pet',
species: [
@@ -10,11 +10,18 @@ const gemsPromo = {
export const EVENTS = {
noCurrentEvent: {
start: '2022-02-18T20:00-05:00',
end: '2022-03-31T20:00-05:00',
start: '2022-04-30T20:00-05:00',
end: '2022-06-30T20:00-05:00',
season: 'normal',
npcImageSuffix: '',
},
spring2022: {
start: '2022-03-22T08:00-05:00',
end: '2022-04-30T20:00-05:00',
npcImageSuffix: 'spring',
season: 'spring',
gear: true,
},
valentines2022: {
start: '2022-02-14T08:00-05:00',
end: '2022-02-18T20:00-05:00',
@@ -67,36 +67,37 @@ const SEASONAL_SETS = {
'cleverDogSet',
'braveMouseSet',
// spring 2017
'spring2017FelineWarriorSet',
'spring2017CanineConjurorSet',
'spring2017FloralMouseSet',
'spring2017SneakyBunnySet',
// spring 2018
'spring2018TulipMageSet',
'spring2018SunriseWarriorSet',
'spring2018DucklingRogueSet',
'spring2018GarnetHealerSet',
// spring 2019
'spring2019AmberMageSet',
'spring2019OrchidWarriorSet',
'spring2019CloudRogueSet',
'spring2019RobinHealerSet',
// spring 2020
'spring2020BeetleWarriorSet',
'spring2020IrisHealerSet',
'spring2020LapisLazuliRogueSet',
'spring2020PuddleMageSet',
// spring 2021
'spring2021SwanMageSet',
'spring2021WillowHealerSet',
'spring2021SunstoneWarriorSet',
'spring2021TwinFlowerRogueSet',
'spring2022ForsythiaMageSet',
'spring2022PeridotHealerSet',
'spring2022RainstormWarriorSet',
'spring2022MagpieRogueSet',
],
summer: [
// summer 2014
'daringSwashbucklerSet',
@@ -388,6 +388,10 @@ const armor = {
str: 7,
set: 'violetLoungewear',
},
gardenersOveralls: {
con: 7,
set: 'gardenerSet',
},
};
const body = {
@@ -787,6 +791,10 @@ const head = {
per: 10,
set: 'shootingStar',
},
gardenersSunHat: {
per: 7,
set: 'gardenerSet',
},
};
const shield = {
@@ -1056,6 +1064,10 @@ const shield = {
int: 10,
set: 'violetLoungewear',
},
gardenersSpade: {
str: 8,
set: 'gardenerSet',
},
};
const headAccessory = {
@@ -1436,6 +1448,10 @@ const weapon = {
str: 5,
twoHanded: true,
},
gardenersWateringCan: {
int: 8,
set: 'gardenerSet',
},
};
forEach({
@@ -89,6 +89,7 @@ const back = {
202012: { },
202105: { },
202109: { },
202203: { },
};
const body = {
@@ -207,6 +208,7 @@ const headAccessory = {
202102: { },
202105: { },
202109: { },
202203: { },
301405: { },
};
@@ -670,15 +670,19 @@ const armor = {
},
spring2021Rogue: {
set: 'spring2021TwinFlowerRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Warrior: {
set: 'spring2021SunstoneWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Mage: {
set: 'spring2021SwanMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Healer: {
set: 'spring2021WillowHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
summer2021Rogue: {
set: 'summer2021ClownfishRogueSet',
@@ -716,6 +720,19 @@ const armor = {
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
},
spring2022Mage: {
set: 'spring2022ForsythiaMageSet',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
},
birthday2022: {
text: t('armorSpecialBirthday2022Text'),
notes: t('armorSpecialBirthday2022Notes'),
@@ -1728,15 +1745,19 @@ const head = {
},
spring2021Rogue: {
set: 'spring2021TwinFlowerRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Warrior: {
set: 'spring2021SunstoneWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Mage: {
set: 'spring2021SwanMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Healer: {
set: 'spring2021WillowHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
summer2021Rogue: {
set: 'summer2021ClownfishRogueSet',
@@ -1780,6 +1801,18 @@ const head = {
value: 0,
canOwn: ownsItem('head_special_nye2021'),
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
},
spring2022Mage: {
set: 'spring2022ForsythiaMageSet',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
},
};
const headStats = {
@@ -2504,12 +2537,15 @@ const shield = {
},
spring2021Rogue: {
set: 'spring2021TwinFlowerRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Warrior: {
set: 'spring2021SunstoneWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Healer: {
set: 'spring2021WillowHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
summer2021Rogue: {
set: 'summer2021ClownfishRogueSet',
@@ -2538,6 +2574,15 @@ const shield = {
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
},
};
const shieldStats = {
@@ -3168,15 +3213,19 @@ const weapon = {
},
spring2021Rogue: {
set: 'spring2021TwinFlowerRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Warrior: {
set: 'spring2021SunstoneWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Mage: {
set: 'spring2021SwanMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2021Healer: {
set: 'spring2021WillowHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
summer2021Rogue: {
set: 'summer2021ClownfishRogueSet',
@@ -3214,6 +3263,18 @@ const weapon = {
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
},
spring2022Mage: {
set: 'spring2022ForsythiaMageSet',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
},
};
const weaponStats = {
@@ -44,30 +44,30 @@ const featuredItems = {
];
},
quests () {
if (moment().isBefore('2022-02-28T20:00-05:00')) {
if (moment().isBefore('2022-03-31T20:00-04:00')) {
return [
{
type: 'bundles',
path: 'bundles.mythicalMarvels',
path: 'bundles.cuddleBuddies',
},
{
type: 'quests',
path: 'quests.onyx',
path: 'quests.egg',
},
{
type: 'quests',
path: 'quests.dolphin',
path: 'quests.ghost_stag',
},
];
}
return [
{
type: 'quests',
path: 'quests.snake',
path: 'quests.ferret',
},
{
type: 'quests',
path: 'quests.turquoise',
path: 'quests.silver',
},
{
type: 'quests',
@@ -75,7 +75,7 @@ const featuredItems = {
},
];
},
seasonal: 'winter2021Warrior',
seasonal: 'spring2021Healer',
timeTravelers: [
// TODO
],
@@ -216,6 +216,7 @@ function _getBasicAchievements (user, language) {
_addSimple(result, user, { path: 'shadyCustomer', language });
_addSimple(result, user, { path: 'shadeOfItAll', language });
_addSimple(result, user, { path: 'zodiacZookeeper', language });
_addSimple(result, user, { path: 'birdsOfAFeather', language });
_addSimpleWithMasterCount(result, user, { path: 'beastMaster', language });
_addSimpleWithMasterCount(result, user, { path: 'mountMaster', language });
@@ -30,20 +30,24 @@ export default {
pinnedSets: SHOP_OPEN
? {
healer: 'winter2022IceCrystalHealerSet',
rogue: 'winter2022FireworksRogueSet',
warrior: 'winter2022StockingWarriorSet',
wizard: 'winter2022PomegranateMageSet',
healer: 'spring2022PeridotHealerSet',
rogue: 'spring2022MagpieRogueSet',
warrior: 'spring2022RainstormWarriorSet',
wizard: 'spring2022ForsythiaMageSet',
}
: {},
availableSpells: SHOP_OPEN && moment().isBetween('2021-12-30T08:00-04:00', CURRENT_EVENT.end)
availableSpells: SHOP_OPEN && moment().isBetween('2022-04-12T08:00-05:00', CURRENT_EVENT.end)
? [
'snowball',
'shinySeed',
]
: [],
availableQuests: [],
availableQuests: SHOP_OPEN && CURRENT_EVENT.season === 'spring'
? [
'egg',
]
: [],
featuredSet: 'winter2021ArcticExplorerHealerSet',
featuredSet: 'spring2021TwinFlowerRogueSet',
};
+1 -1
View File
@@ -246,7 +246,7 @@ api.cancelSubscribe = async function cancelSubscribe (user, headers) {
if (purchases.length === 0) throw new NotAuthorized(this.constants.RESPONSE_INVALID_RECEIPT);
const subscriptionData = purchases[0];
// Check to make sure the sub isn't active anymore.
if (subscriptionData.autoRenews) return;
if (subscriptionData.autoRenewing !== false) return;
dateTerminated = new Date(Number(subscriptionData.expirationDate));
} catch (err) {
+15 -4
View File
@@ -144,10 +144,21 @@ function _setUpNewUser (user) {
user.items.quests.dustbunnies = 1;
user.purchased.background.violet = true;
user.preferences.background = 'violet';
if (moment().isBefore('2022-02-02T20:00-05:00')) {
user.migration = '20220131_habit_birthday';
user.items.gear.owned.armor_special_birthday = true;
user.items.gear.equipped.armor = 'armor_special_birthday';
if (moment().isBefore('2022-03-15T20:00-04:00')) {
user.items.gear.owned.head_special_piDay = true;
user.items.gear.equipped.head = 'head_special_piDay';
user.items.gear.owned.shield_special_piDay = true;
user.items.gear.equipped.shield = 'shield_special_piDay';
user.items.food.Pie_Skeleton = 1;
user.items.food.Pie_Base = 1;
user.items.food.Pie_CottonCandyBlue = 1;
user.items.food.Pie_CottonCandyPink = 1;
user.items.food.Pie_Shade = 1;
user.items.food.Pie_White = 1;
user.items.food.Pie_Golden = 1;
user.items.food.Pie_Zombie = 1;
user.items.food.Pie_Desert = 1;
user.items.food.Pie_Red = 1;
}
user.markModified('items achievements');
@@ -71,6 +71,7 @@ const NOTIFICATION_TYPES = [
'ACHIEVEMENT_SHADY_CUSTOMER',
'ACHIEVEMENT_SHADE_OF_IT_ALL',
'ACHIEVEMENT_ZODIAC_ZOOKEEPER',
'ACHIEVEMENT_BIRDS_OF_A_FEATHER',
'ACHIEVEMENT', // generic achievement notification, details inside `notification.data`
'DROP_CAP_REACHED',
];