feat(content): Subscriber Items and Magic Potions

This commit is contained in:
Sabe Jones
2018-09-25 16:30:50 -05:00
parent a094e13352
commit 563f3e2012
57 changed files with 62 additions and 24 deletions

View File

@@ -8,7 +8,7 @@ const authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is do
/* /*
* Award this month's mystery items to subscribers * Award this month's mystery items to subscribers
*/ */
const MYSTERY_ITEMS = ['armor_mystery_201808', 'head_mystery_201808']; const MYSTERY_ITEMS = ['armor_mystery_201809', 'head_mystery_201809'];
const CONNECTION_STRING = nconf.get('MIGRATION_CONNECT_STRING'); const CONNECTION_STRING = nconf.get('MIGRATION_CONNECT_STRING');
let dbUsers = monk(CONNECTION_STRING).get('users', { castIds: false }); let dbUsers = monk(CONNECTION_STRING).get('users', { castIds: false });

View File

@@ -270,6 +270,7 @@
"hatchingPotionStarryNight": "Starry Night", "hatchingPotionStarryNight": "Starry Night",
"hatchingPotionRainbow": "Rainbow", "hatchingPotionRainbow": "Rainbow",
"hatchingPotionGlass": "Glass", "hatchingPotionGlass": "Glass",
"hatchingPotionGlow": "Glow-in-the-Dark",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.", "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs.", "premiumPotionAddlNotes": "Not usable on quest pet eggs.",

View File

@@ -270,9 +270,16 @@
"notAnEmail": "Invalid email address.", "notAnEmail": "Invalid email address.",
"emailTaken": "Email address is already used in an account.", "emailTaken": "Email address is already used in an account.",
"newEmailRequired": "Missing new email address.", "newEmailRequired": "Missing new email address.",
"usernameTaken": "Login Name already taken.", "usernameTime": "It's time to set your username!",
"usernameWrongLength": "Login Name must be between 1 and 20 characters long.", "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.<br><br>If you'd like to learn more about this change, <a href='http://habitica.wikia.com/wiki/Habitica_Wiki' target='_blank'>visit our wiki</a>.",
"usernameBadCharacters": "Login Name must contain only letters a to z, numbers 0 to 9, hyphens, or underscores.", "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didnt previously set a login name, your username was auto-generated.",
"usernameTaken": "Username already taken.",
"usernameWrongLength": "Username must be between 1 and 20 characters long.",
"displayNameWrongLength": "Display names must be between 1 and 30 characters long.",
"usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.",
"nameBadWords": "Names cannot include any inappropriate words.",
"confirmUsername": "Confirm Username",
"usernameConfirmed": "Username Confirmed",
"passwordConfirmationMatch": "Password confirmation doesn't match password.", "passwordConfirmationMatch": "Password confirmation doesn't match password.",
"invalidLoginCredentials": "Incorrect username and/or email and/or password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.",
"passwordResetPage": "Reset Password", "passwordResetPage": "Reset Password",
@@ -295,7 +302,7 @@
"signUpWithSocial": "Sign up with <%= social %>", "signUpWithSocial": "Sign up with <%= social %>",
"loginWithSocial": "Log in with <%= social %>", "loginWithSocial": "Log in with <%= social %>",
"confirmPassword": "Confirm Password", "confirmPassword": "Confirm Password",
"usernameLimitations": "Login Name must be 1 to 20 characters long, containing only letters a to z, or numbers 0 to 9, or hyphens, or underscores.", "usernameLimitations": "Username must be 1 to 20 characters, containing only letters a to z, numbers 0 to 9, hyphens, or underscores, and cannot include any inappropriate terms.",
"usernamePlaceholder": "e.g., HabitRabbit", "usernamePlaceholder": "e.g., HabitRabbit",
"emailPlaceholder": "e.g., rabbit@example.com", "emailPlaceholder": "e.g., rabbit@example.com",
"passwordPlaceholder": "e.g., ******************", "passwordPlaceholder": "e.g., ******************",

View File

