From e597906f358fcc2d898434fed313f8150788c830 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 27 Nov 2019 15:45:37 -0600 Subject: [PATCH] feat(content): Harvest Feast 2019 --- .../archive/2019/20191127_harvest_feast.js | 126 ++++++++++++++++++ .../spritesmith_large/promo_harvest_feast.png | Bin 0 -> 22948 bytes website/server/controllers/api-v3/news.js | 60 +++++++-- website/server/models/user/hooks.js | 2 + 4 files changed, 180 insertions(+), 8 deletions(-) create mode 100644 migrations/archive/2019/20191127_harvest_feast.js create mode 100644 website/raw_sprites/spritesmith_large/promo_harvest_feast.png diff --git a/migrations/archive/2019/20191127_harvest_feast.js b/migrations/archive/2019/20191127_harvest_feast.js new file mode 100644 index 0000000000..9ee1938b10 --- /dev/null +++ b/migrations/archive/2019/20191127_harvest_feast.js @@ -0,0 +1,126 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20191127_harvest_feast'; +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 set = {}; + let inc; + let push; + + set.migration = MIGRATION_NAME; + + if (typeof user.items.gear.owned.head_special_turkeyHelmGilded !== 'undefined') { + inc = { + 'items.food.Pie_Base': 1, + 'items.food.Pie_CottonCandyBlue': 1, + 'items.food.Pie_CottonCandyPink': 1, + 'items.food.Pie_Desert': 1, + 'items.food.Pie_Golden': 1, + 'items.food.Pie_Red': 1, + 'items.food.Pie_Shade': 1, + 'items.food.Pie_Skeleton': 1, + 'items.food.Pie_Zombie': 1, + 'items.food.Pie_White': 1, + } + } else if (typeof user.items.gear.owned.armor_special_turkeyArmorBase !== 'undefined') { + set['items.gear.owned.head_special_turkeyHelmGilded'] = false; + set['items.gear.owned.armor_special_turkeyArmorGilded'] = false; + set['items.gear.owned.back_special_turkeyTailGilded'] = false; + push = [ + { + type: 'marketGear', + path: 'gear.flat.head_special_turkeyHelmGilded', + _id: uuid(), + }, + { + type: 'marketGear', + path: 'gear.flat.armor_special_turkeyArmorGilded', + _id: uuid(), + }, + { + type: 'marketGear', + path: 'gear.flat.back_special_turkeyTailGilded', + _id: uuid(), + }, + ]; + } else if (user.items && user.items.mounts && user.items.mounts['Turkey-Gilded']) { + set['items.gear.owned.head_special_turkeyHelmBase'] = false; + set['items.gear.owned.armor_special_turkeyArmorBase'] = false; + set['items.gear.owned.back_special_turkeyTailBase'] = false; + push = [ + { + type: 'marketGear', + path: 'gear.flat.head_special_turkeyHelmBase', + _id: uuid(), + }, + { + type: 'marketGear', + path: 'gear.flat.armor_special_turkeyArmorBase', + _id: uuid(), + }, + { + type: 'marketGear', + path: 'gear.flat.back_special_turkeyTailBase', + _id: uuid(), + }, + ]; + } else if (user.items && user.items.pets && user.items.pets['Turkey-Gilded']) { + set['items.mounts.Turkey-Gilded'] = true; + } else if (user.items && user.items.mounts && user.items.mounts['Turkey-Base']) { + set['items.pets.Turkey-Gilded'] = 5; + } else if (user.items && user.items.pets && user.items.pets['Turkey-Base']) { + set['items.mounts.Turkey-Base'] = true; + } else { + set['items.pets.Turkey-Base'] = 5; + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + if (inc) { + return await User.update({_id: user._id}, {$inc: inc, $set: set}).exec(); + } else if (push) { + return await User.update({_id: user._id}, {$set: set, $push: {pinnedItems: {$each: push}}}).exec(); + } else { + return await User.update({_id: user._id}, {$set: set}).exec(); + } +} + +module.exports = async function processUsers () { + let query = { + migration: {$ne: MIGRATION_NAME}, + 'auth.timestamps.loggedin': {$gt: new Date('2019-11-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], + }; + } + + await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop + } +}; diff --git a/website/raw_sprites/spritesmith_large/promo_harvest_feast.png b/website/raw_sprites/spritesmith_large/promo_harvest_feast.png new file mode 100644 index 0000000000000000000000000000000000000000..2d5c520be2224f0a3b5fb8a7db747bb91a757c38 GIT binary patch literal 22948 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

49~S^g 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

${res.t('newStuff')}

-

11/26/2019 - ${LAST_ANNOUNCEMENT_TITLE}

+

11/27/2019 - ${LAST_ANNOUNCEMENT_TITLE}


-
+
+

Happy Harvest!

- Won't you stay a while--a few epochs, perhaps, preserved perfectly and beautifully? - Get the latest Magic Hatching Potion quest, "The Amber Alliance," and defeat the Trerezin - to earn Amber Magic Hatching Potions by completing your real-life tasks! + It's time for Habitica's Harvest Feast! On this day Habiticans celebrate by spending + time with loved ones, giving thanks, enjoying their favorite foods, and riding their + glorious turkeys into the magnificent sunset. Some of the NPCs are celebrating the + occasion!

-
Art by Vikte, -Tyr-, and beffymaroo
-
Writing by Rain
+

Turkey Pet, Mount, Costumes... and Pie!

+

+ Those of you who weren't around for all of our previous Harvest Feasts have received an + adorable Turkey! What kind of Turkey? It all depends on how many harvests you've + celebrated with us. If you've completed your Turkey collection, you'll receive a feast + of delicious pie for your pets! +

+

Thank you for using Habitica - we really love you all <3

+
by Lemoness and Beffymaroo
+
+

Last Chance for Crystal Charmer Subscriber Set

+

+ Reminder: the end of November is the last chance to receive the Crystal Charmer Set when + you sign up for a Habitica subscription! + Subscribing also lets you buy Gems for Gold. The longer your subscription, the more Gems + you can get! +

+

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

+
by Beffymaroo
+
+

Last Chance for Ember and Thunderstorm Potions

+

+ Reminder: time is running out to buy Thunderstorm and Ember + Hatching Potions! If they come back, it won't be until next year at the earliest, so + don't delay! +

+
by Balduranne and SabreCat
+
+

Last Chance for Delightful Dinos Pet Quest Bundle

+

+ There's also only a few days left to buy the discounted Delightful Dinos Pet Quest + Bundle, featuring the Pterodactyl, Triceratops, and T-Rex quests all for seven Gems! Be + sure to get yours from the Quest Shop before this deal goes + extinct! +

+
By SabreCat and Beffymaroo
+
+ Art by Baconsaur, Eevachu, UncommonCriminal, Kiwibot, McCoyly, plumilla, Seraphina, + PainterProphet, Stefalupagus, Katy133, Edge, Willow The Witty, Lilith of Alfheim, + Procyon, GeraldThePixel, and Archeia +
+
+ Writing by Lemoness, Daniel the Bard, Lilith of Alfheim, and Ali Stewart +
`, }); diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 2d3e9cf554..b3b76e9c36 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -129,6 +129,8 @@ function _setUpNewUser (user) { user.items.quests.dustbunnies = 1; user.purchased.background.violet = true; user.preferences.background = 'violet'; + user.items.pets['Turkey-Base'] = 5; + user.items.currentPet = 'Turkey-Base'; user.markModified('items');