feat(event): Wonderland 2019-20

This commit is contained in:
Sabe Jones 2019-12-19 16:54:27 -06:00
parent a4eabc05e7
commit c4b16f86db
96 changed files with 451 additions and 127 deletions

View file

@ -332,7 +332,7 @@ export default {
loading: true,
currentTipNumber: 0,
bannerHidden: false,
giftingHidden: getLocalSetting(CONSTANTS.keyConstants.GIFTING_BANNER_DISPLAY) === 'dismissed',
giftingHidden: getLocalSetting(CONSTANTS.keyConstants.GIFTING_BANNER_DISPLAY) === 'dismissed2019',
};
},
computed: {
@ -727,7 +727,7 @@ export default {
this.bannerHidden = true;
},
hideGiftingBanner () {
setLocalSetting(CONSTANTS.keyConstants.GIFTING_BANNER_DISPLAY, 'dismissed');
setLocalSetting(CONSTANTS.keyConstants.GIFTING_BANNER_DISPLAY, 'dismissed2019');
this.giftingHidden = true;
},
resumeDamage () {

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: 'winter';
$npc_quests_flavor: 'winter';
$npc_seasonal_flavor: 'winter';
$npc_timetravelers_flavor: 'winter';
$npc_tavern_flavor: 'winter';

View file

@ -0,0 +1,46 @@
<svg xmlns="http://www.w3.org/2000/svg" width="52" height="62" viewBox="0 0 52 62">
<g fill="none" fill-rule="evenodd">
<path stroke="#FFA624" stroke-width="2" d="M18.286 6.252c.186-1.717-.286-3.6-1.658-4.473-1.373-.872-2.831-.21-2.994 1.027-.163 1.237.714 1.988 3.413 4.686.766.766 1.054.477 1.24-1.24z"/>
<path stroke="#FFBE5D" stroke-width="2" d="M21.882 8.328c1.395-1.018 3.262-1.552 4.704-.8 1.441.753 1.597 2.347.607 3.107-.99.76-2.079.375-5.764-.613-1.047-.28-.941-.675.453-1.694z"/>
<path fill="#EE9109" d="M20.698 6.227c-2.754-1.59-2.924 2.514-1.82 3.152 1.106.637 4.574-1.562 1.82-3.152z"/>
<path fill="#F8F9F9" d="M19.167 8.88l10.18 5.878-2.939 5.09-10.18-5.878z"/>
<path fill="#DDF3F3" d="M8.986 3.003l10.18 5.877-2.938 5.09-10.18-5.877z"/>
<path fill="#FFBE5D" d="M15.773 6.921l6.787 3.918-2.939 5.09-6.787-3.918z"/>
<path fill="#FFA624" d="M15.773 6.921l3.394 1.96-2.94 5.09-3.393-1.96z"/>
<path fill="#FFA624" d="M19.167 8.88l3.393 1.96-.98 1.696-3.393-1.96z"/>
<path fill="#EE9109" d="M15.773 6.921l3.394 1.96-.98 1.696-3.393-1.96z"/>
<path fill="#F8F9F9" d="M16.228 13.97l8.483 4.898-6.857 11.877-8.483-4.898z"/>
<path fill="#DDF3F3" d="M7.744 9.072l8.484 4.898L9.37 25.847.887 20.95z"/>
<path fill="#FFA624" d="M14.531 12.99l1.697.98L9.37 25.847l-1.697-.98z"/>
<path fill="#FFBE5D" d="M16.228 13.97l1.696.98-6.857 11.876-1.696-.98z"/>
<path fill="#EE9109" d="M8.654 23.171l1.696.98-.98 1.696-1.696-.98zM14.531 12.99l1.697.98-.98 1.697-1.697-.98z"/>
<path fill="#C1E9E9" d="M7.744 9.072l6.787 3.919-.98 1.696-6.786-3.918z"/>
<path fill="#C1E9E9" d="M7.027 6.396l6.787 3.918-.98 1.697-6.786-3.918zM1.867 19.253l6.787 3.918-.98 1.697-6.787-3.919z"/>
<path fill="#DDF3F3" d="M17.924 14.95l6.787 3.918-.98 1.697-6.786-3.918z"/>
<path fill="#DDF3F3" d="M20.6 14.233l6.788 3.918-.98 1.697-6.787-3.918zM12.047 25.13l6.787 3.919-.98 1.696-6.787-3.918z"/>
<path fill="#FFA624" d="M10.35 24.15l1.697.98-.98 1.697-1.696-.98zM16.228 13.97l1.696.98-.98 1.697-1.696-.98z"/>
<path fill="#8EEDF6" d="M32.753 23.621l-.564 2.362 2.228-.966 2.361.564-.965-2.228.564-2.361-2.228.965-2.361-.564zM17.733 45.172l-.564 2.362 2.228-.966 2.361.564-.966-2.228.565-2.361-2.228.965-2.362-.564zM42.733 15.02l.769 2.958 1.905-2.39 2.96-.769-2.391-1.905-.769-2.96-1.906 2.391-2.958.769z"/>
<g>
<path fill="#F8F9F9" d="M37.688 45.676l9.462-2.536 3.55 13.247-9.463 2.536z"/>
<path fill="#DDF3F3" d="M28.225 48.211l9.463-2.535 3.55 13.247-9.463 2.535z"/>
<path fill="#FFA624" d="M35.795 46.183l1.893-.507 3.55 13.247-1.893.507z"/>
<path fill="#FFBE5D" d="M37.688 45.676l1.892-.507 3.55 13.247-1.893.507z"/>
<path fill="#EE9109" d="M38.838 57.537l1.892-.507.507 1.893-1.892.507zM35.795 46.183l1.893-.507.507 1.892-1.893.507z"/>
<path fill="#C1E9E9" d="M28.225 48.211l7.57-2.028.507 1.892-7.57 2.028zM31.268 59.566l7.57-2.029.507 1.893-7.57 2.028z"/>
<path fill="#DDF3F3" d="M39.58 45.169l7.57-2.029.507 1.893-7.57 2.028zM42.622 56.523l7.57-2.028.507 1.892-7.57 2.029z"/>
<path fill="#FFA624" d="M40.73 57.03l1.892-.507.507 1.893-1.892.507zM37.688 45.676l1.892-.507.507 1.892-1.892.507z"/>
</g>
<g>
<path stroke="#FFA624" stroke-width="2" d="M37.861 35.357c-.471-1.661-1.614-3.232-3.214-3.526-1.599-.294-2.703.866-2.39 2.074.311 1.208 1.407 1.575 4.92 3.066.996.423 1.156.047.684-1.614z"/>
<path stroke="#FFBE5D" stroke-width="2" d="M41.973 35.935c.911-1.467 2.443-2.662 4.061-2.504 1.619.158 2.36 1.578 1.727 2.653-.633 1.075-1.787 1.126-5.574 1.591-1.075.132-1.125-.273-.214-1.74z"/>
<path fill="#EE9109" d="M40.088 34.43c-3.15-.442-1.77 3.426-.506 3.604 1.263.177 3.655-3.161.506-3.604z"/>
<path fill="#F8F9F9" d="M39.662 37.464l11.64 1.636-.818 5.82-11.64-1.636z"/>
<path fill="#DDF3F3" d="M28.02 35.828l11.642 1.636-.818 5.82-11.641-1.636z"/>
<path fill="#FFBE5D" d="M35.781 36.919l7.76 1.09-.817 5.82-7.76-1.09z"/>
<path fill="#FFA624" d="M35.781 36.919l3.88.545-.817 5.82-3.88-.545zM39.662 37.464l3.88.545-.273 1.94-3.88-.545z"/>
<path fill="#EE9109" d="M35.781 36.919l3.88.545-.272 1.94-3.88-.545z"/>
<path fill="#C1E9E9" d="M27.476 39.708l7.76 1.09-.273 1.941-7.76-1.09z"/>
<path fill="#DDF3F3" d="M42.997 41.89l7.76 1.09-.273 1.94-7.76-1.09z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -225,30 +225,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_winter2020Rogue',
head: 'head_special_winter2020Rogue',
shield: 'shield_special_winter2020Rogue',
weapon: 'weapon_special_winter2020Rogue',
};
} if (heroClass === 'wizard') {
return {
armor: 'armor_wizard_5',
head: 'head_wizard_5',
weapon: 'weapon_wizard_6',
armor: 'armor_special_winter2020Mage',
head: 'head_special_winter2020Mage',
weapon: 'weapon_special_winter2020Mage',
};
} if (heroClass === 'healer') {
return {
armor: 'armor_healer_5',
head: 'head_healer_5',
shield: 'shield_healer_5',
weapon: 'weapon_healer_6',
armor: 'armor_special_winter2020Healer',
head: 'head_special_winter2020Healer',
shield: 'shield_special_winter2020Healer',
weapon: 'weapon_special_winter2020Healer',
};
}
return {
armor: 'armor_warrior_5',
head: 'head_warrior_5',
shield: 'shield_warrior_5',
weapon: 'weapon_warrior_6',
armor: 'armor_special_winter2020Warrior',
head: 'head_special_winter2020Warrior',
shield: 'shield_special_winter2020Warrior',
weapon: 'weapon_special_winter2020Warrior',
};
},
selectionBox (selectedClass, heroClass) {

View file

@ -1,5 +1,19 @@
<template>
<div class="standard-page">
<div class="standard-page pt-0 px-0">
<div class="banner-g1g1 mx-n3 d-flex justify-content-center">
<div
class="svg-icon svg-gifts my-auto mr-5 ml-auto"
v-html="icons.giftsVertical">
</div>
<div class="my-auto text-center">
<strong> {{ $t('g1g1Announcement') }} </strong>
<div class="mt-1"> {{ $t('g1g1Details') }} </div>
</div>
<div
class="svg-icon svg-gifts gifts-right my-auto ml-5 mr-auto"
v-html="icons.giftsVertical">
</div>
</div>
<h1>{{ $t('subscription') }}</h1>
<div class="row">
<div class="col-6">
@ -247,13 +261,31 @@
</template>
<style scoped lang="scss">
@import '~@/assets/scss/colors.scss';
.badge.badge-success {
color: #fff;
color: $white;
}
.banner-g1g1 {
height: 5.75rem;
background-color: $teal-50;
color: $white;
}
.gifts-right {
filter: flipH;
transform: scaleX(-1);
}
.subscribe-pay {
margin-top: 1em;
}
.svg-gifts {
width: 55px;
height: 65px;
}
</style>
<script>
@ -270,6 +302,7 @@ import notificationsMixin from '../../mixins/notifications';
import amazonButton from '@/components/payments/amazonButton';
import creditCardIcon from '@/assets/svg/credit-card-icon.svg';
import giftsVertical from '@/assets/svg/gifts-vertical.svg';
export default {
components: {
@ -298,6 +331,7 @@ export default {
},
icons: Object.freeze({
creditCardIcon,
giftsVertical,
}),
};
},

View file

@ -296,6 +296,7 @@
"hatchingPotionSilver": "Silver",
"hatchingPotionShadow": "Shadow",
"hatchingPotionAmber": "Amber",
"hatchingPotionAurora": "Aurora",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.",

View file

@ -310,7 +310,7 @@
"weaponSpecialWinter2019WarriorText": "Snowflake Halberd",
"weaponSpecialWinter2019WarriorNotes": "This snowflake was grown, ice crystal by ice crystal, into a diamond-hard blade! Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.",
"weaponSpecialWinter2019MageText": "Fiery Dragon Staff",
"weaponSpecialWinter2019MageNotes": "Watch out! This explosive staff is ready to help you take on all comers. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear",
"weaponSpecialWinter2019MageNotes": "Watch out! This explosive staff is ready to help you take on all comers. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.",
"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.",
@ -341,6 +341,15 @@
"weaponSpecialFall2019HealerText": "Fearsome Phylactery",
"weaponSpecialFall2019HealerNotes": "This phylactery can call on the spirits of tasks long slain and use their healing power. Increases Intelligence by <%= int %>. Limited Edition 2019 Autumn Gear.",
"weaponSpecialWinter2020RogueText": "Lantern Rod",
"weaponSpecialWinter2020RogueNotes": "Darkness is a Rogue's element. Who better, then, to light the way in the darkest time of year? Increases Strength by <%= str %>. Limited Edition 2019-2020 Winter Gear.",
"weaponSpecialWinter2020WarriorText": "Pointy Conifer Cone",
"weaponSpecialWinter2020WarriorNotes": "Back, squirrels! You will take no piece of this! ...But if you all want to hang out and have cocoa, that's cool. Increases Strength by <%= str %>. Limited Edition 2019-2020 Winter Gear.",
"weaponSpecialWinter2020MageText": "Rippling Sound Waves",
"weaponSpecialWinter2020MageNotes": "With practice, you can project this aural magic at any desired frequency: a meditative hum, a festive chime, or a RED TASK OVERDUE ALARM. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.",
"weaponSpecialWinter2020HealerText": "Clove Scepter",
"weaponSpecialWinter2020HealerNotes": "Wave it about, and its aroma will summon your friends and helpers to begin cooking and baking! Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter 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",
@ -754,6 +763,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.",
"armorSpecialSummer2019RogueText": "Hammerhead Tail",
"armorSpecialSummer2019RogueNotes": "This sinuous tail is perfect for making tight turns during daring aquatic escapes. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.",
"armorSpecialSummer2019WarriorText": "Carapace Armor",
@ -772,14 +790,14 @@
"armorSpecialFall2019HealerText": "Robes of Darkness",
"armorSpecialFall2019HealerNotes": "It's said these robes are made of pure night. Use the dark power wisely! Increases Constitution by <%= con %>. Limited Edition 2019 Autumn 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.",
"armorSpecialWinter2020RogueText": "Poofy Parka",
"armorSpecialWinter2020RogueNotes": "While no doubt you can brave storms with the inner warmth of your drive and devotion, it doesn't hurt to dress for the weather. Increases Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.",
"armorSpecialWinter2020WarriorText": "Bark Armor",
"armorSpecialWinter2020WarriorNotes": "O mighty pine, o towering fir, lend your strength. Or rather, your Constitution! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.",
"armorSpecialWinter2020MageText": "Curvy Coat",
"armorSpecialWinter2020MageNotes": "Ring in the new year warm, comfy, and buffered against excessive vibration. Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter Gear.",
"armorSpecialWinter2020HealerText": "Orange Peel Gown",
"armorSpecialWinter2020HealerNotes": "An opulent gown for those with festive zest! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
@ -1316,6 +1334,15 @@
"headSpecialFall2019HealerText": "Dark Miter",
"headSpecialFall2019HealerNotes": "Don this dark miter to harness the powers of the fearsome Lich. Increases Intelligence by <%= int %>. Limited Edition 2019 Autumn Gear.",
"headSpecialWinter2020RogueText": "Floofy Stocking Cap",
"headSpecialWinter2020RogueNotes": "A Rogue walks down the street in that hat, people know they're not afraid of anything. Increases Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.",
"headSpecialWinter2020WarriorText": "Snow-Dusted Headdress",
"headSpecialWinter2020WarriorNotes": "A prickly feeling on your scalp is a small price to pay for seasonal magnificence. Increases Strength by <%= str %>. Limited Edition 2019-2020 Winter Gear.",
"headSpecialWinter2020MageText": "Bell Crown",
"headSpecialWinter2020MageNotes": "Oh! How the bells / Sweet golden bells / All seem to say, / “Cast Burst of Flames” Increases Perception by <%= per %>. Limited Edition 2019-2020 Winter Gear.",
"headSpecialWinter2020HealerText": "Star Anise Emblem",
"headSpecialWinter2020HealerNotes": "Please remove it from your head before attempting to brew chai or coffee with it. Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter 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.",
@ -1754,6 +1781,11 @@
"shieldSpecialFall2019HealerText": "Grotesque Grimoire",
"shieldSpecialFall2019HealerNotes": "Harness the dark side of the Healer's arts with this Grimoire! Increases Constitution by <%= con %>. Limited Edition 2019 Autumn Gear.",
"shieldSpecialWinter2020WarriorText": "Round Conifer Cone",
"shieldSpecialWinter2020WarriorNotes": "Use it as a shield until the seeds drop, and then you can put it on a wreath! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.",
"shieldSpecialWinter2020HealerText": "Giant Cinnamon Stick",
"shieldSpecialWinter2020HealerNotes": "Do you feel you are too good for this world, too pure? Only this beauty of a spice will do. Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter 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

@ -146,6 +146,10 @@
"fall2019CyclopsSet": "Cyclops (Mage)",
"fall2019LichSet": "Lich (Healer)",
"fall2019RavenSet": "Raven (Warrior)",
"winter2020EvergreenSet": "Evergreen (Warrior)",
"winter2020CarolOfTheMageSet": "Carol of the Mage (Mage)",
"winter2020WinterSpiceSet": "Winter Spice (Healer)",
"winter2020LanternSet": "Lantern (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndMarch": "April 30",
@ -153,6 +157,7 @@
"dateEndMay": "May 31",
"dateEndJune": "June 14",
"augustYYYY": "August <%= year %>",
"decemberYYYY": "December <%= year %>",
"dateEndJuly": "July 31",
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",

View file

@ -559,7 +559,7 @@
"questYarnDropYarnEgg": "Yarn (Egg)",
"questYarnUnlockText": "Unlocks purchasable Yarn eggs in the Market",
"winterQuestsText": "Winter Quest Bundle",
"winterQuestsNotes": "Contains 'Trapper Santa', 'Find the Cub', and 'The Fowl Frost'. Available until December 31.",
"winterQuestsNotes": "Contains 'Trapper Santa', 'Find the Cub', and 'The Fowl Frost'. Available until January 31.",
"questPterodactylText": "The Pterror-dactyl",
"questPterodactylNotes": "You're taking a stroll along the peaceful Stoïkalm Cliffs when an evil screech rends the air. You turn to find a hideous creature flying towards you and are overcome by a powerful terror. As you turn to flee, @Lilith of Alfheim grabs you. \"Don't panic! It's just a Pterror-dactyl.\"<br><br>@Procyon P nods. \"They nest nearby, but they're attracted to the scent of negative Habits and undone Dailies.\"<br><br>\"Don't worry,\" @Katy133 says. \"We just need to be extra productive to defeat it!\" You are filled with a renewed sense of purpose and turn to face your foe.",
"questPterodactylCompletion": "With one last screech the Pterror-dactyl plummets over the side of the cliff. You run forward to watch it soar away over the distant steppes. \"Phew, I'm glad that's over,\" you say. \"Me too,\" replies @GeraldThePixel. \"But look! It's left some eggs behind for us.\" @Edge passes you three eggs, and you vow to raise them in tranquility, surrounded by positive Habits and blue Dailies.",

View file

@ -80,7 +80,7 @@ const bundles = {
'penguin',
],
canBuy () {
return moment().isBetween('2017-12-14', '2018-01-01');
return moment().isBetween('2019-12-19', '2020-02-02');
},
type: 'quests',
value: 7,

View file

@ -38,6 +38,7 @@ export const EVENTS = {
spring2019: { start: '2019-03-19', end: '2019-05-02' },
summer2019: { start: '2019-06-18', end: '2019-08-02' },
fall2019: { start: '2019-09-24', end: '2019-11-02' },
winter2020: { start: '2019-12-19', end: '2020-02-02' },
};
export const SEASONAL_SETS = {
@ -77,6 +78,12 @@ export const SEASONAL_SETS = {
'winter2019WinterStarSet',
'winter2019BlizzardSet',
'winter2019PyrotechnicSet',
// winter 2020
'winter2020CarolOfTheMageSet',
'winter2020LanternSet',
'winter2020EvergreenSet',
'winter2020WinterSpiceSet',
],
spring: [
// spring 2014

View file

@ -8,7 +8,7 @@ import * as takeThisGear from './special-takeThis';
import * as wonderconGear from './special-wondercon';
import t from '../../../translation';
const CURRENT_SEASON = '_NONE_';
const CURRENT_SEASON = 'winter';
const armor = {
0: backerGear.armorSpecial0,
@ -956,6 +956,7 @@ const armor = {
notes: t('armorSpecialWinter2019RogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Warrior: {
event: EVENTS.winter2019,
@ -965,6 +966,7 @@ const armor = {
notes: t('armorSpecialWinter2019WarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Mage: {
event: EVENTS.winter2019,
@ -974,6 +976,7 @@ const armor = {
notes: t('armorSpecialWinter2019MageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Healer: {
event: EVENTS.winter2019,
@ -983,6 +986,7 @@ const armor = {
notes: t('armorSpecialWinter2019HealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => CURRENT_SEASON === 'winter',
},
birthday2019: {
text: t('armorSpecialBirthday2019Text'),
@ -1105,6 +1109,42 @@ const armor = {
con: 20,
canOwn: ownsItem('armor_special_ks2019'),
},
winter2020Rogue: {
event: EVENTS.winter2020,
specialClass: 'rogue',
set: 'winter2020LanternSet',
text: t('armorSpecialWinter2020RogueText'),
notes: t('armorSpecialWinter2020RogueNotes', { per: 15 }),
value: 90,
per: 15,
},
winter2020Warrior: {
event: EVENTS.winter2020,
specialClass: 'warrior',
set: 'winter2020EvergreenSet',
text: t('armorSpecialWinter2020WarriorText'),
notes: t('armorSpecialWinter2020WarriorNotes', { con: 9 }),
value: 90,
con: 9,
},
winter2020Mage: {
event: EVENTS.winter2020,
specialClass: 'wizard',
set: 'winter2020CarolOfTheMageSet',
text: t('armorSpecialWinter2020MageText'),
notes: t('armorSpecialWinter2020MageNotes', { int: 9 }),
value: 90,
int: 9,
},
winter2020Healer: {
event: EVENTS.winter2020,
specialClass: 'healer',
set: 'winter2020WinterSpiceSet',
text: t('armorSpecialWinter2020HealerText'),
notes: t('armorSpecialWinter2020HealerNotes', { con: 15 }),
value: 90,
con: 15,
},
};
const back = {
@ -2379,6 +2419,7 @@ const head = {
notes: t('headSpecialWinter2019RogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Warrior: {
event: EVENTS.winter2019,
@ -2388,6 +2429,7 @@ const head = {
notes: t('headSpecialWinter2019WarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Mage: {
event: EVENTS.winter2019,
@ -2397,6 +2439,7 @@ const head = {
notes: t('headSpecialWinter2019MageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Healer: {
event: EVENTS.winter2019,
@ -2406,6 +2449,7 @@ const head = {
notes: t('headSpecialWinter2019HealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => CURRENT_SEASON === 'winter',
},
nye2018: {
text: t('headSpecialNye2018Text'),
@ -2534,6 +2578,42 @@ const head = {
int: 20,
canOwn: ownsItem('head_special_ks2019'),
},
winter2020Rogue: {
event: EVENTS.winter2020,
specialClass: 'rogue',
set: 'winter2020LanternSet',
text: t('headSpecialWinter2020RogueText'),
notes: t('headSpecialWinter2020RogueNotes', { per: 9 }),
value: 60,
per: 9,
},
winter2020Warrior: {
event: EVENTS.winter2020,
specialClass: 'warrior',
set: 'winter2020EvergreenSet',
text: t('headSpecialWinter2020WarriorText'),
notes: t('headSpecialWinter2020WarriorNotes', { str: 9 }),
value: 60,
str: 9,
},
winter2020Mage: {
event: EVENTS.winter2020,
specialClass: 'wizard',
set: 'winter2020CarolOfTheMageSet',
text: t('headSpecialWinter2020MageText'),
notes: t('headSpecialWinter2020MageNotes', { per: 7 }),
value: 60,
per: 7,
},
winter2020Healer: {
event: EVENTS.winter2020,
specialClass: 'healer',
set: 'winter2020WinterSpiceSet',
text: t('headSpecialWinter2020HealerText'),
notes: t('headSpecialWinter2020HealerNotes', { int: 7 }),
value: 60,
int: 7,
},
};
const headAccessory = {
@ -3465,6 +3545,7 @@ const shield = {
notes: t('weaponSpecialWinter2019RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Warrior: {
event: EVENTS.winter2019,
@ -3474,6 +3555,7 @@ const shield = {
notes: t('shieldSpecialWinter2019WarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Healer: {
event: EVENTS.winter2019,
@ -3483,6 +3565,7 @@ const shield = {
notes: t('shieldSpecialWinter2019HealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => CURRENT_SEASON === 'winter',
},
piDay: {
text: t('shieldSpecialPiDayText'),
@ -3587,6 +3670,33 @@ const shield = {
per: 20,
canOwn: ownsItem('shield_special_ks2019'),
},
winter2020Rogue: {
event: EVENTS.winter2020,
specialClass: 'rogue',
set: 'winter2020LanternSet',
text: t('weaponSpecialWinter2020RogueText'),
notes: t('weaponSpecialWinter2020RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
winter2020Warrior: {
event: EVENTS.winter2020,
specialClass: 'warrior',
set: 'winter2020EvergreenSet',
text: t('shieldSpecialWinter2020WarriorText'),
notes: t('shieldSpecialWinter2020WarriorNotes', { con: 7 }),
value: 70,
con: 7,
},
winter2020Healer: {
event: EVENTS.winter2020,
specialClass: 'healer',
set: 'winter2020WinterSpiceSet',
text: t('shieldSpecialWinter2020HealerText'),
notes: t('shieldSpecialWinter2020HealerNotes', { con: 9 }),
value: 70,
con: 9,
},
};
const weapon = {
@ -4538,6 +4648,7 @@ const weapon = {
notes: t('weaponSpecialWinter2019RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Warrior: {
event: EVENTS.winter2019,
@ -4547,6 +4658,7 @@ const weapon = {
notes: t('weaponSpecialWinter2019WarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Mage: {
event: EVENTS.winter2019,
@ -4558,6 +4670,7 @@ const weapon = {
value: 170,
int: 15,
per: 7,
canBuy: () => CURRENT_SEASON === 'winter',
},
winter2019Healer: {
event: EVENTS.winter2019,
@ -4567,6 +4680,7 @@ const weapon = {
notes: t('weaponSpecialWinter2019HealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => CURRENT_SEASON === 'winter',
},
spring2019Rogue: {
event: EVENTS.spring2019,
@ -4687,6 +4801,44 @@ const weapon = {
str: 20,
canOwn: ownsItem('weapon_special_ks2019'),
},
winter2020Rogue: {
event: EVENTS.winter2020,
specialClass: 'rogue',
set: 'winter2020LanternSet',
text: t('weaponSpecialWinter2020RogueText'),
notes: t('weaponSpecialWinter2020RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
winter2020Warrior: {
event: EVENTS.winter2020,
specialClass: 'warrior',
set: 'winter2020EvergreenSet',
text: t('weaponSpecialWinter2020WarriorText'),
notes: t('weaponSpecialWinter2020WarriorNotes', { str: 15 }),
value: 90,
str: 15,
},
winter2020Mage: {
event: EVENTS.winter2020,
specialClass: 'wizard',
set: 'winter2020CarolOfTheMageSet',
twoHanded: true,
text: t('weaponSpecialWinter2020MageText'),
notes: t('weaponSpecialWinter2020MageNotes', { int: 15, per: 7 }),
value: 170,
int: 15,
per: 7,
},
winter2020Healer: {
event: EVENTS.winter2020,
specialClass: 'healer',
set: 'winter2020WinterSpiceSet',
text: t('weaponSpecialWinter2020HealerText'),
notes: t('weaponSpecialWinter2020HealerNotes', { int: 9 }),
value: 90,
int: 9,
},
};
export {

View file

@ -4,8 +4,6 @@ import each from 'lodash/each';
import moment from 'moment';
import t from './translation';
const CURRENT_SEASON = '_NONE_';
function hasQuestAchievementFunction (key) {
return user => user.achievements.quests
&& user.achievements.quests[key] > 0;
@ -64,31 +62,26 @@ const premium = {
value: 2,
text: t('hatchingPotionCupid'),
limited: true,
_season: '_PENDING_',
},
Shimmer: {
value: 2,
text: t('hatchingPotionShimmer'),
limited: true,
_season: '_PENDING_',
},
Fairy: {
value: 2,
text: t('hatchingPotionFairy'),
limited: true,
_season: '_PENDING_',
},
Floral: {
value: 2,
text: t('hatchingPotionFloral'),
limited: true,
_season: '_PENDING_',
},
Aquatic: {
value: 2,
text: t('hatchingPotionAquatic'),
limited: true,
_season: '_PENDING_',
},
Ember: {
value: 2,
@ -118,7 +111,6 @@ const premium = {
value: 2,
text: t('hatchingPotionSpooky'),
limited: true,
_season: '_PENDING_',
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndOctober'),
previousDate: t('september2017'),
@ -128,37 +120,45 @@ const premium = {
value: 2,
text: t('hatchingPotionGhost'),
limited: true,
_season: '_PENDING_',
},
Holly: {
value: 2,
text: t('hatchingPotionHolly'),
limited: true,
_season: '_PENDING_',
canBuy () {
return moment().isBetween('2019-12-19', '2020-02-02');
},
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndJanuary'),
previousDate: t('decemberYYYY', { year: 2016 }),
}),
},
Peppermint: {
value: 2,
text: t('hatchingPotionPeppermint'),
limited: true,
_season: '_PENDING_',
},
StarryNight: {
value: 2,
text: t('hatchingPotionStarryNight'),
limited: true,
_season: '_PENDING_',
canBuy () {
return moment().isBetween('2019-12-19', '2020-02-02');
},
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndJanuary'),
previousDate: t('decemberYYYY', { year: 2017 }),
}),
},
Rainbow: {
value: 2,
text: t('hatchingPotionRainbow'),
limited: true,
_season: '_PENDING_',
},
Glass: {
value: 2,
text: t('hatchingPotionGlass'),
limited: true,
_season: '_PENDING_',
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndJuly'),
previousDate: t('june2018'),
@ -168,7 +168,6 @@ const premium = {
value: 2,
text: t('hatchingPotionGlow'),
limited: true,
_season: '_PENDING_',
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndOctober'),
previousDate: t('september2018'),
@ -178,31 +177,26 @@ const premium = {
value: 2,
text: t('hatchingPotionFrost'),
limited: true,
_season: '_PENDING_',
},
IcySnow: {
value: 2,
text: t('hatchingPotionIcySnow'),
limited: true,
_season: '_PENDING_',
},
RoseQuartz: {
value: 2,
text: t('hatchingPotionRoseQuartz'),
limited: true,
_season: '_PENDING_',
},
Celestial: {
value: 2,
text: t('hatchingPotionCelestial'),
limited: true,
_season: '_PENDING_',
},
Sunshine: {
value: 2,
text: t('hatchingPotionSunshine'),
limited: true,
_season: '_PENDING_',
},
Bronze: {
value: 2,
@ -215,7 +209,6 @@ const premium = {
value: 2,
text: t('hatchingPotionWatery'),
limited: true,
_season: '_PENDING_',
},
Silver: {
value: 2,
@ -228,7 +221,6 @@ const premium = {
value: 2,
text: t('hatchingPotionShadow'),
limited: true,
_season: '_PENDING_',
},
Amber: {
value: 2,
@ -237,6 +229,17 @@ const premium = {
canBuy: hasQuestAchievementFunction('amber'),
_addlNotes: t('premiumPotionUnlimitedNotes'),
},
Aurora: {
value: 2,
text: t('hatchingPotionAurora'),
limited: true,
canBuy () {
return moment().isBetween('2019-12-19', '2020-02-02');
},
_addlNotes: t('premiumPotionAddlNotes', {
date: t('dateEndJanuary'),
}),
},
};
const wacky = {
@ -269,13 +272,10 @@ each(premium, (pot, key) => {
notes: t('hatchingPotionNotes', {
potText: pot.text,
}),
_addlNotes: t('premiumPotionAddlNotes', {
date: t(`dateEnd${pot._season}`),
}),
premium: true,
limited: false,
canBuy () {
return pot._season === CURRENT_SEASON;
return false;
},
});
});
@ -294,7 +294,7 @@ each(wacky, (pot, key) => {
limited: true,
wacky: true,
canBuy () {
return pot._season === CURRENT_SEASON;
return false;
},
});
});

View file

@ -1,5 +1,6 @@
import each from 'lodash/each';
import defaults from 'lodash/defaults';
import moment from 'moment';
import sortBy from 'lodash/sortBy';
import t from './translation';
import {
@ -257,7 +258,7 @@ const quests = {
},
evilsanta: {
canBuy () {
return false;
return moment().isBetween('2019-12-19', '2020-02-02');
},
text: t('questEvilSantaText'),
notes: t('questEvilSantaNotes'),
@ -283,7 +284,7 @@ const quests = {
},
evilsanta2: {
canBuy () {
return false;
return moment().isBetween('2019-12-19', '2020-02-02');
},
text: t('questEvilSanta2Text'),
notes: t('questEvilSanta2Notes'),

View file

@ -5,7 +5,7 @@ import moment from 'moment';
// path: 'premiumHatchingPotions.Rainbow',
const featuredItems = {
market () {
if (moment().isBetween('2019-11-01', '2019-12-02')) {
if (moment().isBetween('2019-12-19', '2020-02-02')) {
return [
{
type: 'armoire',
@ -13,15 +13,15 @@ const featuredItems = {
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Ember',
path: 'premiumHatchingPotions.Aurora',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Thunderstorm',
path: 'premiumHatchingPotions.Holly',
},
{
type: 'food',
path: 'food.Saddle',
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.StarryNight',
},
];
}
@ -32,11 +32,11 @@ const featuredItems = {
},
{
type: 'hatchingPotions',
path: 'hatchingPotions.Skeleton',
path: 'hatchingPotions.White',
},
{
type: 'eggs',
path: 'eggs.Fox',
path: 'eggs.PandaCub',
},
{
type: 'food',
@ -44,21 +44,39 @@ const featuredItems = {
},
];
},
quests: [
{
type: 'quests',
path: 'quests.badger',
},
{
type: 'quests',
path: 'quests.taskwoodsTerror1',
},
{
type: 'quests',
path: 'quests.amber',
},
],
seasonal: 'fall2018Rogue',
quests () {
if (moment().isBetween('2019-12-19', '2020-02-02')) {
return [
{
type: 'bundles',
path: 'bundles.winterQuests',
},
{
type: 'quests',
path: 'quests.evilsanta',
},
{
type: 'quests',
path: 'quests.evilsanta2',
},
];
}
return [
{
type: 'quests',
path: 'quests.treeling',
},
{
type: 'quests',
path: 'quests.stoikalmCalamity1',
},
{
type: 'quests',
path: 'quests.silver',
},
];
},
seasonal: 'winter2019Warrior',
timeTravelers: [
// TODO
],

View file

@ -1,23 +1,30 @@
// import { SEASONAL_SETS } from '../content/constants';
import { SEASONAL_SETS } from '../content/constants';
export default {
opened: false,
opened: true,
currentSeason: 'Closed',
currentSeason: 'Winter',
dateRange: { start: '2019-09-24', end: '2019-10-31' },
dateRange: { start: '2019-12-19', end: '2020-01-31' },
availableSets: [
...SEASONAL_SETS.winter,
],
pinnedSets: {
healer: 'winter2020WinterSpiceSet',
rogue: 'winter2020LanternSet',
warrior: 'winter2020EvergreenSet',
wizard: 'winter2020CarolOfTheMageSet',
},
availableSpells: [
],
availableQuests: [
'evilsanta',
'evilsanta2',
],
featuredSet: 'fall2018AlterEgoSet',
featuredSet: 'winter2018GiftWrappedSet',
};

View file

@ -200,7 +200,7 @@ shops.getQuestShop = function getQuestShop (user, language) {
categories: shops.getQuestShopCategories(user, language),
featured: {
text: i18n.t('featuredQuests'),
items: featuredItems.quests.map(i => getItemInfo(user, i.type, get(content, i.path))),
items: featuredItems.quests().map(i => getItemInfo(user, i.type, get(content, i.path))),
},
};
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,012 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 981 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 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.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 853 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -4,7 +4,7 @@ const api = {};
// @TODO export this const, cannot export it from here because only routes are exported from
// controllers
const LAST_ANNOUNCEMENT_TITLE = 'GIFT ONE, GET ONE PROMOTION! AND BLOG POST ON RUNNING CHALLENGES';
const LAST_ANNOUNCEMENT_TITLE = 'WINTER WONDERLAND BEGINS! CLASS OUTFITS, QUESTS, AND HATCHING POTIONS';
const worldDmg = { // @TODO
bailey: false,
};
@ -31,46 +31,67 @@ api.getNews = {
<div class="mr-3 ${baileyClass}"></div>
<div class="media-body">
<h1 class="align-self-center">${res.t('newStuff')}</h1>
<h2>12/17/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
<h2>12/19/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
</div>
</div>
<hr/>
<div class="promo_g1g1_2019 center-block"></div>
<h3>Gift a Subscription and Get One Free!</h3>
<p>
In honor of the season of giving--and due to popular demand!--we're bringing back a very
special promotion from now until January 6. Now when you gift somebody a subscription,
you get the same subscription for yourself for free!
A wintery breeze is blowing in from the Stoïkalm Steppes, and the snow is gently drifting
down over Habit City. The Winter Wonderland event has begun!
</p>
<div class="promo_winter_wonderland_2020 center-block"></div>
<h3>Winter Class Outfits</h3>
<p>
From now until January 31st, limited edition outfits are available in the Rewards column.
Depending on your class, you can be an Evergreen Warrior, Bell Mage, Winter Spice Healer,
or Lantern Rogue! You'd better get productive to earn enough Gold before they disappear.
Good luck!
</p>
<div class="small mb-3">by Vikte, gawrone, jjgame83, Aspiring Advocate, and SabreCat</div>
<div class="promo_winter_wonderland_2019 center-block"></div>
<h3>Seasonal Shop is Open!</h3>
<p>
The <a href='/shops/seasonal'>Seasonal Shop</a> has opened! The Seasonal Sorceress is
stocking the seasonal edition versions of previous winter outfits, now available for Gems
instead of Gold, and the Winter Quest Chain. Plus, there will be more fun things in the
shop as the event progresses. The Seasonal Shop will only be open until January 31st, so
don't wait!
</p>
<div class="small mb-3">
by Lt Cabel, Vikte, AnnDeLune, Persephone, WeeWitch, katy133, yayannabelle, Stefalupagus,
Io Breese, foreverender, Podcod, Beffymaroo, SabreCat, and Lemoness
</div>
<div class="promo_winter_quests_bundle center-block"></div>
<h3>Discounted Quest Bundle: Winter Quests</h3>
<p>
If you're looking to add some cold weather friends to your Habitica stable, you're in
luck! From now until January 31, you can purchase the Winter Quest Bundle and receive the
Trapper Santa, Find the Cub, and Penguin quests, all for only 7 Gems! That's a discount
of 5 Gems from the price of purchasing them separately. Check it out in the <a
href='/shops/quests'>Quest Shop</a> today!
</p>
<div class="small">by Lemoness and SabreCat</div>
<div class="small">
Art by UncommonCriminal, Shaner, Eevachu, Pandoro, melynnrose, Breadstrings, Rattify, and
PainterProphet
</div>
<div class="small mb-3">Writing by Lefnire, Leephon, and Daniel the Bard</div>
<div class="promo_winter_potions_2020 center-block"></div>
<h3>New Aurora Hatching Potions and the Return of Holly and Starry Night!</h3>
<p>
There's a new pet breed in town! Check out the brand-new Aurora Potions and the return
of Holly and Starry Night Potions to brighten your Winter Wonderland avatar look. Buy
them from <a href='/shops/market'>the Market</a> and use them to hatch any standard pet
egg. (Magic Hatching Potions do not work on Quest Pet eggs.) Magic Hatching Potion Pets
aren't picky, so they'll happily eat any kind of food that you feed them!
</p>
<p>
Subscribers get tons of perks every month, including exclusive equipment, the ability to
buy Gems with Gold, a special Jackalope Pet, and increased data history. Plus, it helps
keep Habitica running :)
After they're gone, it will be at least a year before these three Hatching Potions are
available again, so be sure to get them now!
</p>
<p>
To gift a subscription to someone on our mobile apps, just go to Menu and tap the Gift
One Get One banner. On web, just open their profile and click the present icon in the
upper right. You can open their profile by clicking their avatar in your party header or
their name in chat.
</p>
<p>
Please note that this promotion only applies when you gift to another Habitican. 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.
</p>
<p>Thanks so much for your support! <3</p>
<div class="scene_todos center-block"></div>
<h3>Blog Post: Running a Challenge</h3>
<p>
This month's <a href="https://habitica.wordpress.com/2019/12/11/running-a-challenge/"
target="_blank">featured Wiki article</a> is about Running a Challenge! We hope that it
will help you as look for exciting ways to motivate yourself and others. Be sure to check
it out, and let us know what you think by reaching out on <a
href="https://twitter.com/habitica" target="_blank">Twitter</a>, <a
href="http://blog.habitrpg.com" target="_blank">Tumblr</a>, and <a
href='https://facebook.com/habitica' target="_blank">Facebook</a>.
</p>
<div class="small mb-3">by shanaqui and the Wiki Wizards</div>
<div class="small mb-3">
by QuartzFox, Archeia, Willow The Witty, JinjooHat, Tyche Alba, and SabreCat
</div>
</div>
`,
});