feat(content): prebuild Fall Festival (#14869)

* feat(content): prebuild Fall Festival

* fix(typos): because 2023 is not the same as 2024

* feat(css): having stylesheets is important

* feat(content): ready for review & testing

* fix(tests): account for Sept 09 bundle

* fix(gala): use multi event list more
fix a couple of strings too

* feat(content): Warrior and Rogue text
also fix timing of quest bundle feature

* fix(strings): correct stat boosts

* fix(content): missing mage
also adds missing margin to purchase gems button in buy modal

---------

Co-authored-by: SabreCat <sabe@habitica.com>
This commit is contained in:
Natalie
2023-09-20 20:46:34 -04:00
committed by GitHub
parent 9e25360102
commit f72eef6bff
18 changed files with 558 additions and 269 deletions

View File

@@ -15,7 +15,7 @@ export default prefill({
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'),
setPrice: 5, availableFrom: '2023-10-03T08:00-04:00', availableUntil: EVENTS.fall2023.end, text: t('hauntedColors'),
},
winteryHairColors: {
setPrice: 5, availableFrom: '2023-01-17T08:00-05:00', availableUntil: EVENTS.winter2023.end, text: t('winteryColors'),
@@ -27,7 +27,7 @@ export default prefill({
},
spookySkins: { setPrice: 5, availableUntil: '2016-01-01', text: t('spookySkins') },
supernaturalSkins: {
setPrice: 5, availableFrom: '2022-10-04T08:00-04:00', availableUntil: EVENTS.fall2022.end, text: t('supernaturalSkins'),
setPrice: 5, availableFrom: '2023-10-03T08:00-04:00', availableUntil: EVENTS.fall2023.end, text: t('supernaturalSkins'),
},
splashySkins: {
setPrice: 5, availableFrom: '2023-07-11T08:00-05:00', availableUntil: EVENTS.summer2023.end, text: t('splashySkins'),

View File

@@ -251,14 +251,15 @@ const bundles = {
sandySidekicks: {
key: 'sandySidekicks',
text: t('sandySidekicksText'),
notes: t('sandySidekicksNotes', { date: moment('2020-10-31').format('LL') }),
notes: t('sandySidekicksNotes', { date: moment('2023-10-31').format('LL') }),
bundleKeys: [
'armadillo',
'snake',
'spider',
],
event: EVENTS.bundle202310,
canBuy () {
return moment().isBetween('2020-10-13', '2020-11-02');
return moment().isBetween(EVENTS.bundle202310.start, EVENTS.bundle202310.end);
},
type: 'quests',
value: 7,

View File

@@ -10,11 +10,26 @@ const gemsPromo = {
export const EVENTS = {
noEvent: {
start: '2023-08-01T23:59-04:00',
end: '2023-09-12T08:00-04:00',
start: '2023-11-01T23:59-04:00',
end: '2023-12-21T08:00-04:00',
season: 'normal',
npcImageSuffix: '',
},
bundle202310: {
start: '2023-10-17T08:00-04:00',
end: '2023-10-31T23:59-04:00',
},
potions202310: {
start: '2023-09-21T08:00-04:00',
end: '2023-10-31T23:59-04:00',
},
fall2023: {
start: '2023-09-21T08:00-04:00',
end: '2023-10-31T23:59-04:00',
npcImageSuffix: '_fall',
season: 'fall',
gear: true,
},
bundle202309: {
start: '2023-09-12T08:00-04:00',
end: '2023-09-30T23:59-04:00',

View File

@@ -209,6 +209,11 @@ const SEASONAL_SETS = {
'fall2022OrcWarriorSet',
'fall2022HarpyMageSet',
'fall2022WatcherHealerSet',
'fall2023WitchsBrewRogueSet',
'fall2023BogCreatureHealerSet',
'fall2023ScaryMovieWarriorSet',
'fall2023ScarletWarlockMageSet',
],
};

View File

@@ -828,15 +828,31 @@ const armor = {
},
summer2023Rogue: {
set: 'summer2023GuppyRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2023Warrior: {
set: 'summer2023GoldfishWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2023Mage: {
set: 'summer2023CoralMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2023Healer: {
set: 'summer2023KelpHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
fall2023Warrior: {
set: 'fall2023ScaryMovieWarriorSet',
},
fall2023Healer: {
set: 'fall2023BogCreatureHealerSet',
},
fall2023Mage: {
set: 'fall2023ScarletWarlockMageSet',
},
fall2023Rogue: {
set: 'fall2023WitchsBrewRogueSet',
},
};
@@ -2019,15 +2035,31 @@ const head = {
},
summer2023Rogue: {
set: 'summer2023GuppyRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2023Warrior: {
set: 'summer2023GoldfishWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2023Mage: {
set: 'summer2023CoralMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2023Healer: {
set: 'summer2023KelpHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
fall2023Healer: {
set: 'fall2023BogCreatureHealerSet',
},
fall2023Mage: {
set: 'fall2023ScarletWarlockMageSet',
},
fall2023Rogue: {
set: 'fall2023WitchsBrewRogueSet',
},
fall2023Warrior: {
set: 'fall2023ScaryMovieWarriorSet',
},
};
@@ -2861,12 +2893,26 @@ const shield = {
},
summer2023Rogue: {
set: 'summer2023GuppyRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
summer2023Warrior: {
set: 'summer2023GoldfishWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
summer2023Healer: {
set: 'summer2023KelpHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2023Rogue: {
set: 'fall2023WitchsBrewRogueSet',
text: t('shieldSpecialFall2023RogueText'),
notes: t('shieldSpecialFall2023RogueNotes', { str: 8 }),
},
fall2023Warrior: {
set: 'fall2023ScaryMovieWarriorSet',
},
fall2023Healer: {
set: 'fall2023BogCreatureHealerSet',
},
};
@@ -3642,15 +3688,31 @@ const weapon = {
},
summer2023Rogue: {
set: 'summer2023GuppyRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
summer2023Warrior: {
set: 'summer2023GoldfishWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
summer2023Mage: {
set: 'summer2023CoralMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
summer2023Healer: {
set: 'summer2023KelpHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2023Rogue: {
set: 'fall2023WitchsBrewRogueSet',
},
fall2023Healer: {
set: 'fall2023BogCreatureHealerSet',
},
fall2023Warrior: {
set: 'fall2023ScaryMovieWarriorSet',
},
fall2023Mage: {
set: 'fall2023ScarletWarlockMageSet',
},
};

View File

@@ -153,13 +153,13 @@ const premium = {
value: 2,
text: t('hatchingPotionSpooky'),
limited: true,
event: EVENTS.fall2021,
event: EVENTS.fall2023,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndOctober'),
previousDate: t('septemberYYYY', { year: 2019 }),
previousDate: t('octoberYYYY', { year: 2021 }),
}),
canBuy () {
return moment().isBefore(EVENTS.fall2021.end);
return moment().isBetween(EVENTS.fall2023.start, EVENTS.fall2023.end);
},
},
Ghost: {
@@ -244,13 +244,13 @@ const premium = {
value: 2,
text: t('hatchingPotionGlow'),
limited: true,
event: EVENTS.birthday10,
event: EVENTS.fall2023,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateStartFebruary'),
previousDate: t('octoberYYYY', { year: 2021 }),
availableDate: t('dateEndOctober'),
previousDate: t('januaryYYYY', { year: 2023 }),
}),
canBuy () {
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
return moment().isBetween(EVENTS.fall2023.start, EVENTS.fall2023.end);
},
},
Frost: {
@@ -436,13 +436,13 @@ const premium = {
value: 2,
text: t('hatchingPotionVampire'),
limited: true,
event: EVENTS.birthday10,
event: EVENTS.fall2023,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateStartFebruary'),
previousDate: t('octoberYYYY', { year: 2022 }),
availableDate: t('dateEndOctober'),
previousDate: t('januaryYYYY', { year: 2023 }),
}),
canBuy () {
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
return moment().isBetween(EVENTS.fall2023.start, EVENTS.fall2023.end);
},
},
AutumnLeaf: {

View File

@@ -5,7 +5,7 @@ import { EVENTS } from './constants';
// path: 'premiumHatchingPotions.Rainbow',
const featuredItems = {
market () {
if (moment().isBetween(EVENTS.potions202308.start, EVENTS.potions202308.end)) {
if (moment().isBetween(EVENTS.fall2023.start, EVENTS.fall2023.end)) {
return [
{
type: 'armoire',
@@ -13,15 +13,15 @@ const featuredItems = {
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Thunderstorm',
path: 'premiumHatchingPotions.Glow',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Porcelain',
path: 'premiumHatchingPotions.Spooky',
},
{
type: 'hatchingPotions',
path: 'hatchingPotions.Zombie',
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Vampire',
},
];
}
@@ -32,7 +32,7 @@ const featuredItems = {
},
{
type: 'food',
path: 'food.Meat',
path: 'food.RottenMeat',
},
{
type: 'hatchingPotions',
@@ -40,40 +40,24 @@ const featuredItems = {
},
{
type: 'eggs',
path: 'eggs.Fox',
path: 'eggs.Cactus',
},
];
},
quests () {
if (moment().isBetween(EVENTS.bundle202309.start, EVENTS.bundle202309.end)) {
if (moment().isBetween(EVENTS.bundle202310.start, EVENTS.bundle202310.end)) {
return [
{
type: 'bundles',
path: 'bundles.featheredFriends',
path: 'bundles.sandySidekicks',
},
{
type: 'quests',
path: 'quests.pterodactyl',
path: 'quests.beetle',
},
{
type: 'quests',
path: 'quests.trex',
},
];
}
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',
path: 'quests.frog',
},
];
}
@@ -93,7 +77,7 @@ const featuredItems = {
},
];
},
seasonal: 'summer2022MantaRayMageSet',
seasonal: 'fall2017TrickOrTreatSet',
timeTravelers: [
// TODO
],

View File

@@ -313,7 +313,7 @@ spells.special = {
target: 'user',
notes: t('spellSpecialSpookySparklesNotes'),
canOwn () {
return moment().isBetween('2021-10-11T08:00-04:00', EVENTS.fall2022.end);
return moment().isBetween('2023-10-03T08:00-04:00', EVENTS.fall2023.end);
},
cast (user, target, req) {
if (!user.items.special.spookySparkles) throw new NotAuthorized(t('spellNotOwned')(req.language));