Quest Shop

quest_shop_ banner

It’s Wiki Wednesday! Once a month we highlight a helpful post from the Wiki with tips about productivity, wellness, and optimizing your use of Habitica!

One of the ways Habitica encourages you to complete your tasks is the Quest system, where you can accumulate damage or collect items by completing your tasks… and where you get damaged by bosses if you fail to complete all your Dailies! So the Quest Shop is one of the most important locations on Habitica, and the Wiki has a great article explaining just what you can find there, and what it all means. Here’s an excerpt:

When shopping, you can learn a lot about a quest simply by looking at its icon.

Each scroll in the Quest Shop shows a picture that represents its contents. Quest lines are numbered and all display the same picture, which is related to the final boss in the line. Pet quests show a picture of an egg that matches the pet contained inside. The number of scrolls the player currently owns appears in the top right corner within a grey circle. If a scroll displays a lock icon, prerequisites must be met before it can be bought. To see the name and difficulty of a quest, hover over the scroll. Collection quests will also show the number of objects to be collected.

Check out the full article for all the details!

Advertisements

Mage

Illustration by James Danger

It’s Wiki Wednesday! Once a month we highlight a helpful post from the Wiki with tips about productivity, wellness, and optimizing your use of Habitica!

Once you get to level 10, you’ll have the opportunity to change from being a Warrior to become a Healer, a Rogue or a Mage! If you’re freezing up at the idea of that decision, don’t worry: that’s why we’ve been highlighting the Wiki articles about each class. They have tons of information about how each class works and what the advantages are. Here’s the intro to the world of being a Mage:

The Mage (previously known as the Wizard) is a class that citizens of Habitica can select when they reach level 10.

Mages gain experience and mana points (MP) faster than other classes, and also have good rates of earning gold and drops. Mages can cast skills on tasks to deal additional damage to bosses or preserve their own streaks. Mage skills can also affect the player’s party by buffing Intelligence or restoring other party members’ MP. They are powerful allies to have for dealing damage and recharging skills during boss battles.

Mages are versatile, fast at levelling and powerful in a Boss battle, so if that sounds appealing, get ready to up your staff! If you’d like a little more information first, check out the full article so you can learn the benefits of Burst of Flames, or just how the neat the Mage outfits are.

Don’t forget, we’ve also just completed a series of Use Case Spotlights about each class, if you’re still looking for ideas!

New and Notable: Guild Spotlight

Illustration by emmavig

Habitica has a vibrant community, and new Guilds arise all the time. This year, we’re highlighting some of the newer or smaller Guilds which may not get as much traffic as Guilds that are higher up in the list. All of these Guilds have had recent activity and have a minimum number of members; they’re probably a bit quieter than more established Guilds, but they have the potential to grow. Spot something that sounds right up your alley? You know what to do!

🐯 Zooniverse Conservation Quest Guild 🌎: This guild is all about work on the citizen science project, Zooniverse! Chat about your favourite project, tricky identifications, or anything else related to Zooniverse! There’s also a challenge to help remind you to stay involved with Zooniverse.

Habitica Cycling Club: Use your bike to commute to work? Cycle for pleasure? Whatever you do, this is a great place to chat about your two-wheeled best friend. There are challenges to jump into as well, including one about bike maintenance!

Playing with Power: Nintendo of Habitica: A guild for lovers of Nintendo, whether you’re a casual gamer or a Twitch superstar! Chat about your games, daydream about the remakes you’d love to see, or yearn for the days of black-and-white Tetris on the original Gameboy, alongside the best of like-minded Habiticans.

If any of these Guilds appeals to you, then you can jump straight in, join and introduce yourself to the group! If not, why not check out previous Guild Spotlights? And next month there’ll be a whole new post with more ideas for potentially overlooked guilds to join!

Use Case Spotlight: Making the Most of the Mage Class

Casting_Spells2x
Illustration by James Danger

Which is the best Class? Well, the Habitica team might be biased, but we love all our children equally. Warrior, Rogue, Healer, Mage — they all have their own advantages, and the choice is down to what suits you best and what you find motivating. Do you want to do massive damage in Quests? Or are you more interested in hoarding all the Gold you possibly can?

To make your choice a little easier, this month’s Use Case Spotlight is the last in our series highlighting how our users get the most out of each class. In this case, we’re discussing the Mage Class!

hiandbye is new to the Mage class, but summarizes the reasons to love it:

It’s my first “playthrough” and I picked the mage class and I’m very happy about my choice. You can get so much experience on your own with Burst of Flames, it’s ridiculous. […] I’m just blasting through levels; after around half a year of using Habitica I’m at level 57 already. Whenever my health gets low, I don’t buy health potions, I just level up instead.