@@ -739,6 +739,8 @@
"armorMystery201807Notes": "This powerful tail will propel you through the sea at incredible speeds! Confers no benefit. July 2018 Subscriber Item.", "armorMystery201807Notes": "This powerful tail will propel you through the sea at incredible speeds! Confers no benefit. July 2018 Subscriber Item.",
"armorMystery201808Text": "Lava Dragon Armor", "armorMystery201808Text": "Lava Dragon Armor",
"armorMystery201808Notes": "This armor is made from the shed scales of the elusive (and extremely warm) Lava Dragon. Confers no benefit. August 2018 Subscriber Item.", "armorMystery201808Notes": "This armor is made from the shed scales of the elusive (and extremely warm) Lava Dragon. Confers no benefit. August 2018 Subscriber Item.",
"armorMystery201809Text": "Armor of Autumn Leaves",
"armorMystery201809Notes": "You are not only a small and fearsome leaf puff, you are sporting the most beautiful colors of the season! Confers no benefit. September 2018 Subscriber Item.",
"armorMystery301404Text": "Steampunk Suit", "armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
"armorMystery301703Text": "Steampunk Peacock Gown", "armorMystery301703Text": "Steampunk Peacock Gown",
@@ -1191,6 +1193,8 @@
"headMystery201807Notes": "The strong scales on this helm will protect you from any manner of oceanic foe. Confers no benefit. July 2018 Subscriber Item.", "headMystery201807Notes": "The strong scales on this helm will protect you from any manner of oceanic foe. Confers no benefit. July 2018 Subscriber Item.",
"headMystery201808Text": "Lava Dragon Cowl", "headMystery201808Text": "Lava Dragon Cowl",
"headMystery201808Notes": "The glowing horns on this cowl will light your way through underground caverns. Confers no benefit. August 2018 Subscriber Item.", "headMystery201808Notes": "The glowing horns on this cowl will light your way through underground caverns. Confers no benefit. August 2018 Subscriber Item.",
"headMystery201809Text": "Crown of Autumn Flowers",
"headMystery201809Notes": "The last flowers of autumn's warm days are a reminder of the beauty of the season. Confers no benefit. September 2018 Subscriber Item.",
"headMystery301404Text": "Fancy Top Hat", "headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", "headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
"headMystery301405Text": "Basic Top Hat", "headMystery301405Text": "Basic Top Hat",

View File

@@ -148,6 +148,7 @@
"mysterySet201806": "Alluring Anglerfish Set", "mysterySet201806": "Alluring Anglerfish Set",
"mysterySet201807": "Sea Serpent Set", "mysterySet201807": "Sea Serpent Set",
"mysterySet201808": "Lava Dragon Set", "mysterySet201808": "Lava Dragon Set",
"mysterySet201809": "Autumnal Armor Set",
"mysterySet301404": "Steampunk Standard Set", "mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set", "mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set", "mysterySet301703": "Peacock Steampunk Set",

View File

