feat(event): Pi Day
73
migrations/users/pi-day.js
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20190312_pi_day';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { model as User } from '../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const inc = {
|
||||
'items.food.Pie_Skeleton': 1,
|
||||
'items.food.Pie_Base': 1,
|
||||
'items.food.Pie_CottonCandyBlue': 1,
|
||||
'items.food.Pie_CottonCandyPink': 1,
|
||||
'items.food.Pie_Shade': 1,
|
||||
'items.food.Pie_White': 1,
|
||||
'items.food.Pie_Golden': 1,
|
||||
'items.food.Pie_Zombie': 1,
|
||||
'items.food.Pie_Desert': 1,
|
||||
'items.food.Pie_Red': 1,
|
||||
};
|
||||
const set = {};
|
||||
|
||||
set.migration = MIGRATION_NAME;
|
||||
|
||||
set['items.gear.owned.head_special_piDay'] = false;
|
||||
set['items.gear.owned.shield_special_piDay'] = false;
|
||||
const push = [
|
||||
{type: 'marketGear', path: 'gear.flat.head_special_piDay', _id: uuid()},
|
||||
{type: 'marketGear', path: 'gear.flat.shield_special_piDay', _id: uuid()},
|
||||
];
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({_id: user._id}, {$inc: inc, $set: set, $push: {pinnedItems: {$each: push}}}).exec();
|
||||
}
|
||||
|
||||
module.exports = async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2019-02-15')},
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
|
|
@ -377,6 +377,37 @@
|
|||
"foodCandyRedThe": "the Cinnamon Candy",
|
||||
"foodCandyRedA": "Cinnamon Candy",
|
||||
|
||||
"foodPieSkeleton": "Bone Marrow Pot Pie",
|
||||
"foodPieSkeletonThe": "the Bone Marrow Pot Pie",
|
||||
"foodPieSkeletonA": "a slice of Bone Marrow Pot Pie",
|
||||
"foodPieBase": "Basic Apple Pie",
|
||||
"foodPieBaseThe": "the Basic Apple Pie",
|
||||
"foodPieBaseA": "a slice of Basic Apple Pie",
|
||||
"foodPieCottonCandyBlue": "Blueberry Pie",
|
||||
"foodPieCottonCandyBlueThe": "the Blueberry Pie",
|
||||
"foodPieCottonCandyBlueA": "a slice of Blueberry Pie",
|
||||
"foodPieCottonCandyPink": "Pink Rhubarb Pie",
|
||||
"foodPieCottonCandyPinkThe": "the Pink Rhubarb Pie",
|
||||
"foodPieCottonCandyPinkA": "a slice of Pink Rhubarb Pie",
|
||||
"foodPieShade": "Dark Chocolate Pie",
|
||||
"foodPieShadeThe": "the Dark Chocolate Pie",
|
||||
"foodPieShadeA": "a slice of Dark Chocolate Pie",
|
||||
"foodPieWhite": "Vanilla Pudding Pie",
|
||||
"foodPieWhiteThe": "the Vanilla Pudding Pie",
|
||||
"foodPieWhiteA": "a slice of Vanilla Pudding Pie",
|
||||
"foodPieGolden": "Golden Banana Cream Pie",
|
||||
"foodPieGoldenThe": "the Golden Banana Cream Pie",
|
||||
"foodPieGoldenA": "a slice of Golden Banana Cream Pie",
|
||||
"foodPieZombie": "Rotten Pie",
|
||||
"foodPieZombieThe": "the Rotten Pie",
|
||||
"foodPieZombieA": "a Rotten slice of Pie",
|
||||
"foodPieDesert": "Desert Dessert Pie",
|
||||
"foodPieDesertThe": "the Desert Dessert Pie",
|
||||
"foodPieDesertA": "a slice of Desert Dessert Pie",
|
||||
"foodPieRed": "Red Cherry Pie",
|
||||
"foodPieRedThe": "the Red Cherry Pie",
|
||||
"foodPieRedA": "a slice of Red Cherry Pie",
|
||||
|
||||
"foodSaddleText": "Saddle",
|
||||
"foodSaddleNotes": "Instantly raises one of your pets into a mount.",
|
||||
"foodSaddleSellWarningNote": "Hey! This is a pretty useful item! Are you familiar with how to use a Saddle with your Pets?",
|
||||
|
|
|
|||
|
|
@ -975,6 +975,8 @@
|
|||
"headSpecialTurkeyHelmBaseNotes": "Your Turkey Day look will be complete when you don this beaked helm! Confers no benefit.",
|
||||
"headSpecialTurkeyHelmGildedText": "Gilded Turkey Helm",
|
||||
"headSpecialTurkeyHelmGildedNotes": "Gobble gobble! Bling bling! Confers no benefit.",
|
||||
"headSpecialPiDayText": "Pi Hat",
|
||||
"headSpecialPiDayNotes": "Try to balance this slice of delicious pie on your head while walking in a circle. Or throw it at a red Daily! Or you could just eat it. Your choice! Confers no benefit.",
|
||||
|
||||
"headSpecialNyeText": "Absurd Party Hat",
|
||||
"headSpecialNyeNotes": "You've received an Absurd Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
|
||||
|
|
@ -1424,6 +1426,8 @@
|
|||
"shieldSpecialWintryMirrorNotes": "How else to best admire your wintry look? Increases Intelligence by <%= int %>.",
|
||||
"shieldSpecialWakizashiText": "Wakizashi",
|
||||
"shieldSpecialWakizashiNotes": "This short sword is perfect for close-quarters battles with your Dailies! Increases Constitution by <%= con %>.",
|
||||
"shieldSpecialPiDayText": "Pi Shield",
|
||||
"shieldSpecialPiDayNotes": "We dare you to calculate the ratio of this shield's circumference to its deliciousness! Confers no benefit.",
|
||||
|
||||
"shieldSpecialYetiText": "Yeti-Tamer Shield",
|
||||
"shieldSpecialYetiNotes": "This shield reflects light from the snow. Increases Constitution by <%= con %>. Limited Edition 2013-2014 Winter Gear.",
|
||||
|
|
|
|||
|
|
@ -2506,6 +2506,12 @@ let head = {
|
|||
value: 0,
|
||||
canOwn: ownsItem('head_special_nye2018'),
|
||||
},
|
||||
piDay: {
|
||||
text: t('headSpecialPiDayText'),
|
||||
notes: t('headSpecialPiDayNotes'),
|
||||
value: 0,
|
||||
canOwn: ownsItem('head_special_piDay'),
|
||||
},
|
||||
};
|
||||
|
||||
let headAccessory = {
|
||||
|
|
@ -3597,6 +3603,12 @@ let shield = {
|
|||
value: 70,
|
||||
con: 9,
|
||||
},
|
||||
piDay: {
|
||||
text: t('shieldSpecialPiDayText'),
|
||||
notes: t('shieldSpecialPiDayNotes'),
|
||||
value: 0,
|
||||
canOwn: ownsItem('shield_special_piDay'),
|
||||
},
|
||||
};
|
||||
|
||||
let weapon = {
|
||||
|
|
|
|||
|
|
@ -370,13 +370,9 @@ api.premiumMounts = stable.premiumMounts;
|
|||
api.specialMounts = stable.specialMounts;
|
||||
api.mountInfo = stable.mountInfo;
|
||||
|
||||
// For seasonal events, change these booleans:
|
||||
let canBuyNormalFood = true;
|
||||
let canDropNormalFood = true;
|
||||
let canBuyCandyFood = false;
|
||||
let canDropCandyFood = false;
|
||||
let canBuyCakeFood = false;
|
||||
let canDropCakeFood = false;
|
||||
// For seasonal events, change this constant:
|
||||
|
||||
const FOOD_SEASON = 'Pie';
|
||||
|
||||
api.food = {
|
||||
Meat: {
|
||||
|
|
@ -385,9 +381,9 @@ api.food = {
|
|||
textThe: t('foodMeatThe'),
|
||||
target: 'Base',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Milk: {
|
||||
text: t('foodMilk'),
|
||||
|
|
@ -395,9 +391,9 @@ api.food = {
|
|||
textThe: t('foodMilkThe'),
|
||||
target: 'White',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Potatoe: {
|
||||
text: t('foodPotatoe'),
|
||||
|
|
@ -405,9 +401,9 @@ api.food = {
|
|||
textThe: t('foodPotatoeThe'),
|
||||
target: 'Desert',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Strawberry: {
|
||||
text: t('foodStrawberry'),
|
||||
|
|
@ -415,9 +411,9 @@ api.food = {
|
|||
textThe: t('foodStrawberryThe'),
|
||||
target: 'Red',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Chocolate: {
|
||||
text: t('foodChocolate'),
|
||||
|
|
@ -425,9 +421,9 @@ api.food = {
|
|||
textThe: t('foodChocolateThe'),
|
||||
target: 'Shade',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Fish: {
|
||||
text: t('foodFish'),
|
||||
|
|
@ -435,9 +431,9 @@ api.food = {
|
|||
textThe: t('foodFishThe'),
|
||||
target: 'Skeleton',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
RottenMeat: {
|
||||
text: t('foodRottenMeat'),
|
||||
|
|
@ -445,9 +441,9 @@ api.food = {
|
|||
textThe: t('foodRottenMeatThe'),
|
||||
target: 'Zombie',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
CottonCandyPink: {
|
||||
text: t('foodCottonCandyPink'),
|
||||
|
|
@ -455,9 +451,9 @@ api.food = {
|
|||
textThe: t('foodCottonCandyPinkThe'),
|
||||
target: 'CottonCandyPink',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
CottonCandyBlue: {
|
||||
text: t('foodCottonCandyBlue'),
|
||||
|
|
@ -465,9 +461,9 @@ api.food = {
|
|||
textThe: t('foodCottonCandyBlueThe'),
|
||||
target: 'CottonCandyBlue',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Honey: {
|
||||
text: t('foodHoney'),
|
||||
|
|
@ -475,9 +471,9 @@ api.food = {
|
|||
textThe: t('foodHoneyThe'),
|
||||
target: 'Golden',
|
||||
canBuy () {
|
||||
return canBuyNormalFood;
|
||||
return FOOD_SEASON === 'Normal';
|
||||
},
|
||||
canDrop: canDropNormalFood,
|
||||
canDrop: FOOD_SEASON === 'Normal',
|
||||
},
|
||||
Saddle: {
|
||||
canBuy () {
|
||||
|
|
@ -495,9 +491,9 @@ api.food = {
|
|||
textThe: t('foodCakeSkeletonThe'),
|
||||
target: 'Skeleton',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_Base: {
|
||||
text: t('foodCakeBase'),
|
||||
|
|
@ -505,9 +501,9 @@ api.food = {
|
|||
textThe: t('foodCakeBaseThe'),
|
||||
target: 'Base',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_CottonCandyBlue: {
|
||||
text: t('foodCakeCottonCandyBlue'),
|
||||
|
|
@ -515,9 +511,9 @@ api.food = {
|
|||
textThe: t('foodCakeCottonCandyBlueThe'),
|
||||
target: 'CottonCandyBlue',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_CottonCandyPink: {
|
||||
text: t('foodCakeCottonCandyPink'),
|
||||
|
|
@ -525,9 +521,9 @@ api.food = {
|
|||
textThe: t('foodCakeCottonCandyPinkThe'),
|
||||
target: 'CottonCandyPink',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_Shade: {
|
||||
text: t('foodCakeShade'),
|
||||
|
|
@ -535,9 +531,9 @@ api.food = {
|
|||
textThe: t('foodCakeShadeThe'),
|
||||
target: 'Shade',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_White: {
|
||||
text: t('foodCakeWhite'),
|
||||
|
|
@ -545,9 +541,9 @@ api.food = {
|
|||
textThe: t('foodCakeWhiteThe'),
|
||||
target: 'White',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_Golden: {
|
||||
text: t('foodCakeGolden'),
|
||||
|
|
@ -555,9 +551,9 @@ api.food = {
|
|||
textThe: t('foodCakeGoldenThe'),
|
||||
target: 'Golden',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_Zombie: {
|
||||
text: t('foodCakeZombie'),
|
||||
|
|
@ -565,9 +561,9 @@ api.food = {
|
|||
textThe: t('foodCakeZombieThe'),
|
||||
target: 'Zombie',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_Desert: {
|
||||
text: t('foodCakeDesert'),
|
||||
|
|
@ -575,9 +571,9 @@ api.food = {
|
|||
textThe: t('foodCakeDesertThe'),
|
||||
target: 'Desert',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Cake_Red: {
|
||||
text: t('foodCakeRed'),
|
||||
|
|
@ -585,9 +581,9 @@ api.food = {
|
|||
textThe: t('foodCakeRedThe'),
|
||||
target: 'Red',
|
||||
canBuy () {
|
||||
return canBuyCakeFood;
|
||||
return FOOD_SEASON === 'Cake';
|
||||
},
|
||||
canDrop: canDropCakeFood,
|
||||
canDrop: FOOD_SEASON === 'Cake',
|
||||
},
|
||||
Candy_Skeleton: {
|
||||
text: t('foodCandySkeleton'),
|
||||
|
|
@ -595,9 +591,9 @@ api.food = {
|
|||
textThe: t('foodCandySkeletonThe'),
|
||||
target: 'Skeleton',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_Base: {
|
||||
text: t('foodCandyBase'),
|
||||
|
|
@ -605,9 +601,9 @@ api.food = {
|
|||
textThe: t('foodCandyBaseThe'),
|
||||
target: 'Base',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_CottonCandyBlue: {
|
||||
text: t('foodCandyCottonCandyBlue'),
|
||||
|
|
@ -615,9 +611,9 @@ api.food = {
|
|||
textThe: t('foodCandyCottonCandyBlueThe'),
|
||||
target: 'CottonCandyBlue',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_CottonCandyPink: {
|
||||
text: t('foodCandyCottonCandyPink'),
|
||||
|
|
@ -625,9 +621,9 @@ api.food = {
|
|||
textThe: t('foodCandyCottonCandyPinkThe'),
|
||||
target: 'CottonCandyPink',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_Shade: {
|
||||
text: t('foodCandyShade'),
|
||||
|
|
@ -635,9 +631,9 @@ api.food = {
|
|||
textThe: t('foodCandyShadeThe'),
|
||||
target: 'Shade',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_White: {
|
||||
text: t('foodCandyWhite'),
|
||||
|
|
@ -645,9 +641,9 @@ api.food = {
|
|||
textThe: t('foodCandyWhiteThe'),
|
||||
target: 'White',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_Golden: {
|
||||
text: t('foodCandyGolden'),
|
||||
|
|
@ -655,9 +651,9 @@ api.food = {
|
|||
textThe: t('foodCandyGoldenThe'),
|
||||
target: 'Golden',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_Zombie: {
|
||||
text: t('foodCandyZombie'),
|
||||
|
|
@ -665,9 +661,9 @@ api.food = {
|
|||
textThe: t('foodCandyZombieThe'),
|
||||
target: 'Zombie',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_Desert: {
|
||||
text: t('foodCandyDesert'),
|
||||
|
|
@ -675,9 +671,9 @@ api.food = {
|
|||
textThe: t('foodCandyDesertThe'),
|
||||
target: 'Desert',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Candy_Red: {
|
||||
text: t('foodCandyRed'),
|
||||
|
|
@ -685,9 +681,109 @@ api.food = {
|
|||
textThe: t('foodCandyRedThe'),
|
||||
target: 'Red',
|
||||
canBuy () {
|
||||
return canBuyCandyFood;
|
||||
return FOOD_SEASON === 'Candy';
|
||||
},
|
||||
canDrop: canDropCandyFood,
|
||||
canDrop: FOOD_SEASON === 'Candy',
|
||||
},
|
||||
Pie_Skeleton: {
|
||||
text: t('foodPieSkeleton'),
|
||||
textA: t('foodPieSkeletonA'),
|
||||
textThe: t('foodPieSkeletonThe'),
|
||||
target: 'Skeleton',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_Base: {
|
||||
text: t('foodPieBase'),
|
||||
textA: t('foodPieBaseA'),
|
||||
textThe: t('foodPieBaseThe'),
|
||||
target: 'Base',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_CottonCandyBlue: {
|
||||
text: t('foodPieCottonCandyBlue'),
|
||||
textA: t('foodPieCottonCandyBlueA'),
|
||||
textThe: t('foodPieCottonCandyBlueThe'),
|
||||
target: 'CottonCandyBlue',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_CottonCandyPink: {
|
||||
text: t('foodPieCottonCandyPink'),
|
||||
textA: t('foodPieCottonCandyPinkA'),
|
||||
textThe: t('foodPieCottonCandyPinkThe'),
|
||||
target: 'CottonCandyPink',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_Shade: {
|
||||
text: t('foodPieShade'),
|
||||
textA: t('foodPieShadeA'),
|
||||
textThe: t('foodPieShadeThe'),
|
||||
target: 'Shade',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_White: {
|
||||
text: t('foodPieWhite'),
|
||||
textA: t('foodPieWhiteA'),
|
||||
textThe: t('foodPieWhiteThe'),
|
||||
target: 'White',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_Golden: {
|
||||
text: t('foodPieGolden'),
|
||||
textA: t('foodPieGoldenA'),
|
||||
textThe: t('foodPieGoldenThe'),
|
||||
target: 'Golden',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_Zombie: {
|
||||
text: t('foodPieZombie'),
|
||||
textA: t('foodPieZombieA'),
|
||||
textThe: t('foodPieZombieThe'),
|
||||
target: 'Zombie',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_Desert: {
|
||||
text: t('foodPieDesert'),
|
||||
textA: t('foodPieDesertA'),
|
||||
textThe: t('foodPieDesertThe'),
|
||||
target: 'Desert',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
Pie_Red: {
|
||||
text: t('foodPieRed'),
|
||||
textA: t('foodPieRedA'),
|
||||
textThe: t('foodPieRedThe'),
|
||||
target: 'Red',
|
||||
canBuy () {
|
||||
return FOOD_SEASON === 'Pie';
|
||||
},
|
||||
canDrop: FOOD_SEASON === 'Pie',
|
||||
},
|
||||
/* eslint-enable camelcase */
|
||||
};
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 560 B |
|
After Width: | Height: | Size: 616 B |
|
After Width: | Height: | Size: 509 B |
|
After Width: | Height: | Size: 553 B |
|
After Width: | Height: | Size: 457 B |
|
After Width: | Height: | Size: 482 B |
|
After Width: | Height: | Size: 478 B |
|
After Width: | Height: | Size: 454 B |
|
After Width: | Height: | Size: 465 B |
BIN
website/raw_sprites/spritesmith/stable/food/Pet_Food_Pie_Red.png
Normal file
|
After Width: | Height: | Size: 477 B |
|
After Width: | Height: | Size: 449 B |
|
After Width: | Height: | Size: 520 B |
|
After Width: | Height: | Size: 463 B |
|
After Width: | Height: | Size: 524 B |
BIN
website/raw_sprites/spritesmith_large/promo_pi_day.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
|
|
@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth';
|
|||
let api = {};
|
||||
|
||||
// @TODO export this const, cannot export it from here because only routes are exported from controllers
|
||||
const LAST_ANNOUNCEMENT_TITLE = 'MARCH BACKGROUNDS AND ARMOIRE ITEMS!';
|
||||
const LAST_ANNOUNCEMENT_TITLE = 'CELEBRATE PI DAY WITH HABITICA!';
|
||||
const worldDmg = { // @TODO
|
||||
bailey: false,
|
||||
};
|
||||
|
|
@ -30,14 +30,14 @@ api.getNews = {
|
|||
<div class="mr-3 ${baileyClass}"></div>
|
||||
<div class="media-body">
|
||||
<h1 class="align-self-center">${res.t('newStuff')}</h1>
|
||||
<h2>3/5/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||
<h2>3/14/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="promo_armoire_backgrounds_201903 center-block"></div>
|
||||
<p>We’ve added three new backgrounds to the Background Shop! Now your avatar can feed the birds at the Duck Pond, browse the Flower Market and go on the hunt for Spring goodies in a Field with Colored Eggs. Check them out under User Icon > Backgrounds!</p>
|
||||
<p>Plus, there’s new Gold-purchasable equipment in the Enchanted Armoire, including the Vernal Vestment set. Better work hard on your real-life tasks to earn all the pieces! Enjoy :)</p>
|
||||
<div class="small mb-3">by AnneDeLune, GeraldThePixel, QuartzFox, Vikte, gawrone, astigmatism, and SabreCat</div>
|
||||
<div class="promo_pi_day center-block"></div>
|
||||
<p>Hello Habiticans! In celebration of Pi Day on March 14, we've gifted everyone delicious slices of pie for you all to feed to your pets.</p>
|
||||
<p>We've also given everyone a festive Pi Hat and Shield so you can celebrate in style. Enjoy them, and thanks for being a part of our community!</p>
|
||||
<div class="small mb-3">by Beffymaroo and SabreCat</div>
|
||||
</div>
|
||||
`,
|
||||
});
|
||||
|
|
|
|||