diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json index 931f2f804c..5af3f5a448 100644 --- a/website/common/locales/en/gear.json +++ b/website/common/locales/en/gear.json @@ -468,6 +468,15 @@ "weaponSpecialWinter2023HealerText": "Throwing Wreath", "weaponSpecialWinter2023HealerNotes": "Watch this festive, prickly wreath spin through the air toward your enemy or obstacles and return to you like a boomerang for another throw. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.", + "weaponSpecialSpring2023RogueText": "Nibbled Leaf", + "weaponSpecialSpring2023RogueNotes": "Slash! Swat! Snack! Get strong and ready for your coming metamorphosis. Increases Strength by <%= str %>. Limited Edition 2023 Spring Gear.", + "weaponSpecialSpring2023WarriorText": "Hummingbird Foil", + "weaponSpecialSpring2023WarriorNotes": "En garde! Fend off foes from your flowers with this foil! Increases Strength by <%= str %>. Limited Edition 2023 Spring Gear.", + "weaponSpecialSpring2023MageText": "Moonstone Magic", + "weaponSpecialSpring2023MageNotes": "The greater their glow, the more potent is their power. Increases Intelligence by <%= int %>. Limited Edition 2023 Spring Gear.", + "weaponSpecialSpring2023HealerText": "Lilium Pollen", + "weaponSpecialSpring2023HealerNotes": "With a puff and a sparkle, you deploy new growth, joy, and color. Increases Intelligence by <%= int %>. Limited Edition 2023 Spring 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", @@ -1131,6 +1140,15 @@ "armorSpecialWinter2023HealerText": "Cardinal Suit", "armorSpecialWinter2023HealerNotes": "This bright cardinal suit is perfect for flying high above your problems. Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.", + "armorSpecialSpring2023RogueText": "Caterpillar Cape", + "armorSpecialSpring2023RogueNotes": "You may only have four limbs to work with, but you can climb and crawl with the greatest of grubs. Increases Perception by <%= per %>. Limited Edition 2023 Spring Gear.", + "armorSpecialSpring2023WarriorText": "Hummingbird Armor", + "armorSpecialSpring2023WarriorNotes": "That humming sound you hear is your wings beating faster than you can imagine. Increases Constitution by <%= con %>. Limited Edition 2023 Spring Gear.", + "armorSpecialSpring2023MageText": "Moonstone Suit", + "armorSpecialSpring2023MageNotes": "This snazzy spring suit magnifies moonstone magic. Increases Intelligence by <%= int %>. Limited Edition 2023 Spring Gear.", + "armorSpecialSpring2023HealerText": "Lily Leaf Gown", + "armorSpecialSpring2023HealerNotes": "A sweep of verdant glory to make you the envy of the Party. Increases Constitution by <%= con %>. Limited Edition 2023 Spring 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", @@ -1873,6 +1891,15 @@ "headSpecialWinter2023HealerText": "Cardinal Helm", "headSpecialWinter2023HealerNotes": "This cardinal helm is perfect for whistling and singing to herald the winter season. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.", + "headSpecialSpring2023RogueText": "Caterpillar Cowl", + "headSpecialSpring2023RogueNotes": "Be sure to tuck in those tempting antennae when birds are hunting overhead! Increases Perception by <%= per %>. Limited Edition 2023 Spring Gear.", + "headSpecialSpring2023WarriorText": "Hummingbird Helmet", + "headSpecialSpring2023WarriorNotes": "Cover your visage in iridescent feathers when you fly into battle. Increases Strength by <%= str %>. Limited Edition 2023 Spring Gear.", + "headSpecialSpring2023MageText": "Moonstone Visor", + "headSpecialSpring2023MageNotes": "You’ll want to wear these glasses at night so you can see clearly by the light of the moon. Increases Perception by <%= per %>. Limited Edition 2023 Spring Gear.", + "headSpecialSpring2023HealerText": "Lily Bloom", + "headSpecialSpring2023HealerNotes": "This brilliant and colorful display shares a color scheme with the Orb of Rebirth! How symbolic! Increases Intelligence by <%= int %>. Limited Edition 2023 Spring 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.", @@ -2444,6 +2471,11 @@ "shieldSpecialWinter2023HealerText": "Cool Jams", "shieldSpecialWinter2023HealerNotes": "Your song of frost and snow will soothe the spirits of all who hear. Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.", + "shieldSpecialSpring2023WarriorText": "Flower Bunch", + "shieldSpecialSpring2023WarriorNotes": "Collect the spring’s best flowers into this brightly colored floral bunch. Increases Constitution by <%= con %>. Limited Edition 2023 Spring Gear.", + "shieldSpecialSpring2023HealerText": "Lily Corsage", + "shieldSpecialSpring2023HealerNotes": "An accent for a healing visit, or part of a ritual for attending a springtime dance! Increases Constitution by <%= con %>. Limited Edition 2023 Spring 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 f2ee092832..e0ea77d553 100644 --- a/website/common/locales/en/limited.json +++ b/website/common/locales/en/limited.json @@ -194,7 +194,11 @@ "winter2023WalrusWarriorSet": "Walrus (Warrior)", "winter2023FairyLightsMageSet": "Fairy Lights (Mage)", "winter2023CardinalHealerSet": "Cardinal (Healer)", - "winter2023RibbonRogueSet": "Ribbon (Rogue)", + "winter2023RibbonRogueSet": "Ribbon (Rogue)", + "spring2023CaterpillarRogueSet": "Caterpillar (Rogue)", + "spring2023HummingbirdWarriorSet": "Hummingbird (Warrior)", + "spring2023MoonstoneMageSet": "Moonstone (Mage)", + "spring2023LilyHealerSet": "Lily (Healer)", "eventAvailability": "Available for purchase until <%= date(locale) %>.", "eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.", "dateEndJanuary": "January 31", diff --git a/website/common/script/content/appearance/sets.js b/website/common/script/content/appearance/sets.js index a5b61c3a26..da351bcf5c 100644 --- a/website/common/script/content/appearance/sets.js +++ b/website/common/script/content/appearance/sets.js @@ -12,7 +12,7 @@ export default prefill({ pastelHairColors: { setPrice: 5, availableUntil: '2016-01-01' }, rainbowHairColors: { setPrice: 5, text: t('rainbowColors') }, shimmerHairColors: { - setPrice: 5, availableFrom: '2022-04-14T08:00-05:00', availableUntil: '2022-04-30T20:00-05:00', text: t('shimmerColors'), + setPrice: 5, availableFrom: '2023-04-11T08:00-05:00', availableUntil: EVENTS.spring2023.end, text: t('shimmerColors'), }, hauntedHairColors: { setPrice: 5, availableFrom: '2022-10-04T08:00-04:00', availableUntil: EVENTS.fall2022.end, text: t('hauntedColors'), @@ -23,7 +23,7 @@ export default prefill({ rainbowSkins: { setPrice: 5, text: t('rainbowSkins') }, animalSkins: { setPrice: 5, text: t('animalSkins') }, pastelSkins: { - setPrice: 5, availableFrom: '2022-04-14T08:00-05:00', availableUntil: '2022-04-30T20:00-05:00', text: t('pastelSkins'), + setPrice: 5, availableFrom: '2022-04-11T08:00-05:00', availableUntil: EVENTS.spring2023.end, text: t('pastelSkins'), }, spookySkins: { setPrice: 5, availableUntil: '2016-01-01', text: t('spookySkins') }, supernaturalSkins: { diff --git a/website/common/script/content/constants/events.js b/website/common/script/content/constants/events.js index 484a6426f9..c71dbf36b1 100644 --- a/website/common/script/content/constants/events.js +++ b/website/common/script/content/constants/events.js @@ -10,11 +10,18 @@ const gemsPromo = { export const EVENTS = { noEvent: { - start: '2023-02-28T23:59-05:00', - end: '2023-03-21T08:00-05:00', + start: '2023-05-01T23:59-05:00', + end: '2023-06-22T08:00-05:00', season: 'normal', npcImageSuffix: '', }, + spring2023: { + start: '2023-03-21T08:00-04:00', + end: '2023-04-30T23:59-04:00', + npcImageSuffix: '_spring', + season: 'spring', + gear: true, + }, bundle202303: { start: '2023-03-16T08:00-04:00', end: '2023-03-31T23:59-04:00', diff --git a/website/common/script/content/constants/seasonalSets.js b/website/common/script/content/constants/seasonalSets.js index 9af7043ce5..172bff5227 100644 --- a/website/common/script/content/constants/seasonalSets.js +++ b/website/common/script/content/constants/seasonalSets.js @@ -52,6 +52,7 @@ const SEASONAL_SETS = { 'winter2023WalrusWarriorSet', 'winter2023FairyLightsMageSet', 'winter2023CardinalHealerSet', + ], spring: [ // spring 2014 @@ -101,6 +102,11 @@ const SEASONAL_SETS = { 'spring2022PeridotHealerSet', 'spring2022RainstormWarriorSet', 'spring2022MagpieRogueSet', + + 'spring2023CaterpillarRogueSet', + 'spring2023HummingbirdWarriorSet', + 'spring2023MoonstoneMageSet', + 'spring2023LilyHealerSet', ], summer: [ diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js index 8b597413e1..d5a51530c7 100644 --- a/website/common/script/content/gear/sets/special/index.js +++ b/website/common/script/content/gear/sets/special/index.js @@ -789,15 +789,19 @@ const armor = { }, winter2023Rogue: { set: 'winter2023RibbonRogueSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Warrior: { set: 'winter2023WalrusWarriorSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Mage: { set: 'winter2023FairyLightsMageSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Healer: { set: 'winter2023CardinalHealerSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, birthday2023: { text: t('armorSpecialBirthday2023Text'), @@ -805,6 +809,18 @@ const armor = { value: 0, canOwn: ownsItem('armor_special_birthday2023'), }, + spring2023Rogue: { + set: 'spring2023CaterpillarRogueSet', + }, + spring2023Warrior: { + set: 'spring2023HummingbirdWarriorSet', + }, + spring2023Mage: { + set: 'spring2023MoonstoneMageSet', + }, + spring2023Healer: { + set: 'spring2023LilyHealerSet', + }, }; const armorStats = { @@ -1947,15 +1963,19 @@ const head = { }, winter2023Rogue: { set: 'winter2023RibbonRogueSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Warrior: { set: 'winter2023WalrusWarriorSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Mage: { set: 'winter2023FairyLightsMageSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Healer: { set: 'winter2023CardinalHealerSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, nye2022: { text: t('headSpecialNye2022Text'), @@ -1963,6 +1983,18 @@ const head = { value: 0, canOwn: ownsItem('head_special_nye2022'), }, + spring2023Rogue: { + set: 'spring2023CaterpillarRogueSet', + }, + spring2023Warrior: { + set: 'spring2023HummingbirdWarriorSet', + }, + spring2023Mage: { + set: 'spring2023MoonstoneMageSet', + }, + spring2023Healer: { + set: 'spring2023LilyHealerSet', + }, }; const headStats = { @@ -2742,7 +2774,7 @@ const shield = { }, spring2022Healer: { set: 'spring2022PeridotHealerSet', - canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring', }, summer2022Rogue: { set: 'summer2022CrabRogueSet', @@ -2770,12 +2802,24 @@ const shield = { }, winter2023Rogue: { set: 'winter2023RibbonRogueSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Warrior: { set: 'winter2023WalrusWarriorSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Healer: { set: 'winter2023CardinalHealerSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', + }, + spring2023Rogue: { + set: 'spring2023CaterpillarRogueSet', + }, + spring2023Warrior: { + set: 'spring2023HummingbirdWarriorSet', + }, + spring2023Healer: { + set: 'spring2023LilyHealerSet', }, }; @@ -3519,15 +3563,31 @@ const weapon = { }, winter2023Rogue: { set: 'winter2023RibbonRogueSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Warrior: { set: 'winter2023WalrusWarriorSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Mage: { set: 'winter2023FairyLightsMageSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', }, winter2023Healer: { set: 'winter2023CardinalHealerSet', + canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter', + }, + spring2023Rogue: { + set: 'spring2023CaterpillarRogueSet', + }, + spring2023Warrior: { + set: 'spring2023HummingbirdWarriorSet', + }, + spring2023Mage: { + set: 'spring2023MoonstoneMageSet', + }, + spring2023Healer: { + set: 'spring2023LilyHealerSet', }, }; diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js index d5cfdcd4f5..f30535d985 100644 --- a/website/common/script/content/hatching-potions.js +++ b/website/common/script/content/hatching-potions.js @@ -219,12 +219,12 @@ const premium = { text: t('hatchingPotionRainbow'), limited: true, _addlNotes: t('eventAvailabilityReturning', { - availableDate: t('dateEndMarch'), - previousDate: t('marchYYYY', { year: 2019 }), + availableDate: t('dateEndApril'), + previousDate: t('marchYYYY', { year: 2021 }), }), - event: EVENTS.spring2021, + event: EVENTS.spring2023, canBuy () { - return moment().isBefore(EVENTS.spring2021.end); + return moment().isBefore(EVENTS.spring2023.end); }, }, Glass: { @@ -389,13 +389,13 @@ const premium = { value: 2, text: t('hatchingPotionBirchBark'), limited: true, - event: EVENTS.spring2021, + event: EVENTS.spring2023, _addlNotes: t('eventAvailabilityReturning', { - availableDate: t('dateEndMarch'), - previousDate: t('marchYYYY', { year: 2020 }), + availableDate: t('dateEndApril'), + previousDate: t('marchYYYY', { year: 2021 }), }), canBuy () { - return moment().isBefore(EVENTS.spring2021.end); + return moment().isBefore(EVENTS.spring2023.end); }, }, Fluorite: { @@ -482,13 +482,13 @@ const premium = { value: 2, text: t('hatchingPotionPolkaDot'), limited: true, - event: EVENTS.spring2022, + event: EVENTS.spring2023, _addlNotes: t('eventAvailabilityReturning', { - availableDate: t('dateEndMarch'), - previousDate: t('marchYYYY', { year: 2021 }), + availableDate: t('dateEndApril'), + previousDate: t('marchYYYY', { year: 2022 }), }), canBuy () { - return moment().isBefore(EVENTS.spring2022.end); + return moment().isBefore(EVENTS.spring2023.end); }, }, MossyStone: { diff --git a/website/common/script/content/quests/seasonal.js b/website/common/script/content/quests/seasonal.js index 14116db688..d4a9a55307 100644 --- a/website/common/script/content/quests/seasonal.js +++ b/website/common/script/content/quests/seasonal.js @@ -74,7 +74,7 @@ const QUEST_SEASONAL = { egg: { event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null, canBuy () { - return this.event && moment().isBetween(this.event.start, this.event.end); + return this.event && moment().isBetween('2023-03-28T08:00-05:00', this.event.end); }, text: t('questEggHuntText'), notes: t('questEggHuntNotes'), diff --git a/website/common/script/content/shop-featuredItems.js b/website/common/script/content/shop-featuredItems.js index dcf159a42c..4f0c2e58a3 100644 --- a/website/common/script/content/shop-featuredItems.js +++ b/website/common/script/content/shop-featuredItems.js @@ -5,7 +5,7 @@ import { EVENTS } from './constants'; // path: 'premiumHatchingPotions.Rainbow', const featuredItems = { market () { - if (moment().isBetween(EVENTS.potions202302.start, EVENTS.potions202302.end)) { + if (moment().isBetween(EVENTS.spring2023.start, EVENTS.spring2023.end)) { return [ { type: 'armoire', @@ -13,15 +13,15 @@ const featuredItems = { }, { type: 'premiumHatchingPotion', - path: 'premiumHatchingPotions.RoseQuartz', + path: 'premiumHatchingPotions.PolkaDot', }, { type: 'premiumHatchingPotion', - path: 'premiumHatchingPotions.Cupid', + path: 'premiumHatchingPotions.BirchBark', }, { - type: 'hatchingPotions', - path: 'hatchingPotions.CottonCandyPink', + type: 'premiumHatchingPotion', + path: 'premiumHatchingPotions.Rainbow', }, ]; } @@ -32,51 +32,68 @@ const featuredItems = { }, { type: 'food', - path: 'food.RottenMeat', + path: 'food.Honey', }, { type: 'hatchingPotions', - path: 'hatchingPotions.CottonCandyBlue', + path: 'hatchingPotions.Golden', }, { type: 'eggs', - path: 'eggs.FlyingPig', + path: 'eggs.Dragon', }, ]; }, - quests () { - if (moment().isBetween(EVENTS.bundle202302.start, EVENTS.bundle202302.end)) { + quests () { // start date is 3/28 + if (moment().isBetween(EVENTS.bundle202303.start, EVENTS.bundle202303.end)) { return [ { type: 'bundles', - path: 'bundles.mythicalMarvels', + path: 'bundles.jungleBuddies', }, { type: 'quests', - path: 'quests.treeling', + path: 'quests.kraken', }, { type: 'quests', - path: 'quests.rock', + path: 'quests.nudibranch', }, ]; } + if (moment().isBetween('2023-03-28T08:00-05:00', EVENTS.spring2023.end)) { + return [ + { + type: 'quests', + path: 'quests.egg', + }, + { + type: 'quests', + path: 'quests.yarn', + }, + { + type: 'quests', + path: 'quests.ghost_stag', + }, + ]; + } + return [ { type: 'quests', - path: 'quests.slime', + path: 'quests.rat', }, { type: 'quests', - path: 'quests.seaserpent', + path: 'quests.kraken', }, { type: 'quests', - path: 'quests.unicorn', + path: 'quests.nudibranch', }, ]; }, - seasonal: 'winter2022Healer', + seasonal: 'spring2022Healer', timeTravelers: [ // TODO ], diff --git a/website/common/script/content/spells.js b/website/common/script/content/spells.js index 4662743883..33233d283e 100644 --- a/website/common/script/content/spells.js +++ b/website/common/script/content/spells.js @@ -360,9 +360,9 @@ spells.special = { previousPurchase: true, target: 'user', notes: t('spellSpecialShinySeedNotes'), - event: EVENTS.spring2022, + event: EVENTS.spring2023, canOwn () { - return moment().isBetween('2022-04-14T08:00-05:00', EVENTS.spring2022.end); + return moment().isBetween('2023-04-18T08:00-05:00', EVENTS.spring2023.end); }, cast (user, target, req) { if (!user.items.special.shinySeed) throw new NotAuthorized(t('spellNotOwned')(req.language)); diff --git a/website/common/script/libs/shops-seasonal.config.js b/website/common/script/libs/shops-seasonal.config.js index 4fc7d58dab..082d799a73 100644 --- a/website/common/script/libs/shops-seasonal.config.js +++ b/website/common/script/libs/shops-seasonal.config.js @@ -29,24 +29,23 @@ export default { pinnedSets: CURRENT_EVENT ? { - rogue: 'winter2023RibbonRogueSet', - warrior: 'winter2023WalrusWarriorSet', - wizard: 'winter2023FairyLightsMageSet', - healer: 'winter2023CardinalHealerSet', + rogue: 'spring2023CaterpillarRogueSet', + warrior: 'spring2023HummingbirdWarriorSet', + wizard: 'spring2023MoonstoneMageSet', + healer: 'spring2023LilyHealerSet', } : {}, - availableSpells: CURRENT_EVENT && moment().isBetween('2022-12-27T08:00-05:00', CURRENT_EVENT.end) + availableSpells: CURRENT_EVENT && moment().isBetween('2023-04-18T08:00-05:00', CURRENT_EVENT.end) ? [ - 'snowball', + 'shinySeed', ] : [], - availableQuests: CURRENT_EVENT && CURRENT_EVENT.season === 'winter' + availableQuests: CURRENT_EVENT && moment().isBetween('2023-03-28T08:00-05:00', CURRENT_EVENT.end) ? [ - 'evilsanta', - 'evilsanta2', + 'egg', ] : [], - featuredSet: 'winter2022PomegranateMageSet', + featuredSet: 'spring2022MagpieRogueSet', };