Merge branch 'develop' into api-v3

This commit is contained in:
Blade Barringer
2015-11-16 17:34:30 -06:00
18 changed files with 549 additions and 585 deletions

View File

@@ -1,342 +1,348 @@
.2014_Fall_HealerPROMO2 { .2014_Fall_HealerPROMO2 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -637px -955px; background-position: -731px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.2014_Fall_Mage_PROMO9 { .2014_Fall_Mage_PROMO9 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -347px; background-position: -306px -417px;
width: 120px; width: 120px;
height: 90px; height: 90px;
} }
.2014_Fall_RoguePROMO3 { .2014_Fall_RoguePROMO3 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -573px -347px; background-position: -808px -621px;
width: 105px; width: 105px;
height: 90px; height: 90px;
} }
.2014_Fall_Warrior_PROMO { .2014_Fall_Warrior_PROMO {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -590px -461px; background-position: -1095px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_backtoschool { .promo_backtoschool {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -342px; background-position: -943px -522px;
width: 150px; width: 150px;
height: 150px; height: 150px;
} }
.promo_burnout { .promo_burnout {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -220px; background-position: -452px 0px;
width: 219px; width: 219px;
height: 240px; height: 240px;
} }
.promo_classes_fall_2014 { .promo_classes_fall_2014 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -326px -760px; background-position: -326px -724px;
width: 321px; width: 321px;
height: 100px; height: 100px;
} }
.promo_classes_fall_2015 { .promo_classes_fall_2015 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -660px; background-position: -430px -621px;
width: 377px; width: 377px;
height: 99px; height: 99px;
} }
.promo_dilatoryDistress { .promo_dilatoryDistress {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -955px; background-position: -367px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_enchanted_armoire { .promo_enchanted_armoire {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -378px -660px; background-position: -499px -525px;
width: 374px; width: 374px;
height: 76px; height: 76px;
} }
.promo_enchanted_armoire_201507 { .promo_enchanted_armoire_201507 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -641px; background-position: -943px -673px;
width: 217px; width: 217px;
height: 90px; height: 90px;
} }
.promo_enchanted_armoire_201508 { .promo_enchanted_armoire_201508 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -723px -342px; background-position: -648px -724px;
width: 180px; width: 180px;
height: 90px; height: 90px;
} }
.promo_enchanted_armoire_201509 { .promo_enchanted_armoire_201509 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -273px -955px; background-position: -458px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_enchanted_armoire_201511 { .promo_enchanted_armoire_201511 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1111px -493px; background-position: -306px -326px;
width: 122px; width: 122px;
height: 90px; height: 90px;
} }
.promo_habitica { .promo_habitica {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -723px -166px; background-position: -452px -241px;
width: 175px; width: 175px;
height: 175px; height: 175px;
} }
.promo_habitica_sticker {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -220px;
width: 305px;
height: 304px;
}
.promo_haunted_hair { .promo_haunted_hair {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1127px -194px; background-position: -1094px -522px;
width: 100px; width: 100px;
height: 137px; height: 137px;
} }
.customize-option.promo_haunted_hair { .customize-option.promo_haunted_hair {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1152px -209px; background-position: -1119px -537px;
width: 60px; width: 60px;
height: 60px; height: 60px;
} }
.promo_item_notif { .promo_item_notif {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -91px; background-position: -943px -271px;
width: 249px; width: 249px;
height: 102px; height: 102px;
} }
.promo_mystery_201405 { .promo_mystery_201405 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -546px -955px; background-position: -1004px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201406 { .promo_mystery_201406 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -311px -220px; background-position: -91px -995px;
width: 90px; width: 90px;
height: 96px; height: 96px;
} }
.promo_mystery_201407 { .promo_mystery_201407 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -876px -433px; background-position: -628px -241px;
width: 42px; width: 42px;
height: 62px; height: 62px;
} }
.promo_mystery_201408 { .promo_mystery_201408 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1188px -641px; background-position: -1161px -764px;
width: 60px; width: 60px;
height: 71px; height: 71px;
} }
.promo_mystery_201409 { .promo_mystery_201409 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -182px -955px; background-position: -640px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201410 { .promo_mystery_201410 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1169px -823px; background-position: -1161px -673px;
width: 72px; width: 72px;
height: 63px; height: 63px;
} }
.promo_mystery_201411 { .promo_mystery_201411 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -364px -955px; background-position: -822px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201412 { .promo_mystery_201412 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -904px -342px; background-position: -1195px -592px;
width: 42px; width: 42px;
height: 66px; height: 66px;
} }
.promo_mystery_201501 { .promo_mystery_201501 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -899px -166px; background-position: -1193px -271px;
width: 48px; width: 48px;
height: 63px; height: 63px;
} }
.promo_mystery_201502 { .promo_mystery_201502 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -499px -461px; background-position: -276px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201503 { .promo_mystery_201503 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -728px -955px; background-position: 0px -1101px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201504 { .promo_mystery_201504 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1188px -732px; background-position: -874px -525px;
width: 60px; width: 60px;
height: 69px; height: 69px;
} }
.promo_mystery_201505 { .promo_mystery_201505 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -91px -955px; background-position: -549px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201506 { .promo_mystery_201506 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -899px -230px; background-position: -1195px -522px;
width: 42px; width: 42px;
height: 69px; height: 69px;
} }
.promo_mystery_201507 { .promo_mystery_201507 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -220px -220px; background-position: 0px -995px;
width: 90px; width: 90px;
height: 105px; height: 105px;
} }
.promo_mystery_201508 { .promo_mystery_201508 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -314px -326px; background-position: -829px -724px;
width: 93px; width: 93px;
height: 90px; height: 90px;
} }
.promo_mystery_201509 { .promo_mystery_201509 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -455px -955px; background-position: -913px -995px;
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.promo_mystery_201510 { .promo_mystery_201510 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -220px -326px; background-position: -182px -995px;
width: 93px; width: 93px;
height: 90px; height: 90px;
} }
.promo_mystery_3014 { .promo_mystery_3014 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -732px; background-position: -943px -764px;
width: 217px; width: 217px;
height: 90px; height: 90px;
} }
.promo_orca { .promo_orca {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1121px -342px; background-position: -306px -220px;
width: 105px; width: 105px;
height: 105px; height: 105px;
} }
.promo_partyhats { .promo_partyhats {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -1111px -584px; background-position: -943px -855px;
width: 115px; width: 115px;
height: 47px; height: 47px;
} }
.promo_pastel_skin { .promo_pastel_skin {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -331px -871px; background-position: 0px -835px;
width: 330px; width: 330px;
height: 83px; height: 83px;
} }
.customize-option.promo_pastel_skin { .customize-option.promo_pastel_skin {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -356px -886px; background-position: -25px -850px;
width: 60px; width: 60px;
height: 60px; height: 60px;
} }
.promo_pet_skins { .promo_pet_skins {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -493px; background-position: -1100px -374px;
width: 140px; width: 140px;
height: 147px; height: 147px;
} }
.customize-option.promo_pet_skins { .customize-option.promo_pet_skins {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -995px -508px; background-position: -1125px -389px;
width: 60px; width: 60px;
height: 60px; height: 60px;
} }
.promo_shimmer_hair { .promo_shimmer_hair {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -871px; background-position: -331px -835px;
width: 330px; width: 330px;
height: 83px; height: 83px;
} }
.customize-option.promo_shimmer_hair { .customize-option.promo_shimmer_hair {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -25px -886px; background-position: -356px -850px;
width: 60px; width: 60px;
height: 60px; height: 60px;
} }
.promo_splashyskins { .promo_splashyskins {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -823px; background-position: -452px -417px;
width: 198px; width: 198px;
height: 91px; height: 91px;
} }
.customize-option.promo_splashyskins { .customize-option.promo_splashyskins {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -995px -838px; background-position: -477px -432px;
width: 60px; width: 60px;
height: 60px; height: 60px;
} }
.promo_springclasses2014 { .promo_springclasses2014 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px 0px; background-position: -943px -180px;
width: 288px; width: 288px;
height: 90px; height: 90px;
} }
.promo_springclasses2015 { .promo_springclasses2015 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -430px -557px; background-position: -943px -89px;
width: 288px; width: 288px;
height: 90px; height: 90px;
} }
.promo_summer_classes_2014 { .promo_summer_classes_2014 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -557px; background-position: 0px -621px;
width: 429px; width: 429px;
height: 102px; height: 102px;
} }
.promo_summer_classes_2015 { .promo_summer_classes_2015 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -648px -760px; background-position: -943px 0px;
width: 300px; width: 300px;
height: 88px; height: 88px;
} }
.promo_updos { .promo_updos {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -970px -194px; background-position: -943px -374px;
width: 156px; width: 156px;
height: 147px; height: 147px;
} }
.promo_veteran_pets { .promo_veteran_pets {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -723px -509px; background-position: 0px -919px;
width: 146px; width: 146px;
height: 75px; height: 75px;
} }
.promo_winterclasses2015 { .promo_winterclasses2015 {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -760px; background-position: 0px -724px;
width: 325px; width: 325px;
height: 110px; height: 110px;
} }
.promo_winteryhair { .promo_winteryhair {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -723px -433px; background-position: -662px -835px;
width: 152px; width: 152px;
height: 75px; height: 75px;
} }
.customize-option.promo_winteryhair { .customize-option.promo_winteryhair {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -748px -448px; background-position: -687px -850px;
width: 60px; width: 60px;
height: 60px; height: 60px;
} }
.avatar_variety { .avatar_variety {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -461px; background-position: 0px -525px;
width: 498px; width: 498px;
height: 95px; height: 95px;
} }
@@ -348,19 +354,19 @@
} }
.welcome_basic_avatars { .welcome_basic_avatars {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -181px; background-position: -672px -347px;
width: 246px; width: 246px;
height: 165px; height: 165px;
} }
.welcome_promo_party { .welcome_promo_party {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px 0px; background-position: -672px 0px;
width: 270px; width: 270px;
height: 180px; height: 180px;
} }
.welcome_sample_tasks { .welcome_sample_tasks {
background-image: url(spritesmith-largeSprites-0.png); background-image: url(spritesmith-largeSprites-0.png);
background-position: -723px 0px; background-position: -672px -181px;
width: 246px; width: 246px;
height: 165px; height: 165px;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -69,8 +69,9 @@
"habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.",
"achievementDilatory": "Savior of Dilatory", "achievementDilatory": "Savior of Dilatory",
"achievementDilatoryText": "Helped defeat the Dread Drag'on of Dilatory during the 2014 Summer Splash Event!", "achievementDilatoryText": "Helped defeat the Dread Drag'on of Dilatory during the 2014 Summer Splash Event!",
"costumeContest": "2014 Costume Contest", "costumeContest": "Costume Contestant",
"costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!", "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries <a href='http://blog.habitrpg.com/tagged/cosplay' target='_blank'>on the Habitica blog</a>!",
"costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries <a href='http://blog.habitrpg.com/tagged/cosplay' target='_blank'>on the Habitica blog</a>!",
"memberSince": "- Member since", "memberSince": "- Member since",
"lastLoggedIn": "- Last logged in", "lastLoggedIn": "- Last logged in",
"notPorted": "This feature is not yet ported from the original site.", "notPorted": "This feature is not yet ported from the original site.",

View File

@@ -0,0 +1,58 @@
/* eslint-disable key-spacing */
export const CLASSES = [
'warrior',
'rogue',
'healer',
'wizard',
];
// IMPORTANT: The end date should be one to two days AFTER the actual end of
// the event, to allow people in different timezones to still buy the
// event gear up until at least the actual end of the event.
export const EVENTS = {
winter: { start: '2013-12-31', end: '2014-02-01' },
birthday: { start: '2013-01-30', end: '2014-02-01' },
spring: { start: '2014-03-21', end: '2014-05-01' },
summer: { start: '2014-06-20', end: '2014-08-01' },
gaymerx: { start: '2014-07-02', end: '2014-08-01' },
fall: { start: '2014-09-21', end: '2014-11-01' },
winter2015: { start: '2014-12-21', end: '2015-02-02' },
spring2015: { start: '2015-03-20', end: '2015-05-02' },
summer2015: { start: '2015-06-20', end: '2015-08-02' },
fall2015: { start: '2015-09-21', end: '2015-11-01' },
};
export const GEAR_TYPES = [
'weapon',
'armor',
'head',
'shield',
'body',
'back',
'headAccessory',
'eyewear',
];
export const ITEM_LIST = {
weapon: { localeKey: 'weapon', isEquipment: true },
armor: { localeKey: 'armor', isEquipment: true },
head: { localeKey: 'headgear', isEquipment: true },
shield: { localeKey: 'offhand', isEquipment: true },
back: { localeKey: 'back', isEquipment: true },
body: { localeKey: 'body', isEquipment: true },
headAccessory: { localeKey: 'headAccessory', isEquipment: true },
eyewear: { localeKey: 'eyewear', isEquipment: true },
hatchingPotions: { localeKey: 'hatchingPotion', isEquipment: false },
eggs: { localeKey: 'eggSingular', isEquipment: false },
quests: { localeKey: 'quest', isEquipment: false },
food: { localeKey: 'foodText', isEquipment: false },
Saddle: { localeKey: 'foodSaddleText', isEquipment: false },
};
export const USER_CAN_OWN_QUEST_CATEGORIES = [
'unlockable',
'gold',
'pet',
];

File diff suppressed because it is too large Load Diff

View File

@@ -1,133 +1,129 @@
import {each, where} from 'lodash'; import { each } from 'lodash';
import {flat as flattenedGear} from './gear/index';
let mysterySets = { let mysterySets = {
201402: { 201402: {
start: '2014-02-22', start: '2014-02-22',
end: '2014-02-28', end: '2014-02-28',
text: 'Winged Messenger Set' text: 'Winged Messenger Set',
}, },
201403: { 201403: {
start: '2014-03-24', start: '2014-03-24',
end: '2014-04-02', end: '2014-04-02',
text: 'Forest Walker Set' text: 'Forest Walker Set',
}, },
201404: { 201404: {
start: '2014-04-24', start: '2014-04-24',
end: '2014-05-02', end: '2014-05-02',
text: 'Twilight Butterfly Set' text: 'Twilight Butterfly Set',
}, },
201405: { 201405: {
start: '2014-05-21', start: '2014-05-21',
end: '2014-06-02', end: '2014-06-02',
text: 'Flame Wielder Set' text: 'Flame Wielder Set',
}, },
201406: { 201406: {
start: '2014-06-23', start: '2014-06-23',
end: '2014-07-02', end: '2014-07-02',
text: 'Octomage Set' text: 'Octomage Set',
}, },
201407: { 201407: {
start: '2014-07-23', start: '2014-07-23',
end: '2014-08-02', end: '2014-08-02',
text: 'Undersea Explorer Set' text: 'Undersea Explorer Set',
}, },
201408: { 201408: {
start: '2014-08-23', start: '2014-08-23',
end: '2014-09-02', end: '2014-09-02',
text: 'Sun Sorcerer Set' text: 'Sun Sorcerer Set',
}, },
201409: { 201409: {
start: '2014-09-24', start: '2014-09-24',
end: '2014-10-02', end: '2014-10-02',
text: 'Autumn Strider Set' text: 'Autumn Strider Set',
}, },
201410: { 201410: {
start: '2014-10-24', start: '2014-10-24',
end: '2014-11-02', end: '2014-11-02',
text: 'Winged Goblin Set' text: 'Winged Goblin Set',
}, },
201411: { 201411: {
start: '2014-11-24', start: '2014-11-24',
end: '2014-12-02', end: '2014-12-02',
text: 'Feast and Fun Set' text: 'Feast and Fun Set',
}, },
201412: { 201412: {
start: '2014-12-25', start: '2014-12-25',
end: '2015-01-02', end: '2015-01-02',
text: 'Penguin Set' text: 'Penguin Set',
}, },
201501: { 201501: {
start: '2015-01-26', start: '2015-01-26',
end: '2015-02-02', end: '2015-02-02',
text: 'Starry Knight Set' text: 'Starry Knight Set',
}, },
201502: { 201502: {
start: '2015-02-24', start: '2015-02-24',
end: '2015-03-02', end: '2015-03-02',
text: 'Winged Enchanter Set' text: 'Winged Enchanter Set',
}, },
201503: { 201503: {
start: '2015-03-25', start: '2015-03-25',
end: '2015-04-02', end: '2015-04-02',
text: 'Aquamarine Set' text: 'Aquamarine Set',
}, },
201504: { 201504: {
start: '2015-04-24', start: '2015-04-24',
end: '2015-05-02', end: '2015-05-02',
text: 'Busy Bee Set' text: 'Busy Bee Set',
}, },
201505: { 201505: {
start: '2015-05-25', start: '2015-05-25',
end: '2015-06-02', end: '2015-06-02',
text: 'Green Knight Set' text: 'Green Knight Set',
}, },
201506: { 201506: {
start: '2015-06-25', start: '2015-06-25',
end: '2015-07-02', end: '2015-07-02',
text: 'Neon Snorkeler Set' text: 'Neon Snorkeler Set',
}, },
201507: { 201507: {
start: '2015-07-24', start: '2015-07-24',
end: '2015-08-02', end: '2015-08-02',
text: 'Rad Surfer Set' text: 'Rad Surfer Set',
}, },
201508: { 201508: {
start: '2015-08-23', start: '2015-08-23',
end: '2015-09-02', end: '2015-09-02',
text: 'Cheetah Costume Set' text: 'Cheetah Costume Set',
}, },
201509: { 201509: {
start:'2015-09-24', start: '2015-09-24',
end:'2015-10-02', end: '2015-10-02',
text:'Werewolf Set' text: 'Werewolf Set',
}, },
201510: { 201510: {
start:'2015-10-26', start: '2015-10-26',
end:'2015-11-02', end: '2015-11-02',
text:'Horned Goblin Set' text: 'Horned Goblin Set',
}, },
301404: { 301404: {
start: '3014-03-24', start: '3014-03-24',
end: '3014-04-02', end: '3014-04-02',
text: 'Steampunk Standard Set' text: 'Steampunk Standard Set',
}, },
301405: { 301405: {
start: '3014-04-24', start: '3014-04-24',
end: '3014-05-02', end: '3014-05-02',
text: 'Steampunk Accessories Set' text: 'Steampunk Accessories Set',
}, },
wondercon: { // @TODO: extract this out of mystery items wondercon: {
start: '2014-03-24', start: '2014-03-24',
end: '2014-04-01' end: '2014-04-01',
} },
}; };
each(mysterySets, (objectSet, name) => { each(mysterySets, (value, key) => {
objectSet.key = name; value.key = key;
objectSet.items = where(flattenedGear, {
mystery: name
});
}); });
export default mysterySets; export default mysterySets;

View File

@@ -1,3 +0,0 @@
let classes = ['warrior', 'rogue', 'healer', 'wizard'];
export default classes;

View File

@@ -1,18 +0,0 @@
// IMPORTANT: The end date should be one to two days AFTER the actual end of
// the event, to allow people in different timezones to still buy the
// event gear up until at least the actual end of the event.
let events = {
winter: {start:'2013-12-31',end:'2014-02-01'},
birthday: {start:'2013-01-30',end:'2014-02-01'},
spring: {start:'2014-03-21',end:'2014-05-01'},
summer: {start:'2014-06-20',end:'2014-08-01'},
gaymerx: {start:'2014-07-02',end:'2014-08-01'},
fall: {start:'2014-09-21',end:'2014-11-01'},
winter2015: {start:'2014-12-21',end:'2015-02-02'},
spring2015: {start:'2015-03-20',end:'2015-05-02'},
summer2015: {start:'2015-06-20',end:'2015-08-02'},
fall2015: {start:'2015-09-21',end:'2015-11-01'},
}
export default events;

View File

@@ -1,56 +0,0 @@
let itemList = {
'weapon': {
localeKey: 'weapon',
isEquipment: true
},
'armor': {
localeKey: 'armor',
isEquipment: true
},
'head': {
localeKey: 'headgear',
isEquipment: true
},
'shield': {
localeKey: 'offhand',
isEquipment: true
},
'back': {
localeKey: 'back',
isEquipment: true
},
'body': {
localeKey: 'body',
isEquipment: true
},
'headAccessory': {
localeKey: 'headAccessory',
isEquipment: true
},
'eyewear': {
localeKey: 'eyewear',
isEquipment: true
},
'hatchingPotions': {
localeKey: 'hatchingPotion',
isEquipment: false
},
'eggs': {
localeKey: 'eggSingular',
isEquipment: false
},
'quests': {
localeKey: 'quest',
isEquipment: false
},
'food': {
localeKey: 'foodText',
isEquipment: false
},
'Saddle': {
localeKey: 'foodSaddleText',
isEquipment: false
}
};
export default itemList;

View File

@@ -1,4 +1,4 @@
var migrationName = 'new_stuff.js'; var migrationName = '20151013_jackolanterns.js';
var authorName = 'Sabe'; // in case script author needs to know when their ... var authorName = 'Sabe'; // in case script author needs to know when their ...
var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done

View File

@@ -0,0 +1,102 @@
var migrationName = '20151116_costume_contest.js';
var authorName = 'Sabe'; // in case script author needs to know when their ...
var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
/*
* Award Costume Contest achievement to 2015 winners
*/
var dbserver = 'localhost:27017'; // FOR TEST DATABASE
// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
var dbname = 'habitrpg';
var mongo = require('mongoskin');
var _ = require('lodash');
var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
// specify a query to limit the affected users (empty for all users):
var query = {
_id: {
$in: [
'e411dab3-a4ca-414d-bdbd-b6940b3bdeb3',
'35ced5cc-c33a-45c8-93dc-16000ee66fde',
'ab3f0549-7247-4fd5-975b-efcff98c79c3',
'b1261fd2-eb25-46b4-97a9-ae7a0dc8a131',
'1f27893f-3808-4724-9725-f46dab93faca',
'216a0c23-6afd-4a5e-b434-d386a10862a2',
'2d6ef231-50b4-4a22-90e7-45eb97147a2c',
'98b8cf4f-89bd-4b0a-988d-02629a217232',
'c5183dfa-c741-43ce-935e-c6d89b41a030',
'262a7afb-6b57-4d81-88e0-80d2e9f6cbdc',
'33991e0a-de55-4986-ac81-af78491a84de',
'7adf6ada-3c05-4054-b5df-fa7d49d3b9eb',
'235a1cbd-48c5-41b1-afb4-59d2f8645c57',
'b7617a61-188b-4332-bf4d-32268fa77f2b',
'672c1ce0-9f47-44f0-a3f3-8cc3c6c5a9cb',
'd0a3217a-7b92-48d6-b39a-b1b1be96702e',
'5ef910dc-1d22-47d9-aa38-a60132c60679',
'370a44c8-e94a-4a2c-91f2-33166926db1f',
'1b0b3ef3-28bd-4046-a49b-e1c83e281baf',
'75b93321-66b9-49bd-9076-052499c1d2bf',
'd97516e4-81d0-4f60-bf03-95f7330925ab',
'3e13cc79-de38-420d-822e-9e9da309ce6b',
'0e471dc1-ecb0-4388-a891-b873a237d2cf',
'ca3da398-4f73-4304-b838-af3669ed4cbb',
'44cdf105-8bda-4197-9d1a-1bcb83b4dc84',
'5419830c-b837-4573-ae82-4718ab95b7f1',
'ac6fbe37-b0dc-40d8-ba14-77dde66fbfa8',
'8789ba18-a498-46b9-b367-3b929a0acb94',
'52fce1a9-9b0a-4e26-95dc-adc12f52e752',
'21bf71ac-399c-470b-abe0-cc49a03b6a8b',
'f1618ce2-552e-4f23-bc76-e73d63ebedd0',
'4cc0c749-d943-4090-b529-42bc665b7244',
'e259682e-cb5c-4d94-b472-ceedc66d7484',
'fa197a4b-e065-4551-803a-c8a5b9970f9d'
]
}
};
// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
var fields = {
};
console.warn('Updating users...');
var progressCount = 1000;
var count = 0;
dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
if (err) { return exiting(1, 'ERROR! ' + err); }
if (!user) {
console.warn('All appropriate users found and modified.');
return displayData();
}
count++;
// specify user data to change:
var set = {'migration':migrationName};
var inc = {'achievements.costumeContests':1};
dbUsers.update({_id:user._id}, {$set:set});
dbUsers.update({_id:user._id}, {$inc:inc});
if (count%progressCount == 0) console.warn(count + ' ' + user._id);
if (user._id == authorUuid) console.warn(authorName + ' processed');
});
function displayData() {
console.warn('\n' + count + ' users processed\n');
return exiting(0);
}
function exiting(code, msg) {
code = code || 0; // 0 = success
if (code && !msg) { msg = 'ERROR!'; }
if (msg) {
if (code) { console.error(msg); }
else { console.log( msg); }
}
process.exit(code);
}

