feat(event): Winter Wonderland 2018
| @@ -17,7 +17,7 @@ function setUpServer () { | ||||
| setUpServer(); | ||||
|  | ||||
| // Replace this with your migration | ||||
| const processUsers = require('./users/20181122_turkey_day.js'); | ||||
| const processUsers = require('./users/mystery-items.js'); | ||||
| processUsers() | ||||
|   .then(function success () { | ||||
|     process.exit(0); | ||||
|   | ||||
| @@ -40,6 +40,18 @@ | ||||
|   width: 393px; | ||||
|   height: 177px; | ||||
| } | ||||
| .promo_npc_alex { | ||||
|   background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png'); | ||||
|   background-position: -994px -529px; | ||||
|   width: 162px; | ||||
|   height: 138px; | ||||
| } | ||||
| .promo_seasonal_shop { | ||||
|   background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png'); | ||||
|   background-position: -994px -390px; | ||||
|   width: 162px; | ||||
|   height: 138px; | ||||
| } | ||||
| .promo_snow_potions { | ||||
|   background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png'); | ||||
|   background-position: -481px -535px; | ||||
| @@ -54,7 +66,7 @@ | ||||
| } | ||||
| .promo_take_this { | ||||
|   background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png'); | ||||
|   background-position: -994px -390px; | ||||
|   background-position: -994px -668px; | ||||
|   width: 96px; | ||||
|   height: 69px; | ||||
| } | ||||
|   | ||||
| Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 184 KiB | 
| Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 119 KiB | 
| Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB | 
| @@ -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_winter2019Rogue', | ||||
|           head: 'head_special_winter2019Rogue', | ||||
|           shield: 'shield_special_winter2019Rogue', | ||||
|           weapon: 'weapon_special_winter2019Rogue', | ||||
|         }; | ||||
|       } else if (heroClass === 'wizard') { | ||||
|         return { | ||||
|           armor: 'armor_wizard_5', | ||||
|           head: 'head_wizard_5', | ||||
|           weapon: 'weapon_wizard_6', | ||||
|           armor: 'armor_special_winter2019Mage', | ||||
|           head: 'head_special_winter2019Mage', | ||||
|           weapon: 'weapon_special_winter2019Mage', | ||||
|         }; | ||||
|       } else if (heroClass === 'healer') { | ||||
|         return { | ||||
|           armor: 'armor_healer_5', | ||||
|           head: 'head_healer_5', | ||||
|           shield: 'shield_healer_5', | ||||
|           weapon: 'weapon_healer_6', | ||||
|           armor: 'armor_special_winter2019Healer', | ||||
|           head: 'head_special_winter2019Healer', | ||||
|           shield: 'shield_special_winter2019Healer', | ||||
|           weapon: 'weapon_special_winter2019Healer', | ||||
|         }; | ||||
|       } else { | ||||
|         return { | ||||
|           armor: 'armor_warrior_5', | ||||
|           head: 'head_warrior_5', | ||||
|           shield: 'shield_warrior_5', | ||||
|           weapon: 'weapon_warrior_6', | ||||
|           armor: 'armor_special_winter2019Warrior', | ||||
|           head: 'head_special_winter2019Warrior', | ||||
|           shield: 'shield_special_winter2019Warrior', | ||||
|           weapon: 'weapon_special_winter2019Warrior', | ||||
|         }; | ||||
|       } | ||||
|     }, | ||||
|   | ||||
| @@ -76,7 +76,7 @@ | ||||
|       div( | ||||
|         v-for="(groupSets, categoryGroup) in getGroupedCategories(categories)", | ||||
|       ) | ||||
|         h3.classgroup(v-if='categoryGroup !== "spells"') | ||||
|         h3.classgroup(v-if='categoryGroup !== "spells" && categoryGroup !== "quests"') | ||||
|           span.svg-icon.inline(v-html="icons[categoryGroup]") | ||||
|           span.name(:class="categoryGroup") {{ getClassName(categoryGroup) }} | ||||
|  | ||||
|   | ||||
| @@ -303,6 +303,15 @@ | ||||
|   "weaponSpecialFall2018HealerText": "Starving Staff", | ||||
|   "weaponSpecialFall2018HealerNotes": "Just keep this staff fed, and it will bestow Blessings. If you forget to feed it, keep your fingers out of reach. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", | ||||
|  | ||||
|   "weaponSpecialWinter2019RogueText": "Poinsettia Bouquet", | ||||
|   "weaponSpecialWinter2019RogueNotes": "Use this festive bouquet to further camouflage yourself, or generously gift it to brighten a friend's day! Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "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", | ||||
|   "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.", | ||||
|  | ||||
|   "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", | ||||
| @@ -675,6 +684,15 @@ | ||||
|   "armorSpecialFall2018HealerText": "Robes of Carnivory", | ||||
|   "armorSpecialFall2018HealerNotes": "It's made from plants, but that doesn't mean it's vegetarian. Bad habits are afraid to come within miles of these robes. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", | ||||
|  | ||||
|   "armorSpecialWinter2019RogueText": "Poinsettia Armor", | ||||
|   "armorSpecialWinter2019RogueNotes": "With holiday greenery all about, no one will notice an extra shrubbery! You can move through seasonal gatherings with ease and stealth. Increases Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "armorSpecialWinter2019WarriorText": "Glacial Armor", | ||||
|   "armorSpecialWinter2019WarriorNotes": "In the heat of battle, this armor will keep you ice cool and ready for action. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "armorSpecialWinter2019MageText": "Robes of Burning Inspiration", | ||||
|   "armorSpecialWinter2019MageNotes": "This fireproof garb will help protect you if any of your flashes of brilliance should happen to backfire! Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "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.", | ||||
|  | ||||
|   "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", | ||||
| @@ -1134,6 +1152,15 @@ | ||||
|   "headSpecialFall2018HealerText": "Ravenous Helm", | ||||
|   "headSpecialFall2018HealerNotes": "This helm is fashioned from a carnivorous plant renowned for its ability to dispatch zombies and other inconveniences. Just watch out that it doesn't chew on your head. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", | ||||
|  | ||||
|   "headSpecialWinter2019RogueText": "Poinsettia Helm", | ||||
|   "headSpecialWinter2019RogueNotes": "This leafy helm will attain its brightest red color right around the darkest days of winter, helping you blend in with holiday decor! Increases Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "headSpecialWinter2019WarriorText": "Glacial Helm", | ||||
|   "headSpecialWinter2019WarriorNotes": "It's important to keep a cool head! This icy helm will protect you from any opponent's blows. Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "headSpecialWinter2019MageText": "Flaming Fireworks", | ||||
|   "headSpecialWinter2019MageNotes": "Stand well back and watch the sparks fly! Your tasks cannot stand against this might! Increases Perception by <%= per %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "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.", | ||||
|  | ||||
|   "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.", | ||||
|  | ||||
| @@ -1510,6 +1537,11 @@ | ||||
|   "shieldSpecialFall2018HealerText": "Hungry Shield", | ||||
|   "shieldSpecialFall2018HealerNotes": "With its wide-open maw, this shield will absorb all your enemies' blows. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", | ||||
|  | ||||
|   "shieldSpecialWinter2019WarriorText": "Frozen Shield", | ||||
|   "shieldSpecialWinter2019WarriorNotes": "This shield was fashioned using the thickest sheets of ice from the oldest glacier in the Stoïkalm Steppes. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.", | ||||
|   "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.", | ||||
|  | ||||
|   "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", | ||||
| @@ -1787,7 +1819,7 @@ | ||||
|   "headAccessoryMystery201804Text": "Squirrel Ears", | ||||
|   "headAccessoryMystery201804Notes": "These fuzzy sound-catchers will ensure you never miss the rustle of a leaf or the sound of an acorn falling! Confers no benefit. April 2018 Subscriber Item.", | ||||
|   "headAccessoryMystery201812Text": "Arctic Fox Ears", | ||||
|   "headAccessoryMystery201812Notes": "Twitch twitch... you hear the subtle sound of snowflakes falling upon the landscape. Confers no benefit. December 2018 Subscriber Item.", | ||||
|   "headAccessoryMystery201812Notes": "You hear the subtle sound of snowflakes falling upon the landscape. Confers no benefit. December 2018 Subscriber Item.", | ||||
|   "headAccessoryMystery301405Text": "Headwear Goggles", | ||||
|   "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", | ||||
|  | ||||
|   | ||||
| @@ -130,6 +130,10 @@ | ||||
|     "fall2018CandymancerMageSet": "Candymancer (Mage)", | ||||
|     "fall2018CarnivorousPlantSet": "Carnivorous Plant (Healer)", | ||||
|     "fall2018AlterEgoSet": "Alter Ego (Rogue)", | ||||
|     "winter2019BlizzardSet": "Blizzard (Warrior)", | ||||
|     "winter2019PyrotechnicSet": "Pyrotechnic (Mage)", | ||||
|     "winter2019WinterStarSet": "Winter Star (Healer)", | ||||
|     "winter2019PoinsettiaSet": "Poinsettia (Rogue)", | ||||
|     "eventAvailability": "Available for purchase until <%= date(locale) %>.", | ||||
|     "dateEndMarch": "April 30", | ||||
|     "dateEndApril": "April 19", | ||||
|   | ||||
| @@ -68,6 +68,12 @@ export const SEASONAL_SETS = { | ||||
|     'winter2018GiftWrappedSet', | ||||
|     'winter2018MistletoeSet', | ||||
|     'winter2018ReindeerSet', | ||||
|  | ||||
|     // winter 2019 | ||||
|     'winter2019PoinsettiaSet', | ||||
|     'winter2019WinterStarSet', | ||||
|     'winter2019BlizzardSet', | ||||
|     'winter2019PyrotechnicSet', | ||||
|   ], | ||||
|   spring: [ | ||||
|     // spring 2014 | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import takeThisGear from './special-takeThis'; | ||||
| import wonderconGear from './special-wondercon'; | ||||
| import t from '../../../translation'; | ||||
|  | ||||
| const CURRENT_SEASON = 'fall'; | ||||
| const CURRENT_SEASON = 'winter'; | ||||
|  | ||||
| let armor = { | ||||
|   0: backerGear.armorSpecial0, | ||||
| @@ -911,6 +911,9 @@ let armor = { | ||||
|     notes: t('armorSpecialWinter2018RogueNotes', { per: 15 }), | ||||
|     value: 90, | ||||
|     per: 15, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Warrior: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -920,6 +923,9 @@ let armor = { | ||||
|     notes: t('armorSpecialWinter2018WarriorNotes', { con: 9 }), | ||||
|     value: 90, | ||||
|     con: 9, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Mage: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -929,6 +935,9 @@ let armor = { | ||||
|     notes: t('armorSpecialWinter2018MageNotes', { int: 9 }), | ||||
|     value: 90, | ||||
|     int: 9, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Healer: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -938,6 +947,9 @@ let armor = { | ||||
|     notes: t('armorSpecialWinter2018HealerNotes', { con: 15 }), | ||||
|     value: 90, | ||||
|     con: 15, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   birthday2018: { | ||||
|     text: t('armorSpecialBirthday2018Text'), | ||||
| @@ -1062,7 +1074,7 @@ let armor = { | ||||
|   winter2019Rogue: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'rogue', | ||||
|     set: 'winter2019ReindeerSet', | ||||
|     set: 'winter2019PoinsettiaSet', | ||||
|     text: t('armorSpecialWinter2019RogueText'), | ||||
|     notes: t('armorSpecialWinter2019RogueNotes', { per: 15 }), | ||||
|     value: 90, | ||||
| @@ -1071,7 +1083,7 @@ let armor = { | ||||
|   winter2019Warrior: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'warrior', | ||||
|     set: 'winter2019GiftWrappedSet', | ||||
|     set: 'winter2019BlizzardSet', | ||||
|     text: t('armorSpecialWinter2019WarriorText'), | ||||
|     notes: t('armorSpecialWinter2019WarriorNotes', { con: 9 }), | ||||
|     value: 90, | ||||
| @@ -1080,7 +1092,7 @@ let armor = { | ||||
|   winter2019Mage: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'wizard', | ||||
|     set: 'winter2019ConfettiSet', | ||||
|     set: 'winter2019PyrotechnicSet', | ||||
|     text: t('armorSpecialWinter2019MageText'), | ||||
|     notes: t('armorSpecialWinter2019MageNotes', { int: 9 }), | ||||
|     value: 90, | ||||
| @@ -1089,7 +1101,7 @@ let armor = { | ||||
|   winter2019Healer: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'healer', | ||||
|     set: 'winter2019MistletoeSet', | ||||
|     set: 'winter2019WinterStarSet', | ||||
|     text: t('armorSpecialWinter2019HealerText'), | ||||
|     notes: t('armorSpecialWinter2019HealerNotes', { con: 15 }), | ||||
|     value: 90, | ||||
| @@ -2292,6 +2304,9 @@ let head = { | ||||
|     notes: t('headSpecialWinter2018RogueNotes', { per: 9 }), | ||||
|     value: 60, | ||||
|     per: 9, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Warrior: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -2301,6 +2316,9 @@ let head = { | ||||
|     notes: t('headSpecialWinter2018WarriorNotes', { str: 9 }), | ||||
|     value: 60, | ||||
|     str: 9, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Mage: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -2310,6 +2328,9 @@ let head = { | ||||
|     notes: t('headSpecialWinter2018MageNotes', { per: 7 }), | ||||
|     value: 60, | ||||
|     per: 7, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Healer: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -2319,6 +2340,9 @@ let head = { | ||||
|     notes: t('headSpecialWinter2018HealerNotes', { int: 7 }), | ||||
|     value: 60, | ||||
|     int: 7, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   spring2018Rogue: { | ||||
|     event: EVENTS.spring2018, | ||||
| @@ -2437,7 +2461,7 @@ let head = { | ||||
|   winter2019Rogue: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'rogue', | ||||
|     set: 'winter2019ReindeerSet', | ||||
|     set: 'winter2019PoinsettiaSet', | ||||
|     text: t('headSpecialWinter2019RogueText'), | ||||
|     notes: t('headSpecialWinter2019RogueNotes', { per: 9 }), | ||||
|     value: 60, | ||||
| @@ -2446,7 +2470,7 @@ let head = { | ||||
|   winter2019Warrior: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'warrior', | ||||
|     set: 'winter2019GiftWrappedSet', | ||||
|     set: 'winter2019BlizzardSet', | ||||
|     text: t('headSpecialWinter2019WarriorText'), | ||||
|     notes: t('headSpecialWinter2019WarriorNotes', { str: 9 }), | ||||
|     value: 60, | ||||
| @@ -2455,7 +2479,7 @@ let head = { | ||||
|   winter2019Mage: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'wizard', | ||||
|     set: 'winter2019ConfettiSet', | ||||
|     set: 'winter2019PyrotechnicSet', | ||||
|     text: t('headSpecialWinter2019MageText'), | ||||
|     notes: t('headSpecialWinter2019MageNotes', { per: 7 }), | ||||
|     value: 60, | ||||
| @@ -2464,7 +2488,7 @@ let head = { | ||||
|   winter2019Healer: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'healer', | ||||
|     set: 'winter2019MistletoeSet', | ||||
|     set: 'winter2019WinterStarSet', | ||||
|     text: t('headSpecialWinter2019HealerText'), | ||||
|     notes: t('headSpecialWinter2019HealerNotes', { int: 7 }), | ||||
|     value: 60, | ||||
| @@ -3425,6 +3449,9 @@ let shield = { | ||||
|     notes: t('shieldSpecialWinter2018RogueNotes', { str: 8 }), | ||||
|     value: 80, | ||||
|     str: 8, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Warrior: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -3434,6 +3461,9 @@ let shield = { | ||||
|     notes: t('shieldSpecialWinter2018WarriorNotes', { con: 7 }), | ||||
|     value: 70, | ||||
|     con: 7, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Healer: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -3443,6 +3473,9 @@ let shield = { | ||||
|     notes: t('shieldSpecialWinter2018HealerNotes', { con: 9 }), | ||||
|     value: 70, | ||||
|     con: 9, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   spring2018Rogue: { | ||||
|     event: EVENTS.spring2018, | ||||
| @@ -3528,16 +3561,16 @@ let shield = { | ||||
|   winter2019Rogue: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'rogue', | ||||
|     set: 'winter2019ReindeerSet', | ||||
|     text: t('shieldSpecialWinter2019RogueText'), | ||||
|     notes: t('shieldSpecialWinter2019RogueNotes', { str: 8 }), | ||||
|     set: 'winter2019PoinsettiaSet', | ||||
|     text: t('weaponSpecialWinter2019RogueText'), | ||||
|     notes: t('weaponSpecialWinter2019RogueNotes', { str: 8 }), | ||||
|     value: 80, | ||||
|     str: 8, | ||||
|   }, | ||||
|   winter2019Warrior: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'warrior', | ||||
|     set: 'winter2019GiftWrappedSet', | ||||
|     set: 'winter2019BlizzardSet', | ||||
|     text: t('shieldSpecialWinter2019WarriorText'), | ||||
|     notes: t('shieldSpecialWinter2019WarriorNotes', { con: 7 }), | ||||
|     value: 70, | ||||
| @@ -3546,7 +3579,7 @@ let shield = { | ||||
|   winter2019Healer: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'healer', | ||||
|     set: 'winter2019MistletoeSet', | ||||
|     set: 'winter2019WinterStarSet', | ||||
|     text: t('shieldSpecialWinter2019HealerText'), | ||||
|     notes: t('shieldSpecialWinter2019HealerNotes', { con: 9 }), | ||||
|     value: 70, | ||||
| @@ -4463,6 +4496,9 @@ let weapon = { | ||||
|     notes: t('weaponSpecialWinter2018RogueNotes', { str: 8 }), | ||||
|     value: 80, | ||||
|     str: 8, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Warrior: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -4472,6 +4508,9 @@ let weapon = { | ||||
|     notes: t('weaponSpecialWinter2018WarriorNotes', { str: 15 }), | ||||
|     value: 90, | ||||
|     str: 15, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Mage: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -4483,6 +4522,9 @@ let weapon = { | ||||
|     value: 170, | ||||
|     int: 15, | ||||
|     per: 7, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   winter2018Healer: { | ||||
|     event: EVENTS.winter2018, | ||||
| @@ -4492,6 +4534,9 @@ let weapon = { | ||||
|     notes: t('weaponSpecialWinter2018HealerNotes', { int: 9 }), | ||||
|     value: 90, | ||||
|     int: 9, | ||||
|     canBuy: () => { | ||||
|       return CURRENT_SEASON === 'winter'; | ||||
|     }, | ||||
|   }, | ||||
|   spring2018Rogue: { | ||||
|     event: EVENTS.spring2018, | ||||
| @@ -4610,7 +4655,7 @@ let weapon = { | ||||
|   winter2019Rogue: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'rogue', | ||||
|     set: 'winter2019ReindeerSet', | ||||
|     set: 'winter2019PoinsettiaSet', | ||||
|     text: t('weaponSpecialWinter2019RogueText'), | ||||
|     notes: t('weaponSpecialWinter2019RogueNotes', { str: 8 }), | ||||
|     value: 80, | ||||
| @@ -4619,7 +4664,7 @@ let weapon = { | ||||
|   winter2019Warrior: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'warrior', | ||||
|     set: 'winter2019GiftWrappedSet', | ||||
|     set: 'winter2019BlizzardSet', | ||||
|     text: t('weaponSpecialWinter2019WarriorText'), | ||||
|     notes: t('weaponSpecialWinter2019WarriorNotes', { str: 15 }), | ||||
|     value: 90, | ||||
| @@ -4628,7 +4673,7 @@ let weapon = { | ||||
|   winter2019Mage: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'wizard', | ||||
|     set: 'winter2019ConfettiSet', | ||||
|     set: 'winter2019PyrotechnicSet', | ||||
|     twoHanded: true, | ||||
|     text: t('weaponSpecialWinter2019MageText'), | ||||
|     notes: t('weaponSpecialWinter2019MageNotes', { int: 15, per: 7 }), | ||||
| @@ -4639,7 +4684,7 @@ let weapon = { | ||||
|   winter2019Healer: { | ||||
|     event: EVENTS.winter2019, | ||||
|     specialClass: 'healer', | ||||
|     set: 'winter2019MistletoeSet', | ||||
|     set: 'winter2019WinterStarSet', | ||||
|     text: t('weaponSpecialWinter2019HealerText'), | ||||
|     notes: t('weaponSpecialWinter2019HealerNotes', { int: 9 }), | ||||
|     value: 90, | ||||
|   | ||||
| @@ -257,7 +257,7 @@ let quests = { | ||||
|   }, | ||||
|   evilsanta: { | ||||
|     canBuy () { | ||||
|       return false; | ||||
|       return true; | ||||
|     }, | ||||
|     text: t('questEvilSantaText'), | ||||
|     notes: t('questEvilSantaNotes'), | ||||
| @@ -283,7 +283,7 @@ let quests = { | ||||
|   }, | ||||
|   evilsanta2: { | ||||
|     canBuy () { | ||||
|       return false; | ||||
|       return true; | ||||
|     }, | ||||
|     text: t('questEvilSanta2Text'), | ||||
|     notes: t('questEvilSanta2Notes'), | ||||
|   | ||||
| @@ -8,26 +8,26 @@ const featuredItems = { | ||||
|       path: 'armoire', | ||||
|     }, | ||||
|     { | ||||
|       type: 'hatchingPotions', | ||||
|       path: 'hatchingPotions.White', | ||||
|       type: 'premiumHatchingPotion', | ||||
|       path: 'premiumHatchingPotions.Peppermint', | ||||
|     }, | ||||
|     { | ||||
|       type: 'eggs', | ||||
|       path: 'eggs.Wolf', | ||||
|       type: 'premiumHatchingPotion', | ||||
|       path: 'premiumHatchingPotions.IcySnow', | ||||
|     }, | ||||
|     { | ||||
|       type: 'food', | ||||
|       path: 'food.Milk', | ||||
|       type: 'premiumHatchingPotion', | ||||
|       path: 'premiumHatchingPotions.StarryNight', | ||||
|     }, | ||||
|   ], | ||||
|   quests: [ | ||||
|     { | ||||
|       type: 'quests', | ||||
|       path: 'quests.alligator', | ||||
|       path: 'quests.evilsanta', | ||||
|     }, | ||||
|     { | ||||
|       type: 'quests', | ||||
|       path: 'quests.taskwoodsTerror1', | ||||
|       path: 'quests.evilsanta2', | ||||
|     }, | ||||
|     { | ||||
|       type: 'bundles', | ||||
|   | ||||
| @@ -1,23 +1,30 @@ | ||||
| // import { SEASONAL_SETS } from '../content/constants'; | ||||
| import { SEASONAL_SETS } from '../content/constants'; | ||||
|  | ||||
| module.exports = { | ||||
|   opened: false, | ||||
|   opened: true, | ||||
|  | ||||
|   currentSeason: 'Closed', | ||||
|   currentSeason: 'Winter', | ||||
|  | ||||
|   dateRange: { start: '2018-09-20', end: '2018-10-31' }, | ||||
|   dateRange: { start: '2018-12-20', end: '2019-01-31' }, | ||||
|  | ||||
|   availableSets: [ | ||||
|     ...SEASONAL_SETS.winter, | ||||
|   ], | ||||
|  | ||||
|   pinnedSets: { | ||||
|     wizard: 'winter2019PyrotechnicSet', | ||||
|     warrior: 'winter2019BlizzardSet', | ||||
|     rogue: 'winter2019PoinsettiaSet', | ||||
|     healer: 'winter2019WinterStarSet', | ||||
|   }, | ||||
|  | ||||
|   availableSpells: [ | ||||
|   ], | ||||
|  | ||||
|   availableQuests: [ | ||||
|     'evilsanta', | ||||
|     'evilsanta2', | ||||
|   ], | ||||
|  | ||||
|   featuredSet: 'mummyMedicSet', | ||||
|   featuredSet: 'winter2017WinterWolfSet', | ||||
| }; | ||||
|   | ||||
| After Width: | Height: | Size: 650 B | 
| Before Width: | Height: | Size: 650 B After Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 781 B After Width: | Height: | Size: 781 B | 
							
								
								
									
										
											BIN
										
									
								
								website/raw_sprites/spritesmith_large/promo_npc_alex.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								website/raw_sprites/spritesmith_large/promo_seasonal_shop.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.0 KiB | 
| @@ -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 = 'GIFT A SUBSCRIPTION, GET A SUBSCRIPTION! AND HABITICA BLOG POSTS'; | ||||
| const LAST_ANNOUNCEMENT_TITLE = 'WINTER WONDERLAND BEGINS! AND DECEMBER MYSTERY ITEMS REVEALED'; | ||||
| const worldDmg = { // @TODO | ||||
|   bailey: false, | ||||
| }; | ||||
| @@ -30,26 +30,29 @@ api.getNews = { | ||||
|           <div class="mr-3 ${baileyClass}"></div> | ||||
|           <div class="media-body"> | ||||
|             <h1 class="align-self-center">${res.t('newStuff')}</h1> | ||||
|             <h2>12/18/2018 - ${LAST_ANNOUNCEMENT_TITLE}</h2> | ||||
|             <h2>12/20/2018 - ${LAST_ANNOUNCEMENT_TITLE}</h2> | ||||
|           </div> | ||||
|         </div> | ||||
|         <hr/> | ||||
|         <div class="promo_g1g1 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 today through January 15. Now when you gift somebody a subscription, you get the same subscription for yourself for free!</p> | ||||
|         <p>Subscribers get tons of perks every month, including exclusive items, the ability to buy Gems with Gold, a cute exclusive Jackalope Pet, and increased data history. Plus, it helps keep Habitica running :) To gift a subscription to someone, 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>This promotion is only available on <a href='https://habitica.com/'>the web</a> for now, but it will be coming to the Habitica mobile apps very soon.</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. Thanks so much for your support! <3</p> | ||||
|         <div class="small mb-3">by SabreCat and viirus</div> | ||||
|         <div class="promo_todos center-block"></div> | ||||
|         <h3>Wiki Feature: Habitican Shared Lists</h3> | ||||
|         <p>This month's <a href='https://habitica.wordpress.com/2018/12/12/habitican-shared-task-lists/' target='_blank'>featured Wiki article</a> is about Habitican Shared Lists! We hope that it will help you as you explore new possibilities for your task list. 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="promo_studying center-block"></div> | ||||
|         <h3>Use Case and Guild Spotlights on Professionalization and Adulting Skills</h3> | ||||
|         <p>We've got new posts on the blog all about ways to use Habitica to help with all those pesky "grown-up" tasks! First, there's a <a href='https://habitica.wordpress.com/2018/12/18/professionalization-and-adulting-skills-guild-spotlight/' target='_blank'>Guild Spotlight</a> that highlights the Guilds that can help you as you explore ways to use Habitica to boost your adulting level. Next, we have a <a href='https://habitica.wordpress.com/2018/12/18/use-case-spotlight-professionalization-and-adulting-skills/' target='_blank'>Use Case Spotlight</a> with adulting and professionalization tips! These suggestions were submitted by Habiticans in the <a href='/groups/guild/1d3a10bf-60aa-4806-a38b-82d1084a59e6' target='_blank'>Use Case Spotlights Guild</a>.</p> | ||||
|         <p>Plus, we're collecting user submissions for the next Use Case Spotlight! How do you use Habitica to establish new habits? We’ll be featuring player-submitted examples in Use Case Spotlights on the Habitica Blog next month, so post your suggestions in the Use Case Spotlight Guild now. We look forward to learning more about how you use Habitica to improve your life and get things done!</p> | ||||
|         <div class="small mb-3">by shanaqui</div> | ||||
|         <div class="promo_winter_wonderland_2019 center-block"></div> | ||||
|         <h3>Winter Wonderland Begins!</h3> | ||||
|         <p>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> | ||||
|         <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 a Blizzard Warrior, a Poinsettia Rogue, a Pyrotechnic Mage, or a Winter Star Healer! You'd better get productive to earn enough gold before they disappear. Good luck!</p> | ||||
|         <div class="small mb-3">by Lt Cabel, Vikte, AnnDeLune, Persephone, SabreCat, shanaqui, and Beffymaroo</div> | ||||
|         <div class="promo_seasonal_shop 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 two winter quests, Trapper Santa and Find the Cub. 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 SabreCat and Lemoness</div> | ||||
|         <div class="promo_npc_alex center-block"></div> | ||||
|         <h3>NPC Costumes</h3> | ||||
|         <p>Looks like the NPCs are really getting in to the cheery winter mood around the site. Who wouldn't? After all, there's plenty more celebration to come...</p> | ||||
|         <div class="small mb-3">by Lemoness</div> | ||||
|         <div class="promo_mystery_201812 center-block"></div> | ||||
|         <h3>December Subscriber Items Revealed!</h3> | ||||
|         <p>The December Subscriber Set has been revealed: the Arctic Fox Item Set! You only have until December 31 to <a href='/user/settings/subscription'>receive the item set when you subscribe</a>. If you're already an active subscriber, reload the site and then head to Inventory > Items to claim your gear!</p> | ||||
|         <p>Subscribers also receive the ability to buy Gems with Gold -- the longer you subscribe, the more Gems you can buy per month! There are other perks as well, such as longer access to uncompressed data and a cute Jackalope pet. Best of all, subscriptions let us keep Habitica running. Thank you very much for your support -- it means a lot to us.</p> | ||||
|         <div class="small mb-3">by Beffymaroo</div> | ||||
|       </div> | ||||
|       `, | ||||
|     }); | ||||
|   | ||||