Merge branch 'develop' into Hus274-7793

This commit is contained in:
Blade Barringer
2016-08-05 12:55:00 -05:00
333 changed files with 14467 additions and 24545 deletions

View File

@@ -13,13 +13,6 @@ website/client/
# Temporarilly disabled. These should be removed when the linting errors are fixed
common/script/content/index.js
common/script/public/**/*.js
website/server/**/api-v2/**/*.js
website/server/routes/payments.js
website/server/routes/pages.js
website/server/middlewares/apiThrottle.js
website/server/middlewares/forceRefresh.js
debug-scripts/*
scripts/*

View File

@@ -131,7 +131,7 @@ module.exports = function(grunt) {
grunt.registerTask('build:test', ['test:prepare:translations', 'build:dev']);
grunt.registerTask('test:prepare:translations', function() {
var i18n = require('./website/server/libs/api-v3/i18n'),
var i18n = require('./website/server/libs/i18n'),
fs = require('fs');
fs.writeFileSync('test/spec/mocks/translations.js',
"if(!window.env) window.env = {};\n" +

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,9 +1,9 @@
/* Comment out for holiday events */
/* .npc_ian {
.npc_ian {
background: url("/common/img/sprites/npc_ian.gif") no-repeat;
width: 78px;
height: 135px;
} */
}
.quest_burnout {
background: url("/common/img/sprites/quest_burnout.gif") no-repeat;

View File

@@ -1,24 +1,24 @@
.2014_Fall_HealerPROMO2 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -546px -1378px;
background-position: -1001px -1378px;
width: 90px;
height: 90px;
}
.2014_Fall_Mage_PROMO9 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1372px -808px;
background-position: -1357px -908px;
width: 120px;
height: 90px;
}
.2014_Fall_RoguePROMO3 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -653px;
background-position: -306px -220px;
width: 105px;
height: 90px;
}
.2014_Fall_Warrior_PROMO {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1104px -1275px;
background-position: -1295px -1275px;
width: 90px;
height: 90px;
}
@@ -30,13 +30,13 @@
}
.promo_backgrounds_armoire_201602 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1136px -199px;
background-position: -994px -199px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201603 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -994px -199px;
background-position: -1136px -199px;
width: 141px;
height: 294px;
}
@@ -64,9 +64,15 @@
width: 139px;
height: 588px;
}
.promo_backgrounds_armoire_201608 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -442px;
width: 140px;
height: 439px;
}
.promo_backtoschool {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1493px -302px;
background-position: -1493px -151px;
width: 150px;
height: 150px;
}
@@ -78,7 +84,7 @@
}
.promo_chairs_glasses {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -442px;
background-position: -452px -882px;
width: 51px;
height: 210px;
}
@@ -96,7 +102,7 @@
}
.promo_dilatoryDistress {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -273px -1378px;
background-position: -1113px -1275px;
width: 90px;
height: 90px;
}
@@ -126,7 +132,7 @@
}
.promo_enchanted_armoire_201509 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -455px -1378px;
background-position: -182px -1378px;
width: 90px;
height: 90px;
}
@@ -138,7 +144,7 @@
}
.promo_enchanted_armoire_201601 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -831px -1275px;
background-position: -364px -1378px;
width: 90px;
height: 90px;
}
@@ -174,13 +180,13 @@
}
.promo_mystery_201405 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1377px -1275px;
background-position: -637px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201406 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -956px;
background-position: 0px -1378px;
width: 90px;
height: 96px;
}
@@ -198,7 +204,7 @@
}
.promo_mystery_201409 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -649px -1275px;
background-position: -819px -1378px;
width: 90px;
height: 90px;
}
@@ -210,7 +216,7 @@
}
.promo_mystery_201411 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1013px -1275px;
background-position: -910px -1378px;
width: 90px;
height: 90px;
}
@@ -228,13 +234,13 @@
}
.promo_mystery_201502 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -91px -1378px;
background-position: -931px -1275px;
width: 90px;
height: 90px;
}
.promo_mystery_201503 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -182px -1378px;
background-position: -455px -1378px;
width: 90px;
height: 90px;
}
@@ -246,7 +252,7 @@
}
.promo_mystery_201505 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -364px -1378px;
background-position: -273px -1378px;
width: 90px;
height: 90px;
}
@@ -258,31 +264,31 @@
}
.promo_mystery_201507 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -744px;
background-position: -306px -417px;
width: 90px;
height: 105px;
}
.promo_mystery_201508 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -306px -220px;
background-position: -837px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_201509 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -740px -1275px;
background-position: -1386px -1275px;
width: 90px;
height: 90px;
}
.promo_mystery_201510 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -306px -311px;
background-position: -743px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_201511 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -922px -1275px;
background-position: -1204px -1275px;
width: 90px;
height: 90px;
}
@@ -294,40 +300,46 @@
}
.promo_mystery_201601 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1357px -908px;
background-position: -1372px -808px;
width: 120px;
height: 90px;
}
.promo_mystery_201602 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1195px -1275px;
background-position: -1022px -1275px;
width: 90px;
height: 90px;
}
.promo_mystery_201603 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1286px -1275px;
background-position: -728px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201604 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -306px -402px;
background-position: -649px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_201605 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -1378px;
background-position: -546px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201606 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -850px;
background-position: -306px -311px;
width: 90px;
height: 105px;
}
.promo_mystery_201607 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -91px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_3014 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -250px -1275px;
@@ -360,19 +372,19 @@
}
.promo_peppermint_flame {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1493px -601px;
background-position: -1493px -453px;
width: 140px;
height: 147px;
}
.promo_pet_skins {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1493px -453px;
background-position: -1493px -601px;
width: 140px;
height: 147px;
}
.customize-option.promo_pet_skins {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1518px -468px;
background-position: -1518px -616px;
width: 60px;
height: 60px;
}
@@ -448,6 +460,12 @@
width: 114px;
height: 87px;
}
.promo_unconventional_armor {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -886px -327px;
width: 60px;
height: 60px;
}
.promo_updos {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1275px -494px;
@@ -498,7 +516,7 @@
}
.scene_coding {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1493px -151px;
background-position: -1493px -302px;
width: 150px;
height: 150px;
}
@@ -510,7 +528,7 @@
}
.welcome_basic_avatars {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -994px -642px;
background-position: -1241px -642px;
width: 246px;
height: 165px;
}
@@ -522,7 +540,7 @@
}
.welcome_sample_tasks {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1241px -642px;
background-position: -994px -642px;
width: 246px;
height: 165px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 KiB

After

Width:  |  Height:  |  Size: 397 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 342 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 146 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 148 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 154 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 60 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 126 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 148 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 377 KiB

After

Width:  |  Height:  |  Size: 400 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 154 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 130 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

View File

@@ -207,5 +207,13 @@
"backgroundDeepSeaText": "Deep Sea",
"backgroundDeepSeaNotes": "Dive to the Deep Sea.",
"backgroundDilatoryCastleText": "Castle of Dilatory",
"backgroundDilatoryCastleNotes": "Swim past the Castle of Dilatory."
"backgroundDilatoryCastleNotes": "Swim past the Castle of Dilatory.",
"backgrounds082016": "SET 27: Released August 2016",
"backgroundIdyllicCabinText": "Idyllic Cabin",
"backgroundIdyllicCabinNotes": "Retreat to an Idyllic Cabin.",
"backgroundMountainPyramidText": "Mountain Pyramid",
"backgroundMountainPyramidNotes": "Climb the many steps of a Mountain Pyramid.",
"backgroundStormyShipText": "Stormy Ship",
"backgroundStormyShipNotes": "Hold steady against wind and wave aboard a Stormy Ship."
}

