update(content): add 2024 Spring Fling (#15168)

* update(content): add spring fling images, items, and placeholder text

* update(dates) : set canonical dates

* update(dates/quests): set canonical dates for both, add egg quest availability

* update(date): update quest availability start date

* update(content): add magic hatching potions

* fix(dates): canonical dates

* fix(event): add correct event name to potions

* fix(dates): canonical dates

* fix(dates): fix UTC offset, remove package.json and package-lock.json

* fix(dates): canonical

* fix: re-added package.json and package-lock.json

* update(content): add gear strings

* update(content): add Rogue off-hand string, canonical dates
This commit is contained in:
Natalie
2024-03-13 17:34:41 -04:00
committed by GitHub
parent 8c7a0b4861
commit 3e5226de67
12 changed files with 317 additions and 36 deletions

View File

@@ -12,18 +12,18 @@ export default prefill({
pastelHairColors: { setPrice: 5, availableUntil: '2016-01-01' },
rainbowHairColors: { setPrice: 5, text: t('rainbowColors') },
shimmerHairColors: {
setPrice: 5, availableFrom: '2023-04-11T08:00-05:00', availableUntil: EVENTS.spring2023.end, text: t('shimmerColors'),
setPrice: 5, availableFrom: '2024-04-16T08:00-05:00', availableUntil: EVENTS.spring2024.end, text: t('shimmerColors'),
},
hauntedHairColors: {
setPrice: 5, availableFrom: '2023-10-03T08:00-04:00', availableUntil: EVENTS.fall2023.end, text: t('hauntedColors'),
},
winteryHairColors: {
setPrice: 5, availableFrom: '2023-01-16T08:00-05:00', availableUntil: EVENTS.winter2024.end, text: t('winteryColors'), // 2024-01-16
setPrice: 5, availableFrom: '2023-01-16T08:00-05:00', availableUntil: EVENTS.winter2024.end, text: t('winteryColors'),
},
rainbowSkins: { setPrice: 5, text: t('rainbowSkins') },
animalSkins: { setPrice: 5, text: t('animalSkins') },
pastelSkins: {
setPrice: 5, availableFrom: '2022-04-11T08:00-05:00', availableUntil: EVENTS.spring2023.end, text: t('pastelSkins'),
setPrice: 5, availableFrom: '2024-04-16T08:00-05:00', availableUntil: EVENTS.spring2024.end, text: t('pastelSkins'),
},
spookySkins: { setPrice: 5, availableUntil: '2016-01-01', text: t('spookySkins') },
supernaturalSkins: {
@@ -33,6 +33,6 @@ export default prefill({
setPrice: 5, availableFrom: '2023-07-11T08:00-05:00', availableUntil: EVENTS.summer2023.end, text: t('splashySkins'),
},
winterySkins: {
setPrice: 5, availableFrom: '2023-01-16T08:00-05:00', availableUntil: EVENTS.winter2024.end, text: t('winterySkins'), // 2024-01-16
setPrice: 5, availableFrom: '2023-01-16T08:00-05:00', availableUntil: EVENTS.winter2024.end, text: t('winterySkins'),
},
});

View File

@@ -10,11 +10,18 @@ const gemsPromo = {
export const EVENTS = {
noEvent: {
start: '2024-03-01T00:00-05:00',
end: '2024-03-20T08:00-05:00',
start: '2024-05-01T00:00-05:00',
end: '2024-06-20T08:00-05:00',
season: 'normal',
npcImageSuffix: '',
},
spring2024: {
start: '2024-03-21T00:00-04:00',
end: '2024-04-30T23:59-04:00',
npcImageSuffix: '_spring',
season: 'spring',
gear: true,
},
bundle202403: {
start: '2024-03-19T00:00-05:00',
end: '2024-03-31T08:00-05:00',

View File

@@ -111,6 +111,11 @@ const SEASONAL_SETS = {
'spring2023HummingbirdWarriorSet',
'spring2023MoonstoneMageSet',
'spring2023LilyHealerSet',
'spring2024FluoriteWarriorSet',
'spring2024HibiscusMageSet',
'spring2024BluebirdHealerSet',
'spring2024MeltingSnowRogueSet',
],
summer: [

View File

@@ -858,15 +858,19 @@ const armor = {
},
winter2024Warrior: {
set: 'winter2024PeppermintBarkWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Mage: {
set: 'winter2024NarwhalWizardMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Healer: {
set: 'winter2024FrozenHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Rogue: {
set: 'winter2024SnowyOwlRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
birthday2024: {
text: t('armorSpecialBirthday2024Text'),
@@ -874,6 +878,18 @@ const armor = {
value: 0,
canOwn: ownsItem('armor_special_birthday2024'),
},
spring2024Warrior: {
set: 'spring2024FluoriteWarriorSet',
},
spring2024Mage: {
set: 'spring2024HibiscusMageSet',
},
spring2024Healer: {
set: 'spring2024BluebirdHealerSet',
},
spring2024Rogue: {
set: 'spring2024MeltingSnowRogueSet',
},
};
const armorStats = {
@@ -2087,15 +2103,19 @@ const head = {
},
winter2024Healer: {
set: 'winter2024FrozenHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Rogue: {
set: 'winter2024SnowyOwlRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Warrior: {
set: 'winter2024PeppermintBarkWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Mage: {
set: 'winter2024NarwhalWizardMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
nye2023: {
text: t('headSpecialNye2023Text'),
@@ -2103,6 +2123,18 @@ const head = {
value: 0,
canOwn: ownsItem('head_special_nye2023'),
},
spring2024Warrior: {
set: 'spring2024FluoriteWarriorSet',
},
spring2024Mage: {
set: 'spring2024HibiscusMageSet',
},
spring2024Healer: {
set: 'spring2024BluebirdHealerSet',
},
spring2024Rogue: {
set: 'spring2024MeltingSnowRogueSet',
},
};
const headStats = {
@@ -2961,12 +2993,26 @@ const shield = {
},
winter2024Warrior: {
set: 'winter2024PeppermintBarkWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Rogue: {
set: 'winter2024SnowyOwlRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Healer: {
set: 'winter2024FrozenHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
spring2024Warrior: {
set: 'spring2024FluoriteWarriorSet',
},
spring2024Healer: {
set: 'spring2024BluebirdHealerSet',
},
spring2024Rogue: {
set: 'spring2024MeltingSnowRogueSet',
text: t('shieldSpecialSpring2024RogueText'),
notes: t('shieldSpecialSpring2024RogueNotes', { str: 8 }),
},
};
@@ -3774,15 +3820,31 @@ const weapon = {
},
winter2024Rogue: {
set: 'winter2024SnowyOwlRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Healer: {
set: 'winter2024FrozenHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Warrior: {
set: 'winter2024PeppermintBarkWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2024Mage: {
set: 'winter2024NarwhalWizardMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
spring2024Warrior: {
set: 'spring2024FluoriteWarriorSet',
},
spring2024Mage: {
set: 'spring2024HibiscusMageSet',
},
spring2024Healer: {
set: 'spring2024BluebirdHealerSet',
},
spring2024Rogue: {
set: 'spring2024MeltingSnowRogueSet',
},
};

View File

@@ -74,12 +74,12 @@ const premium = {
value: 2,
text: t('hatchingPotionShimmer'),
limited: true,
event: EVENTS.birthday10,
event: EVENTS.spring2024,
_addlNotes: t('eventAvailability', {
date: t('dateEndJanuary'),
date: t('dateEndApril'),
}),
canBuy () {
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
return moment().isBetween(EVENTS.spring2024.start, EVENTS.spring2024.end);
},
},
Fairy: {
@@ -209,9 +209,9 @@ const premium = {
_addlNotes: t('eventAvailability', {
date: t('dateEndApril'),
}),
event: EVENTS.spring2023,
event: EVENTS.spring2024,
canBuy () {
return moment().isBefore(EVENTS.spring2023.end);
return moment().isBetween(EVENTS.spring2024.start, EVENTS.spring2024.end);
},
},
Glass: {
@@ -278,12 +278,12 @@ const premium = {
value: 2,
text: t('hatchingPotionCelestial'),
limited: true,
event: EVENTS.birthday10,
event: EVENTS.spring2024,
_addlNotes: t('eventAvailability', {
date: t('dateStartFebruary'),
date: t('dateEndApril'),
}),
canBuy () {
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
return moment().isBetween(EVENTS.spring2024.start, EVENTS.spring2024.end);
},
},
Sunshine: {

View File

@@ -73,7 +73,7 @@ const QUEST_SEASONAL = {
egg: {
event: CURRENT_EVENT && CURRENT_EVENT.season === 'spring' ? CURRENT_EVENT : null,
canBuy () {
return this.event && moment().isBetween('2023-03-28T08:00-05:00', this.event.end);
return this.event && moment().isBetween('2024-04-18T08:00-05:00', this.event.end);
},
text: t('questEggHuntText'),
notes: t('questEggHuntNotes'),

View File

@@ -7,7 +7,7 @@ import { EVENTS } from './constants';
// hatching potions and food names should be capitalized lest you break the market
const featuredItems = {
market () {
if (moment().isBetween(EVENTS.potions202402.start, EVENTS.potions202402.end)) {
if (moment().isBetween(EVENTS.spring2024.start, EVENTS.spring2024.end)) {
return [
{
type: 'armoire',
@@ -15,15 +15,15 @@ const featuredItems = {
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.RoseGold',
path: 'premiumHatchingPotions.Celestial',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Cupid',
path: 'premiumHatchingPotions.Shimmer',
},
{
type: 'hatchingPotions',
path: 'hatchingPotions.Red',
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Rainbow',
},
];
}
@@ -34,15 +34,15 @@ const featuredItems = {
},
{
type: 'food',
path: 'food.Chocolate',
path: 'food.Fish',
},
{
type: 'hatchingPotions',
path: 'hatchingPotions.Desert',
path: 'hatchingPotions.Skeleton',
},
{
type: 'eggs',
path: 'eggs.Cactus',
path: 'eggs.Fox',
},
];
},
@@ -79,7 +79,7 @@ const featuredItems = {
},
];
},
seasonal: 'winter2021WinterMoonMageSet',
seasonal: 'spring2019CloudRogueSet',
timeTravelers: [
// TODO
],

View File

@@ -352,9 +352,9 @@ spells.special = {
previousPurchase: true,
target: 'user',
notes: t('spellSpecialShinySeedNotes'),
event: EVENTS.spring2023,
event: EVENTS.spring2024,
canOwn () {
return moment().isBetween('2023-04-18T08:00-05:00', EVENTS.spring2023.end);
return moment().isBetween('2024-04-18T08:00-05:00', EVENTS.spring2024.end);
},
cast (user, target, req) {
if (!user.items.special.shinySeed) throw new NotAuthorized(t('spellNotOwned')(req.language));