From 1ed61a3d3d5df1a39c1e207178ba3cf2422afc65 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Tue, 19 Nov 2024 11:44:22 -0600 Subject: [PATCH] December 2024 and Winter Wonderland 2025 build (#15358) * feat(content): Winter 2025 build by @CuriousMagpie * fix(content): add more WW * fix(content): add more WW * chore(subproj): update habitica-images * fix(gala): December 2024 is Winter 2025 * fix(content): lint, background typo, 0 index month * fix(content): add missing mystery set name * fix(content): roll back erroneous month indexing * fix(tests): no 13th month, consider releases in schedule test * update gear strings * fix(seasonal): show quest modal * fix(seasonal): use category-item component * chore(subproj): update habitica-images --------- Co-authored-by: CuriousMagpie --- test/content/releaseDates.test.js | 12 ++--- test/content/schedule.test.js | 4 ++ .../src/components/shops/seasonal/index.vue | 40 +++++++++++++---- website/common/locales/en/backgrounds.json | 4 ++ website/common/locales/en/content.json | 1 + website/common/locales/en/gear.json | 41 +++++++++++++++++ website/common/locales/en/limited.json | 4 ++ website/common/locales/en/subscriber.json | 1 + .../script/content/appearance/backgrounds.js | 3 ++ .../script/content/constants/releaseDates.js | 2 + .../script/content/constants/schedule.js | 1 + .../script/content/constants/seasonalSets.js | 5 +++ .../script/content/gear/sets/armoire.js | 8 ++++ .../script/content/gear/sets/mystery.js | 2 + .../script/content/gear/sets/special/index.js | 45 +++++++++++++++++++ .../common/script/content/hatching-potions.js | 1 + .../script/libs/shops-seasonal.config.js | 3 +- 17 files changed, 161 insertions(+), 16 deletions(-) diff --git a/test/content/releaseDates.test.js b/test/content/releaseDates.test.js index 1c5fad92b3..bdf53e6ddb 100644 --- a/test/content/releaseDates.test.js +++ b/test/content/releaseDates.test.js @@ -19,8 +19,8 @@ describe('releaseDates', () => { }); describe('armoire', () => { it('should only contain valid armoire names', () => { - const lastReleaseDate = maxBy(Object.values(ARMOIRE_RELEASE_DATES), value => new Date(`${value.year}-${value.month + 1}-20`)); - clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month + 1}-20`)); + const lastReleaseDate = maxBy(Object.values(ARMOIRE_RELEASE_DATES), value => new Date(`${value.year}-${value.month}-22`)); + clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-22`)); Object.keys(ARMOIRE_RELEASE_DATES).forEach(key => { expect(find(armoire.all, { set: key }), `${key} is not a valid armoire set`).to.exist; }); @@ -40,8 +40,8 @@ describe('releaseDates', () => { describe('eggs', () => { it('should only contain valid egg names', () => { - const lastReleaseDate = maxBy(Object.values(EGGS_RELEASE_DATES), value => new Date(`${value.year}-${value.month + 1}-${value.day}`)); - clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month + 1}-${lastReleaseDate.day}`)); + const lastReleaseDate = maxBy(Object.values(EGGS_RELEASE_DATES), value => new Date(`${value.year}-${value.month}-${value.day}`)); + clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-${lastReleaseDate.day + 1}`)); Object.keys(EGGS_RELEASE_DATES).forEach(key => { expect(eggs.all[key], `${key} is not a valid egg name`).to.exist; }); @@ -61,8 +61,8 @@ describe('releaseDates', () => { describe('hatchingPotions', () => { it('should only contain valid potion names', () => { - const lastReleaseDate = maxBy(Object.values(HATCHING_POTIONS_RELEASE_DATES), value => new Date(`${value.year}-${value.month + 1}-${value.day}`)); - clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month + 1}-${lastReleaseDate.day}`)); + const lastReleaseDate = maxBy(Object.values(HATCHING_POTIONS_RELEASE_DATES), value => new Date(`${value.year}-${value.month}-${value.day}`)); + clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-${lastReleaseDate.day + 1}`)); Object.keys(HATCHING_POTIONS_RELEASE_DATES).forEach(key => { expect(hatchingPotions.all[key], `${key} is not a valid potion name`).to.exist; }); diff --git a/test/content/schedule.test.js b/test/content/schedule.test.js index 6e8c172a98..de44938126 100644 --- a/test/content/schedule.test.js +++ b/test/content/schedule.test.js @@ -1,4 +1,5 @@ // eslint-disable-next-line max-len +import maxBy from 'lodash/maxBy'; import moment from 'moment'; import nconf from 'nconf'; import { @@ -10,6 +11,7 @@ import QUEST_BUNDLES from '../../website/common/script/content/bundles'; import potions from '../../website/common/script/content/hatching-potions'; import SPELLS from '../../website/common/script/content/spells'; import QUEST_SEASONAL from '../../website/common/script/content/quests/seasonal'; +import { HATCHING_POTIONS_RELEASE_DATES } from '../../website/common/script/content/constants/releaseDates'; function validateMatcher (matcher, checkedDate) { expect(matcher.end).to.be.a('date'); @@ -222,6 +224,8 @@ describe('Content Schedule', () => { }); it('premium hatching potions', () => { + const lastReleaseDate = maxBy(Object.values(HATCHING_POTIONS_RELEASE_DATES), value => new Date(`${value.year}-${value.month}-${value.day}`)); + clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-${lastReleaseDate.day + 1}`)); const potionKeys = Object.keys(potions.premium); Object.keys(MONTHLY_SCHEDULE).forEach(key => { const monthlyPotions = MONTHLY_SCHEDULE[key][21].find(item => item.type === 'premiumHatchingPotions'); diff --git a/website/client/src/components/shops/seasonal/index.vue b/website/client/src/components/shops/seasonal/index.vue index fd807d8d66..8d9adf706c 100644 --- a/website/client/src/components/shops/seasonal/index.vue +++ b/website/client/src/components/shops/seasonal/index.vue @@ -163,14 +163,7 @@ slot="itemBadge" slot-scope="ctx" > - - - + @@ -178,6 +171,23 @@ + + + @@ -346,11 +356,17 @@ import svgWizard from '@/assets/svg/wizard.svg'; import svgRogue from '@/assets/svg/rogue.svg'; import svgHealer from '@/assets/svg/healer.svg'; +import BuyQuestModal from '../quests/buyQuestModal.vue'; +import CategoryItem from '../market/categoryItem'; +import FilterGroup from '@/components/ui/filterGroup'; import FilterSidebar from '@/components/ui/filterSidebar'; import { worldStateMixin } from '@/mixins/worldState'; export default { components: { + BuyQuestModal, + CategoryItem, + FilterGroup, FilterSidebar, Checkbox, PinBadge, @@ -386,6 +402,7 @@ export default { featuredGearBought: false, currentEvent: null, backgroundUpdate: new Date(), + selectedItemToBuy: null, imageURLs: { background: '', npc: '', @@ -550,7 +567,12 @@ export default { return false; }, itemSelected (item) { - this.$root.$emit('buyModal::showItem', item); + if (item.type === 'quests') { + this.selectedItemToBuy = item; + this.$root.$emit('bv::show::modal', 'buy-quest-modal'); + } else { + this.$root.$emit('buyModal::showItem', item); + } }, }, }; diff --git a/website/common/locales/en/backgrounds.json b/website/common/locales/en/backgrounds.json index 5c6fae7bad..d4e989adc5 100644 --- a/website/common/locales/en/backgrounds.json +++ b/website/common/locales/en/backgrounds.json @@ -1003,6 +1003,10 @@ "backgroundCastleHallWithHearthText": "Castle Hall with Hearth", "backgroundCastleHallWithHearthNotes": "Bask in the warmth of a Castle Hall with a Hearth.", + "backgrounds122024": "SET 127: Released December 2024", + "backgroundFirstSnowForestText": "First Snow in the Forest", + "backgroundFirstSnowForestNotes": "Step into the First Snow in the Forest.", + "timeTravelBackgrounds": "Steampunk Backgrounds", "backgroundAirshipText": "Airship", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", diff --git a/website/common/locales/en/content.json b/website/common/locales/en/content.json index d57ec53b95..049d3e4a5d 100644 --- a/website/common/locales/en/content.json +++ b/website/common/locales/en/content.json @@ -335,6 +335,7 @@ "hatchingPotionRoseGold": "Rose Gold", "hatchingPotionFungi": "Fungi", "hatchingPotionKoi": "Koi", + "hatchingPotionGingerbread": "Gingerbread", "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> Pet.", "premiumPotionUnlimitedNotes": "Not usable on Quest Pet eggs.", diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json index e2bee90ba3..2b35806d56 100644 --- a/website/common/locales/en/gear.json +++ b/website/common/locales/en/gear.json @@ -533,6 +533,15 @@ "weaponSpecialFall2024MageText": "Staff of the Underworld", "weaponSpecialFall2024MageNotes": "Task steps will instantly become simplified with one touch of this shining weapon. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition Fall 2024 Gear.", + "weaponSpecialWinter2025WarriorText": "Moose Warrior Axe", + "weaponSpecialWinter2025WarriorNotes": "A mighty axe for a mighty moose! You’ll be unstoppable! Increases Strength by <%= str %>. Limited Edition Winter 2024-2025 Gear.", + "weaponSpecialWinter2025RogueText": "Snowflake Burst", + "weaponSpecialWinter2025RogueNotes": "Thump and dazzle those difficult tasks into submission! You’ll be unstoppable! Increases Strength by <%= str %>. Limited Edition Winter 2024-2025 Gear.", + "weaponSpecialWinter2025HealerText": "Star Wand", + "weaponSpecialWinter2025HealerNotes": "What you need now are more lights and a glowing star to go on top! You'll be unstoppable! Increases Intelligence by <%= int %>. Limited Edition Winter 2024-2025 Gear.", + "weaponSpecialWinter2025MageText": "Northern Lights Display", + "weaponSpecialWinter2025MageNotes": "This stunning, colorful show provides the perfect backdrop! You’ll be unstoppable! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition Winter 2024-2025 Gear.", + "weaponMystery201411Text": "Pitchfork of Feasting", "weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.", "weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth", @@ -1304,6 +1313,16 @@ "armorSpecialFall2024MageText": "Underworld Sorceror Armor", "armorSpecialFall2024MageNotes": "Be one with the underworld and embrace the power of mages who’ve come before you in this armor. Increases Intelligence by <%= int %>. Limited Edition Fall 2024 Gear.", + "armorSpecialWinter2025WarriorText": "Moose Warrior Armor", + "armorSpecialWinter2025WarriorNotes": "Everyone’s going to step aside and make way for you when you wear this armor. Increases Constitution by <%= con %>. Limited Edition Winter 2024-2025 Gear.", + "armorSpecialWinter2025RogueText": "Snow Costume", + "armorSpecialWinter2025RogueNotes": "Although you look like you’re covered in cold snow, you are toasty, warm, jolly, and happy when you wear this costume. Increases Perception by <%= per %>. Limited Edition Winter 2024-2025 Gear.", + "armorSpecialWinter2025HealerText": "Robe of String Lights", + "armorSpecialWinter2025HealerNotes": "Twinkle your way through your tasks. Just be careful—if one bulb goes out, they all go out. Increases Constitution by <%= con %>. Limited Edition Winter 2024-2025 Gear.", + "armorSpecialWinter2025MageText": "Aurora Cloak", + "armorSpecialWinter2025MageNotes": "Wonder, whimsy, enchantment, and splendor will fill your days when you dance in this cloak. Increases Intelligence by <%= int %>. Limited Edition Winter 2024-2025 Gear.", + + "armorMystery201402Text": "Messenger Robes", "armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.", "armorMystery201403Text": "Forest Walker Armor", @@ -1432,6 +1451,8 @@ "armorMystery202406Notes": "Haunt your enemies with style and flair! Confers no benefit. June 2024 Subscriber Item.", "armorMystery202407Text": "Amiable Axolotl Suit", "armorMystery202407Notes": "Glide through lakes and canals with your sweeping pink tail! Confers no benefit. July 2024 Subscriber Item.", + "armorMystery202412Text": "Candy Cane Cottontail Coat", + "armorMystery202412Notes": "A fun and fluffy look to keep you snug on a winter day. Confers no benefit. December 2024 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", @@ -1656,6 +1677,8 @@ "armorArmoireFunnyFoolCostumeNotes": "Dum-de-dum! Surely you jest. This colorful outfit looks amazing on you! Increases Strength by <%= str %>. Enchanted Armoire: Funny Fool Set (Item 2 of 3)", "armorArmoireStormKnightArmorText": "Storm Knight Armor", "armorArmoireStormKnightArmorNotes": "In this armor, you are nearly invincible. Your enemies will never see the storm’s end. Increases Perception by <%= per %>. Enchanted Armoire: Storm Knight Set (Item 2 of 3)", + "armorArmoireFestiveHelperOverallsText": "Festive Helper Overalls", + "armorArmoireFestiveHelperOverallsNotes": "Durable and comfortable, these overalls are great for working, playing, and assisting others. Plus, it has pockets! Increases Constitution by <%= con %>. Enchanted Armoire: Festive Helper Set (Item 2 of 2)", "headgear": "helm", "headgearCapitalized": "Headgear", @@ -2163,6 +2186,15 @@ "headSpecialFall2024MageText": "Underworld Sorcerer Mask", "headSpecialFall2024MageNotes": "Whether you’re mysterious or whimsical, you won’t be missed when you wear this! Increases Perception by <%= per %>. Limited Edition Fall 2024 Gear.", + "headSpecialWinter2025WarriorText": "Moose Warrior Helmet", + "headSpecialWinter2025WarriorNotes": "So, get this: now you look just like a moose. Wear those antlers with pride. Increases Strength by <%= str %>. Limited Edition Winter 2024-2025 Gear.", + "headSpecialWinter2025RogueText": "Snow Mask", + "headSpecialWinter2025RogueNotes": "There is definitely some magic in this hat, because it transforms you into a snow person. Just don’t let the bunny get too close to your carrot nose. Increases Perception by <%= per %>. Limited Edition Winter 2024-2025 Gear.", + "headSpecialWinter2025HealerText": "Tangle of String Lights", + "headSpecialWinter2025HealerNotes": "Don’t bother untangling these because they are already in the shape of a hat. Increases Intelligence by <%= int %>. Limited Edition Winter 2024-2025 Gear.", + "headSpecialWinter2025MageText": "Aurora Hat", + "headSpecialWinter2025MageNotes": "More than just a fancy fascinator, this hat makes you look like the aurora borealis itself. Increases Perception by <%= per %>. Limited Edition Winter 2024-2025 Gear.", + "headSpecialGaymerxText": "Rainbow Warrior Helm", "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", @@ -2334,6 +2366,8 @@ "headMystery202409Notes": "More than just jaunty decorations, the enchanted sunflowers on this hat fill the wearer with powerful magic energy. Confers no benefit. September 2024 Subscriber Item.", "headMystery202411Text": "Bristled Helm", "headMystery202411Notes": "This helm is quite intimidating to your tasks when you dive in headfirst! Confers no benefit. November 2024 Subscriber Item.", + "headMystery202412Text": "Candy Cane Cottontail Hood", + "headMystery202412Notes": "Warm and cozy, just like a cup of minty hot cocoa on a winter night! Confers no benefit. December 2024 Subscriber Item.", "headMystery301404Text": "Fancy Top Hat", "headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", @@ -2538,6 +2572,8 @@ "headArmoireFunnyFoolCapNotes": "The bells on this hat might make your opponents burst into giggles, but they just help you concentrate. Increases Constitution by <%= con %>. Enchanted Armoire: Funny Fool Set (Item 1 of 3)", "headArmoireStormKnightHelmText": "Storm Knight Helm", "headArmoireStormKnightHelmNotes": "Harness lightning through these antlers as you storm the castle. Increases Constitution by <%= con %>. Enchanted Armoire: Storm Knight Set (Item 1 of 3)", + "headArmoireFestiveHelperHatText": "Festive Helper Hat", + "headArmoireFestiveHelperHatNotes": "Holiday tip #27: have a helper hat handy. This one is big enough to keep an emergency toy underneath! Increases Intelligence by <%= int %>. Enchanted Armoire: Festive Helper Set (Item 1 of 2)", "offhand": "off-hand item", "offHandCapitalized": "Off-Hand Item", @@ -2826,6 +2862,11 @@ "shieldSpecialFall2024HealerText": "Space Shield", "shieldSpecialFall2024HealerNotes": "New tasks wanting your attention bounce right off until you’ve completed your current mission. Increases Constitution by <%= con %>. Limited Edition Fall 2024 Gear.", + "shieldSpecialWinter2025WarriorText": "Moose Warrior Shield", + "shieldSpecialWinter2025WarriorNotes": "Block out any unwanted distractions with this shield as strong as a moose. Increases Constitution by <%= con %>. Limited Edition Winter 2024-2025 Gear.", + "shieldSpecialWinter2025HealerText": "The Perfect Gift", + "shieldSpecialWinter2025HealerNotes": "The perfect gift is just waiting to be opened. What could be inside? Increases Constitution by <%= con %>. Limited Edition Winter 2024-2025 Gear.", + "shieldMystery201601Text": "Resolution Slayer", "shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.", "shieldMystery201701Text": "Time-Freezer Shield", diff --git a/website/common/locales/en/limited.json b/website/common/locales/en/limited.json index 614d34a94a..5935e33fe2 100644 --- a/website/common/locales/en/limited.json +++ b/website/common/locales/en/limited.json @@ -223,6 +223,10 @@ "fall2024UnderworldSorcerorMageSet": "Underworld Sorceror Set (Mage)", "fall2024SpaceInvaderHealerSet": "Space Invader Set (Healer)", "fall2024BlackCatRogueSet": "Black Cat Set (Rogue)", + "winter2025MooseWarriorSet": "Moose Warrior Set", + "winter2025AuroraMageSet": "Aurora Mage Set", + "winter2025StringLightsHealerSet": "String Lights Healer Set", + "winter2025SnowRogueSet": "Snow Rogue Set", "winterPromoGiftHeader": "GIFT A SUBSCRIPTION, GET ONE FREE!", "winterPromoGiftDetails1": "Until January 6th only, when you gift somebody a subscription, you get the same subscription for yourself for free!", "winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3", diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json index 7f9b186f82..394746ce8f 100644 --- a/website/common/locales/en/subscriber.json +++ b/website/common/locales/en/subscriber.json @@ -168,6 +168,7 @@ "mysterySet202409": "Heliotrope Magus Set", "mysterySet202410": "Candy Corn Fox Set", "mysterySet202411": "Bristled Brawler Set", + "mysterySet202412": "Candy Cane Cottontail Set", "mysterySet301404": "Steampunk Standard Set", "mysterySet301405": "Steampunk Accessories Set", "mysterySet301703": "Peacock Steampunk Set", diff --git a/website/common/script/content/appearance/backgrounds.js b/website/common/script/content/appearance/backgrounds.js index 84bc2354a7..d9329406ae 100644 --- a/website/common/script/content/appearance/backgrounds.js +++ b/website/common/script/content/appearance/backgrounds.js @@ -638,6 +638,9 @@ const backgrounds = { backgrounds112024: { castle_hall_with_hearth: { }, }, + backgrounds122024: { + first_snow_forest: { }, + }, eventBackgrounds: { birthday_bash: { price: 0, diff --git a/website/common/script/content/constants/releaseDates.js b/website/common/script/content/constants/releaseDates.js index fddf41b510..f519db780a 100644 --- a/website/common/script/content/constants/releaseDates.js +++ b/website/common/script/content/constants/releaseDates.js @@ -13,6 +13,7 @@ export const ARMOIRE_RELEASE_DATES = { funnyFoolSet: { year: 2024, month: 9 }, frightNightSet: { year: 2024, month: 10 }, stormKnightSet: { year: 2024, month: 11 }, + festiveHelperSet: { year: 2024, month: 12 }, }; export const EGGS_RELEASE_DATES = { @@ -25,4 +26,5 @@ export const EGGS_RELEASE_DATES = { export const HATCHING_POTIONS_RELEASE_DATES = { Koi: { year: 2024, month: 6, day: 1 }, + Gingerbread: { year: 2024, month: 12, day: 21 }, }; diff --git a/website/common/script/content/constants/schedule.js b/website/common/script/content/constants/schedule.js index 73700b135c..99c0eb3a58 100644 --- a/website/common/script/content/constants/schedule.js +++ b/website/common/script/content/constants/schedule.js @@ -648,6 +648,7 @@ export const MONTHLY_SCHEDULE = { items: [ 'Peppermint', 'Holly', + 'Gingerbread', ], }, ], diff --git a/website/common/script/content/constants/seasonalSets.js b/website/common/script/content/constants/seasonalSets.js index dfdcf5edb9..d0b9112e13 100644 --- a/website/common/script/content/constants/seasonalSets.js +++ b/website/common/script/content/constants/seasonalSets.js @@ -57,6 +57,11 @@ const SEASONAL_SETS = { 'winter2024PeppermintBarkWarriorSet', 'winter2024NarwhalWizardMageSet', 'winter2024FrozenHealerSet', + + 'winter2025MooseWarriorSet', + 'winter2025AuroraMageSet', + 'winter2025StringLightsHealerSet', + 'winter2025SnowRogueSet', ], spring: [ // spring 2014 diff --git a/website/common/script/content/gear/sets/armoire.js b/website/common/script/content/gear/sets/armoire.js index 341b973b76..c5be7dfcd4 100644 --- a/website/common/script/content/gear/sets/armoire.js +++ b/website/common/script/content/gear/sets/armoire.js @@ -502,6 +502,10 @@ const armor = { per: 11, set: 'stormKnightSet', }, + festiveHelperOveralls: { + con: 12, + set: 'festiveHelperSet', + }, }; const body = { @@ -1027,6 +1031,10 @@ const head = { con: 11, set: 'stormKnightSet', }, + festiveHelperHat: { + int: 12, + set: 'festiveHelperSet', + }, }; const shield = { diff --git a/website/common/script/content/gear/sets/mystery.js b/website/common/script/content/gear/sets/mystery.js index 75f28b041d..3e15da24be 100644 --- a/website/common/script/content/gear/sets/mystery.js +++ b/website/common/script/content/gear/sets/mystery.js @@ -67,6 +67,7 @@ const armor = { 202401: { }, 202406: { }, 202407: { }, + 202412: { }, 301404: { }, 301703: { }, 301704: { }, @@ -232,6 +233,7 @@ const head = { 202407: { }, 202409: { }, 202411: { }, + 202412: { }, 301404: { }, 301405: { }, 301703: { }, diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js index 7f43d51d54..b746fab776 100644 --- a/website/common/script/content/gear/sets/special/index.js +++ b/website/common/script/content/gear/sets/special/index.js @@ -779,6 +779,18 @@ const armor = { fall2024Rogue: { set: 'fall2024BlackCatRogueSet', }, + winter2025Warrior: { + set: 'winter2025MooseWarriorSet', + }, + winter2025Mage: { + set: 'winter2025AuroraMageSet', + }, + winter2025Healer: { + set: 'winter2025StringLightsHealerSet', + }, + winter2025Rogue: { + set: 'winter2025SnowRogueSet', + }, }; const armorStats = { @@ -1868,6 +1880,18 @@ const head = { fall2024Rogue: { set: 'fall2024BlackCatRogueSet', }, + winter2025Warrior: { + set: 'winter2025MooseWarriorSet', + }, + winter2025Mage: { + set: 'winter2025AuroraMageSet', + }, + winter2025Healer: { + set: 'winter2025StringLightsHealerSet', + }, + winter2025Rogue: { + set: 'winter2025SnowRogueSet', + }, }; const headStats = { @@ -2558,6 +2582,15 @@ const shield = { fall2024Rogue: { set: 'fall2024BlackCatRogueSet', }, + winter2025Warrior: { + set: 'winter2025MooseWarriorSet', + }, + winter2025Healer: { + set: 'winter2025StringLightsHealerSet', + }, + winter2025Rogue: { + set: 'winter2025SnowRogueSet', + }, }; const shieldStats = { @@ -3237,6 +3270,18 @@ const weapon = { fall2024Rogue: { set: 'fall2024BlackCatRogueSet', }, + winter2025Warrior: { + set: 'winter2025MooseWarriorSet', + }, + winter2025Mage: { + set: 'winter2025AuroraMageSet', + }, + winter2025Healer: { + set: 'winter2025StringLightsHealerSet', + }, + winter2025Rogue: { + set: 'winter2025SnowRogueSet', + }, }; const weaponStats = { diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js index 203a26648c..aef5e7aa67 100644 --- a/website/common/script/content/hatching-potions.js +++ b/website/common/script/content/hatching-potions.js @@ -127,6 +127,7 @@ const premium = { }, RoseGold: {}, Koi: {}, + Gingerbread: {}, }; const wacky = { diff --git a/website/common/script/libs/shops-seasonal.config.js b/website/common/script/libs/shops-seasonal.config.js index 83bdc2192a..103e6e0e8f 100644 --- a/website/common/script/libs/shops-seasonal.config.js +++ b/website/common/script/libs/shops-seasonal.config.js @@ -23,7 +23,8 @@ function safeGetSet (currentEvent, year, className) { } function getCurrentSeasonalSets (currentEvent) { - const year = new Date().getFullYear(); + const now = new Date(); + const year = now.getMonth() === 11 ? now.getFullYear() + 1 : now.getFullYear(); return { rogue: safeGetSet(currentEvent, year, 'Rogue'), warrior: safeGetSet(currentEvent, year, 'Warrior'),