mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
feat(content): Delightful Dinos Bundle
This commit is contained in:
@@ -775,5 +775,8 @@
|
||||
"questRobotUnlockText": "Unlocks purchasable Robot Eggs in the Market",
|
||||
|
||||
"rockingReptilesText": "Rocking Reptiles Quest Bundle",
|
||||
"rockingReptilesNotes": "Contains 'The Insta-Gator,' 'The Serpent of Distraction,' and 'The Veloci-Rapper.' Available until September 30."
|
||||
"rockingReptilesNotes": "Contains 'The Insta-Gator,' 'The Serpent of Distraction,' and 'The Veloci-Rapper.' Available until September 30.",
|
||||
|
||||
"delightfulDinosText": "Delightful Dinos Quest Bundle",
|
||||
"delightfulDinosNotes": "Contains 'The Pterror-dactyl,' 'The Trampling Triceratops,' and 'The Dinosaur Unearthed.' Available until November 30."
|
||||
}
|
||||
|
||||
225
website/common/script/content/bundles.js
Normal file
225
website/common/script/content/bundles.js
Normal file
@@ -0,0 +1,225 @@
|
||||
import moment from 'moment';
|
||||
import t from './translation';
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------
|
||||
Discounted Item Bundles
|
||||
---------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const bundles = {
|
||||
featheredFriends: {
|
||||
key: 'featheredFriends',
|
||||
text: t('featheredFriendsText'),
|
||||
notes: t('featheredFriendsNotes'),
|
||||
bundleKeys: [
|
||||
'falcon',
|
||||
'harpy',
|
||||
'owl',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-05-09', '2019-06-02');
|
||||
},
|
||||
type: 'quests',
|
||||
class: 'quest_bundle_featheredFriends',
|
||||
value: 7,
|
||||
},
|
||||
splashyPals: {
|
||||
key: 'splashyPals',
|
||||
text: t('splashyPalsText'),
|
||||
notes: t('splashyPalsNotes'),
|
||||
bundleKeys: [
|
||||
'dilatory_derby',
|
||||
'turtle',
|
||||
'whale',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-07-17', '2019-08-02');
|
||||
},
|
||||
type: 'quests',
|
||||
class: 'quest_bundle_splashyPals',
|
||||
value: 7,
|
||||
},
|
||||
farmFriends: {
|
||||
key: 'farmFriends',
|
||||
text: t('farmFriendsText'),
|
||||
notes: t('farmFriendsNotes'),
|
||||
bundleKeys: [
|
||||
'cow',
|
||||
'horse',
|
||||
'sheep',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-08-08', '2019-09-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
witchyFamiliars: {
|
||||
key: 'witchyFamiliars',
|
||||
text: t('witchyFamiliarsText'),
|
||||
notes: t('witchyFamiliarsNotes'),
|
||||
bundleKeys: [
|
||||
'rat',
|
||||
'spider',
|
||||
'frog',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-10-15', '2019-11-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
winterQuests: {
|
||||
key: 'winterQuests',
|
||||
text: t('winterQuestsText'),
|
||||
notes: t('winterQuestsNotes'),
|
||||
bundleKeys: [
|
||||
'evilsanta',
|
||||
'evilsanta2',
|
||||
'penguin',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2017-12-14', '2018-01-01');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
hugabug: {
|
||||
key: 'hugabug',
|
||||
text: t('hugabugText'),
|
||||
notes: t('hugabugNotes'),
|
||||
bundleKeys: [
|
||||
'snail',
|
||||
'beetle',
|
||||
'butterfly',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-02-06', '2018-04-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
cuddleBuddies: {
|
||||
key: 'cuddleBuddies',
|
||||
text: t('cuddleBuddiesText'),
|
||||
notes: t('cuddleBuddiesNotes'),
|
||||
bundleKeys: [
|
||||
'bunny',
|
||||
'ferret',
|
||||
'guineapig',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-05-08', '2018-06-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
aquaticAmigos: {
|
||||
key: 'aquaticAmigos',
|
||||
text: t('aquaticAmigosText'),
|
||||
notes: t('aquaticAmigosNotes'),
|
||||
bundleKeys: [
|
||||
'axolotl',
|
||||
'kraken',
|
||||
'octopus',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-06-12', '2018-07-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
forestFriends: {
|
||||
key: 'forestFriends',
|
||||
text: t('forestFriendsText'),
|
||||
notes: t('forestFriendsNotes'),
|
||||
bundleKeys: [
|
||||
'ghost_stag',
|
||||
'hedgehog',
|
||||
'treeling',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-09-11', '2018-10-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
oddballs: {
|
||||
key: 'oddballs',
|
||||
text: t('oddballsText'),
|
||||
notes: t('oddballsNotes'),
|
||||
bundleKeys: [
|
||||
'slime',
|
||||
'rock',
|
||||
'yarn',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-06-10', '2019-07-03');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
birdBuddies: {
|
||||
key: 'birdBuddies',
|
||||
text: t('birdBuddiesText'),
|
||||
notes: t('birdBuddiesNotes'),
|
||||
bundleKeys: [
|
||||
'peacock',
|
||||
'penguin',
|
||||
'rooster',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-12-11', '2019-01-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
mythicalMarvels: {
|
||||
key: 'mythicalMarvels',
|
||||
text: t('mythicalMarvelsText'),
|
||||
notes: t('mythicalMarvelsNotes'),
|
||||
bundleKeys: [
|
||||
'unicorn',
|
||||
'seaserpent',
|
||||
'gryphon',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-02-19', '2019-03-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
rockingReptiles: {
|
||||
key: 'rockingReptiles',
|
||||
text: t('rockingReptilesText'),
|
||||
notes: t('rockingReptilesNotes'),
|
||||
bundleKeys: [
|
||||
'alligator',
|
||||
'snake',
|
||||
'velociraptor',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-09-10', '2019-10-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
delightfulDinos: {
|
||||
key: 'delightfulDinos',
|
||||
text: t('delightfulDinosText'),
|
||||
notes: t('delightfulDinosNotes'),
|
||||
bundleKeys: [
|
||||
'pterodactyl',
|
||||
'triceratops',
|
||||
'trex_undead',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-11-14', '2019-12-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
};
|
||||
|
||||
export default bundles;
|
||||
@@ -1,6 +1,5 @@
|
||||
import defaults from 'lodash/defaults';
|
||||
import each from 'lodash/each';
|
||||
import moment from 'moment';
|
||||
import t from './translation';
|
||||
import { tasksByCategory } from './tasks';
|
||||
|
||||
@@ -26,6 +25,7 @@ import {
|
||||
|
||||
import appearances from './appearance';
|
||||
import { backgroundsTree, backgroundsFlat } from './appearance/backgrounds';
|
||||
import bundles from './bundles';
|
||||
import spells from './spells'; // eslint-disable-line import/no-cycle
|
||||
import subscriptionBlocks from './subscriptionBlocks';
|
||||
import faq from './faq';
|
||||
@@ -58,211 +58,7 @@ api.timeTravelerStore = timeTravelers.timeTravelerStore;
|
||||
|
||||
api.officialPinnedItems = officialPinnedItems;
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------
|
||||
Discounted Item Bundles
|
||||
---------------------------------------------------------------
|
||||
*/
|
||||
|
||||
api.bundles = {
|
||||
featheredFriends: {
|
||||
key: 'featheredFriends',
|
||||
text: t('featheredFriendsText'),
|
||||
notes: t('featheredFriendsNotes'),
|
||||
bundleKeys: [
|
||||
'falcon',
|
||||
'harpy',
|
||||
'owl',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-05-09', '2019-06-02');
|
||||
},
|
||||
type: 'quests',
|
||||
class: 'quest_bundle_featheredFriends',
|
||||
value: 7,
|
||||
},
|
||||
splashyPals: {
|
||||
key: 'splashyPals',
|
||||
text: t('splashyPalsText'),
|
||||
notes: t('splashyPalsNotes'),
|
||||
bundleKeys: [
|
||||
'dilatory_derby',
|
||||
'turtle',
|
||||
'whale',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-07-17', '2019-08-02');
|
||||
},
|
||||
type: 'quests',
|
||||
class: 'quest_bundle_splashyPals',
|
||||
value: 7,
|
||||
},
|
||||
farmFriends: {
|
||||
key: 'farmFriends',
|
||||
text: t('farmFriendsText'),
|
||||
notes: t('farmFriendsNotes'),
|
||||
bundleKeys: [
|
||||
'cow',
|
||||
'horse',
|
||||
'sheep',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-08-08', '2019-09-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
witchyFamiliars: {
|
||||
key: 'witchyFamiliars',
|
||||
text: t('witchyFamiliarsText'),
|
||||
notes: t('witchyFamiliarsNotes'),
|
||||
bundleKeys: [
|
||||
'rat',
|
||||
'spider',
|
||||
'frog',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-10-15', '2019-11-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
winterQuests: {
|
||||
key: 'winterQuests',
|
||||
text: t('winterQuestsText'),
|
||||
notes: t('winterQuestsNotes'),
|
||||
bundleKeys: [
|
||||
'evilsanta',
|
||||
'evilsanta2',
|
||||
'penguin',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2017-12-14', '2018-01-01');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
hugabug: {
|
||||
key: 'hugabug',
|
||||
text: t('hugabugText'),
|
||||
notes: t('hugabugNotes'),
|
||||
bundleKeys: [
|
||||
'snail',
|
||||
'beetle',
|
||||
'butterfly',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-02-06', '2018-04-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
cuddleBuddies: {
|
||||
key: 'cuddleBuddies',
|
||||
text: t('cuddleBuddiesText'),
|
||||
notes: t('cuddleBuddiesNotes'),
|
||||
bundleKeys: [
|
||||
'bunny',
|
||||
'ferret',
|
||||
'guineapig',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-05-08', '2018-06-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
aquaticAmigos: {
|
||||
key: 'aquaticAmigos',
|
||||
text: t('aquaticAmigosText'),
|
||||
notes: t('aquaticAmigosNotes'),
|
||||
bundleKeys: [
|
||||
'axolotl',
|
||||
'kraken',
|
||||
'octopus',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-06-12', '2018-07-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
forestFriends: {
|
||||
key: 'forestFriends',
|
||||
text: t('forestFriendsText'),
|
||||
notes: t('forestFriendsNotes'),
|
||||
bundleKeys: [
|
||||
'ghost_stag',
|
||||
'hedgehog',
|
||||
'treeling',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-09-11', '2018-10-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
oddballs: {
|
||||
key: 'oddballs',
|
||||
text: t('oddballsText'),
|
||||
notes: t('oddballsNotes'),
|
||||
bundleKeys: [
|
||||
'slime',
|
||||
'rock',
|
||||
'yarn',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-06-10', '2019-07-03');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
birdBuddies: {
|
||||
key: 'birdBuddies',
|
||||
text: t('birdBuddiesText'),
|
||||
notes: t('birdBuddiesNotes'),
|
||||
bundleKeys: [
|
||||
'peacock',
|
||||
'penguin',
|
||||
'rooster',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2018-12-11', '2019-01-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
mythicalMarvels: {
|
||||
key: 'mythicalMarvels',
|
||||
text: t('mythicalMarvelsText'),
|
||||
notes: t('mythicalMarvelsNotes'),
|
||||
bundleKeys: [
|
||||
'unicorn',
|
||||
'seaserpent',
|
||||
'gryphon',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-02-19', '2019-03-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
rockingReptiles: {
|
||||
key: 'rockingReptiles',
|
||||
text: t('rockingReptilesText'),
|
||||
notes: t('rockingReptilesNotes'),
|
||||
bundleKeys: [
|
||||
'alligator',
|
||||
'snake',
|
||||
'velociraptor',
|
||||
],
|
||||
canBuy () {
|
||||
return moment().isBetween('2019-09-10', '2019-10-02');
|
||||
},
|
||||
type: 'quests',
|
||||
value: 7,
|
||||
},
|
||||
};
|
||||
api.bundles = bundles;
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
import moment from 'moment';
|
||||
|
||||
// Magic Hatching Potions are configured like this:
|
||||
// type: 'premiumHatchingPotion', // note no "s" at the end
|
||||
// path: 'premiumHatchingPotions.Rainbow',
|
||||
const featuredItems = {
|
||||
market: [
|
||||
market () {
|
||||
if (moment().isBetween('2019-11-01', '2019-12-02')) {
|
||||
return [
|
||||
{
|
||||
type: 'armoire',
|
||||
path: 'armoire',
|
||||
@@ -19,11 +23,31 @@ const featuredItems = {
|
||||
type: 'food',
|
||||
path: 'food.Saddle',
|
||||
},
|
||||
],
|
||||
];
|
||||
}
|
||||
return [
|
||||
{
|
||||
type: 'armoire',
|
||||
path: 'armoire',
|
||||
},
|
||||
{
|
||||
type: 'hatchingPotions',
|
||||
path: 'hatchingPotions.Skeleton',
|
||||
},
|
||||
{
|
||||
type: 'eggs',
|
||||
path: 'eggs.Fox',
|
||||
},
|
||||
{
|
||||
type: 'food',
|
||||
path: 'food.Saddle',
|
||||
},
|
||||
];
|
||||
},
|
||||
quests: [
|
||||
{
|
||||
type: 'quests',
|
||||
path: 'quests.sloth',
|
||||
type: 'bundles',
|
||||
path: 'bundles.delightfulDinos',
|
||||
},
|
||||
{
|
||||
type: 'quests',
|
||||
|
||||
@@ -30,7 +30,7 @@ shops.getMarketShop = function getMarketShop (user, language) {
|
||||
categories: shops.getMarketCategories(user, language),
|
||||
featured: {
|
||||
text: i18n.t('featuredItems'),
|
||||
items: featuredItems.market.map(i => getItemInfo(user, i.type, get(content, i.path))),
|
||||
items: featuredItems.market().map(i => getItemInfo(user, i.type, get(content, i.path))),
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
BIN
website/raw_sprites/spritesmith_large/promo_delightful_dinos.png
Normal file
BIN
website/raw_sprites/spritesmith_large/promo_delightful_dinos.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
website/raw_sprites/spritesmith_large/scene_habitica_map.png
Normal file
BIN
website/raw_sprites/spritesmith_large/scene_habitica_map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
@@ -4,7 +4,7 @@ const api = {};
|
||||
|
||||
// @TODO export this const, cannot export it from here because only routes are exported from
|
||||
// controllers
|
||||
const LAST_ANNOUNCEMENT_TITLE = 'THUNDERSTORM AND EMBER HATCHING POTIONS';
|
||||
const LAST_ANNOUNCEMENT_TITLE = 'NEW DINOSAUR PET QUEST BUNDLE AND WIKI SPOTLIGHT';
|
||||
const worldDmg = { // @TODO
|
||||
bailey: false,
|
||||
};
|
||||
@@ -31,23 +31,38 @@ api.getNews = {
|
||||
<div class="mr-3 ${baileyClass}"></div>
|
||||
<div class="media-body">
|
||||
<h1 class="align-self-center">${res.t('newStuff')}</h1>
|
||||
<h2>11/12/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||
<h2>11/14/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="promo_ember_thunderstorm_potions center-block"></div>
|
||||
<div class="promo_delightful_dinos center-block"></div>
|
||||
<h3>New Pet Quest Bundle: Delightful Dinos</h3>
|
||||
<p>
|
||||
Two of your favorite Magic Hatching Potions are back! Between now and November 30, you
|
||||
can buy Thunderstorm and Ember Hatching Potions from
|
||||
<a href='/shops/market'>the Market</a> and use them to hatch any standard pet egg.
|
||||
(Magic Hatching Potions do not work on Quest Pet eggs.) Magic Hatching Potion Pets
|
||||
aren't picky, so they'll happily eat any kind of food that you feed them!
|
||||
If you are looking to add some dinosaur pets to your Habitica stable, life, uh, finds a
|
||||
way! From now until November 30, you can purchase the Delightful Dinos Pet Quest Bundle
|
||||
and receive the Pterodactyl, Triceratops, and T-Rex (The Dinosaur Unearthed) quests, all
|
||||
for only 7 Gems! That's a discount of 5 Gems from the price of purchasing them
|
||||
separately. Check it out in the <a href='/shops/quests'>Quest Shop</a> today!
|
||||
</p>
|
||||
<p>
|
||||
After they're gone, it will be at least a year before the Ember or Thunderstorm Hatching
|
||||
Potions are available again, so be sure to get them now!
|
||||
<div class="small">by SabreCat and Beffymaroo</div>
|
||||
<div class="small">Art by Baconsaur, Eevachu, UncommonCriminal, Kiwibot, McCoyly,
|
||||
plumilla, Seraphina, PainterProphet, Stefalupagus, Katy133, Edge, Willow The Witty,
|
||||
Lilith of Alfheim, Procyon, GeraldThePixel, and Archeia
|
||||
</div>
|
||||
<div class="small mb-3">Writing by Lemoness, Daniel the Bard, Lilith of Alfheim, and Ali
|
||||
Stewart
|
||||
</div>
|
||||
<div class="scene_habitica_map center-block"></div>
|
||||
<h3>Blog Post: Places in Habitica</h3>
|
||||
<p>This month's <a href='https://habitica.wordpress.com/2019/11/14/places-in-habitica/'
|
||||
target='_blank'>featured Wiki article</a> is about Places in Habitica! We hope that it
|
||||
will help you as you gamify your tasks. Be sure to check it out, and let us know what
|
||||
you think by reaching out on <a href='https://twitter.com/habitica'
|
||||
target='_blank'>Twitter</a>, <a href='http://blog.habitrpg.com'
|
||||
target='_blank'>Tumblr</a>, and <a href='https://facebook.com/habitica'
|
||||
target='_blank'>Facebook</a>.
|
||||
</p>
|
||||
<div class="small mb-3">by Balduranne and SabreCat</div>
|
||||
<div class="small mb-3">by shanaqui and the Wiki Wizards</div>
|
||||
</div>
|
||||
`,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user