Files
habitica/website/common/script/ops/scoreTask.js
Sabe Jones 1405cf3ca5 Squashed commit of the following:
commit 39427a75db
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Wed Jun 17 17:33:30 2020 +0200

    To-Dos -> To Do's (#12290)

    * To-Dos -> To Do's

    * To-Do -> To Do

commit d7854f3809
Author: jacobguinther <jacobgguinther@gmail.com>
Date:   Tue Jun 16 13:31:32 2020 -0600

    Remove party banner when below tablet size  (fixes 10827) (#12289)

    * Remove party banner when below tablet size
    - Use Bootstrap breakpoints to remove party banner @ 768px
    - Remove old media query that removed party button on small screens

    * Make progress bars smaller @ 992px
    - Makes room for party piece

commit 0d8df9f1a2
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 16 13:42:28 2020 -0500

    More Armoire content refactoring (#12288)

    * refactor(armoire): still more defaultification

    * fix(refactor): look at array for index, not object

    * refactor(armoire): skip stat processing if item already has notes

commit 679c8f725b
Merge: 274a5f310e ed0cffce76
Author: Melior <admin@habitica.com>
Date:   Tue Jun 16 20:39:36 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit ed0cffce76
Author: Melior <admin@habitica.com>
Date:   Tue Jun 16 20:39:25 2020 +0200

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (2000 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 96.4% (677 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (2000 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 97.5% (81 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (2113 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (702 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/

    Translated using Weblate (Vietnamese)

    Currently translated at 97.0% (520 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 94.0% (504 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

    Translated using Weblate (Russian)

    Currently translated at 98.2% (690 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

    Translated using Weblate (Japanese)

    Currently translated at 95.4% (670 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Japanese)

    Currently translated at 95.1% (79 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

    Translated using Weblate (Vietnamese)

    Currently translated at 92.3% (495 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (57 of 57 strings)

    Translation: Habitica/Spells
    Translate-URL: https://translate.habitica.com/projects/habitica/spells/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (63 of 63 strings)

    Translation: Habitica/Defaulttasks
    Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/ro/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (143 of 143 strings)

    Translation: Habitica/Pets
    Translate-URL: https://translate.habitica.com/projects/habitica/pets/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/

    Translated using Weblate (Japanese)

    Currently translated at 99.6% (534 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Russian)

    Currently translated at 99.5% (210 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

    Translated using Weblate (Vietnamese)

    Currently translated at 90.8% (487 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Japanese)

    Currently translated at 98.8% (530 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

    Translated using Weblate (Vietnamese)

    Currently translated at 83.2% (446 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

    Translated using Weblate (Dutch)

    Currently translated at 94.4% (1996 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 95.4% (670 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

    Translated using Weblate (Japanese)

    Currently translated at 98.3% (527 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

commit 274a5f310e
Merge: d961b8aaaf bceccd55bf
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 16 13:36:42 2020 -0500

    Merge branch 'release' into develop

commit d961b8aaaf
Author: Frank Maximus <frank@healingjourneyman.com>
Date:   Tue Jun 16 19:06:14 2020 +0200

    #9498: Hide Wolf-Veteran and LionCub-Ethereal (#12292)

commit 430ff64875
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 15:12:39 2020 +0200

    build(deps): bump @vue/cli-plugin-eslint in /website/client (#12301)

    Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-eslint)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit ac99c6c3c5
Merge: 1be03d741a a43f410031
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Tue Jun 16 15:04:30 2020 +0200

    build(deps): bump @vue/cli-service in /website/client (#12305)

    Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-service)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 1be03d741a
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 15:04:13 2020 +0200

    build(deps): bump @vue/cli-plugin-router in /website/client (#12304)

    Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-router)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit a43f410031
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 13:00:43 2020 +0000

    build(deps): bump @vue/cli-service in /website/client

    Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-service)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

commit b84395b17d
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:58:02 2020 +0200

    build(deps): bump vue-router from 3.3.2 to 3.3.4 in /website/client (#12306)

    Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.2 to 3.3.4.
    - [Release notes](https://github.com/vuejs/vue-router/releases)
    - [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-router/compare/v3.3.2...v3.3.4)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit d5d4afe613
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:43 2020 +0200

    build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12303)

    Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-unit-mocha)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit def62d5716
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:37 2020 +0200

    build(deps): bump habitica-markdown in /website/client (#12302)

    Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 2.0.0 to 2.0.2.
    - [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
    - [Commits](https://github.com/HabitRPG/habitica-markdown/commits/v2.0.2)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 5846898592
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:25 2020 +0200

    build(deps): bump @vue/cli-plugin-babel in /website/client (#12299)

    Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-babel)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 524aac4d95
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:11 2020 +0200

    build(deps): bump helmet from 3.22.0 to 3.23.0 (#12297)

    Bumps [helmet](https://github.com/helmetjs/helmet) from 3.22.0 to 3.23.0.
    - [Release notes](https://github.com/helmetjs/helmet/releases)
    - [Changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/helmetjs/helmet/compare/v3.22.0...v3.23.0)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 92dc332ab9
Merge: 7902db2edc bcd3e2851c
Author: Melior <admin@habitica.com>
Date:   Fri Jun 12 00:02:52 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit 7902db2edc
Merge: f3ea5f0b62 e6b65871e7
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 11 16:38:48 2020 -0500

    Merge branch 'release' into develop

commit f3ea5f0b62
Author: negue <negue@users.noreply.github.com>
Date:   Thu Jun 11 21:14:33 2020 +0200

    Tasks Redesign: Colors, Title, Notes, Habit Controls, Button Style  (#12274)

    * extract color changes + habit-controls out of #12142

    * extract title / notes changes from #12142

    * extracted delete btn + style fixes of #12142

    * fix taskModal footer + advancedSettings

    * extracted the button style changes from #12142

    * remove un-used method

commit bcd3e2851c
Author: Melior <admin@habitica.com>
Date:   Thu Jun 11 20:46:57 2020 +0200

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (83 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

    Translated using Weblate (Latin)

    Currently translated at 85.5% (71 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/

    Translated using Weblate (Russian)

    Currently translated at 97.3% (2056 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (German)

    Currently translated at 99.8% (2110 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

    Translated using Weblate (Russian)

    Currently translated at 99.4% (533 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (Japanese)

    Currently translated at 97.9% (525 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 99.6% (534 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (4 of 4 strings)

    Translation: Habitica/Noscript
    Translate-URL: https://translate.habitica.com/projects/habitica/noscript/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (12 of 12 strings)

    Translation: Habitica/Merch
    Translate-URL: https://translate.habitica.com/projects/habitica/merch/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (230 of 230 strings)

    Translation: Habitica/Character
    Translate-URL: https://translate.habitica.com/projects/habitica/character/ca/

    Translated using Weblate (Vietnamese)

    Currently translated at 80.9% (434 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (28 of 28 strings)

    Translation: Habitica/Rebirth
    Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (31 of 31 strings)

    Translation: Habitica/Maintenance
    Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (27 of 27 strings)

    Translation: Habitica/Loginincentives
    Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (6 of 6 strings)

    Translation: Habitica/Inventory
    Translate-URL: https://translate.habitica.com/projects/habitica/inventory/ca/

    Translated using Weblate (Catalan)

    Currently translated at 82.3% (1740 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (63 of 63 strings)

    Translation: Habitica/Defaulttasks
    Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (15 of 15 strings)

    Translation: Habitica/Death
    Translate-URL: https://translate.habitica.com/projects/habitica/death/ca/

    Translated using Weblate (Catalan)

    Currently translated at 99.1% (123 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ca/

    Translated using Weblate (Portuguese)

    Currently translated at 83.0% (1754 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

    Translated using Weblate (Portuguese)

    Currently translated at 83.0% (1754 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

    Translated using Weblate (French)

    Currently translated at 100.0% (2113 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

    Translated using Weblate (Russian)

    Currently translated at 98.8% (530 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (Japanese)

    Currently translated at 97.5% (523 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (French)

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

    Translated using Weblate (Spanish)

    Currently translated at 94.6% (53 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/es/

    Translated using Weblate (Spanish)

    Currently translated at 99.1% (123 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es/

    Translated using Weblate (Spanish)

    Currently translated at 97.1% (205 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/

commit 5957930709
Author: Frank Maximus <frank@healingjourneyman.com>
Date:   Wed Jun 10 15:01:07 2020 +0200

    Display descriptive error when mongod isn't running (#12196)

    Add test:prepare:mongo task to check is mongod is running.

    Fixes: #12101

commit 1df4e687f1
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Wed Jun 10 14:57:57 2020 +0200

    fix(mentions): do not fill empty mentions with following username, fixes #12272

commit 3063a38d60
Merge: 4b489fe4ca 51d20ef7e8
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 9 15:28:16 2020 -0500

    Merge branch 'release' into develop

commit 4b489fe4ca
Merge: afd50ddc2d 074004ec75
Author: Melior <admin@habitica.com>
Date:   Tue Jun 9 21:21:14 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit 074004ec75
Author: Melior <admin@habitica.com>
Date:   Tue Jun 9 21:21:04 2020 +0200

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (1994 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 98.2% (520 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Catalan)

    Currently translated at 92.0% (487 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ca/

    Translated using Weblate (Russian)

    Currently translated at 93.9% (234 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

    Translated using Weblate (Russian)

    Currently translated at 97.4% (2053 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (522 of 522 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (French)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/

    Translated using Weblate (Russian)

    Currently translated at 99.2% (518 of 522 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (Vietnamese)

    Currently translated at 80.7% (427 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (German)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/

commit afd50ddc2d
Merge: 61ca500013 e31ce11052
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 9 14:17:53 2020 -0500

    Merge branch 'release' into develop

commit 61ca500013
Merge: 9ab79ef225 630c848ff5
Author: Melior <admin@habitica.com>
Date:   Mon Jun 8 21:50:11 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit 630c848ff5
Author: Melior <admin@habitica.com>
Date:   Mon Jun 8 16:37:50 2020 +0200

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/vi/

    Translated using Weblate (Russian)

    Currently translated at 93.5% (233 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

    Translated using Weblate (Russian)

    Currently translated at 97.2% (2049 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (1994 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 97.9% (518 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

    Translated using Weblate (Japanese)

    Currently translated at 97.5% (516 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

    Translated using Weblate (Japanese)

    Currently translated at 97.1% (514 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.5% (1992 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (German)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

    Translated using Weblate (Japanese)

    Currently translated at 96.7% (512 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 99.9% (2105 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

    Translated using Weblate (Japanese)

    Currently translated at 96.4% (510 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.4% (1990 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Dutch)

    Currently translated at 94.4% (1990 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (57 of 57 strings)

    Translation: Habitica/Spells
    Translate-URL: https://translate.habitica.com/projects/habitica/spells/ru/

    Translated using Weblate (Russian)

    Currently translated at 97.6% (168 of 172 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/

    Translated using Weblate (Russian)

    Currently translated at 98.3% (178 of 181 strings)

    Translation: Habitica/Limited
    Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

    Translated using Weblate (Russian)

    Currently translated at 96.6% (2037 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.6% (297 of 298 strings)

    Translation: Habitica/Generic
    Translate-URL: https://translate.habitica.com/projects/habitica/generic/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (328 of 328 strings)

    Translation: Habitica/Front
    Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/

    Translated using Weblate (Russian)

    Currently translated at 98.2% (55 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (15 of 15 strings)

    Translation: Habitica/Death
    Translate-URL: https://translate.habitica.com/projects/habitica/death/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.1% (690 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

    Translated using Weblate (German)

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (126 of 126 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (70 of 70 strings)

    Translation: Habitica/Contrib
    Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (230 of 230 strings)

    Translation: Habitica/Character
    Translate-URL: https://translate.habitica.com/projects/habitica/character/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (134 of 134 strings)

    Translation: Habitica/Challenge
    Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.0% (209 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

    Translated using Weblate (Polish)

    Currently translated at 83.6% (1763 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/

    Translated using Weblate (Dutch)

    Currently translated at 94.3% (1989 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

    Translated using Weblate (Vietnamese)

    Currently translated at 96.4% (54 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 90.3% (75 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.2% (691 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (134 of 134 strings)

    Translation: Habitica/Challenge
    Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.3% (1987 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (181 of 181 strings)

    Translation: Habitica/Limited
    Translate-URL: https://translate.habitica.com/projects/habitica/limited/nl/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

    Translated using Weblate (Dutch)

    Currently translated at 94.2% (1985 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Spanish)

    Currently translated at 91.4% (1927 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/en_GB/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hant/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hant/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/en_GB/

    Translated using Weblate (Vietnamese)

    Currently translated at 85.5% (71 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (83 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (172 of 172 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (328 of 328 strings)

    Translation: Habitica/Front
    Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 99.3% (2094 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

    Translated using Weblate (French)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fr/

    Translated using Weblate (Spanish)

    Currently translated at 99.7% (357 of 358 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/es/

    Translated using Weblate (French)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (28 of 28 strings)

    Translation: Habitica/Rebirth
    Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.1% (1983 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (78 of 78 strings)

    Translation: Habitica/Contrib
    Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ja/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (83 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/nl/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/

    Translated using Weblate (Japanese)

    Currently translated at 96.0% (508 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
2020-06-18 13:29:30 -05:00

357 lines
13 KiB
JavaScript

import timesLodash from 'lodash/times';
import reduce from 'lodash/reduce';
import moment from 'moment';
import max from 'lodash/max';
import {
NotAuthorized,
} from '../libs/errors';
import i18n from '../i18n';
import updateStats from '../fns/updateStats';
import crit from '../fns/crit';
import statsComputed from '../libs/statsComputed';
import { checkOnboardingStatus } from '../libs/onboarding';
const MAX_TASK_VALUE = 21.27;
const MIN_TASK_VALUE = -47.27;
const CLOSE_ENOUGH = 0.00001;
function _getTaskValue (taskValue) {
if (taskValue < MIN_TASK_VALUE) {
return MIN_TASK_VALUE;
} if (taskValue > MAX_TASK_VALUE) {
return MAX_TASK_VALUE;
}
return taskValue;
}
// Calculates the next task.value based on direction
// Uses a capped inverse log y=.95^x, y>= -5
function _calculateDelta (task, direction, cron) {
// Min/max on task redness
const currVal = _getTaskValue(task.value);
let nextDelta = (0.9747 ** currVal) * (direction === 'down' ? -1 : 1);
// Checklists
if (task.checklist && task.checklist.length > 0) {
// If the Daily, only dock them a portion based on their checklist completion
if (direction === 'down' && task.type === 'daily' && cron) {
nextDelta *= 1 - reduce(
task.checklist,
(m, i) => m + (i.completed ? 1 : 0),
0,
) / task.checklist.length;
}
// If To Do, point-match the TD per checklist item completed
if (task.type === 'todo' && !cron) {
nextDelta *= 1 + reduce(task.checklist, (m, i) => m + (i.completed ? 1 : 0), 0);
}
}
return nextDelta;
}
// Approximates the reverse delta for the task value
// This is meant to return the task value to its original value when unchecking a task.
// First, calculate the value using the normal way for our first guess although
// it will be a bit off
function _calculateReverseDelta (task, direction) {
const currVal = _getTaskValue(task.value);
let testVal = currVal + (0.9747 ** currVal) * (direction === 'down' ? -1 : 1);
// Now keep moving closer to the original value until we get "close enough"
// Check how close we are to the original value by computing the delta off our guess
// and looking at the difference between that and our current value.
while (true) { // eslint-disable-line no-constant-condition
const calc = testVal + (0.9747 ** testVal);
const diff = currVal - calc;
if (Math.abs(diff) < CLOSE_ENOUGH) break;
if (diff > 0) {
testVal -= diff;
} else {
testVal += diff;
}
}
// When we get close enough, return the difference between our approximated value
// and the current value. This will be the delta calculated from the original value
// before the task was checked.
let nextDelta = testVal - currVal;
// Checklists - If To Do, point-match the TD per checklist item completed
if (task.checklist && task.checklist.length > 0 && task.type === 'todo') {
nextDelta *= 1 + reduce(task.checklist, (m, i) => m + (i.completed ? 1 : 0), 0);
}
return nextDelta;
}
function _gainMP (user, val) {
val *= user._tmp.crit || 1; // eslint-disable-line no-param-reassign
user.stats.mp += val;
if (user.stats.mp >= statsComputed(user).maxMP) user.stats.mp = statsComputed(user).maxMP;
if (user.stats.mp < 0) {
user.stats.mp = 0;
}
}
// HP modifier
// ===== CONSTITUTION =====
// TODO Decreases HP loss from bad habits / missed dailies by 0.5% per point.
function _subtractPoints (user, task, stats, delta) {
let conBonus = 1 - statsComputed(user).con / 250;
if (conBonus < 0.1) conBonus = 0.1;
const hpMod = delta * conBonus * task.priority * 2; // constant 2 multiplier for better results
stats.hp += Math.round(hpMod * 10) / 10; // round to 1dp
return stats.hp;
}
function _addPoints (user, task, stats, direction, delta) {
const _crit = user._tmp.crit || 1;
// Exp Modifier
// ===== Intelligence =====
// TODO Increases Experience gain by .2% per point.
const intBonus = 1 + statsComputed(user).int * 0.025;
stats.exp += Math.round(delta * intBonus * task.priority * _crit * 6);
// GP modifier
// ===== PERCEPTION =====
// TODO Increases Gold gained from tasks by .3% per point.
const perBonus = 1 + statsComputed(user).per * 0.02;
const gpMod = delta * task.priority * _crit * perBonus;
if (task.streak) {
const currStreak = direction === 'down' ? task.streak - 1 : task.streak;
const streakBonus = currStreak / 100 + 1; // eg, 1-day streak is 1.01, 2-day is 1.02, etc
const afterStreak = gpMod * streakBonus;
if (currStreak > 0 && gpMod > 0) {
// keep this on-hand for later, so we can notify streak-bonus
user._tmp.streakBonus = afterStreak - gpMod;
}
stats.gp += afterStreak;
} else {
stats.gp += gpMod;
}
}
function _changeTaskValue (user, task, direction, times, cron) {
let addToDelta = 0;
// ===== CRITICAL HITS =====
// allow critical hit only when checking off a task, not when unchecking it:
const _crit = direction === 'up' ? crit.crit(user) : 1;
// if there was a crit, alert the user via notification
if (_crit > 1) user._tmp.crit = _crit;
// If multiple days have passed, multiply times days missed
timesLodash(times, () => {
// Each iteration calculate the nextDelta, which is then accumulated in the total delta.
const nextDelta = !cron && direction === 'down' ? _calculateReverseDelta(task, direction) : _calculateDelta(task, direction, cron);
if (task.type !== 'reward') {
if (user.preferences.automaticAllocation === true && user.preferences.allocationMode === 'taskbased' && !(task.type === 'todo' && direction === 'down')) {
user.stats.training[task.attribute] += nextDelta;
}
if (direction === 'up') { // Make progress on quest based on STR
user.party.quest.progress.up = user.party.quest.progress.up || 0;
const prevProgress = user.party.quest.progress.up;
if (task.type === 'todo' || task.type === 'daily') {
user.party.quest.progress.up += nextDelta * _crit * (1 + statsComputed(user).str / 200);
} else if (task.type === 'habit') {
user.party.quest.progress.up += nextDelta * _crit * (0.5 + statsComputed(user).str / 400);
}
if (!user._tmp.quest) user._tmp.quest = {};
user._tmp.quest.progressDelta = user.party.quest.progress.up - prevProgress;
}
task.value += nextDelta;
}
addToDelta += nextDelta;
});
return addToDelta;
}
function _updateCounter (task, direction, times) {
if (direction === 'up') {
task.counterUp += times;
} else {
task.counterDown += times;
}
}
function _lastHistoryEntryWasToday (lastHistoryEntry, user) {
if (!lastHistoryEntry || !lastHistoryEntry.date) {
return false;
}
const { timezoneOffset } = user.preferences;
const { dayStart } = user.preferences;
// Adjust the last entry date according to the user's timezone and CDS
const dateWithTimeZone = moment(lastHistoryEntry.date).zone(timezoneOffset);
if (dateWithTimeZone.hour() < dayStart) dateWithTimeZone.subtract(1, 'day');
return moment().zone(timezoneOffset).isSame(dateWithTimeZone, 'day');
}
function _updateLastHistoryEntry (lastHistoryEntry, task, direction, times) {
lastHistoryEntry.value = task.value;
lastHistoryEntry.date = Number(new Date());
// @TODO remove this extra check after migration
// has run to set scoredUp and scoredDown in every task
lastHistoryEntry.scoredUp = lastHistoryEntry.scoredUp || 0;
lastHistoryEntry.scoredDown = lastHistoryEntry.scoredDown || 0;
if (direction === 'up') {
lastHistoryEntry.scoredUp += times;
} else {
lastHistoryEntry.scoredDown += times;
}
}
export default function scoreTask (options = {}, req = {}, analytics) {
const {
user, task, direction, times = 1, cron = false,
} = options;
let delta = 0;
const stats = {
gp: user.stats.gp,
hp: user.stats.hp,
exp: user.stats.exp,
};
if (
task.group && task.group.approval && task.group.approval.required
&& !task.group.approval.approved
) return 0;
// This is for setting one-time temporary flags,
// such as streakBonus or itemDropped. Useful for notifying
// the API consumer, then cleared afterwards
user._tmp = {};
// If they're trying to purchase a too-expensive reward, don't allow them to do that.
if (task.value > user.stats.gp && task.type === 'reward') throw new NotAuthorized(i18n.t('messageNotEnoughGold', req.language));
if (task.type === 'habit') {
delta += _changeTaskValue(user, task, direction, times, cron);
// Add habit value to habit-history (if different)
if (delta > 0) {
_addPoints(user, task, stats, direction, delta);
} else {
_subtractPoints(user, task, stats, delta);
}
_gainMP(user, max([0.25, 0.0025 * statsComputed(user).maxMP]) * (direction === 'down' ? -1 : 1));
// Save history entry for habit
task.history = task.history || [];
const historyLength = task.history.length;
const lastHistoryEntry = task.history[historyLength - 1];
if (_lastHistoryEntryWasToday(lastHistoryEntry, user)) {
_updateLastHistoryEntry(lastHistoryEntry, task, direction, times);
if (task.markModified) {
task.markModified(`history.${historyLength - 1}`);
}
} else {
task.history.push({
date: Number(new Date()),
value: task.value,
scoredUp: direction === 'up' ? 1 : 0,
scoredDown: direction === 'down' ? 1 : 0,
});
}
_updateCounter(task, direction, times);
} else if (task.type === 'daily') {
if (cron) {
delta += _changeTaskValue(user, task, direction, times, cron);
_subtractPoints(user, task, stats, delta);
if (!user.stats.buffs.streaks) task.streak = 0;
} else {
delta += _changeTaskValue(user, task, direction, times, cron);
if (direction === 'down') delta = _calculateDelta(task, direction, cron); // recalculate delta for unchecking so the gp and exp come out correctly
// obviously for delta>0, but also a trick to undo accidental checkboxes
_addPoints(user, task, stats, direction, delta);
_gainMP(user, max([1, 0.01 * statsComputed(user).maxMP]) * (direction === 'down' ? -1 : 1));
if (direction === 'up') {
task.streak += 1;
// Give a streak achievement when the streak is a multiple of 21
if (task.streak !== 0 && task.streak % 21 === 0) {
user.achievements.streak = user.achievements.streak ? user.achievements.streak + 1 : 1;
if (user.addNotification) user.addNotification('STREAK_ACHIEVEMENT');
}
task.completed = true;
// Save history entry for daily
task.history = task.history || [];
const historyEntry = {
date: Number(new Date()),
value: task.value,
};
task.history.push(historyEntry);
} else if (direction === 'down') {
// Remove a streak achievement if streak was a multiple of 21 and the daily was undone
if (task.streak !== 0 && task.streak % 21 === 0) {
user.achievements.streak = user.achievements.streak ? user.achievements.streak - 1 : 0;
}
task.streak -= 1;
task.completed = false;
// Delete history entry when daily unchecked
if (task.history || task.history.length > 0) {
task.history.splice(-1, 1);
}
}
}
} else if (task.type === 'todo') {
if (cron) { // don't touch stats on cron
delta += _changeTaskValue(user, task, direction, times, cron);
} else {
if (direction === 'up') {
task.dateCompleted = new Date();
task.completed = true;
} else if (direction === 'down') {
task.completed = false;
task.dateCompleted = undefined;
}
delta += _changeTaskValue(user, task, direction, times, cron);
if (direction === 'down') delta = _calculateDelta(task, direction, cron); // recalculate delta for unchecking so the gp and exp come out correctly
_addPoints(user, task, stats, direction, delta);
// MP++ per checklist item in ToDo, bonus per CLI
const multiplier = max([reduce(task.checklist, (m, i) => m + (i.completed ? 1 : 0), 1), 1]);
_gainMP(user, max([multiplier, 0.01 * statsComputed(user).maxMP * multiplier]) * (direction === 'down' ? -1 : 1));
}
} else if (task.type === 'reward') {
// Don't adjust values for rewards
delta += _changeTaskValue(user, task, direction, times, cron);
// purchase item
stats.gp -= task.value;
}
req.yesterDailyScored = task.yesterDailyScored;
updateStats(user, stats, req);
if (!user.achievements.completedTask && cron === false && direction === 'up' && user.addAchievement) {
user.addAchievement('completedTask');
checkOnboardingStatus(user, req, analytics);
}
return [delta];
}