From b1f42dcac954dbc72821623b88a42877eb698a02 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 31 Jan 2019 17:10:56 -0600 Subject: [PATCH] feat(content): Habitica Birthday 2019 --- .../archive/2019/20190131_habit_birthday.js | 88 ++++++++++++++++++ test/common/ops/buy/purchase.js | 2 +- website/client/assets/scss/variables.scss | 10 +- website/common/locales/en/gear.json | 2 + .../script/content/gear/sets/special/index.js | 6 ++ website/common/script/content/index.js | 8 +- .../broad_armor_special_birthday2019.png | Bin 0 -> 758 bytes .../shop_armor_special_birthday2019.png | Bin 0 -> 696 bytes .../slim_armor_special_birthday2019.png | Bin 0 -> 706 bytes .../spritesmith/npcs/npc_bailey.png | Bin 3639 -> 4003 bytes .../spritesmith/npcs/npc_justin.png | Bin 4364 -> 4525 bytes .../raw_sprites/spritesmith/npcs/npc_matt.png | Bin 6173 -> 6421 bytes .../spritesmith_large/promo_birthday_2019.png | Bin 0 -> 21197 bytes website/server/controllers/api-v3/news.js | 23 ++++- website/server/models/user/hooks.js | 4 + 15 files changed, 129 insertions(+), 14 deletions(-) create mode 100644 migrations/archive/2019/20190131_habit_birthday.js create mode 100644 website/raw_sprites/spritesmith/gear/events/birthday/broad_armor_special_birthday2019.png create mode 100644 website/raw_sprites/spritesmith/gear/events/birthday/shop_armor_special_birthday2019.png create mode 100644 website/raw_sprites/spritesmith/gear/events/birthday/slim_armor_special_birthday2019.png create mode 100644 website/raw_sprites/spritesmith_large/promo_birthday_2019.png diff --git a/migrations/archive/2019/20190131_habit_birthday.js b/migrations/archive/2019/20190131_habit_birthday.js new file mode 100644 index 0000000000..97a7134122 --- /dev/null +++ b/migrations/archive/2019/20190131_habit_birthday.js @@ -0,0 +1,88 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20190131_habit_birthday'; +import { v4 as uuid } from 'uuid'; + +import { model as User } from '../../../website/server/models/user'; + +const progressCount = 1000; +let count = 0; + +async function updateUser (user) { + count++; + + const inc = { + 'items.food.Cake_Skeleton': 1, + 'items.food.Cake_Base': 1, + 'items.food.Cake_CottonCandyBlue': 1, + 'items.food.Cake_CottonCandyPink': 1, + 'items.food.Cake_Shade': 1, + 'items.food.Cake_White': 1, + 'items.food.Cake_Golden': 1, + 'items.food.Cake_Zombie': 1, + 'items.food.Cake_Desert': 1, + 'items.food.Cake_Red': 1, + 'achievements.habitBirthdays': 1, + }; + const set = {}; + let push; + + set.migration = MIGRATION_NAME; + + if (typeof user.items.gear.owned.armor_special_birthday2018 !== 'undefined') { + set['items.gear.owned.armor_special_birthday2019'] = false; + push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2019', _id: uuid()}}; + } else if (typeof user.items.gear.owned.armor_special_birthday2017 !== 'undefined') { + set['items.gear.owned.armor_special_birthday2018'] = false; + push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2018', _id: uuid()}}; + } else if (typeof user.items.gear.owned.armor_special_birthday2016 !== 'undefined') { + set['items.gear.owned.armor_special_birthday2017'] = false; + push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2017', _id: uuid()}}; + } else if (typeof user.items.gear.owned.armor_special_birthday2015 !== 'undefined') { + set['items.gear.owned.armor_special_birthday2016'] = false; + push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2016', _id: uuid()}}; + } else if (typeof user.items.gear.owned.armor_special_birthday !== 'undefined') { + set['items.gear.owned.armor_special_birthday2015'] = false; + push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2015', _id: uuid()}}; + } else { + set['items.gear.owned.armor_special_birthday'] = false; + push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday', _id: uuid()}}; + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + return await User.update({_id: user._id}, {$inc: inc, $set: set, $push: push}).exec(); +} + +module.exports = async function processUsers () { + let query = { + migration: {$ne: MIGRATION_NAME}, + 'auth.timestamps.loggedin': {$gt: new Date('2019-01-15')}, + }; + + 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], + }; + } + + await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop + } +}; diff --git a/test/common/ops/buy/purchase.js b/test/common/ops/buy/purchase.js index fd1ab65b48..65368bcbaa 100644 --- a/test/common/ops/buy/purchase.js +++ b/test/common/ops/buy/purchase.js @@ -13,7 +13,7 @@ import forEach from 'lodash/forEach'; import moment from 'moment'; describe('shared.ops.purchase', () => { - const SEASONAL_FOOD = 'Meat'; + const SEASONAL_FOOD = 'Cake_Base'; let user; let goldPoints = 40; let analytics = {track () {}}; diff --git a/website/client/assets/scss/variables.scss b/website/client/assets/scss/variables.scss index 2a0f49aff9..bc3827916d 100644 --- a/website/client/assets/scss/variables.scss +++ b/website/client/assets/scss/variables.scss @@ -2,8 +2,8 @@ // possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer // more to be added on future seasons -$npc_market_flavor: 'winter'; -$npc_quests_flavor: 'winter'; -$npc_seasonal_flavor: 'winter'; -$npc_timetravelers_flavor: 'winter'; -$npc_tavern_flavor: 'winter'; +$npc_market_flavor: 'birthday'; +$npc_quests_flavor: 'birthday'; +$npc_seasonal_flavor: 'birthday'; +$npc_timetravelers_flavor: 'birthday'; +$npc_tavern_flavor: 'birthday'; diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json index 26c13378aa..8a0196db5e 100644 --- a/website/common/locales/en/gear.json +++ b/website/common/locales/en/gear.json @@ -511,6 +511,8 @@ "armorSpecialBirthday2017Notes": "Happy Birthday, Habitica! Wear these Whimsical Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialBirthday2018Text": "Fanciful Party Robes", "armorSpecialBirthday2018Notes": "Happy Birthday, Habitica! Wear these Fanciful Party Robes to celebrate this wonderful day. Confers no benefit.", + "armorSpecialBirthday2019Text": "Outlandish Party Robes", + "armorSpecialBirthday2019Notes": "Happy Birthday, Habitica! Wear these Outlandish Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "Rainbow Warrior Armor", "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js index 27c2232d1e..dc8cc9e8c7 100644 --- a/website/common/script/content/gear/sets/special/index.js +++ b/website/common/script/content/gear/sets/special/index.js @@ -1107,6 +1107,12 @@ let armor = { value: 90, con: 15, }, + birthday2019: { + text: t('armorSpecialBirthday2019Text'), + notes: t('armorSpecialBirthday2019Notes'), + value: 0, + canOwn: ownsItem('armor_special_birthday2019'), + }, }; let back = { diff --git a/website/common/script/content/index.js b/website/common/script/content/index.js index 4d131a0a0e..b19696735c 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -356,12 +356,12 @@ api.specialMounts = stable.specialMounts; api.mountInfo = stable.mountInfo; // For seasonal events, change these booleans: -let canBuyNormalFood = true; -let canDropNormalFood = true; +let canBuyNormalFood = false; +let canDropNormalFood = false; let canBuyCandyFood = false; let canDropCandyFood = false; -let canBuyCakeFood = false; -let canDropCakeFood = false; +let canBuyCakeFood = true; +let canDropCakeFood = true; api.food = { Meat: { diff --git a/website/raw_sprites/spritesmith/gear/events/birthday/broad_armor_special_birthday2019.png b/website/raw_sprites/spritesmith/gear/events/birthday/broad_armor_special_birthday2019.png new file mode 100644 index 0000000000000000000000000000000000000000..9c45413daa80051bd971528a2c80bfdb6a35f3d7 GIT binary patch literal 758 zcmeAS@N?(olHy`uVBq!ia0vp^ML-jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_%*e_pF5~uV#RCQgre;qU$B>F!Z*QLWzFa7C{NwvI z`^=tglFV3%ibid#IN%qq9*-wk#KRx`8U&O%PZt}^BSKC)V-oM9w!-U^Q z67~Jx)&5$2g?oPbnTZ*y+smXjTlw+d_4E8)d-eI9)|M-=AI-{CB0PQ=Mt#lPp#5%M zLhkP!Uv}P{Jk3gwPipa|$}hcJ)<5|i^k357t2VB8?#bGTzix)aWF61^{Kj*ttml@d zjI|f<#Oyv2wa`FQ@Yb&f3#F&(voDPcDV!C&apmHQkF%`HYBJ8+D(df;A9|9N)mlhL zrABJ)tX%s^yXq61Uv+L)UCG|&){~r^?v?ds!xi^tN04*gOlpW%Tjk%MfBX8}qKmf0)^`pjQd2GF&a2US`}y$nuaaS_Jf2Lw za(B8~&-ppE<<763KFwQM|1WB*&-|$`UQV`5*&O*U>Y&r1)62tTXIpJ5`F(QP^DNkBh&=W}htVsqMS5ZR6fa|N1WHzqx$jg4Wk(&tzBMDZhDoMyk8e z+6PyD`JV}MIzDAzd2P|F?O%3&eLLgI?Yk4hthY_8+@yTaNocLz(#4x@h5K#oNp){( eWnoC*|I6AQe}Hqz!`XX5DZ|s%&t;ucLK6U_S7fCC literal 0 HcmV?d00001 diff --git a/website/raw_sprites/spritesmith/gear/events/birthday/shop_armor_special_birthday2019.png b/website/raw_sprites/spritesmith/gear/events/birthday/shop_armor_special_birthday2019.png new file mode 100644 index 0000000000000000000000000000000000000000..b0851a198c64cad77d996abdf62ea431199fae4d GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0vp^E+EXo1|%(nCvO5$Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-BP)|MclND2MGOo~uAVNAAr-gYUf-WBoG5erWBH## z(N@=Wp zR?VKz%nUE9-~WHLbLZn&y8}mqjBb>i*=IZd{PnlhYl78sq@{NLxO_*N;aU8-8|r@7 z)~jl&NxnYs$5fyxbAPiwvqSx^?eD6?oMufF_&ocaKl|1rh1(bkvJBWA)FihHT`>K} z(Xcd#v*EpPB*VA1&uLxj8F!Sb^EN#HdTno+hGKT0bI;D5`y>vWI<g^3=2zU?d8$>UJ|J?Dd1l-;cj+q;D} ziJ7WQ_4>(BzC54lL)MoKE7cfEN^BSs9$c7GdjHL2VFn#NK86n;FB{pfpDbzfmRW?0 z^{b+8ptFzAna-K7-_GS5|~0dB5#X z20Fc(DNw9*e%^l82M-$OGHlrztNy~Ldt$A}(a&o>_Vy*mhX20vxoyqIZ{Oq?!otrB zZtbu4>=L?kLMo`&QuA{Eof{t|8;swZxqlO_pB4W4bBJ@))YrS}bpJjA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_%*e_pt}Cvx;uZq~lfS2nV@SoVw>Palq61})e_Z`y ztKy}V5*%(ZCLyh2qC)J3D<0f%n%MAz;ib~rZtv%Le2*4w^Ok+Z?J6Q`ETAZ1xkM>UCg)=I6v0#|LLEN(lgb)=F}9*D_2jl z&)3gTx zZ~7X#?qo&y^EoN|_s2zV&I&#Dc=x2k)|WG%=hVE|n)UO?#$^9hZ#-6shGb8>y6W02 ztGco(t`Bsz9e1(zdO|r%wN!bpHH&$(Q#|?_U!M)Xe3#);#N* z*_ByA^LOuC`B%4iUfpi>o9`qum(|ZcTe?a4VDFNs;t;d_51yY|{~r`g3=K`?ykSne U>z8*NbO6P*r>mdKI;Vst0K|GdCjbBd literal 0 HcmV?d00001 diff --git a/website/raw_sprites/spritesmith/npcs/npc_bailey.png b/website/raw_sprites/spritesmith/npcs/npc_bailey.png index db86596503f37fb1e6c46c161d98bdf00af70984..77347e3749998be55734b1ff491847b3ef61a1d4 100644 GIT binary patch delta 1345 zcmV-H1-|;X9HSp0iBL{Q4GJ0x0000DNk~Le0000#000182nGNE01{)qj zF%tDXyWU~_)QnsXg1umGfF&g-D{cu~zuo~lEiDa}gU91B$;?aeLj-%8$=5q`!Qa}_ z!lLflzDpT}y3D);uawEi+MZ@|YDS_iGcUm#P~>E0W&-NjZ9fHE4wCI9_zAc+0r8Fi^t&hw$*(Nv|VQY0X)nYjK#;t553x+ zW_Z_@BJgj0W;xrw^K2XIKRWUf=#9m1Mz#KzY%gm*f>zLqIoqPa`^=P^tlyc6nO{wo znU~=Ici7Vm->~xipz!{9=6{WV*B^Ju71f$wuovvZM7=DjS%dco*8f+(m-WA1KA`yq z`8487K(HUKHmKTOSGQC9C_gy*^mqriskMLcYRL7!U@zE*neB59;?~tR7Edbueg9&e zZyp(xzo-8e=&Ci}L}i29JEo0AeO>Odh}_(lM~;E^b$|Ln|9N{ni@mP+ z(fI{?sqMqGO+}c2C+5A)w)yYmC#?VBMVt6*S|0_y?Y-Rrm*Jt(Qr17`#TBeyuovt@ zFq+}-@$CTm{N7iBYJXx!AwO0J-}l!BkK&dqQyN7*2YPJd zX3$T!<+6SM7=HwGXX+l%qs(T|Q+k`&zNh^OO0XB~qkNJ>mq21-BKYSuRe?U4v;_1E zznlSG>~9CX--3O&$KX?%8ChAN7qxy5`qb1M(CzK*A%CMTGcUo1P~lmvR?RlHhHYPY z2cN4^1odvuWzaKHajQFu^sV>Tuw%VkutsKHf{zsTx_>RB{u|%nHq${~A(=F5Kj^I8 zcz*8c#TN-nnlY=dj{OG*ZbTVRz8z|wpO0f*JcNZ4xrf2rv+gga1p8rI}K{lx;8F*Ea;p({7FmqO3SqJw^X25=n@d@ zrM6f4Kj_n0Pfri)r_aOKY&N!y&*x*?P(OW;fLdH!Tu?zuwwK_;+|ufdp6Ao;E!~Rh zPF?9c^SZv_oX^Y5OYl*`Ubh5-#WkG1GV>Dr;1=vIu}1vjC&oE!00000NkvXXu0mjf D&4#xh delta 978 zcmV;@11jh5bQEFo+2IM}!pROF_a2Dolo843ffCqg*wzbg|yfJ&W^W_u8G~ z-ktOGy=Uj%-@W`kJLmlFZ?hy434cis^LoAHg#v+qMaqE9l1yr*eK4zD_&w|I2mjY- zl#H24EE&bDLJ=FrFB}f@jPZk|8%3PumiW8D@2jmP<8jPPW=KZSXl7BV;pXuw)bsU7$s)U~I1+zSU)5S7A=duYbV*V96*N zE-QLG9+>(o9Ubt2TvU{i8ww5&gKlhUns&Bi6b)UVaYn*eUf91Cv}3UybZp``XnW3F zP5vLhra&LP`bZc27)8^dD9bV&lv_WN`0cB$(PiN7+Ydm8$77&h#+NA>G8nW__ol|r zC>pv~6q&#A5a@!slVr@FCw~`7|LiS(`kJ}RLARV~Cu1;X*L!+Mf5o;Pq@PhV4T?Au zicFSe&~MHk)D-{tbUi&*gg*D_P*9?Jo&;9#e}h`jj(%exuRN z&nNxiu`zn&c?&@vn5qVCYc2*oGT$vx*>9b5HRw&nGKnRlXqsNJI)7K`-})lVqGl8DlywsHiGRV*WK0O*_wMYjX=g%4(ari_OT_l@E4q(u+U zSaud@m&--|9HPP=C6^eu_d6U@itlB69$BEvyj~K&ff$XP)_+XMD4GUEk%@Z9^;K)g zcwCfmKZ$?UqgPMJD4McBtHBTVhd2|qjVjr1uk8!yYsx0cKj`+7W9fw@qiC8HG~Qfu zI27` A82|tP diff --git a/website/raw_sprites/spritesmith/npcs/npc_justin.png b/website/raw_sprites/spritesmith/npcs/npc_justin.png index bf42f04508f35671a7bb3e4420482d9001ccd899..08ad42e374971646e176f7d5a0be85176319ef1f 100644 GIT binary patch delta 1794 zcmV+d2mSbrBCR8^zzToZNklEEujukeg_%H@Z{*9{ zKY7oQ&gFR?e)Rgje9vEp>wWIM@7ej>bI-l^c{F`Kp8@GT34wnJU{Dwo28F<&FenTP zfk9zV7!(47!k{oH3<`lkVNe(p0)xV!Fen5Dg+XCZ2n-5?!k{oH1O|mcgI@;r+|D&Q{~%O zlsEjeeaFX^e#a42UbxF+!b5>PqI{2~6Xt#qj(PK*eX4(aH>*?4>eSTKAj$)IAm2SH z*}GTixmj6$!MybSddlU)#wdMC+j*s*UcFs>wzu$yhXVNkMZVLSJI8?z={9Uoh0)>R zhE!fuP~c;2itY3kZu^slDLo@BN9lDJ2>+I7uhMgj1b8Tr@6Wls?##XDqcSm?bIi}R zwu&7zT)2Or^wkR&8dmMw!Cx2I&pZ$#)*m}?n%vOl9fbc|369194+Zi88s+U=t#K+G z^Rt&OiFNpyKJVA*VtYbm1-02USFCd^>Y!MDDxX#bMiM*}$oGpVpPHI#h>LcHq3$*v zkN7&wiwX*qK6iSe()raLJ5iob1@*aw;*SZtYqWn@-Z*`VSY8@FSS;U?G_KnbA07(i z12mV{Va~7CXatd(x#^(gvo5cP{o#Kyr7`Pn62e1)e1JxIolEObotl}g^lLUc zwsZN`<#H*^U*FlN%3loGN;p5ZPJH&tu9qD3%j>_C+5OjHJB&uUl78bZ(W$uUq`@e0Zu@9vV*F-uB#jvCcJSD}ME8Y(xZt z5~6&6m_s?{cYBYLo;*b9#SDLr?K@A6H>}X+_;X!{|GW>XEu%co<$1o(G1v7~+0dZs z=&l&SLxKFwEj^0z9P{E@k68a{hW~&46Qh;B_(Qi?zthzqQTXBAg7%9_Z!1|TqRoX* z1!3$;&-OthmA-j$tf5)Jiz^vEMZiOWd=Nx=j`^IZpH%tC$Y_SMbvxgjIOk|^rAz7l zym1ey{EIh6_(&09orLAOM9gzq=@TCrZuu)Z{9GO$3gm+rc^=X7H4Ac`Tx@^-(@}l? zsSS=8fB*eU_b9@Xy)n1FtyDy~#ZBkzy0`6G-1Lgg%u&B6J@VOE;@Fr;;GsaizvS}& zr$lBGdJ}T#V(pLBbon+T{YepF9;rFzMm5#pujeF`%o4{?Ro(~>1@iqNm*-npuVhk` ze0ARyrSk*3sx{e`ZN64%9sPfKUava^@LavB^yMe$)t*i9F~%)}26ed)uyG>2hBIX7 zP|Ln}l;?X9$mM~25FpPnFJBzfE1lK4FIghbck($_9KF($_bPpM4B;6X8me?}N5_BK z9uN|8Lph%=Jo~>ER}>uo+~MSZC6_yZJdh98h5gB&DVoRK9_pwA{;YovZ7v-1l#~?8 z!K;2y`mv~H_Qc>WG3V0Nzn|T4Sm|}FubIx=Ken=EIy{LiG)N@&_CKSM9@=ENOSx}C4<@I3+kY}>MQ k%kgl`;h{i2aO9r>01PL!5CvDZv;Y7A07*qoM6N<$f;+dL_5c6? delta 1632 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 b9e~h|E^Gl diff --git a/website/raw_sprites/spritesmith_large/promo_birthday_2019.png b/website/raw_sprites/spritesmith_large/promo_birthday_2019.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddd615ef9880a0b3e2de0148dca5e79a8be6426 GIT binary patch literal 21197 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 H=^FPhdfz%M literal 0 HcmV?d00001 diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index f0f2410a72..f5488daf27 100644 --- a/website/server/controllers/api-v3/news.js +++ b/website/server/controllers/api-v3/news.js @@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth'; let api = {}; // @TODO export this const, cannot export it from here because only routes are exported from controllers -const LAST_ANNOUNCEMENT_TITLE = 'JANUARY SUBSCRIBER ITEMS REVEALED!'; +const LAST_ANNOUNCEMENT_TITLE = 'HABITICA BIRTHDAY PARTY!'; const worldDmg = { // @TODO bailey: false, }; @@ -30,14 +30,29 @@ api.getNews = {

${res.t('newStuff')}

-

1/28/2019 - ${LAST_ANNOUNCEMENT_TITLE}

+

1/31/2019 - ${LAST_ANNOUNCEMENT_TITLE}


+
+

Habitica Birthday Bash!

+

January 31st is Habitica's Birthday! Thank you so much for being a part of our community - it means a lot.

+

Now come join us and the NPCs as we celebrate!

+

Cake for Everybody!

+

In honor of the festivities, everyone has been awarded an assortment of yummy cake to feed to your pets! Plus, for the next two days Alexander the Merchant is selling cake in his shop, and cake will sometimes drop when you complete your tasks. Cake works just like normal pet food, but if you want to know what type of pet likes each slice, the wiki has spoilers.

+

Party Robes

+

There are Party Robes available for free in the Rewards column! What color you receive is based on how many Habitica Birthdays you've celebrated. Don them with pride!

+

Birthday Bash Achievement

+

In honor of Habitica's birthday, everyone has been awarded the Habitica Birthday Bash achievement! This achievement stacks for each Birthday Bash you celebrate with us.

-

The January Subscriber Items have been revealed: the Polaris Item Set! You only have until Jan 31 to receive the item set when you subscribe. If you're already an active subscriber, reload the site and then head to Inventory > Items to claim your gear!

-

Subscribers also receive the ability to buy Gems for Gold -- the longer you subscribe, the more Gems you can buy per month! There are other perks as well, such as longer access to uncompressed data and a cute Jackalope pet. Best of all, subscriptions let us keep Habitica running. Thank you very much for your support -- it means a lot to us.

+

Last Chance for Polaris Set

+

Reminder: tomorrow is the final day to subscribe and receive the Polaris Armor Set! Subscribing also lets you buy Gems for Gold. The longer your subscription, the more Gems you get!

+

Thanks so much for your support! You help keep Habitica running.

by Beffymaroo
+
+

Last Chance for Winter Wonderland Hatching Potions

+

Reminder: tomorrow is the final day to buy Starry Night, Peppermint, and Icy Snow Hatching Potions! If they come back, it won't be until next year at the earliest, so don't delay!

+
by JinjooHat, Vampitch, Lemoness, and SabreCat
`, }); diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 020dd59ebe..3279421207 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -127,6 +127,10 @@ function _setUpNewUser (user) { user.items.quests.dustbunnies = 1; user.purchased.background.violet = true; user.preferences.background = 'violet'; + user.items.gear.owned.armor_special_birthday = true; // eslint-disable-line camelcase + user.items.gear.equipped.armor = 'armor_special_birthday'; + user.items.gear.costume.armor = 'armor_special_birthday'; + user.migration = '20190131_habit_birthday'; if (user.registeredThrough === 'habitica-web') { taskTypes = ['habit', 'daily', 'todo', 'reward', 'tag'];