Merge branch 'release' into develop

This commit is contained in:
Sabe Jones 2021-03-30 15:20:28 -05:00
commit 92be66d9ac
14 changed files with 115 additions and 83 deletions

2
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.187.0",
"version": "4.188.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.187.0",
"version": "4.188.0",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.12.10",

View file

@ -1,48 +1,48 @@
.achievement-alien {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1671px -1480px;
background-position: -1656px -1549px;
width: 24px;
height: 26px;
}
.achievement-alien2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -529px -1549px;
background-position: -578px -1549px;
width: 48px;
height: 52px;
}
.achievement-allThatGlitters2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -873px -1480px;
background-position: -934px -1480px;
width: 64px;
height: 56px;
}
.achievement-allYourBase2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -938px -1480px;
background-position: -999px -1480px;
width: 64px;
height: 56px;
}
.achievement-alpha2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -578px -1549px;
background-position: -627px -1549px;
width: 48px;
height: 52px;
}
.achievement-aridAuthority2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1003px -1480px;
background-position: -1064px -1480px;
width: 64px;
height: 56px;
}
.achievement-armor2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -627px -1549px;
background-position: -676px -1549px;
width: 48px;
height: 52px;
}
.achievement-backToBasics2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1328px -1480px;
background-position: -1389px -1480px;
width: 48px;
height: 56px;
}
@ -54,31 +54,31 @@
}
.achievement-bewilder2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -676px -1549px;
background-position: -725px -1549px;
width: 48px;
height: 52px;
}
.achievement-birthday2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -725px -1549px;
background-position: -774px -1549px;
width: 48px;
height: 52px;
}
.achievement-boneCollector2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1377px -1480px;
background-position: -1438px -1480px;
width: 48px;
height: 56px;
}
.achievement-boot2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -774px -1549px;
background-position: -823px -1549px;
width: 48px;
height: 52px;
}
.achievement-bow2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -823px -1549px;
background-position: -872px -1549px;
width: 48px;
height: 52px;
}
@ -90,85 +90,85 @@
}
.achievement-burnout2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -872px -1549px;
background-position: -921px -1549px;
width: 48px;
height: 52px;
}
.achievement-cactus2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -921px -1549px;
background-position: -970px -1549px;
width: 48px;
height: 52px;
}
.achievement-cake2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -970px -1549px;
background-position: -1019px -1549px;
width: 48px;
height: 52px;
}
.achievement-cave2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1019px -1549px;
background-position: -1068px -1549px;
width: 48px;
height: 52px;
}
.achievement-challenge2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1068px -1549px;
background-position: -1117px -1549px;
width: 48px;
height: 52px;
}
.achievement-comment2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1117px -1549px;
background-position: -1166px -1549px;
width: 48px;
height: 52px;
}
.achievement-completedTask2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1426px -1480px;
background-position: -1487px -1480px;
width: 48px;
height: 56px;
}
.achievement-congrats2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1166px -1549px;
background-position: -1215px -1549px;
width: 48px;
height: 52px;
}
.achievement-costumeContest2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1215px -1549px;
background-position: -1264px -1549px;
width: 48px;
height: 52px;
}
.achievement-createdTask2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1475px -1480px;
background-position: -1536px -1480px;
width: 48px;
height: 56px;
}
.achievement-dilatory2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1264px -1549px;
background-position: -1313px -1549px;
width: 48px;
height: 52px;
}
.achievement-dustDevil2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1524px -1480px;
background-position: -1585px -1480px;
width: 48px;
height: 56px;
}
.achievement-dysheartener2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1313px -1549px;
background-position: -1362px -1549px;
width: 48px;
height: 52px;
}
.achievement-fedPet2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1573px -1480px;
background-position: -1634px -1480px;
width: 48px;
height: 56px;
}
@ -180,61 +180,61 @@
}
.achievement-friends2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1362px -1549px;
background-position: -1411px -1549px;
width: 48px;
height: 52px;
}
.achievement-getwell2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1411px -1549px;
background-position: -1460px -1549px;
width: 48px;
height: 52px;
}
.achievement-goodAsGold2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1622px -1480px;
background-position: -284px -1549px;
width: 48px;
height: 56px;
}
.achievement-goodluck2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1460px -1549px;
background-position: -1509px -1549px;
width: 48px;
height: 52px;
}
.achievement-greeting2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1509px -1549px;
background-position: -1558px -1549px;
width: 48px;
height: 52px;
}
.achievement-guild2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1558px -1549px;
background-position: -1607px -1549px;
width: 48px;
height: 52px;
}
.achievement-habitBirthday2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1607px -1549px;
background-position: 0px -1628px;
width: 48px;
height: 52px;
}
.achievement-habiticaDay2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: 0px -1628px;
background-position: -49px -1628px;
width: 48px;
height: 52px;
}
.achievement-hatchedPet2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -284px -1549px;
background-position: -333px -1549px;
width: 48px;
height: 56px;
}
.achievement-heart2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -49px -1628px;
background-position: -98px -1628px;
width: 48px;
height: 52px;
}
@ -246,13 +246,13 @@
}
.achievement-karaoke-2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -98px -1628px;
background-position: -147px -1628px;
width: 48px;
height: 52px;
}
.achievement-karaoke {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1671px -1507px;
background-position: -1568px -1628px;
width: 24px;
height: 26px;
}
@ -270,7 +270,7 @@
}
.achievement-lostMasterclasser2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -147px -1628px;
background-position: -196px -1628px;
width: 48px;
height: 52px;
}
@ -282,73 +282,73 @@
}
.achievement-monsterMagus2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -333px -1549px;
background-position: -382px -1549px;
width: 48px;
height: 56px;
}
.achievement-ninja2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -196px -1628px;
background-position: -245px -1628px;
width: 48px;
height: 52px;
}
.achievement-npc2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -245px -1628px;
background-position: -294px -1628px;
width: 48px;
height: 52px;
}
.achievement-nye2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -294px -1628px;
background-position: -343px -1628px;
width: 48px;
height: 52px;
}
.achievement-partyOn2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -343px -1628px;
background-position: -392px -1628px;
width: 48px;
height: 52px;
}
.achievement-partyUp2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -392px -1628px;
background-position: -441px -1628px;
width: 48px;
height: 52px;
}
.achievement-pearlyPro2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1068px -1480px;
background-position: -1129px -1480px;
width: 64px;
height: 56px;
}
.achievement-perfect2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -441px -1628px;
background-position: -490px -1628px;
width: 48px;
height: 52px;
}
.achievement-primedForPainting2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -382px -1549px;
background-position: -431px -1549px;
width: 48px;
height: 56px;
}
.achievement-purchasedEquipment2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -431px -1549px;
background-position: -480px -1549px;
width: 48px;
height: 56px;
}
.achievement-rat2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -490px -1628px;
background-position: -539px -1628px;
width: 48px;
height: 52px;
}
.achievement-redLetterDay2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1133px -1480px;
background-position: -1194px -1480px;
width: 64px;
height: 56px;
}
@ -360,79 +360,85 @@
}
.achievement-royally-loyal2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -539px -1628px;
background-position: -588px -1628px;
width: 48px;
height: 52px;
}
.achievement-seafoam2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -588px -1628px;
background-position: -637px -1628px;
width: 48px;
height: 52px;
}
.achievement-seasonalSpecialist2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -873px -1480px;
width: 60px;
height: 64px;
}
.achievement-seeingRed2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -480px -1549px;
background-position: -529px -1549px;
width: 48px;
height: 56px;
}
.achievement-shield2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -637px -1628px;
background-position: -686px -1628px;
width: 48px;
height: 52px;
}
.achievement-shinySeed2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -686px -1628px;
background-position: -735px -1628px;
width: 48px;
height: 52px;
}
.achievement-skeletonCrew2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1198px -1480px;
background-position: -1259px -1480px;
width: 64px;
height: 56px;
}
.achievement-snowball2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -735px -1628px;
background-position: -784px -1628px;
width: 48px;
height: 52px;
}
.achievement-spookySparkles2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -784px -1628px;
background-position: -833px -1628px;
width: 48px;
height: 52px;
}
.achievement-stoikalm2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -833px -1628px;
background-position: -882px -1628px;
width: 48px;
height: 52px;
}
.achievement-sun2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -882px -1628px;
background-position: -931px -1628px;
width: 48px;
height: 52px;
}
.achievement-sword2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -931px -1628px;
background-position: -980px -1628px;
width: 48px;
height: 52px;
}
.achievement-thankyou2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -980px -1628px;
background-position: -1029px -1628px;
width: 48px;
height: 52px;
}
.achievement-thermometer2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1029px -1628px;
background-position: -1078px -1628px;
width: 48px;
height: 52px;
}
@ -444,61 +450,61 @@
}
.achievement-tree2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1078px -1628px;
background-position: -1127px -1628px;
width: 48px;
height: 52px;
}
.achievement-triadbingo2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1127px -1628px;
background-position: -1176px -1628px;
width: 48px;
height: 52px;
}
.achievement-ultimate-healer2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1176px -1628px;
background-position: -1225px -1628px;
width: 48px;
height: 52px;
}
.achievement-ultimate-mage2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1225px -1628px;
background-position: -1274px -1628px;
width: 48px;
height: 52px;
}
.achievement-ultimate-rogue2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1274px -1628px;
background-position: -1323px -1628px;
width: 48px;
height: 52px;
}
.achievement-ultimate-warrior2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1323px -1628px;
background-position: -1372px -1628px;
width: 48px;
height: 52px;
}
.achievement-undeadUndertaker2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1263px -1480px;
background-position: -1324px -1480px;
width: 64px;
height: 56px;
}
.achievement-unearned2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1372px -1628px;
background-position: -1421px -1628px;
width: 48px;
height: 52px;
}
.achievement-valentine2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1421px -1628px;
background-position: -1470px -1628px;
width: 48px;
height: 52px;
}
.achievement-wolf2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
background-position: -1470px -1628px;
background-position: -1519px -1628px;
width: 48px;
height: 52px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

