diff --git a/migrations/archive/2021/20211021_pet_color_achievements.js b/migrations/archive/2021/20211021_pet_color_achievements.js new file mode 100644 index 0000000000..137c46488e --- /dev/null +++ b/migrations/archive/2021/20211021_pet_color_achievements.js @@ -0,0 +1,82 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20211021_pet_color_achievements'; +import { model as User } from '../../../website/server/models/user'; + +const progressCount = 1000; +let count = 0; + +async function updateUser (user) { + count++; + + const set = { + migration: MIGRATION_NAME, + }; + + if (user && user.items && user.items.pets) { + const pets = user.items.pets; + if (pets['Wolf-Shade'] > 0 + && pets['TigerCub-Shade'] > 0 + && pets['PandaCub-Shade'] > 0 + && pets['LionCub-Shade'] > 0 + && pets['Fox-Shade'] > 0 + && pets['FlyingPig-Shade'] > 0 + && pets['Dragon-Shade'] > 0 + && pets['Cactus-Shade'] > 0 + && pets['BearCub-Shade'] > 0) { + set['achievements.shadyCustomer'] = true; + } + } + + if (user && user.items && user.items.mounts) { + const mounts = user.items.mounts; + if (mounts['Wolf-Shade'] + && mounts['TigerCub-Shade'] + && mounts['PandaCub-Shade'] + && mounts['LionCub-Shade'] + && mounts['Fox-Shade'] + && mounts['FlyingPig-Shade'] + && mounts['Dragon-Shade'] + && mounts['Cactus-Shade'] + && mounts['BearCub-Shade'] ) { + set['achievements.shadeOfItAll'] = true; + } + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + return await User.update({ _id: user._id }, { $set: set }).exec(); +} + +export default async function processUsers () { + let query = { + migration: { $ne: MIGRATION_NAME }, + 'auth.timestamps.loggedin': { $gt: new Date('2021-10-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/assets/css/sprites/spritesmith-main-0.css b/website/client/src/assets/css/sprites/spritesmith-main-0.css index 79f6c4df17..87ace58889 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main-0.css +++ b/website/client/src/assets/css/sprites/spritesmith-main-0.css @@ -1,48 +1,48 @@ .achievement-alien { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1667px -1480px; + background-position: -1659px -1480px; width: 24px; height: 26px; } .achievement-alien2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -485px -1549px; + background-position: -583px -1549px; width: 48px; height: 52px; } .achievement-allThatGlitters2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -853px -1480px; + background-position: -715px -1480px; width: 64px; height: 56px; } .achievement-allYourBase2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -918px -1480px; + background-position: -780px -1480px; width: 64px; height: 56px; } .achievement-alpha2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -534px -1549px; + background-position: -632px -1549px; width: 48px; height: 52px; } .achievement-aridAuthority2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -983px -1480px; + background-position: -845px -1480px; width: 64px; height: 56px; } .achievement-armor2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -583px -1549px; + background-position: -681px -1549px; width: 48px; height: 52px; } .achievement-backToBasics2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1373px -1480px; + background-position: -1365px -1480px; width: 48px; height: 56px; } @@ -54,127 +54,127 @@ } .achievement-bewilder2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -632px -1549px; + background-position: -730px -1549px; width: 48px; height: 52px; } .achievement-birthday2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -681px -1549px; + background-position: -779px -1549px; width: 48px; height: 52px; } .achievement-boneCollector2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1422px -1480px; + background-position: -1414px -1480px; width: 48px; height: 56px; } .achievement-boot2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -730px -1549px; + background-position: -828px -1549px; width: 48px; height: 52px; } .achievement-bow2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -779px -1549px; + background-position: -877px -1549px; width: 48px; height: 52px; } .achievement-bugBonanza2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -487px -1480px; + background-position: -349px -1480px; width: 60px; height: 64px; } .achievement-burnout2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -828px -1549px; + background-position: -926px -1549px; width: 48px; height: 52px; } .achievement-cactus2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -877px -1549px; + background-position: -975px -1549px; width: 48px; height: 52px; } .achievement-cake2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -926px -1549px; + background-position: -1024px -1549px; width: 48px; height: 52px; } .achievement-cave2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -975px -1549px; + background-position: -1073px -1549px; width: 48px; height: 52px; } .achievement-challenge2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1024px -1549px; + background-position: -1122px -1549px; width: 48px; height: 52px; } .achievement-comment2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1073px -1549px; + background-position: -1171px -1549px; width: 48px; height: 52px; } .achievement-completedTask2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1471px -1480px; + background-position: -1463px -1480px; width: 48px; height: 56px; } .achievement-congrats2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1122px -1549px; + background-position: -1220px -1549px; width: 48px; height: 52px; } .achievement-costumeContest2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1171px -1549px; + background-position: -1269px -1549px; width: 48px; height: 52px; } .achievement-createdTask2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1520px -1480px; + background-position: -1512px -1480px; width: 48px; height: 56px; } .achievement-dilatory2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1220px -1549px; + background-position: -1318px -1549px; width: 48px; height: 52px; } .achievement-domesticated2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -548px -1480px; + background-position: -410px -1480px; width: 60px; height: 64px; } .achievement-dustDevil2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1569px -1480px; + background-position: -1561px -1480px; width: 48px; height: 56px; } .achievement-dysheartener2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1269px -1549px; + background-position: -1367px -1549px; width: 48px; height: 52px; } .achievement-fedPet2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1618px -1480px; + background-position: -1610px -1480px; width: 48px; height: 56px; } @@ -186,13 +186,13 @@ } .achievement-friends2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1318px -1549px; + background-position: -1416px -1549px; width: 48px; height: 52px; } .achievement-getwell2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1367px -1549px; + background-position: -1465px -1549px; width: 48px; height: 52px; } @@ -204,31 +204,31 @@ } .achievement-goodluck2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1416px -1549px; + background-position: -1514px -1549px; width: 48px; height: 52px; } .achievement-greeting2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1465px -1549px; + background-position: -1563px -1549px; width: 48px; height: 52px; } .achievement-guild2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1514px -1549px; + background-position: -1612px -1549px; width: 48px; height: 52px; } .achievement-habitBirthday2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1563px -1549px; + background-position: 0px -1628px; width: 48px; height: 52px; } .achievement-habiticaDay2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1612px -1549px; + background-position: -49px -1628px; width: 48px; height: 52px; } @@ -240,25 +240,25 @@ } .achievement-heart2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: 0px -1628px; + background-position: -98px -1628px; width: 48px; height: 52px; } .achievement-justAddWater2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -609px -1480px; + background-position: -471px -1480px; width: 60px; height: 64px; } .achievement-karaoke-2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -49px -1628px; + background-position: -147px -1628px; width: 48px; height: 52px; } .achievement-karaoke { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1667px -1507px; + background-position: -1659px -1507px; width: 24px; height: 26px; } @@ -270,19 +270,19 @@ } .achievement-legendaryBestiary2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -670px -1480px; + background-position: -532px -1480px; width: 60px; height: 64px; } .achievement-lostMasterclasser2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -98px -1628px; + background-position: -196px -1628px; width: 48px; height: 52px; } .achievement-mindOverMatter2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -731px -1480px; + background-position: -593px -1480px; width: 60px; height: 64px; } @@ -294,43 +294,43 @@ } .achievement-ninja2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -147px -1628px; + background-position: -245px -1628px; width: 48px; height: 52px; } .achievement-npc2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -196px -1628px; + background-position: -294px -1628px; width: 48px; height: 52px; } .achievement-nye2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -245px -1628px; + background-position: -343px -1628px; width: 48px; height: 52px; } .achievement-partyOn2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -294px -1628px; + background-position: -392px -1628px; width: 48px; height: 52px; } .achievement-partyUp2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -343px -1628px; + background-position: -441px -1628px; width: 48px; height: 52px; } .achievement-pearlyPro2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1048px -1480px; + background-position: -910px -1480px; width: 64px; height: 56px; } .achievement-perfect2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -392px -1628px; + background-position: -490px -1628px; width: 48px; height: 52px; } @@ -348,37 +348,37 @@ } .achievement-rat2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -441px -1628px; + background-position: -539px -1628px; width: 48px; height: 52px; } .achievement-redLetterDay2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1113px -1480px; + background-position: -975px -1480px; width: 64px; height: 56px; } .achievement-rosyOutlook2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -349px -1480px; - width: 68px; - height: 68px; + background-position: -1040px -1480px; + width: 64px; + height: 56px; } .achievement-royally-loyal2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -490px -1628px; + background-position: -588px -1628px; width: 48px; height: 52px; } .achievement-seafoam2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -539px -1628px; + background-position: -637px -1628px; width: 48px; height: 52px; } .achievement-seasonalSpecialist2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -792px -1480px; + background-position: -654px -1480px; width: 60px; height: 64px; } @@ -388,141 +388,153 @@ width: 48px; height: 56px; } -.achievement-shield2x { +.achievement-shadeOfItAll2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -588px -1628px; - width: 48px; - height: 52px; -} -.achievement-shinySeed2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -637px -1628px; - width: 48px; - height: 52px; -} -.achievement-skeletonCrew2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1178px -1480px; + background-position: -1105px -1480px; width: 64px; height: 56px; } -.achievement-snowball2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -686px -1628px; - width: 48px; - height: 52px; -} -.achievement-spookySparkles2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -735px -1628px; - width: 48px; - height: 52px; -} -.achievement-stoikalm2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -784px -1628px; - width: 48px; - height: 52px; -} -.achievement-sun2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -833px -1628px; - width: 48px; - height: 52px; -} -.achievement-sword2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -882px -1628px; - width: 48px; - height: 52px; -} -.achievement-thankyou2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -931px -1628px; - width: 48px; - height: 52px; -} -.achievement-thermometer2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -980px -1628px; - width: 48px; - height: 52px; -} -.achievement-tickledPink2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -418px -1480px; - width: 68px; - height: 68px; -} -.achievement-tree2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1029px -1628px; - width: 48px; - height: 52px; -} -.achievement-triadbingo2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1078px -1628px; - width: 48px; - height: 52px; -} -.achievement-ultimate-healer2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1127px -1628px; - width: 48px; - height: 52px; -} -.achievement-ultimate-mage2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1176px -1628px; - width: 48px; - height: 52px; -} -.achievement-ultimate-rogue2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1225px -1628px; - width: 48px; - height: 52px; -} -.achievement-ultimate-warrior2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1274px -1628px; - width: 48px; - height: 52px; -} -.achievement-undeadUndertaker2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1243px -1480px; - width: 64px; - height: 56px; -} -.achievement-unearned2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1323px -1628px; - width: 48px; - height: 52px; -} -.achievement-valentine2x { - background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1372px -1628px; - width: 48px; - height: 52px; -} -.achievement-violetsAreBlue2x { +.achievement-shadyCustomer2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); background-position: -436px -1549px; width: 48px; height: 56px; } +.achievement-shield2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -686px -1628px; + width: 48px; + height: 52px; +} +.achievement-shinySeed2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -735px -1628px; + width: 48px; + height: 52px; +} +.achievement-skeletonCrew2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1170px -1480px; + width: 64px; + height: 56px; +} +.achievement-snowball2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -784px -1628px; + width: 48px; + height: 52px; +} +.achievement-spookySparkles2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -833px -1628px; + width: 48px; + height: 52px; +} +.achievement-stoikalm2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -882px -1628px; + width: 48px; + height: 52px; +} +.achievement-sun2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -931px -1628px; + width: 48px; + height: 52px; +} +.achievement-sword2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -980px -1628px; + width: 48px; + height: 52px; +} +.achievement-thankyou2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1029px -1628px; + width: 48px; + height: 52px; +} +.achievement-thermometer2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1078px -1628px; + width: 48px; + height: 52px; +} +.achievement-tickledPink2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -485px -1549px; + width: 48px; + height: 56px; +} +.achievement-tree2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1127px -1628px; + width: 48px; + height: 52px; +} +.achievement-triadbingo2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1176px -1628px; + width: 48px; + height: 52px; +} +.achievement-ultimate-healer2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1225px -1628px; + width: 48px; + height: 52px; +} +.achievement-ultimate-mage2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1274px -1628px; + width: 48px; + height: 52px; +} +.achievement-ultimate-rogue2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1323px -1628px; + width: 48px; + height: 52px; +} +.achievement-ultimate-warrior2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1372px -1628px; + width: 48px; + height: 52px; +} +.achievement-undeadUndertaker2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1235px -1480px; + width: 64px; + height: 56px; +} +.achievement-unearned2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1421px -1628px; + width: 48px; + height: 52px; +} +.achievement-valentine2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -1470px -1628px; + width: 48px; + height: 52px; +} +.achievement-violetsAreBlue2x { + background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); + background-position: -534px -1549px; + width: 48px; + height: 56px; +} .achievement-wildBlueYonder2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1308px -1480px; + background-position: -1300px -1480px; width: 64px; height: 56px; } .achievement-wolf2x { background-image: url('~@/assets/images/sprites/spritesmith-main-0.png'); - background-position: -1421px -1628px; + background-position: -1519px -1628px; width: 48px; height: 52px; } diff --git a/website/client/src/assets/images/sprites/spritesmith-main-0.png b/website/client/src/assets/images/sprites/spritesmith-main-0.png index d599622c44..d04396d193 100644 Binary files a/website/client/src/assets/images/sprites/spritesmith-main-0.png and b/website/client/src/assets/images/sprites/spritesmith-main-0.png differ diff --git a/website/client/src/components/notifications.vue b/website/client/src/components/notifications.vue index 5c8665613a..567bb098b8 100644 --- a/website/client/src/components/notifications.vue +++ b/website/client/src/components/notifications.vue @@ -426,6 +426,22 @@ const NOTIFICATIONS = { achievement: 'domesticated', }, }, + ACHIEVEMENT_SHADY_CUSTOMER: { + achievement: true, + label: $t => `${$t('achievement')}: ${$t('achievementShadyCustomer')}`, + modalId: 'generic-achievement', + data: { + achievement: 'shadyCustomer', + }, + }, + ACHIEVEMENT_SHADE_OF_IT_ALL: { + achievement: true, + label: $t => `${$t('achievement')}: ${$t('achievementShadeOfItAll')}`, + modalId: 'generic-achievement', + data: { + achievement: 'shadeOfItAll', + }, + }, }; export default { @@ -489,6 +505,7 @@ export default { 'ACHIEVEMENT_BONE_COLLECTOR', 'ACHIEVEMENT_SKELETON_CREW', 'ACHIEVEMENT_SEEING_RED', 'ACHIEVEMENT_RED_LETTER_DAY', 'ACHIEVEMENT_LEGENDARY_BESTIARY', 'ACHIEVEMENT_SEASONAL_SPECIALIST', 'ACHIEVEMENT_VIOLETS_ARE_BLUE', 'ACHIEVEMENT_WILD_BLUE_YONDER', 'ACHIEVEMENT_DOMESTICATED', + 'ACHIEVEMENT_SHADY_CUSTOMER', 'ACHIEVEMENT_SHADE_OF_IT_ALL', ].forEach(type => { handledNotifications[type] = true; }); @@ -920,6 +937,8 @@ export default { case 'ACHIEVEMENT_VIOLETS_ARE_BLUE': case 'ACHIEVEMENT_WILD_BLUE_YONDER': case 'ACHIEVEMENT_DOMESTICATED': + case 'ACHIEVEMENT_SHADY_CUSTOMER': + case 'ACHIEVEMENT_SHADE_OF_IT_ALL': case 'GENERIC_ACHIEVEMENT': this.showNotificationWithModal(notification); break; diff --git a/website/common/locales/en/achievements.json b/website/common/locales/en/achievements.json index 06bc720e6e..d079d7e953 100644 --- a/website/common/locales/en/achievements.json +++ b/website/common/locales/en/achievements.json @@ -117,5 +117,11 @@ "achievementWildBlueYonderModalText": "You tamed all the Cotton Candy Blue Mounts!", "achievementDomesticated": "E-I-E-I-O", "achievementDomesticatedText": "Has hatched all standard colors of domesticated pets: Ferret, Guinea Pig, Rooster, Flying Pig, Rat, Bunny, Horse, and Cow!", - "achievementDomesticatedModalText": "You collected all the domesticated pets!" + "achievementDomesticatedModalText": "You collected all the domesticated pets!", + "achievementShadyCustomer": "Shady Customer", + "achievementShadyCustomerText": "Has collected all Shade Pets.", + "achievementShadyCustomerModalText": "You collected all the Shade Pets!", + "achievementShadeOfItAll": "The Shade of It All", + "achievementShadeOfItAllText": "Has tamed all Shade Mounts.", + "achievementShadeOfItAllModalText": "You tamed all the Shade Mounts!" } diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index 5b60737fc6..945e8f3596 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -257,6 +257,16 @@ const basicAchievs = { titleKey: 'achievementDomesticated', textKey: 'achievementDomesticatedText', }, + shadyCustomer: { + icon: 'achievement-shadyCustomer', + titleKey: 'achievementShadyCustomer', + textKey: 'achievementShadyCustomerText', + }, + shadeOfItAll: { + icon: 'achievement-shadeOfItAll', + titleKey: 'achievementShadeOfItAll', + textKey: 'achievementShadeOfItAllText', + }, }; Object.assign(achievementsData, basicAchievs); diff --git a/website/common/script/content/constants/animalColorAchievements.js b/website/common/script/content/constants/animalColorAchievements.js index e507cb7355..d16883d612 100644 --- a/website/common/script/content/constants/animalColorAchievements.js +++ b/website/common/script/content/constants/animalColorAchievements.js @@ -62,6 +62,13 @@ const ANIMAL_COLOR_ACHIEVEMENTS = [ mountAchievement: 'wildBlueYonder', mountNotificationType: 'ACHIEVEMENT_WILD_BLUE_YONDER', }, + { + color: 'Shade', + petAchievement: 'shadyCustomer', + petNotificationType: 'ACHIEVEMENT_SHADY_CUSTOMER', + mountAchievement: 'shadeOfItAll', + mountNotificationType: 'ACHIEVEMENT_SHADE_OF_IT_ALL', + }, ]; export default ANIMAL_COLOR_ACHIEVEMENTS; diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index 2f96994282..59deb1e7f6 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -213,6 +213,8 @@ function _getBasicAchievements (user, language) { _addSimple(result, user, { path: 'violetsAreBlue', language }); _addSimple(result, user, { path: 'wildBlueYonder', language }); _addSimple(result, user, { path: 'domesticated', language }); + _addSimple(result, user, { path: 'shadyCustomer', language }); + _addSimple(result, user, { path: 'shadeOfItAll', language }); _addSimpleWithMasterCount(result, user, { path: 'beastMaster', language }); _addSimpleWithMasterCount(result, user, { path: 'mountMaster', language }); diff --git a/website/raw_sprites/spritesmith/achievements/achievement-rosyOutlook2x.png b/website/raw_sprites/spritesmith/achievements/achievement-rosyOutlook2x.png index ffc2d7d7d3..6d9f083905 100644 Binary files a/website/raw_sprites/spritesmith/achievements/achievement-rosyOutlook2x.png and b/website/raw_sprites/spritesmith/achievements/achievement-rosyOutlook2x.png differ diff --git a/website/raw_sprites/spritesmith/achievements/achievement-shadeOfItAll2x.png b/website/raw_sprites/spritesmith/achievements/achievement-shadeOfItAll2x.png new file mode 100644 index 0000000000..b0a9466fa9 Binary files /dev/null and b/website/raw_sprites/spritesmith/achievements/achievement-shadeOfItAll2x.png differ diff --git a/website/raw_sprites/spritesmith/achievements/achievement-shadyCustomer2x.png b/website/raw_sprites/spritesmith/achievements/achievement-shadyCustomer2x.png new file mode 100644 index 0000000000..b03d687eab Binary files /dev/null and b/website/raw_sprites/spritesmith/achievements/achievement-shadyCustomer2x.png differ diff --git a/website/raw_sprites/spritesmith/achievements/achievement-tickledPink2x.png b/website/raw_sprites/spritesmith/achievements/achievement-tickledPink2x.png index efab282020..ae4575e969 100644 Binary files a/website/raw_sprites/spritesmith/achievements/achievement-tickledPink2x.png and b/website/raw_sprites/spritesmith/achievements/achievement-tickledPink2x.png differ diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index b2fe24db5c..d61a07ae81 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -145,6 +145,8 @@ export default new Schema({ violetsAreBlue: Boolean, wildBlueYonder: Boolean, domesticated: Boolean, + shadyCustomer: Boolean, + shadeOfItAll: Boolean, // Onboarding Guide createdTask: Boolean, completedTask: Boolean, diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index b411bd2082..cafb80ce4c 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -68,6 +68,8 @@ const NOTIFICATION_TYPES = [ 'ACHIEVEMENT_VIOLETS_ARE_BLUE', 'ACHIEVEMENT_WILD_BLUE_YONDER', 'ACHIEVEMENT_DOMESTICATED', + 'ACHIEVEMENT_SHADY_CUSTOMER', + 'ACHIEVEMENT_SHADE_OF_IT_ALL', 'ACHIEVEMENT', // generic achievement notification, details inside `notification.data` 'DROP_CAP_REACHED', ];