HabitRPG/habitrpg

View on GitHub
website/common/script/content/quests.js

Summary

Maintainability
A
0 mins
Test Coverage
import defaults from 'lodash/defaults';
import each from 'lodash/each';
import sortBy from 'lodash/sortBy';
import t from './translation';
import { USER_CAN_OWN_QUEST_CATEGORIES } from './constants';
import QUEST_GENERIC from './quests/generic';
import QUEST_MASTERCLASSER from './quests/masterclasser';
import QUEST_PETS from './quests/pets';
import QUEST_POTIONS from './quests/potions';
import QUEST_SEASONAL from './quests/seasonal';
import QUEST_SERIES from './quests/series';
import QUEST_TIME_TRAVEL from './quests/timeTravel';
import QUEST_WORLD from './quests/world';

const userCanOwnQuestCategories = USER_CAN_OWN_QUEST_CATEGORIES;
const questGeneric = QUEST_GENERIC;
const questMasterclasser = QUEST_MASTERCLASSER;
const questPets = QUEST_PETS;
const questPotions = QUEST_POTIONS;
const questSeasonal = QUEST_SEASONAL;
const questSeries = QUEST_SERIES;
const questTimeTravel = QUEST_TIME_TRAVEL;
const questWorld = QUEST_WORLD;

// this uses the spread operator, which allows us to combine multiple objects into one
const quests = {
  ...questGeneric,
  ...questMasterclasser,
  ...questPets,
  ...questPotions,
  ...questSeasonal,
  ...questSeries,
  ...questTimeTravel,
  ...questWorld,
};

each(quests, (v, key) => {
  defaults(v, {
    key,
    canBuy () {
      return true;
    },
  });

  const b = v.boss;

  if (b) {
    defaults(b, {
      str: 1,
      def: 1,
    });
    if (b.rage) {
      defaults(b.rage, {
        title: t('rage'),
        description: t('bossRageDescription'),
      });
    }
  }
});

const questsByLevel = sortBy(quests, quest => quest.lvl || 0);

export {
  quests,
  questsByLevel,
  userCanOwnQuestCategories,
};