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!"
else {
kill(server); 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,24 +1,30 @@
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', () => {
each(questions, (question, key) => {
expectValidTranslationString(question.question); expectValidTranslationString(question.question);
}); });
it('has a valid ios answer', () => {
expectValidTranslationString(question.ios);
}); });
it('has a valid web answer', () => { it('has a valid ios answers', () => {
each(questions, (question, key) => {
expectValidTranslationString(question.ios);
});
});
it('has a valid web answers', () => {
each(questions, (question, key) => {
expectValidTranslationString(question.web); expectValidTranslationString(question.web);
}); });
}); });
});
describe('Still Need Help Message', () => { describe('Still Need Help Message', () => {
it('has a valid ios message', () => { it('has a valid ios message', () => {

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,5 +1,27 @@
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
td
.achievement-costumeContest2x.pull-right
h3 Costume Contest Badges
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.
br
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'
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h2 11/11/2015 - NOVEMBER PET QUEST, SHARE SUCCESS, AND HABITICA T-SHIRTS
tr tr
td td
.Pet-Snake-Base.pull-right .Pet-Snake-Base.pull-right
@@ -21,11 +43,6 @@ h2 11/11/2015 - NOVEMBER PET QUEST, SHARE SUCCESS, AND HABITICA T-SHIRTS
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 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.
if menuItem !== 'oldNews'
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
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']