Also, I like seeing the streaks on my dailies rise. Casting Chilling Frost helps with days where you don’t feel like doing anything but it’ll drain your mana even faster.

Of course, Mana regenerates slowly, so these skills allow for only a few days of lazyness before I have to square up and dilligently complete all my Dailies. But I like it like that.

8749Dayton has a Warrior’s perspective on the best Mage skill:

Warrior player here. One thing I love about my party is that mage players collaborate with others to maximize the effectiveness of ethereal surge. It’s helped save lives of members and helps me deal a ton more damage on bosses. So if you’re playing mage use ethereal surge. I see so many people talking about how much exp you gain with flame burst but you as a mage player can be the reason some people didn’t die, the warriors did more damage than they originally could have, or having more buffs to stats from other party members. TLDR ethereal surge is an amazing skill so collab with your party to maximize its value

Cyn has tips about making the most of your INT stat:

Mage tips: raise your Intelligence as high as possible. Feel free to use few Burst of Flames whenever you are participating in a party quest. With high Intelligence, you’ll be gaining levels in no time (not to mention you’ll have an increased mana pool and faster mana regen)

Finally, I (shanaqui) added a little thought of my own about the benefits of the Mage class versus keeping the game balanced:

I think for me there’s one major thing about the Mage class that’s both a pro and a con, depending on your play-style: almost everything goes faster with a Mage! I usually switch to Mage when things are feeling a little slow, either in terms of levelling or also in quests (since you can speed through all Boss quests with the help of Burst of Flames). In the end, I usually alternate Mage and Rogue, so I can match that quick progress with increased drops to actually feed up those quest pets!

This month’s focus was on Mages, but if you’re interested in one of the other classes, don’t worry! We’ve already covered Warriors, Healers and Rogues, and you can find the links below at the end of the post.

We’ve covered each of the classes now, so next month’s Use Case Spotlight will be on a new topic! If you chip in on the next discussion, you could find your own post highlighted in next month’s roundup. We’d love to hear from you, so check out the Use Case Spotlights Guild for other tips, and to add your perspective!

Other posts in this series: Warrior | HealerRogue | Mage

Use Case Spotlight: Making the Most of the Rogue Class

Casting_Spells2x
Illustration by James Danger

Which is the best Class? Well, the Habitica team might be biased, but we love all our children equally. Warrior, Rogue, Healer, Mage — they all have their own advantages, and the choice is down to what suits you best and what you find motivating. Do you want to do massive damage in Quests? Or are you more interested in hoarding all the Gold you possibly can?

To make your choice a little easier, this month’s Use Case Spotlight is the next in our series highlighting how other users get the most out of a particular class. In this case, we’re discussing the Rogue Class!

To get us started, Trangon extols some of the benefits of being a Rogue:

I choose the Rogue class for the increased drop rate. I enjoy building up my pet and mounts collection, as well as getting all equipment possible, so I invested all my experience stat points into perception. Every morning I use all my mana points to get 100-200 Gold using pickpocket on one of my most successful habits (I never use any of the other skills), which I spend on the Enchanted Armoire to get new and unique gear and food to grow my pets. With this system I always have money to buy a potion when needed (I’m a solo player). I chose this play style because I have no hurry leveling up and the new gear and pets keep things entertaining. In addition, although I have started to invest stat points in strength as well in the last months, I do enjoy the week/months long fights with quest bosses.

Allors4612 has some great tips on how to set up your stats, especially while you’re just starting out:

For beginners to Habitica (or those on Hard Mode), I recommend putting points on CON for the first few levels until acquiring the Stealth skill, to prevent excessive loss of health. In my opinion, you can put a few points on STR as well so you don’t feel useless during quests. After gaining all the skills, you’re pretty much set for life. From then on, put most of your stat points on INT to boost your increase in exp and mana. I don’t recommend putting points on PER, unless you want to earn a lot of gold or get the Triad Bingo achievement.

PixelStormArt has some great suggestions on how to use your unique Rogue class skills, and how to maximize the returns!

In terms of how I use my skills, I usually buff my party’s Perception at the start of my day using Tools of the Trade, but save a little mana to use Pickpocket or Backstab for myself. I rarely use Stealth, mainly because my party’s healer is able to heal us every day and I don’t mind taking a hit. If anything it motivates me to complete more of my dailies rather than taking an easier way out.

