feat(event): Habitica Thanksgiving
@@ -1,6 +1,6 @@
|
|||||||
.2014_Fall_HealerPROMO2 {
|
.2014_Fall_HealerPROMO2 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -731px -995px;
|
background-position: -822px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
}
|
}
|
||||||
.2014_Fall_Warrior_PROMO {
|
.2014_Fall_Warrior_PROMO {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -1095px -995px;
|
background-position: -276px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
}
|
}
|
||||||
.promo_dilatoryDistress {
|
.promo_dilatoryDistress {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -367px -995px;
|
background-position: -458px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
}
|
}
|
||||||
.promo_enchanted_armoire_201509 {
|
.promo_enchanted_armoire_201509 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -458px -995px;
|
background-position: -549px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
}
|
}
|
||||||
.promo_mystery_201405 {
|
.promo_mystery_201405 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -1004px -995px;
|
background-position: -1095px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
}
|
}
|
||||||
.promo_mystery_201409 {
|
.promo_mystery_201409 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -640px -995px;
|
background-position: -731px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@
|
|||||||
}
|
}
|
||||||
.promo_mystery_201411 {
|
.promo_mystery_201411 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -822px -995px;
|
background-position: -913px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -168,13 +168,13 @@
|
|||||||
}
|
}
|
||||||
.promo_mystery_201502 {
|
.promo_mystery_201502 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -276px -995px;
|
background-position: -367px -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: 0px -1101px;
|
background-position: -91px -1101px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
}
|
}
|
||||||
.promo_mystery_201505 {
|
.promo_mystery_201505 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -549px -995px;
|
background-position: -640px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
}
|
}
|
||||||
.promo_mystery_201509 {
|
.promo_mystery_201509 {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -913px -995px;
|
background-position: -1004px -995px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -220,6 +220,12 @@
|
|||||||
width: 93px;
|
width: 93px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
|
.promo_mystery_201511 {
|
||||||
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
|
background-position: 0px -1101px;
|
||||||
|
width: 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: -943px -764px;
|
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.",
|
"armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.",
|
||||||
"armorMystery201509Text": "Werewolf Costume",
|
"armorMystery201509Text": "Werewolf Costume",
|
||||||
"armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.",
|
"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",
|
"armorMystery301404Text": "Steampunk Suit",
|
||||||
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
|
"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.",
|
"headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.",
|
||||||
"headMystery201509Text": "Werewolf Mask",
|
"headMystery201509Text": "Werewolf Mask",
|
||||||
"headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.",
|
"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",
|
"headMystery301404Text": "Fancy Top Hat",
|
||||||
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
|
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
|
||||||
"headMystery301405Text": "Basic Top Hat",
|
"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.",
|
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.",
|
||||||
"polarBear": "Polar Bear",
|
"polarBear": "Polar Bear",
|
||||||
"turkey": "Turkey",
|
"turkey": "Turkey",
|
||||||
|
"gildedTurkey": "Gilded Turkey",
|
||||||
"polarBearPup": "Polar Bear Cub",
|
"polarBearPup": "Polar Bear Cub",
|
||||||
"jackolantern": "Jack-O-Lantern",
|
"jackolantern": "Jack-O-Lantern",
|
||||||
"seasonalShop": "Seasonal Shop",
|
"seasonalShop": "Seasonal Shop",
|
||||||
|
|||||||
@@ -91,6 +91,12 @@ let armor = {
|
|||||||
mystery: '201509',
|
mystery: '201509',
|
||||||
value: 0,
|
value: 0,
|
||||||
},
|
},
|
||||||
|
201511: {
|
||||||
|
text: t('armorMystery201511Text'),
|
||||||
|
notes: t('armorMystery201511Notes'),
|
||||||
|
mystery: '201511',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
301404: {
|
301404: {
|
||||||
text: t('armorMystery301404Text'),
|
text: t('armorMystery301404Text'),
|
||||||
notes: t('armorMystery301404Notes'),
|
notes: t('armorMystery301404Notes'),
|
||||||
@@ -238,6 +244,12 @@ let head = {
|
|||||||
mystery: '201509',
|
mystery: '201509',
|
||||||
value: 0,
|
value: 0,
|
||||||
},
|
},
|
||||||
|
201511: {
|
||||||
|
text: t('headMystery201511Text'),
|
||||||
|
notes: t('headMystery201511Notes'),
|
||||||
|
mystery: '201511',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
301404: {
|
301404: {
|
||||||
text: t('headMystery301404Text'),
|
text: t('headMystery301404Text'),
|
||||||
notes: t('headMystery301404Notes'),
|
notes: t('headMystery301404Notes'),
|
||||||
|
|||||||
@@ -952,7 +952,8 @@ api.specialPets = {
|
|||||||
'JackOLantern-Base': 'jackolantern',
|
'JackOLantern-Base': 'jackolantern',
|
||||||
'Mammoth-Base': 'mammoth',
|
'Mammoth-Base': 'mammoth',
|
||||||
'Tiger-Veteran': 'veteranTiger',
|
'Tiger-Veteran': 'veteranTiger',
|
||||||
'Phoenix-Base': 'phoenix'
|
'Phoenix-Base': 'phoenix',
|
||||||
|
'Turkey-Gilded': 'gildedTurkey',
|
||||||
};
|
};
|
||||||
|
|
||||||
api.specialMounts = {
|
api.specialMounts = {
|
||||||
|
|||||||
@@ -106,6 +106,11 @@ let mysterySets = {
|
|||||||
end: '2015-11-02',
|
end: '2015-11-02',
|
||||||
text: 'Horned Goblin Set',
|
text: 'Horned Goblin Set',
|
||||||
},
|
},
|
||||||
|
201511: {
|
||||||
|
start: '2015-11-25',
|
||||||
|
end: '2015-12-02',
|
||||||
|
text: 'Wood Warrior Set',
|
||||||
|
},
|
||||||
301404: {
|
301404: {
|
||||||
start: '3014-03-24',
|
start: '3014-03-24',
|
||||||
end: '3014-04-02',
|
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 = {
|
var update = {
|
||||||
$addToSet: {
|
$addToSet: {
|
||||||
'purchased.plan.mysteryItems':{
|
'purchased.plan.mysteryItems':{
|
||||||
$each:['headAccessory_mystery_201510','back_mystery_201510']
|
$each:['head_mystery_201511','armor_mystery_201511']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,30 @@
|
|||||||
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
|
hr
|
||||||
|
tr
|
||||||
|
td
|
||||||
|
.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
|
||||||
|
.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 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
|
tr
|
||||||
td
|
td
|
||||||
h3 Habitica Hiring News
|
h3 Habitica Hiring News
|
||||||
@@ -15,12 +40,6 @@ h2 11/19/2015 - SMALL iOS UPDATE AND HABITICA HIRING NEWS!
|
|||||||
br
|
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 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.small.muted by Viirus and Lemoness
|
||||||
|
|
||||||
if menuItem !== 'oldNews'
|
|
||||||
hr
|
|
||||||
a(href='/static/old-news', target='_blank') Read older news
|
|
||||||
|
|
||||||
mixin oldNews
|
|
||||||
h2 11/16/2015 - HABITICA STICKERS AND COSTUME CONTEST BADGES!
|
h2 11/16/2015 - HABITICA STICKERS AND COSTUME CONTEST BADGES!
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
|
|||||||