diff --git a/migrations/archive/2020/20200721_summer_splash_orcas.js b/migrations/archive/2020/20200721_summer_splash_orcas.js new file mode 100644 index 0000000000..ddb0128892 --- /dev/null +++ b/migrations/archive/2020/20200721_summer_splash_orcas.js @@ -0,0 +1,59 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20200721_summer_splash_orcas'; + +import { model as User } from '../../../website/server/models/user'; + +const progressCount = 1000; +let count = 0; + +async function updateUser (user) { + count++; + + let set; + + if (user && user.items && user.items.pets && typeof user.items.pets['Orca-Base'] !== 'undefined') { + set = { migration: MIGRATION_NAME }; + } else if (user && user.items && user.items.mounts && typeof user.items.mounts['Orca-Base'] !== 'undefined') { + set = { migration: MIGRATION_NAME, 'items.pets.Orca-Base': 5 }; + } else { + set = { migration: MIGRATION_NAME, 'items.mounts.Orca-Base': 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('2020-06-21')}, + }; + + 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/migrations/migration-runner.js b/migrations/migration-runner.js index c66ac2014a..e63ac8b749 100644 --- a/migrations/migration-runner.js +++ b/migrations/migration-runner.js @@ -18,7 +18,7 @@ function setUpServer () { setUpServer(); // Replace this with your migration -const processUsers = require().default; +const processUsers = require('./archive/2020/20200721_summer_splash_orcas').default; processUsers() .then(() => { diff --git a/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css b/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css index f2851c3828..1b57d4b6bb 100644 --- a/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css +++ b/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css @@ -16,6 +16,12 @@ width: 282px; height: 147px; } +.promo_orcas { + background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); + background-position: -1019px -592px; + width: 219px; + height: 147px; +} .promo_sand_sculpture_potions { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); background-position: -1019px -296px; @@ -84,13 +90,13 @@ } .scene_nakonana { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -1019px -722px; + background-position: -1019px -740px; width: 141px; height: 169px; } .scene_strength { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -1019px -592px; + background-position: -1239px -592px; width: 192px; height: 129px; } diff --git a/website/client/src/assets/images/sprites/spritesmith-largeSprites-0.png b/website/client/src/assets/images/sprites/spritesmith-largeSprites-0.png index 0a8c6e11dd..4889dcd9b3 100644 Binary files a/website/client/src/assets/images/sprites/spritesmith-largeSprites-0.png and b/website/client/src/assets/images/sprites/spritesmith-largeSprites-0.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_orcas.png b/website/raw_sprites/spritesmith_large/promo_orcas.png new file mode 100644 index 0000000000..83a809a654 Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_orcas.png differ diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index bbf57c60c6..b65972a33e 100644 --- a/website/server/controllers/api-v3/news.js +++ b/website/server/controllers/api-v3/news.js @@ -4,7 +4,7 @@ const api = {}; // @TODO export this const, cannot export it from here because only routes are exported from // controllers -const LAST_ANNOUNCEMENT_TITLE = 'BLOG POST: GOOD STARTER QUESTS!'; +const LAST_ANNOUNCEMENT_TITLE = 'ORCAS FOR EVERYONE!'; const worldDmg = { // @TODO bailey: false, }; @@ -31,22 +31,17 @@ api.getNews = {

${res.t('newStuff')}

-

7/16/2020 - ${LAST_ANNOUNCEMENT_TITLE}

+

7/21/2020 - ${LAST_ANNOUNCEMENT_TITLE}


-
+

- This month's featured Wiki article is about Easy Starter Quests for Beginners! We - hope that it will help you as you take on Habitica's bosses and your tasks! Be sure to - check it out, and let us know what you think by reaching out on Twitter, Tumblr, and Facebook. + It looks like some friendly Orcas are swimming into Habiticans' stables! In honor of the + Summer Splash event, everyone who didn't already have an Orca gets either the mount or + the pet. Enjoy!

-
by shanaqui and the Wiki Wizards
+
by Beffymaroo and UncommonCriminal
`, });