My top tip would be to regularly check the Skills and Buffs section of Data Display Tool, as this will tell you what the best task is for you to use your skill on and what you will gain from it. Though this tip is true for all classes, staying on top of it as a Rogue can help you optimise your gold (and xp) output from your skills.

Meanwhile, Saphykun discusses how to keep the game balanced with that massive flow of gold coming in!

Playing the rogue class meant revamping my playstyle. I’m motivated by maintaining my health pool, not by gold. Since I make so much gold from tasks, losing health is no longer a threat to me because I can always buy potions with gold. Not to mention that my party completes quests so quickly that I level up often enough – and regain my health and get more gold. Oh, and we have two more rogues in my party, and all of us cast Tools of the Trade… did I mention that we get a lot of gold? It’s almost a problem for me!

Because of that, I’ve transferred my negative habits to the rewards column. Indulging on negative habits means less gold allocated to gems and rewards that I really want. It changed the way I play, with the added side effect of managing my budget on Habitica every week. That’s a plus, I think!

If you’re interested in reading everyone’s tips and tricks, not just the edited highlights here, don’t hesitate to check out the Use Case Spotlights Guild!

This month’s focus was on Rogues, but if that’s not your idea of a good time, don’t fret! We’ve already covered Warriors and Healers, and the final Use Case Spotlight in this series will focus on the Mage class. Don’t forget, if you chip in on the next discussion, you could find your own post highlighted in next month’s Spotlight! We’d love to hear from you.

Other posts in this series: Warrior | Healer

New and Notable: Guild Spotlight

Illustration by Uncommon Criminal

Habitica has a vibrant community, and new Guilds arise all the time. This year, we’re highlighting some of the newer or smaller Guilds which may not get as much traffic as Guilds that are higher up in the list. All of these Guilds have had recent activity and have a minimum number of members; they’re probably a bit quieter than more established Guilds, but they have the potential to grow. Spot something that sounds right up your alley? You know what to do!

Get It Off Your Chest – GIOYCThis Guild is designed as a safe space to let you vent or say something you wouldn’t otherwise say. Keeping things to yourself can be really unhealthy — and conversely, sometimes you just need someone to share some fantastic news right now! This Guild is here for you.

Bullet JournalersNever go anywhere without your Leuchtturm1917? Washi tape fiend? Keep it simple? Just starting out? All are welcome to jump in and discuss all things BulletJournal-related!

Everyday Holidays: There’s something to celebrate every day of the year, if you look hard enough! This Guild has challenges to guide you in celebrating… National Mustard Day? International Milkshake Day? Admit it, you’re curious!

If any of these Guilds appeals to you, then you can jump straight in, join and post. If not, check out previous Guild Spotlights, or wait for next month’s post with a whole new selection!

Rogue

Illustration by James Danger

It’s Wiki Wednesday! Once a month we highlight a helpful post from the Wiki with tips about productivity, wellness, and optimizing your use of Habitica!

Once you get to level 10, it’s time to choose your Class! A lot of users find it hard to make that decision, especially the first time. That’s why this month’s highlighted article is all about the Rogue Class, and all the things that you can do once you’re dual-wielding your weapons! Here’s a quick intro from the Wiki page:

Rogues earn more gold and find drops more often than other classes. They also earn more frequent and rewarding critical hits. Their skills can generate gold and experience from tasks, provide their party with a buff to gold and drop earning rate, and allow the Rogue to dodge damage that originated from missed Dailies. They are valuable allies to have in collection quests.

So if you have draconic tendencies and need to earn plenty of gold preparatory to heaping it up in a pile and sleeping on it, or you love stockpiling food to feed your pets, the Rogue Class might well be for you! Check out the full article here to learn more about how to Backstab your tasks, earn those Hook Swords, and dodge your undone Dailies!

And don’t forget to keep an eye out for this month’s Use Case Spotlight as well, which highlight other users’ tips and tricks for making the most of the Rogue class!

Developer Blog Archive

Hello Habitican and faithful blog reader! If you’re following our WordPress site, you may have received alerts that we’ve added some entries from our now-defunct developer blog. We’re collecting these posts on this blog so that they are still accessible to anyone who may be interested.

Today we’ve also posted a new developer entry, regarding the partial outage that affected Parties and Guilds a few weeks ago. You can read this new entry here.

If you’re interested in reading the past developer blog entries we added, you can find them collected here.

Thanks as always for your interest, and for being a part of Habitica!

Outage Post-Mortem: July 19, 2019

What Happened? The Incident Report

At around 9 PM UTC on July 16th 2019 a developer ran a test script while connected to the Habitica production database to make sure all the data for an upcoming feature was correct. The postmortem report reads:

I tried to connect with my read-only database account but it wouldn’t connect correctly (probably due to an issue in the library we use to connect to MongoDB in one of our code repositories). So I switched to my database account with write permissions and run the script.

The script only read data so it didn’t cause any issue, but at the same time I decided to investigate a test failure in the same code repository and run the tests there.

Being used to the main code repository where the tests use a different database than the rest of the code I didn’t realize the fact that the tests did run against the same database that was being used for the test script, which means the production database.

Unfortunately one of the tests, after completing, deleted all the data it had created by deleting all documents from the groups collection that stores all the parties and guilds that exist on Habitica. This also affected quests and, in some cases, party or guild membership.

Chat messages are stored on a separate collection so they were not affected.

Resolution and Recovery

About 3 hours after the incident, we were able to restore to the most recent database backup we had access to. This reset all groups back as they were at the time of the backup, with the exception of those groups created between the last backup and the time of incident.

The following day we were able to restore the vast majority of party and guilds membership that had been lost and, where possible, restored lost quest progress. We are offering all affected users that were in the middle of a quest and who might have lost their progress 4 gems plus a copy of the quest scroll they were completing. Certain users may not have been identified during our automated checks and may need to reach out to us via admin@habitica.com for further resolution.

Other parts of Habitica, including user accounts and tasks, were not affected.

We have been fixing and continue to fix smaller issues as they are discovered.

Corrective and Preventive Measures

Following the incident, we reviewed our procedures and came up with a series of steps to avoid similar issues in the future.

In particular, we will do the following:

  • Update the tests in the affected code repository to make sure they use a completely different database when running, even locally.
  • Change the permissions of database users by removing the ability to delete entire collections of documents.
  • In the few places where we must delete all documents from a collection (using collectionName.remove({})) we are changing the code to instead use collectionName.drop() which, coupled with the previous change, will prevent the deletion of production data in case similar incidents occurs.
  • Start using checklists for common maintenance operations so that every developer has a set of steps to follow and it’s more difficult to forget something.

Many of these recommendations have already been implemented as of this posting.

As always, we’ve appreciate your support and patience as we repaired the error and continue to work to improve the Habitica experience!

Overview of Changes in Version 3 of the API

Hello Habiticans! We’re moving our posts from our defunct dev blog, which was hosted at devs.habitica.com, to this blog. Note that much of the information in these posts is outdated, and we preserve them here for historical purposes as well as in case they contain any useful information for posterity. Some posts have been omitted as they will not be relevant for those purposes. Please reach out to us if you’d like to receive a list or document containing a complete record of the devs.habitica.com content.

Important info! Version 2 of the Habitica API is now deprecated, so all open-source developers should switch over to version 3 of the API as soon as possible. To make this transition easier for our developers, we are still supporting API v2 for a few weeks, but we will be shutting it off in the near future. The sooner developers can migrate to the new API, the better! We will announce the date of the version 2 cutoff shortly, so stay tuned.

Server Responses

Successes

Just about every server responses will return a JSON object (exceptions for routes that return other data types, such as the csv export route). You can expect each response to include a success property with a Boolean value and a data property that is an Object or an Array which includes any relevant information back from the request. For instance, the GET /api/v3/tasks/userroute would return data that looks like this:

{
  "success": true,
  "data": [
    {
      id: 'the-task-id',
      type: 'habit',
      text: 'task text',
      notes: 'task notes',
      // more task properties
    },
    // More task data
  ]
}

Some routes also include a message in the user’s language. If your integration has a GUI, this can be helpful for presenting a confirmation message to the user that their action was a success.

{
  "success": true,
  "data": {
    // Some data
  },
  "message": "A message in the user's language"
}

Errors

If the request returns an error, the success property will be false, and there will be an error property with the name of the error and a message property with some info about the failed request in the user’s language.

{
  "success": false,
  "error": "NotFound",
  "message": "The task could not be found."
}

In the case of validation errors, there may also be an errors property which is an Array of error messages.

Changes to API v2

The backend code for API v2 had to be changed to cope with database structure changes. However, there should be no behavior changes, except that certain new fields will be in the data. If you notice any other changes, please report a bug.

The remainder of this post describes changes in API v3, except where otherwise indicated.

Changes to the User and Tasks

In version 2, tasks were stored directly on the user object. In version 3 of the API, tasks are their own collection. The user object now has a tasksOrderproperty which contains a list of IDs for each type of task and you can use this to determine what order the tasks should appear in.

Completed To-Dos do not appear in the tasksOrder lists (see “Completed To-Dos below”).