@@ -211,6 +211,12 @@ let armor = {
mystery: '201808', mystery: '201808',
value: 0, value: 0,
}, },
201809: {
text: t('armorMystery201809Text'),
notes: t('armorMystery201809Notes'),
mystery: '201809',
value: 0,
},
301404: { 301404: {
text: t('armorMystery301404Text'), text: t('armorMystery301404Text'),
notes: t('armorMystery301404Notes'), notes: t('armorMystery301404Notes'),
@@ -619,6 +625,12 @@ let head = {
mystery: '201808', mystery: '201808',
value: 0, value: 0,
}, },
201809: {
text: t('headMystery201809Text'),
notes: t('headMystery201809Notes'),
mystery: '201809',
value: 0,
},
301404: { 301404: {
text: t('headMystery301404Text'), text: t('headMystery301404Text'),
notes: t('headMystery301404Notes'), notes: t('headMystery301404Notes'),

View File

@@ -3,7 +3,7 @@ import defaults from 'lodash/defaults';
import each from 'lodash/each'; import each from 'lodash/each';
import t from './translation'; import t from './translation';
const CURRENT_SEASON = '_NONE_'; const CURRENT_SEASON = 'October';
let drops = { let drops = {
Base: { Base: {
@@ -100,7 +100,7 @@ let premium = {
value: 2, value: 2,
text: t('hatchingPotionSpooky'), text: t('hatchingPotionSpooky'),
limited: true, limited: true,
_season: 'October', _season: '_PENDING_',
}, },
Ghost: { Ghost: {
value: 2, value: 2,
@@ -138,6 +138,12 @@ let premium = {
limited: true, limited: true,
_season: 'July', _season: 'July',
}, },
Glow: {
value: 2,
text: t('hatchingPotionGlow'),
limited: true,
_season: 'October',
},
}; };
each(drops, (pot, key) => { each(drops, (pot, key) => {

View File

@@ -222,6 +222,10 @@ let mysterySets = {
start: '2018-08-23', start: '2018-08-23',
end: '2018-09-02', end: '2018-09-02',
}, },
201809: {
start: '2018-09-25',
end: '2018-10-02',
},
301404: { 301404: {
start: '3014-03-24', start: '3014-03-24',
end: '3014-04-02', end: '3014-04-02',

View File

@@ -9,15 +9,15 @@ const featuredItems = {
}, },
{ {
type: 'premiumHatchingPotion', type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Ember', path: 'premiumHatchingPotions.Ghost',
}, },
{ {
type: 'eggs', type: 'premiumHatchingPotion',
path: 'eggs.Dragon', path: 'premiumHatchingPotions.Glow',
}, },
{ {
type: 'card', type: 'card',
path: 'cardTypes.congrats', path: 'cardTypes.getwell',
}, },
], ],
quests: [ quests: [

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 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: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 981 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 999 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth';
let api = {}; let api = {};
// @TODO export this const, cannot export it from here because only routes are exported from controllers // @TODO export this const, cannot export it from here because only routes are exported from controllers
const LAST_ANNOUNCEMENT_TITLE = 'FALL FESTIVAL BEGINS! LIMITED EDITION FALL EQUIPMENT, SEASONAL SHOP OPENS, AND NPC OUTFITS!'; const LAST_ANNOUNCEMENT_TITLE = 'SEPTEMBER SUBSCRIBER ITEMS, GHOST AND GLOW-IN-THE-DARK HATCHING POTIONS, AND BLOG POST ON CONTRIBUTING TO HABITICA';
const worldDmg = { // @TODO const worldDmg = { // @TODO
bailey: false, bailey: false,
}; };
@@ -30,21 +30,24 @@ api.getNews = {
<div class="mr-3 ${baileyClass}"></div> <div class="mr-3 ${baileyClass}"></div>
<div class="media-body"> <div class="media-body">
<h1 class="align-self-center">${res.t('newStuff')}</h1> <h1 class="align-self-center">${res.t('newStuff')}</h1>
<h2>9/20/2018 - ${LAST_ANNOUNCEMENT_TITLE}</h2> <h2>9/25/2018 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
</div> </div>
</div> </div>
<hr/> <hr/>
<div class="promo_fall_festival_2018 center-block"></div> <div class="promo_mystery_201809 center-block"></div>
<h3>Limited Edition Class Outfits!</h3> <h3>September Subscriber Items Revealed!</h3>
<p>From now until October 31st, limited edition outfits are available in the Rewards column! Depending on your class, you can be a Minotaur Warrior, an Alter Ego Rogue, a Carnivorous Plant Healer, or a Candymancer Mage. You'd better get productive to earn enough gold before your time runs out...</p> <p>The September Subscriber Items have been revealed: the Autumnal Armor Item Set! You only have until September 30 to receive the item set <a href='/user/settings/subscription' target='_blank'>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>
<div class="small mb-3">by AnnDeLune, Vikte, QuartzFox, Beffymaroo, and SabreCat</div> <p>Subscribers also receive the ability to buy Gems for 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="promo_fall_festival_2017 center-block"></div> <div class="small mb-3">by Beffymaroo</div>
<h3>Seasonal Shop Opens</h3> <div class="promo_ghost_potions center-block"></div>
<p>The <a href='/shops/seasonal' target='_blank'>Seasonal Shop</a> has opened! It's stocking autumnal Seasonal Edition goodies at the moment, including past fall outfits. Everything there will be available to purchase during the Fall Festival event each year, but it's only open until October 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!</p> <h3>Ghost and Glow-in-the-Dark Hatching Potions</h3>
<div class="small mb-3">by AnnDeLune, ʂʈєƒąʃųƥągųʂ, Katy133, Lilith of Alfheim, Definitely not a villain, ShoGirlGeek. cataclysms, maxpendragon, Lemoness, Beffymaroo, and SabreCat</div> <p>We've brought back Ghost Potions, and added a brand-new Magic Hatching Potion: Glow-in-the-Dark! Between now and October 31st, you can buy these Hatching Potions from <a href='/shops/market' target='_blank'>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>
<h3>NPC Outfits</h3> <p>After they're gone, it will be at least a year before the Ghost or Glow-in-the-Dark Hatching Potions are available again, so be sure to get them now!</p>
<p>Everyone has hastened down to the Flourishing Fields to celebrate this spooky harvest festival. Be sure to check out all the new outfits that people are sporting!</p> <div class="small mb-3">by Hermi, AaronTheTwin, tricksy.fox, and SabreCat</div>
<div class="promo_seasonal_shop center-block"></div> <div class="scene_painting center-block"></div>
<h3>Blog Post: Contributing to Habitica</h3>
<p>This month's <a href='https://habitica.wordpress.com/2018/09/19/contributing-to-habitica/' target='_blank'>featured Wiki article</a> is about Contributing to Habitica. We hope that it will help you get involved with our open-source project and our great community! 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> </div>
`, `,
}); });