feat(event): Spring Fling 2019

This commit is contained in:
Sabe Jones
2019-03-19 19:52:59 -05:00
parent 1d81916674
commit e0291cf432
51 changed files with 274 additions and 35 deletions

View File

@@ -2,8 +2,8 @@
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer
// more to be added on future seasons
$npc_market_flavor: 'normal';
$npc_quests_flavor: 'normal';
$npc_seasonal_flavor: 'normal';
$npc_timetravelers_flavor: 'normal';
$npc_tavern_flavor: 'normal';
$npc_market_flavor: 'spring';
$npc_quests_flavor: 'spring';
$npc_seasonal_flavor: 'spring';
$npc_timetravelers_flavor: 'spring';
$npc_tavern_flavor: 'spring';

View File

@@ -164,30 +164,30 @@ export default {
classGear (heroClass) {
if (heroClass === 'rogue') {
return {
armor: 'armor_rogue_5',
head: 'head_rogue_5',
shield: 'shield_rogue_6',
weapon: 'weapon_rogue_6',
armor: 'armor_special_spring2019Rogue',
head: 'head_special_spring2019Rogue',
shield: 'shield_special_spring2019Rogue',
weapon: 'weapon_special_spring2019Rogue',
};
} else if (heroClass === 'wizard') {
return {
armor: 'armor_wizard_5',
head: 'head_wizard_5',
weapon: 'weapon_wizard_6',
armor: 'armor_special_spring2019Mage',
head: 'head_special_spring2019Mage',
weapon: 'weapon_special_spring2019Mage',
};
} else if (heroClass === 'healer') {
return {
armor: 'armor_healer_5',
head: 'head_healer_5',
shield: 'shield_healer_5',
weapon: 'weapon_healer_6',
armor: 'armor_special_spring2019Healer',
head: 'head_special_spring2019Healer',
shield: 'shield_special_spring2019Healer',
weapon: 'weapon_special_spring2019Healer',
};
} else {
return {
armor: 'armor_warrior_5',
head: 'head_warrior_5',
shield: 'shield_warrior_5',
weapon: 'weapon_warrior_6',
armor: 'armor_special_spring2019Warrior',
head: 'head_special_spring2019Warrior',
shield: 'shield_special_spring2019Warrior',
weapon: 'weapon_special_spring2019Warrior',
};
}
},

View File

@@ -312,6 +312,15 @@
"weaponSpecialWinter2019HealerText": "Wand of Winter",
"weaponSpecialWinter2019HealerNotes": "Winter can be a time of rest and healing, and so this wand of winter magic can help to soothe the most grievous hurts. Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.",
"weaponSpecialSpring2019RogueText": "Lightning Bolt",
"weaponSpecialSpring2019RogueNotes": "These weapons contain the power of the sky and rain. We recommend that you not use them while immersed in water. Increases Strength by <%= str %>. Limited Edition 2019 Spring Gear.",
"weaponSpecialSpring2019WarriorText": "Stem Sword",
"weaponSpecialSpring2019WarriorNotes": "Bad habits cower before this verdant blade. Increases Strength by <%= str %>. Limited Edition 2019 Spring Gear.",
"weaponSpecialSpring2019MageText": "Amber Staff",
"weaponSpecialSpring2019MageNotes": "There's a mosquito embedded in the stone at the end of this staff! May or may not include Dino DNA. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2019 Spring Gear.",
"weaponSpecialSpring2019HealerText": "Spring Song",
"weaponSpecialSpring2019HealerNotes": "Your song of flowers and rain will soothe the spirits of all who hear. Increases Intelligence by <%= int %>. Limited Edition 2019 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",
@@ -701,6 +710,15 @@
"armorSpecialWinter2019HealerText": "Midnight Robe",
"armorSpecialWinter2019HealerNotes": "Without darkness, there wouldn't be any light. These dark robes help bring peace and rest to promote healing. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.",
"armorSpecialSpring2019RogueText": "Cloud Armor",
"armorSpecialSpring2019RogueNotes": "Some very tuff fluff. Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.",
"armorSpecialSpring2019WarriorText": "Orchid Armor",
"armorSpecialSpring2019WarriorNotes": "Steely armor of reinforced petals protects your heart and also looks pretty snazzy. Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.",
"armorSpecialSpring2019MageText": "Amber Robes",
"armorSpecialSpring2019MageNotes": "These robes gather power from magic resin embedded in the fibers of ancient bark that compose the cloth. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.",
"armorSpecialSpring2019HealerText": "Robin Costume",
"armorSpecialSpring2019HealerNotes": "Your bright feathers will let everyone know that the cold and dark of winter has passed. Increases Constitution by <%= con %>. Limited Edition 2019 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",
@@ -1179,6 +1197,15 @@
"headSpecialWinter2019HealerText": "Starry Crown",
"headSpecialWinter2019HealerNotes": "On the darkest, coldest winter night, one particular star shines its brightest. This crown is made from metal from that star, to help you shine! Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.",
"headSpecialSpring2019RogueText": "Cloud Helm",
"headSpecialSpring2019RogueNotes": "No one will notice a cloud quietly drifting toward their stash of Gold, right? Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.",
"headSpecialSpring2019WarriorText": "Orchid Helm",
"headSpecialSpring2019WarriorNotes": "This helm is unbreakable and tough! Also it attracts butterflies. Increases Strength by <%= str %>. Limited Edition 2019 Spring Gear.",
"headSpecialSpring2019MageText": "Amber Hat",
"headSpecialSpring2019MageNotes": "A glowing amber gem grants this hat the power of arcane natural forces. Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.",
"headSpecialSpring2019HealerText": "Robin Helm",
"headSpecialSpring2019HealerNotes": "Be ready for the first day of spring with this cute beaky helm. Increases Intelligence by <%= int %>. Limited Edition 2019 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.",
@@ -1568,6 +1595,11 @@
"shieldSpecialWinter2019HealerText": "Enchanted Ice Crystals",
"shieldSpecialWinter2019HealerNotes": "Thin ice may break, but these perfect crystals will turn back any blow before it lands. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.",
"shieldSpecialSpring2019WarriorText": "Leafy Shield",
"shieldSpecialSpring2019WarriorNotes": "Let the power of chlorophyll keep your enemies at bay! Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.",
"shieldSpecialSpring2019HealerText": "Eggshell Shield",
"shieldSpecialSpring2019HealerNotes": "This bright shield is actually made of candy-coated chocolate. Increases Constitution by <%= con %>. Limited Edition 2019 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",

View File

@@ -134,6 +134,10 @@
"winter2019PyrotechnicSet": "Pyrotechnic (Mage)",
"winter2019WinterStarSet": "Winter Star (Healer)",
"winter2019PoinsettiaSet": "Poinsettia (Rogue)",
"spring2019OrchidWarriorSet": "Orchid (Warrior)",
"spring2019AmberMageSet": "Amber (Mage)",
"spring2019RobinHealerSet": "Robin (Healer)",
"spring2019CloudRogueSet": "Cloud (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"dateEndMarch": "April 30",
"dateEndApril": "April 19",

View File

@@ -35,6 +35,7 @@ export const EVENTS = {
summer2018: { start: '2018-06-19', end: '2018-08-02' },
fall2018: { start: '2018-09-20', end: '2018-11-02' },
winter2019: { start: '2018-12-19', end: '2019-02-02' },
spring2019: { start: '2019-03-19', end: '2019-04-02' },
};
export const SEASONAL_SETS = {
@@ -105,6 +106,12 @@ export const SEASONAL_SETS = {
'spring2018SunriseWarriorSet',
'spring2018DucklingRogueSet',
'spring2018GarnetHealerSet',
// spring 2019
'spring2019AmberMageSet',
'spring2019OrchidWarriorSet',
'spring2019CloudRogueSet',
'spring2019RobinHealerSet',
],
summer: [
// summer 2014

View File

@@ -8,7 +8,7 @@ import takeThisGear from './special-takeThis';
import wonderconGear from './special-wondercon';
import t from '../../../translation';
const CURRENT_SEASON = '_NONE_';
const CURRENT_SEASON = 'spring';
let armor = {
0: backerGear.armorSpecial0,
@@ -965,6 +965,9 @@ let armor = {
notes: t('armorSpecialSpring2018RogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Warrior: {
event: EVENTS.spring2018,
@@ -974,6 +977,9 @@ let armor = {
notes: t('armorSpecialSpring2018WarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Mage: {
event: EVENTS.spring2018,
@@ -983,6 +989,9 @@ let armor = {
notes: t('armorSpecialSpring2018MageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Healer: {
event: EVENTS.spring2018,
@@ -992,6 +1001,9 @@ let armor = {
notes: t('armorSpecialSpring2018HealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
summer2018Rogue: {
event: EVENTS.summer2018,
@@ -1113,6 +1125,42 @@ let armor = {
value: 0,
canOwn: ownsItem('armor_special_birthday2019'),
},
spring2019Rogue: {
event: EVENTS.spring2019,
specialClass: 'rogue',
set: 'spring2019CloudRogueSet',
text: t('armorSpecialSpring2019RogueText'),
notes: t('armorSpecialSpring2019RogueNotes', { per: 15 }),
value: 90,
per: 15,
},
spring2019Warrior: {
event: EVENTS.spring2019,
specialClass: 'warrior',
set: 'spring2019OrchidWarriorSet',
text: t('armorSpecialSpring2019WarriorText'),
notes: t('armorSpecialSpring2019WarriorNotes', { con: 9 }),
value: 90,
con: 9,
},
spring2019Mage: {
event: EVENTS.spring2019,
specialClass: 'wizard',
set: 'spring2019AmberMageSet',
text: t('armorSpecialSpring2019MageText'),
notes: t('armorSpecialSpring2019MageNotes', { int: 9 }),
value: 90,
int: 9,
},
spring2019Healer: {
event: EVENTS.spring2019,
specialClass: 'healer',
set: 'spring2019RobinHealerSet',
text: t('armorSpecialSpring2019HealerText'),
notes: t('armorSpecialSpring2019HealerNotes', { con: 15 }),
value: 90,
con: 15,
},
};
let back = {
@@ -2358,6 +2406,9 @@ let head = {
notes: t('headSpecialSpring2018RogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Warrior: {
event: EVENTS.spring2018,
@@ -2367,6 +2418,9 @@ let head = {
notes: t('headSpecialSpring2018WarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Mage: {
event: EVENTS.spring2018,
@@ -2376,6 +2430,9 @@ let head = {
notes: t('headSpecialSpring2018MageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Healer: {
event: EVENTS.spring2018,
@@ -2385,6 +2442,9 @@ let head = {
notes: t('headSpecialSpring2018HealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
summer2018Rogue: {
event: EVENTS.summer2018,
@@ -2512,6 +2572,42 @@ let head = {
value: 0,
canOwn: ownsItem('head_special_piDay'),
},
spring2019Rogue: {
event: EVENTS.spring2019,
specialClass: 'rogue',
set: 'spring2019CloudRogueSet',
text: t('headSpecialSpring2019RogueText'),
notes: t('headSpecialSpring2019RogueNotes', { per: 9 }),
value: 60,
per: 9,
},
spring2019Warrior: {
event: EVENTS.spring2019,
specialClass: 'warrior',
set: 'spring2019OrchidWarriorSet',
text: t('headSpecialSpring2019WarriorText'),
notes: t('headSpecialSpring2019WarriorNotes', { str: 9 }),
value: 60,
str: 9,
},
spring2019Mage: {
event: EVENTS.spring2019,
specialClass: 'wizard',
set: 'spring2019AmberMageSet',
text: t('headSpecialSpring2019MageText'),
notes: t('headSpecialSpring2019MageNotes', { per: 7 }),
value: 60,
per: 7,
},
spring2019Healer: {
event: EVENTS.spring2019,
specialClass: 'healer',
set: 'spring2019RobinHealerSet',
text: t('headSpecialSpring2019HealerText'),
notes: t('headSpecialSpring2019HealerNotes', { int: 7 }),
value: 60,
int: 7,
},
};
let headAccessory = {
@@ -3503,6 +3599,9 @@ let shield = {
notes: t('weaponSpecialSpring2018RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Warrior: {
event: EVENTS.spring2018,
@@ -3512,6 +3611,9 @@ let shield = {
notes: t('shieldSpecialSpring2018WarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Healer: {
event: EVENTS.spring2018,
@@ -3521,6 +3623,9 @@ let shield = {
notes: t('shieldSpecialSpring2018HealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
summer2018Rogue: {
event: EVENTS.summer2018,
@@ -3609,6 +3714,33 @@ let shield = {
value: 0,
canOwn: ownsItem('shield_special_piDay'),
},
spring2019Rogue: {
event: EVENTS.spring2019,
specialClass: 'rogue',
set: 'spring2019CloudRogueSet',
text: t('weaponSpecialSpring2019RogueText'),
notes: t('weaponSpecialSpring2019RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
spring2019Warrior: {
event: EVENTS.spring2019,
specialClass: 'warrior',
set: 'spring2019OrchidWarriorSet',
text: t('shieldSpecialSpring2019WarriorText'),
notes: t('shieldSpecialSpring2019WarriorNotes', { con: 7 }),
value: 70,
con: 7,
},
spring2019Healer: {
event: EVENTS.spring2019,
specialClass: 'healer',
set: 'spring2019RobinHealerSet',
text: t('shieldSpecialSpring2019HealerText'),
notes: t('shieldSpecialSpring2019HealerNotes', { con: 9 }),
value: 70,
con: 9,
},
};
let weapon = {
@@ -4570,6 +4702,9 @@ let weapon = {
notes: t('weaponSpecialSpring2018RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Warrior: {
event: EVENTS.spring2018,
@@ -4579,6 +4714,9 @@ let weapon = {
notes: t('weaponSpecialSpring2018WarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Mage: {
event: EVENTS.spring2018,
@@ -4590,6 +4728,9 @@ let weapon = {
value: 160,
int: 15,
per: 7,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
spring2018Healer: {
event: EVENTS.spring2018,
@@ -4599,6 +4740,9 @@ let weapon = {
notes: t('weaponSpecialSpring2018HealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return CURRENT_SEASON === 'spring';
},
},
summer2018Rogue: {
event: EVENTS.summer2018,
@@ -4714,6 +4858,44 @@ let weapon = {
value: 90,
int: 9,
},
spring2019Rogue: {
event: EVENTS.spring2019,
specialClass: 'rogue',
set: 'spring2019CloudRogueSet',
text: t('weaponSpecialSpring2019RogueText'),
notes: t('weaponSpecialSpring2019RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
spring2019Warrior: {
event: EVENTS.spring2019,
specialClass: 'warrior',
set: 'spring2019OrchidWarriorSet',
text: t('weaponSpecialSpring2019WarriorText'),
notes: t('weaponSpecialSpring2019WarriorNotes', { str: 15 }),
value: 90,
str: 15,
},
spring2019Mage: {
event: EVENTS.spring2019,
specialClass: 'wizard',
set: 'spring2019AmberMageSet',
twoHanded: true,
text: t('weaponSpecialSpring2019MageText'),
notes: t('weaponSpecialSpring2019MageNotes', { int: 15, per: 7 }),
value: 160,
int: 15,
per: 7,
},
spring2019Healer: {
event: EVENTS.spring2019,
specialClass: 'healer',
set: 'spring2019RobinHealerSet',
text: t('weaponSpecialSpring2019HealerText'),
notes: t('weaponSpecialSpring2019HealerNotes', { int: 9 }),
value: 90,
int: 9,
},
};
let specialSet = {

View File

@@ -511,7 +511,7 @@ let quests = {
value: 1,
category: 'pet',
canBuy () {
return false;
return true;
},
collect: {
plainEgg: {

View File

@@ -27,14 +27,14 @@ const featuredItems = {
},
{
type: 'quests',
path: 'quests.sabretooth',
path: 'quests.egg',
},
{
type: 'quests',
path: 'quests.rock',
},
],
seasonal: '',
seasonal: 'spring2018Healer',
timeTravelers: [
// TODO
],

View File

@@ -1,23 +1,29 @@
// import { SEASONAL_SETS } from '../content/constants';
import { SEASONAL_SETS } from '../content/constants';
module.exports = {
opened: false,
opened: true,
currentSeason: 'Closed',
currentSeason: 'Spring',
dateRange: { start: '2018-09-20', end: '2018-10-31' },
dateRange: { start: '2019-03-19', end: '2019-04-30' },
availableSets: [
...SEASONAL_SETS.spring,
],
pinnedSets: {
wizard: 'spring2019AmberMageSet',
warrior: 'spring2019OrchidWarriorSet',
rogue: 'spring2019CloudRogueSet',
healer: 'spring2019RobinHealerSet',
},
availableSpells: [
],
availableQuests: [
'egg',
],
featuredSet: 'mummyMedicSet',
featuredSet: 'spring2018DucklingRogueSet',
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth';
let api = {};
// @TODO export this const, cannot export it from here because only routes are exported from controllers
const LAST_ANNOUNCEMENT_TITLE = 'CELEBRATE PI DAY WITH HABITICA!';
const LAST_ANNOUNCEMENT_TITLE = 'SPRING FLING BEGINS! LIMITED EDITION EQUIPMENT, SEASONAL SHOP, AND EGG QUEST!';
const worldDmg = { // @TODO
bailey: false,
};
@@ -30,14 +30,22 @@ api.getNews = {
<div class="mr-3 ${baileyClass}"></div>
<div class="media-body">
<h1 class="align-self-center">${res.t('newStuff')}</h1>
<h2>3/14/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
<h2>3/19/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
</div>
</div>
<hr/>
<div class="promo_pi_day center-block"></div>
<p>Hello Habiticans! In celebration of Pi Day on March 14, we've gifted everyone delicious slices of pie for you all to feed to your pets.</p>
<p>We've also given everyone a festive Pi Hat and Shield so you can celebrate in style. Enjoy them, and thanks for being a part of our community!</p>
<div class="small mb-3">by Beffymaroo and SabreCat</div>
<div class="promo_classes_spring2019 center-block"></div>
<h3>Limited Edition Class Outfits</h3>
<p>From now until April 30th, limited edition outfits are available in the Rewards column! Depending on your class, you can be a Cloud Rogue, Robin Healer, Amber Mage, or Orchid Warrior. You'd better get productive to earn enough Gold before your time runs out...</p>
<div class="small mb-3">by Eslyn, Aspiring Advocate, OuttaMyMind, Lt. Cabel, Beffymaroo and SabreCat</div>
<div class="promo_seasonalshop_spring center-block"></div>
<h3>Seasonal Shop Opens</h3>
<p>The <a href='/shops/seasonal'>Seasonal Shop</a> has opened! It's stocking springtime Seasonal Edition goodies at the moment, including past spring outfits. Everything there will be available to purchase during the Spring Fling event each year, but it's only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!</p>
<div class="small mb-3">by Vikte, Lalaitha, DialFForFunky, Gerald the Pixel, Scarvia, Awesome kitty, usnbfs, Lemoness, Balduranne, PainterProphet, Beffymaroo and SabreCat</div>
<div class="promo_egg_hunt center-block"></div>
<h3>Egg Quest Available</h3>
<p>The Egg Quest is also available again in the <a href='/shops/seasonal'>Seasonal Shop</a>! Strange eggs are appearing all over Habitica. Can you collect them all to earn some colorful Egg pets and mounts?</p>
<div class="small mb-3">by Megan, Beffymaroo, and Lemoness</div>
</div>
`,
});