View File

@@ -0,0 +1,64 @@
var migrationName = '20151116_costume_contest_to_number.js';
var authorName = 'Sabe'; // in case script author needs to know when their ...
var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
/*
* Change Costume Contest achievement from Boolean to Number, so people can win repeatedly
*/
var dbserver = 'localhost:27017'; // FOR TEST DATABASE
// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
var dbname = 'habitrpg';
var mongo = require('mongoskin');
var _ = require('lodash');
var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
// specify a query to limit the affected users (empty for all users):
var query = {
'achievements.costumeContest':true
};
// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
var fields = {
'achievements.costumeContest':1
};
console.warn('Updating users...');
var progressCount = 1000;
var count = 0;
dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
if (err) { return exiting(1, 'ERROR! ' + err); }
if (!user) {
console.warn('All appropriate users found and modified.');
return displayData();
}
count++;
// specify user data to change:
var set = {'achievements.costumeContests':1};
dbUsers.update({_id:user._id}, {$set:set});
if (count%progressCount == 0) console.warn(count + ' ' + user._id);
if (user._id == authorUuid) console.warn(authorName + ' processed');
});
function displayData() {
console.warn('\n' + count + ' users processed\n');
return exiting(0);
}
function exiting(code, msg) {
code = code || 0; // 0 = success
if (code && !msg) { msg = 'ERROR!'; }
if (msg) {
if (code) { console.error(msg); }
else { console.log( msg); }
}
process.exit(code);
}

