From 40ba81a5d9b769066957d623fcae9f801d26057d Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Tue, 10 Dec 2019 14:41:39 -0600 Subject: [PATCH] feat(content): FFFFFF Achievements --- .../2019/20191210_pet_color_achievements.js | 82 ++++++++++++++++++ .../client/src/components/notifications.vue | 15 +++- website/common/locales/en/achievements.json | 8 +- website/common/script/content/achievements.js | 10 +++ website/common/script/content/constants.js | 3 + website/common/script/libs/achievements.js | 2 + .../achievement-aridAuthority2x.png | Bin 2961 -> 9117 bytes .../achievements/achievement-dustDevil2x.png | Bin 2836 -> 16266 bytes .../achievements/achievement-pearlyPro2x.png | Bin 0 -> 10034 bytes .../achievement-primedForPainting2x.png | Bin 0 -> 18017 bytes .../promo_achievement_white.png | Bin 0 -> 1415 bytes website/server/controllers/api-v3/news.js | 19 ++-- website/server/models/user/schema.js | 2 + website/server/models/userNotification.js | 2 + 14 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 migrations/archive/2019/20191210_pet_color_achievements.js create mode 100644 website/raw_sprites/spritesmith/achievements/achievement-pearlyPro2x.png create mode 100644 website/raw_sprites/spritesmith/achievements/achievement-primedForPainting2x.png create mode 100644 website/raw_sprites/spritesmith_large/promo_achievement_white.png diff --git a/migrations/archive/2019/20191210_pet_color_achievements.js b/migrations/archive/2019/20191210_pet_color_achievements.js new file mode 100644 index 0000000000..6f0c4a4f99 --- /dev/null +++ b/migrations/archive/2019/20191210_pet_color_achievements.js @@ -0,0 +1,82 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20191210_pet_color_achievements'; +import { model as User } from '../../../website/server/models/user'; + +const progressCount = 1000; +let count = 0; + +async function updateUser (user) { + count++; + + let set = { + migration: MIGRATION_NAME, + }; + + if (user && user.items && user.items.pets) { + const pets = user.items.pets; + if (pets['Wolf-White'] > 0 + && pets['TigerCub-White'] > 0 + && pets['PandaCub-White'] > 0 + && pets['LionCub-White'] > 0 + && pets['Fox-White'] > 0 + && pets['FlyingPig-White'] > 0 + && pets['Dragon-White'] > 0 + && pets['Cactus-White'] > 0 + && pets['BearCub-White'] > 0) { + set['achievements.primedForPainting'] = true; + } + } + + if (user && user.items && user.items.mounts) { + const mounts = user.items.mounts; + if (mounts['Wolf-White'] + && mounts['TigerCub-White'] + && mounts['PandaCub-White'] + && mounts['LionCub-White'] + && mounts['Fox-White'] + && mounts['FlyingPig-White'] + && mounts['Dragon-White'] + && mounts['Cactus-White'] + && mounts['BearCub-White'] ) { + set['achievements.pearlyPro'] = true; + } + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + return await User.update({ _id: user._id }, { $set: set }).exec(); +} + +module.exports = async function processUsers () { + let query = { + migration: { $ne: MIGRATION_NAME }, + 'auth.timestamps.loggedin': { $gt: new Date('2019-12-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 + } +}; diff --git a/website/client/src/components/notifications.vue b/website/client/src/components/notifications.vue index 2b0aeaa835..e4dc02dc5e 100644 --- a/website/client/src/components/notifications.vue +++ b/website/client/src/components/notifications.vue @@ -235,6 +235,16 @@ const NOTIFICATIONS = { label: $t => `${$t('achievement')}: ${$t('achievementUndeadUndertaker')}`, modalId: 'generic-achievement', }, + ACHIEVEMENT_PRIMED_FOR_PAINTING: { + achievement: true, + label: $t => `${$t('achievement')}: ${$t('achievementPrimedForPainting')}`, + modalId: 'generic-achievement', + }, + ACHIEVEMENT_PEARLY_PRO: { + achievement: true, + label: $t => `${$t('achievement')}: ${$t('achievementPearlyPro')}`, + modalId: 'generic-achievement', + }, }; export default { @@ -291,7 +301,8 @@ export default { 'CRON', 'SCORED_TASK', 'LOGIN_INCENTIVE', 'ACHIEVEMENT_ALL_YOUR_BASE', 'ACHIEVEMENT_BACK_TO_BASICS', 'GENERIC_ACHIEVEMENT', 'ACHIEVEMENT_PARTY_UP', 'ACHIEVEMENT_PARTY_ON', 'ACHIEVEMENT_BEAST_MASTER', 'ACHIEVEMENT_MOUNT_MASTER', 'ACHIEVEMENT_TRIAD_BINGO', 'ACHIEVEMENT_DUST_DEVIL', 'ACHIEVEMENT_ARID_AUTHORITY', - 'ACHIEVEMENT_MONSTER_MAGUS', 'ACHIEVEMENT_UNDEAD_UNDERTAKER', 'GENERIC_ACHIEVEMENT', + 'ACHIEVEMENT_MONSTER_MAGUS', 'ACHIEVEMENT_UNDEAD_UNDERTAKER', 'ACHIEVEMENT_PRIMED_FOR_PAINTING', + 'ACHIEVEMENT_PEARLY_PRO', 'GENERIC_ACHIEVEMENT', ].forEach(type => { handledNotifications[type] = true; }); @@ -697,6 +708,8 @@ export default { case 'ACHIEVEMENT_TRIAD_BINGO': case 'ACHIEVEMENT_MONSTER_MAGUS': case 'ACHIEVEMENT_UNDEAD_UNDERTAKER': + case 'ACHIEVEMENT_PRIMED_FOR_PAINTING': + case 'ACHIEVEMENT_PEARLY_PRO': case 'GENERIC_ACHIEVEMENT': this.showNotificationWithModal(notification); break; diff --git a/website/common/locales/en/achievements.json b/website/common/locales/en/achievements.json index 357e0f7ff3..cbf424e89d 100644 --- a/website/common/locales/en/achievements.json +++ b/website/common/locales/en/achievements.json @@ -34,5 +34,11 @@ "achievementMonsterMagusModalText": "You collected all the Zombie Pets!", "achievementUndeadUndertaker": "Undead Undertaker", "achievementUndeadUndertakerText": "Has tamed all Zombie Mounts.", - "achievementUndeadUndertakerModalText": "You tamed all the Zombie Mounts!" + "achievementUndeadUndertakerModalText": "You tamed all the Zombie Mounts!", + "achievementPrimedForPainting": "Primed for Painting", + "achievementPrimedForPaintingText": "Has collected all White Pets.", + "achievementPrimedForPaintingModalText": "You collected all the White Pets!", + "achievementPearlyPro": "Pearly Pro", + "achievementPearlyProText": "Has tamed all White Mounts.", + "achievementPearlyProModalText": "You tamed all the White Mounts!" } diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index 011dcc40c8..6b13df74d9 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -167,6 +167,16 @@ const basicAchievs = { titleKey: 'achievementUndeadUndertaker', textKey: 'achievementUndeadUndertakerText', }, + primedForPainting: { + icon: 'achievement-primedForPainting', + titleKey: 'achievementPrimedForPainting', + textKey: 'achievementPrimedForPaintingText', + }, + pearlyPro: { + icon: 'achievement-pearlyPro', + titleKey: 'achievementPearlyPro', + textKey: 'achievementPearlyProText', + }, }; Object.assign(achievementsData, basicAchievs); diff --git a/website/common/script/content/constants.js b/website/common/script/content/constants.js index 1b210c5749..39e25f54e0 100644 --- a/website/common/script/content/constants.js +++ b/website/common/script/content/constants.js @@ -273,4 +273,7 @@ export const ANIMAL_COLOR_ACHIEVEMENTS = [ { color: 'Zombie', petAchievement: 'monsterMagus', petNotificationType: 'ACHIEVEMENT_MONSTER_MAGUS', mountAchievement: 'undeadUndertaker', mountNotificationType: 'ACHIEVEMENT_UNDEAD_UNDERTAKER', }, + { + color: 'White', petAchievement: 'primedForPainting', petNotificationType: 'ACHIEVEMENT_PRIMED_FOR_PAINTING', mountAchievement: 'pearlyPro', mountNotificationType: 'ACHIEVEMENT_PEARLY_PRO', + }, ]; diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index c1e6048d3e..9bfdab6eec 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -195,6 +195,8 @@ function _getBasicAchievements (user, language) { _addSimple(result, user, { path: 'aridAuthority', language }); _addSimple(result, user, { path: 'monsterMagus', language }); _addSimple(result, user, { path: 'undeadUndertaker', language }); + _addSimple(result, user, { path: 'primedForPainting', language }); + _addSimple(result, user, { path: 'pearlyPro', language }); _addSimpleWithMasterCount(result, user, { path: 'beastMaster', language }); _addSimpleWithMasterCount(result, user, { path: 'mountMaster', language }); diff --git a/website/raw_sprites/spritesmith/achievements/achievement-aridAuthority2x.png b/website/raw_sprites/spritesmith/achievements/achievement-aridAuthority2x.png index 3e721fff8c7498a83ae9aa177f323fa65ea997e4..5dcdfb6b924c965cc99a9f7265c9af646274e394 100644 GIT binary patch literal 9117 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 DYo_=m diff --git a/website/raw_sprites/spritesmith/achievements/achievement-dustDevil2x.png b/website/raw_sprites/spritesmith/achievements/achievement-dustDevil2x.png index 4917092baf3e2957f189a87db5f54739fe54ecbb..f1966e216bb6bdf7c359bb8e7e2941bb450cc0b2 100644 GIT binary patch literal 16266 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 diff --git a/website/raw_sprites/spritesmith/achievements/achievement-pearlyPro2x.png b/website/raw_sprites/spritesmith/achievements/achievement-pearlyPro2x.png new file mode 100644 index 0000000000000000000000000000000000000000..153520a2de06bbcec29d88bc646cb28773b74b30 GIT binary patch literal 10034 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 HoxA@BE1mA9 literal 0 HcmV?d00001 diff --git a/website/raw_sprites/spritesmith/achievements/achievement-primedForPainting2x.png b/website/raw_sprites/spritesmith/achievements/achievement-primedForPainting2x.png new file mode 100644 index 0000000000000000000000000000000000000000..331f62961e2e41777a9f3f3caa62e585eacc02c8 GIT binary patch literal 18017 zcmeIZXH=A1(l$&^k|iigMkF;f(A@+9$vI~Mfu;jF=Nu*HsANHu97RAfl0*q2IcJa@ zBqO}7=gc{0=AD`6nYF(6&$k9vH{5$yT~)hw)m8iMb$5iisvHpk4FMV&8j*s$v?l5= z5cLwo!$G|_YItv=p#f;UwDnyyq3#S0PWDJk8w7)krvrik;bDnHL-Uv_%d}3tFEjwZ zai(m>YN7wMc$7KW&gEa8kf5jl&^Z<0*Gx%{jCOG+4`?Su`>=iUqc!$?y!CoD^VXM6 zZ7Vw=L%%Mnj6ENXoy+5EH^|)My^8&Fs+;Ro*V`?Ay+@j7e&%yIr|!mT^N-b+){hUi zwqAc8blqH+%(3@*3fvgT<{4XOd`wMn-MlMy1L<$&@w&DY%DIthNIN@No4=vGl~F~` zgJXY1%sp}W#^0SlM8@LfR?6j@xn8$J*Lwf%%Ypfm!3`7ZD^E;+pX2H4$#YLpANw%R zN0**b*S0xg6^-B5e>66JKe{b+vpjIU{;=h zeX&JX>Y#scU%AcR-G_I={8^+gYig3tRh+rwX^YC~GBV{6PtT*~WwYuHp4R?7o~!xm z>s871-u|qb&rLrZ-*;nyqitKL^t*naH<6){o z>xs{_nnTEyI2w{Ql{lM2X{?JIQVpz2n$M{Ms^A881*2mIdoyo)25N=(_L_iKc+9b& zL$>@_$VI0wGShPH2{Oy}WK~aJJm86EijJP4Z(|JSPW{(`#_jjhySOHg7CVzv#a2hY zs@_1sr})z*r6-N6*OOMeFt9&S!D)(p$$=BQNt#1Y5=#b@m!6i2ry7lT2f=UnG}<^d zso&n)E_3+%8~Rj!zFD=@OZUbf z?N%iw^+e<1k&-7AA%r3GGqZ87-ID`5s~wZ0*~VCb?aqPHg#=5g8Rd{rcFYBFC^C!at*ecK~$3+hY8(OV;mv0Gz!gi>W6Dej4$g4EgiG{UC55+ z&wBlrnbukl5*|19R#d^ub2x2GfRm4(eN_{ND;q{+R@xN7UVt+!Zqn}M1rBDSC z&+rsae~Yn&RND(OYM^GGq{uESCEuIHZFAuvhKn=rvvQlV3RENydfMgHYAgrDj5fdt+>(qrVxn=d52sT4WAylc^trZ&3!) zg3WhkZ6wFq%_$dI>WvJqG;zdYJLG*$WAzwYGuQJ5t+lcluk0|fAWeU_@US;bnd2X0bF%S6 zFsBXf!4Bh0H$Pho=&$zW&&mhUMf=tHJGB?zno4WcH^HOz!E1AeI)`|2kK*V69fDGB zp|=<0vc*$t548DI;X0lrHwNhJ=V@8L2DVVpxNMW+iclA&H6=MCOeyO0C(ep&??F4 z_50eV2|0o7Hu5_B*3B&M+!Xhj>>gAT%P#NiiV<9=`bfWkE(~2LET+9-7kGV;PnH64 zAB5F%JzD9MMCS@n5y8{51r}G;5cJ1(3<0_4Rq+4f7c% zy-;;R&F&upzhu%bL;Yd-nAHGaPn-xRlVquFuKUZyNY|y8?&K`@?-70$ zU$P+vQW^vihKOUYKde_uRb_sXEI#A&m=G#{2yO%m2$C;ItqtF{n2S6}pMKoiJM@;R zA>US(Dxf}>j2d4ElSw4gx@NM?xPze`6SHZInZ$A(s*b>QP-{E`KMj+MjZyq4*)iNf z?A&I<5c`5CgNhR8ZG^EfeSw^Pm-w_Bl zKr5}B(z$p_9JItIppG@f;6M9dsWLX%M51Ja&#u)f2*aFe;pqb%GL7fhA_Njo`VzCb z2i0O_WoA4MuWG>vH+Y05AVq6h!-dyC(esq*+VPc4=Wt@tq-^a;!D3-IURkSgCdFYE{r1^1H~lyAZ(nC@_%Cp0yZ zmIz*VPBe2^2<&_Lv%F%JD^ZBrn$oZwe&LWp_tD2WzTo2xi~0OJ<~bJ?O^$Jg@bnb! zT_3^HQ?o2C?;uNYdkwL!Ma}TQ+<bq+2sLP!*wdsW|8xfjDPRUSBHfE@1BW%fjGu zld<@(oE-~Pt~?ox3wyMZUV0ek>{W+mqhpM{O`w$+U~*@7I*|8Rm>QtLQuo@CBH4Z`Y20r%Prs&Ff-Dj-0loL}TE!&S09s*f0tnI1?lB|T&! z99t@u^5TCI4zOd#xlR871Nw^5YvDYj6G)FTuob6OWd=}&BYMAIq8m(zl>t5C+y>*?SlKlLpJ-dSt26ONtpj!E#9p0&H)2 zWNq_EO~NC3Wm&3niFHucpEyk+BAB?|HdQD9gUvOBSi_F|HAf*GH1e0>0Wjb8pK;AF)aS8`=JBuMWg)@JuG zrynQ9s?a5{Bof!QdWPUDf`#^-U3kC{%$8UpAt{G|fU5rn*DW#EQnY#fFlbz~I3fSA zVlmfz!%LnTKW4qqZ?25{Ro3muw;~iUjwYI^yXmU|b!7Zj_q^nUJ9G>2+N&ovs4hGp zxTI3D4@RU1alx3A%`%Yr^dE~>aOd(I^yi3)09L;se~zkzjLN#fQn&(chrip-Qpp+6 ztDvmC201pb&9#0Ra{JzliVir#;eMS(v$`<0M`_=Z;i{A*Q&Hq9jXt#wiAa)&wqITG zIaC*tKjMZTE2V?JGbMUQU^AL6AShMC&^Xs<&*CbS^&x|AFk;Dl2v&JIb5YoLUP@yZ znk^H>Q>ku7JX_=vZHWl8>RC$k1U3uzl&yralbK^ki->v#A%ZfmN*<*RANr59R# z0TSm{=~;kCOq2wG!kYtHIYkUd*XW_nJPU?q$D`R1X$OYYNPtOuMZSGloO@}SFL=P6 zh|Z;Xta<#1hW+!q?WA}n?fujr7=?HVZM1QQ7!Sx@qUVD1Z;?!#ysSN1)?t(}RV67W z$+KkJ-YfCJ_Kb#4sov?MYQFqtIuMR^xHweIf*V9iz!SVMd!h0D)}j&Zs}-9>DMC+j zIb9JJvOBr8v9U+;5UEBN_K;Vj{-zVD>A z7J4?E(t%xgsyl2_rX!Q0TsQ6g44m6~bN;nz3|QZ>#;GP6aoU8d+*#W(dDsBuCW>q{ z<)*h!I^|bVh@u!c4vtHWlE?cmh1`b42z}U-us&+HJOhuc6#7U6@ozekj<0B0Y%>mJ z!BfLAXf87)FG`siWdiKBL66cj`tNJabYKDV-|=-SYW6rQsP{j4!<}2w zW*f0hk|`7`^}OH;9mLkr)1?0RyH)3+tWktbJ@@^iuP33J+IP2%DilN(s4PQ0nl~9R zu5($w$LK`A9q6va(qVy_3o?}l-Z{bIgWyDQg+J^f2DG_7eNY=jZy&%3KCG>%4^vQU zbZ6U!KX}g9;Uw-GqABenneK|&I8h`GBHl7&{kANRexT;1`R${p^VjtxKb9eM8vC}csnIUfx4$?vF24sHF_s48w zYOA$&nNyB0gLH-+SduvOJBOi(3K~@MrX{p9vF&7Yz4$hMrMm9hA*M zDWM}tO@`wef3)aLRsyPLcq{k3 zXIPFSUf>-aY}vbN_r0@tWU+Y#dz@A;?tXsWt_Y*9x^n7g;R3l5t0%y~az11KceM*v zjrHX%NrA0%{tP+?ThDsL-w!nmtFzc+$t1Lz>q9g?>oOA{oM&`mB^38KjIg9G`gT+5 zLyIRRAA4ADIuR%nGOdAXF6Q7lePGSxk+8_mS?c2QG5B|x5&3R!ZXDS7+;vN2TpgWO zR@TT^X&tMpeVAvxLgqrXqOt<}nDu7J^nngICOXOARKS5nRQUD5G!#3eGgK)?3PPJ1 zs%Dv$3rH*rn)0p?UJ+wta*aq}Sh{(`LQ#$!#OlK`#@BK({EKPU+FjjdPM_}!jPZAL zqTg^FI^R9y9VZAEcT}p5Es40V%J(7I^y5}pprfaPPlcE!LjR6h0xEYsAyi z84A7MmPTMQq_6V8Vzb4?rU-SI?IFUzD(w>Yn6j(Kvky#*0UZRCl~1dSzO0E`F^(Jg z@ZO=SL?btoQT~lYlw5F~;&HrYorZ$MIpJkUzNJL%B0-$VQ%ktgOw5iPb6c8uXY^?K z-H&tX67^h{A^PYntfzP{;pjj74{R_+~s|eegc)z5wx+ndm-^DD;$K6vpdbK zN}p1ypjqNDadSlM35chW=(Ei9AT}$ zGb+i2wZAqcIwMzxLE-No_Qi1D!XfR|+vT=~IzK0&J3?`JxYG)=gH9PFTtj*-)FVr5 z(+OMpQCm0$0w{d=r{K%8 z>g0k5ox5elshzi*+|oF5s5#ZKYi7lsO#um~xA zK;d#iqFeFFnUmze@L7F>_fu|)ft}cC9&aZYU$m)Eapv@ws*i=WyLR~$@v8Jgo9;%Y zGh!FIO1*I!_>Jt0x4;?3lW6s0!~#(Z`#5SMTFn#XljIZ_7dxNz(?&@rw`;vDNTzQQ z5+(X-2`(AL|v?SENToXwRE%#xTxRJp(w?Fy zn+%T0B3m!^xy>W@wAt|ezExP0@S(ek0i`9oa{m|_fXzn!xfS&gNp?yMx_B;UTEEZ) ztG>Yx;j}~})^fTWBb=g?G9+2GMA8ytdI)-9==(_N@p2K8Du30a3HC+FDTyem3FUjGZTZYFb1Jq(~+|2HQ=_?P`Oa1ABU14 z)v9M6i5!DY9$7zU1EQW$6Yuze?`w>Z*G+ji0uxIi8(+Y-IXROp!p2LxGcB__z|k(Z z0?*MA>_IhFsRMU zu*oVCz;eP0`V6lVeQ((q)r3h3Je_4Y zDKY3U61N_p7oMdcB)%HqdqriIClo4h6iy2?6;=%eQn~iz;!mHq#njTbc{+T!DEQGr zDg&qvW3M>$@N1_yisYcy9rN&g7si3_L42;Kde(J%-GT2B00Wgu~&G{6BQluQ<}^5_tc|b+IMVE$_#_lmA2RBc-Kn2E;JhNCcLX64npJ8 z&KnLk*|@LsvK=AQU5c}B?ZNhP5j3n>Dr>Y`lf%?9Mah-k$FQKd`XX=MN@l4Gz#O9u zLRe>fDT<2jG`o8{o;3<%;)%0e0^z+;D!Ij#A+mv;P7p)Uw)cH2r;&9n8#;+wHHvlW zK(MIMsC@r95sCOvUS#4!iWrHutkK3a=@5bTX%^>wnUqc1O^XN-(m72MhwrZx#_}q} zD?ay0g~aGfmKDu&dl6*un2&6KZ=UQ@It=of0mg$Dn_ch9e9~)`O3vm zfD`~$KN7_6(S@k?Oum#Z?n>mBSuj4I(f1bRl{Eh#If~I-1f?7;fQ_5x#mIe-WuJ*0 z-bt|_Pn)*HQQ0YXD#{6o5O!E6)-$_)8yYs|B0`d7;@Y+V2fMd@c5|p_N|Bx0(!8~W zBjAzz74S?-W5ylea}d7EOQKSfmj97pACM`KjrGVZ8K5z2IsbVxbYiWJ zE1PCRBqtlf{&ps6k=a|t=F@iEhuOY zRR-S9+UP_Cs;LaQ*0XIArgN=3;sqP3$KDGF=v~$0;FDg{c$2MEZDmQ=tJ_xI2IJMAv??a2u6CBQarztQ{^1Fa(=63QQBpX&Xjw zyAuHHrkc&iRwK6Vbzaa1+t2qu%A^t+Nq^qpCDZ zmqPj`3xctB+g5RS{JCrRQ`|)#mPf7%ebe0C`;;^te7&0rpPG(Ezl%!0w+7}itJuf2 z7B0q|uiK2ZeOS!2f|N{Qoie4&$S#$pzodGZL^HMfHF5kEr0<&}S?W3{Ozky)J!P>b zc=n5W1fZl;h;xAe1F>XCj!$^f=R8G(0dC1Fe=n<;wj4ldL1qFHdE@BiLKa0cTB4`I z`hbch$-c5sy3ywBZOGc$2$#4t-n#J+tkqX}dp-Hm;<=e|F&=R@r^#L%70=Xxx>1rE z&CuOo76B_K`Nhp>9H0VAU1-r)yjS{qV_YjAKmIuBcfCHY8hN8SUBXzp>>1&peiN?3 zJ@#E>RGC@KDaJ(lpemwgT9{U8MpvP-5;nO6s*Fkwr`{PvIal|+gJu9KD z0#Es`sgsZPqQB}xBp!_1=(T}K90S21zEF((c)(dca#aoY(FhvWBj|L%D3PX$WJ6fS ziQF3RrHVmQG|55huy|~tXWP&SM({e8J{G#JJWpL3GreZQ(SYYzqQL#?79q7-&M+_G z&09&LjfdHx5s|N3+uPpP`P3EMspOujvnCk zL4!t^Uby0?`(egcM;q@WiB7N-C0Hj`friI;f20_hgQSJ-86N>@9*=wjy2kB{7@;pI zhS?7vT1k7*<_59AyjMU5D@IlGJ2G!+0%eA3OSrLjf*Q$Nh=8=XvBmVP2sC*e_L+f# z8m>nJX1%=_Rw}9AiQX%(hzBZL&Z`qwGWZxg!r7Lg+8mvaJ-v6gg=VQ`nfMdh;tPiR z=oP-lJ{8}LwXp?MY2No%MCYy4nfxH3R3~>)`$}1SSctT`Dkal*aWJ9mQ@G<`RS9Xc z?+|@y2=>+5iy%ZL>s0?t?43o7B#!EfvD_56mx$|h& zCDb;g0$(p;NVCw3A2Y3A)16_xQ_rZ`*0#Egx^FYSBP+?(Vmkn-7Z)LtTQlnL0qdE^ zLq$A;nc8@kbm9shBvb-?+>>%1N*v2{o}qYHJM$#}JwvT<;Y;)hjIcq=z)1`5(en{6 zM*K3vw_O>e(?-O@1pLu7q#;r0hrM(m-L&#A1dE%4ah4|Ut{3;dS6{WlGn?(ch--14 zzZfW?)Z!N}ILPOEy`C|UFc*A4t6OsSt3Rvzt7QMex@X?9V>9VA?1dXxlI^Y#bSXa} zjjx;8WzDb)AaCNC<%(;`?$gEg$t{odT$iCfQoz|L_XkVX)~=W6N=^BNDarIqhZGu= zkdBD^I*mAa{Nx%B`$5i}#t5?pvL$9?{UI0OIvfzi&%3H@-Lc zM(&q2JR&~x$+H#0=HeI3GNeNjjGkD$VAV@uR@oibL~!67u9%~%4&MAWp(Ho;uyWRB zLy$K4k(TqUFnbI5P(LiRmFy(9L{{$U=P~=jr1#-F19!FpTgv?_{7437wgyd;b(3uw zpPhrTT`km^15b$hI*ZVmU9s$YUOdGd1v}=rDB`FZxYAV9gtNP(J+EN0LXa*1=RQX= z`WS067G*7nElclkCOC#Y*YVMrX)pf#k)&E%rXyO(_j^CxqX&Lxg|4Y9PDwYkD;hDB zSGo-a`b$47Xc7tGX0sQan1_mJzII(10_K#V17E9SqM8=RS-L!U-UQFDRzK;rk*KA{ zRE@tYTix>{COP*@u9k+)=BFR|Q&L#=uTGyU%CK{tj%;xokMyW;VA8MA&-vdJDX z^x^Wju%bGN|55Gu%RD*-IY<0X1`&oR;JV+Y#N4|8fp#*#bb=l4)}$rqENQ#15(bg` zzWXbyglfsLGpYuP@1qN&M|aNNC32qa*Y9Q6@TVI>`5E+WZaJ=K1o2J1Z@;Olx#oz8 zZ%Om#m#}cmcWZrnDeXN<_q|F*=J<|-h$S_-w{ph=lSN*o(qgkyfs9Y9U#V&C;M$)l zGole5(}i3mJna6)a&;A3{h?pKc@!Ad{q7~2plAzX?{n0Pm9j5Gn7z*hM%2Lp&mPQG zE&=*V+(jpnY{C6+;?nU{j`-!JJdZ3f8?LPwOdd8ae}d*D&BBu*?}c}T1&D3hxT*b% zY=ncR4$d$)+=IUIlB8VLVxTvcENE%08`OObbl335gaMbriL30pr87K=mTMEC09 zcBozi`^dNkR8KuS3E zB&i4lQ)U8;+ARF4OU7~O-D?;kyYB29w2zVmfHe zRq8n;q%61k){~oV$2((1aHw5)1b-4tf33`~$eztMK`X4Qb{3arS^UjiMrmCRqdrhEUE~HZ9?wYoBJ9E7K`bm9at>ODffl1RHG9nMvS@}S_)b`iDc!lpt63bq zdl+}s0mfKM?>~p~y!ko}0laBS)t1i|j*o}Px$y-3|-DB@o1U?P(tThbLQ*8Ft40yo{DKlk~*>xIGly-8-*surw3X}lydol z?15jl7+%lz`j61wckfHR5-%;^c=a4qo~?Ciq{$M+Qj9OqZ#wI#rBxbQ268W24&02) z2ko9YvR}Z{DDg}g^2fTnH-O0l?n1qoFVv(cgejgCw~WGkostRe)DWb zOh(LZ`4auatHVVK@Z0#L3tMxR18P0%5n}jld6J{rLf?7J3;ONM@|udq8(xcDBW5w@ zG?v64ZeKl;C`O7m=a>dAr<4Y}zCs@rC>;=?0Nz97VZJ!)()^%o4s~HU-m%Wb7W} zJqHoQZRpj|`9sV!tv4>%HUji`V@7G0$={)9_lw{xy@IF%VRnW|bilTqS9F3UUZxY)1HV+W4eChPZ=ZoTxWr^q~{BK%Fe$VeuBRf-HRSmkx1;q(1LD-O>j4uCd$&K ze`Y@4R^x$J{~Lz+os1K*53yV3p+CYeS10uFZp%n<6T6M8Jz4d;ej?H}`_=AKgKf*} z)qQl@Po))8vTnpCi=R%CR7WuIH*9@bLovDsUtyMd9!aZ{n&*u^4Bq^3Tb*Oek4_=% zeso+{!fGp3=C+!u-yr6Wn#7TS+Rbvt_3rjk^WbcM#Wgq9^5zY0(^N>Y_=BEhG&J;J zODQRJ1u3b&Jt&QOJUY`iK~(;O`28*uEg5!7T>fxDtRht^X_@;4kusI)Qv_wg&y6my zRcI0^sO8#g7Z!TVM%%ld=;7)~kY1rVI=X7QB#_^vQ5bZ3ILySkpVGPSp}o|ArjLTr zE#BL{UgBlXFii0>CX>Zul4a=o%t!vMi_oWMTol8nIqHz>#@Rns3~bNKz(6+0`{8Yb zK)5-?Huy-as#mdE(MMIpZWud)zMn~>zP7@A z{)44?Zj4Dz{08FSI6Iasy5NL+$A=HD48;%Dh^Tz3rl$~Cxn)lsy58a z8YTp1dMrjD;vtLzutm5)89Z!l?3{%?M45i!3Zwr2In2Yv@JqzST9ip&MV&#)-U-0~ z;s$X80WuzzZhTB)1PmfhaHO!NwCwK?s4Gz>3l|p$VICfLcXw`ger|gwa~@tHAt4?h z9}gcN03`u%_Ox?>dI0R4nSVn3h9Qk`hB;X}xLDfTG5o}Yn%TR$h%zyu<{5qmN6o@y zJWzwb8~Azs3*OlU&ZB_30HM}{65!zj0tEp;J^-H(&tLUXvnncoXxlme9z|3VN3`45PWFt-~*kpVEJogv0)jb8vOC`6UB~@gQsvwkSuO zQOLZ1C+}ck?_%$4VejyV+TShekLmx*C6wWRuJX6Y{qpKpgoUN;VXi;TD@gw>q2Tr~ zOSteK=)$~$Kmj-(gbx5jqIL=<1Oft}Ag};{&kT%&3kpGiKseuD02S<S7pk{x8P;;_GRR+}NufF|+ zf}^1L1R!t$xF8e&0Soa0Kp;VWfFM|a7Xalo6EcH=fJh_+@(b$cz6eXGD~K}jaRdJx zQMZA*Anl!OQRQZ72e)^3{&Py((iWlR0{t00Ua$ZJ$cxHMK0!V{UV-1%_X|-M;pB`; z`=6-1KyKdOX5cVkSrjG|m424CP;&&2gPr*=+&`lzWp88eq+$<8h%)j2!xW0P)qneX zizt(`rko^$f{YY|R|oF*z4Dk#Q)LtUW%TR4>CmPpV4N%|*0Fo^tK`NGQf zFz8Q)_|0+nugTx&LlSDv^P4QszZ3qykhCo9-R=H&IDd-%fg<7L;%@I`t>&a=W`%&c z{Ck{#Cj1AICW^S7U7S1>{)a{VgPaIzV^max}WA%n_)j_&X#1 zyY<3=5FsHTR1m<6Fhfy-5Q<`;ARz<*BESblRj&{biTJHd|9`Sxegq#>kQWIDm;udD zYzi|20t69eNC3Y8KN!pp=0$*z(7)fLf7o9+REPS-2Mlb#lifm5wiE#S+jQ<-0{0q6i=>H-R`~Ok> zuVTMxOW8YkqFRZCi<-OLzcv3)1b;(NwuB+2Dn<4oHxfuSrE(ihQ z2k{}`05}W|1wi2-Gk_Tah5(oe!UcFy?U)~qg#IhtpG_GC6A%ROgM@$pI1+^FuP_il z0Ksnthk{{9C=4p_uXG`(mJSyL2?3x&d=ONM{yZ)~1i=8PAPm(|g@7;^|G(B10>L3d zD4)#)phy4&^3$#m>I`Zo2;qZ+`FVK}Frj~CR}cb(@$n+~0Z2Xs1Ry8?LK)`=@&bSe zkf0z^01n~fL)k?o>aSx22!g5>5HBhweEg^y;ztMq1d(7t0FocodBJcPkdF`Yr!?Hm z42j?sgaCwig+Qo72Lu5S|g52mqi^ zGt?e{AaFjUARmgG_Ry58kDGO)xP0*T{bq-~Wc|zv23iBJdvx|2Mn-8?OH-0{@Zlf3xfVvv3jo z`Eet{4s|=_j`}c>|Hlj&>VrreGbK4`w40y5xy^5qP$T#b@=u)6&~DxS`9eoa&%A>g z#C1_nk-=RiB%om8NU&F|K|{kxRFIa?wwT*_!7G1Xf+F-L<<`XAfdC`-T7#m3vLcY~ zI0yS~rSfg*dsRU4;a4rJX5KnOiiYj7rO{6p(j64dfbo)*f>9Z`lR2IOk7}$PlYIO6 z8f*AJ-8A3qY}-_i+bq4vQ`=b)V!itzTyA*p^w!-Csge{Li^kctt=ugIgh ztz*p{gEHiU#I(+h+h; z30)KB95_|8wS5v{F{f_}DrND=^uRwujqVa?@RbOJ$X{VepAQ+G5}DXLq(p|Hapnk& zleoKU?bK#vNj5XG$mX;e*I4R^fyQOdBffnbIe$DpF2Mq_$BRgKsQ!f;uG1v^=oZ@9 zjD-i8*Z4OyG(VH4=xE5)R5Y}CRkgAsJ=oJ*IwQjN6s8D$Pkaq+dHDfn`N#NlCK+nk zC32(eVk9#heM%YgBnB2b;ZogSlh@aaWw+3YO;#VAKF-b}+No=(w>S=p=9x>}r1(Mo zq-*pg+p0f+i}2#95#fV&odFppV+^D9nozbMeQbdCozg`nvQ}K9h8v{sY;n_As)v1S z&S$}N>OPK@$gsvoXl?Vs!R=pGte!G5eo4uko9G4m`(R0y48|QfqqTkV^3AOj;$eBO zEz?3zkE@eEj5&32b9~5$wvc_{8WHcY)=7$2CU!s`UvXW!Tyf+QYr+HD+s6${}3FGCQX_u69GYjcv fOde%iY}@S|yBF;eA=&z`%MfeZP6XcjkF!o^Rgcd(+77htzlI?*ITm zo#5i+3B_lS2X9w~?#tYycqk|bkPbNk^38MWKJPCGQHgZ%VE};Y&P|5_HwyJ2a9a$) z4Zm$lO+iy-+lWH&3jk2kCO93Wo*M;=u%X%>+RmlMw<%f&likAIcGnVqFe^PWs;G+O zX1X+duPU#tvrVx-WlAt@ci5g9ig62ZK@f2G7DIoI>*_QFf<^>f2CD82wnk7WoCOL#PXZey6KbfgsZ zvl^hQ1`r1$#LcPWVliAwRq3&sb7%!3TYy_Zjhb&K$M74ye11IA+c(`9R%HE^g9jl= zV1qDq{6SpJ*^gZ;tscTxG29vQ{=pk_5O;X`%|@cl=TjJ41OhSeZZXfS@n%?ag@>+| zGJsT&CLqluVPQK40DKs`cbX+x;^M?0oy-O7GwP=5$$kBuNo^9w>`0%AY1#2Xz;I3g^Y z%fSesY>CR`OOpcGO!-jHu(wT;HCB?^N~0aC>KM0As_F>&#i(+L=T)=5|1$@rH-)Zg7}5tqfa3znO+jv5qaq{#vZVm zG+W%$-}IbM3X;c1pl9mW7kq4z1P>OoIO|8xZ*?h@pMwTX?$AZ7H5|rB6HAGA>lWV+ zTEx;cu?*S5Y~g(30XTfGFZ-mO9icHJ#zu!n7n77(Ik45boF;d?hW@-rk0%7(ik>FT z<5t zQ2*(sH@hxl?RdxR$Wi|Z%hnp+;W#-R6Ud#P#01OXW8!0vXWo7I{3*Q3;BF_0=?EhKunnBBw4A{V zqW5~}NRe?EA%dp6!Wx&mWc^wUv1foIumT4((}SVcP6uv z!tWOenWDg_=*Lub#MbyPYrh|fqUo7(P<;Dps&88ir*^eFi^5(UOt}bqoeYykA?L3t z=ayyaJJX&Fe8EDqbI|H!@z`iHS5bc{Jt3#g9AdX>1|U^UFU$|;l9M|>j}61NJ~R>P zrA;}En5A{w`CfF7^`D}vTWK2mkX5J(o`~b

${res.t('newStuff')}

-

12/3/2019 - ${LAST_ANNOUNCEMENT_TITLE}

+

12/10/2019 - ${LAST_ANNOUNCEMENT_TITLE}


-
+

- We’ve added three new backgrounds to the Background Shop! Now your avatar can shop a - cheerful Holiday Market, enjoy the scent of a Holiday Wreath and bask in the starlight - of a Winter Nocturne. Check them out under User Icon > Backgrounds! + We're releasing a new achievement so you can celebrate your successes in the world of + Habitican pet collecting! Earn the Primed for Painting and Pearly Pro achievements by + collecting White pets and mounts and you'll earn a nifty badge for your profile.

- Plus, there’s new Gold-purchasable equipment in the Enchanted Armoire, including the - Duffle Coat and Ear-Flap Hat. Better work hard on your real-life tasks to earn all - the pieces! Enjoy :) + If you already have all the White pets and/or mounts in your stable, you'll receive the + badge automatically! Check your profile and celebrate your new achievement with pride.

- by Katy133, gawrone, Vikte, Maans, GeraldThePixel, QuartzFox, KatieSlug, and SabreCat + by Piyowo and SabreCat
`, diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 316eda698d..c07dc26bc5 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -132,6 +132,8 @@ export default new Schema({ kickstarter2019: Boolean, monsterMagus: Boolean, undeadUndertaker: Boolean, + primedForPainting: Boolean, + pearlyPro: Boolean, }, backer: { diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index 747d5f98c6..7a8938f428 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -47,6 +47,8 @@ const NOTIFICATION_TYPES = [ 'ACHIEVEMENT_TRIAD_BINGO', 'ACHIEVEMENT_MONSTER_MAGUS', 'ACHIEVEMENT_UNDEAD_UNDERTAKER', + 'ACHIEVEMENT_PRIMED_FOR_PAINTING', + 'ACHIEVEMENT_PEARLY_PRO', ]; const { Schema } = mongoose;