diff --git a/migrations/archive/2020/20200731_naming_day.js b/migrations/archive/2020/20200731_naming_day.js new file mode 100644 index 0000000000..25f3babee7 --- /dev/null +++ b/migrations/archive/2020/20200731_naming_day.js @@ -0,0 +1,87 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20200731_naming_day'; +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++; + + let set; + let push; + const inc = { + 'items.food.Cake_Base': 1, + 'items.food.Cake_CottonCandyBlue': 1, + 'items.food.Cake_CottonCandyPink': 1, + 'items.food.Cake_Desert': 1, + 'items.food.Cake_Golden': 1, + 'items.food.Cake_Red': 1, + 'items.food.Cake_Shade': 1, + 'items.food.Cake_Skeleton': 1, + 'items.food.Cake_White': 1, + 'items.food.Cake_Zombie': 1, + 'achievements.habiticaDays': 1, + }; + + if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.back_special_namingDay2020 !== 'undefined') { + set = { migration: MIGRATION_NAME }; + } else if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.body_special_namingDay2018 !== 'undefined') { + set = { migration: MIGRATION_NAME, 'items.gear.owned.back_special_namingDay2020': false }; + push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.back_special_namingDay2020', _id: uuid() }}; + } else if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.head_special_namingDay2017 !== 'undefined') { + set = { migration: MIGRATION_NAME, 'items.gear.owned.body_special_namingDay2018': false }; + push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.body_special_namingDay2018', _id: uuid() }}; + } else if (user && user.items && user.items.pets && typeof user.items.pets['Gryphon-RoyalPurple'] !== 'undefined') { + set = { migration: MIGRATION_NAME, 'items.gear.owned.head_special_namingDay2017': false }; + push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.head_special_namingDay2017', _id: uuid() }}; + } else if (user && user.items && user.items.mounts && typeof user.items.mounts['Gryphon-RoyalPurple'] !== 'undefined') { + set = { migration: MIGRATION_NAME, 'items.pets.Gryphon-RoyalPurple': 5 }; + } else { + set = { migration: MIGRATION_NAME, 'items.mounts.Gryphon-RoyalPurple': true }; + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + if (push) { + return await User.update({ _id: user._id }, { $set: set, $inc: inc, $push: push }).exec(); + } else { + return await User.update({ _id: user._id }, { $set: set, $inc: inc }).exec(); + } +} + +export default async function processUsers () { + let query = { + migration: { $ne: MIGRATION_NAME }, + 'auth.timestamps.loggedin': { $gt: new Date('2020-07-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/migrations/migration-runner.js b/migrations/migration-runner.js index e63ac8b749..6cf48a3979 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('./archive/2020/20200721_summer_splash_orcas').default; +const processUsers = require('').default; processUsers() .then(() => { diff --git a/package-lock.json b/package-lock.json index ddaef68806..1cf7e402d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.151.1", + "version": "4.151.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4f342376ea..055e9229cd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.151.1", + "version": "4.151.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.10.3", 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 0290d3b228..0b77ddcb71 100644 --- a/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css +++ b/website/client/src/assets/css/sprites/spritesmith-largeSprites-0.css @@ -12,19 +12,25 @@ } .promo_mystery_202007 { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -812px -453px; + background-position: -812px -616px; width: 282px; height: 147px; } .promo_mystery_202008 { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -812px -296px; + background-position: -812px -459px; width: 294px; height: 156px; } +.promo_naming_day_2020 { + background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); + background-position: -812px -296px; + width: 285px; + height: 162px; +} .promo_orcas { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -812px -601px; + background-position: -426px -473px; width: 219px; height: 147px; } @@ -66,7 +72,7 @@ } .promo_take_this { background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png'); - background-position: -1107px -296px; + background-position: -1098px -296px; width: 96px; height: 69px; } diff --git a/website/client/src/assets/css/sprites/spritesmith-main-12.css b/website/client/src/assets/css/sprites/spritesmith-main-12.css index 35401fe446..17b40de131 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main-12.css +++ b/website/client/src/assets/css/sprites/spritesmith-main-12.css @@ -744,91 +744,91 @@ } .shop_headAccessory_special_bearEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1380px -1395px; + background-position: -1502px 0px; width: 68px; height: 68px; } .shop_headAccessory_special_blackHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px 0px; + background-position: -1502px -69px; width: 68px; height: 68px; } .shop_headAccessory_special_blueHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -69px; + background-position: -1502px -138px; width: 68px; height: 68px; } .shop_headAccessory_special_cactusEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -138px; + background-position: -1502px -207px; width: 68px; height: 68px; } .shop_headAccessory_special_foxEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -207px; + background-position: -1502px -276px; width: 68px; height: 68px; } .shop_headAccessory_special_greenHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -276px; + background-position: -1502px -345px; width: 68px; height: 68px; } .shop_headAccessory_special_lionEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -345px; + background-position: -1502px -414px; width: 68px; height: 68px; } .shop_headAccessory_special_pandaEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -414px; + background-position: -1502px -483px; width: 68px; height: 68px; } .shop_headAccessory_special_pigEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -483px; + background-position: -1502px -552px; width: 68px; height: 68px; } .shop_headAccessory_special_pinkHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -552px; + background-position: -1502px -621px; width: 68px; height: 68px; } .shop_headAccessory_special_redHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -621px; + background-position: -1502px -690px; width: 68px; height: 68px; } .shop_headAccessory_special_tigerEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -690px; + background-position: -1502px -759px; width: 68px; height: 68px; } .shop_headAccessory_special_whiteHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -759px; + background-position: -1502px -828px; width: 68px; height: 68px; } .shop_headAccessory_special_wolfEars { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -828px; + background-position: -1502px -897px; width: 68px; height: 68px; } .shop_headAccessory_special_yellowHeadband { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -897px; + background-position: -1502px -966px; width: 68px; height: 68px; } @@ -1181,113 +1181,113 @@ height: 68px; } .shop_head_special_namingDay2017 { - background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -463px -667px; - width: 40px; - height: 40px; -} -.shop_head_special_pageHelm { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -207px -1395px; width: 68px; height: 68px; } -.shop_head_special_pyromancersTurban { +.shop_head_special_pageHelm { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -276px -1395px; width: 68px; height: 68px; } -.shop_head_special_roguishRainbowMessengerHood { +.shop_head_special_pyromancersTurban { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -345px -1395px; width: 68px; height: 68px; } -.shop_head_special_snowSovereignCrown { +.shop_head_special_roguishRainbowMessengerHood { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -414px -1395px; width: 68px; height: 68px; } -.shop_head_special_spikedHelm { +.shop_head_special_snowSovereignCrown { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -483px -1395px; width: 68px; height: 68px; } -.shop_head_special_turkeyHelmBase { +.shop_head_special_spikedHelm { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -552px -1395px; width: 68px; height: 68px; } -.shop_head_special_turkeyHelmGilded { +.shop_head_special_turkeyHelmBase { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -621px -1395px; width: 68px; height: 68px; } -.shop_head_warrior_1 { +.shop_head_special_turkeyHelmGilded { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -690px -1395px; width: 68px; height: 68px; } -.shop_head_warrior_2 { +.shop_head_warrior_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -759px -1395px; width: 68px; height: 68px; } -.shop_head_warrior_3 { +.shop_head_warrior_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -828px -1395px; width: 68px; height: 68px; } -.shop_head_warrior_4 { +.shop_head_warrior_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -897px -1395px; width: 68px; height: 68px; } -.shop_head_warrior_5 { +.shop_head_warrior_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -966px -1395px; width: 68px; height: 68px; } -.shop_head_wizard_1 { +.shop_head_warrior_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -1035px -1395px; width: 68px; height: 68px; } -.shop_head_wizard_2 { +.shop_head_wizard_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -1104px -1395px; width: 68px; height: 68px; } -.shop_head_wizard_3 { +.shop_head_wizard_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -1173px -1395px; width: 68px; height: 68px; } -.shop_head_wizard_4 { +.shop_head_wizard_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -1242px -1395px; width: 68px; height: 68px; } -.shop_head_wizard_5 { +.shop_head_wizard_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -1311px -1395px; width: 68px; height: 68px; } +.shop_head_wizard_5 { + background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); + background-position: -1380px -1395px; + width: 68px; + height: 68px; +} .shield_healer_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); background-position: -91px -1122px; @@ -1446,433 +1446,433 @@ } .shop_shield_healer_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -966px; + background-position: -1502px -1035px; width: 68px; height: 68px; } .shop_shield_healer_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -1035px; + background-position: -1502px -1104px; width: 68px; height: 68px; } .shop_shield_healer_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -1104px; + background-position: -1502px -1173px; width: 68px; height: 68px; } .shop_shield_healer_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -1173px; + background-position: -1502px -1242px; width: 68px; height: 68px; } .shop_shield_healer_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -1242px; + background-position: -1502px -1311px; width: 68px; height: 68px; } .shop_shield_rogue_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -1311px; + background-position: -1502px -1380px; width: 68px; height: 68px; } .shop_shield_rogue_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1502px -1380px; + background-position: 0px -1464px; width: 68px; height: 68px; } .shop_shield_rogue_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: 0px -1464px; + background-position: -69px -1464px; width: 68px; height: 68px; } .shop_shield_rogue_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -69px -1464px; + background-position: -138px -1464px; width: 68px; height: 68px; } .shop_shield_rogue_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -138px -1464px; + background-position: -207px -1464px; width: 68px; height: 68px; } .shop_shield_rogue_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -207px -1464px; + background-position: -276px -1464px; width: 68px; height: 68px; } .shop_shield_rogue_6 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -276px -1464px; + background-position: -345px -1464px; width: 68px; height: 68px; } .shop_shield_special_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -345px -1464px; + background-position: -414px -1464px; width: 68px; height: 68px; } .shop_shield_special_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -414px -1464px; + background-position: -483px -1464px; width: 68px; height: 68px; } .shop_shield_special_diamondStave { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -483px -1464px; + background-position: -552px -1464px; width: 68px; height: 68px; } .shop_shield_special_goldenknight { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -552px -1464px; + background-position: -621px -1464px; width: 68px; height: 68px; } .shop_shield_special_lootBag { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -621px -1464px; + background-position: -690px -1464px; width: 68px; height: 68px; } .shop_shield_special_mammothRiderHorn { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -690px -1464px; + background-position: -759px -1464px; width: 68px; height: 68px; } .shop_shield_special_moonpearlShield { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -759px -1464px; + background-position: -828px -1464px; width: 68px; height: 68px; } .shop_shield_special_roguishRainbowMessage { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -828px -1464px; + background-position: -897px -1464px; width: 68px; height: 68px; } .shop_shield_special_wakizashi { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -897px -1464px; + background-position: -966px -1464px; width: 68px; height: 68px; } .shop_shield_special_wintryMirror { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -966px -1464px; + background-position: -1035px -1464px; width: 68px; height: 68px; } .shop_shield_warrior_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1035px -1464px; + background-position: -1104px -1464px; width: 68px; height: 68px; } .shop_shield_warrior_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1104px -1464px; + background-position: -1173px -1464px; width: 68px; height: 68px; } .shop_shield_warrior_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1173px -1464px; + background-position: -1242px -1464px; width: 68px; height: 68px; } .shop_shield_warrior_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1242px -1464px; + background-position: -1311px -1464px; width: 68px; height: 68px; } .shop_shield_warrior_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1311px -1464px; + background-position: -1380px -1464px; width: 68px; height: 68px; } .shop_weapon_healer_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1380px -1464px; + background-position: -1449px -1464px; width: 68px; height: 68px; } .shop_weapon_healer_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1449px -1464px; + background-position: -1571px 0px; width: 68px; height: 68px; } .shop_weapon_healer_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px 0px; + background-position: -1571px -69px; width: 68px; height: 68px; } .shop_weapon_healer_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -69px; + background-position: -1571px -138px; width: 68px; height: 68px; } .shop_weapon_healer_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -138px; + background-position: -1571px -207px; width: 68px; height: 68px; } .shop_weapon_healer_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -207px; + background-position: -1571px -276px; width: 68px; height: 68px; } .shop_weapon_healer_6 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -276px; + background-position: -1571px -345px; width: 68px; height: 68px; } .shop_weapon_rogue_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -345px; + background-position: -1571px -414px; width: 68px; height: 68px; } .shop_weapon_rogue_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -414px; + background-position: -1571px -483px; width: 68px; height: 68px; } .shop_weapon_rogue_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -483px; + background-position: -1571px -552px; width: 68px; height: 68px; } .shop_weapon_rogue_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -552px; + background-position: -1571px -621px; width: 68px; height: 68px; } .shop_weapon_rogue_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -621px; + background-position: -1571px -690px; width: 68px; height: 68px; } .shop_weapon_rogue_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -690px; + background-position: -1571px -759px; width: 68px; height: 68px; } .shop_weapon_rogue_6 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -759px; + background-position: -1571px -828px; width: 68px; height: 68px; } .shop_weapon_special_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -828px; + background-position: -1571px -897px; width: 68px; height: 68px; } .shop_weapon_special_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -897px; + background-position: -1571px -966px; width: 68px; height: 68px; } .shop_weapon_special_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -966px; + background-position: -1571px -1035px; width: 68px; height: 68px; } .shop_weapon_special_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1035px; + background-position: -1571px -1104px; width: 68px; height: 68px; } .shop_weapon_special_aetherCrystals { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1104px; + background-position: -1571px -1173px; width: 68px; height: 68px; } .shop_weapon_special_bardInstrument { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1173px; + background-position: -1571px -1242px; width: 68px; height: 68px; } .shop_weapon_special_critical { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1242px; + background-position: -1571px -1311px; width: 68px; height: 68px; } .shop_weapon_special_fencingFoil { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1311px; + background-position: -1571px -1380px; width: 68px; height: 68px; } .shop_weapon_special_lunarScythe { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1380px; + background-position: -1571px -1449px; width: 68px; height: 68px; } .shop_weapon_special_mammothRiderSpear { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1571px -1449px; + background-position: 0px -1533px; width: 68px; height: 68px; } .shop_weapon_special_nomadsScimitar { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: 0px -1533px; + background-position: -69px -1533px; width: 68px; height: 68px; } .shop_weapon_special_pageBanner { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -69px -1533px; + background-position: -138px -1533px; width: 68px; height: 68px; } .shop_weapon_special_roguishRainbowMessage { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -138px -1533px; + background-position: -207px -1533px; width: 68px; height: 68px; } .shop_weapon_special_skeletonKey { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -207px -1533px; + background-position: -276px -1533px; width: 68px; height: 68px; } .shop_weapon_special_tachi { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -276px -1533px; + background-position: -345px -1533px; width: 68px; height: 68px; } .shop_weapon_special_taskwoodsLantern { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -345px -1533px; + background-position: -414px -1533px; width: 68px; height: 68px; } .shop_weapon_special_tridentOfCrashingTides { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -414px -1533px; + background-position: -483px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -483px -1533px; + background-position: -552px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -552px -1533px; + background-position: -621px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -621px -1533px; + background-position: -690px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -690px -1533px; + background-position: -759px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -759px -1533px; + background-position: -828px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -828px -1533px; + background-position: -897px -1533px; width: 68px; height: 68px; } .shop_weapon_warrior_6 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -897px -1533px; + background-position: -966px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_0 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -966px -1533px; + background-position: -1035px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_1 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1035px -1533px; + background-position: -1104px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_2 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1104px -1533px; + background-position: -1173px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_3 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1173px -1533px; + background-position: -1242px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_4 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1242px -1533px; + background-position: -1311px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_5 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1311px -1533px; + background-position: -1380px -1533px; width: 68px; height: 68px; } .shop_weapon_wizard_6 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1380px -1533px; + background-position: -1449px -1533px; width: 68px; height: 68px; } @@ -2136,7 +2136,7 @@ } .Pet_Currency_Gem { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -207px -1602px; + background-position: -276px -1602px; width: 68px; height: 68px; } @@ -2232,169 +2232,169 @@ } .inventory_present { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -690px; + background-position: -1640px -759px; width: 68px; height: 68px; } .inventory_present_01 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1449px -1533px; + background-position: -1518px -1533px; width: 68px; height: 68px; } .inventory_present_02 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1518px -1533px; + background-position: -1640px 0px; width: 68px; height: 68px; } .inventory_present_03 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px 0px; + background-position: -1640px -69px; width: 68px; height: 68px; } .inventory_present_04 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -69px; + background-position: -1640px -138px; width: 68px; height: 68px; } .inventory_present_05 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -138px; + background-position: -1640px -207px; width: 68px; height: 68px; } .inventory_present_06 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -207px; + background-position: -1640px -276px; width: 68px; height: 68px; } .inventory_present_07 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -276px; + background-position: -1640px -345px; width: 68px; height: 68px; } .inventory_present_08 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -345px; + background-position: -1640px -414px; width: 68px; height: 68px; } .inventory_present_09 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -414px; + background-position: -1640px -483px; width: 68px; height: 68px; } .inventory_present_10 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -483px; + background-position: -1640px -552px; width: 68px; height: 68px; } .inventory_present_11 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -552px; + background-position: -1640px -621px; width: 68px; height: 68px; } .inventory_present_12 { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -621px; + background-position: -1640px -690px; width: 68px; height: 68px; } .inventory_special_birthday { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -759px; + background-position: -1640px -828px; width: 68px; height: 68px; } .inventory_special_congrats { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -828px; + background-position: -1640px -897px; width: 68px; height: 68px; } .inventory_special_fortify { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -897px; + background-position: -1640px -966px; width: 68px; height: 68px; } .inventory_special_getwell { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -966px; + background-position: -1640px -1035px; width: 68px; height: 68px; } .inventory_special_goodluck { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1035px; + background-position: -1640px -1104px; width: 68px; height: 68px; } .inventory_special_greeting { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1104px; + background-position: -1640px -1173px; width: 68px; height: 68px; } .inventory_special_nye { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1173px; + background-position: -1640px -1242px; width: 68px; height: 68px; } .inventory_special_opaquePotion { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1242px; + background-position: -1640px -1311px; width: 68px; height: 68px; } .inventory_special_seafoam { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1311px; + background-position: -1640px -1380px; width: 68px; height: 68px; } .inventory_special_shinySeed { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1380px; + background-position: -1640px -1449px; width: 68px; height: 68px; } .inventory_special_snowball { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1449px; + background-position: -1640px -1518px; width: 68px; height: 68px; } .inventory_special_spookySparkles { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -1640px -1518px; + background-position: 0px -1602px; width: 68px; height: 68px; } .inventory_special_thankyou { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: 0px -1602px; + background-position: -69px -1602px; width: 68px; height: 68px; } .inventory_special_trinket { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -69px -1602px; + background-position: -138px -1602px; width: 68px; height: 68px; } .inventory_special_valentine { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -138px -1602px; + background-position: -207px -1602px; width: 68px; height: 68px; } @@ -2406,13 +2406,13 @@ } .pet_key { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -276px -1602px; + background-position: -345px -1602px; width: 68px; height: 68px; } .rebirth_orb { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -345px -1602px; + background-position: -414px -1602px; width: 68px; height: 68px; } @@ -2424,19 +2424,19 @@ } .shop_armoire { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -414px -1602px; + background-position: -483px -1602px; width: 68px; height: 68px; } .zzz { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -545px -667px; + background-position: -504px -667px; width: 40px; height: 40px; } .zzz_light { background-image: url('~@/assets/images/sprites/spritesmith-main-12.png'); - background-position: -504px -667px; + background-position: -463px -667px; width: 40px; height: 40px; } 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 d9e596a208..0f6995ef30 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/client/src/assets/images/sprites/spritesmith-main-12.png b/website/client/src/assets/images/sprites/spritesmith-main-12.png index 602183871b..6a2c6a0455 100644 Binary files a/website/client/src/assets/images/sprites/spritesmith-main-12.png and b/website/client/src/assets/images/sprites/spritesmith-main-12.png differ diff --git a/website/client/src/assets/images/sprites/spritesmith-main-16.png b/website/client/src/assets/images/sprites/spritesmith-main-16.png index 332277dda3..23c7197121 100644 Binary files a/website/client/src/assets/images/sprites/spritesmith-main-16.png and b/website/client/src/assets/images/sprites/spritesmith-main-16.png differ diff --git a/website/client/src/assets/images/sprites/spritesmith-main-20.png b/website/client/src/assets/images/sprites/spritesmith-main-20.png index f960d5fb1e..13a58ab37a 100644 Binary files a/website/client/src/assets/images/sprites/spritesmith-main-20.png and b/website/client/src/assets/images/sprites/spritesmith-main-20.png differ diff --git a/website/common/script/fns/randomDrop.js b/website/common/script/fns/randomDrop.js index b4e418ad07..f34303ec63 100644 --- a/website/common/script/fns/randomDrop.js +++ b/website/common/script/fns/randomDrop.js @@ -46,8 +46,8 @@ export default function randomDrop (user, options, req = {}, analytics) { let chance = min([Math.abs(task.value - 21.27), 37.5]) / 150 + 0.02; chance *= task.priority // Task priority: +50% for Medium, +100% for Hard - // A/B test experiment: start users with +75% drops, diminishing by 5% per level gained - * ('12345678'.indexOf(user._id.slice(0, 1)) !== -1 ? (1 + Math.max(0, 80 - (5 * user.stats.lvl)) / 100) : 1) + // start users with +75% drops, diminishing by 5% per level gained + * (1 + Math.max(0, 80 - (5 * user.stats.lvl)) / 100) * (1 + (task.streak / 100 || 0)) // Streak bonus: +1% per streak * (1 + statsComputed(user).per / 100) // PERception: +1% per point * (1 + (user.contributor.level / 40 || 0)) // Contrib levels: +2.5% per level diff --git a/website/raw_sprites/spritesmith/gear/head/shop/shop_head_special_namingDay2017.png b/website/raw_sprites/spritesmith/gear/head/shop/shop_head_special_namingDay2017.png index 6962731bd4..fbaf6ba783 100755 Binary files a/website/raw_sprites/spritesmith/gear/head/shop/shop_head_special_namingDay2017.png and b/website/raw_sprites/spritesmith/gear/head/shop/shop_head_special_namingDay2017.png differ diff --git a/website/raw_sprites/spritesmith/stable/mounts/body/Mount_Body_Gryphon-RoyalPurple.png b/website/raw_sprites/spritesmith/stable/mounts/body/Mount_Body_Gryphon-RoyalPurple.png index 05be083069..25fb99de84 100755 Binary files a/website/raw_sprites/spritesmith/stable/mounts/body/Mount_Body_Gryphon-RoyalPurple.png and b/website/raw_sprites/spritesmith/stable/mounts/body/Mount_Body_Gryphon-RoyalPurple.png differ diff --git a/website/raw_sprites/spritesmith/stable/mounts/head/Mount_Head_Gryphon-RoyalPurple.png b/website/raw_sprites/spritesmith/stable/mounts/head/Mount_Head_Gryphon-RoyalPurple.png index d0a0f513ee..b9a356e0c1 100755 Binary files a/website/raw_sprites/spritesmith/stable/mounts/head/Mount_Head_Gryphon-RoyalPurple.png and b/website/raw_sprites/spritesmith/stable/mounts/head/Mount_Head_Gryphon-RoyalPurple.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_naming_day_2020.png b/website/raw_sprites/spritesmith_large/promo_naming_day_2020.png new file mode 100644 index 0000000000..b4d6d7090e Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_naming_day_2020.png differ diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index bc1d6bd91e..2a773ae11d 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 = 'LAST CHANCE FOR SUMMER SPLASH OUTFITS, SUMMER AVATAR CUSTOMIZATIONS, MAGIC HATCHING POTIONS, AND SEAFOAM'; +const LAST_ANNOUNCEMENT_TITLE = 'HABITICA’S NAMING DAY!'; const worldDmg = { // @TODO bailey: false, }; @@ -31,64 +31,31 @@ api.getNews = {

${res.t('newStuff')}

-

7/30/2020 - ${LAST_ANNOUNCEMENT_TITLE}

+

7/31/2020 - ${LAST_ANNOUNCEMENT_TITLE}


-
+
+

Habitica Naming Day

- Summer Splash is coming to a close in Habitica on July 31, so be sure to snag this year's - limited edition outfits from your Rewards column. Depending on your class, you can be an - Oarfish Mage, Crocodile Rogue, Rainbow Trout Warrior, or Sea Glass Healer. Don't miss - these awesome gear sets, available to purchase with Gold for now! + Happy Habitica Naming day! In honor of the day when we changed the name of the app from + HabitRPG to Habitica, we've given everyone an achievement, as well as some delicious cake + for your pets and mounts.

-
by jjgame83, QuartzFox, Vyllan, Vikte, and SabreCat
-
+
by Lemoness and SabreCat
+
+

Habitica Purple Gryphons

- The Seasonal Shop will also close when the Gala ends. The - Seasonal Sorceress is stocking the seasonal edition versions of previous summer outfits, - now available for Gems instead of Gold, and Seafoam. + Speaking of pets and mounts, we've given all users Royal Purple Gryphon rewards! + Depending on how many Naming Days you've celebrated with us, you've received Melior (a + Purple Gryphon mount), his little sister Meliora (a Purple Gryphon pet), a Purple Gryphon + Helm, the Purple Gryphon Wing Cloak, or the latest addition, the Purple Gryphon Tail!

-
- by SabreCat, Lemoness, AnnDeLune, Vikte, gawrone, TheDudeAbides, Lalaitha, Beffymaroo, - Vampitch, nonight, tricksy.fox, Giu09, JaizakArpaik, TetoForever, and Kai -
-

- Watery, Aquatic, and Sand Sculpture Magic Hatching Potions - are also leaving the Market on July 31. If they come back, it won't be until next year at - the earliest, so don't delay! + Thanks for being a Habitica user -- you all mean so much to us. We hope that you enjoy + your presents!

-
- by Shine Caramia, a_diamond, Persephone, Stefalupagus, Beffymaroo and SabreCat -
-
-

- Don't miss the Splashy Skins! They're also available in User > Customize Avatar until the - Gala ends. But once you purchase them, you can use them year-round! -

-
by Lemoness and UncommonCriminal
-
-

Last Chance for Outstanding Orca Set

-

- You have until July 31 to subscribe and receive - the Outstanding Orca Set! Subscribing also lets you buy Gems with Gold. The longer your - subscription, the more Gems you can get! -

-

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

-
by Beffymaroo
-
-

Last Chance for Aquatic Amigos Pet Quest Bundle

-

- Lastly, don't forget the discounted Aquatic Amigos Pet Quest Bundle, featuring the - Axolotl, Cuttlefish, and Octopus quests all for seven Gems! Be sure to snag it from the - Quest Shop before it splashes out of sight when the Gala - closes. -

-
- by PainterProphet, Streak, James Danger, hazel, RiverMori, UncommonCriminal, Urse, - RBrinks, TokenKnight, wolvenhalo, Lemoness, and SabreCat -
+
by Lemoness, Beffymaroo, and Baconsaur
`, }); diff --git a/website/server/libs/auth/index.js b/website/server/libs/auth/index.js index 54e4e595f6..e8e60824f3 100644 --- a/website/server/libs/auth/index.js +++ b/website/server/libs/auth/index.js @@ -207,7 +207,6 @@ async function registerLocal (req, res, { isV3 = false }) { .catch(err => logger.error(err)); if (!existingUser) { - savedUser._ABtests['20200625_drops'] = '12345678'.indexOf(savedUser._id.slice(0, 1)) !== -1 ? 'boosted' : 'control'; res.analytics.track('register', { category: 'acquisition', type: 'local', diff --git a/website/server/libs/auth/social.js b/website/server/libs/auth/social.js index 9b3878d68c..02e4d64faf 100644 --- a/website/server/libs/auth/social.js +++ b/website/server/libs/auth/social.js @@ -112,7 +112,6 @@ export async function loginSocial (req, res) { // eslint-disable-line import/pre } if (!existingUser) { - savedUser._ABtests['20200625_drops'] = '12345678'.indexOf(savedUser._id.slice(0, 1)) !== -1 ? 'boosted' : 'control'; res.analytics.track('register', { category: 'acquisition', type: network, diff --git a/website/server/libs/cron.js b/website/server/libs/cron.js index 774309ecb5..67804c705e 100644 --- a/website/server/libs/cron.js +++ b/website/server/libs/cron.js @@ -201,7 +201,6 @@ function resetHabitCounters (user, tasksByType, now, daysMissed) { } function trackCronAnalytics (analytics, user, _progress, options) { - user._ABtests['20200625_drops'] = '12345678'.indexOf(user._id.slice(0, 1)) !== -1 ? 'boosted' : 'control'; analytics.track('Cron', { category: 'behavior', gaLabel: 'Cron Count', diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 4ba9dcf0db..8ee9e8d2e8 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -131,10 +131,10 @@ function _setUpNewUser (user) { user.items.quests.dustbunnies = 1; user.purchased.background.violet = true; user.preferences.background = 'violet'; - if (moment().isBefore('2020-02-02')) { - user.achievements.habitBirthdays = 1; - user.items.gear.owned.armor_special_birthday = true; - user.items.gear.equipped.armor = 'armor_special_birthday'; + if (moment().isBefore('2020-08-03')) { + user.migration = '20200731_naming_day'; + user.achievements.habiticaDays = 1; + user.items.mounts['Gryphon-RoyalPurple'] = true; user.items.food = { Cake_Skeleton: 1, Cake_Base: 1,