View File

@@ -67,6 +67,7 @@
"goalSample4": "Japanese lesson on Duolingo",
"goalSample5": "Read an Informative Article",
"goals": "Goals",
"guidanceForBlacksmiths": "Guidance for Blacksmiths",
"health": "Health",
"healthSample1": "Drink Water/Soda",
"healthSample2": "Chew Gum/Smoke",
@@ -167,6 +168,7 @@
"teams": "Teams",
"terms": "Terms and Conditions",
"testimonialHeading": "What people say...",
"tumblr": "Tumblr",
"localStorageTryFirst": "If you are experiencing problems with Habitica, click the button below to clear local storage for this website (other websites will not be affected). You will need to log in again after doing this, so first be sure that you know your log-in details, which can be found at Settings -> <%= linkStart %>Site<%= linkEnd %>.",
"localStorageTryNext": "If the problem persists, please <%= linkStart %>Report a Bug<%= linkEnd %> if you haven't already.",
"localStorageClearing": "Clearing Local Storage",

View File

@@ -442,6 +442,8 @@
"armorMystery201605Notes": "Unlike the traditional bards who join adventuring parties, bards who join Habitican marching bands are known for grand parades, not dungeon raids. Confers no benefit. May 2016 Subscriber Item.",
"armorMystery201606Text": "Selkie Tail",
"armorMystery201606Notes": "This strong tail shimmers like sea foam crashing upon the shore. Confers no benefit. June 2016 Subscriber Item.",
"armorMystery201607Text": "Seafloor Rogue Armor",
"armorMystery201607Notes": "Blend into the sea floor with this stealthy aquatic armor. Confers no benefit. July 2016 Subscriber Item.",
"armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
@@ -479,6 +481,8 @@
"armorArmoireStripedSwimsuitNotes": "What could be more fun than battling sea monsters on the beach? Increases Constitution by <%= con %>. Enchanted Armoire: Seaside Set (Item 2 of 3).",
"armorArmoireCannoneerRagsText": "Cannoneer Rags",
"armorArmoireCannoneerRagsNotes": "These rags be tougher than they look. Increases Constitution by <%= con %>. Enchanted Armoire: Cannoneer Set (Item 2 of 3).",
"armorArmoireFalconerArmorText": "Falconer Armor",
"armorArmoireFalconerArmorNotes": "Keep away talon attacks with this sturdy armor! Increases Constitution by <%= con %>. Enchanted Armoire: Falconer Set (Item 1 of 3).",
"headgear": "headgear",
"headgearCapitalized": "Headgear",
@@ -687,6 +691,8 @@
"headMystery201605Notes": "Seventy-six dragons led the big parade, with a hundred and ten gryphons close at hand! Confers no benefit. May 2016 Subscriber Item.",
"headMystery201606Text": "Selkie Cap",
"headMystery201606Notes": "Hum the tune of the ocean as you blend in with the frolicking seals! Confers no benefit. June 2016 Subscriber Item.",
"headMystery201607Text": "Seafloor Rogue Helm",
"headMystery201607Notes": "The kelp growing from this helm helps camouflage you. Confers no benefit. July 2016 Subscriber Item.",
"headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
"headMystery301405Text": "Basic Top Hat",
@@ -742,6 +748,8 @@
"headArmoireGreenFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a gorgeous green color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.",
"headArmoireCannoneerBandannaText": "Cannoneer Bandanna",
"headArmoireCannoneerBandannaNotes": "'Tis a cannoneer's life for me! Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Cannoneer Set (Item 3 of 3).",
"headArmoireFalconerCapText": "Falconer Cap",
"headArmoireFalconerCapNotes": "This jaunty cap helps you better understand birds of prey. Increases Intelligence by <%= int %>. Enchanted Armoire: Falconer Set (Item 2 of 3).",
"offhand": "shield-hand item",
"offhandCapitalized": "Shield-Hand Item",
@@ -877,6 +885,8 @@
"shieldArmoireFloralBouquetNotes": "Not much help in battle, but aren't they beautiful? Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
"shieldArmoireSandyBucketText": "Sandy Bucket",
"shieldArmoireSandyBucketNotes": "Good for storing all that Gold that you'll earn from completing tasks! Increases Perception by <%= per %>. Enchanted Armoire: Seaside Set (Item 3 of 3).",
"shieldArmoirePerchingFalconText": "Perching Falcon",
"shieldArmoirePerchingFalconNotes": "A falcon friend perches on your arm, prepared to swoop at your enemies. Increases Strength by <%= str %>. Enchanted Armoire: Falconer Set (Item 3 of 3).",
"back": "Back Accessory",
"backBase0Text": "No Back Accessory",

