Compare commits

..

27 Commits

Author SHA1 Message Date
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
SabreCat a5c141407e 4.222.1 2022-02-17 14:38:13 -06:00
SabreCat 70be356968 chore(content): enable Mythical Marvels for end of February 2022-02-17 14:27:17 -06:00
SabreCat 1fd931d935 4.222.0 2022-02-14 15:31:19 -06:00
SabreCat 77751223d3 fix(valentines): adjust empty event daterange 2022-02-14 15:20:37 -06:00
CuriousMagpie d1ef90db29 Fixed end dates to Feb 18 2022-02-14 15:03:38 -06:00
CuriousMagpie 79cda5d1f6 updates for 2022-02 magic hatching potions & valentine's week 2022-02-14 15:03:32 -06:00
SabreCat be5756469c 4.221.3 2022-02-14 14:48:09 -06:00
SabreCat d9e2069995 fix(packages) new fix attempt from last known good 2022-02-14 14:37:26 -06:00
30 changed files with 848 additions and 59072 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
}
};
+2 -2
View File
@@ -3,7 +3,7 @@ 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;
@@ -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 = {
+51 -20073
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.221.1",
"version": "4.224.1",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.16.12",
+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;
});
});
});
+127 -38692
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -44,7 +44,6 @@
"jquery": "^3.6.0",
"lodash": "^4.17.21",
"moment": "^2.29.1",
"moment-timezone": "^0.5.34",
"nconf": "^0.11.3",
"sass": "^1.34.0",
"sass-loader": "^8.0.2",
@@ -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: 68px;
height: 68px;
}
.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;
@@ -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.",
+12
View File
@@ -617,6 +617,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",
@@ -1303,6 +1305,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",
@@ -2010,6 +2014,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",
@@ -2380,6 +2386,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 +2448,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 +2648,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.",
+215 -215
View File
@@ -1,217 +1,217 @@
{
"annoyingFriends": "Annoying Friends",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"alarmingFriends": "Alarming Friends",
"alarmingFriendsText": "Got spooked <%= count %> times by party members.",
"agriculturalFriends": "Agricultural Friends",
"agriculturalFriendsText": "Got transformed into a flower <%= count %> times by party members.",
"aquaticFriends": "Aquatic Friends",
"aquaticFriendsText": "Got splashed <%= count %> times by party members.",
"valentineCard": "Valentine's Day Card",
"valentineCardExplanation": "For enduring such a saccharine poem, you both receive the \"Adoring Friends\" badge!",
"valentineCardNotes": "Send a Valentine's Day card to a party member.",
"valentine0": "\"Roses are red\n\nMy Dailies are blue\n\nI'm happy that I'm\n\nIn a Party with you!\"",
"valentine1": "\"Roses are red\n\nViolets are nice\n\nLet's get together\n\nAnd fight against Vice!\"",
"valentine2": "\"Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\n'Cause it cost ten Gold.\"",
"valentine3": "\"Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!\"",
"valentineCardAchievementTitle": "Adoring Friends",
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= count %> Valentine's Day cards.",
"polarBear": "Polar Bear",
"turkey": "Turkey",
"gildedTurkey": "Gilded Turkey",
"polarBearPup": "Polar Bear Cub",
"jackolantern": "Jack-O-Lantern",
"ghostJackolantern": "Ghost Jack-O-Lantern",
"glowJackolantern": "Glow-in-the-Dark Jack-O-Lantern",
"royalPurpleJackolantern": "Royal Purple Jack-O-Lantern",
"seasonalShop": "Seasonal Shop",
"seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>",
"seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>",
"seasonalShopClosedText": "The Seasonal Shop is currently closed!! Its only open during Habiticas four Grand Galas.",
"seasonalShopSummerText": "Happy Summer Splash!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopFallText": "Happy Fall Festival!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... <strong>*sigh*</strong>",
"seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!",
"seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.",
"candycaneSet": "Candy Cane (Mage)",
"skiSet": "Ski-sassin (Rogue)",
"snowflakeSet": "Snowflake (Healer)",
"yetiSet": "Yeti Tamer (Warrior)",
"northMageSet": "Mage of the North (Mage)",
"icicleDrakeSet": "Icicle Drake (Rogue)",
"soothingSkaterSet": "Soothing Skater (Healer)",
"gingerbreadSet": "Gingerbread (Warrior)",
"snowDaySet": "Snow Day (Warrior)",
"snowboardingSet": "Snowboarding Sorcerer (Mage)",
"festiveFairySet": "Festive Fairy (Healer)",
"cocoaSet": "Cocoa (Rogue)",
"toAndFromCard": "To: <%= toName %>, From: <%= fromName %>",
"nyeCard": "New Year's Card",
"nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!",
"nyeCardNotes": "Send a New Year's card to a party member.",
"seasonalItems": "Seasonal Items",
"nyeCardAchievementTitle": "Auld Acquaintance",
"nyeCardAchievementText": "Happy New Year! Sent or received <%= count %> New Year's cards.",
"nye0": "Happy New Year! May you slay many a bad Habit.",
"nye1": "Happy New Year! May you reap many Rewards.",
"nye2": "Happy New Year! May you earn many a Perfect Day.",
"nye3": "Happy New Year! May your To Do list stay short and sweet.",
"nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.",
"mightyBunnySet": "Mighty Bunny (Warrior)",
"magicMouseSet": "Magic Mouse (Mage)",
"lovingPupSet": "Loving Pup (Healer)",
"stealthyKittySet": "Stealthy Kitty (Rogue)",
"daringSwashbucklerSet": "Daring Swashbuckler (Warrior)",
"emeraldMermageSet": "Emerald Mermage (Mage)",
"reefSeahealerSet": "Reef Seahealer (Healer)",
"roguishPirateSet": "Roguish Pirate (Rogue)",
"monsterOfScienceSet": "Monster of Science (Warrior)",
"witchyWizardSet": "Witchy Wizard (Mage)",
"mummyMedicSet": "Mummy Medic (Healer)",
"vampireSmiterSet": "Vampire Smiter (Rogue)",
"bewareDogSet": "Beware Dog (Warrior)",
"magicianBunnySet": "Magician's Bunny (Mage)",
"comfortingKittySet": "Comforting Kitty (Healer)",
"sneakySqueakerSet": "Sneaky Squeaker (Rogue)",
"sunfishWarriorSet": "Sunfish (Warrior)",
"shipSoothsayerSet": "Ship Soothsayer (Mage)",
"strappingSailorSet": "Strapping Sailor (Healer)",
"reefRenegadeSet": "Reef Renegade (Rogue)",
"scarecrowWarriorSet": "Scarecrow (Warrior)",
"stitchWitchSet": "Stitch Witch (Mage)",
"potionerSet": "Potioner (Healer)",
"battleRogueSet": "Bat-tle (Rogue)",
"springingBunnySet": "Springing Bunny (Healer)",
"grandMalkinSet": "Grand Malkin (Mage)",
"cleverDogSet": "Clever Dog (Rogue)",
"braveMouseSet": "Brave Mouse (Warrior)",
"summer2016SharkWarriorSet": "Shark (Warrior)",
"summer2016DolphinMageSet": "Dolphin (Mage)",
"summer2016SeahorseHealerSet": "Seahorse (Healer)",
"summer2016EelSet": "Eel (Rogue)",
"fall2016SwampThingSet": "Swamp Thing (Warrior)",
"fall2016WickedSorcererSet": "Wicked Sorcerer (Mage)",
"fall2016GorgonHealerSet": "Gorgon (Healer)",
"fall2016BlackWidowSet": "Black Widow (Rogue)",
"winter2017IceHockeySet": "Ice Hockey (Warrior)",
"winter2017WinterWolfSet": "Winter Wolf (Mage)",
"winter2017SugarPlumSet": "Sugar Plum (Healer)",
"winter2017FrostyRogueSet": "Frosty (Rogue)",
"spring2017FelineWarriorSet": "Feline (Warrior)",
"spring2017CanineConjurorSet": "Canine Conjuror (Mage)",
"spring2017FloralMouseSet": "Floral Mouse (Healer)",
"spring2017SneakyBunnySet": "Sneaky Bunny (Rogue)",
"summer2017SandcastleWarriorSet": "Sandcastle (Warrior)",
"summer2017WhirlpoolMageSet": "Whirlpool (Mage)",
"summer2017SeashellSeahealerSet": "Seashell Seahealer (Healer)",
"summer2017SeaDragonSet": "Sea Dragon (Rogue)",
"fall2017HabitoweenSet": "Habitoween (Warrior)",
"fall2017MasqueradeSet": "Masquerade (Mage)",
"fall2017HauntedHouseSet": "Haunted House (Healer)",
"fall2017TrickOrTreatSet": "Trick or Treat (Rogue)",
"winter2018ConfettiSet": "Confetti (Mage)",
"winter2018GiftWrappedSet": "Gift-Wrapped (Warrior)",
"winter2018MistletoeSet": "Mistletoe (Healer)",
"winter2018ReindeerSet": "Reindeer (Rogue)",
"spring2018SunriseWarriorSet": "Sunrise (Warrior)",
"spring2018TulipMageSet": "Tulip (Mage)",
"spring2018GarnetHealerSet": "Garnet (Healer)",
"spring2018DucklingRogueSet": "Duckling (Rogue)",
"summer2018BettaFishWarriorSet": "Betta Fish (Warrior)",
"summer2018LionfishMageSet": "Lionfish (Mage)",
"summer2018MerfolkMonarchSet": "Merfolk Monarch (Healer)",
"summer2018FisherRogueSet": "Fisher-Rogue (Rogue)",
"fall2018MinotaurWarriorSet": "Minotaur (Warrior)",
"fall2018CandymancerMageSet": "Candymancer (Mage)",
"fall2018CarnivorousPlantSet": "Carnivorous Plant (Healer)",
"fall2018AlterEgoSet": "Alter Ego (Rogue)",
"winter2019BlizzardSet": "Blizzard (Warrior)",
"winter2019PyrotechnicSet": "Pyrotechnic (Mage)",
"winter2019WinterStarSet": "Winter Star (Healer)",
"winter2019PoinsettiaSet": "Poinsettia (Rogue)",
"spring2019OrchidWarriorSet": "Orchid (Warrior)",
"spring2019AmberMageSet": "Amber (Mage)",
"spring2019RobinHealerSet": "Robin (Healer)",
"spring2019CloudRogueSet": "Cloud (Rogue)",
"summer2019SeaTurtleWarriorSet": "Sea Turtle (Warrior)",
"summer2019WaterLilyMageSet": "Water Lily (Mage)",
"summer2019ConchHealerSet": "Conch (Healer)",
"summer2019HammerheadRogueSet": "Hammerhead (Rogue)",
"fall2019OperaticSpecterSet": "Operatic Specter (Rogue)",
"fall2019CyclopsSet": "Cyclops (Mage)",
"fall2019LichSet": "Lich (Healer)",
"fall2019RavenSet": "Raven (Warrior)",
"winter2020EvergreenSet": "Evergreen (Warrior)",
"winter2020CarolOfTheMageSet": "Carol of the Mage (Mage)",
"winter2020WinterSpiceSet": "Winter Spice (Healer)",
"winter2020LanternSet": "Lantern (Rogue)",
"spring2020BeetleWarriorSet": "Rhinoceros Beetle (Warrior)",
"spring2020PuddleMageSet": "Puddle (Mage)",
"spring2020IrisHealerSet": "Iris (Healer)",
"spring2020LapisLazuliRogueSet": "Lapis Lazuli (Rogue)",
"summer2020RainbowTroutWarriorSet": "Rainbow Trout (Warrior)",
"summer2020OarfishMageSet": "Oarfish (Mage)",
"summer2020SeaGlassHealerSet": "Sea Glass (Healer)",
"summer2020CrocodileRogueSet": "Crocodile (Rogue)",
"fall2020WraithWarriorSet": "Wraith (Warrior)",
"fall2020DeathsHeadMothHealerSet": "Death's Head Moth (Healer)",
"fall2020ThirdEyeMageSet": "Third Eye (Mage)",
"fall2020TwoHeadedRogueSet": "Two-Headed (Rogue)",
"winter2021IceFishingWarriorSet": "Ice Fisher (Warrior)",
"winter2021WinterMoonMageSet": "Winter Moon (Mage)",
"winter2021ArcticExplorerHealerSet": "Arctic Explorer (Healer)",
"winter2021HollyIvyRogueSet": "Holly and Ivy (Rogue)",
"spring2021SunstoneWarriorSet": "Sunstone (Warrior)",
"spring2021SwanMageSet": "Swan (Mage)",
"spring2021WillowHealerSet": "Willow (Healer)",
"spring2021TwinFlowerRogueSet": "Twin Flower (Rogue)",
"summer2021FlyingFishWarriorSet": "Flying Fish (Warrior)",
"summer2021NautilusMageSet": "Nautilus (Mage)",
"summer2021ParrotHealerSet": "Parrot (Healer)",
"summer2021ClownfishRogueSet": "Clownfish (Rogue)",
"fall2021OozeRogueSet": "Ooze (Rogue)",
"fall2021HeadlessWarriorSet": "Headless (Warrior)",
"fall2021BrainEaterMageSet": "Brain Eater (Mage)",
"fall2021FlameSummonerHealerSet": "Flame Summoner (Healer)",
"winter2022FireworksRogueSet": "Fireworks (Rogue)",
"winter2022StockingWarriorSet": "Stocking (Warrior)",
"winter2022PomegranateMageSet": "Pomegranate (Mage)",
"winter2022IceCrystalHealerSet": "Ice Crystal (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",
"dateEndApril": "April 19",
"dateEndMay": "May 31",
"dateEndJune": "June 14",
"augustYYYY": "August <%= year %>",
"septemberYYYY": "September <%= year %>",
"decemberYYYY": "December <%= year %>",
"marchYYYY": "March <%= year %>",
"mayYYYY": "May <%= year %>",
"juneYYYY": "June <%= year %>",
"novemberYYYY": "November <%= year %>",
"januaryYYYY": "January <%= year %>",
"dateEndJuly": "July 31",
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",
"dateEndOctober": "October 31",
"dateEndNovember": "November 30",
"dateEndJanuary": "January 31",
"dateEndFebruary": "February 29",
"winterPromoGiftHeader": "GIFT A SUBSCRIPTION, GET ONE FREE!",
"winterPromoGiftDetails1": "Until January 6th only, when you gift somebody a subscription, you get the same subscription for yourself for free!",
"winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3",
"discountBundle": "bundle",
"g1g1Announcement": "<strong>Gift a subscription and get a subscription free</strong> event going on now!",
"g1g1Details": "Gift a subscription to a friend, and you'll receive the same subscription for free!",
"g1g1": "Gift One, Get One",
"g1g1Event": "Gift One, Get One event going on now!",
"g1g1Returning": "In honor of the season, were bringing back a very special promotion. Now when you gift a subscription, youll receive the same in return!",
"howItWorks": "How it Works",
"g1g1HowItWorks": "Type in the username of the account youd like to gift to. From there, pick the sub length youd like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
"limitations": "Limitations",
"g1g1Limitations": "This is a limited time event that starts on December 16th at 8:00 AM ET (13:00 UTC) and will end January 6th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
"noLongerAvailable": "This item is no longer available."
"annoyingFriends": "Annoying Friends",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"alarmingFriends": "Alarming Friends",
"alarmingFriendsText": "Got spooked <%= count %> times by party members.",
"agriculturalFriends": "Agricultural Friends",
"agriculturalFriendsText": "Got transformed into a flower <%= count %> times by party members.",
"aquaticFriends": "Aquatic Friends",
"aquaticFriendsText": "Got splashed <%= count %> times by party members.",
"valentineCard": "Valentine's Day Card",
"valentineCardExplanation": "For enduring such a saccharine poem, you both receive the \"Adoring Friends\" badge!",
"valentineCardNotes": "Send a Valentine's Day card to a party member.",
"valentine0": "\"Roses are red\n\nMy Dailies are blue\n\nI'm happy that I'm\n\nIn a Party with you!\"",
"valentine1": "\"Roses are red\n\nViolets are nice\n\nLet's get together\n\nAnd fight against Vice!\"",
"valentine2": "\"Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\n'Cause it cost ten Gold.\"",
"valentine3": "\"Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!\"",
"valentineCardAchievementTitle": "Adoring Friends",
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= count %> Valentine's Day cards.",
"polarBear": "Polar Bear",
"turkey": "Turkey",
"gildedTurkey": "Gilded Turkey",
"polarBearPup": "Polar Bear Cub",
"jackolantern": "Jack-O-Lantern",
"ghostJackolantern": "Ghost Jack-O-Lantern",
"glowJackolantern": "Glow-in-the-Dark Jack-O-Lantern",
"royalPurpleJackolantern": "Royal Purple Jack-O-Lantern",
"seasonalShop": "Seasonal Shop",
"seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>",
"seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>",
"seasonalShopClosedText": "The Seasonal Shop is currently closed!! Its only open during Habiticas four Grand Galas.",
"seasonalShopSummerText": "Happy Summer Splash!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopFallText": "Happy Fall Festival!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? Be sure to get them before the Gala ends!",
"seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... <strong>*sigh*</strong>",
"seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!",
"seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.",
"candycaneSet": "Candy Cane (Mage)",
"skiSet": "Ski-sassin (Rogue)",
"snowflakeSet": "Snowflake (Healer)",
"yetiSet": "Yeti Tamer (Warrior)",
"northMageSet": "Mage of the North (Mage)",
"icicleDrakeSet": "Icicle Drake (Rogue)",
"soothingSkaterSet": "Soothing Skater (Healer)",
"gingerbreadSet": "Gingerbread (Warrior)",
"snowDaySet": "Snow Day (Warrior)",
"snowboardingSet": "Snowboarding Sorcerer (Mage)",
"festiveFairySet": "Festive Fairy (Healer)",
"cocoaSet": "Cocoa (Rogue)",
"toAndFromCard": "To: <%= toName %>, From: <%= fromName %>",
"nyeCard": "New Year's Card",
"nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!",
"nyeCardNotes": "Send a New Year's card to a party member.",
"seasonalItems": "Seasonal Items",
"nyeCardAchievementTitle": "Auld Acquaintance",
"nyeCardAchievementText": "Happy New Year! Sent or received <%= count %> New Year's cards.",
"nye0": "Happy New Year! May you slay many a bad Habit.",
"nye1": "Happy New Year! May you reap many Rewards.",
"nye2": "Happy New Year! May you earn many a Perfect Day.",
"nye3": "Happy New Year! May your To Do list stay short and sweet.",
"nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.",
"mightyBunnySet": "Mighty Bunny (Warrior)",
"magicMouseSet": "Magic Mouse (Mage)",
"lovingPupSet": "Loving Pup (Healer)",
"stealthyKittySet": "Stealthy Kitty (Rogue)",
"daringSwashbucklerSet": "Daring Swashbuckler (Warrior)",
"emeraldMermageSet": "Emerald Mermage (Mage)",
"reefSeahealerSet": "Reef Seahealer (Healer)",
"roguishPirateSet": "Roguish Pirate (Rogue)",
"monsterOfScienceSet": "Monster of Science (Warrior)",
"witchyWizardSet": "Witchy Wizard (Mage)",
"mummyMedicSet": "Mummy Medic (Healer)",
"vampireSmiterSet": "Vampire Smiter (Rogue)",
"bewareDogSet": "Beware Dog (Warrior)",
"magicianBunnySet": "Magician's Bunny (Mage)",
"comfortingKittySet": "Comforting Kitty (Healer)",
"sneakySqueakerSet": "Sneaky Squeaker (Rogue)",
"sunfishWarriorSet": "Sunfish (Warrior)",
"shipSoothsayerSet": "Ship Soothsayer (Mage)",
"strappingSailorSet": "Strapping Sailor (Healer)",
"reefRenegadeSet": "Reef Renegade (Rogue)",
"scarecrowWarriorSet": "Scarecrow (Warrior)",
"stitchWitchSet": "Stitch Witch (Mage)",
"potionerSet": "Potioner (Healer)",
"battleRogueSet": "Bat-tle (Rogue)",
"springingBunnySet": "Springing Bunny (Healer)",
"grandMalkinSet": "Grand Malkin (Mage)",
"cleverDogSet": "Clever Dog (Rogue)",
"braveMouseSet": "Brave Mouse (Warrior)",
"summer2016SharkWarriorSet": "Shark (Warrior)",
"summer2016DolphinMageSet": "Dolphin (Mage)",
"summer2016SeahorseHealerSet": "Seahorse (Healer)",
"summer2016EelSet": "Eel (Rogue)",
"fall2016SwampThingSet": "Swamp Thing (Warrior)",
"fall2016WickedSorcererSet": "Wicked Sorcerer (Mage)",
"fall2016GorgonHealerSet": "Gorgon (Healer)",
"fall2016BlackWidowSet": "Black Widow (Rogue)",
"winter2017IceHockeySet": "Ice Hockey (Warrior)",
"winter2017WinterWolfSet": "Winter Wolf (Mage)",
"winter2017SugarPlumSet": "Sugar Plum (Healer)",
"winter2017FrostyRogueSet": "Frosty (Rogue)",
"spring2017FelineWarriorSet": "Feline (Warrior)",
"spring2017CanineConjurorSet": "Canine Conjuror (Mage)",
"spring2017FloralMouseSet": "Floral Mouse (Healer)",
"spring2017SneakyBunnySet": "Sneaky Bunny (Rogue)",
"summer2017SandcastleWarriorSet": "Sandcastle (Warrior)",
"summer2017WhirlpoolMageSet": "Whirlpool (Mage)",
"summer2017SeashellSeahealerSet": "Seashell Seahealer (Healer)",
"summer2017SeaDragonSet": "Sea Dragon (Rogue)",
"fall2017HabitoweenSet": "Habitoween (Warrior)",
"fall2017MasqueradeSet": "Masquerade (Mage)",
"fall2017HauntedHouseSet": "Haunted House (Healer)",
"fall2017TrickOrTreatSet": "Trick or Treat (Rogue)",
"winter2018ConfettiSet": "Confetti (Mage)",
"winter2018GiftWrappedSet": "Gift-Wrapped (Warrior)",
"winter2018MistletoeSet": "Mistletoe (Healer)",
"winter2018ReindeerSet": "Reindeer (Rogue)",
"spring2018SunriseWarriorSet": "Sunrise (Warrior)",
"spring2018TulipMageSet": "Tulip (Mage)",
"spring2018GarnetHealerSet": "Garnet (Healer)",
"spring2018DucklingRogueSet": "Duckling (Rogue)",
"summer2018BettaFishWarriorSet": "Betta Fish (Warrior)",
"summer2018LionfishMageSet": "Lionfish (Mage)",
"summer2018MerfolkMonarchSet": "Merfolk Monarch (Healer)",
"summer2018FisherRogueSet": "Fisher-Rogue (Rogue)",
"fall2018MinotaurWarriorSet": "Minotaur (Warrior)",
"fall2018CandymancerMageSet": "Candymancer (Mage)",
"fall2018CarnivorousPlantSet": "Carnivorous Plant (Healer)",
"fall2018AlterEgoSet": "Alter Ego (Rogue)",
"winter2019BlizzardSet": "Blizzard (Warrior)",
"winter2019PyrotechnicSet": "Pyrotechnic (Mage)",
"winter2019WinterStarSet": "Winter Star (Healer)",
"winter2019PoinsettiaSet": "Poinsettia (Rogue)",
"spring2019OrchidWarriorSet": "Orchid (Warrior)",
"spring2019AmberMageSet": "Amber (Mage)",
"spring2019RobinHealerSet": "Robin (Healer)",
"spring2019CloudRogueSet": "Cloud (Rogue)",
"summer2019SeaTurtleWarriorSet": "Sea Turtle (Warrior)",
"summer2019WaterLilyMageSet": "Water Lily (Mage)",
"summer2019ConchHealerSet": "Conch (Healer)",
"summer2019HammerheadRogueSet": "Hammerhead (Rogue)",
"fall2019OperaticSpecterSet": "Operatic Specter (Rogue)",
"fall2019CyclopsSet": "Cyclops (Mage)",
"fall2019LichSet": "Lich (Healer)",
"fall2019RavenSet": "Raven (Warrior)",
"winter2020EvergreenSet": "Evergreen (Warrior)",
"winter2020CarolOfTheMageSet": "Carol of the Mage (Mage)",
"winter2020WinterSpiceSet": "Winter Spice (Healer)",
"winter2020LanternSet": "Lantern (Rogue)",
"spring2020BeetleWarriorSet": "Rhinoceros Beetle (Warrior)",
"spring2020PuddleMageSet": "Puddle (Mage)",
"spring2020IrisHealerSet": "Iris (Healer)",
"spring2020LapisLazuliRogueSet": "Lapis Lazuli (Rogue)",
"summer2020RainbowTroutWarriorSet": "Rainbow Trout (Warrior)",
"summer2020OarfishMageSet": "Oarfish (Mage)",
"summer2020SeaGlassHealerSet": "Sea Glass (Healer)",
"summer2020CrocodileRogueSet": "Crocodile (Rogue)",
"fall2020WraithWarriorSet": "Wraith (Warrior)",
"fall2020DeathsHeadMothHealerSet": "Death's Head Moth (Healer)",
"fall2020ThirdEyeMageSet": "Third Eye (Mage)",
"fall2020TwoHeadedRogueSet": "Two-Headed (Rogue)",
"winter2021IceFishingWarriorSet": "Ice Fisher (Warrior)",
"winter2021WinterMoonMageSet": "Winter Moon (Mage)",
"winter2021ArcticExplorerHealerSet": "Arctic Explorer (Healer)",
"winter2021HollyIvyRogueSet": "Holly and Ivy (Rogue)",
"spring2021SunstoneWarriorSet": "Sunstone (Warrior)",
"spring2021SwanMageSet": "Swan (Mage)",
"spring2021WillowHealerSet": "Willow (Healer)",
"spring2021TwinFlowerRogueSet": "Twin Flower (Rogue)",
"summer2021FlyingFishWarriorSet": "Flying Fish (Warrior)",
"summer2021NautilusMageSet": "Nautilus (Mage)",
"summer2021ParrotHealerSet": "Parrot (Healer)",
"summer2021ClownfishRogueSet": "Clownfish (Rogue)",
"fall2021OozeRogueSet": "Ooze (Rogue)",
"fall2021HeadlessWarriorSet": "Headless (Warrior)",
"fall2021BrainEaterMageSet": "Brain Eater (Mage)",
"fall2021FlameSummonerHealerSet": "Flame Summoner (Healer)",
"winter2022FireworksRogueSet": "Fireworks (Rogue)",
"winter2022StockingWarriorSet": "Stocking (Warrior)",
"winter2022PomegranateMageSet": "Pomegranate (Mage)",
"winter2022IceCrystalHealerSet": "Ice Crystal (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",
"dateEndApril": "April 19",
"dateEndMay": "May 31",
"dateEndJune": "June 14",
"augustYYYY": "August <%= year %>",
"septemberYYYY": "September <%= year %>",
"decemberYYYY": "December <%= year %>",
"marchYYYY": "March <%= year %>",
"mayYYYY": "May <%= year %>",
"juneYYYY": "June <%= year %>",
"novemberYYYY": "November <%= year %>",
"januaryYYYY": "January <%= year %>",
"dateEndJuly": "July 31",
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",
"dateEndOctober": "October 31",
"dateEndNovember": "November 30",
"dateEndJanuary": "January 31",
"dateEndFebruary": "February 28",
"winterPromoGiftHeader": "GIFT A SUBSCRIPTION, GET ONE FREE!",
"winterPromoGiftDetails1": "Until January 6th only, when you gift somebody a subscription, you get the same subscription for yourself for free!",
"winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3",
"discountBundle": "bundle",
"g1g1Announcement": "<strong>Gift a subscription and get a subscription free</strong> event going on now!",
"g1g1Details": "Gift a subscription to a friend, and you'll receive the same subscription for free!",
"g1g1": "Gift One, Get One",
"g1g1Event": "Gift One, Get One event going on now!",
"g1g1Returning": "In honor of the season, were bringing back a very special promotion. Now when you gift a subscription, youll receive the same in return!",
"howItWorks": "How it Works",
"g1g1HowItWorks": "Type in the username of the account youd like to gift to. From there, pick the sub length youd like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
"limitations": "Limitations",
"g1g1Limitations": "This is a limited time event that starts on December 16th at 8:00 AM ET (13:00 UTC) and will end January 6th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
"noLongerAvailable": "This item is no longer available."
}
@@ -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
@@ -190,7 +190,7 @@ const bundles = {
'gryphon',
],
canBuy () {
return moment().isBefore('2021-02-28T08:00-05:00');
return moment().isBefore('2022-02-28T20:00-05: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,17 @@ const gemsPromo = {
export const EVENTS = {
noCurrentEvent: {
start: '2022-01-31T20:00-05:00',
end: '2022-02-28T20:00-05:00',
start: '2022-02-18T20:00-05:00',
end: '2022-03-31T20:00-05:00',
season: 'normal',
npcImageSuffix: '',
},
valentines2022: {
start: '2022-02-14T08:00-05:00',
end: '2022-02-18T20:00-05:00',
season: 'valentines',
npcImageSuffix: 'valentines',
},
winter2022: {
start: '2021-12-21T08:00-05:00',
end: '2022-01-31T20:00-05:00',
@@ -93,12 +99,6 @@ export const EVENTS = {
end: '2021-04-02T08:00-05:00',
aprilFools: 'invert',
},
valentines2021: {
start: '2021-02-07T08:00-05:00',
end: '2021-02-16T08:00-05:00',
season: 'valentines',
npcImageSuffix: 'valentines',
},
winter2021: {
start: '2020-12-17T08:00-05:00',
end: '2021-01-31T20:00-05:00',
@@ -106,13 +106,14 @@ export const EVENTS = {
npcImageSuffix: 'winter',
gear: true,
},
winter2021Promo: { // used in tests, not an actual past event
winter2021Promo: {
// used in tests, not an actual past event
start: '2020-12-01T08:00-05:00',
end: '2020-12-17T20:00-05:00',
season: 'winter',
promo: 'g1g1',
},
fall2020: {
fall2020: {
start: '2020-09-22T08:00-04:00',
end: '2020-10-31T20:00-04:00',
gear: true,
@@ -123,30 +124,30 @@ export const EVENTS = {
summer2020: { start: '2020-06-18', end: '2020-08-02', gear: true },
spring2020: { start: '2020-03-17', end: '2020-05-02', gear: true },
winter2020: { start: '2019-12-19', end: '2020-02-02', gear: true },
fall2019: { start: '2019-09-24', end: '2019-11-02', gear: true },
fall2019: { start: '2019-09-24', end: '2019-11-02', gear: true },
summer2019: { start: '2019-06-18', end: '2019-08-02', gear: true },
spring2019: { start: '2019-03-19', end: '2019-05-02', gear: true },
winter2019: { start: '2018-12-19', end: '2019-02-02', gear: true },
fall2018: { start: '2018-09-20', end: '2018-11-02', gear: true },
fall2018: { start: '2018-09-20', end: '2018-11-02', gear: true },
summer2018: { start: '2018-06-19', end: '2018-08-02', gear: true },
spring2018: { start: '2018-03-20', end: '2018-05-02', gear: true },
winter2018: { start: '2017-12-19', end: '2018-02-02', gear: true },
fall2017: { start: '2017-09-21', end: '2017-11-02', gear: true },
fall2017: { start: '2017-09-21', end: '2017-11-02', gear: true },
summer2017: { start: '2017-06-20', end: '2017-08-02', gear: true },
spring2017: { start: '2017-03-21', end: '2017-05-02', gear: true },
winter2017: { start: '2016-12-16', end: '2017-02-02', gear: true },
fall2016: { start: '2016-09-20', end: '2016-11-02', gear: true },
fall2016: { start: '2016-09-20', end: '2016-11-02', gear: true },
summer2016: { start: '2016-06-21', end: '2016-08-02', gear: true },
spring2016: { start: '2016-03-18', end: '2016-05-02', gear: true },
winter2016: { start: '2015-12-18', end: '2016-02-02', gear: true },
gaymerx: { start: '2016-09-29', end: '2016-10-03' },
fall2015: { start: '2015-09-21', end: '2015-11-01', gear: true },
gaymerx: { start: '2016-09-29', end: '2016-10-03' },
fall2015: { start: '2015-09-21', end: '2015-11-01', gear: true },
summer2015: { start: '2015-06-20', end: '2015-08-02', gear: true },
spring2015: { start: '2015-03-20', end: '2015-05-02', gear: true },
winter2015: { start: '2014-12-21', end: '2015-02-02', gear: true },
fall: { start: '2014-09-21', end: '2014-11-01', gear: true },
summer: { start: '2014-06-20', end: '2014-08-01', gear: true },
spring: { start: '2014-03-21', end: '2014-05-01', gear: true },
birthday: { start: '2017-01-31', end: '2017-02-02' },
winter: { start: '2013-12-31', end: '2014-02-01' },
fall: { start: '2014-09-21', end: '2014-11-01', gear: true },
summer: { start: '2014-06-20', end: '2014-08-01', gear: true },
spring: { start: '2014-03-21', end: '2014-05-01', gear: true },
birthday: { start: '2017-01-31', end: '2017-02-02' },
winter: { start: '2013-12-31', end: '2014-02-01' },
};
@@ -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: { },
};
@@ -3,13 +3,10 @@ import defaults from 'lodash/defaults';
import each from 'lodash/each';
import moment from 'moment';
import t from './translation';
import {
EVENTS,
} from './constants';
import { EVENTS } from './constants';
function hasQuestAchievementFunction (key) {
return user => user.achievements.quests
&& user.achievements.quests[key] > 0;
return user => user.achievements.quests && user.achievements.quests[key] > 0;
}
const drops = {
@@ -66,7 +63,7 @@ const premium = {
text: t('hatchingPotionCupid'),
limited: true,
canBuy () {
return moment().isBefore('2021-02-28T20:00-05:00');
return moment().isBefore('2022-02-28T20:00-05:00');
},
},
Shimmer: {
@@ -280,7 +277,7 @@ const premium = {
text: t('hatchingPotionRoseQuartz'),
limited: true,
canBuy () {
return moment().isBefore('2021-02-28T20:00-05:00');
return moment().isBefore('2022-02-28T20:00-05:00');
},
},
Celestial: {
@@ -588,9 +585,12 @@ each(wacky, (pot, key) => {
notes: t('hatchingPotionNotes', {
potText: pot.text,
}),
_addlNotes: pot._season && pot._season !== '_PENDING_' ? t('eventAvailability', {
date: t(`dateEnd${pot._season}`),
}) : null,
_addlNotes:
pot._season && pot._season !== '_PENDING_'
? t('eventAvailability', {
date: t(`dateEnd${pot._season}`),
})
: null,
premium: false,
limited: true,
wacky: true,
@@ -603,8 +603,5 @@ each(wacky, (pot, key) => {
const all = assign({}, drops, premium, wacky);
export {
drops,
premium,
wacky,
all,
drops, premium, wacky, all,
};
+35 -15
View File
@@ -20,11 +20,7 @@ import * as eggs from './eggs';
import * as hatchingPotions from './hatching-potions';
import * as stable from './stable';
import gear from './gear';
import {
quests,
questsByLevel,
userCanOwnQuestCategories,
} from './quests';
import { quests, questsByLevel, userCanOwnQuestCategories } from './quests';
import appearances from './appearance';
import { backgroundsTree, backgroundsFlat } from './appearance/backgrounds';
@@ -57,7 +53,23 @@ api.spells = spells;
api.subscriptionBlocks = subscriptionBlocks;
api.gems = gemsBlock;
api.audioThemes = ['danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme', 'rosstavoTheme', 'dewinTheme', 'airuTheme', 'beatscribeNesTheme', 'arashiTheme', 'maflTheme', 'pizildenTheme', 'farvoidTheme', 'spacePenguinTheme', 'lunasolTheme', 'triumphTheme'];
api.audioThemes = [
'danielTheBard',
'gokulTheme',
'luneFoxTheme',
'wattsTheme',
'rosstavoTheme',
'dewinTheme',
'airuTheme',
'beatscribeNesTheme',
'arashiTheme',
'maflTheme',
'pizildenTheme',
'farvoidTheme',
'spacePenguinTheme',
'lunasolTheme',
'triumphTheme',
];
api.mystery = timeTravelers.mystery;
api.timeTravelerStore = timeTravelers.timeTravelerStore;
@@ -121,7 +133,7 @@ api.cardTypes = {
valentine: {
key: 'valentine',
messageOptions: 4,
yearRound: moment().isBefore('2021-02-28T20:00-05:00'),
yearRound: moment().isBefore('2022-02-18T20:00-05:00'),
},
birthday: {
key: 'birthday',
@@ -632,7 +644,8 @@ api.userDefaults = {
t('defaultTag4'), // School
t('defaultTag6'), // Chores
],
}, {
},
{
type: 'habit',
text: t('defaultHabit2Text'),
value: 0,
@@ -642,7 +655,8 @@ api.userDefaults = {
tags: [
t('defaultTag3'), // Health + Wellness
],
}, {
},
{
type: 'habit',
text: t('defaultHabit3Text'),
value: 0,
@@ -675,17 +689,23 @@ api.userDefaults = {
tags: [
{
name: t('defaultTag1'),
}, {
},
{
name: t('defaultTag2'),
}, {
},
{
name: t('defaultTag3'),
}, {
},
{
name: t('defaultTag4'),
}, {
},
{
name: t('defaultTag5'),
}, {
},
{
name: t('defaultTag6'),
}, {
},
{
name: t('defaultTag7'),
},
],
@@ -4,7 +4,7 @@ import moment from 'moment';
// path: 'premiumHatchingPotions.Rainbow',
const featuredItems = {
market () {
if (moment().isBefore('2022-01-31T20:00-05:00')) {
if (moment().isBefore('2022-02-28T20:00-05:00')) {
return [
{
type: 'armoire',
@@ -12,15 +12,15 @@ const featuredItems = {
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.StainedGlass',
path: 'premiumHatchingPotions.Cupid',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Peppermint',
path: 'premiumHatchingPotions.RoseQuartz',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Holly',
type: 'hatchingPotions',
path: 'hatchingPotions.CottonCandyPink',
},
];
}
@@ -44,46 +44,30 @@ const featuredItems = {
];
},
quests () {
if (moment().isBefore('2022-01-11T08:00-05:00')) {
return [
{
type: 'quests',
path: 'quests.evilsanta',
},
{
type: 'quests',
path: 'quests.evilsanta2',
},
{
type: 'quests',
path: 'quests.penguin',
},
];
}
if (moment().isBefore('2022-01-31T20:00-05:00')) {
if (moment().isBefore('2022-02-28T20:00-05:00')) {
return [
{
type: 'bundles',
path: 'bundles.winterQuests',
path: 'bundles.mythicalMarvels',
},
{
type: 'quests',
path: 'quests.silver',
path: 'quests.onyx',
},
{
type: 'quests',
path: 'quests.sheep',
path: 'quests.dolphin',
},
];
}
return [
{
type: 'quests',
path: 'quests.ferret',
path: 'quests.snake',
},
{
type: 'quests',
path: 'quests.bronze',
path: 'quests.turquoise',
},
{
type: 'quests',
@@ -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 });
@@ -22,7 +22,6 @@ import {
} from '../../libs/email';
import * as inboxLib from '../../libs/inbox';
import * as userLib from '../../libs/user';
import logger from '../../libs/logger';
const TECH_ASSISTANCE_EMAIL = nconf.get('EMAILS_TECH_ASSISTANCE_EMAIL');
const DELETE_CONFIRMATION = 'DELETE';
@@ -1014,7 +1013,6 @@ api.purchase = {
if (req.body.quantity) quantity = req.body.quantity;
req.quantity = quantity;
logger.info('AAAAHHHHHH');
const purchaseRes = await common.ops.buy(user, req, res.analytics);
await user.save();
res.respond(200, ...purchaseRes);
+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',
];