feat(event): Habitica Thanksgiving
@@ -1,6 +1,6 @@
|
||||
.2014_Fall_HealerPROMO2 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -731px -995px;
|
||||
background-position: -822px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -18,7 +18,7 @@
|
||||
}
|
||||
.2014_Fall_Warrior_PROMO {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1095px -995px;
|
||||
background-position: -276px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -48,7 +48,7 @@
|
||||
}
|
||||
.promo_dilatoryDistress {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -367px -995px;
|
||||
background-position: -458px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -72,7 +72,7 @@
|
||||
}
|
||||
.promo_enchanted_armoire_201509 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -458px -995px;
|
||||
background-position: -549px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -114,7 +114,7 @@
|
||||
}
|
||||
.promo_mystery_201405 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -1004px -995px;
|
||||
background-position: -1095px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -138,7 +138,7 @@
|
||||
}
|
||||
.promo_mystery_201409 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -640px -995px;
|
||||
background-position: -731px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -150,7 +150,7 @@
|
||||
}
|
||||
.promo_mystery_201411 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -822px -995px;
|
||||
background-position: -913px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -168,13 +168,13 @@
|
||||
}
|
||||
.promo_mystery_201502 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -276px -995px;
|
||||
background-position: -367px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201503 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -1101px;
|
||||
background-position: -91px -1101px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -186,7 +186,7 @@
|
||||
}
|
||||
.promo_mystery_201505 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -549px -995px;
|
||||
background-position: -640px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -210,7 +210,7 @@
|
||||
}
|
||||
.promo_mystery_201509 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -913px -995px;
|
||||
background-position: -1004px -995px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
@@ -220,6 +220,12 @@
|
||||
width: 93px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_201511 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: 0px -1101px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.promo_mystery_3014 {
|
||||
background-image: url(spritesmith-largeSprites-0.png);
|
||||
background-position: -943px -764px;
|
||||
|
||||
BIN
common/dist/sprites/spritesmith-largeSprites-0.png
vendored
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 194 KiB |
1742
common/dist/sprites/spritesmith-main-4.css
vendored
BIN
common/dist/sprites/spritesmith-main-4.png
vendored
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
794
common/dist/sprites/spritesmith-main-5.css
vendored
BIN
common/dist/sprites/spritesmith-main-5.png
vendored
|
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 387 KiB |
544
common/dist/sprites/spritesmith-main-6.css
vendored
BIN
common/dist/sprites/spritesmith-main-6.png
vendored
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 153 KiB |
472
common/dist/sprites/spritesmith-main-7.css
vendored
BIN
common/dist/sprites/spritesmith-main-7.png
vendored
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 143 KiB |
558
common/dist/sprites/spritesmith-main-8.css
vendored
BIN
common/dist/sprites/spritesmith-main-8.png
vendored
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 142 KiB |
2068
common/dist/sprites/spritesmith-main-9.css
vendored
BIN
common/dist/sprites/spritesmith-main-9.png
vendored
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.9 KiB |
@@ -342,6 +342,8 @@
|
||||
"armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.",
|
||||
"armorMystery201509Text": "Werewolf Costume",
|
||||
"armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.",
|
||||
"armorMystery201511Text": "Wooden Armor",
|
||||
"armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.",
|
||||
"armorMystery301404Text": "Steampunk Suit",
|
||||
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
|
||||
|
||||
@@ -521,6 +523,8 @@
|
||||
"headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.",
|
||||
"headMystery201509Text": "Werewolf Mask",
|
||||
"headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.",
|
||||
"headMystery201511Text": "Log Crown",
|
||||
"headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.",
|
||||
"headMystery301404Text": "Fancy Top Hat",
|
||||
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
|
||||
"headMystery301405Text": "Basic Top Hat",
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.",
|
||||
"polarBear": "Polar Bear",
|
||||
"turkey": "Turkey",
|
||||
"gildedTurkey": "Gilded Turkey",
|
||||
"polarBearPup": "Polar Bear Cub",
|
||||
"jackolantern": "Jack-O-Lantern",
|
||||
"seasonalShop": "Seasonal Shop",
|
||||
|
||||
@@ -91,6 +91,12 @@ let armor = {
|
||||
mystery: '201509',
|
||||
value: 0,
|
||||
},
|
||||
201511: {
|
||||
text: t('armorMystery201511Text'),
|
||||
notes: t('armorMystery201511Notes'),
|
||||
mystery: '201511',
|
||||
value: 0,
|
||||
},
|
||||
301404: {
|
||||
text: t('armorMystery301404Text'),
|
||||
notes: t('armorMystery301404Notes'),
|
||||
@@ -238,6 +244,12 @@ let head = {
|
||||
mystery: '201509',
|
||||
value: 0,
|
||||
},
|
||||
201511: {
|
||||
text: t('headMystery201511Text'),
|
||||
notes: t('headMystery201511Notes'),
|
||||
mystery: '201511',
|
||||
value: 0,
|
||||
},
|
||||
301404: {
|
||||
text: t('headMystery301404Text'),
|
||||
notes: t('headMystery301404Notes'),
|
||||
|
||||
@@ -952,7 +952,8 @@ api.specialPets = {
|
||||
'JackOLantern-Base': 'jackolantern',
|
||||
'Mammoth-Base': 'mammoth',
|
||||
'Tiger-Veteran': 'veteranTiger',
|
||||
'Phoenix-Base': 'phoenix'
|
||||
'Phoenix-Base': 'phoenix',
|
||||
'Turkey-Gilded': 'gildedTurkey',
|
||||
};
|
||||
|
||||
api.specialMounts = {
|
||||
|
||||
@@ -106,6 +106,11 @@ let mysterySets = {
|
||||
end: '2015-11-02',
|
||||
text: 'Horned Goblin Set',
|
||||
},
|
||||
201511: {
|
||||
start: '2015-11-25',
|
||||
end: '2015-12-02',
|
||||
text: 'Wood Warrior Set',
|
||||
},
|
||||
301404: {
|
||||
start: '3014-03-24',
|
||||
end: '3014-04-02',
|
||||
|
||||
71
migrations/20151125_turkey_ladder.js
Normal file
@@ -0,0 +1,71 @@
|
||||
var migrationName = '20151125_turkey_ladder.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 Gilded Turkey pet to Turkey mount owners, Turkey Mount if they only have Turkey Pet,
|
||||
* and Turkey Pet otherwise
|
||||
*/
|
||||
|
||||
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 = {
|
||||
};
|
||||
|
||||
// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
|
||||
var fields = {
|
||||
'items.pets.Turkey-Base': 1,
|
||||
'items.mounts.Turkey-Base': 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 = {};
|
||||
if (user.items.mounts['Turkey-Base']) {
|
||||
set = {'migration':migrationName, 'items.pets.Turkey-Gilded':5};
|
||||
} else if (user.items.pets['Turkey-Base']) {
|
||||
set = {'migration':migrationName, 'items.mounts.Turkey-Base':true};
|
||||
} else {
|
||||
set = {'migration':migrationName, 'items.pets.Turkey-Base':5};
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
@@ -2,7 +2,7 @@ var _id = '';
|
||||
var update = {
|
||||
$addToSet: {
|
||||
'purchased.plan.mysteryItems':{
|
||||
$each:['headAccessory_mystery_201510','back_mystery_201510']
|
||||
$each:['head_mystery_201511','armor_mystery_201511']
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,26 +1,45 @@
|
||||
h2 11/19/2015 - SMALL iOS UPDATE AND HABITICA HIRING NEWS!
|
||||
h2 11/25/2015 - HABITICA THANKSGIVING! NOVEMBER SUBSCRIBER ITEM AND TURKEY PETS AND MOUNTS
|
||||
hr
|
||||
tr
|
||||
td
|
||||
h3 Habitica Hiring News
|
||||
p Exciting news! Right now, Habitica is looking to add a senior full stack developer to our team, and what better place to look than our awesome community?
|
||||
br
|
||||
p If you’d like to apply, you should have experience as a lead developer, and be a JavaScript whiz who is familiar with MongoDB and Angular. Bonus points for familiarity with <a href='http://habitica.wikia.com/wiki/Guidance_for_Blacksmiths#Technology_Stack' target='_blank'>our tech stack</a>! Passion for open source is, naturally, a must ;)
|
||||
br
|
||||
p Send your resume to <a href='mailto:jobs@habitica.com'>jobs@habitica.com</a> with your GitHub handle, Habitica username, and list of favorite online hangouts! Please also let us know whether or not you would be able to move to Los Angeles. We’re looking forward to hearing from you!
|
||||
.npc_daniel.pull-right
|
||||
h3 Happy Thanksgiving!
|
||||
p It's Thanksgiving in Habitica! On this day Habiticans celebrate by spending time with loved ones, giving thanks, and riding their glorious turkeys into the magnificent sunset. Some of the NPCs are celebrating the occasion!
|
||||
tr
|
||||
td
|
||||
h3 Small iOS App Update
|
||||
p We've released a small <a href='https://itunes.apple.com/us/app/habitica/id994882113?ls=1&mt=8' target='_blank'>iOS update</a>, just to fix some bothersome bugs (including crashes), add a nice intro slide for new users, and make it more obvious how to invite your friends to your party.
|
||||
.Pet-Turkey-Gilded.pull-right
|
||||
h3 Turkey Pet and Mount!
|
||||
p Those of you who weren't around last Thanksgiving have received an adorable Turkey Pet, and those of you who got a Turkey Pet last year have received a handsome Turkey Mount! Already got a Turkey Mount? You, my friend, have been gifted the rare and glittering Gilded Turkey Pet!
|
||||
br
|
||||
p If you already reviewed the last version of the app, Apple has hidden it for this version, but you can automatically post the same review again by tapping “Write a review” and then just hitting "Send." Thank you very much for taking the time to share your thoughts with us! Posting and reposting reviews really helps us out.
|
||||
p.small.muted by Viirus and Lemoness
|
||||
p Thank you for using Habitica - we really love you guys <3
|
||||
tr
|
||||
td
|
||||
.promo_mystery_201511.pull-right
|
||||
h3 November Subscriber Items Revealed
|
||||
p The November Subscriber Item Set has been revealed: the Wood Warrior Set! All November subscribers will receive the Log Crown and the Wooden Armor. You still have five days to <a href='/#/options/settings/subscription'>subscribe</a> and receive the item set! Thank you so much for your support - we really do rely on you to keep Habitica free to use and running smoothly.
|
||||
p.small.muted by Lemoness
|
||||
|
||||
if menuItem !== 'oldNews'
|
||||
hr
|
||||
a(href='/static/old-news', target='_blank') Read older news
|
||||
|
||||
mixin oldNews
|
||||
h2 11/19/2015 - SMALL iOS UPDATE AND HABITICA HIRING NEWS!
|
||||
tr
|
||||
td
|
||||
h3 Habitica Hiring News
|
||||
p Exciting news! Right now, Habitica is looking to add a senior full stack developer to our team, and what better place to look than our awesome community?
|
||||
br
|
||||
p If you’d like to apply, you should have experience as a lead developer, and be a JavaScript whiz who is familiar with MongoDB and Angular. Bonus points for familiarity with <a href='http://habitica.wikia.com/wiki/Guidance_for_Blacksmiths#Technology_Stack' target='_blank'>our tech stack</a>! Passion for open source is, naturally, a must ;)
|
||||
br
|
||||
p Send your resume to <a href='mailto:jobs@habitica.com'>jobs@habitica.com</a> with your GitHub handle, Habitica username, and list of favorite online hangouts! Please also let us know whether or not you would be able to move to Los Angeles. We’re looking forward to hearing from you!
|
||||
tr
|
||||
td
|
||||
h3 Small iOS App Update
|
||||
p We've released a small <a href='https://itunes.apple.com/us/app/habitica/id994882113?ls=1&mt=8' target='_blank'>iOS update</a>, just to fix some bothersome bugs (including crashes), add a nice intro slide for new users, and make it more obvious how to invite your friends to your party.
|
||||
br
|
||||
p If you already reviewed the last version of the app, Apple has hidden it for this version, but you can automatically post the same review again by tapping “Write a review” and then just hitting "Send." Thank you very much for taking the time to share your thoughts with us! Posting and reposting reviews really helps us out.
|
||||
p.small.muted by Viirus and Lemoness
|
||||
h2 11/16/2015 - HABITICA STICKERS AND COSTUME CONTEST BADGES!
|
||||
tr
|
||||
td
|
||||
|
||||