mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
Merge branch 'develop' into api-v3
This commit is contained in:
126
common/dist/sprites/spritesmith-largeSprites-0.css
vendored
126
common/dist/sprites/spritesmith-largeSprites-0.css
vendored
@@ -1,342 +1,348 @@
|
||||
.2014_Fall_HealerPROMO2 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -637px -955px;
|
||||
background-position: -731px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.2014_Fall_Mage_PROMO9 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -452px -347px;
|
||||
background-position: -306px -417px;
|
||||
width: 120px;
|
||||
height: 90px;
|
||||
}
|
||||
.2014_Fall_RoguePROMO3 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -573px -347px;
|
||||
background-position: -808px -621px;
|
||||
width: 105px;
|
||||
height: 90px;
|
||||
}
|
||||
.2014_Fall_Warrior_PROMO {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -590px -461px;
|
||||
background-position: -1095px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_backtoschool {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -342px;
|
||||
background-position: -943px -522px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.promo_burnout {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -220px;
|
||||
background-position: -452px 0px;
|
||||
width: 219px;
|
||||
height: 240px;
|
||||
}
|
||||
.promo_classes_fall_2014 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -326px -760px;
|
||||
background-position: -326px -724px;
|
||||
width: 321px;
|
||||
height: 100px;
|
||||
}
|
||||
.promo_classes_fall_2015 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -660px;
|
||||
background-position: -430px -621px;
|
||||
width: 377px;
|
||||
height: 99px;
|
||||
}
|
||||
.promo_dilatoryDistress {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -955px;
|
||||
background-position: -367px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_enchanted_armoire {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -378px -660px;
|
||||
background-position: -499px -525px;
|
||||
width: 374px;
|
||||
height: 76px;
|
||||
}
|
||||
.promo_enchanted_armoire_201507 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -641px;
|
||||
background-position: -943px -673px;
|
||||
width: 217px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_enchanted_armoire_201508 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -723px -342px;
|
||||
background-position: -648px -724px;
|
||||
width: 180px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_enchanted_armoire_201509 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -273px -955px;
|
||||
background-position: -458px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_enchanted_armoire_201511 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1111px -493px;
|
||||
background-position: -306px -326px;
|
||||
width: 122px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_habitica {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -723px -166px;
|
||||
background-position: -452px -241px;
|
||||
width: 175px;
|
||||
height: 175px;
|
||||
}
|
||||
.promo_habitica_sticker {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -220px;
|
||||
width: 305px;
|
||||
height: 304px;
|
||||
}
|
||||
.promo_haunted_hair {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1127px -194px;
|
||||
background-position: -1094px -522px;
|
||||
width: 100px;
|
||||
height: 137px;
|
||||
}
|
||||
.customize-option.promo_haunted_hair {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1152px -209px;
|
||||
background-position: -1119px -537px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_item_notif {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -91px;
|
||||
background-position: -943px -271px;
|
||||
width: 249px;
|
||||
height: 102px;
|
||||
}
|
||||
.promo_mystery_201405 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -546px -955px;
|
||||
background-position: -1004px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201406 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -311px -220px;
|
||||
background-position: -91px -995px;
|
||||
width: 90px;
|
||||
height: 96px;
|
||||
}
|
||||
.promo_mystery_201407 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -876px -433px;
|
||||
background-position: -628px -241px;
|
||||
width: 42px;
|
||||
height: 62px;
|
||||
}
|
||||
.promo_mystery_201408 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1188px -641px;
|
||||
background-position: -1161px -764px;
|
||||
width: 60px;
|
||||
height: 71px;
|
||||
}
|
||||
.promo_mystery_201409 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -182px -955px;
|
||||
background-position: -640px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201410 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1169px -823px;
|
||||
background-position: -1161px -673px;
|
||||
width: 72px;
|
||||
height: 63px;
|
||||
}
|
||||
.promo_mystery_201411 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -364px -955px;
|
||||
background-position: -822px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201412 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -904px -342px;
|
||||
background-position: -1195px -592px;
|
||||
width: 42px;
|
||||
height: 66px;
|
||||
}
|
||||
.promo_mystery_201501 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -899px -166px;
|
||||
background-position: -1193px -271px;
|
||||
width: 48px;
|
||||
height: 63px;
|
||||
}
|
||||
.promo_mystery_201502 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -499px -461px;
|
||||
background-position: -276px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201503 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -728px -955px;
|
||||
background-position: 0px -1101px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201504 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1188px -732px;
|
||||
background-position: -874px -525px;
|
||||
width: 60px;
|
||||
height: 69px;
|
||||
}
|
||||
.promo_mystery_201505 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -91px -955px;
|
||||
background-position: -549px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201506 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -899px -230px;
|
||||
background-position: -1195px -522px;
|
||||
width: 42px;
|
||||
height: 69px;
|
||||
}
|
||||
.promo_mystery_201507 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -220px -220px;
|
||||
background-position: 0px -995px;
|
||||
width: 90px;
|
||||
height: 105px;
|
||||
}
|
||||
.promo_mystery_201508 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -314px -326px;
|
||||
background-position: -829px -724px;
|
||||
width: 93px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201509 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -455px -955px;
|
||||
background-position: -913px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201510 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -220px -326px;
|
||||
background-position: -182px -995px;
|
||||
width: 93px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_3014 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -732px;
|
||||
background-position: -943px -764px;
|
||||
width: 217px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_orca {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1121px -342px;
|
||||
background-position: -306px -220px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.promo_partyhats {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1111px -584px;
|
||||
background-position: -943px -855px;
|
||||
width: 115px;
|
||||
height: 47px;
|
||||
}
|
||||
.promo_pastel_skin {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -331px -871px;
|
||||
background-position: 0px -835px;
|
||||
width: 330px;
|
||||
height: 83px;
|
||||
}
|
||||
.customize-option.promo_pastel_skin {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -356px -886px;
|
||||
background-position: -25px -850px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_pet_skins {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -493px;
|
||||
background-position: -1100px -374px;
|
||||
width: 140px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.promo_pet_skins {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -995px -508px;
|
||||
background-position: -1125px -389px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_shimmer_hair {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -871px;
|
||||
background-position: -331px -835px;
|
||||
width: 330px;
|
||||
height: 83px;
|
||||
}
|
||||
.customize-option.promo_shimmer_hair {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -25px -886px;
|
||||
background-position: -356px -850px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_splashyskins {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -823px;
|
||||
background-position: -452px -417px;
|
||||
width: 198px;
|
||||
height: 91px;
|
||||
}
|
||||
.customize-option.promo_splashyskins {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -995px -838px;
|
||||
background-position: -477px -432px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_springclasses2014 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px 0px;
|
||||
background-position: -943px -180px;
|
||||
width: 288px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_springclasses2015 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -430px -557px;
|
||||
background-position: -943px -89px;
|
||||
width: 288px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_summer_classes_2014 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -557px;
|
||||
background-position: 0px -621px;
|
||||
width: 429px;
|
||||
height: 102px;
|
||||
}
|
||||
.promo_summer_classes_2015 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -648px -760px;
|
||||
background-position: -943px 0px;
|
||||
width: 300px;
|
||||
height: 88px;
|
||||
}
|
||||
.promo_updos {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -970px -194px;
|
||||
background-position: -943px -374px;
|
||||
width: 156px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_veteran_pets {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -723px -509px;
|
||||
background-position: 0px -919px;
|
||||
width: 146px;
|
||||
height: 75px;
|
||||
}
|
||||
.promo_winterclasses2015 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -760px;
|
||||
background-position: 0px -724px;
|
||||
width: 325px;
|
||||
height: 110px;
|
||||
}
|
||||
.promo_winteryhair {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -723px -433px;
|
||||
background-position: -662px -835px;
|
||||
width: 152px;
|
||||
height: 75px;
|
||||
}
|
||||
.customize-option.promo_winteryhair {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -748px -448px;
|
||||
background-position: -687px -850px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.avatar_variety {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -461px;
|
||||
background-position: 0px -525px;
|
||||
width: 498px;
|
||||
height: 95px;
|
||||
}
|
||||
@@ -348,19 +354,19 @@
|
||||
}
|
||||
.welcome_basic_avatars {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -452px -181px;
|
||||
background-position: -672px -347px;
|
||||
width: 246px;
|
||||
height: 165px;
|
||||
}
|
||||
.welcome_promo_party {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -452px 0px;
|
||||
background-position: -672px 0px;
|
||||
width: 270px;
|
||||
height: 180px;
|
||||
}
|
||||
.welcome_sample_tasks {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -723px 0px;
|
||||
background-position: -672px -181px;
|
||||
width: 246px;
|
||||
height: 165px;
|
||||
}
|
||||
|
||||
BIN
common/dist/sprites/spritesmith-largeSprites-0.png
vendored
BIN
common/dist/sprites/spritesmith-largeSprites-0.png
vendored
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 |
@@ -69,8 +69,9 @@
|
||||
"habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.",
|
||||
"achievementDilatory": "Savior of Dilatory",
|
||||
"achievementDilatoryText": "Helped defeat the Dread Drag'on of Dilatory during the 2014 Summer Splash Event!",
|
||||
"costumeContest": "2014 Costume Contest",
|
||||
"costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!",
|
||||
"costumeContest": "Costume Contestant",
|
||||
"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",
|
||||
"lastLoggedIn": "- Last logged in",
|
||||
"notPorted": "This feature is not yet ported from the original site.",
|
||||
|
||||
58
common/script/content/constants.js
Normal file
58
common/script/content/constants.js
Normal 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
@@ -1,133 +1,129 @@
|
||||
import {each, where} from 'lodash';
|
||||
import {flat as flattenedGear} from './gear/index';
|
||||
import { each } from 'lodash';
|
||||
|
||||
let mysterySets = {
|
||||
201402: {
|
||||
start: '2014-02-22',
|
||||
end: '2014-02-28',
|
||||
text: 'Winged Messenger Set'
|
||||
text: 'Winged Messenger Set',
|
||||
},
|
||||
201403: {
|
||||
start: '2014-03-24',
|
||||
end: '2014-04-02',
|
||||
text: 'Forest Walker Set'
|
||||
text: 'Forest Walker Set',
|
||||
},
|
||||
201404: {
|
||||
start: '2014-04-24',
|
||||
end: '2014-05-02',
|
||||
text: 'Twilight Butterfly Set'
|
||||
text: 'Twilight Butterfly Set',
|
||||
},
|
||||
201405: {
|
||||
start: '2014-05-21',
|
||||
end: '2014-06-02',
|
||||
text: 'Flame Wielder Set'
|
||||
text: 'Flame Wielder Set',
|
||||
},
|
||||
201406: {
|
||||
start: '2014-06-23',
|
||||
end: '2014-07-02',
|
||||
text: 'Octomage Set'
|
||||
text: 'Octomage Set',
|
||||
},
|
||||
201407: {
|
||||
start: '2014-07-23',
|
||||
end: '2014-08-02',
|
||||
text: 'Undersea Explorer Set'
|
||||
text: 'Undersea Explorer Set',
|
||||
},
|
||||
201408: {
|
||||
start: '2014-08-23',
|
||||
end: '2014-09-02',
|
||||
text: 'Sun Sorcerer Set'
|
||||
text: 'Sun Sorcerer Set',
|
||||
},
|
||||
201409: {
|
||||
start: '2014-09-24',
|
||||
end: '2014-10-02',
|
||||
text: 'Autumn Strider Set'
|
||||
text: 'Autumn Strider Set',
|
||||
},
|
||||
201410: {
|
||||
start: '2014-10-24',
|
||||
end: '2014-11-02',
|
||||
text: 'Winged Goblin Set'
|
||||
text: 'Winged Goblin Set',
|
||||
},
|
||||
201411: {
|
||||
start: '2014-11-24',
|
||||
end: '2014-12-02',
|
||||
text: 'Feast and Fun Set'
|
||||
text: 'Feast and Fun Set',
|
||||
},
|
||||
201412: {
|
||||
start: '2014-12-25',
|
||||
end: '2015-01-02',
|
||||
text: 'Penguin Set'
|
||||
text: 'Penguin Set',
|
||||
},
|
||||
201501: {
|
||||
start: '2015-01-26',
|
||||
end: '2015-02-02',
|
||||
text: 'Starry Knight Set'
|
||||
text: 'Starry Knight Set',
|
||||
},
|
||||
201502: {
|
||||
start: '2015-02-24',
|
||||
end: '2015-03-02',
|
||||
text: 'Winged Enchanter Set'
|
||||
text: 'Winged Enchanter Set',
|
||||
},
|
||||
201503: {
|
||||
start: '2015-03-25',
|
||||
end: '2015-04-02',
|
||||
text: 'Aquamarine Set'
|
||||
text: 'Aquamarine Set',
|
||||
},
|
||||
201504: {
|
||||
start: '2015-04-24',
|
||||
end: '2015-05-02',
|
||||
text: 'Busy Bee Set'
|
||||
text: 'Busy Bee Set',
|
||||
},
|
||||
201505: {
|
||||
start: '2015-05-25',
|
||||
end: '2015-06-02',
|
||||
text: 'Green Knight Set'
|
||||
text: 'Green Knight Set',
|
||||
},
|
||||
201506: {
|
||||
start: '2015-06-25',
|
||||
end: '2015-07-02',
|
||||
text: 'Neon Snorkeler Set'
|
||||
text: 'Neon Snorkeler Set',
|
||||
},
|
||||
201507: {
|
||||
start: '2015-07-24',
|
||||
end: '2015-08-02',
|
||||
text: 'Rad Surfer Set'
|
||||
text: 'Rad Surfer Set',
|
||||
},
|
||||
201508: {
|
||||
start: '2015-08-23',
|
||||
end: '2015-09-02',
|
||||
text: 'Cheetah Costume Set'
|
||||
text: 'Cheetah Costume Set',
|
||||
},
|
||||
201509: {
|
||||
start:'2015-09-24',
|
||||
end:'2015-10-02',
|
||||
text:'Werewolf Set'
|
||||
start: '2015-09-24',
|
||||
end: '2015-10-02',
|
||||
text: 'Werewolf Set',
|
||||
},
|
||||
201510: {
|
||||
start:'2015-10-26',
|
||||
end:'2015-11-02',
|
||||
text:'Horned Goblin Set'
|
||||
start: '2015-10-26',
|
||||
end: '2015-11-02',
|
||||
text: 'Horned Goblin Set',
|
||||
},
|
||||
301404: {
|
||||
start: '3014-03-24',
|
||||
end: '3014-04-02',
|
||||
text: 'Steampunk Standard Set'
|
||||
text: 'Steampunk Standard Set',
|
||||
},
|
||||
301405: {
|
||||
start: '3014-04-24',
|
||||
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',
|
||||
end: '2014-04-01'
|
||||
}
|
||||
end: '2014-04-01',
|
||||
},
|
||||
};
|
||||
|
||||
each(mysterySets, (objectSet, name) => {
|
||||
objectSet.key = name;
|
||||
objectSet.items = where(flattenedGear, {
|
||||
mystery: name
|
||||
});
|
||||
each(mysterySets, (value, key) => {
|
||||
value.key = key;
|
||||
});
|
||||
|
||||
export default mysterySets;
|
||||
@@ -1,3 +0,0 @@
|
||||
let classes = ['warrior', 'rogue', 'healer', 'wizard'];
|
||||
|
||||
export default classes;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
|
||||
|
||||
|
||||
102
migrations/20151116_costume_contest_award.js
Normal file
102
migrations/20151116_costume_contest_award.js
Normal 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);
|
||||
}
|
||||
|
||||
64
migrations/20151116_costume_contest_to_number.js
Normal file
64
migrations/20151116_costume_contest_to_number.js
Normal 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);
|
||||
}
|
||||
|
||||
@@ -406,9 +406,12 @@ gulp.task('test', ['test:all'], () => {
|
||||
`\x1b[36mPending: ${totals[2]}\t`
|
||||
);
|
||||
|
||||
if (totals[1] > 0) throw "ERROR: There are failing tests!"
|
||||
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');
|
||||
process.exit();
|
||||
}
|
||||
|
||||
@@ -1,24 +1,30 @@
|
||||
import { each } from 'lodash';
|
||||
import {
|
||||
expectValidTranslationString,
|
||||
describeEachItem
|
||||
} from '../helpers/content.helper';
|
||||
|
||||
import {questions, stillNeedHelp} from '../../common/script/src/content/faq';
|
||||
import {questions, stillNeedHelp} from '../../common/script/content/faq';
|
||||
|
||||
describe('FAQ Locales', () => {
|
||||
describeEachItem('Questions', questions, (question, index) => {
|
||||
it('has a valid question', () => {
|
||||
describe('Questions', () => {
|
||||
it('has a valid questions', () => {
|
||||
each(questions, (question, key) => {
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Still Need Help Message', () => {
|
||||
it('has a valid ios message', () => {
|
||||
|
||||
@@ -66,11 +66,12 @@ export let schema = new Schema({
|
||||
perfect: Number,
|
||||
habitBirthdays: Number,
|
||||
valentine: Number,
|
||||
costumeContest: Boolean,
|
||||
costumeContest: Boolean, // Superseded by costumeContests
|
||||
nye: Number,
|
||||
habiticaDays: Number,
|
||||
greeting: Number,
|
||||
thankyou: Number,
|
||||
costumeContests: Number
|
||||
},
|
||||
|
||||
backer: {
|
||||
|
||||
@@ -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
|
||||
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
|
||||
td
|
||||
.Pet-Snake-Base.pull-right
|
||||
@@ -21,11 +43,6 @@ h2 11/11/2015 - NOVEMBER PET QUEST, SHARE SUCCESS, AND HABITICA T-SHIRTS
|
||||
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.
|
||||
|
||||
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
|
||||
tr
|
||||
td
|
||||
|
||||
@@ -229,11 +229,13 @@ div(ng-if='::profile.achievements.quests.burnout')
|
||||
=env.t('achievementBurnoutText')
|
||||
hr
|
||||
|
||||
div(ng-if='::profile.achievements.costumeContest')
|
||||
div(ng-if='::profile.achievements.costumeContests')
|
||||
.achievement.achievement-costumeContest
|
||||
h5=env.t('costumeContest')
|
||||
small
|
||||
=env.t('costumeContestText')
|
||||
small(ng-if='::profile.achievements.costumeContests === 1')
|
||||
!=env.t('costumeContestText')
|
||||
small(ng-if='::profile.achievements.costumeContests > 1')
|
||||
!=env.t('costumeContestTextPlural', {number: "{{::profile.achievements.costumeContests}}"})
|
||||
hr
|
||||
|
||||
each card in ['greeting', 'thankyou', 'nye', 'valentine']
|
||||
|
||||
Reference in New Issue
Block a user