From 3af756a90d00e9739e6f1be292ef35c9c5306360 Mon Sep 17 00:00:00 2001 From: SabreCat Date: Wed, 19 Jul 2017 18:24:10 +0000 Subject: [PATCH] feat(cards): Good Luck card and achievement --- test/common/libs/achievements.test.js | 2 +- .../achievements/achievement-goodluck2x.png | Bin 0 -> 3507 bytes .../misc/inventory_special_goodluck.png | Bin 0 -> 416 bytes .../promo/promo_good_luck.png | Bin 0 -> 3747 bytes .../scenes/scene_task_list.png | Bin 0 -> 2697 bytes website/common/locales/en/generic.json | 8 ++++ website/common/script/content/achievements.js | 2 +- website/common/script/content/index.js | 5 +++ website/common/script/content/spells.js | 28 ++++++++++++++ website/common/script/libs/achievements.js | 2 +- website/server/models/user/schema.js | 3 ++ website/views/shared/new-stuff.jade | 35 +++++++++++++++--- 12 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 website/assets/sprites/spritesmith/achievements/achievement-goodluck2x.png create mode 100644 website/assets/sprites/spritesmith/misc/inventory_special_goodluck.png create mode 100644 website/assets/sprites/spritesmith_large/promo/promo_good_luck.png create mode 100644 website/assets/sprites/spritesmith_large/scenes/scene_task_list.png diff --git a/test/common/libs/achievements.test.js b/test/common/libs/achievements.test.js index ebb385bb66..784e27b993 100644 --- a/test/common/libs/achievements.test.js +++ b/test/common/libs/achievements.test.js @@ -122,7 +122,7 @@ describe('achievements', () => { }); it('card achievements exist with counts', () => { - let cardTypes = ['greeting', 'thankyou', 'birthday', 'congrats', 'getwell']; + let cardTypes = ['greeting', 'thankyou', 'birthday', 'congrats', 'getwell', 'goodluck']; cardTypes.forEach((card) => { let cardAchiev = basicAchievs[`${card}Cards`]; diff --git a/website/assets/sprites/spritesmith/achievements/achievement-goodluck2x.png b/website/assets/sprites/spritesmith/achievements/achievement-goodluck2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8d836a805ad0619507be8b7fdf42056b999b24ac GIT binary patch literal 3507 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 literal 0 HcmV?d00001 diff --git a/website/assets/sprites/spritesmith/misc/inventory_special_goodluck.png b/website/assets/sprites/spritesmith/misc/inventory_special_goodluck.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6cd11521a5bb822407a6bce0606dee524f5e0e GIT binary patch literal 416 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 N002ovPDHLkV1kE_9$^3g literal 0 HcmV?d00001 diff --git a/website/assets/sprites/spritesmith_large/scenes/scene_task_list.png b/website/assets/sprites/spritesmith_large/scenes/scene_task_list.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ab8074f23821f77c0341eb41116fb61b42c4ea GIT binary patch literal 2697 zcmXw52{>C>8;;S&GH8EVC0evqElL*>Why!uRHlvkZK)2TMMe-xC`yLTXs4*!YHLDh zYu^bPYU#8jBMGLl)ZS?%_7GZ{S~Aztd!KX9bI$Xf=X~e9@Atkp*4E~-yevc(1Omw; ztu5?;ei3MIq`|=VRTDWG=)kwGT($s-x8B_5!c<^J=C-vn0R&QbyVWGp^c2*9NvU8Y z%2Mjz@4yF?q)j8sj6on-Wu(QA4q-#{qY)1eIv#Elj*hfP&e!8~TyNmHPSvy)OXnq24d||+@8ec($I9#Dn`bM2 znf8g=Gr9SU@YFE0i$=im*F>|oNfDvV5q~a^at5;+O@U-U=X#fw+tNr*6=umD1H^## z`THA(DR1ctANGJRA^yxDSTbv==QF8TFxc7~q!ldS7{pv;+6z(!S#2O0`REw!?|-y0 zl#~R*t*6%WgVwwZU$tx&bl>UY3CC6bYK`ArIgL9N1jB^<-CisPedK$OXsv7noJQC% zyYb#8Y&p549#BwfPaeL*T8~7GEZ<+#%0Mu2Soi1{aME-Pc3*9?U^JrlW$#c)hoLr# z^>#I&^UE{*qV&ti*qs)5} zx4)Czdvz+Q)>&|({%`)V!WtbCY5_SpT&mlebK0eg$)JG7$s{ZOrxB>Tn&RC=1 zyN+vo%c>|w!Gx5rg>JZBGfifAsFR1uG!38PYQ278>*msP2-9(@BGLR`xtm~cn~a?1 zXpDjgL4fs_w_w)3e0)4frDv)eSDU!0bK_W8nygvW;Ej1<5U(||=vsnvIDjXxD5MNNty)*VD{16fb)f3^5U&nI%hBNV5R zk#g8$In4Wd^0yqivg~yA(359*rKo;w6YUAVZ<`xD5v5kf!XKjk=f1sXn?W9r@`LE5 z{mp*#i+frw8@Qu}XD=ZnrFHY-lQ<*U`vEvF+>;3V*?avB{Ro&l#;!_laH;+WfV&J6 zzlcFP?cxMcbS3rE$_4l!Ww(@(X&Zs-l@E z@#0>S(s%c2oU?bUz{sw_clGlZ#dYLjUM%j!1+wpeX$H&sYA; zd3cdu+3%ROmbdAoUhCxS=x0=_V+#_ZJ-;HO>}Jbadno=Gyd=iFatlam8@eJTvG*0Le{ z*GVy}hks20)6`niDDbGI8>{6Ez<=9(wzflm>7#l0myP_|*jLKbgfU0oV~HjN0UJ1! zI%VwRIuvDIsRe*nexvDU-h++@*Xg7f^2knIt;)>*F|Di%loM~=*Q}cN9AI&?z-L}q zKG`;`&pqpP$j3x9-YLxsmZ)+LvE~x~s4rG)#g#cA%;xMWV*Mvhg+DZ1 z&BW7Y?fv)JAxr2-B4)qShUwCbYD?`Pwc8o%LnJoCVlOAEyMA6h>pyY<3J;pFE~BQ? z83Q}joYbR}B5Dv04%g8cWP>1G(pZDm;OPa2%!#Nq^s6{O}{xANNndI~5fb zTW+-ny(AEW;XUAU>4^jUPm7DUJ%6iBmIR$Vn{@eeh1)4XT`m#xq3cP%7vU*DeSl5Wz16b%wd_7u z=~Pco{nl=3@WPlqlFiq~>t4Zm)v_Eo+VZrak@xS5P?#)EfkXNP;e@DeVus3!fCYiJ z+`;>rXG)#gV_|kNEaI+I=f+Sk%hVn=a6XNA;qIrRmB6g=0y=MoIvt{YH8Z#4qz(Du zx1~#rL953ZO)I9f;?=k2QBGVtUjUK%L9+X?Rw*>%`fJ!ce$0G{l?%^3qu=6`z>A}@ z97K~bQVNG{xuH&xB}8`dq)k73bEB(yh<>Q-)y4C9sPSR5S$Obf&WM@sc{LLd;30RE zh8$sZ_VmlE#eS*rOA)u*`zpcVY%GbK4wjPY3mcwIlh++Epjjt`3Py@M%rrLgiAPA> zU&mpn1o|V@=foo#gI5t-rI)maX!$rQKf67yx^K33k!GbVRz~BpKl{P*i&;1h{MW44 zFu%tcm@5^CwJz+o%K=`SQll#FYqRRF9n>xyzhPRLQui^l3p$RY{JXHrL{K-qa zjI=NCq39(h4{20*iaPhs0_F get well cards.", + "goodluckCard": "Good Luck Card", + "goodluckCardExplanation": "You both receive the Lucky Letter achievement!", + "goodluckCardNotes": "Send a good luck card to a party member.", + "goodluck0": "May luck always follow you!", + "goodluck1": "Wishing you lots of luck!", + "goodluck2": "I hope luck is on your side today and always!!", + "goodluckCardAchievementTitle": "Lucky Letter", + "goodluckCardAchievementText": "Wishes for good luck are great encouragement! Sent or received <%= count %> good luck cards.", "streakAchievement": "You earned a streak achievement!", "firstStreakAchievement": "21-Day Streak", "streakAchievementCount": "<%= streaks %> 21-Day Streaks", diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index e05a4a0985..ca2a7f9089 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -186,7 +186,7 @@ let ultimateGearAchievs = ['healer', 'rogue', 'warrior', 'mage'].reduce((achievs }, {}); Object.assign(achievementsData, ultimateGearAchievs); -let cardAchievs = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday', 'congrats', 'getwell'].reduce((achievs, type) => { +let cardAchievs = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday', 'congrats', 'getwell', 'goodluck'].reduce((achievs, type) => { achievs[`${type}Cards`] = { icon: `achievement-${type}`, titleKey: `${type}CardAchievementTitle`, diff --git a/website/common/script/content/index.js b/website/common/script/content/index.js index 6b2f3104d8..153c490248 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -169,6 +169,11 @@ api.cardTypes = { messageOptions: 4, yearRound: true, }, + goodluck: { + key: 'goodluck', + messageOptions: 3, + yearRound: true, + }, }; api.special = api.spells.special; diff --git a/website/common/script/content/spells.js b/website/common/script/content/spells.js index b83c1ba222..0141ffdbae 100644 --- a/website/common/script/content/spells.js +++ b/website/common/script/content/spells.js @@ -567,6 +567,34 @@ spells.special = { if (!target.flags) target.flags = {}; target.flags.cardReceived = true; + user.stats.gp -= 10; + }, + }, + goodluck: { + text: t('goodluckCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('goodluckCardNotes'), + cast (user, target) { + if (user === target) { + if (!user.achievements.goodluck) user.achievements.goodluck = 0; + user.achievements.goodluck++; + } else { + each([user, target], (u) => { + if (!u.achievements.goodluck) u.achievements.goodluck = 0; + u.achievements.goodluck++; + }); + } + + if (!target.items.special.goodluckReceived) target.items.special.goodluckReceived = []; + target.items.special.goodluckReceived.push(user.profile.name); + + if (!target.flags) target.flags = {}; + target.flags.cardReceived = true; + user.stats.gp -= 10; }, }, diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index 80c7455716..1d801d7d76 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -192,7 +192,7 @@ function _getBasicAchievements (user, language) { _addUltimateGear(result, user, {path: 'warrior', language}); _addUltimateGear(result, user, {path: 'mage', altPath: 'wizard', language}); - let cardAchievements = ['greeting', 'thankyou', 'birthday', 'congrats', 'getwell']; + let cardAchievements = ['greeting', 'thankyou', 'birthday', 'congrats', 'getwell', 'goodluck']; cardAchievements.forEach(path => { _addSimpleWithCount(result, user, {path, key: `${path}Cards`, language}); }); diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 2c21954ac4..915ed65c05 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -113,6 +113,7 @@ let schema = new Schema({ partyOn: Boolean, congrats: Number, getwell: Number, + goodluck: Number, royallyLoyal: Boolean, joinedGuild: Boolean, joinedChallenge: Boolean, @@ -295,6 +296,8 @@ let schema = new Schema({ congratsReceived: Array, getwell: {type: Number, default: 0}, getwellReceived: Array, + goodluck: {type: Number, default: 0}, + goodluckReceived: Array, }, // -------------- Animals ------------------- diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade index f0459e913e..3c9494c812 100644 --- a/website/views/shared/new-stuff.jade +++ b/website/views/shared/new-stuff.jade @@ -1,17 +1,42 @@ -h2 7/13/2017 - BEHIND THE SCENES: KING MANTA +h2 7/18/2017 - SAN DIEGO COMIC CON, GOOD LUCK CARDS, APP BUG FIXES, AND WIKI WEDNESDAY hr tr td - .promo_king_manta.center-block - h3 Behind the Scenes Blog Post: King Manta! - p Have you ever wanted to know more about King Manta, the Mage Masterclasser? Today's blog post features a spotlight on the ruler of the undersea city of Dilatory! Check it out now to learn about how he learned his masterful magic skills, his friends and family, and his hobbies! - p.small.muted by Lemoness + .promo_unconventional_armor.pull-right + h3 Habiticans at Comic-Con! + p Lemoness, Beffymaroo, and Redphoenix will be representing Habitica at San Diego Comic Con this year. If you'd like to meet them, along with other fellow Habiticans, join us at the Habitica SDCC Meetup! We'll be giving away Habitica stickers and promo codes for the Unconventional Armor set. + br + p You can find us on Saturday, July 22, at the San Diego Bayfront Hilton from 4:00-5:00 PM! Look for the purple Gryphon banner. Can't wait to meet you :) + tr + td + h3 New Card: Good Luck! + .promo_good_luck.pull-left.slight-right-margin + p A new greeting card is available in the Market: the Good Luck card! For 10 Gold, you can wish the very best of luck to a Party mate who has a big task or momentous occasion coming up. Do so, and you and the recipient will earn the Lucky Letter achievement! + p.small.muted by OuttaMyMind and ChrisSpatzerl + tr + td + .scene_task_list.pull-right + h3 Bug Fixes for the Apps + p We've recently updated our Android and iOS apps with performance improvements and bug fixes! Be sure you've downloaded the latest version of the apps for the best Habitica experience. + p.small.muted by Viirus + tr + td + h3 Blog Post: The Library of Tasks and Challenges + p This month's featured Wiki article is about the Library of Tasks and Challenges Guild! We hope that it will help you as continue to add to and adapt your Task list to fit your goals. Be sure to check it out, and let us know what you think by reaching out on Twitter, Tumblr, and Facebook. + p.small.muted by Beffymaroo and the Wiki Wizards if menuItem !== 'oldNews' hr a(href='/static/old-news', target='_blank') Read older news mixin oldNews + h2 7/13/2017 - BEHIND THE SCENES: KING MANTA + tr + td + .promo_king_manta.center-block + h3 Behind the Scenes Blog Post: King Manta! + p Have you ever wanted to know more about King Manta, the Mage Masterclasser? Today's blog post features a spotlight on the ruler of the undersea city of Dilatory! Check it out now to learn about how he learned his masterful magic skills, his friends and family, and his hobbies! + p.small.muted by Lemoness h2 7/11/2017 - NEW DISCOUNTED PET QUEST BUNDLE AND ORCAS FOR EVERYONE .promo_bundle_splashy.pull-right tr