feat(event): Winter Wonderland 2016-2017 (#8290)

This commit is contained in:
Sabe Jones 2016-12-16 17:49:22 -08:00 committed by GitHub
parent 07bbba6789
commit 30f3d786bb
61 changed files with 337 additions and 39 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

View file

@ -1,9 +1,9 @@
/* Comment out for holiday events */
.npc_ian {
/* .npc_ian {
background: url("/npc_ian.gif") no-repeat;
width: 78px;
height: 135px;
}
} */
.quest_burnout {
background: url("/quest_burnout.gif") no-repeat;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -43,6 +43,10 @@
"icicleDrakeSet": "Icicle Drake (Rogue)",
"soothingSkaterSet": "Soothing Skater (Healer)",
"gingerbreadSet": "Gingerbread Warrior (Warrior)",
"snowDaySet": "Snow Day Warrior (Warrior)",
"snowboardingSet": "Snowboarding Sorcerer (Mage)",
"festiveFairySet": "Festive Fairy (Healer)",
"cocoaSet": "Cocoa Rogue (Rogue)",
"toAndFromCard": "To: <%= toName %>, From: <%= fromName %>",
"nyeCard": "New Year's Card",
"nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!",

View file

@ -26,6 +26,7 @@ export const EVENTS = {
spring2016: { start: '2016-03-18', end: '2016-05-02' },
summer2016: { start: '2016-06-21', end: '2016-08-02' },
fall2016: { start: '2016-09-20', end: '2016-11-02' },
winter2017: { start: '2016-12-16', end: '2017-02-02' },
};
export const GEAR_TYPES = [

View file

@ -49,6 +49,9 @@ let armor = {
notes: t('armorSpecialYetiNotes', { con: 9 }),
con: 9,
value: 90,
canBuy: () => {
return true;
},
},
ski: {
event: EVENTS.winter,
@ -57,6 +60,9 @@ let armor = {
notes: t('armorSpecialSkiNotes', { per: 15 }),
per: 15,
value: 90,
canBuy: () => {
return true;
},
},
candycane: {
event: EVENTS.winter,
@ -65,6 +71,9 @@ let armor = {
notes: t('armorSpecialCandycaneNotes', { int: 9 }),
int: 9,
value: 90,
canBuy: () => {
return true;
},
},
snowflake: {
event: EVENTS.winter,
@ -73,6 +82,9 @@ let armor = {
notes: t('armorSpecialSnowflakeNotes', { con: 15 }),
con: 15,
value: 90,
canBuy: () => {
return true;
},
},
birthday: {
event: EVENTS.birthday,
@ -182,6 +194,9 @@ let armor = {
notes: t('armorSpecialWinter2015RogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => {
return true;
},
},
winter2015Warrior: {
event: EVENTS.winter2015,
@ -190,6 +205,9 @@ let armor = {
notes: t('armorSpecialWinter2015WarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => {
return true;
},
},
winter2015Mage: {
event: EVENTS.winter2015,
@ -198,6 +216,9 @@ let armor = {
notes: t('armorSpecialWinter2015MageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
winter2015Healer: {
event: EVENTS.winter2015,
@ -206,6 +227,9 @@ let armor = {
notes: t('armorSpecialWinter2015HealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => {
return true;
},
},
birthday2015: {
text: t('armorSpecialBirthday2015Text'),
@ -322,6 +346,9 @@ let armor = {
notes: t('armorSpecialWinter2016RogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => {
return true;
},
},
winter2016Warrior: {
event: EVENTS.winter2016,
@ -330,6 +357,9 @@ let armor = {
notes: t('armorSpecialWinter2016WarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => {
return true;
},
},
winter2016Mage: {
event: EVENTS.winter2016,
@ -338,6 +368,9 @@ let armor = {
notes: t('armorSpecialWinter2016MageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
winter2016Healer: {
event: EVENTS.winter2016,
@ -346,6 +379,9 @@ let armor = {
notes: t('armorSpecialWinter2016HealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => {
return true;
},
},
birthday2016: {
text: t('armorSpecialBirthday2016Text'),
@ -449,6 +485,38 @@ let armor = {
value: 90,
con: 15,
},
winter2017Rogue: {
event: EVENTS.winter2017,
specialClass: 'rogue',
text: t('armorSpecialWinter2017RogueText'),
notes: t('armorSpecialWinter2017RogueNotes', { per: 15 }),
value: 90,
per: 15,
},
winter2017Warrior: {
event: EVENTS.winter2017,
specialClass: 'warrior',
text: t('armorSpecialWinter2017WarriorText'),
notes: t('armorSpecialWinter2017WarriorNotes', { con: 9 }),
value: 90,
con: 9,
},
winter2017Mage: {
event: EVENTS.winter2017,
specialClass: 'wizard',
text: t('armorSpecialWinter2017MageText'),
notes: t('armorSpecialWinter2017MageNotes', { int: 9 }),
value: 90,
int: 9,
},
winter2017Healer: {
event: EVENTS.winter2017,
specialClass: 'healer',
text: t('armorSpecialWinter2017HealerText'),
notes: t('armorSpecialWinter2017HealerNotes', { con: 15 }),
value: 90,
con: 15,
},
};
let back = {
@ -621,6 +689,9 @@ let head = {
notes: t('headSpecialYetiNotes', { str: 9 }),
str: 9,
value: 60,
canBuy: () => {
return true;
},
},
ski: {
event: EVENTS.winter,
@ -629,6 +700,9 @@ let head = {
notes: t('headSpecialSkiNotes', { per: 9 }),
per: 9,
value: 60,
canBuy: () => {
return true;
},
},
candycane: {
event: EVENTS.winter,
@ -637,6 +711,9 @@ let head = {
notes: t('headSpecialCandycaneNotes', { per: 7 }),
per: 7,
value: 60,
canBuy: () => {
return true;
},
},
snowflake: {
event: EVENTS.winter,
@ -645,6 +722,9 @@ let head = {
notes: t('headSpecialSnowflakeNotes', { int: 7 }),
int: 7,
value: 60,
canBuy: () => {
return true;
},
},
springRogue: {
event: EVENTS.spring,
@ -749,6 +829,9 @@ let head = {
notes: t('headSpecialWinter2015RogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => {
return true;
},
},
winter2015Warrior: {
event: EVENTS.winter2015,
@ -757,6 +840,9 @@ let head = {
notes: t('headSpecialWinter2015WarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => {
return true;
},
},
winter2015Mage: {
event: EVENTS.winter2015,
@ -765,6 +851,9 @@ let head = {
notes: t('headSpecialWinter2015MageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => {
return true;
},
},
winter2015Healer: {
event: EVENTS.winter2015,
@ -773,6 +862,9 @@ let head = {
notes: t('headSpecialWinter2015HealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => {
return true;
},
},
nye2014: {
text: t('headSpecialNye2014Text'),
@ -889,6 +981,9 @@ let head = {
notes: t('headSpecialWinter2016RogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => {
return true;
},
},
winter2016Warrior: {
event: EVENTS.winter2016,
@ -897,6 +992,9 @@ let head = {
notes: t('headSpecialWinter2016WarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => {
return true;
},
},
winter2016Mage: {
event: EVENTS.winter2016,
@ -905,6 +1003,9 @@ let head = {
notes: t('headSpecialWinter2016MageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => {
return true;
},
},
winter2016Healer: {
event: EVENTS.winter2016,
@ -913,6 +1014,9 @@ let head = {
notes: t('headSpecialWinter2016HealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => {
return true;
},
},
nye2015: {
text: t('headSpecialNye2015Text'),
@ -1016,6 +1120,38 @@ let head = {
value: 60,
int: 7,
},
winter2017Rogue: {
event: EVENTS.winter2017,
specialClass: 'rogue',
text: t('headSpecialWinter2017RogueText'),
notes: t('headSpecialWinter2017RogueNotes', { per: 9 }),
value: 60,
per: 9,
},
winter2017Warrior: {
event: EVENTS.winter2017,
specialClass: 'warrior',
text: t('headSpecialWinter2017WarriorText'),
notes: t('headSpecialWinter2017WarriorNotes', { str: 9 }),
value: 60,
str: 9,
},
winter2017Mage: {
event: EVENTS.winter2017,
specialClass: 'wizard',
text: t('headSpecialWinter2017MageText'),
notes: t('headSpecialWinter2017MageNotes', { per: 7 }),
value: 60,
per: 7,
},
winter2017Healer: {
event: EVENTS.winter2017,
specialClass: 'healer',
text: t('headSpecialWinter2017HealerText'),
notes: t('headSpecialWinter2017HealerNotes', { int: 7 }),
value: 60,
int: 7,
},
};
let headAccessory = {
@ -1211,6 +1347,9 @@ let shield = {
notes: t('shieldSpecialYetiNotes', { con: 7 }),
con: 7,
value: 70,
canBuy: () => {
return true;
},
},
ski: {
event: EVENTS.winter,
@ -1219,6 +1358,9 @@ let shield = {
notes: t('weaponSpecialSkiNotes', { str: 8 }),
str: 8,
value: 90,
canBuy: () => {
return true;
},
},
snowflake: {
event: EVENTS.winter,
@ -1227,6 +1369,9 @@ let shield = {
notes: t('shieldSpecialSnowflakeNotes', { con: 9 }),
con: 9,
value: 70,
canBuy: () => {
return true;
},
},
springRogue: {
event: EVENTS.spring,
@ -1307,6 +1452,9 @@ let shield = {
notes: t('shieldSpecialWinter2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
winter2015Warrior: {
event: EVENTS.winter2015,
@ -1315,6 +1463,9 @@ let shield = {
notes: t('shieldSpecialWinter2015WarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => {
return true;
},
},
winter2015Healer: {
event: EVENTS.winter2015,
@ -1323,6 +1474,9 @@ let shield = {
notes: t('shieldSpecialWinter2015HealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => {
return true;
},
},
spring2015Rogue: {
event: EVENTS.spring2015,
@ -1403,6 +1557,9 @@ let shield = {
notes: t('shieldSpecialWinter2016RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
winter2016Warrior: {
event: EVENTS.winter2016,
@ -1411,6 +1568,9 @@ let shield = {
notes: t('shieldSpecialWinter2016WarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => {
return true;
},
},
winter2016Healer: {
event: EVENTS.winter2016,
@ -1419,6 +1579,9 @@ let shield = {
notes: t('shieldSpecialWinter2016HealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => {
return true;
},
},
spring2016Rogue: {
event: EVENTS.spring2016,
@ -1492,6 +1655,30 @@ let shield = {
value: 70,
con: 9,
},
winter2017Rogue: {
event: EVENTS.winter2017,
specialClass: 'rogue',
text: t('shieldSpecialWinter2017RogueText'),
notes: t('shieldSpecialWinter2017RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
winter2017Warrior: {
event: EVENTS.winter2017,
specialClass: 'warrior',
text: t('shieldSpecialWinter2017WarriorText'),
notes: t('shieldSpecialWinter2017WarriorNotes', { con: 7 }),
value: 70,
con: 7,
},
winter2017Healer: {
event: EVENTS.winter2017,
specialClass: 'healer',
text: t('shieldSpecialWinter2017HealerText'),
notes: t('shieldSpecialWinter2017HealerNotes', { con: 9 }),
value: 70,
con: 9,
},
};
let weapon = {
@ -1542,6 +1729,9 @@ let weapon = {
notes: t('weaponSpecialYetiNotes', { str: 15 }),
str: 15,
value: 90,
canBuy: () => {
return true;
},
},
ski: {
event: EVENTS.winter,
@ -1550,6 +1740,9 @@ let weapon = {
notes: t('weaponSpecialSkiNotes', { str: 8 }),
str: 8,
value: 90,
canBuy: () => {
return true;
},
},
candycane: {
event: EVENTS.winter,
@ -1560,6 +1753,9 @@ let weapon = {
int: 15,
per: 7,
value: 160,
canBuy: () => {
return true;
},
},
snowflake: {
event: EVENTS.winter,
@ -1568,6 +1764,9 @@ let weapon = {
notes: t('weaponSpecialSnowflakeNotes', { int: 9 }),
int: 9,
value: 90,
canBuy: () => {
return true;
},
},
springRogue: {
event: EVENTS.spring,
@ -1678,6 +1877,9 @@ let weapon = {
notes: t('weaponSpecialWinter2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
winter2015Warrior: {
event: EVENTS.winter2015,
@ -1686,6 +1888,9 @@ let weapon = {
notes: t('weaponSpecialWinter2015WarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => {
return true;
},
},
winter2015Mage: {
event: EVENTS.winter2015,
@ -1696,6 +1901,9 @@ let weapon = {
value: 160,
int: 15,
per: 7,
canBuy: () => {
return true;
},
},
winter2015Healer: {
event: EVENTS.winter2015,
@ -1704,6 +1912,9 @@ let weapon = {
notes: t('weaponSpecialWinter2015HealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
spring2015Rogue: {
event: EVENTS.spring2015,
@ -1814,6 +2025,9 @@ let weapon = {
notes: t('weaponSpecialWinter2016RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => {
return true;
},
},
winter2016Warrior: {
event: EVENTS.winter2016,
@ -1822,6 +2036,9 @@ let weapon = {
notes: t('weaponSpecialWinter2016WarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => {
return true;
},
},
winter2016Mage: {
event: EVENTS.winter2016,
@ -1832,6 +2049,9 @@ let weapon = {
value: 160,
int: 15,
per: 7,
canBuy: () => {
return true;
},
},
winter2016Healer: {
event: EVENTS.winter2016,
@ -1840,6 +2060,9 @@ let weapon = {
notes: t('weaponSpecialWinter2016HealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => {
return true;
},
},
spring2016Rogue: {
event: EVENTS.spring2016,
@ -1943,6 +2166,40 @@ let weapon = {
value: 90,
int: 9,
},
winter2017Rogue: {
event: EVENTS.winter2017,
specialClass: 'rogue',
text: t('weaponSpecialWinter2017RogueText'),
notes: t('weaponSpecialWinter2017RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
winter2017Warrior: {
event: EVENTS.winter2017,
specialClass: 'warrior',
text: t('weaponSpecialWinter2017WarriorText'),
notes: t('weaponSpecialWinter2017WarriorNotes', { str: 15 }),
value: 90,
str: 15,
},
winter2017Mage: {
event: EVENTS.winter2017,
specialClass: 'wizard',
twoHanded: true,
text: t('weaponSpecialWinter2017MageText'),
notes: t('weaponSpecialWinter2017MageNotes', { int: 15, per: 7 }),
value: 170,
int: 15,
per: 7,
},
winter2017Healer: {
event: EVENTS.winter2017,
specialClass: 'healer',
text: t('weaponSpecialWinter2017HealerText'),
notes: t('weaponSpecialWinter2017HealerNotes', { int: 9 }),
value: 90,
int: 9,
},
};
let specialSet = {
@ -1957,3 +2214,4 @@ let specialSet = {
};
module.exports = specialSet;

View file

@ -218,6 +218,18 @@ shops.getTimeTravelersCategories = function getTimeTravelersCategories (user, la
// };
shops.getSeasonalShopCategories = function getSeasonalShopCategories (user, language) {
const AVAILABLE_SETS = {
yeti: i18n.t('yetiSet', language),
ski: i18n.t('skiSet', language),
candycane: i18n.t('candycaneSet', language),
snowflake: i18n.t('snowflakeSet', language),
winter2015Healer: i18n.t('soothingSkaterSet', language),
winter2015Mage: i18n.t('northMageSet', language),
winter2015Rogue: i18n.t('icicleDrakeSet', language),
winter2015Warrior: i18n.t('gingerbreadSet', language),
winter2016Healer: i18n.t('festiveFairySet', language),
winter2016Mage: i18n.t('snowboardingSet', language),
winter2016Rogue: i18n.t('cocoaSet', language),
winter2016Warrior: i18n.t('snowDaySet', language),
};
const AVAILABLE_SPELLS = [

View file

@ -107,8 +107,8 @@ api.getSeasonalShopItems = {
let resObject = {
identifier: 'seasonalShop',
text: res.t('seasonalShop'),
notes: res.t('seasonalShopClosedText'),
imageName: 'seasonalshop_closed',
notes: res.t('seasonalShopWinterText'),
imageName: 'seasonalshop_open',
categories: shops.getSeasonalShopCategories(user, req.language),
};

View file

@ -1,12 +1,12 @@
.container-fluid
.stable.row: .col-xs-12
div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_closed'}").pull-left-sm.col-centered
div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_open'}").pull-left-sm.col-centered
.popover.static-popover.fade.right.in.pull-left-sm.col-centered
.arrow.hidden-xs
h3.popover-title!=env.t('seasonalShopTitle', {linkStart:"<a href='http://blog.habitrpg.com/who' target='_blank'>", linkEnd: "</a>"})
.popover-content
p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText')
p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText')
p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopWinterText')
p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopWinterText')
li.customize-menu.inventory-gear
menu.pets-menu(label='{{category.text}}', ng-repeat='category in seasonalShopCategories')

View file

@ -9,57 +9,57 @@ script(type='text/ng-template', id='modals/chooseClass.html')
figure.herobox(ng-class='{"selected-class": selectedClass=="warrior"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_warrior_5')
span(class='{{user.preferences.size}}_armor_special_winter2017Warrior')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_warrior_5')
span(class='shield_warrior_5')
span(class='weapon_warrior_6')
span(class='head_special_winter2017Warrior')
span(class='shield_special_winter2017Warrior')
span(class='weapon_special_winter2017Warrior')
.col-md-3(ng-click='selectedClass = "wizard"')
h5!=env.t('mageWiki')
figure.herobox(ng-class='{"selected-class": selectedClass=="wizard"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_wizard_5')
span(class='{{user.preferences.size}}_armor_special_winter2017Mage')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_wizard_5')
span(class='shield_wizard_5')
span(class='weapon_wizard_6')
span(class='head_special_winter2017Mage')
span(class='shield_special_winter2017Mage')
span(class='weapon_special_winter2017Mage')
.col-md-3(ng-click='selectedClass = "rogue"')
h5!=env.t('rogueWiki')
figure.herobox(ng-class='{"selected-class": selectedClass=="rogue"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_rogue_5')
span(class='{{user.preferences.size}}_armor_special_winter2017Rogue')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_rogue_5')
span(class='shield_rogue_6')
span(class='weapon_rogue_6')
span(class='head_special_winter2017Rogue')
span(class='shield_special_winter2017Rogue')
span(class='weapon_special_winter2017Rogue')
.col-md-3(ng-click='selectedClass = "healer"')
h5!=env.t('healerWiki')
figure.herobox(ng-class='{"selected-class": selectedClass=="healer"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_healer_5')
span(class='{{user.preferences.size}}_armor_special_winter2017Healer')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_healer_5')
span(class='shield_healer_5')
span(class='weapon_healer_6')
span(class='head_special_winter2017Healer')
span(class='shield_special_winter2017Healer')
span(class='weapon_special_winter2017Healer')
br
.well(ng-show='selectedClass=="warrior"')=env.t('warriorText')
.well(ng-show='selectedClass=="wizard"')=env.t('mageText')

View file

@ -1,30 +1,53 @@
h2 12/15/2016 - MOBILE APP UPDATES AND HOLIDAY HATCHING POTIONS!
.promo_holly_potions.pull-right
h2 12/16/2016 - WINTER WONDERLAND BEGINS: WINTER CLASS OUTFITS, SEASONAL SHOP, AND NPC DECORATIONS!
hr
tr
td
h3 Mobile App Updates: Use Gems for Social Good
p We've released <a href='https://itunes.apple.com/us/app/habitica/id994882113?ls=1&mt=8' target='_blank'>a new iOS update</a> and <a href='https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica&hl=en' target='_blank'>a new Android update</a> with a super exciting feature.
br
p Weve partnered with Seeds, an organization that sends micro-loans to entrepreneurs in developing countries. Now when you buy the 84-gem pack, a portion of the proceeds will go directly to small business owners in developing countries to help improve their lives! You can learn more about how it works by tapping the gem icon in your app.
br
p We've also introduced bug fixes on iOS, and on Android we now also have sound effects and a To-Do widget!
br
p If you like the improvements that weve been making to our app, please consider reviewing this new version. It really helps us out! We hope you enjoy the updates.
p.small.muted by viirus, negue, AlbRoehm, d954mas, anitawoodruff, caipivara, and the Seeds team
h3 Winter Wonderland Begins!
.promo_winter_classes_2017.center-block
p A wintery breeze is blowing in from the Stoïkalm Steppes, and the snow is gently drifting down over Habit City. The Winter Wonderland event has begun!
tr
td
h3 Holly and Peppermint Hatching Potions
p Need something to spend those newly-purchased gems on? Between now and January 31st, you can buy Holly and Peppermint Hatching Potions from <a href='/#/options/inventory/drops'>the Market</a> and use them to hatch any standard pet egg. (Magic Hatching Potions do not work on Quest Pet eggs.)
br
p After they're gone, it will be at least a year before the Holly and Peppermint Hatching Potions are available again, so be sure to get them now!
p.small.muted by Vampitch, Lemoness, and SabreCat
h3 Winter Class Outfits
p From now until January 31st, limited edition outfits are available in the Rewards column. Depending on your class, you can be an Ice Hockey Warrior, Winter Wolf Mage, Frosty Rogue, or Sugar Plum Healer! You'd better get productive to earn enough gold before they disappear. Good luck!
p.small.muted by Stefalupagus, Beffymaroo, and yayannabelle
tr
td
.seasonalshop_open.pull-right
h3 Seasonal Shop is Open!
p The <a href='/#/options/inventory/seasonalshop'>Seasonal Shop</a> has opened! The Seasonal Sorceress is stocking the seasonal edition versions of previous winter outfits, now available for gems instead of gold, and the two winter quests, Trapper Santa and Find the Cub. Plus, there will be more fun things in the shop as the event progresses. The Seasonal Shop will only be open until January 31st, so don't wait!
p.small.muted by SabreCat and Lemoness
tr
td
.npc_daniel.pull-left.slight-right-margin
h3 NPC Costumes
p Looks like the NPCs are really getting in to the cheery winter mood around the site. Who wouldn't? After all, there's plenty more celebration to come....
p.small.muted by Lemoness
if menuItem !== 'oldNews'
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h2 12/15/2016 - MOBILE APP UPDATES AND HOLIDAY HATCHING POTIONS!
.promo_holly_potions.pull-right
tr
td
h3 Mobile App Updates: Use Gems for Social Good
p We've released <a href='https://itunes.apple.com/us/app/habitica/id994882113?ls=1&mt=8' target='_blank'>a new iOS update</a> and <a href='https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica&hl=en' target='_blank'>a new Android update</a> with a super exciting feature.
br
p Weve partnered with Seeds, an organization that sends micro-loans to entrepreneurs in developing countries. Now when you buy the 84-gem pack, a portion of the proceeds will go directly to small business owners in developing countries to help improve their lives! You can learn more about how it works by tapping the gem icon in your app.
br
p We've also introduced bug fixes on iOS, and on Android we now also have sound effects and a To-Do widget!
br
p If you like the improvements that weve been making to our app, please consider reviewing this new version. It really helps us out! We hope you enjoy the updates.
p.small.muted by viirus, negue, AlbRoehm, d954mas, anitawoodruff, caipivara, and the Seeds team
tr
td
h3 Holly and Peppermint Hatching Potions
p Need something to spend those newly-purchased gems on? Between now and January 31st, you can buy Holly and Peppermint Hatching Potions from <a href='/#/options/inventory/drops'>the Market</a> and use them to hatch any standard pet egg. (Magic Hatching Potions do not work on Quest Pet eggs.)
br
p After they're gone, it will be at least a year before the Holly and Peppermint Hatching Potions are available again, so be sure to get them now!
p.small.muted by Vampitch, Lemoness, and SabreCat
h2 12/12/2016 - LAST CHANCE FOR HABITICA T-SHIRTS AND MUGS; STAFF SPOTLIGHT
tr
td