From c9427ad34cb4e8f74b9fa1f6719fcf08abc8a7b8 Mon Sep 17 00:00:00 2001 From: MathWhiz Date: Tue, 6 Jun 2017 19:04:54 -0700 Subject: [PATCH] =?UTF-8?q?New=20cards=20=E2=80=94=20Congratulations,=20Ge?= =?UTF-8?q?t=20Well=20(#8655)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add card and achievement sprite for Congrats card * Add data regarding Congrats card * Add Get Well card * Add Get Well images * Add schema * Remove `if (!target.flags) target.flags = {};` code from cards * Remove white backgrounds for congrats sprites * add inital tests for cards * Fix card tests * Fix invalid urls in tests * Update POST-user_class_cast_spellId.test.js * Update POST-user_class_cast_spellId.test.js * Update POST-user_class_cast_spellId.test.js * Update congrats card sprite * Fix card logic * Fix user schema * Change achievement values for new cards to Number * Resize congrats and getwell cards This will make them be sized properly * Separate Market from Drops * Extract cards to new section * fix(sprites): revert spritesheet changes * Add flags if target does not have them --- .../user/POST-user_class_cast_spellId.test.js | 21 ++++ test/common/libs/achievements.test.js | 2 +- .../achievements/achievement-congrats2x.png | Bin 0 -> 849 bytes .../achievements/achievement-getwell2x.png | Bin 0 -> 3530 bytes .../misc/inventory_special_congrats.png | Bin 0 -> 271 bytes .../misc/inventory_special_getwell.png | Bin 0 -> 232 bytes website/common/locales/en/generic.json | 20 ++++ website/common/script/content/achievements.js | 2 +- website/common/script/content/index.js | 10 ++ website/common/script/content/spells.js | 56 +++++++++++ website/common/script/libs/achievements.js | 2 +- website/server/models/user/schema.js | 6 ++ website/views/options/inventory/drops.jade | 91 +---------------- website/views/options/inventory/market.jade | 93 ++++++++++++++++++ 14 files changed, 210 insertions(+), 93 deletions(-) create mode 100644 website/assets/sprites/spritesmith/achievements/achievement-congrats2x.png create mode 100644 website/assets/sprites/spritesmith/achievements/achievement-getwell2x.png create mode 100644 website/assets/sprites/spritesmith/misc/inventory_special_congrats.png create mode 100644 website/assets/sprites/spritesmith/misc/inventory_special_getwell.png create mode 100644 website/views/options/inventory/market.jade diff --git a/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js b/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js index 3793e789dd..9453757530 100644 --- a/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js +++ b/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js @@ -221,6 +221,27 @@ describe('POST /user/class/cast/:spellId', () => { expect(syncedGroupTask.value).to.equal(0); }); + it('increases both user\'s achievement values', async () => { + let party = await createAndPopulateGroup({ + members: 1, + }); + let leader = party.groupLeader; + let recipient = party.members[0]; + await leader.update({'stats.gp': 10}); + await leader.post(`/user/class/cast/birthday?targetId=${recipient._id}`); + await leader.sync(); + await recipient.sync(); + expect(leader.achievements.birthday).to.equal(1); + expect(recipient.achievements.birthday).to.equal(1); + }); + + it('only increases user\'s achievement one if target == caster', async () => { + await user.update({'stats.gp': 10}); + await user.post(`/user/class/cast/birthday?targetId=${user._id}`); + await user.sync(); + expect(user.achievements.birthday).to.equal(1); + }); + // TODO find a way to have sinon working in integration tests // it doesn't work when tests are running separately from server it('passes correct target to spell when targetType === \'task\''); diff --git a/test/common/libs/achievements.test.js b/test/common/libs/achievements.test.js index 824d5280b4..390f3bf7bf 100644 --- a/test/common/libs/achievements.test.js +++ b/test/common/libs/achievements.test.js @@ -174,7 +174,7 @@ describe('achievements', () => { }); it('card achievements exist with counts', () => { - let cardTypes = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday']; + let cardTypes = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday', 'congrats', 'getwell']; cardTypes.forEach((card) => { let cardAchiev = seasonalAchievs[`${card}Cards`]; diff --git a/website/assets/sprites/spritesmith/achievements/achievement-congrats2x.png b/website/assets/sprites/spritesmith/achievements/achievement-congrats2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6e58e3cedfaccac7c70b5ea918bfc43af17d2c1b GIT binary patch literal 849 zcmV-X1FrmuP)UO1(UyX+oz#V>kZzRjmW2dJJ^~(||O(2{Aufxw?%x4ied~l#pzbuht0$~N9;~eAc z_|w*oECNSHKNjj+M7-Q^34|5E9rqj`8C=XFFg>@sP~Reg+^|TP1i}iiI?gek>$r!< zB7)qoNOTaWjDVY$w~1+RKGpGEJA40X_R@z{4~AR^5#+|XOJC$X=YmNfoB%6yJjXo8 zJ-buew{l^PKxG7^h7LP_XtZCXY*?FBCStRhgoC~$e2=GG3avlz|qc{&|+4-5d zuTo`rPzjto-j>gm70nqYVdcUafyxMA@=A8pk}w2jmLphDU%&BBNA_lG4%{_nq%pSRg-;KLQAgq9T zU7hDxWdheGHfNcB;i^8Ba4>;-@9*DTEso6DIS@_&W_#XRCkViKIC}SrKKHF-{Ng9M z#P@kQ!2L4Efp7xg6sFaf)Oi672e4-P^7UJ}1rEbev~%Omf_w#`1N-`gK4cOICm=T${`W{+dS%Yag)joFP|Dqr z@g54+{s6|K(geZ@uyTR-u)LAlbDXbR?OV>{es_lk16w!&-c#vc1$p;-&btIEBY=gV z%yTAo)XM?RA$}}-`@_iuDkFd$<-Z=J&SH61iE^sr+z)rB-U@~A0z4vK4wQAgYXmlm bfS()*esWz(q`v?F002ovPDHLkV1fVu)qjwX literal 0 HcmV?d00001 diff --git a/website/assets/sprites/spritesmith/achievements/achievement-getwell2x.png b/website/assets/sprites/spritesmith/achievements/achievement-getwell2x.png new file mode 100644 index 0000000000000000000000000000000000000000..45f1790b764c5b47c7bae592e3eef6edfab5e48c GIT binary patch literal 3530 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 Eg7`zn>;M1& literal 0 HcmV?d00001 diff --git a/website/assets/sprites/spritesmith/misc/inventory_special_congrats.png b/website/assets/sprites/spritesmith/misc/inventory_special_congrats.png new file mode 100644 index 0000000000000000000000000000000000000000..2bf35d30b0776cef7fc984b5d4765cd0f9fd71f0 GIT binary patch literal 271 zcmV+q0r38bP)J53}+$t@HC!A58ye(i|8Vyo1mLRXG5G4p3(=cjhNK$ga0B@@P)424I)J5xjfIFqIE8jLuHh2a)^@Jr63!4Sk1O)Sfss4n^TOAN9C?ahV%JHM zBx%GB_ig{#?y^aPglrrZ4HB|qC9uV5l?DmfAb3(R$SESFip|%vzQ!OSzeL`S%e3cp zKe*T9Jh{Z^DM^x~R(b from <%= userName %>", "greetingCard": "Greeting Card", @@ -180,6 +181,25 @@ "birthday0": "Happy birthday to you!", "birthdayCardAchievementTitle": "Birthday Bonanza", "birthdayCardAchievementText": "Many happy returns! Sent or received <%= count %> birthday cards.", + "congratsCard": "Congratulations Card", + "congratsCardExplanation": "You both recieve the Congratulatory Companion achievement!", + "congratsCardNotes": "Send a Congratulations card to a party member.", + "congrats0": "Congratulations on your success!", + "congrats1": "I'm so proud of you!", + "congrats2": "Well done!", + "congrats3": "A round of applause for you!", + "congrats4": "Bask in your well-deserved success!", + "congratsCardAchievementTitle": "Congratulatory Companion", + "congratsCardAchievementText": "It's great to celebrate your friends' achievements! Sent or received <%= count %> congratulations cards.", + "getwellCard": "Get Well Card", + "getwellCardExplanation": "You both recieve the Caring Confidant achievement!", + "getwellCardNotes": "Send a Get Well card to a party member.", + "getwell0": "Hope you feel better soon!", + "getwell1": "Take care! <3", + "getwell2": "You're in my thoughts!", + "getwell3": "Sorry you're not feeling your best!", + "getwellCardAchievementTitle": "Caring Confidant", + "getwellCardAchievementText": "Well-wishes are always appreciated. Sent or received <%= count %> get well 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 067a4a0ea9..56ea6e1608 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -181,7 +181,7 @@ let ultimateGearAchievs = ['healer', 'rogue', 'warrior', 'mage'].reduce((achievs }, {}); Object.assign(achievementsData, ultimateGearAchievs); -let cardAchievs = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday'].reduce((achievs, type) => { +let cardAchievs = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday', 'congrats', 'getwell'].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 7665ff2375..c8882cd878 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -144,6 +144,16 @@ api.cardTypes = { messageOptions: 1, yearRound: true, }, + congrats: { + key: 'congrats', + messageOptions: 5, + yearRound: true, + }, + getwell: { + key: 'getwell', + messageOptions: 4, + yearRound: true, + }, }; api.special = api.spells.special; diff --git a/website/common/script/content/spells.js b/website/common/script/content/spells.js index 9d73f49a3f..b83c1ba222 100644 --- a/website/common/script/content/spells.js +++ b/website/common/script/content/spells.js @@ -511,6 +511,62 @@ spells.special = { if (!target.flags) target.flags = {}; target.flags.cardReceived = true; + user.stats.gp -= 10; + }, + }, + congrats: { + text: t('congratsCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('congratsCardNotes'), + cast (user, target) { + if (user === target) { + if (!user.achievements.congrats) user.achievements.congrats = 0; + user.achievements.congrats++; + } else { + each([user, target], (u) => { + if (!u.achievements.congrats) u.achievements.congrats = 0; + u.achievements.congrats++; + }); + } + + if (!target.items.special.congratsReceived) target.items.special.congratsReceived = []; + target.items.special.congratsReceived.push(user.profile.name); + + if (!target.flags) target.flags = {}; + target.flags.cardReceived = true; + + user.stats.gp -= 10; + }, + }, + getwell: { + text: t('getwellCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('getwellCardNotes'), + cast (user, target) { + if (user === target) { + if (!user.achievements.getwell) user.achievements.getwell = 0; + user.achievements.getwell++; + } else { + each([user, target], (u) => { + if (!u.achievements.getwell) u.achievements.getwell = 0; + u.achievements.getwell++; + }); + } + + if (!target.items.special.getwellReceived) target.items.special.getwellReceived = []; + target.items.special.getwellReceived.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 1d49449a3a..b587dc4411 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -240,7 +240,7 @@ function _getSeasonalAchievements (user, language) { _addPlural(result, user, {path: 'costumeContests', language}); - let cardAchievements = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday']; + let cardAchievements = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday', 'congrats', 'getwell']; 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 3ac8207eb7..444ec8b9fa 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -111,6 +111,8 @@ let schema = new Schema({ birthday: Number, partyUp: Boolean, partyOn: Boolean, + congrats: Number, + getwell: Number, royallyLoyal: Boolean, joinedGuild: Boolean, }, @@ -288,6 +290,10 @@ let schema = new Schema({ thankyouReceived: Array, birthday: {type: Number, default: 0}, birthdayReceived: Array, + congrats: {type: Number, default: 0}, + congratsReceived: Array, + getwell: {type: Number, default: 0}, + getwellReceived: Array, }, // -------------- Animals ------------------- diff --git a/website/views/options/inventory/drops.jade b/website/views/options/inventory/drops.jade index a0716bf0e2..655bc3ef44 100644 --- a/website/views/options/inventory/drops.jade +++ b/website/views/options/inventory/drops.jade @@ -79,93 +79,4 @@ ng-click='openCardsModal(type.key, type.messageOptions)') .badge.badge-info.stack-count {{user.items.special[received].length}} - .col-md-6.border-left - h2=env.t('market') - .npc_alex_container - .pull-left-sm.col-centered(class="#{env.worldDmg.market ? 'npc_alex_broken' : 'npc_alex'}") - .popover.static-popover.fade.right.in.pull-left-sm - .arrow.hidden-xs - h3.popover-title - a(target='_blank', href='http://www.kickstarter.com/profile/523661924')=env.t('alexander') - .popover-content - p=env.t('welcomeMarket') - hr(ng-show='selectedEgg || selectedPotion || selectedFood') - div(ng-show='selectedEgg || selectedPotion || selectedFood') - .pull-left.customize-option(class='Pet_Egg_{{selectedEgg.key}}' ng-show='selectedEgg') - p(ng-show='selectedEgg') - !=env.t('displayEggForGold', {itemType: "{{selectedEgg.text()}}"}) - .pull-left.customize-option(class='Pet_HatchingPotion_{{selectedPotion.key}}' ng-show='selectedPotion') - p(ng-show='selectedPotion') - !=env.t('displayPotionForGold', {itemType: "{{selectedPotion.text()}}"}) - .pull-left.customize-option(class='Pet_Food_{{selectedFood.key}}' ng-show='selectedFood') - p(ng-show='selectedFood') - !=env.t('displayItemForGold', {itemType: "{{selectedFood.text()}}"}) - .clearfix - button.btn.btn-primary.btn-block(ng-show='selectedEgg', ng-click='sellInventory()')=env.t('sellForGold', {itemType: "{{selectedEgg.text()}}", gold: "{{selectedEgg.value}}"}) - button.btn.btn-primary.btn-block(ng-show='selectedPotion', ng-click='sellInventory()')=env.t('sellForGold', {itemType: "{{selectedPotion.text()}}", gold: "{{selectedPotion.value}}"}) - button.btn.btn-primary.btn-block(ng-show='selectedFood', ng-click='sellInventory()')=env.t('sellForGold', {item: "{{selectedFood.text()}}", gold: "{{selectedFood.value}}"}) - - menu.inventory-list(type='list') - li.customize-menu(ng-repeat='category in marketShopCategories') - menu.pets-menu(label='{{category.text}}', ng-if='category.items.length > 0') - p.muted(ng-bind-html='category.notes') - - div(ng-repeat='item in category.items') - button.customize-option(class='{{item.class}}', - popover='{{item.notes}}', popover-append-to-body='true', - popover-title!='{{item.text}}', - popover-trigger='mouseenter', popover-placement='top', - ng-click='purchase(item.purchaseType, item)') - p {{item.value}}  - span.Pet_Currency_Gem1x.inline-gems(ng-if='item.currency === "gems"') - span(class='shop_gold', ng-if='item.currency === "gold"') - - li.customize-menu - menu.pets-menu(label=env.t('special')) - div - button.customize-option(class='inventory_special_fortify', - popover=env.t('fortifyPop'), - popover-title=env.t('fortifyName'), - popover-trigger='mouseenter', popover-placement='top', - popover-append-to-body='true', - ng-click='openModal("reroll")') - p - | 4  - span.Pet_Currency_Gem1x.inline-gems - div(ng-show='user.flags.rebirthEnabled') - button.customize-option(class='rebirth_orb', - popover=env.t('rebirthPop'), popover-title=env.t('rebirthName'), - popover-trigger='mouseenter', popover-placement='top', - popover-append-to-body='true', - ng-click='openModal("rebirth")') - p(ng-show='user.stats.lvl < 100') - | 6  - span.Pet_Currency_Gem1x.inline-gems - div(ng-show='petCount >= 90 || mountCount >= 90') - button.customize-option(popover=env.t('petKeyPop'), popover-title=env.t('petKeyName'), - popover-trigger='mouseenter', popover-placement='top', - popover-append-to-body='true', - ng-click='openModal("pet-key", {size:"lg", controller:"InventoryCtrl"})', class='pet_key') - p(ng-show='petCount < 90 || mountCount < 90 || !user.achievements.triadBingo') - | 4  - span.Pet_Currency_Gem1x.inline-gems - div(ng-if='user.purchased.plan.customerId', ng-class='::{transparent:(Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought) < 1}') - button.customize-option(popover=env.t('subGemPop'), popover-title=env.t('subGemName'), - popover-trigger='mouseenter', popover-placement='top', - popover-append-to-body='true', - ng-click='User.purchase({params:{type:"gems",key:"gem"}})') - span.Pet_Currency_Gem.inline-gems - .badge.badge-success.stack-count {{Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought}} - p - | 20  - span.shop_gold - div(ng-repeat='type in Content.cardTypes', ng-show='type.yearRound') - button.customize-option(class='inventory_special_{{::type.key}}', - popover='{{::Content.spells.special[type.key].notes()}}', - popover-title='{{::Content.spells.special[type.key].text()}}', - popover-trigger='mouseenter', popover-placement='right', - popover-append-to-body='true', - ng-click='castStart(Content.spells.special[type.key])') - p - | {{Content.spells.special[type.key].value}} - span(class='shop_gold') + include market.jade diff --git a/website/views/options/inventory/market.jade b/website/views/options/inventory/market.jade new file mode 100644 index 0000000000..32cde11fb3 --- /dev/null +++ b/website/views/options/inventory/market.jade @@ -0,0 +1,93 @@ +.col-md-6.border-left + h2=env.t('market') + .npc_alex_container + .pull-left-sm.col-centered(class="#{env.worldDmg.market ? 'npc_alex_broken' : 'npc_alex'}") + .popover.static-popover.fade.right.in.pull-left-sm + .arrow.hidden-xs + h3.popover-title + a(target='_blank', href='http://www.kickstarter.com/profile/523661924')=env.t('alexander') + .popover-content + p=env.t('welcomeMarket') + hr(ng-show='selectedEgg || selectedPotion || selectedFood') + div(ng-show='selectedEgg || selectedPotion || selectedFood') + .pull-left.customize-option(class='Pet_Egg_{{selectedEgg.key}}' ng-show='selectedEgg') + p(ng-show='selectedEgg') + !=env.t('displayEggForGold', {itemType: "{{selectedEgg.text()}}"}) + .pull-left.customize-option(class='Pet_HatchingPotion_{{selectedPotion.key}}' ng-show='selectedPotion') + p(ng-show='selectedPotion') + !=env.t('displayPotionForGold', {itemType: "{{selectedPotion.text()}}"}) + .pull-left.customize-option(class='Pet_Food_{{selectedFood.key}}' ng-show='selectedFood') + p(ng-show='selectedFood') + !=env.t('displayItemForGold', {itemType: "{{selectedFood.text()}}"}) + .clearfix + button.btn.btn-primary.btn-block(ng-show='selectedEgg', ng-click='sellInventory()')=env.t('sellForGold', {itemType: "{{selectedEgg.text()}}", gold: "{{selectedEgg.value}}"}) + button.btn.btn-primary.btn-block(ng-show='selectedPotion', ng-click='sellInventory()')=env.t('sellForGold', {itemType: "{{selectedPotion.text()}}", gold: "{{selectedPotion.value}}"}) + button.btn.btn-primary.btn-block(ng-show='selectedFood', ng-click='sellInventory()')=env.t('sellForGold', {item: "{{selectedFood.text()}}", gold: "{{selectedFood.value}}"}) + + menu.inventory-list(type='list') + li.customize-menu(ng-repeat='category in marketShopCategories') + menu.pets-menu(label='{{category.text}}', ng-if='category.items.length > 0') + p.muted(ng-bind-html='category.notes') + + div(ng-repeat='item in category.items') + button.customize-option(class='{{item.class}}', + popover='{{item.notes}}', popover-append-to-body='true', + popover-title!='{{item.text}}', + popover-trigger='mouseenter', popover-placement='top', + ng-click='purchase(item.purchaseType, item)') + p {{item.value}}  + span.Pet_Currency_Gem1x.inline-gems(ng-if='item.currency === "gems"') + span(class='shop_gold', ng-if='item.currency === "gold"') + + li.customize-menu + menu.pets-menu(label=env.t('cards')) + div(ng-repeat='type in Content.cardTypes', ng-show='type.yearRound') + button.customize-option(class='inventory_special_{{::type.key}}', + popover='{{::Content.spells.special[type.key].notes()}}', + popover-title='{{::Content.spells.special[type.key].text()}}', + popover-trigger='mouseenter', popover-placement='right', + popover-append-to-body='true', + ng-click='castStart(Content.spells.special[type.key])') + p + | {{Content.spells.special[type.key].value}} + span(class='shop_gold') + + li.customize-menu + menu.pets-menu(label=env.t('special')) + div + button.customize-option(class='inventory_special_fortify', + popover=env.t('fortifyPop'), + popover-title=env.t('fortifyName'), + popover-trigger='mouseenter', popover-placement='top', + popover-append-to-body='true', + ng-click='openModal("reroll")') + p + | 4  + span.Pet_Currency_Gem1x.inline-gems + div(ng-show='user.flags.rebirthEnabled') + button.customize-option(class='rebirth_orb', + popover=env.t('rebirthPop'), popover-title=env.t('rebirthName'), + popover-trigger='mouseenter', popover-placement='top', + popover-append-to-body='true', + ng-click='openModal("rebirth")') + p(ng-show='user.stats.lvl < 100') + | 6  + span.Pet_Currency_Gem1x.inline-gems + div(ng-show='petCount >= 90 || mountCount >= 90') + button.customize-option(popover=env.t('petKeyPop'), popover-title=env.t('petKeyName'), + popover-trigger='mouseenter', popover-placement='top', + popover-append-to-body='true', + ng-click='openModal("pet-key", {size:"lg", controller:"InventoryCtrl"})', class='pet_key') + p(ng-show='petCount < 90 || mountCount < 90 || !user.achievements.triadBingo') + | 4  + span.Pet_Currency_Gem1x.inline-gems + div(ng-if='user.purchased.plan.customerId', ng-class='::{transparent:(Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought) < 1}') + button.customize-option(popover=env.t('subGemPop'), popover-title=env.t('subGemName'), + popover-trigger='mouseenter', popover-placement='top', + popover-append-to-body='true', + ng-click='User.purchase({params:{type:"gems",key:"gem"}})') + span.Pet_Currency_Gem.inline-gems + .badge.badge-success.stack-count {{Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought}} + p + | 20  + span.shop_gold \ No newline at end of file