View File

@@ -117,6 +117,7 @@
"audioTheme_gokulTheme": "Gokul Theme",
"audioTheme_luneFoxTheme": "LuneFox's Theme",
"audioTheme_rosstavoTheme": "Rosstavo's Theme",
"audioTheme_dewinTheme": "Dewin's Theme",
"askQuestion": "Ask a Question",
"reportBug": "Report a Bug",
"HabiticaWiki": "The Habitica Wiki",

View File

@@ -11,6 +11,7 @@
"danielText2Broken": "Oh... If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn...",
"alexander": "Alexander the Merchant",
"welcomeMarket": "Welcome to the Market! Buy hard-to-find eggs and potions! Sell your extras! Commission useful services! Come see what we have to offer.",
"welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.",
"displayItemForGold": "Do you want to sell a <strong><%= itemType %></strong>?",
"displayEggForGold": "Do you want to sell a <strong><%= itemType %> Egg</strong>?",
"displayPotionForGold": "Do you want to sell a <strong><%= itemType %> Potion</strong>?",
@@ -20,6 +21,7 @@
"justin": "Justin",
"ian": "Ian",
"ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!",
"ianTextMobile": "Welcome to the Quest Shop! Be sure to check out our fine array of Quest Scrolls for purchase!",
"ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...",
"missingKeyParam": "\"req.params.key\" is required.",