View File

@@ -406,9 +406,12 @@ gulp.task('test', ['test:all'], () => {
`\x1b[36mPending: ${totals[2]}\t` `\x1b[36mPending: ${totals[2]}\t`
); );
if (totals[1] > 0) throw "ERROR: There are failing tests!" kill(server);
else {
kill(server); if (totals[1] > 0) {
console.error('ERROR: There are failing tests!');
process.exit(1);
} else {
console.log('\n\x1b[36mThanks for helping keep Habitica clean!\x1b[0m'); console.log('\n\x1b[36mThanks for helping keep Habitica clean!\x1b[0m');
process.exit(); process.exit();
} }

View File

@@ -1,22 +1,28 @@
import { each } from 'lodash';
import { import {
expectValidTranslationString, expectValidTranslationString,
describeEachItem
} from '../helpers/content.helper'; } from '../helpers/content.helper';
import {questions, stillNeedHelp} from '../../common/script/src/content/faq'; import {questions, stillNeedHelp} from '../../common/script/content/faq';
describe('FAQ Locales', () => { describe('FAQ Locales', () => {
describeEachItem('Questions', questions, (question, index) => { describe('Questions', () => {
it('has a valid question', () => { it('has a valid questions', () => {
expectValidTranslationString(question.question); each(questions, (question, key) => {
expectValidTranslationString(question.question);
});
}); });
it('has a valid ios answer', () => { it('has a valid ios answers', () => {
expectValidTranslationString(question.ios); each(questions, (question, key) => {
expectValidTranslationString(question.ios);
});
}); });
it('has a valid web answer', () => { it('has a valid web answers', () => {
expectValidTranslationString(question.web); each(questions, (question, key) => {
expectValidTranslationString(question.web);
});
}); });
}); });

View File

@@ -66,11 +66,12 @@ export let schema = new Schema({
perfect: Number, perfect: Number,
habitBirthdays: Number, habitBirthdays: Number,
valentine: Number, valentine: Number,
costumeContest: Boolean, costumeContest: Boolean, // Superseded by costumeContests
nye: Number, nye: Number,
habiticaDays: Number, habiticaDays: Number,
greeting: Number, greeting: Number,
thankyou: Number, thankyou: Number,
costumeContests: Number
}, },
backer: { backer: {

View File

@@ -1,31 +1,48 @@
h2 11/11/2015 - NOVEMBER PET QUEST, SHARE SUCCESS, AND HABITICA T-SHIRTS h2 11/16/2015 - HABITICA STICKERS AND COSTUME CONTEST BADGES!
hr hr
tr tr
td td
.Pet-Snake-Base.pull-right .achievement-costumeContest2x.pull-right
h3 November Pet Quest h3 Costume Contest Badges
p There's a new pet quest in the <a href='/#/options/inventory/quests'>Quest Shop</a>! A slithering foe awaits you among the shimmering sand dunes. Can you defeat the Serpent of Distraction? If so, you'll get some slithering snake pets. p We've awarded all the costume contest badges! Over the coming months, we'll be posting the costumes <a href='http://blog.habitrpg.com/tagged/cosplay' target='_blank'>on our blog</a>, so be sure to follow along.
p.small.muted Art by EmeraldOx, Painter Prophet, and Lord Darkly
p.small.muted Writing by Daniel the Bard and felipena
tr
td
.achievement-triadbingo2x.pull-right
h3 Share Success
p Now you can share your success on social media when you hatch a pet, complete a quest, or more! (As always, your task details remain private.) Show off your victories to your friends and bask in some well-deserved praise.
p.small.muted by SabreCat and Lemoness
tr
td
.promo_habitica.pull-right(style='border-radius:25px;margin-left:1em')
h3 Habitica T-Shirts
p Exciting news - for the next three weeks, we are offering <a href='https://teespring.com/stores/habitica' target='_blank'>Habitica T-shirts via Teespring</a>! Show your Habitica pride in purple or black. We are also offering an <a href='https://teespring.com/habitica-gryphon-t-shirt_eu' target='_blank'>EU run for cheaper shipping to Europe</a>!
br br
p Whether you're getting them for yourself or as a holiday gift, we hope you enjoy these limited-run T-shirts! As always, thanks for supporting Habitica. p Important: if you submitted a photo but did NOT receive your badge, it probably means that we were unable to view your entry due to privacy restrictions or other issues. Email your photo to <a href='mailto:leslie@habitica.com' target='_blank'>leslie@habitica.com</a> and she will make sure that you get your badge!
br
p Thanks again to all the participants. We were very impressed by your creativity!
tr
td
.promo_habitica_sticker.pull-right
h3 Habitica Stickers
p In addition to our <a href='https://teespring.com/stores/habitica' target='_blank'>Habitica T-shirts</a>, we are now also selling <a href='https://www.stickermule.com/uk/marketplace/9317-habitica-gryphon-sticker' target='_blank'>Habitica Stickers</a>! Display Melior anywhere for extra motivation.
p.small.muted by Redphoenix and Sara Olson
if menuItem !== 'oldNews' if menuItem !== 'oldNews'
hr hr
a(href='/static/old-news', target='_blank') Read older news a(href='/static/old-news', target='_blank') Read older news
mixin oldNews mixin oldNews
h2 11/11/2015 - NOVEMBER PET QUEST, SHARE SUCCESS, AND HABITICA T-SHIRTS
tr
td
.Pet-Snake-Base.pull-right
h3 November Pet Quest
p There's a new pet quest in the <a href='/#/options/inventory/quests'>Quest Shop</a>! A slithering foe awaits you among the shimmering sand dunes. Can you defeat the Serpent of Distraction? If so, you'll get some slithering snake pets.
p.small.muted Art by EmeraldOx, Painter Prophet, and Lord Darkly
p.small.muted Writing by Daniel the Bard and felipena
tr
td
.achievement-triadbingo2x.pull-right
h3 Share Success
p Now you can share your success on social media when you hatch a pet, complete a quest, or more! (As always, your task details remain private.) Show off your victories to your friends and bask in some well-deserved praise.
p.small.muted by SabreCat and Lemoness
tr
td
.promo_habitica.pull-right(style='border-radius:25px;margin-left:1em')
h3 Habitica T-Shirts
p Exciting news - for the next three weeks, we are offering <a href='https://teespring.com/stores/habitica' target='_blank'>Habitica T-shirts via Teespring</a>! Show your Habitica pride in purple or black. We are also offering an <a href='https://teespring.com/habitica-gryphon-t-shirt_eu' target='_blank'>EU run for cheaper shipping to Europe</a>!
br
p Whether you're getting them for yourself or as a holiday gift, we hope you enjoy these limited-run T-shirts! As always, thanks for supporting Habitica.
h2 11/5/2015 - HUGE IOS UPDATE AND ANDROID MAILING LIST h2 11/5/2015 - HUGE IOS UPDATE AND ANDROID MAILING LIST
tr tr
td td

View File

@@ -229,11 +229,13 @@ div(ng-if='::profile.achievements.quests.burnout')
=env.t('achievementBurnoutText') =env.t('achievementBurnoutText')
hr hr
div(ng-if='::profile.achievements.costumeContest') div(ng-if='::profile.achievements.costumeContests')
.achievement.achievement-costumeContest .achievement.achievement-costumeContest
h5=env.t('costumeContest') h5=env.t('costumeContest')
small small(ng-if='::profile.achievements.costumeContests === 1')
=env.t('costumeContestText') !=env.t('costumeContestText')
small(ng-if='::profile.achievements.costumeContests > 1')
!=env.t('costumeContestTextPlural', {number: "{{::profile.achievements.costumeContests}}"})
hr hr
each card in ['greeting', 'thankyou', 'nye', 'valentine'] each card in ['greeting', 'thankyou', 'nye', 'valentine']