After

Width:  |  Height:  |  Size: 465 KiB

View file

@ -395,6 +395,14 @@ const NOTIFICATIONS = {
achievement: 'legendaryBestiary',
},
},
ACHIEVEMENT_SEASONAL_SPECIALIST: {
achievement: true,
label: $t => `${$t('achievement')}: ${$t('achievementSeasonalSpecialist')}`,
modalId: 'generic-achievement',
data: {
achievement: 'seasonalSpecialist',
},
},
};
export default {
@ -457,7 +465,7 @@ export default {
'ONBOARDING_COMPLETE', 'FIRST_DROPS', 'ACHIEVEMENT_BUG_BONANZA', 'ACHIEVEMENT_BARE_NECESSITIES',
'ACHIEVEMENT_FRESHWATER_FRIENDS', 'ACHIEVEMENT_GOOD_AS_GOLD', 'ACHIEVEMENT_ALL_THAT_GLITTERS',
'ACHIEVEMENT_BONE_COLLECTOR', 'ACHIEVEMENT_SKELETON_CREW', 'ACHIEVEMENT_SEEING_RED',
'ACHIEVEMENT_RED_LETTER_DAY', 'ACHIEVEMENT_LEGENDARY_BESTIARY',
'ACHIEVEMENT_RED_LETTER_DAY', 'ACHIEVEMENT_LEGENDARY_BESTIARY', 'ACHIEVEMENT_SEASONAL_SPECIALIST',
].forEach(type => {
handledNotifications[type] = true;
});
@ -879,6 +887,7 @@ export default {
case 'ACHIEVEMENT_SEEING_RED':
case 'ACHIEVEMENT_RED_LETTER_DAY':
case 'ACHIEVEMENT_LEGENDARY_BESTIARY':
case 'ACHIEVEMENT_SEASONAL_SPECIALIST':
case 'GENERIC_ACHIEVEMENT':
this.showNotificationWithModal(notification);
break;

View file

@ -105,5 +105,8 @@
"achievementRedLetterDayModalText": "You tamed all the Red Mounts!",
"achievementLegendaryBestiary": "Legendary Bestiary",
"achievementLegendaryBestiaryText": "Has hatched all the mythical pets: Dragon, Flying Pig, Gryphon, Sea Serpent, and Unicorn!",
"achievementLegendaryBestiaryModalText": "You collected all the mythical pets!"
"achievementLegendaryBestiaryModalText": "You collected all the mythical pets!",
"achievementSeasonalSpecialist": "Seasonal Specialist",
"achievementSeasonalSpecialistText": "Has completed all the Spring and Winter seasonal quests: Egg Hunt, Trapper Santa, and Find the Cub!",
"achievementSeasonalSpecialistModalText": "You completed all the seasonal quests!"
}

View file

@ -237,6 +237,11 @@ const basicAchievs = {
titleKey: 'achievementLegendaryBestiary',
textKey: 'achievementLegendaryBestiaryText',
},
seasonalSpecialist: {
icon: 'achievement-seasonalSpecialist',
titleKey: 'achievementSeasonalSpecialist',
textKey: 'achievementSeasonalSpecialistText',
},
};
Object.assign(achievementsData, basicAchievs);