View File

@@ -66,7 +66,6 @@
"deleteLocalAccountText": "Are you sure? This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type your password into the text box below.",
"API": "API",
"APIv3": "API v3",
"APIv2": "API v2 - Deprecated",
"APIText": "Copy these for use in third party applications. However, think of your API Token like a password, and do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.",
"APIToken": "API Token (this is a password - see warning above!)",
"thirdPartyApps": "Third Party Apps",

View File

@@ -73,6 +73,7 @@
"timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>",
"timeTravelersTitle": "Mysterious Time Travelers",
"timeTravelersPopoverNoSub": "You'll need a Mystic Hourglass to summon the mysterious Time Travelers! <%= linkStart %>Subscribers<%= linkEnd %> earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a rare pet, mount, or Subscriber Item Set from the past... or maybe even the future.",
"timeTravelersPopoverNoSubMobile": "You'll need a Mystic Hourglass to summon the mysterious Time Travelers! Subscribers earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a rare pet, mount, or Subscriber Item Set from the past... or maybe even the future.",
"timeTravelersPopover": "We see you have a Mystic Hourglass, so we will happily travel back in time for you! Please choose the pet, mount, or Mystery Item Set you would like. You can see a list of the past item sets <a href='http://habitica.wikia.com/wiki/Mystery_Item' target='_blank'>here</a>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?",
"timeTravelersAlreadyOwned": "Congratulations! You already own everything the Time Travelers currently offer. Thanks for supporting the site!",
"mysticHourglassPopover": "A Mystic Hourglass allows you to purchase certain limited-time items, such as monthly Mystery Item Sets and awards from world bosses, from the past!",
@@ -109,6 +110,7 @@
"mysterySet201604": "Leaf Warrior Set",
"mysterySet201605": "Marching Bard Set",
"mysterySet201606": "Selkie Robes Set",
"mysterySet201607": "Seafloor Rogue Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",

View File

@@ -367,6 +367,20 @@ let backgrounds = {
notes: t('backgroundDeepSeaNotes'),
},
},
backgrounds082016: {
idyllic_cabin: {
text: t('backgroundIdyllicCabinText'),
notes: t('backgroundIdyllicCabinNotes'),
},
mountain_pyramid: {
text: t('backgroundMountainPyramidText'),
notes: t('backgroundMountainPyramidNotes'),
},
stormy_ship: {
text: t('backgroundStormyShipText'),
notes: t('backgroundStormyShipNotes'),
},
},
};
/* eslint-enable quote-props */

View File

