From 80a2e31c8e578ec38661b0ed309151ca2e9d004e Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Tue, 19 May 2020 14:00:25 -0500 Subject: [PATCH] feat(content): new achievement and bundle --- .../client/src/components/notifications.vue | 11 ++++- .../src/components/userMenu/profile.vue | 3 +- website/common/locales/en/achievements.json | 5 ++- website/common/locales/en/questsContent.json | 5 ++- website/common/script/content/achievements.js | 5 +++ website/common/script/content/bundles.js | 15 +++++++ website/common/script/content/constants.js | 5 +++ website/common/script/libs/achievements.js | 1 + .../achievement-bareNecessities2x.png | Bin 0 -> 1873 bytes .../scrolls/quest_bundle_jungleBuddies.png | Bin 0 -> 1125 bytes .../promo_jungle_buddies_bundle.png | Bin 0 -> 17319 bytes website/server/controllers/api-v3/news.js | 39 ++++++++++++++---- website/server/models/user/schema.js | 1 + website/server/models/userNotification.js | 1 + 14 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 website/raw_sprites/spritesmith/achievements/achievement-bareNecessities2x.png create mode 100644 website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_jungleBuddies.png create mode 100644 website/raw_sprites/spritesmith_large/promo_jungle_buddies_bundle.png diff --git a/website/client/src/components/notifications.vue b/website/client/src/components/notifications.vue index 3c8111b5ee..5c14acdc7f 100644 --- a/website/client/src/components/notifications.vue +++ b/website/client/src/components/notifications.vue @@ -319,6 +319,14 @@ const NOTIFICATIONS = { achievement: 'bugBonanza', // defined manually until the server sends all the necessary data }, }, + ACHIEVEMENT_BARE_NECESSITIES: { + achievement: true, + label: $t => `${$t('achievement')}: ${$t('achievementBareNecessities')}`, + modalId: 'generic-achievement', + data: { + achievement: 'bareNecessities', // defined manually until the server sends all the necessary data + }, + }, }; export default { @@ -377,7 +385,7 @@ export default { 'ACHIEVEMENT_MOUNT_MASTER', 'ACHIEVEMENT_TRIAD_BINGO', 'ACHIEVEMENT_DUST_DEVIL', 'ACHIEVEMENT_ARID_AUTHORITY', 'ACHIEVEMENT_MONSTER_MAGUS', 'ACHIEVEMENT_UNDEAD_UNDERTAKER', 'ACHIEVEMENT_PRIMED_FOR_PAINTING', 'ACHIEVEMENT_PEARLY_PRO', 'ACHIEVEMENT_TICKLED_PINK', 'ACHIEVEMENT_ROSY_OUTLOOK', 'ACHIEVEMENT', - 'ONBOARDING_COMPLETE', 'FIRST_DROPS', 'ACHIEVEMENT_BUG_BONANZA', + 'ONBOARDING_COMPLETE', 'FIRST_DROPS', 'ACHIEVEMENT_BUG_BONANZA', 'ACHIEVEMENT_BARE_NECESSITIES', ].forEach(type => { handledNotifications[type] = true; }); @@ -792,6 +800,7 @@ export default { case 'ACHIEVEMENT_TICKLED_PINK': case 'ACHIEVEMENT_ROSY_OUTLOOK': case 'ACHIEVEMENT_BUG_BONANZA': + case 'ACHIEVEMENT_BARE_NECESSITIES': case 'GENERIC_ACHIEVEMENT': this.showNotificationWithModal(notification); break; diff --git a/website/client/src/components/userMenu/profile.vue b/website/client/src/components/userMenu/profile.vue index e27d9a05c8..7dfd643f09 100644 --- a/website/client/src/components/userMenu/profile.vue +++ b/website/client/src/components/userMenu/profile.vue @@ -318,7 +318,7 @@ >
." } diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index 3d986bbe68..50a648747d 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -192,6 +192,11 @@ const basicAchievs = { titleKey: 'achievementBugBonanza', textKey: 'achievementBugBonanzaText', }, + bareNecessities: { + icon: 'achievement-bareNecessities', + titleKey: 'achievementBareNecessities', + textKey: 'achievementBareNecessitiesText', + }, }; Object.assign(achievementsData, basicAchievs); diff --git a/website/common/script/content/bundles.js b/website/common/script/content/bundles.js index f72d00f538..3c64bfd6ba 100644 --- a/website/common/script/content/bundles.js +++ b/website/common/script/content/bundles.js @@ -221,6 +221,21 @@ const bundles = { type: 'quests', value: 7, }, + jungleBuddies: { + key: 'jungleBuddies', + text: t('jungleBuddiesText'), + notes: t('jungleBuddiesNotes', { date: moment('2020-05-31').format('LL') }), + bundleKeys: [ + 'monkey', + 'sloth', + 'treeling', + ], + canBuy () { + return moment().isBetween('2020-05-19', '2020-06-02'); + }, + type: 'quests', + value: 7, + }, }; export default bundles; diff --git a/website/common/script/content/constants.js b/website/common/script/content/constants.js index 81dc6aa33c..9d2eee34f4 100644 --- a/website/common/script/content/constants.js +++ b/website/common/script/content/constants.js @@ -282,6 +282,11 @@ export const QUEST_SERIES_ACHIEVEMENTS = { 'snail', 'spider', ], + bareNecessities: [ + 'monkey', + 'sloth', + 'treeling', + ], }; export const ANIMAL_COLOR_ACHIEVEMENTS = [ diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index 1b316d3c0d..751174c109 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -200,6 +200,7 @@ function _getBasicAchievements (user, language) { _addSimple(result, user, { path: 'tickledPink', language }); _addSimple(result, user, { path: 'rosyOutlook', language }); _addSimple(result, user, { path: 'bugBonanza', language }); + _addSimple(result, user, { path: 'bareNecessities', language }); _addSimpleWithMasterCount(result, user, { path: 'beastMaster', language }); _addSimpleWithMasterCount(result, user, { path: 'mountMaster', language }); diff --git a/website/raw_sprites/spritesmith/achievements/achievement-bareNecessities2x.png b/website/raw_sprites/spritesmith/achievements/achievement-bareNecessities2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f440a1aa13d0fdb70746435de9c7878961b50fc5 GIT binary patch literal 1873 zcmV-X2d?;uP)k zf3(t#N@8g(7jurBSTn3mH$Orxnh;P92b@snNJ!*6IQ?-y7xQ^~&j%tLYR~-_yx-@2 ze(!Z(_x(OEV8ceRa7Fq8GT&O^zyANTZx=`On#Ncr^cWkd6K9vE`T^kX%w%JY5ECg< zEFqEB5NgJ4Yo`MMT7D@70L0(36adiHdIbQ`v9Bj0nqmow6d`Hr*9aL~UIG9#)Kmcg z68heik+~290O+65qwROCG#3C+TlksF67qk{GP56f%ntxv%kI~f&+??Jzls3>?N|W- zn3!IyZP!+PP|HeZme#o}A)}Fy_`LD{VC!2-I$hTjam(g&YQ*2swo90p;kbW$p!NA` zebtv5ag6ha54i?&eU^~n){y%O?s8mS+m>LEQS3P4RlDAE+}}OVd42i|TL1u^Dhrv% z$9nhyAg!R;@wg{9{c1I2L3TOqlSx%`&6HhYXP6(aGS5QWH4hlP1Ih0InW+ z82}KI5+(a}OHFe*`8CJ$n8f^5DWvo(0%v)ZMtGnc@U|h5VhI^4Azk&oGBUY=$PmBK zJmw8;zpF>O007>NmnCcTA6ogi6dPsn&G;)i|XXKJ+&vUDGvbfXGyJWP-Jx4 zs-zd&oUEK{vU3*9S;IGk!QTv8LP8N@lF>LOcuhbj+F2Iks2$V-&$>pX9Wv76@~VZH z6!9Z*$Mc-YD3|RQ6-kX#Q$5pBOL!fDvJQX8f)J!wLc-OMP-M){Ua57)_zd&@(^;m> zovDrNqM}Ca|3E=9NRnA?)4#-Bn5uQq60$Rb9yiqQvV?>pgwIr_ddA!jc2ixP@2ILa z=PzHWJJ=GjoPRV)7U@cozDMWW9Brf-v5QMpkpoRLs41o<(b;-7R%oP}K8QZ4qwav5 zx6-eE=YE@IZmLs_U;V0<-+wyum7|uJBV;;K2AwJUA@nI+PG?FDVz-}UF$>LESD^Px zjO(D2ZQ1?4b*jTs?edP!KG7-YR+uM6vk@H))@ zee2(Zt#(JEA2M)Sw#gZi|E;kamV%#wewD! zBJX^Ymy0iH-nZ ztVGgGBG?C+rm`E!VD!K8v|P9Qs2{L1h(=CBQdfPWI#JL%Xw;INs;4mlODg~=qJqn279+{YTgOY%V39Wp1RJHRzrrlmN7LXakE=n-d8T~Y53OP zoM%dZU{;^zi1Uq~8RIJJgC5`Pokn>-*4AI#(FUs_BdH-~AEQUj9dqMWZNvs5A3=#> zRw4<3d=BTSn#ZqrR{TcK;uGSC>!XHrLo6XfC8Xs*m-C%XjL}Ank)>*$K*TUBnc2eB z2+mVAk3TSz*)1B^ezw;V5|JzuC_;Uuz`5zs4|_G=!ti~a<>)j`U(x%0xe)WDIGa-& zYKG;j2usM#u6D!iqomzF!|ycm-5L4}AUaTz78&gM zEFqC1xQgc$J;WtHnXK)-*p00000 LNkvXXu0mjfDNKxl literal 0 HcmV?d00001 diff --git a/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_jungleBuddies.png b/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_jungleBuddies.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fbe7e1cf54ae7745ba69ec962897b1473b6235 GIT binary patch literal 1125 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

-
+
+

New Quest Pet Badge!

- This month's featured Wiki article is about Resting in the Inn! We hope that it - will help you when you need a break from your Dailies. Be sure to check it out, and let - us know what you think by reaching out on Twitter, - Tumblr, and Facebook. + We're releasing a new achievement so you can celebrate your successes in the world of + Habitican Pet collecting! Earn the Bare Necessities achievement by collecting all + Habitica's jungle-dwelling Pets and you'll earn a nifty badge for your profile.

-
by shanaqui and the Wiki Wizards
+

+ If you’ve already completed the required Quests for a newly released achievement, you + don’t have to do them all again! Just complete one of the relevant Quests and the + Achievement will unlock. Check your profile and celebrate your new Achievement with + pride. +

+
by Beffymaroo and SabreCat
+
+

New Discounted Pet Quest Bundle: Jungle Buddies!

+

+ If you're eager to complete the Bare Necessities quests, or if you're simply looking to + add some equatorial pets to your Habitica stable, you're in luck! From now until May 30, + you can purchase the Jungle Buddies Pet Quest Bundle and receive the Monkey, Sloth, and + Treeling quests, all for only 7 Gems! That's a discount of 5 Gems from the price of + purchasing them separately. Check it out in the Quest Shop + today! +

+
by SabreCat
+
Writing by PixelHunter, Emily Austin, Flutter Bee, and Felipe NA
+
+ Art by JaizakAripaik, Drevian, McCoyly, awakebyjava, PainterProphet, Kiwibot, + greenpencil, fuzzytrees, PainterProphet, aurakami, yamato, leephon, Misceo, and + Oneironaut +
`, }); diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 4788278a15..a6eae81943 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -134,6 +134,7 @@ export default new Schema({ tickledPink: Boolean, rosyOutlook: Boolean, bugBonanza: Boolean, + bareNecessities: Boolean, // Onboarding Guide createdTask: Boolean, completedTask: Boolean, diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index e7775c6cd1..214b1e580d 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -55,6 +55,7 @@ const NOTIFICATION_TYPES = [ 'ACHIEVEMENT_TICKLED_PINK', 'ACHIEVEMENT_ROSY_OUTLOOK', 'ACHIEVEMENT_BUG_BONANZA', + 'ACHIEVEMENT_BARE_NECESSITIES', 'ACHIEVEMENT', // generic achievement notification, details inside `notification.data` ];