Changes to Tasks

Task ID Uniqueness

In version 2, each user’s tasks had unique IDs, but the same task ID could be used in tasks for other players. In version 3, all task IDs are unique across all players. See also “Task IDs have Changed” and “Changes to Challenge Tasks” below.

Task IDs have Changed

Because of the requirement for unique task IDs across all users, some of your task IDs may have changed. If your task ID was a valid UUID and was unique across all players, the ID remained the same. Otherwise, a newly generated unique ID replaced the original ID of the task. Update: This was our original plan, but we ended up just creating new uuid’s for each task that was created.

For tasks with invalid IDs that existed before API v3 went live, the invalid old ID is stored in the _legacyId field, and this field is returned by both version 2 and version 3. This field will be removed when API v2 is decommissioned.

API v2 also returns the legacy ID in the id field so you do not need to immediately update any scripts or configuration files that have hard-coded IDs. However you will need to do that when API v2 is decommissioned.

The _legacyId field does not exist for tasks created after API v3 went live.

Custom IDs

In version 2, you could set a custom ID for the task (such as productivity). Because tasks are now their own collection, they must have a unique ID, so we’ve decided to drop this functionality.

When using version 2 of the API, you can still score tasks with a custom ID. When you fetch tasks with version 2, the custom ID will appear under the idproperty, but the database ID will be under the _id property. When using version 3, you can still specify a unique ID for your task when creating it, but it must be a valid UUID. If the ID already exists, the creation of the task will fail.

dateCreated / createdAt

We’ve changed the name of dateCreated to createdAt. (dateCompleted has not changed.)

updatedAt

Each task contains an updatedAt date field, initially equal to createdAt. It is updated when the task is edited or scored/completed/purchased, and when cron changes the task’s value (cron does not affect that field for Habits that have both + and -).

Tags

Version 2 contained tag IDs as an Object. Version three contains tag IDs as an Array.

Completed To-Dos

In version 2, completed To-Dos were included when all tasks or all To-Dos were returned. In version 3, they are not returned when all tasks are requested with GET /api/v3/tasks/user or when all To-Dos are requested with GET /api/v3/tasks/user?type=todo.

Completed To-Dos can be returned using only GET /api/v3/tasks/user?type=completedTodos. They are returned in order of completion date, with the oldest first. They can not be sorted with /api/v3/tasks/:taskId/move/to/:positionand do not appear in the tasksOrder lists.

Currently, only the 30 most recently completed To-Dos are returned. Soon there will be an option to return all completed To-Dos at once or an option to return all completed To-Dos in batches of 30.

Changes to Challenge Tasks

Challenge Task IDs

In version 2, when you joined a challenge, each task you were given had the same task ID as the copy in the parent challenge’s document (i.e., all participants had a task with an identical ID). In version 3, task IDs are unique across all users, so when you join a challenge, each task you are given has a new ID.

The ID of the task from the parent challenge is stored in the challenge object as taskId, along with the id of the challenge itself.

{
  "success": true,
  "data": [
    {
      id: 'unique-task-id',
      challenge: {
        'taskId': 'id-of-task-in-parent-challenge',
        'id': 'id-of-challenge'
      },
      // more task properties
    },
    // More task data
  ]
}

Challenges

In version 2, challenges contained a members field with a list of user IDs. In version 3, they do not.

The user object contains a challenges field with an array of challenge IDs.

See also “Changes to Challenge Tasks” above.

Groups (Guilds and Parties)

In version 2, groups contained a members field with a list of user IDs. In version 3, they do not.

When a user is in a party, the user object contains a party._id field with the group ID of the user’s party.

The user object contains a guilds field with an array of guild IDs.

Miscellaneous Changes

The transformation buff spookDust has been renamed to spookySparkles. All user accounts have been updated appropriately. This applies to API version 2 and 3. If you use spookDust as the skill key in the v2 route, it will still work.

The healer skill with the key heallAll has been corrected to healAll. If you use heallAll as the skill key in the v2 route, it will still work.

Miscellaneous Additions

Several new routes exist. See the API docs (available after the scheduled maintenance is over) for details.

Closing Remarks

We know these changes are significant, and that it will take some time to upgrade your integrations to be compatible, but we are very excited about the future features and integrations that we can develop using this improved API. If you have any questions, please feel free to reach out to us via the Aspiring Coders Guild and we will be happy to help.

Thank you so much for your patience, for your enthusiasm, and for being part of our open-source community. You all are the lifeblood of Habitica, and we’re lucky to have you battling at our sides.