@@ -71,7 +71,7 @@ each(GEAR_TYPES, (type) => {
};
}
if (item.mystery) {
if (item.mystery || key.indexOf('takeThis') !== -1) {
item.canOwn = ownsItem(key);
}

View File

@@ -150,6 +150,14 @@ let armor = {
set: 'cannoneer',
canOwn: ownsItem('armor_armoire_cannoneerRags'),
},
falconerArmor: {
text: t('armorArmoireFalconerArmorText'),
notes: t('armorArmoireFalconerArmorNotes', { con: 10 }),
value: 100,
con: 10,
set: 'falconer',
canOwn: ownsItem('armor_armoire_falconerArmor'),
},
};
let eyewear = {
@@ -380,6 +388,14 @@ let head = {
set: 'cannoneer',
canOwn: ownsItem('head_armoire_cannoneerBandanna'),
},
falconerCap: {
text: t('headArmoireFalconerCapText'),
notes: t('headArmoireFalconerCapNotes', { int: 10 }),
value: 100,
int: 10,
set: 'falconer',
canOwn: ownsItem('head_armoire_falconerCap'),
},
};
let shield = {
@@ -440,6 +456,14 @@ let shield = {
set: 'seaside',
canOwn: ownsItem('shield_armoire_sandyBucket'),
},
perchingFalcon: {
text: t('shieldArmoirePerchingFalconText'),
notes: t('shieldArmoirePerchingFalconNotes', { str: 16 }),
value: 100,
str: 16,
set: 'falconer',
canOwn: ownsItem('shield_armoire_perchingFalcon'),
},
};
let headAccessory = {

View File

@@ -127,6 +127,12 @@ let armor = {
mystery: '201606',
value: 0,
},
201607: {
text: t('armorMystery201607Text'),
notes: t('armorMystery201607Notes'),
mystery: '201607',
value: 0,
},
301404: {
text: t('armorMystery301404Text'),
notes: t('armorMystery301404Notes'),
@@ -328,6 +334,12 @@ let head = {
mystery: '201606',
value: 0,
},
201607: {
text: t('headMystery201607Text'),
notes: t('headMystery201607Notes'),
mystery: '201607',
value: 0,
},
301404: {
text: t('headMystery301404Text'),
notes: t('headMystery301404Notes'),

View File

@@ -96,9 +96,6 @@ let armor = {
notes: t('armorSpecialSummerRogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => {
return true;
},
},
summerWarrior: {
event: EVENTS.summer,
@@ -107,9 +104,6 @@ let armor = {
notes: t('armorSpecialSummerWarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => {
return true;
},
},
summerMage: {
event: EVENTS.summer,
@@ -118,9 +112,6 @@ let armor = {
notes: t('armorSpecialSummerMageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
summerHealer: {
event: EVENTS.summer,
@@ -129,9 +120,6 @@ let armor = {
notes: t('armorSpecialSummerHealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => {
return true;
},
},
fallRogue: {
event: EVENTS.fall,
@@ -242,9 +230,6 @@ let armor = {
notes: t('armorSpecialSummer2015RogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => {
return true;
},
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -253,9 +238,6 @@ let armor = {
notes: t('armorSpecialSummer2015WarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => {
return true;
},
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -264,9 +246,6 @@ let armor = {
notes: t('armorSpecialSummer2015MageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -275,9 +254,6 @@ let armor = {
notes: t('armorSpecialSummer2015HealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => {
return true;
},
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -438,9 +414,6 @@ let body = {
text: t('bodySpecialSummerHealerText'),
notes: t('bodySpecialSummerHealerNotes'),
value: 20,
canBuy: () => {
return true;
},
},
summerMage: {
event: EVENTS.summer,
@@ -448,9 +421,6 @@ let body = {
text: t('bodySpecialSummerMageText'),
notes: t('bodySpecialSummerMageNotes'),
value: 20,
canBuy: () => {
return true;
},
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -458,9 +428,6 @@ let body = {
text: t('bodySpecialSummer2015HealerText'),
notes: t('bodySpecialSummer2015HealerNotes'),
value: 20,
canBuy: () => {
return true;
},
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -468,9 +435,6 @@ let body = {
text: t('bodySpecialSummer2015MageText'),
notes: t('bodySpecialSummer2015MageNotes'),
value: 20,
canBuy: () => {
return true;
},
},
summer2015Rogue: {
event: EVENTS.summer2015,
@@ -478,9 +442,6 @@ let body = {
text: t('bodySpecialSummer2015RogueText'),
notes: t('bodySpecialSummer2015RogueNotes'),
value: 20,
canBuy: () => {
return true;
},
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -488,9 +449,6 @@ let body = {
text: t('bodySpecialSummer2015WarriorText'),
notes: t('bodySpecialSummer2015WarriorNotes'),
value: 20,
canBuy: () => {
return true;
},
},
};
@@ -503,9 +461,6 @@ let eyewear = {
text: t('eyewearSpecialSummerRogueText'),
notes: t('eyewearSpecialSummerRogueNotes'),
value: 20,
canBuy: () => {
return true;
},
},
summerWarrior: {
event: EVENTS.summer,
@@ -513,9 +468,6 @@ let eyewear = {
text: t('eyewearSpecialSummerWarriorText'),
notes: t('eyewearSpecialSummerWarriorNotes'),
value: 20,
canBuy: () => {
return true;
},
},
blackTopFrame: {
gearSet: 'glasses',
@@ -650,9 +602,6 @@ let head = {
notes: t('headSpecialSummerRogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => {
return true;
},
},
summerWarrior: {
event: EVENTS.summer,
@@ -661,9 +610,6 @@ let head = {
notes: t('headSpecialSummerWarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => {
return true;
},
},
summerMage: {
event: EVENTS.summer,
@@ -672,9 +618,6 @@ let head = {
notes: t('headSpecialSummerMageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => {
return true;
},
},
summerHealer: {
event: EVENTS.summer,
@@ -683,9 +626,6 @@ let head = {
notes: t('headSpecialSummerHealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => {
return true;
},
},
fallRogue: {
event: EVENTS.fall,
@@ -796,9 +736,6 @@ let head = {
notes: t('headSpecialSummer2015RogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => {
return true;
},
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -807,9 +744,6 @@ let head = {
notes: t('headSpecialSummer2015WarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => {
return true;
},
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -818,9 +752,6 @@ let head = {
notes: t('headSpecialSummer2015MageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => {
return true;
},
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -829,9 +760,6 @@ let head = {
notes: t('headSpecialSummer2015HealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => {
return true;
},
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -1216,9 +1144,6 @@ let shield = {
notes: t('shieldSpecialSummerRogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
summerWarrior: {
event: EVENTS.summer,
@@ -1227,9 +1152,6 @@ let shield = {
notes: t('shieldSpecialSummerWarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => {
return true;
},
},
summerHealer: {
event: EVENTS.summer,
@@ -1238,9 +1160,6 @@ let shield = {
notes: t('shieldSpecialSummerHealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => {
return true;
},
},
fallRogue: {
event: EVENTS.fall,
@@ -1321,9 +1240,6 @@ let shield = {
notes: t('shieldSpecialSummer2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -1332,9 +1248,6 @@ let shield = {
notes: t('shieldSpecialSummer2015WarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => {
return true;
},
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -1343,9 +1256,6 @@ let shield = {
notes: t('shieldSpecialSummer2015HealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => {
return true;
},
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -1534,9 +1444,6 @@ let weapon = {
notes: t('weaponSpecialSummerRogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
summerWarrior: {
event: EVENTS.summer,
@@ -1545,9 +1452,6 @@ let weapon = {
notes: t('weaponSpecialSummerWarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => {
return true;
},
},
summerMage: {
event: EVENTS.summer,
@@ -1558,9 +1462,6 @@ let weapon = {
value: 160,
int: 15,
per: 7,
canBuy: () => {
return true;
},
},
summerHealer: {
event: EVENTS.summer,
@@ -1569,9 +1470,6 @@ let weapon = {
notes: t('weaponSpecialSummerHealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
fallRogue: {
event: EVENTS.fall,
@@ -1682,9 +1580,6 @@ let weapon = {
notes: t('weaponSpecialSummer2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -1693,9 +1588,6 @@ let weapon = {
notes: t('weaponSpecialSummer2015WarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => {
return true;
},
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -1706,9 +1598,6 @@ let weapon = {
value: 160,
int: 15,
per: 7,
canBuy: () => {
return true;
},
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -1717,9 +1606,6 @@ let weapon = {
notes: t('weaponSpecialSummer2015HealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
fall2015Rogue: {
event: EVENTS.fall2015,

View File

@@ -441,6 +441,7 @@ api.specialPets = {
'Turkey-Gilded': 'gildedTurkey',
'MagicalBee-Base': 'magicalBee',
'Lion-Veteran': 'veteranLion',
'Gryphon-RoyalPurple': 'royalPurpleGryphon',
};
api.specialMounts = {

View File

@@ -118,6 +118,10 @@ let mysterySets = {
start: '2016-06-23',
end: '2016-07-02',
},
201607: {
start: '2016-07-26',
end: '2016-08-02',
},
301404: {
start: '3014-03-24',
end: '3014-04-02',

View File

@@ -94,6 +94,9 @@ api.count = count;
import statsComputed from './libs/statsComputed';
api.statsComputed = statsComputed;
import shops from './libs/shops';
api.shops = shops;
import autoAllocate from './fns/autoAllocate';
import crit from './fns/crit';
import handleTwoHanded from './fns/handleTwoHanded';

Some files were not shown because too many files have changed in this diff Show More