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 <eilatan@gmail.com>
This commit is contained in:
Kalista Payne
2024-11-19 11:44:22 -06:00
committed by GitHub
parent 5c734cfa00
commit 1ed61a3d3d
17 changed files with 161 additions and 16 deletions

View File

@@ -19,8 +19,8 @@ describe('releaseDates', () => {
}); });
describe('armoire', () => { describe('armoire', () => {
it('should only contain valid armoire names', () => { it('should only contain valid armoire names', () => {
const lastReleaseDate = maxBy(Object.values(ARMOIRE_RELEASE_DATES), value => new Date(`${value.year}-${value.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 + 1}-20`)); clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-22`));
Object.keys(ARMOIRE_RELEASE_DATES).forEach(key => { Object.keys(ARMOIRE_RELEASE_DATES).forEach(key => {
expect(find(armoire.all, { set: key }), `${key} is not a valid armoire set`).to.exist; expect(find(armoire.all, { set: key }), `${key} is not a valid armoire set`).to.exist;
}); });
@@ -40,8 +40,8 @@ describe('releaseDates', () => {
describe('eggs', () => { describe('eggs', () => {
it('should only contain valid egg names', () => { 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}`)); 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 + 1}-${lastReleaseDate.day}`)); clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-${lastReleaseDate.day + 1}`));
Object.keys(EGGS_RELEASE_DATES).forEach(key => { Object.keys(EGGS_RELEASE_DATES).forEach(key => {
expect(eggs.all[key], `${key} is not a valid egg name`).to.exist; expect(eggs.all[key], `${key} is not a valid egg name`).to.exist;
}); });
@@ -61,8 +61,8 @@ describe('releaseDates', () => {
describe('hatchingPotions', () => { describe('hatchingPotions', () => {
it('should only contain valid potion names', () => { 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}`)); 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 + 1}-${lastReleaseDate.day}`)); clock = sinon.useFakeTimers(new Date(`${lastReleaseDate.year}-${lastReleaseDate.month}-${lastReleaseDate.day + 1}`));
Object.keys(HATCHING_POTIONS_RELEASE_DATES).forEach(key => { Object.keys(HATCHING_POTIONS_RELEASE_DATES).forEach(key => {
expect(hatchingPotions.all[key], `${key} is not a valid potion name`).to.exist; expect(hatchingPotions.all[key], `${key} is not a valid potion name`).to.exist;
}); });

View File

@@ -1,4 +1,5 @@
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
import maxBy from 'lodash/maxBy';
import moment from 'moment'; import moment from 'moment';
import nconf from 'nconf'; import nconf from 'nconf';
import { import {
@@ -10,6 +11,7 @@ import QUEST_BUNDLES from '../../website/common/script/content/bundles';
import potions from '../../website/common/script/content/hatching-potions'; import potions from '../../website/common/script/content/hatching-potions';
import SPELLS from '../../website/common/script/content/spells'; import SPELLS from '../../website/common/script/content/spells';
import QUEST_SEASONAL from '../../website/common/script/content/quests/seasonal'; 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) { function validateMatcher (matcher, checkedDate) {
expect(matcher.end).to.be.a('date'); expect(matcher.end).to.be.a('date');
@@ -222,6 +224,8 @@ describe('Content Schedule', () => {
}); });
it('premium hatching potions', () => { 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); const potionKeys = Object.keys(potions.premium);
Object.keys(MONTHLY_SCHEDULE).forEach(key => { Object.keys(MONTHLY_SCHEDULE).forEach(key => {
const monthlyPotions = MONTHLY_SCHEDULE[key][21].find(item => item.type === 'premiumHatchingPotions'); const monthlyPotions = MONTHLY_SCHEDULE[key][21].find(item => item.type === 'premiumHatchingPotions');

View File

@@ -163,14 +163,7 @@
slot="itemBadge" slot="itemBadge"
slot-scope="ctx" slot-scope="ctx"
> >
<span <category-item :item="ctx.item" />
class="badge-top"
@click.prevent.stop="togglePinned(ctx.item)"
>
<pin-badge
:pinned="ctx.item.pinned"
/>
</span>
</template> </template>
</shopItem> </shopItem>
</div> </div>
@@ -178,6 +171,23 @@
</div> </div>
</div> </div>
</div> </div>
<buy-quest-modal
:item="selectedItemToBuy || {}"
:price-type="selectedItemToBuy ? selectedItemToBuy.currency : ''"
:with-pin="true"
>
<template
slot="item"
slot-scope="ctx"
>
<item
class="flat"
:item="ctx.item"
:item-content-class="ctx.item.class"
:show-popover="false"
/>
</template>
</buy-quest-modal>
</div> </div>
</template> </template>
@@ -346,11 +356,17 @@ import svgWizard from '@/assets/svg/wizard.svg';
import svgRogue from '@/assets/svg/rogue.svg'; import svgRogue from '@/assets/svg/rogue.svg';
import svgHealer from '@/assets/svg/healer.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 FilterSidebar from '@/components/ui/filterSidebar';
import { worldStateMixin } from '@/mixins/worldState'; import { worldStateMixin } from '@/mixins/worldState';
export default { export default {
components: { components: {
BuyQuestModal,
CategoryItem,
FilterGroup,
FilterSidebar, FilterSidebar,
Checkbox, Checkbox,
PinBadge, PinBadge,
@@ -386,6 +402,7 @@ export default {
featuredGearBought: false, featuredGearBought: false,
currentEvent: null, currentEvent: null,
backgroundUpdate: new Date(), backgroundUpdate: new Date(),
selectedItemToBuy: null,
imageURLs: { imageURLs: {
background: '', background: '',
npc: '', npc: '',
@@ -550,7 +567,12 @@ export default {
return false; return false;
}, },
itemSelected (item) { itemSelected (item) {
if (item.type === 'quests') {
this.selectedItemToBuy = item;
this.$root.$emit('bv::show::modal', 'buy-quest-modal');
} else {
this.$root.$emit('buyModal::showItem', item); this.$root.$emit('buyModal::showItem', item);
}
}, },
}, },
}; };

View File

@@ -1003,6 +1003,10 @@
"backgroundCastleHallWithHearthText": "Castle Hall with Hearth", "backgroundCastleHallWithHearthText": "Castle Hall with Hearth",
"backgroundCastleHallWithHearthNotes": "Bask in the warmth of a Castle Hall with a 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", "timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship", "backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",

View File

@@ -335,6 +335,7 @@
"hatchingPotionRoseGold": "Rose Gold", "hatchingPotionRoseGold": "Rose Gold",
"hatchingPotionFungi": "Fungi", "hatchingPotionFungi": "Fungi",
"hatchingPotionKoi": "Koi", "hatchingPotionKoi": "Koi",
"hatchingPotionGingerbread": "Gingerbread",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> Pet.", "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> Pet.",
"premiumPotionUnlimitedNotes": "Not usable on Quest Pet eggs.", "premiumPotionUnlimitedNotes": "Not usable on Quest Pet eggs.",

View File

@@ -533,6 +533,15 @@
"weaponSpecialFall2024MageText": "Staff of the Underworld", "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.", "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! Youll be unstoppable! Increases Strength by <%= str %>. Limited Edition Winter 2024-2025 Gear.",
"weaponSpecialWinter2025RogueText": "Snowflake Burst",
"weaponSpecialWinter2025RogueNotes": "Thump and dazzle those difficult tasks into submission! Youll 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! Youll be unstoppable! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition Winter 2024-2025 Gear.",
"weaponMystery201411Text": "Pitchfork of Feasting", "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.", "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", "weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
@@ -1304,6 +1313,16 @@
"armorSpecialFall2024MageText": "Underworld Sorceror Armor", "armorSpecialFall2024MageText": "Underworld Sorceror Armor",
"armorSpecialFall2024MageNotes": "Be one with the underworld and embrace the power of mages whove come before you in this armor. Increases Intelligence by <%= int %>. Limited Edition Fall 2024 Gear.", "armorSpecialFall2024MageNotes": "Be one with the underworld and embrace the power of mages whove come before you in this armor. Increases Intelligence by <%= int %>. Limited Edition Fall 2024 Gear.",
"armorSpecialWinter2025WarriorText": "Moose Warrior Armor",
"armorSpecialWinter2025WarriorNotes": "Everyones 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 youre 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", "armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.", "armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor", "armorMystery201403Text": "Forest Walker Armor",
@@ -1432,6 +1451,8 @@
"armorMystery202406Notes": "Haunt your enemies with style and flair! Confers no benefit. June 2024 Subscriber Item.", "armorMystery202406Notes": "Haunt your enemies with style and flair! Confers no benefit. June 2024 Subscriber Item.",
"armorMystery202407Text": "Amiable Axolotl Suit", "armorMystery202407Text": "Amiable Axolotl Suit",
"armorMystery202407Notes": "Glide through lakes and canals with your sweeping pink tail! Confers no benefit. July 2024 Subscriber Item.", "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", "armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "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)", "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", "armorArmoireStormKnightArmorText": "Storm Knight Armor",
"armorArmoireStormKnightArmorNotes": "In this armor, you are nearly invincible. Your enemies will never see the storms end. Increases Perception by <%= per %>. Enchanted Armoire: Storm Knight Set (Item 2 of 3)", "armorArmoireStormKnightArmorNotes": "In this armor, you are nearly invincible. Your enemies will never see the storms 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", "headgear": "helm",
"headgearCapitalized": "Headgear", "headgearCapitalized": "Headgear",
@@ -2163,6 +2186,15 @@
"headSpecialFall2024MageText": "Underworld Sorcerer Mask", "headSpecialFall2024MageText": "Underworld Sorcerer Mask",
"headSpecialFall2024MageNotes": "Whether youre mysterious or whimsical, you wont be missed when you wear this! Increases Perception by <%= per %>. Limited Edition Fall 2024 Gear.", "headSpecialFall2024MageNotes": "Whether youre mysterious or whimsical, you wont 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 dont 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": "Dont 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", "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.", "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.", "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", "headMystery202411Text": "Bristled Helm",
"headMystery202411Notes": "This helm is quite intimidating to your tasks when you dive in headfirst! Confers no benefit. November 2024 Subscriber Item.", "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", "headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", "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)", "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", "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)", "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", "offhand": "off-hand item",
"offHandCapitalized": "Off-Hand Item", "offHandCapitalized": "Off-Hand Item",
@@ -2826,6 +2862,11 @@
"shieldSpecialFall2024HealerText": "Space Shield", "shieldSpecialFall2024HealerText": "Space Shield",
"shieldSpecialFall2024HealerNotes": "New tasks wanting your attention bounce right off until youve completed your current mission. Increases Constitution by <%= con %>. Limited Edition Fall 2024 Gear.", "shieldSpecialFall2024HealerNotes": "New tasks wanting your attention bounce right off until youve 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", "shieldMystery201601Text": "Resolution Slayer",
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.", "shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
"shieldMystery201701Text": "Time-Freezer Shield", "shieldMystery201701Text": "Time-Freezer Shield",

View File

@@ -223,6 +223,10 @@
"fall2024UnderworldSorcerorMageSet": "Underworld Sorceror Set (Mage)", "fall2024UnderworldSorcerorMageSet": "Underworld Sorceror Set (Mage)",
"fall2024SpaceInvaderHealerSet": "Space Invader Set (Healer)", "fall2024SpaceInvaderHealerSet": "Space Invader Set (Healer)",
"fall2024BlackCatRogueSet": "Black Cat Set (Rogue)", "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!", "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!", "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", "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",

View File

@@ -168,6 +168,7 @@
"mysterySet202409": "Heliotrope Magus Set", "mysterySet202409": "Heliotrope Magus Set",
"mysterySet202410": "Candy Corn Fox Set", "mysterySet202410": "Candy Corn Fox Set",
"mysterySet202411": "Bristled Brawler Set", "mysterySet202411": "Bristled Brawler Set",
"mysterySet202412": "Candy Cane Cottontail Set",
"mysterySet301404": "Steampunk Standard Set", "mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set", "mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set", "mysterySet301703": "Peacock Steampunk Set",

View File

@@ -638,6 +638,9 @@ const backgrounds = {
backgrounds112024: { backgrounds112024: {
castle_hall_with_hearth: { }, castle_hall_with_hearth: { },
}, },
backgrounds122024: {
first_snow_forest: { },
},
eventBackgrounds: { eventBackgrounds: {
birthday_bash: { birthday_bash: {
price: 0, price: 0,

View File

@@ -13,6 +13,7 @@ export const ARMOIRE_RELEASE_DATES = {
funnyFoolSet: { year: 2024, month: 9 }, funnyFoolSet: { year: 2024, month: 9 },
frightNightSet: { year: 2024, month: 10 }, frightNightSet: { year: 2024, month: 10 },
stormKnightSet: { year: 2024, month: 11 }, stormKnightSet: { year: 2024, month: 11 },
festiveHelperSet: { year: 2024, month: 12 },
}; };
export const EGGS_RELEASE_DATES = { export const EGGS_RELEASE_DATES = {
@@ -25,4 +26,5 @@ export const EGGS_RELEASE_DATES = {
export const HATCHING_POTIONS_RELEASE_DATES = { export const HATCHING_POTIONS_RELEASE_DATES = {
Koi: { year: 2024, month: 6, day: 1 }, Koi: { year: 2024, month: 6, day: 1 },
Gingerbread: { year: 2024, month: 12, day: 21 },
}; };

View File

@@ -648,6 +648,7 @@ export const MONTHLY_SCHEDULE = {
items: [ items: [
'Peppermint', 'Peppermint',
'Holly', 'Holly',
'Gingerbread',
], ],
}, },
], ],

View File

@@ -57,6 +57,11 @@ const SEASONAL_SETS = {
'winter2024PeppermintBarkWarriorSet', 'winter2024PeppermintBarkWarriorSet',
'winter2024NarwhalWizardMageSet', 'winter2024NarwhalWizardMageSet',
'winter2024FrozenHealerSet', 'winter2024FrozenHealerSet',
'winter2025MooseWarriorSet',
'winter2025AuroraMageSet',
'winter2025StringLightsHealerSet',
'winter2025SnowRogueSet',
], ],
spring: [ spring: [
// spring 2014 // spring 2014

View File

@@ -502,6 +502,10 @@ const armor = {
per: 11, per: 11,
set: 'stormKnightSet', set: 'stormKnightSet',
}, },
festiveHelperOveralls: {
con: 12,
set: 'festiveHelperSet',
},
}; };
const body = { const body = {
@@ -1027,6 +1031,10 @@ const head = {
con: 11, con: 11,
set: 'stormKnightSet', set: 'stormKnightSet',
}, },
festiveHelperHat: {
int: 12,
set: 'festiveHelperSet',
},
}; };
const shield = { const shield = {

View File

@@ -67,6 +67,7 @@ const armor = {
202401: { }, 202401: { },
202406: { }, 202406: { },
202407: { }, 202407: { },
202412: { },
301404: { }, 301404: { },
301703: { }, 301703: { },
301704: { }, 301704: { },
@@ -232,6 +233,7 @@ const head = {
202407: { }, 202407: { },
202409: { }, 202409: { },
202411: { }, 202411: { },
202412: { },
301404: { }, 301404: { },
301405: { }, 301405: { },
301703: { }, 301703: { },

View File

@@ -779,6 +779,18 @@ const armor = {
fall2024Rogue: { fall2024Rogue: {
set: 'fall2024BlackCatRogueSet', set: 'fall2024BlackCatRogueSet',
}, },
winter2025Warrior: {
set: 'winter2025MooseWarriorSet',
},
winter2025Mage: {
set: 'winter2025AuroraMageSet',
},
winter2025Healer: {
set: 'winter2025StringLightsHealerSet',
},
winter2025Rogue: {
set: 'winter2025SnowRogueSet',
},
}; };
const armorStats = { const armorStats = {
@@ -1868,6 +1880,18 @@ const head = {
fall2024Rogue: { fall2024Rogue: {
set: 'fall2024BlackCatRogueSet', set: 'fall2024BlackCatRogueSet',
}, },
winter2025Warrior: {
set: 'winter2025MooseWarriorSet',
},
winter2025Mage: {
set: 'winter2025AuroraMageSet',
},
winter2025Healer: {
set: 'winter2025StringLightsHealerSet',
},
winter2025Rogue: {
set: 'winter2025SnowRogueSet',
},
}; };
const headStats = { const headStats = {
@@ -2558,6 +2582,15 @@ const shield = {
fall2024Rogue: { fall2024Rogue: {
set: 'fall2024BlackCatRogueSet', set: 'fall2024BlackCatRogueSet',
}, },
winter2025Warrior: {
set: 'winter2025MooseWarriorSet',
},
winter2025Healer: {
set: 'winter2025StringLightsHealerSet',
},
winter2025Rogue: {
set: 'winter2025SnowRogueSet',
},
}; };
const shieldStats = { const shieldStats = {
@@ -3237,6 +3270,18 @@ const weapon = {
fall2024Rogue: { fall2024Rogue: {
set: 'fall2024BlackCatRogueSet', set: 'fall2024BlackCatRogueSet',
}, },
winter2025Warrior: {
set: 'winter2025MooseWarriorSet',
},
winter2025Mage: {
set: 'winter2025AuroraMageSet',
},
winter2025Healer: {
set: 'winter2025StringLightsHealerSet',
},
winter2025Rogue: {
set: 'winter2025SnowRogueSet',
},
}; };
const weaponStats = { const weaponStats = {

View File

@@ -127,6 +127,7 @@ const premium = {
}, },
RoseGold: {}, RoseGold: {},
Koi: {}, Koi: {},
Gingerbread: {},
}; };
const wacky = { const wacky = {

View File

@@ -23,7 +23,8 @@ function safeGetSet (currentEvent, year, className) {
} }
function getCurrentSeasonalSets (currentEvent) { function getCurrentSeasonalSets (currentEvent) {
const year = new Date().getFullYear(); const now = new Date();
const year = now.getMonth() === 11 ? now.getFullYear() + 1 : now.getFullYear();
return { return {
rogue: safeGetSet(currentEvent, year, 'Rogue'), rogue: safeGetSet(currentEvent, year, 'Rogue'),
warrior: safeGetSet(currentEvent, year, 'Warrior'), warrior: safeGetSet(currentEvent, year, 'Warrior'),