View file

@ -48,6 +48,11 @@ const QUEST_SERIES_ACHIEVEMENTS = {
'frog',
'hippo',
],
seasonalSpecialist: [
'egg',
'evilsanta',
'evilsanta2',
],
};
export default QUEST_SERIES_ACHIEVEMENTS;

View file

@ -455,7 +455,7 @@ const wacky = {
previousDate: t('marchYYYY', { year: 2019 }),
}),
canBuy () {
return moment().isBefore('2020-05-02');
return moment().isBetween('2021-04-01T08:00-05:00', '2021-04-30T20:00-05:00');
},
},
Dessert: {

View file

@ -29,7 +29,7 @@ const FIRST_MYSTERY_SET = moment('2014-02-01');
for (
let mysteryMonth = FIRST_MYSTERY_SET;
moment(mysteryMonth).startOf('month').isSameOrBefore(moment().add(1, 'months'));
moment(mysteryMonth).startOf('month').isSameOrBefore(moment());
mysteryMonth = moment(mysteryMonth).add(1, 'months')
) {
const setKey = moment(mysteryMonth).format('YYYYMM');

View file

@ -519,7 +519,7 @@ const quests = {
value: 1,
category: 'pet',
canBuy () {
return false;
return moment().isBefore('2021-04-30T20:00-05:00');
},
collect: {
plainEgg: {
@ -3585,7 +3585,8 @@ const quests = {
completion: t('questWaffleCompletion'),
value: 4,
category: 'hatchingPotion',
event: EVENTS.spring2020,
event: EVENTS.spring2021,
canBuy: moment().isBetween('2021-04-01T08:00-05:00', '2021-04-30T20:00-05:00'),
boss: {
name: t('questWaffleBoss'),
hp: 500,

View file

@ -209,6 +209,7 @@ function _getBasicAchievements (user, language) {
_addSimple(result, user, { path: 'seeingRed', language });
_addSimple(result, user, { path: 'redLetterDay', language });
_addSimple(result, user, { path: 'legendaryBestiary', language });
_addSimple(result, user, { path: 'seasonalSpecialist', language });
_addSimpleWithMasterCount(result, user, { path: 'beastMaster', language });
_addSimpleWithMasterCount(result, user, { path: 'mountMaster', language });

View file

@ -141,6 +141,7 @@ export default new Schema({
seeingRed: Boolean,
redLetterDay: Boolean,
legendaryBestiary: Boolean,
seasonalSpecialist: Boolean,
// Onboarding Guide
createdTask: Boolean,
completedTask: Boolean,

View file

@ -64,6 +64,7 @@ const NOTIFICATION_TYPES = [
'ACHIEVEMENT_SEEING_RED',
'ACHIEVEMENT_RED_LETTER_DAY',
'ACHIEVEMENT_LEGENDARY_BESTIARY',
'ACHIEVEMENT_SEASONAL_SPECIALIST',
'ACHIEVEMENT', // generic achievement notification, details inside `notification.data`
'DROP_CAP_REACHED',
];