diff --git a/habitica-images b/habitica-images index 58b8905b08..6e9d17b8a4 160000 --- a/habitica-images +++ b/habitica-images @@ -1 +1 @@ -Subproject commit 58b8905b0825159b6ba4eb5a37459b97bca79947 +Subproject commit 6e9d17b8a4af295ba2d9dc9870b2904035d6fba7 diff --git a/package-lock.json b/package-lock.json index c2ae909e8b..494106b0c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.238.0", + "version": "4.239.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2e7cd25856..9025860b28 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.238.0", + "version": "4.239.0", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.18.6", diff --git a/website/client/src/assets/css/sprites/spritesmith-main.css b/website/client/src/assets/css/sprites/spritesmith-main.css index 93c00a507a..a31d767fb4 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main.css +++ b/website/client/src/assets/css/sprites/spritesmith-main.css @@ -463,6 +463,11 @@ width: 48px; height: 52px; } +.achievement-woodlandWizard2x { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-woodlandWizard2x.png'); + width: 60px; + height: 64px; +} .achievement-zodiac2x { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-zodiac2x.png'); width: 60px; diff --git a/website/common/locales/en/achievements.json b/website/common/locales/en/achievements.json index a88747b02c..2c063088e0 100644 --- a/website/common/locales/en/achievements.json +++ b/website/common/locales/en/achievements.json @@ -133,7 +133,10 @@ "achievementReptacularRumble": "Reptacular Rumble", "achievementReptacularRumbleText": "Has hatched all the standard colors of reptile pets: Alligator, Pterodactyl, Snake, Triceratops, Turtle, Tyrannosaurus Rex, and Velociraptor!", "achievementReptacularRumbleModalText": "You collected all the reptile pets!", - "achievementGroupsBeta2022":"Interactive Beta Tester", - "achievementGroupsBeta2022Text":"You and your group provided invaluable feedback to help Habitica test.", - "achievementGroupsBeta2022ModalText":"You and your groups helped Habitica by testing and providing feedback!" + "achievementGroupsBeta2022": "Interactive Beta Tester", + "achievementGroupsBeta2022Text": "You and your group provided invaluable feedback to help Habitica test.", + "achievementGroupsBeta2022ModalText":"You and your groups helped Habitica by testing and providing feedback!", + "achievementWoodlandWizard": "Woodland Wizard", + "achievementWoodlandWizardText": "Has hatched all standard colors of forest creatures: Badger, Bear, Deer, Fox, Frog, Hedgehog, Owl, Snail, Squirrel, and Treeling!", + "achievementWoodlandWizardModalText": "You collected all the forest pets!" } diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index cc7734b8a0..dd0de4b14b 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -188,6 +188,11 @@ const animalSetAchievs = { titleKey: 'achievementReptacularRumble', textKey: 'achievementReptacularRumbleText', }, + woodlandWizard: { + icon: 'achievement-woodlandWizard', + titleKey: 'achievementWoodlandWizard', + textKey: 'achievementWoodlandWizardText', + }, zodiacZookeeper: { icon: 'achievement-zodiac', titleKey: 'achievementZodiacZookeeper', diff --git a/website/common/script/content/bundles.js b/website/common/script/content/bundles.js index bda8e75941..42357c24d6 100644 --- a/website/common/script/content/bundles.js +++ b/website/common/script/content/bundles.js @@ -144,8 +144,9 @@ const bundles = { 'hedgehog', 'treeling', ], + event: EVENTS.bundle202208, canBuy () { - return moment().isBetween('2018-09-11', '2018-10-02'); + return moment().isBetween(EVENTS.bundle202208.start, EVENTS.bundle202208.end); }, type: 'quests', value: 7, diff --git a/website/common/script/content/constants/animalSetAchievements.js b/website/common/script/content/constants/animalSetAchievements.js index 619cc65ebc..0c747a0826 100644 --- a/website/common/script/content/constants/animalSetAchievements.js +++ b/website/common/script/content/constants/animalSetAchievements.js @@ -55,6 +55,23 @@ const ANIMAL_SET_ACHIEVEMENTS = { achievementKey: 'reptacularRumble', notificationType: 'ACHIEVEMENT_ANIMAL_SET', }, + woodlandWizard: { + type: 'pet', + species: [ + 'Badger', + 'BearCub', + 'Deer', + 'Fox', + 'Frog', + 'Hedgehog', + 'Owl', + 'Snail', + 'Squirrel', + 'Treeling', + ], + achievementKey: 'woodlandWizard', + notificationType: 'ACHIEVEMENT_ANIMAL_SET', + }, zodiacZookeeper: { type: 'pet', species: [ diff --git a/website/common/script/content/constants/events.js b/website/common/script/content/constants/events.js index 94e8726a70..3106567984 100644 --- a/website/common/script/content/constants/events.js +++ b/website/common/script/content/constants/events.js @@ -10,11 +10,17 @@ const gemsPromo = { export const EVENTS = { noCurrentEventAfter: { - start: '2022-07-31T20:00-04:00', + start: '2022-09-30T20:00-04:00', end: '2022-12-21T08:00-04:00', season: 'normal', npcImageSuffix: '', }, + bundle202208: { + start: '2022-08-09T08:00-04:00', + end: '2022-09-30T20:00-04:00', + season: 'normal', + npcImageSuffix: '', + }, summer2022: { start: '2022-06-21T08:00-04:00', end: '2022-07-31T20:00-04:00', diff --git a/website/common/script/content/shop-featuredItems.js b/website/common/script/content/shop-featuredItems.js index e8abbba254..419b2d29a7 100644 --- a/website/common/script/content/shop-featuredItems.js +++ b/website/common/script/content/shop-featuredItems.js @@ -40,24 +40,24 @@ const featuredItems = { }, { type: 'eggs', - path: 'eggs.Cactus', + path: 'eggs.BearCub', }, ]; }, quests () { - if (moment().isBefore(EVENTS.bundle202206.end)) { + if (moment().isBetween(EVENTS.bundle202208.start, EVENTS.bundle202208.end)) { return [ { type: 'bundles', - path: 'bundles.aquaticAmigos', + path: 'bundles.forestFriends', }, { type: 'quests', - path: 'quests.seaserpent', + path: 'quests.owl', }, { type: 'quests', - path: 'quests.dolphin', + path: 'quests.snail', }, ]; } diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index 3f7cf1e93f..cbde3305ae 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -218,6 +218,7 @@ function _getBasicAchievements (user, language) { _addSimple(result, user, { path: 'zodiacZookeeper', language }); _addSimple(result, user, { path: 'birdsOfAFeather', language }); _addSimple(result, user, { path: 'reptacularRumble', language }); + _addSimple(result, user, { path: 'woodlandWizard', language }); _addSimpleWithMasterCount(result, user, { path: 'beastMaster', language }); _addSimpleWithMasterCount(result, user, { path: 'mountMaster', language }); diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 868c158a6c..1b803e4b5b 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -150,6 +150,7 @@ export default new Schema({ zodiacZookeeper: Boolean, birdsOfAFeather: Boolean, reptacularRumble: Boolean, + woodlandWizard: Boolean, // Onboarding Guide createdTask: Boolean, completedTask: Boolean,