diff --git a/website/client/src/components/notifications.vue b/website/client/src/components/notifications.vue index 2960b0889e..77de66ef28 100644 --- a/website/client/src/components/notifications.vue +++ b/website/client/src/components/notifications.vue @@ -450,6 +450,14 @@ const NOTIFICATIONS = { achievement: 'zodiacZookeeper', }, }, + ACHIEVEMENT_BIRDS_OF_A_FEATHER: { + achievement: true, + label: $t => `${$t('achievement')}: ${$t('achievementBirdsOfAFeather')}`, + modalId: 'generic-achievement', + data: { + achievement: 'birdsOfAFeather', + }, + }, }; export default { @@ -514,6 +522,7 @@ export default { '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', 'ACHIEVEMENT_ZODIAC_ZOOKEEPER', + 'ACHIEVEMENT_BIRDS_OF_A_FEATHER', ].forEach(type => { handledNotifications[type] = true; }); @@ -948,6 +957,7 @@ export default { case 'ACHIEVEMENT_SHADY_CUSTOMER': case 'ACHIEVEMENT_SHADE_OF_IT_ALL': case 'ACHIEVEMENT_ZODIAC_ZOOKEEPER': + case 'ACHIEVEMENT_BIRDS_OF_A_FEATHER': case 'GENERIC_ACHIEVEMENT': this.showNotificationWithModal(notification); break; diff --git a/website/common/locales/en/achievements.json b/website/common/locales/en/achievements.json index a5ab0beb81..8e86fdf717 100644 --- a/website/common/locales/en/achievements.json +++ b/website/common/locales/en/achievements.json @@ -126,5 +126,8 @@ "achievementShadeOfItAllModalText": "You tamed all the Shade Mounts!", "achievementZodiacZookeeper": "Zodiac Zookeeper", "achievementZodiacZookeeperText": "Has hatched all the zodiac pets: Rat, Cow, Bunny, Snake, Horse, Sheep, Monkey, Rooster, Wolf, Tiger, Flying Pig, and Dragon!", - "achievementZodiacZookeeperModalText": "You collected all the zodiac pets!" + "achievementZodiacZookeeperModalText": "You collected all the zodiac pets!", + "achievementBirdsOfAFeather": "Birds of a Feather", + "achievementBirdsOfAFeatherText": "Has hatched all the flying pets: Flying Pig, Owl, Parrot, Pterodactyl, Gryphon, and Falcon.", + "achievementBirdsOfAFeatherModalText":"You collected all the flying pets!" } diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index 7d798eb638..b8f7ba8aab 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -272,6 +272,11 @@ const basicAchievs = { titleKey: 'achievementZodiacZookeeper', textKey: 'achievementZodiacZookeeperText', }, + birdsOfAFeather: { + icon: 'achievement-birdsOfAFeather', + titleKey: 'achievementBirdsOfAFeather', + textKey: 'achievementBirdsOfAFeatherText', + }, }; Object.assign(achievementsData, basicAchievs); diff --git a/website/common/script/content/constants/animalSetAchievements.js b/website/common/script/content/constants/animalSetAchievements.js index 5bdd8e039d..004ef1100a 100644 --- a/website/common/script/content/constants/animalSetAchievements.js +++ b/website/common/script/content/constants/animalSetAchievements.js @@ -11,6 +11,19 @@ const ANIMAL_SET_ACHIEVEMENTS = { achievementKey: 'legendaryBestiary', notificationType: 'ACHIEVEMENT_LEGENDARY_BESTIARY', }, + birdsOfAFeather: { + type: 'pet', + species: [ + 'FlyingPig', + 'Owl', + 'Parrot', + 'Pterodactyl', + 'Gryphon', + 'Falcon', + ], + achievementKey: 'birdsOfAFeather', + notificationType: 'ACHIEVEMENT_BIRDS_OF_A_FEATHER', + }, domesticated: { type: 'pet', species: [ diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index 4171b14cbe..c6b12351e7 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -71,6 +71,7 @@ const NOTIFICATION_TYPES = [ 'ACHIEVEMENT_SHADY_CUSTOMER', 'ACHIEVEMENT_SHADE_OF_IT_ALL', 'ACHIEVEMENT_ZODIAC_ZOOKEEPER', + 'ACHIEVEMENT_BIRDS_OF_A_FEATHER', 'ACHIEVEMENT', // generic achievement notification, details inside `notification.data` 'DROP_CAP_REACHED', ];